]> Dogcows Code - chaz/openbox/blobdiff - otk/appwidget.cc
add an OtkAppWidget which are "root windows", i.e. the managed child of root, to...
[chaz/openbox] / otk / appwidget.cc
diff --git a/otk/appwidget.cc b/otk/appwidget.cc
new file mode 100644 (file)
index 0000000..f406c65
--- /dev/null
@@ -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();
+}
+
+}
This page took 0.022034 seconds and 4 git commands to generate.