give engines mouse event notifications. make the openbox engine display pressed buttons
This commit is contained in:
parent
9a3459e983
commit
432ac0983e
5 changed files with 79 additions and 0 deletions
|
@ -50,4 +50,13 @@ typedef void EngineFrameHide(Frame *self);
|
|||
/* 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
|
||||
|
|
|
@ -865,3 +865,51 @@ GQuark get_context(Client *client, Window win)
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,6 +52,10 @@ static gboolean load(char *name)
|
|||
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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "hooks.h"
|
||||
#include "extensions.h"
|
||||
#include "timer.h"
|
||||
#include "engine.h"
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/keysym.h>
|
||||
|
@ -286,13 +287,25 @@ void event_process(XEvent *e)
|
|||
/* 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;
|
||||
|
|
Loading…
Reference in a new issue