]> Dogcows Code - chaz/openbox/blobdiff - openbox/menuframe.c
adds option to have the popup centered above the window instead of centered, and...
[chaz/openbox] / openbox / menuframe.c
index 09fce0511a7ec6941952b067ecaec64b6351af99..5a18c51c32ea4758688656214ffd6ce010f5f8ea 100644 (file)
@@ -42,7 +42,7 @@ static void menu_entry_frame_free(ObMenuEntryFrame *self);
 static void menu_frame_render(ObMenuFrame *self);
 static void menu_frame_update(ObMenuFrame *self);
 
-static Window createWindow(Window parent, unsigned long mask,
+static Window createWindow(Window parent, gulong mask,
                           XSetWindowAttributes *attrib)
 {
     return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0,
@@ -217,11 +217,17 @@ void menu_frame_move_on_screen(ObMenuFrame *self)
     if (dx || dy) {
         ObMenuFrame *f;
 
-        for (f = self; f; f = f->parent)
+        /* move the current menu frame to fit, but dont touch parents yet */
+        menu_frame_move(self, self->area.x + dx, self->area.y + dy);
+        if (!config_menu_xorstyle)
+            dy = 0; /* if we want to be like xor, move parents in y- *
+                     * and x-direction, otherwise just in x-dir      */
+        for (f = self->parent; f; f = f->parent)
             menu_frame_move(f, f->area.x + dx, f->area.y + dy);
         for (f = self->child; f; f = f->child)
             menu_frame_move(f, f->area.x + dx, f->area.y + dy);
-        XWarpPointer(ob_display, None, None, 0, 0, 0, 0, dx, dy);
+        if (config_menu_warppointer)
+            XWarpPointer(ob_display, None, None, 0, 0, 0, 0, dx, dy);
     }
 }
 
@@ -584,20 +590,20 @@ static void menu_frame_update(ObMenuFrame *self)
     menu_frame_render(self);
 }
 
-void menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent)
+gboolean menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent)
 {
     GList *it;
 
     if (g_list_find(menu_frame_visible, self))
-        return;
+        return TRUE;
 
     if (menu_frame_visible == NULL) {
         /* no menus shown yet */
         if (!grab_pointer(TRUE, OB_CURSOR_NONE))
-            return;
+            return FALSE;
         if (!grab_keyboard(TRUE)) {
             grab_pointer(FALSE, OB_CURSOR_NONE);
-            return;
+            return FALSE;
         }
     }
 
@@ -626,6 +632,8 @@ void menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent)
     menu_frame_move_on_screen(self);
 
     XMapWindow(ob_display, self->window);
+
+    return TRUE;
 }
 
 void menu_frame_hide(ObMenuFrame *self)
This page took 0.023016 seconds and 4 git commands to generate.