• Skip to content
  • Skip to link menu
KDE 4.2 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 static bool forgetIt = false;
00031 QList< Notify::EventData > Notify::pending_events;
00032 
00033 bool Notify::raise( Event e, const QString& message, Client* c )
00034     {
00035     if ( forgetIt )
00036         return false; // no connection was possible, don't try each time
00037 
00038     QString event;
00039     KNotification::NotificationFlags flags = KNotification::CloseOnTimeout;
00040     switch ( e ) 
00041         {
00042         case Activate:
00043             event = "activate";
00044             break;
00045         case Close:
00046             event = "close";
00047             break;
00048         case Minimize:
00049             event = "minimize";
00050             break;
00051         case UnMinimize:
00052             event = "unminimize";
00053             break;
00054         case Maximize:
00055             event = "maximize";
00056             break;
00057         case UnMaximize:
00058             event = "unmaximize";
00059             break;
00060         case OnAllDesktops:
00061             event = "on_all_desktops";
00062             break;
00063         case NotOnAllDesktops:
00064             event = "not_on_all_desktops";
00065             break;
00066         case New:
00067             event = "new";
00068             break;
00069         case Delete:
00070             event = "delete";
00071             break;
00072         case TransNew:
00073             event = "transnew";
00074             break;
00075         case TransDelete:
00076             event = "transdelete";
00077             break;
00078         case ShadeUp:
00079             event = "shadeup";
00080             break;
00081         case ShadeDown:
00082             event = "shadedown";
00083             break;
00084         case MoveStart:
00085             event = "movestart";
00086             break;
00087         case MoveEnd:
00088             event = "moveend";
00089             break;
00090         case ResizeStart:
00091             event = "resizestart";
00092             break;
00093         case ResizeEnd:
00094             event = "resizeend";
00095             break;
00096         case DemandAttentionCurrent:
00097             event = "demandsattentioncurrent";
00098             break;
00099         case DemandAttentionOther:
00100             event = "demandsattentionother";
00101             break;
00102         case CompositingSlow:
00103             event = "compositingslow";
00104             flags = KNotification::Persistent;
00105             break;
00106         default:
00107             if ((e > DesktopChange) && (e <= DesktopChange+20))
00108             {
00109             event = QString("desktop%1").arg(e-DesktopChange);
00110             }
00111         break;
00112         }
00113     if ( event.isNull() )
00114         return false;
00115 
00116 // There may be a deadlock if KNotify event is sent while KWin has X grabbed.
00117 // If KNotify is not running, KLauncher may do X requests (startup notification, whatever)
00118 // that will block it. And KNotifyClient waits for the launch to succeed, which means
00119 // KLauncher waits for X and KWin waits for KLauncher. So postpone events in such case.
00120     if( grabbedXServer())
00121         {
00122         EventData data;
00123         data.event = event;
00124         data.message = message;
00125         data.window = c ? c->window() : 0;
00126         data.flags = flags;
00127         pending_events.append( data );
00128         return true;
00129         }
00130 
00131     
00132     return KNotification::event( event, message, QPixmap(), NULL /* TODO c ? c->window() : 0*/, flags );
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(), NULL /* TODO data.window*/, data.flags );
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
  •   libsolidcontrol
  •   libtaskmanager
  • Plasma
  •   Animators
  •   Applets
  •   Engines
  • Solid Modules
Generated for API Reference by doxygen 1.5.7
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