summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/actions.cc50
-rw-r--r--src/client.cc1
-rw-r--r--src/client.hh3
-rw-r--r--src/frame.cc1
-rw-r--r--src/frame.hh6
-rw-r--r--src/widget.hh4
6 files changed, 47 insertions, 18 deletions
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 <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);
}
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: