all repos — openbox @ 77a8e11660edd66279f2d3def6de3768874ba780

openbox fork - make it a bit more like ryudo

can tell where events are coming from!
Dana Jansens danakj@orodu.net
commit

77a8e11660edd66279f2d3def6de3768874ba780

parent

db23fe0584b9d7ece147ef74c7ad6d45ff7ba6fd

M otk/eventdispatcher.ccotk/eventdispatcher.cc

@@ -34,8 +34,6 @@ {

_map.erase(id); } -//#include <stdio.h> -#include <stdio.h> void OtkEventDispatcher::dispatchEvents(void) { XEvent e;

@@ -45,7 +43,7 @@

while (XPending(OBDisplay::display)) { XNextEvent(OBDisplay::display, &e); -#if defined(DEBUG) && 0 +#if 0 printf("Event %d window %lx\n", e.type, e.xany.window); #endif

@@ -89,6 +87,14 @@

if (_master) _master->handle(e); } +} + +OtkEventHandler *OtkEventDispatcher::findHandler(Window win) +{ + OtkEventMap::iterator it = _map.find(win); + if (it != _map.end()) + return it->second; + return 0; } }
M otk/eventdispatcher.hhotk/eventdispatcher.hh

@@ -29,6 +29,8 @@ //! any specific handlers have received them

inline void setMasterHandler(OtkEventHandler *master) { _master = master; } OtkEventHandler *getMasterHandler(void) const { return _master; } + + OtkEventHandler *findHandler(Window win); private: OtkEventMap _map;
M src/actions.ccsrc/actions.cc

@@ -5,6 +5,8 @@ # include "../config.h"

#endif #include "actions.hh" +#include "widget.hh" +#include "openbox.hh" #include "otk/display.hh" #include <stdio.h>

@@ -63,8 +65,11 @@ OtkEventHandler::buttonPressHandler(e);

insertPress(e); // XXX: run the PRESS guile hook - printf("GUILE: PRESS: win %lx modifiers %u button %u time %lx\n", - (long)e.window, e.state, e.button, e.time); + OBWidget *w = dynamic_cast<OBWidget*> + (Openbox::instance->findHandler(e.window)); + + printf("GUILE: PRESS: win %lx type %d modifiers %u button %u time %lx\n", + (long)e.window, (w ? w->type():-1), e.state, e.button, e.time); if (_button) return; // won't count toward CLICK events

@@ -78,8 +83,11 @@ OtkEventHandler::buttonReleaseHandler(e);

removePress(e); // XXX: run the RELEASE guile hook - printf("GUILE: RELEASE: win %lx modifiers %u button %u time %lx\n", - (long)e.window, e.state, e.button, e.time); + OBWidget *w = dynamic_cast<OBWidget*> + (Openbox::instance->findHandler(e.window)); + + printf("GUILE: RELEASE: win %lx type %d, modifiers %u button %u time %lx\n", + (long)e.window, (w ? w->type():-1), e.state, e.button, e.time); // not for the button we're watching? if (_button != e.button) return;

@@ -96,15 +104,15 @@ e.x < attr.width && e.y < attr.height))

return; // XXX: run the CLICK guile hook - printf("GUILE: CLICK: win %lx modifiers %u button %u time %lx\n", - (long)e.window, e.state, e.button, e.time); + printf("GUILE: CLICK: win %lx type %d modifiers %u button %u time %lx\n", + (long)e.window, (w ? w->type():-1), e.state, e.button, e.time); if (e.time - _release.time < DOUBLECLICKDELAY && _release.win == e.window && _release.button == e.button) { // XXX: run the DOUBLECLICK guile hook - printf("GUILE: DOUBLECLICK: win %lx modifiers %u button %u time %lx\n", - (long)e.window, e.state, e.button, e.time); + printf("GUILE: DOUBLECLICK: win %lx type %d modifiers %u button %u time %lx\n", + (long)e.window, (w ? w->type():-1), e.state, e.button, e.time); // reset so you cant triple click for 2 doubleclicks _release.win = 0;

