can tell where events are coming from!
This commit is contained in:
parent
db23fe0584
commit
77a8e11660
8 changed files with 58 additions and 21 deletions
|
@ -34,8 +34,6 @@ void OtkEventDispatcher::clearHandler(Window id)
|
|||
_map.erase(id);
|
||||
}
|
||||
|
||||
//#include <stdio.h>
|
||||
#include <stdio.h>
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -30,6 +30,8 @@ public:
|
|||
{ _master = master; }
|
||||
OtkEventHandler *getMasterHandler(void) const { return _master; }
|
||||
|
||||
OtkEventHandler *findHandler(Window win);
|
||||
|
||||
private:
|
||||
OtkEventMap _map;
|
||||
OtkEventHandler *_fallback;
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
#endif
|
||||
|
||||
#include "actions.hh"
|
||||
#include "widget.hh"
|
||||
#include "openbox.hh"
|
||||
#include "otk/display.hh"
|
||||
|
||||
#include <stdio.h>
|
||||
|
@ -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<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 @@ 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<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 @@ 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<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);
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue