diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-04-16 18:09:11 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-04-16 18:09:11 +0000 |
| commit | 185d1337e553283530e23b1edff3bb709f04e9bb (patch) | |
| tree | 20acdcbc0795a4ab333d2ec04aefaa7ecfbd636d /openbox/event.c | |
| parent | 04cfdd261dd6b8030cd7618aee5df588f25ef4d2 (diff) | |
menus works on some level. add a built-in root menu
Diffstat (limited to 'openbox/event.c')
| -rw-r--r-- | openbox/event.c | 41 |
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"); |
