summaryrefslogtreecommitdiff
authorsandman <sandman>2002-08-28 23:18:58 (UTC)
committer sandman <sandman>2002-08-28 23:18:58 (UTC)
commit178bd471d12a88862fb4ac1a17842ea0fd63c160 (patch) (unidiff)
treec37b10465eca3b6c2431b7999fe32eb4692f12ee
parent186bdeb08c0d9ccd78177310cf9f69ea80b76a96 (diff)
downloadopie-178bd471d12a88862fb4ac1a17842ea0fd63c160.zip
opie-178bd471d12a88862fb4ac1a17842ea0fd63c160.tar.gz
opie-178bd471d12a88862fb4ac1a17842ea0fd63c160.tar.bz2
Workaround for a possible race condition in the QWS server (mostly OZ)
(clipboard handling in Qt/E is a mess)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/clipboardapplet/clipboard.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/core/applets/clipboardapplet/clipboard.cpp b/core/applets/clipboardapplet/clipboard.cpp
index 4fbdf6f..3099a84 100644
--- a/core/applets/clipboardapplet/clipboard.cpp
+++ b/core/applets/clipboardapplet/clipboard.cpp
@@ -107,53 +107,53 @@ static const char * paste_xpm[] = {
107"<1s224keee|b4 ", 107"<1s224keee|b4 ",
108"}r2itmkeee]]44", 108"}r2itmkeee]]44",
109"<9iitmkeeehkw.", 109"<9iitmkeeehkw.",
110"<lt-u4keeb)pn.", 110"<lt-u4keeb)pn.",
111"<fu-umkebhp(0.", 111"<fu-umkebhp(0.",
112"<cugg4kbh)_(q.", 112"<cugg4kbh)_(q.",
113"<cyyymk))p(%q.", 113"<cyyymk))p(%q.",
114",5vvv4k)p_%[q.", 114",5vvv4k)p_%[q.",
115" ...$mljnn0qd.", 115" ...$mljnn0qd.",
116" 4.......,"}; 116" 4.......,"};
117 117
118 118
119ClipboardApplet::ClipboardApplet( QWidget *parent, const char *name ) : QWidget( parent, name ) 119ClipboardApplet::ClipboardApplet( QWidget *parent, const char *name ) : QWidget( parent, name )
120{ 120{
121 setFixedWidth ( 14 ); 121 setFixedWidth ( 14 );
122 setFixedHeight ( 18 ); 122 setFixedHeight ( 18 );
123 m_clipboardPixmap = QPixmap ( paste_xpm ); 123 m_clipboardPixmap = QPixmap ( paste_xpm );
124 124
125 m_timer = new QTimer ( this ); 125 m_timer = new QTimer ( this );
126 126
127 connect ( QApplication::clipboard ( ), SIGNAL( dataChanged ( )), this, SLOT( newData ( ))); 127 connect ( QApplication::clipboard ( ), SIGNAL( dataChanged ( )), this, SLOT( newData ( )));
128 connect ( m_timer, SIGNAL( timeout ( )), this, SLOT( newData ( ))); 128 connect ( m_timer, SIGNAL( timeout ( )), this, SLOT( newData ( )));
129 connect ( qApp, SIGNAL( aboutToQuit ( )), this, SLOT( shutdown ( ))); 129 connect ( qApp, SIGNAL( aboutToQuit ( )), this, SLOT( shutdown ( )));
130 130
131 m_timer-> start ( 1500 );
132
133 m_menu = 0; 131 m_menu = 0;
134 m_dirty = true; 132 m_dirty = true;
135 m_lasttext = QString::null; 133 m_lasttext = QString::null;
134
135 m_timer-> start ( 0, true );
136} 136}
137 137
138ClipboardApplet::~ClipboardApplet ( ) 138ClipboardApplet::~ClipboardApplet ( )
139{ 139{
140} 140}
141 141
142void ClipboardApplet::shutdown ( ) 142void ClipboardApplet::shutdown ( )
143{ 143{
144 // the timer has to be stopped, or Qt/E will hang on quit() 144 // the timer has to be stopped, or Qt/E will hang on quit()
145 // see launcher/desktop.cpp 145 // see launcher/desktop.cpp
146 146
147 m_timer-> stop ( ); 147 m_timer-> stop ( );
148} 148}
149 149
150void ClipboardApplet::mousePressEvent ( QMouseEvent *) 150void ClipboardApplet::mousePressEvent ( QMouseEvent *)
151{ 151{
152 if ( m_dirty ) { 152 if ( m_dirty ) {
153 delete m_menu; 153 delete m_menu;
154 154
155 m_menu = new QPopupMenu ( this ); 155 m_menu = new QPopupMenu ( this );
156 m_menu-> setCheckable ( true ); 156 m_menu-> setCheckable ( true );
157 157
158 if ( m_history. count ( )) { 158 if ( m_history. count ( )) {
159 for ( unsigned int i = 0; i < m_history. count ( ); i++ ) { 159 for ( unsigned int i = 0; i < m_history. count ( ); i++ ) {
@@ -207,36 +207,49 @@ void ClipboardApplet::action(int id)
207 207
208 for ( uint i = 0; i < m_history. count ( ); i++ ) 208 for ( uint i = 0; i < m_history. count ( ); i++ )
209 m_menu-> setItemChecked ( i, i == uint( id )); 209 m_menu-> setItemChecked ( i, i == uint( id ));
210 210
211 unicode = 'V' - '@'; 211 unicode = 'V' - '@';
212 scan = Key_V; 212 scan = Key_V;
213 } 213 }
214 break; 214 break;
215 } 215 }
216 216
217 if ( scan ) { 217 if ( scan ) {
218 qwsServer-> sendKeyEvent ( unicode, scan, ControlButton, true, false ); 218 qwsServer-> sendKeyEvent ( unicode, scan, ControlButton, true, false );
219 qwsServer-> sendKeyEvent ( unicode, scan, ControlButton, false, false ); 219 qwsServer-> sendKeyEvent ( unicode, scan, ControlButton, false, false );
220 } 220 }
221} 221}
222 222
223void ClipboardApplet::paintEvent ( QPaintEvent* ) 223void ClipboardApplet::paintEvent ( QPaintEvent* )
224{ 224{
225 QPainter p ( this ); 225 QPainter p ( this );
226 p. drawPixmap ( 0, 1, m_clipboardPixmap ); 226 p. drawPixmap ( 0, 1, m_clipboardPixmap );
227} 227}
228 228
229void ClipboardApplet::newData ( ) 229void ClipboardApplet::newData ( )
230{ 230{
231 static bool excllock = false;
232
233 if ( excllock )
234 return;
235 else
236 excllock = true;
237
238 m_timer-> stop ( );
239
231 QCString type = "plain"; 240 QCString type = "plain";
232 QString txt = QApplication::clipboard ( )-> text ( type ); 241 QString txt = QApplication::clipboard ( )-> text ( type );
233 242
234 if ( !txt. isEmpty ( ) && !m_history. contains ( txt )) { 243 if ( !txt. isEmpty ( ) && !m_history. contains ( txt )) {
235 m_history. append ( txt ); 244 m_history. append ( txt );
236 245
237 if ( m_history. count ( ) > 5 ) 246 if ( m_history. count ( ) > 5 )
238 m_history. remove ( m_history. begin ( )); 247 m_history. remove ( m_history. begin ( ));
239 248
240 m_dirty = true; 249 m_dirty = true;
241 } 250 }
251
252 m_timer-> start ( 1500, true );
253
254 excllock = false;
242} 255}