From 77a8e11660edd66279f2d3def6de3768874ba780 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Wed, 18 Dec 2002 11:34:29 +0000 Subject: [PATCH] can tell where events are coming from! --- otk/eventdispatcher.cc | 12 +++++++--- otk/eventdispatcher.hh | 2 ++ src/actions.cc | 50 ++++++++++++++++++++++++++++++------------ src/client.cc | 1 + src/client.hh | 3 ++- src/frame.cc | 1 + src/frame.hh | 6 +++-- src/widget.hh | 4 +++- 8 files changed, 58 insertions(+), 21 deletions(-) diff --git a/otk/eventdispatcher.cc b/otk/eventdispatcher.cc index a6d25624..33d8ba2d 100644 --- a/otk/eventdispatcher.cc +++ b/otk/eventdispatcher.cc @@ -34,8 +34,6 @@ void OtkEventDispatcher::clearHandler(Window id) _map.erase(id); } -//#include -#include void OtkEventDispatcher::dispatchEvents(void) { XEvent e; @@ -45,7 +43,7 @@ void OtkEventDispatcher::dispatchEvents(void) 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 @@ -91,4 +89,12 @@ void OtkEventDispatcher::dispatchEvents(void) } } +OtkEventHandler *OtkEventDispatcher::findHandler(Window win) +{ + OtkEventMap::iterator it = _map.find(win); + if (it != _map.end()) + return it->second; + return 0; +} + } diff --git a/otk/eventdispatcher.hh b/otk/eventdispatcher.hh index b56445a4..9f7fb865 100644 --- a/otk/eventdispatcher.hh +++ b/otk/eventdispatcher.hh @@ -29,6 +29,8 @@ public: inline void setMasterHandler(OtkEventHandler *master) { _master = master; } OtkEventHandler *getMasterHandler(void) const { return _master; } + + OtkEventHandler *findHandler(Window win); private: OtkEventMap _map; diff --git a/src/actions.cc b/src/actions.cc index ceb55b6c..9660937d 100644 --- a/src/actions.cc +++ b/src/actions.cc @@ -5,6 +5,8 @@ #endif #include "actions.hh" +#include "widget.hh" +#include "openbox.hh" #include "otk/display.hh" #include @@ -63,8 +65,11 @@ void OBActions::buttonPressHandler(const XButtonEvent &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 + (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 @@ void OBActions::buttonReleaseHandler(const XButtonEvent &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 + (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 @@ void OBActions::buttonReleaseHandler(const XButtonEvent &e) 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 @@ void OBActions::enterHandler(const XCrossingEvent &e) 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 + (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 @@ void OBActions::leaveHandler(const XCrossingEvent &e) 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 + (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 + (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 + (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); } diff --git a/src/client.cc b/src/client.cc index 07d75462..91467250 100644 --- a/src/client.cc +++ b/src/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); diff --git a/src/client.hh b/src/client.hh index d518b9cc..39d9ac62 100644 --- a/src/client.hh +++ b/src/client.hh @@ -21,6 +21,7 @@ extern "C" { #include "otk/strut.hh" #include "otk/rect.hh" #include "otk/eventhandler.hh" +#include "widget.hh" namespace ob { @@ -38,7 +39,7 @@ class OBFrame; 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 diff --git a/src/frame.cc b/src/frame.cc index 979d9575..1ba77426 100644 --- a/src/frame.cc +++ b/src/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), diff --git a/src/frame.hh b/src/frame.hh index 85c863e7..5268512f 100644 --- a/src/frame.hh +++ b/src/frame.hh @@ -29,11 +29,13 @@ namespace ob { 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; diff --git a/src/widget.hh b/src/widget.hh index ed0f0a9d..6b9ffe77 100644 --- a/src/widget.hh +++ b/src/widget.hh @@ -7,6 +7,7 @@ namespace ob { class OBWidget { public: enum WidgetType { + Type_Frame, Type_Titlebar, Type_Handle, Type_Plate, @@ -16,7 +17,8 @@ public: Type_IconifyButton, Type_StickyButton, Type_LeftGrip, - Type_RightGrip + Type_RightGrip, + Type_Client }; private: -- 2.45.2