]> Dogcows Code - chaz/openbox/blobdiff - openbox/menuframe.c
if sm is disabled, there is nothing to shutdown, so don't go trying to free things...
[chaz/openbox] / openbox / menuframe.c
index 6cfcd6173461603a45dbc729c9781149ea8cf1aa..e9fc32da0a946510e1d85e7b4f3a06a19cce01e1 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
 
    menuframe.c for the Openbox window manager
-   Copyright (c) 2004        Mikael Magnusson
+   Copyright (c) 2006        Mikael Magnusson
    Copyright (c) 2003        Ben Jansens
 
    This program is free software; you can redistribute it and/or modify
@@ -23,6 +23,7 @@
 #include "screen.h"
 #include "grab.h"
 #include "openbox.h"
+#include "mainloop.h"
 #include "config.h"
 #include "render/theme.h"
 
@@ -67,7 +68,7 @@ ObMenuFrame* menu_frame_new(ObMenu *menu, ObClient *client)
 
     attr.event_mask = FRAME_EVENTMASK;
     self->window = createWindow(RootWindow(ob_display, ob_screen),
-                                   CWEventMask, &attr);
+                                CWEventMask, &attr);
     attr.event_mask = TITLE_EVENTMASK;
     self->title = createWindow(self->window, CWEventMask, &attr);
     self->items = createWindow(self->window, 0, NULL);
@@ -188,7 +189,6 @@ void menu_frame_move(ObMenuFrame *self, gint x, gint y)
 void menu_frame_move_on_screen(ObMenuFrame *self)
 {
     Rect *a = NULL;
-    guint i;
     gint dx = 0, dy = 0;
     gint pos, half;
 
@@ -250,6 +250,8 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
     case OB_MENU_ENTRY_TYPE_SEPARATOR:
         th = SEPARATOR_HEIGHT + 2*PADDING;
         break;
+    default:
+        g_assert_not_reached();
     }
     RECT_SET_SIZE(self->area, self->frame->inner_w, th);
     XResizeWindow(ob_display, self->window,
@@ -627,6 +629,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);
 
@@ -664,13 +676,14 @@ void menu_frame_hide(ObMenuFrame *self)
 
 void menu_frame_hide_all()
 {
+    GList *it;
+
     if (config_submenu_show_delay) {
         /* remove any submenu open requests */
         ob_main_loop_timeout_remove(ob_main_loop,
                                     menu_entry_frame_submenu_timeout);
     }
-    GList *it = g_list_last(menu_frame_visible);
-    if (it) 
+    if ((it = g_list_last(menu_frame_visible)))
         menu_frame_hide(it->data);
 }
 
@@ -779,10 +792,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.022417 seconds and 4 git commands to generate.