all repos — openbox @ 432ac0983e058133e03885171f266dc4ba07f488

openbox fork - make it a bit more like ryudo

give engines mouse event notifications. make the openbox engine display pressed buttons
Dana Jansens danakj@orodu.net
commit

432ac0983e058133e03885171f266dc4ba07f488

parent

9a3459e983a11d74ec9f5dc415ce0af551c4b74e

M engines/engineinterface.hengines/engineinterface.h

@@ -50,4 +50,13 @@

/* get_context */ typedef GQuark EngineGetContext(Client *client, Window win); +/* frame_mouse_enter */ +typedef void EngineMouseEnter(Frame *self, Window win); +/* frame_mouse_leave */ +typedef void EngineMouseLeave(Frame *self, Window win); +/* frame_mouse_press */ +typedef void EngineMousePress(Frame *self, Window win, int x, int y); +/* frame_mouse_release */ +typedef void EngineMouseRelease(Frame *self, Window win, int x, int y); + #endif
M engines/openbox/openbox.cengines/openbox/openbox.c

@@ -865,3 +865,51 @@ if (win == self->desk) return g_quark_try_string("alldesktops");

return g_quark_try_string("none"); } + +void frame_mouse_enter(ObFrame *self, Window win) +{ +} + +void frame_mouse_leave(ObFrame *self, Window win) +{ +} + +void frame_mouse_press(ObFrame *self, Window win, int x, int y) +{ + if (win == self->max) { + self->max_press = TRUE; + render_max(self); + } + else if (win == self->close) { + self->close_press = TRUE; + render_close(self); + } + else if (win == self->iconify) { + self->iconify_press = TRUE; + render_iconify(self); + } + else if (win == self->desk) { + self->desk_press = TRUE; + render_desk(self); + } +} + +void frame_mouse_release(ObFrame *self, Window win, int x, int y) +{ + if (win == self->max) { + self->max_press = FALSE; + render_max(self); + } + else if (win == self->close) { + self->close_press = FALSE; + render_close(self); + } + else if (win == self->iconify) { + self->iconify_press = FALSE; + render_iconify(self); + } + else if (win == self->desk) { + self->desk_press = FALSE; + render_desk(self); + } +}
M openbox/engine.copenbox/engine.c

@@ -52,6 +52,10 @@ LOADSYM(frame_adjust_icon, engine_frame_adjust_icon);

LOADSYM(frame_show, engine_frame_show); LOADSYM(frame_hide, engine_frame_hide); LOADSYM(get_context, engine_get_context); + LOADSYM(frame_mouse_enter, engine_mouse_enter); + LOADSYM(frame_mouse_leave, engine_mouse_leave); + LOADSYM(frame_mouse_press, engine_mouse_press); + LOADSYM(frame_mouse_release, engine_mouse_release); if (!estartup()) return FALSE;
M openbox/engine.hopenbox/engine.h

@@ -24,4 +24,9 @@ EngineFrameHide *engine_frame_hide;

EngineGetContext *engine_get_context; +EngineMouseEnter *engine_mouse_enter; +EngineMouseLeave *engine_mouse_leave; +EngineMousePress *engine_mouse_press; +EngineMouseRelease *engine_mouse_release; + #endif
M openbox/event.copenbox/event.c

@@ -12,6 +12,7 @@ #include "pointer.h"

#include "hooks.h" #include "extensions.h" #include "timer.h" +#include "engine.h" #include <X11/Xlib.h> #include <X11/keysym.h>

@@ -286,13 +287,25 @@

/* dispatch Crossing, Pointer and Key events to the hooks */ switch(e->type) { case EnterNotify: + if (client != NULL) engine_mouse_enter(client->frame, window); HOOKFIRECLIENT(pointerenter, client); break; case LeaveNotify: + if (client != NULL) engine_mouse_leave(client->frame, window); HOOKFIRECLIENT(pointerleave, client); break; case ButtonPress: + if (client != NULL) + engine_mouse_press(client->frame, window, + e->xbutton.x, e->xbutton.y); + pointer_event(e, client); + break; case ButtonRelease: + if (client != NULL) + engine_mouse_release(client->frame, window, + e->xbutton.x, e->xbutton.y); + pointer_event(e, client); + break; case MotionNotify: pointer_event(e, client); break;