• Skip to content
  • Skip to link menu
KDE 4.1 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

KWin

notifications.cpp

Go to the documentation of this file.
00001 /********************************************************************
00002  KWin - the KDE window manager
00003  This file is part of the KDE project.
00004 
00005 Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
00006 Copyright (C) 2003 Lubos Lunak <l.lunak@kde.org>
00007 
00008 This program is free software; you can redistribute it and/or modify
00009 it under the terms of the GNU General Public License as published by
00010 the Free Software Foundation; either version 2 of the License, or
00011 (at your option) any later version.
00012 
00013 This program is distributed in the hope that it will be useful,
00014 but WITHOUT ANY WARRANTY; without even the implied warranty of
00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016 GNU General Public License for more details.
00017 
00018 You should have received a copy of the GNU General Public License
00019 along with this program.  If not, see <http://www.gnu.org/licenses/>.
00020 *********************************************************************/
00021 
00022 #include "notifications.h"
00023 #include <knotification.h>
00024 
00025 #include "client.h"
00026 
00027 namespace KWin
00028 {
00029 
00030 QString Notify::eventToName( Event e )
00031     {
00032     QString event;
00033     switch ( e ) 
00034         {
00035         case Activate:
00036             event = "activate";
00037             break;
00038         case Close:
00039             event = "close";
00040             break;
00041         case Minimize:
00042             event = "minimize";
00043             break;
00044         case UnMinimize:
00045             event = "unminimize";
00046             break;
00047         case Maximize:
00048             event = "maximize";
00049             break;
00050         case UnMaximize:
00051             event = "unmaximize";
00052             break;
00053         case OnAllDesktops:
00054             event = "on_all_desktops";
00055             break;
00056         case NotOnAllDesktops:
00057             event = "not_on_all_desktops";
00058             break;
00059         case New:
00060             event = "new";
00061             break;
00062         case Delete:
00063             event = "delete";
00064             break;
00065         case TransNew:
00066             event = "transnew";
00067             break;
00068         case TransDelete:
00069             event = "transdelete";
00070             break;
00071         case ShadeUp:
00072             event = "shadeup";
00073             break;
00074         case ShadeDown:
00075             event = "shadedown";
00076             break;
00077         case MoveStart:
00078             event = "movestart";
00079             break;
00080         case MoveEnd:
00081             event = "moveend";
00082             break;
00083         case ResizeStart:
00084             event = "resizestart";
00085             break;
00086         case ResizeEnd:
00087             event = "resizeend";
00088             break;
00089         case DemandAttentionCurrent:
00090             event = "demandsattentioncurrent";
00091             break;
00092         case DemandAttentionOther:
00093             event = "demandsattentionother";
00094             break;
00095         default:
00096             if ((e > DesktopChange) && (e <= DesktopChange+20))
00097             {
00098             event = QString("desktop%1").arg(e-DesktopChange);
00099             }
00100         break;
00101         }
00102     return event;
00103     }
00104 
00105 static bool forgetIt = false;
00106 QList< Notify::EventData > Notify::pending_events;
00107 
00108 bool Notify::raise( Event e, const QString& message, Client* c )
00109     {
00110     if ( forgetIt )
00111         return false; // no connection was possible, don't try each time
00112 
00113     QString event = eventToName( e );
00114     if ( event.isNull() )
00115         return false;
00116 
00117 // There may be a deadlock if KNotify event is sent while KWin has X grabbed.
00118 // If KNotify is not running, KLauncher may do X requests (startup notification, whatever)
00119 // that will block it. And KNotifyClient waits for the launch to succeed, which means
00120 // KLauncher waits for X and KWin waits for KLauncher. So postpone events in such case.
00121     if( grabbedXServer())
00122         {
00123         EventData data;
00124         data.event = event;
00125         data.message = message;
00126         data.window = c ? c->window() : 0;
00127         pending_events.append( data );
00128         return true;
00129         }
00130 
00131     
00132     return KNotification::event( event, message /*, QPixmap() , c ? c->window() : 0*/ ); //FIXME get the widget ?
00133     }
00134 
00135 void Notify::sendPendingEvents()
00136     {
00137     while( !pending_events.isEmpty())
00138         {
00139         EventData data = pending_events.first();
00140         pending_events.pop_front();
00141         if( !forgetIt )
00142             KNotification::event( data.event, data.message /*  , QPixmap() , data.window  */ );
00143         }
00144     }
00145 
00146 } // namespace

KWin

Skip menu "KWin"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • KWin
  •   KWin Libraries
  • Libraries
  •   libkworkspace
  •   libplasma
  •   libsolidcontrol
  •   libtaskmanager
  • Plasma
  •   Animators
  •   Applets
  •   Engines
  • Solid Modules
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal