summaryrefslogtreecommitdiff
path: root/otk/appwidget.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-11-16 14:30:18 +0000
committerDana Jansens <danakj@orodu.net>2002-11-16 14:30:18 +0000
commit12a95bfdb31595ec53d72adef4e0fd6bf1ccf218 (patch)
tree5a7fd6a4b2a56e6849ef0fe87b67b5dcc03807ab /otk/appwidget.cc
parent3bc1f37469a4933966f049cc57093fb564b721a3 (diff)
add an OtkAppWidget which are "root windows", i.e. the managed child of root, to be shown on the display.
Exit when all the "root windows" are hidden. Support the WM_DELETE protocol to hide a "root window".
Diffstat (limited to 'otk/appwidget.cc')
-rw-r--r--otk/appwidget.cc53
1 files changed, 53 insertions, 0 deletions
diff --git a/otk/appwidget.cc b/otk/appwidget.cc
new file mode 100644
index 00000000..f406c654
--- /dev/null
+++ b/otk/appwidget.cc
@@ -0,0 +1,53 @@
+#include "appwidget.hh"
+#include "application.hh"
+
+extern "C" {
+#include <X11/Xlib.h>
+}
+
+namespace otk {
+
+OtkAppWidget::OtkAppWidget(OtkApplication *app, Direction direction,
+ Cursor cursor, int bevel_width)
+ : OtkWidget(app, app->getStyle(), direction, cursor, bevel_width),
+ _application(app)
+{
+ assert(app);
+
+ _wm_protocols = XInternAtom(OBDisplay::display, "WM_PROTOCOLS", false);
+ _wm_delete = XInternAtom(OBDisplay::display, "WM_DELETE_WINDOW", false);
+
+ // set WM Protocols on the window
+ Atom protocols[2];
+ protocols[0] = _wm_protocols;
+ protocols[1] = _wm_delete;
+ XSetWMProtocols(OBDisplay::display, getWindow(), protocols, 2);
+}
+
+OtkAppWidget::~OtkAppWidget()
+{
+}
+
+void OtkAppWidget::show(void)
+{
+ OtkWidget::show();
+
+ _application->_appwidget_count++;
+}
+
+void OtkAppWidget::hide(void)
+{
+ OtkWidget::hide();
+
+ _application->_appwidget_count--;
+}
+
+void OtkAppWidget::clientMessageHandler(const XClientMessageEvent &e)
+{
+ OtkEventHandler::clientMessageHandler(e);
+ if (e.message_type == _wm_protocols &&
+ static_cast<Atom>(e.data.l[0]) == _wm_delete)
+ hide();
+}
+
+}