@@ -124,7 +132,11 @@ {

OtkEventHandler::enterHandler(e); // XXX: run the ENTER guile hook - printf("GUILE: ENTER: win %lx modifiers %u\n", (long)e.window, e.state); + OBWidget *w = dynamic_cast<OBWidget*> + (Openbox::instance->findHandler(e.window)); + + printf("GUILE: ENTER: win %lx type %d modifiers %u\n", + (long)e.window, (w ? w->type():-1), e.state); }

@@ -133,15 +145,22 @@ {

OtkEventHandler::leaveHandler(e); // XXX: run the LEAVE guile hook - printf("GUILE: LEAVE: win %lx modifiers %u\n", (long)e.window, e.state); + OBWidget *w = dynamic_cast<OBWidget*> + (Openbox::instance->findHandler(e.window)); + + printf("GUILE: LEAVE: win %lx type %d modifiers %u\n", + (long)e.window, (w ? w->type():-1), e.state); } void OBActions::keyPressHandler(const XKeyEvent &e) { // XXX: run the KEY guile hook - printf("GUILE: KEY: win %lx modifiers %u keycode %u\n", - (long)e.window, e.state, e.keycode); + OBWidget *w = dynamic_cast<OBWidget*> + (Openbox::instance->findHandler(e.window)); + + printf("GUILE: KEY: win %lx type %d modifiers %u keycode %u\n", + (long)e.window, (w ? w->type():-1), e.state, e.keycode); }

@@ -149,12 +168,15 @@ void OBActions::motionHandler(const XMotionEvent &e)

{ if (!e.same_screen) return; // this just gets stupid + OBWidget *w = dynamic_cast<OBWidget*> + (Openbox::instance->findHandler(e.window)); + _dx = e.x - _posqueue[0]->pos.x(); _dy = e.y - _posqueue[0]->pos.y(); // XXX: i can envision all sorts of crazy shit with this.. gestures, etc - printf("GUILE: MOTION: win %lx modifiers %u x %d y %d\n", - (long)e.window, e.state, _dx, _dy); + printf("GUILE: MOTION: win %lx type %d modifiers %u x %d y %d\n", + (long)e.window, (w ? w->type():-1), e.state, _dx, _dy); }
M src/client.ccsrc/client.cc

@@ -26,6 +26,7 @@ namespace ob {

OBClient::OBClient(int screen, Window window) : otk::OtkEventHandler(), + OBWidget(OBWidget::Type_Client), frame(0), _screen(screen), _window(window) { assert(screen >= 0);
M src/client.hhsrc/client.hh

@@ -21,6 +21,7 @@ #include "otk/point.hh"

#include "otk/strut.hh" #include "otk/rect.hh" #include "otk/eventhandler.hh" +#include "widget.hh" namespace ob {

@@ -38,7 +39,7 @@ client, it will call the ActionHandler (for client messages) or update the

class' member variables and call whatever is nessary to complete the change (such as causing a redraw of the titlebar after the title is changed). */ -class OBClient : public otk::OtkEventHandler { +class OBClient : public otk::OtkEventHandler, public OBWidget { public: //! The frame window which decorates around the client window
M src/frame.ccsrc/frame.cc

@@ -23,6 +23,7 @@ const long OBFrame::event_mask;

OBFrame::OBFrame(OBClient *client, otk::Style *style) : otk::OtkWidget(Openbox::instance, style), + OBWidget(Type_Frame), _client(client), _screen(otk::OBDisplay::screenInfo(client->screen())), _plate(this, OBWidget::Type_Plate),
M src/frame.hhsrc/frame.hh

@@ -29,11 +29,13 @@ The frame is responsible for calling XSelectInput on the client window's new

parent with the SubstructureRedirectMask so that structure events for the client are sent to the window manager. */ -class OBFrame : public otk::OtkWidget { +class OBFrame : public otk::OtkWidget, public OBWidget { public: //! The event mask to grab on frame windows - static const long event_mask = EnterWindowMask | LeaveWindowMask; + static const long event_mask = EnterWindowMask | LeaveWindowMask | + ButtonPressMask | ButtonReleaseMask | + ButtonMotionMask; private: OBClient *_client;
M src/widget.hhsrc/widget.hh

@@ -7,6 +7,7 @@

class OBWidget { public: enum WidgetType { + Type_Frame, Type_Titlebar, Type_Handle, Type_Plate,

@@ -16,7 +17,8 @@ Type_CloseButton,

Type_IconifyButton, Type_StickyButton, Type_LeftGrip, - Type_RightGrip + Type_RightGrip, + Type_Client }; private: