make menus optionally vertically centered, and enable by default, see bug #2746

This commit is contained in:
Mikael Magnusson 2006-08-02 17:25:32 +00:00
parent 27ebf0f331
commit 56c548b203
5 changed files with 28 additions and 7 deletions

View file

@ -373,6 +373,7 @@
<warpPointer>yes</warpPointer> <warpPointer>yes</warpPointer>
<xorStyle>yes</xorStyle> <xorStyle>yes</xorStyle>
<hideDelay>250</hideDelay> <hideDelay>250</hideDelay>
<middle>yes</middle>
<submenuShowDelay>0</submenuShowDelay> <submenuShowDelay>0</submenuShowDelay>
<desktopMenuIcons>yes</desktopMenuIcons> <desktopMenuIcons>yes</desktopMenuIcons>
<!-- --> <!-- -->

View file

@ -205,6 +205,7 @@
<xs:element minOccurs="0" name="warpPointer" type="ob:bool"/> <xs:element minOccurs="0" name="warpPointer" type="ob:bool"/>
<xs:element minOccurs="0" name="xorStyle" type="ob:bool"/> <xs:element minOccurs="0" name="xorStyle" type="ob:bool"/>
<xs:element minOccurs="0" name="hideDelay" type="xs:integer"/> <xs:element minOccurs="0" name="hideDelay" type="xs:integer"/>
<xs:element minOccurs="0" name="middle" type="ob:bool"/>
<xs:element minOccurs="0" name="submenuShowDelay" type="xs:integer"/> <xs:element minOccurs="0" name="submenuShowDelay" type="xs:integer"/>
<xs:element minOccurs="0" name="desktopMenuIcons" type="ob:bool"/> <xs:element minOccurs="0" name="desktopMenuIcons" type="ob:bool"/>
</xs:sequence> </xs:sequence>

View file

@ -72,14 +72,14 @@ gint config_mouse_dclicktime;
gboolean config_menu_warppointer; gboolean config_menu_warppointer;
gboolean config_menu_xorstyle; gboolean config_menu_xorstyle;
guint config_menu_hide_delay; guint config_menu_hide_delay;
gboolean config_menu_middle;
guint config_submenu_show_delay; guint config_submenu_show_delay;
gboolean config_menu_client_list_icons; gboolean config_menu_client_list_icons;
GSList *config_menu_files; GSList *config_menu_files;
gint config_resist_win; gint config_resist_win;
gint config_resist_edge; gint config_resist_edge;
gboolean config_resist_layers_below; gboolean config_resist_layers_below;
GSList *config_per_app_settings; GSList *config_per_app_settings;
@ -596,6 +596,8 @@ static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
config_menu_xorstyle = parse_bool(doc, n); config_menu_xorstyle = parse_bool(doc, n);
if ((n = parse_find_node("hideDelay", node))) if ((n = parse_find_node("hideDelay", node)))
config_menu_hide_delay = parse_int(doc, n); config_menu_hide_delay = parse_int(doc, n);
if ((n = parse_find_node("middle", node)))
config_menu_middle = parse_bool(doc, n);
if ((n = parse_find_node("submenuShowDelay", node))) if ((n = parse_find_node("submenuShowDelay", node)))
config_submenu_show_delay = parse_int(doc, n); config_submenu_show_delay = parse_int(doc, n);
if ((n = parse_find_node("desktopMenuIcons", node))) if ((n = parse_find_node("desktopMenuIcons", node)))
@ -793,6 +795,7 @@ void config_startup(ObParseInst *i)
config_menu_warppointer = TRUE; config_menu_warppointer = TRUE;
config_menu_xorstyle = TRUE; config_menu_xorstyle = TRUE;
config_menu_hide_delay = 250; config_menu_hide_delay = 250;
config_menu_middle = TRUE;
config_submenu_show_delay = 0; config_submenu_show_delay = 0;
config_menu_client_list_icons = TRUE; config_menu_client_list_icons = TRUE;
config_menu_files = NULL; config_menu_files = NULL;

View file

@ -122,6 +122,8 @@ extern gboolean config_menu_warppointer;
extern gboolean config_menu_xorstyle; extern gboolean config_menu_xorstyle;
/*! delay for hiding menu when opening */ /*! delay for hiding menu when opening */
extern guint config_menu_hide_delay; extern guint config_menu_hide_delay;
/*! Center menus vertically about the parent entry */
extern gboolean config_menu_middle;
/*! delay before opening a submenu */ /*! delay before opening a submenu */
extern guint config_submenu_show_delay; extern guint config_submenu_show_delay;
/*! show icons in client_list_menu */ /*! show icons in client_list_menu */

View file

@ -628,6 +628,16 @@ gboolean menu_frame_show(ObMenuFrame *self, ObMenuFrame *parent)
menu_frame_update(self); menu_frame_update(self);
menu_frame_visible = g_list_prepend(menu_frame_visible, 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); menu_frame_move_on_screen(self);
@ -780,10 +790,14 @@ void menu_entry_frame_show_submenu(ObMenuEntryFrame *self)
f = menu_frame_new(self->entry->data.submenu.submenu, f = menu_frame_new(self->entry->data.submenu.submenu,
self->frame->client); self->frame->client);
menu_frame_move(f, menu_frame_move(f,
self->frame->area.x + self->frame->area.width self->frame->area.x
- ob_rr_theme->menu_overlap - ob_rr_theme->bwidth, + self->frame->area.width
self->frame->area.y + self->frame->title_h + - ob_rr_theme->menu_overlap
self->area.y + 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); menu_frame_show(f, self->frame);
} }