summaryrefslogtreecommitdiff
path: root/openbox/event.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-04-16 18:09:11 +0000
committerDana Jansens <danakj@orodu.net>2003-04-16 18:09:11 +0000
commit185d1337e553283530e23b1edff3bb709f04e9bb (patch)
tree20acdcbc0795a4ab333d2ec04aefaa7ecfbd636d /openbox/event.c
parent04cfdd261dd6b8030cd7618aee5df588f25ef4d2 (diff)
menus works on some level. add a built-in root menu
Diffstat (limited to 'openbox/event.c')
-rw-r--r--openbox/event.c41
1 files changed, 35 insertions, 6 deletions
diff --git a/openbox/event.c b/openbox/event.c
index 4398c977..7d61c9eb 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -79,6 +79,7 @@ void event_loop()
XEvent e;
int x_fd;
struct timeval *wait;
+ gboolean had_event = FALSE;
while (TRUE) {
/*
@@ -105,13 +106,16 @@ void event_loop()
XNextEvent(ob_display, &e);
event_process(&e);
+ had_event = TRUE;
+ }
+
+ if (!had_event) {
+ timer_dispatch((GTimeVal**)&wait);
+ x_fd = ConnectionNumber(ob_display);
+ FD_ZERO(&selset);
+ FD_SET(x_fd, &selset);
+ select(x_fd + 1, &selset, NULL, NULL, wait);
}
-
- timer_dispatch((GTimeVal**)&wait);
- x_fd = ConnectionNumber(ob_display);
- FD_ZERO(&selset);
- FD_SET(x_fd, &selset);
- select(x_fd + 1, &selset, NULL, NULL, wait);
}
static Window event_get_window(XEvent *e)
@@ -711,7 +715,32 @@ static void event_handle_menu(Menu *menu, XEvent *e)
{
MenuEntry *entry;
+ g_message("EVENT %d", e->type);
switch (e->type) {
+ case ButtonPress:
+ if (e->xbutton.button == 3)
+ menu_hide(menu);
+ break;
+ case ButtonRelease:
+ if (!menu->shown) break;
+
+/* grab_pointer_window(FALSE, None, menu->frame);*/
+
+ entry = menu_find_entry(menu, e->xbutton.window);
+ if (entry) {
+ int junk;
+ Window wjunk;
+ guint ujunk, b, w, h;
+ XGetGeometry(ob_display, e->xbutton.window,
+ &wjunk, &junk, &junk, &w, &h, &b, &ujunk);
+ if (e->xbutton.x >= (signed)-b &&
+ e->xbutton.y >= (signed)-b &&
+ e->xbutton.x < (signed)(w+b) &&
+ e->xbutton.y < (signed)(h+b)) {
+ menu_entry_fire(entry);
+ }
+ }
+ break;
case EnterNotify:
case LeaveNotify:
g_message("enter/leave");