From 12a95bfdb31595ec53d72adef4e0fd6bf1ccf218 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 16 Nov 2002 14:30:18 +0000 Subject: 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". --- otk/appwidget.cc | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 otk/appwidget.cc (limited to 'otk/appwidget.cc') 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 +} + +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(e.data.l[0]) == _wm_delete) + hide(); +} + +} -- cgit v1.2.3