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);
|
_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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue