• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • twin
 

twin

  • twin
notifications.cpp
1/*****************************************************************
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5Copyright (C) 1999, 2000 Matthias Ettrich <ettrich@kde.org>
6Copyright (C) 2003 Lubos Lunak <l.lunak@kde.org>
7
8You can Freely distribute this program under the GNU General Public
9License. See the file "COPYING" for the exact licensing terms.
10******************************************************************/
11
12#include "notifications.h"
13#include <knotifyclient.h>
14
15#include "client.h"
16
17namespace KWinInternal
18{
19
20TQString Notify::eventToName( Event e )
21 {
22 TQString event;
23 switch ( e )
24 {
25 case Activate:
26 event = "activate";
27 break;
28 case Close:
29 event = "close";
30 break;
31 case Minimize:
32 event = "minimize";
33 break;
34 case UnMinimize:
35 event = "unminimize";
36 break;
37 case Maximize:
38 event = "maximize";
39 break;
40 case UnMaximize:
41 event = "unmaximize";
42 break;
43 case OnAllDesktops:
44 event = "on_all_desktops";
45 break;
46 case NotOnAllDesktops:
47 event = "not_on_all_desktops";
48 break;
49 case New:
50 event = "new";
51 break;
52 case Delete:
53 event = "delete";
54 break;
55 case TransNew:
56 event = "transnew";
57 break;
58 case TransDelete:
59 event = "transdelete";
60 break;
61 case ShadeUp:
62 event = "shadeup";
63 break;
64 case ShadeDown:
65 event = "shadedown";
66 break;
67 case MoveStart:
68 event = "movestart";
69 break;
70 case MoveEnd:
71 event = "moveend";
72 break;
73 case ResizeStart:
74 event = "resizestart";
75 break;
76 case ResizeEnd:
77 event = "resizeend";
78 break;
79 case DemandAttentionCurrent:
80 event = "demandsattentioncurrent";
81 break;
82 case DemandAttentionOther:
83 event = "demandsattentionother";
84 break;
85 default:
86 if ((e > DesktopChange) && (e <= DesktopChange+20))
87 {
88 event = TQString("desktop%1").arg(e-DesktopChange);
89 }
90 break;
91 }
92 return event;
93 }
94
95static bool forgetIt = FALSE;
96TQValueList< Notify::EventData > Notify::pending_events;
97
98bool Notify::raise( Event e, const TQString& message, Client* c )
99 {
100 if ( forgetIt )
101 return false; // no connection was possible, don't try each time
102
103 TQString event = eventToName( e );
104 if ( !event )
105 return false;
106
107// There may be a deadlock if KNotify event is sent while KWin has X grabbed.
108// If KNotify is not running, TDELauncher may do X requests (startup notification, whatever)
109// that will block it. And KNotifyClient waits for the launch to succeed, which means
110// TDELauncher waits for X and KWin waits for TDELauncher. So postpone events in such case.
111 if( grabbedXServer())
112 {
113 EventData data;
114 data.event = event;
115 data.message = message;
116 data.window = c ? c->window() : 0;
117 pending_events.append( data );
118 return true;
119 }
120
121 forgetIt= !KNotifyClient::event( c ? c->window() : 0, event, message );
122 return !forgetIt;
123 }
124
125void Notify::sendPendingEvents()
126 {
127 while( !pending_events.isEmpty())
128 {
129 EventData data = pending_events.first();
130 pending_events.pop_front();
131 if( !forgetIt )
132 forgetIt= !KNotifyClient::event( data.window, data.event, data.message );
133 }
134 }
135
136bool Notify::makeDemandAttention( Event e )
137 {
138 TQString event = eventToName( e );
139 if( !event )
140 return false;
141 int rep = KNotifyClient::getPresentation( event );
142 if( rep == -1 )
143 rep = KNotifyClient::getDefaultPresentation( event );
144 return rep != -1 && ( rep & KNotifyClient::Taskbar );
145 }
146
147} // namespace

twin

Skip menu "twin"
  • Main Page
  • Alphabetical List
  • Class List
  • File List
  • Class Members

twin

Skip menu "twin"
  • kate
  • libkonq
  • twin
  •   lib
Generated for twin by doxygen 1.9.4
This website is maintained by Timothy Pearson.