X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Fappwidget.cc;fp=otk%2Fappwidget.cc;h=f406c654a77275e6f7b6d5b034a92bb964597b24;hb=12a95bfdb31595ec53d72adef4e0fd6bf1ccf218;hp=0000000000000000000000000000000000000000;hpb=3bc1f37469a4933966f049cc57093fb564b721a3;p=chaz%2Fopenbox 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(); +} + +}