summaryrefslogtreecommitdiff
path: root/x11/libqpe-x11
authorzecke <zecke>2002-10-18 01:34:23 (UTC)
committer zecke <zecke>2002-10-18 01:34:23 (UTC)
commit0457c48c165abef8afa2ac73c8f66d20e289681a (patch) (unidiff)
tree2c6baf363487d474df6ceeaf2ea17a351b38aa05 /x11/libqpe-x11
parente7e36afd3685c7fab146ebd0078d7f1a60f8c5e6 (diff)
downloadopie-0457c48c165abef8afa2ac73c8f66d20e289681a.zip
opie-0457c48c165abef8afa2ac73c8f66d20e289681a.tar.gz
opie-0457c48c165abef8afa2ac73c8f66d20e289681a.tar.bz2
Fix OCOPServer bugs... when removing clients
Implement the Opie side for the OK button now the awesome matchbox needs to get an update I was too excited about X11 so i did not do any PIM work yet
Diffstat (limited to 'x11/libqpe-x11') (more/less context) (ignore whitespace changes)
-rw-r--r--x11/libqpe-x11/qpe/qpeapplication.cpp90
-rw-r--r--x11/libqpe-x11/qpe/qpeapplication.h2
2 files changed, 92 insertions, 0 deletions
diff --git a/x11/libqpe-x11/qpe/qpeapplication.cpp b/x11/libqpe-x11/qpe/qpeapplication.cpp
index 8785c74..75a8189 100644
--- a/x11/libqpe-x11/qpe/qpeapplication.cpp
+++ b/x11/libqpe-x11/qpe/qpeapplication.cpp
@@ -5,6 +5,7 @@
5#include <unistd.h> 5#include <unistd.h>
6#include <sys/file.h> 6#include <sys/file.h>
7 7
8
8#include <qdir.h> 9#include <qdir.h>
9#include <qdialog.h> 10#include <qdialog.h>
10#include <qdragobject.h> 11#include <qdragobject.h>
@@ -16,6 +17,7 @@
16#include <qpalette.h> 17#include <qpalette.h>
17#include <qptrdict.h> 18#include <qptrdict.h>
18#include <qregexp.h> 19#include <qregexp.h>
20#include <qtimer.h>
19 21
20#include <qpe/alarmserver.h> 22#include <qpe/alarmserver.h>
21#include <qpe/applnk.h> 23#include <qpe/applnk.h>
@@ -34,6 +36,15 @@
34#include <qpe/timestring.h> 36#include <qpe/timestring.h>
35#include <qpe/qcopenvelope_qws.h> 37#include <qpe/qcopenvelope_qws.h>
36 38
39
40#include <X11/Xlib.h>
41#include <X11/Xutil.h>
42
43const int XKeyPress = KeyPress;
44const int XKeyRelease = KeyRelease;
45#undef KeyPress
46#undef KeyRelease
47
37namespace { 48namespace {
38 struct QCopRec{ 49 struct QCopRec{
39 QCopRec( const QCString& ch, const QCString& msg, const QByteArray& ar ) 50 QCopRec( const QCString& ch, const QCString& msg, const QByteArray& ar )
@@ -76,6 +87,11 @@ public:
76 QString appName; 87 QString appName;
77 QString styleName; 88 QString styleName;
78 QString decorationName; 89 QString decorationName;
90 Atom wm_delete_window;
91 Atom wm_take_focus;
92 Atom wm_context_help;
93 Atom wm_context_accept;
94 Atom wm_protocols;
79 95
80private: 96private:
81 QList<QCopRec> qcopq; 97 QList<QCopRec> qcopq;
@@ -219,6 +235,32 @@ QPEApplication::QPEApplication(int &arg, char** argv, Type t)
219 d->loadTextCodecs(); 235 d->loadTextCodecs();
220 d->loadImageCodecs(); 236 d->loadImageCodecs();
221 237
238 // Init X-Atom
239 Atom *atoms[5];
240 Atom atoms_re[5];
241 char* names[5];
242 int n = 0;
243 atoms[n] = &d->wm_delete_window;
244 names[n++] = "WM_DELETE_WINDOW";
245
246 atoms[n] = &d->wm_take_focus;
247 names[n++] = "WM_TAKE_FOCUS";
248
249 atoms[n] = &d->wm_context_help;
250 names[n++] = "_NET_WM_CONTEXT_HELP";
251
252 atoms[n] = &d->wm_context_accept;
253 names[n++] = "_NET_WM_CONTEXT_ACCEPT";
254
255 atoms[n] = &d->wm_protocols;
256 names[n++] = "WM_PROTOCOLS";
257
258 XInternAtoms( qt_xdisplay(), names, n, FALSE, atoms_re);
259 // now copy the values over to the properties
260 for (int i = 0; i < n; i++ )
261 *atoms[i] = atoms_re[i];
262 // done with X11 Stuff
263
222 int dw = desktop()->width(); 264 int dw = desktop()->width();
223 if ( dw < 200 ) { 265 if ( dw < 200 ) {
224 setFont( QFont( "helvetica", 8 ) ); 266 setFont( QFont( "helvetica", 8 ) );
@@ -530,6 +572,26 @@ QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w) {
530 572
531// eventFilter...... 573// eventFilter......
532bool QPEApplication::eventFilter( QObject* o, QEvent* e ) { 574bool QPEApplication::eventFilter( QObject* o, QEvent* e ) {
575 /*
576 * We want our WM to show Ok and a X button
577 * on dialogs
578 * our part is to set the _NET_WM_CONTEXT_ACCEPT
579 * propery
580 * and then wait for a client message -zecke
581 * on show we will add the prop
582 */
583 if (o->inherits("QDialog") && e->type() == QEvent::Show ) {
584 QDialog* dialog = (QDialog*)o;
585 Atom wm_prot[45];
586 int n = 0;
587 wm_prot[n++] = d->wm_delete_window;
588 wm_prot[n++] = d->wm_take_focus;
589 wm_prot[n++] = d->wm_context_accept;
590 if ( dialog->testWFlags( WStyle_ContextHelp ) )
591 wm_prot[n++] = d->wm_context_help;
592 XSetWMProtocols( qt_xdisplay(), dialog->winId(), wm_prot, n );
593 return TRUE; // should be save
594 }
533 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { 595 if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) {
534 QMouseEvent * me = ( QMouseEvent* ) e; 596 QMouseEvent * me = ( QMouseEvent* ) e;
535 StylusMode mode = (StylusMode)(int)stylusDict->find(o); 597 StylusMode mode = (StylusMode)(int)stylusDict->find(o);
@@ -657,6 +719,34 @@ void QPEApplication::prepareForTermination( bool willrestart )
657 sleep( 1 ); // You have 1 second to comply. 719 sleep( 1 ); // You have 1 second to comply.
658#endif 720#endif
659} 721}
722int QPEApplication::x11ClientMessage(QWidget* w, XEvent* event, bool b ) {
723 qWarning("X11 ClientMessage %d %d", event->type, ClientMessage);
724 if ( event->type == ClientMessage ) {
725 if ( (event->xclient.message_type == d->wm_protocols) &&
726 (event->xclient.data.l[0] == d->wm_context_accept ) ) {
727 qWarning("accepted!!!");
728 /*
729 * I'm not sure if we should use activeWidget
730 * or activeModalWidget
731 * a QDialog could be not modal too
732 */
733 if ( w->inherits("QDialog" ) ) {
734 qWarning("inherits QDialog!!!");
735 QDialog* dia = (QDialog*)w;
736 /*
737 * call it directly or via QTimer::singleShot?
738 */
739 QTimer::singleShot(0, dia, SLOT(reject() ) );
740 return 0;
741 }
742
743 }
744 }
745 return QApplication::x11ClientMessage(w, event, b );
746}
747
748#define KeyPress XKeyPress
749#define KeyRelease XKeyRelease
660 750
661#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) 751#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
662 752
diff --git a/x11/libqpe-x11/qpe/qpeapplication.h b/x11/libqpe-x11/qpe/qpeapplication.h
index 333f331..254fbfa 100644
--- a/x11/libqpe-x11/qpe/qpeapplication.h
+++ b/x11/libqpe-x11/qpe/qpeapplication.h
@@ -61,6 +61,8 @@ public:
61 DisableSuspend = 2, 61 DisableSuspend = 2,
62 Enable = 100 62 Enable = 100
63 }; 63 };
64 /* reimplemented for internal purposes */
65 int x11ClientMessage( QWidget*, XEvent*, bool );
64 66
65signals: 67signals:
66 void clientMoused(); 68 void clientMoused();