]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
menus works on some level. add a built-in root menu
[chaz/openbox] / openbox / event.c
index 4398c97724d9469d1668fa68245328e30226a8f2..7d61c9eb4940b69042a4a098efcf27e2f2df2091 100644 (file)
@@ -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");
This page took 0.023554 seconds and 4 git commands to generate.