can tell where events are coming from!

This commit is contained in:
Dana Jansens 2002-12-18 11:34:29 +00:00
parent db23fe0584
commit 77a8e11660
8 changed files with 58 additions and 21 deletions

View file

@ -34,8 +34,6 @@ void OtkEventDispatcher::clearHandler(Window id)
_map.erase(id); _map.erase(id);
} }
//#include <stdio.h>
#include <stdio.h>
void OtkEventDispatcher::dispatchEvents(void) void OtkEventDispatcher::dispatchEvents(void)
{ {
XEvent e; XEvent e;
@ -45,7 +43,7 @@ void OtkEventDispatcher::dispatchEvents(void)
while (XPending(OBDisplay::display)) { while (XPending(OBDisplay::display)) {
XNextEvent(OBDisplay::display, &e); XNextEvent(OBDisplay::display, &e);
#if defined(DEBUG) && 0 #if 0
printf("Event %d window %lx\n", e.type, e.xany.window); printf("Event %d window %lx\n", e.type, e.xany.window);
#endif #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;
}
} }

View file

@ -29,6 +29,8 @@ public:
inline void setMasterHandler(OtkEventHandler *master) inline void setMasterHandler(OtkEventHandler *master)
{ _master = master; } { _master = master; }
OtkEventHandler *getMasterHandler(void) const { return _master; } OtkEventHandler *getMasterHandler(void) const { return _master; }
OtkEventHandler *findHandler(Window win);
private: private:
OtkEventMap _map; OtkEventMap _map;

View file

@ -5,6 +5,8 @@
#endif #endif
#include "actions.hh" #include "actions.hh"
#include "widget.hh"
#include "openbox.hh"
#include "otk/display.hh" #include "otk/display.hh"
#include <stdio.h> #include <stdio.h>
@ -63,8 +65,11 @@ void OBActions::buttonPressHandler(const XButtonEvent &e)
insertPress(e); insertPress(e);
// XXX: run the PRESS guile hook // XXX: run the PRESS guile hook
printf("GUILE: PRESS: win %lx modifiers %u button %u time %lx\n", OBWidget *w = dynamic_cast<OBWidget*>
(long)e.window, e.state, e.button, e.time); (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 if (_button) return; // won't count toward CLICK events
@ -78,8 +83,11 @@ void OBActions::buttonReleaseHandler(const XButtonEvent &e)
removePress(e); removePress(e);
// XXX: run the RELEASE guile hook // XXX: run the RELEASE guile hook
printf("GUILE: RELEASE: win %lx modifiers %u button %u time %lx\n", OBWidget *w = dynamic_cast<OBWidget*>
(long)e.window, e.state, e.button, e.time); (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? // not for the button we're watching?
if (_button != e.button) return; if (_button != e.button) return;
@ -96,15 +104,15 @@ void OBActions::buttonReleaseHandler(const XButtonEvent &e)
return; return;
// XXX: run the CLICK guile hook // XXX: run the CLICK guile hook
printf("GUILE: CLICK: win %lx modifiers %u button %u time %lx\n", printf("GUILE: CLICK: win %lx type %d modifiers %u button %u time %lx\n",
(long)e.window, e.state, e.button, e.time); (long)e.window, (w ? w->type():-1), e.state, e.button, e.time);
if (e.time - _release.time < DOUBLECLICKDELAY && if (e.time - _release.time < DOUBLECLICKDELAY &&
_release.win == e.window && _release.button == e.button) { _release.win == e.window && _release.button == e.button) {
// XXX: run the DOUBLECLICK guile hook // XXX: run the DOUBLECLICK guile hook
printf("GUILE: DOUBLECLICK: win %lx modifiers %u button %u time %lx\n", printf("GUILE: DOUBLECLICK: win %lx type %d modifiers %u button %u time %lx\n",
(long)e.window, e.state, e.button, e.time); (long)e.window, (w ? w->type():-1), e.state, e.button, e.time);
// reset so you cant triple click for 2 doubleclicks // reset so you cant triple click for 2 doubleclicks
_release.win = 0; _release.win = 0;
@ -124,7 +132,11 @@ void OBActions::enterHandler(const XCrossingEvent &e)
OtkEventHandler::enterHandler(e); OtkEventHandler::enterHandler(e);
// XXX: run the ENTER guile hook // 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 @@ void OBActions::leaveHandler(const XCrossingEvent &e)
OtkEventHandler::leaveHandler(e); OtkEventHandler::leaveHandler(e);
// XXX: run the LEAVE guile hook // 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) void OBActions::keyPressHandler(const XKeyEvent &e)
{ {
// XXX: run the KEY guile hook // XXX: run the KEY guile hook
printf("GUILE: KEY: win %lx modifiers %u keycode %u\n", OBWidget *w = dynamic_cast<OBWidget*>
(long)e.window, e.state, e.keycode); (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 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(); _dx = e.x - _posqueue[0]->pos.x();
_dy = e.y - _posqueue[0]->pos.y(); _dy = e.y - _posqueue[0]->pos.y();
// XXX: i can envision all sorts of crazy shit with this.. gestures, etc // 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", printf("GUILE: MOTION: win %lx type %d modifiers %u x %d y %d\n",
(long)e.window, e.state, _dx, _dy); (long)e.window, (w ? w->type():-1), e.state, _dx, _dy);
} }

View file

@ -26,6 +26,7 @@ namespace ob {
OBClient::OBClient(int screen, Window window) OBClient::OBClient(int screen, Window window)
: otk::OtkEventHandler(), : otk::OtkEventHandler(),
OBWidget(OBWidget::Type_Client),
frame(0), _screen(screen), _window(window) frame(0), _screen(screen), _window(window)
{ {
assert(screen >= 0); assert(screen >= 0);

View file

@ -21,6 +21,7 @@ extern "C" {
#include "otk/strut.hh" #include "otk/strut.hh"
#include "otk/rect.hh" #include "otk/rect.hh"
#include "otk/eventhandler.hh" #include "otk/eventhandler.hh"
#include "widget.hh"
namespace ob { namespace ob {
@ -38,7 +39,7 @@ class OBFrame;
class' member variables and call whatever is nessary to complete 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). 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: public:
//! The frame window which decorates around the client window //! The frame window which decorates around the client window

View file

@ -23,6 +23,7 @@ const long OBFrame::event_mask;
OBFrame::OBFrame(OBClient *client, otk::Style *style) OBFrame::OBFrame(OBClient *client, otk::Style *style)
: otk::OtkWidget(Openbox::instance, style), : otk::OtkWidget(Openbox::instance, style),
OBWidget(Type_Frame),
_client(client), _client(client),
_screen(otk::OBDisplay::screenInfo(client->screen())), _screen(otk::OBDisplay::screenInfo(client->screen())),
_plate(this, OBWidget::Type_Plate), _plate(this, OBWidget::Type_Plate),

View file

@ -29,11 +29,13 @@ namespace ob {
parent with the SubstructureRedirectMask so that structure events for the parent with the SubstructureRedirectMask so that structure events for the
client are sent to the window manager. client are sent to the window manager.
*/ */
class OBFrame : public otk::OtkWidget { class OBFrame : public otk::OtkWidget, public OBWidget {
public: public:
//! The event mask to grab on frame windows //! 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: private:
OBClient *_client; OBClient *_client;

View file

@ -7,6 +7,7 @@ namespace ob {
class OBWidget { class OBWidget {
public: public:
enum WidgetType { enum WidgetType {
Type_Frame,
Type_Titlebar, Type_Titlebar,
Type_Handle, Type_Handle,
Type_Plate, Type_Plate,
@ -16,7 +17,8 @@ public:
Type_IconifyButton, Type_IconifyButton,
Type_StickyButton, Type_StickyButton,
Type_LeftGrip, Type_LeftGrip,
Type_RightGrip Type_RightGrip,
Type_Client
}; };
private: private: