openbox/otk/appwidget.cc

54 lines
1.1 KiB
C++
Raw Normal View History

#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();
}
}