]> Dogcows Code - chaz/openbox/blobdiff - openbox/menuframe.c
make menus optionally vertically centered, and enable by default, see bug #2746
[chaz/openbox] / openbox / menuframe.c
index 6cfcd6173461603a45dbc729c9781149ea8cf1aa..120f4c385c89e9a75fa2d9e4d16c10e83181c5a2 100644 (file)
@@ -66,8 +66,9 @@ ObMenuFrame* menu_frame_new(ObMenu *menu, ObClient *client)
     self->client = client;
 
     attr.event_mask = FRAME_EVENTMASK;
+    attr.save_under = True;
     self->window = createWindow(RootWindow(ob_display, ob_screen),
-                                   CWEventMask, &attr);
+                                   CWEventMask | CWSaveUnder, &attr);
     attr.event_mask = TITLE_EVENTMASK;
     self->title = createWindow(self->window, CWEventMask, &attr);
     self->items = createWindow(self->window, 0, NULL);
@@ -627,6 +628,16 @@ gboolean menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent)
     menu_frame_update(self);
 
     menu_frame_visible = g_list_prepend(menu_frame_visible, self);
+    
+    if (config_menu_middle) {
+        if (self->parent)
+            menu_frame_move(self, self->area.x, self->area.y
+                                                - self->area.height/2
+                                                + self->item_h/2);
+        else if (self->show_title)
+            menu_frame_move(self, self->area.x - self->area.width/2,
+                            self->area.y - self->title_h*3/4);
+    }
 
     menu_frame_move_on_screen(self);
 
@@ -779,10 +790,14 @@ void menu_entry_frame_show_submenu(ObMenuEntryFrame *self)
     f = menu_frame_new(self->entry->data.submenu.submenu,
                        self->frame->client);
     menu_frame_move(f,
-                    self->frame->area.x + self->frame->area.width
-                    - ob_rr_theme->menu_overlap - ob_rr_theme->bwidth,
-                    self->frame->area.y + self->frame->title_h +
-                    self->area.y + ob_rr_theme->menu_overlap);
+                    self->frame->area.x
+                  + self->frame->area.width
+                  - ob_rr_theme->menu_overlap
+                  - ob_rr_theme->bwidth,
+                    self->frame->area.y
+                  + self->frame->title_h
+                  + self->area.y
+                  + (config_menu_middle ? 1 : ob_rr_theme->menu_overlap));
     menu_frame_show(f, self->frame);
 }
 
This page took 0.023827 seconds and 4 git commands to generate.