// -*- mode: C++; indent-tabs-mode: nil; -*-
+#ifdef HAVE_CONFIG_H
+# include "../config.h"
+#endif
+
#include "xeventhandler.hh"
#include "client.hh"
#include "frame.hh"
// create the OBClient class, which gets all of the hints on the window
Openbox::instance->addClient(window, client = new OBClient(screen, window));
+ // add all the client's decoration windows as event handlers for the client
+ Openbox::instance->addClient(client->frame->titlebar(), client);
+ Openbox::instance->addClient(client->frame->buttonIconify(), client);
+ Openbox::instance->addClient(client->frame->buttonMax(), client);
+ Openbox::instance->addClient(client->frame->buttonStick(), client);
+ Openbox::instance->addClient(client->frame->buttonClose(), client);
+ Openbox::instance->addClient(client->frame->label(), client);
+ Openbox::instance->addClient(client->frame->handle(), client);
+ Openbox::instance->addClient(client->frame->gripLeft(), client);
+ Openbox::instance->addClient(client->frame->gripRight(), client);
// we dont want a border on the client
XSetWindowBorderWidth(otk::OBDisplay::display, window, 0);
// remove the client class from the search list
Openbox::instance->removeClient(client->window());
+ // remove the frame's decor elements as event handlers for the client
+ Openbox::instance->removeClient(frame->titlebar());
+ Openbox::instance->removeClient(frame->buttonIconify());
+ Openbox::instance->removeClient(frame->buttonMax());
+ Openbox::instance->removeClient(frame->buttonStick());
+ Openbox::instance->removeClient(frame->buttonClose());
+ Openbox::instance->removeClient(frame->label());
+ Openbox::instance->removeClient(frame->handle());
+ Openbox::instance->removeClient(frame->gripLeft());
+ Openbox::instance->removeClient(frame->gripRight());
delete client->frame;
client->frame = 0;
#ifdef SHAPE
void OBXEventHandler::shapeEvent(const XShapeEvent &e)
{
- XShapeEvent *shape_event = (XShapeEvent *) e;
- BlackboxWindow *win = searchWindow(e->xany.window);
+ printf("ShapeEvent\n");
+ if (e.kind != ShapeBounding) return;
- if (win && shape_event->kind == ShapeBounding)
- win->shapeEvent(shape_event);
+ OBClient *client = Openbox::instance->findClient(e.window);
+ if (!client) return;
+
+ client->update(e);
+ client->frame->update();
}
#endif // SHAPE
// These types of XEvent's can be bound to actions by the user, and so end
// up getting passed off to the OBBindingMapper class at some point
+ // IOW: THESE WILL HAVE GUILE HOOKS
case ButtonPress:
buttonPress(e.xbutton);
break;
default:
#ifdef SHAPE
if (e.type == otk::OBDisplay::shapeEventBase())
- shapeEvent(e);
+ shapeEvent((*(XShapeEvent*)&e));
#endif // SHAPE
break;