]> Dogcows Code - chaz/openbox/blobdiff - openbox/menu.c
comment
[chaz/openbox] / openbox / menu.c
index c41110184429ef9a02735a8c85b15dac81c6f28f..5d9ea796d5f71447ba1fd281b199563e7c373d08 100644 (file)
@@ -59,7 +59,8 @@ static void parse_menu_separator(ObParseInst *i,
 static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
                        gpointer data);
 static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut,
-                               gchar **strippedlabel, guint *position);
+                               gchar **strippedlabel, guint *position,
+                               gboolean *always_show);
 
 
 static void client_dest(ObClient *client, gpointer data)
@@ -204,11 +205,13 @@ static ObMenu* menu_from_name(gchar *name)
                            ((c) >= 'a' && (c) <= 'z'))
 
 static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut,
-                               gchar **strippedlabel, guint *position)
+                               gchar **strippedlabel, guint *position,
+                               gboolean *always_show)
 {
     gunichar shortcut = 0;
     
     *position = 0;
+    *always_show = FALSE;
 
     g_assert(strippedlabel != NULL);
 
@@ -233,6 +236,7 @@ static gunichar parse_shortcut(const gchar *label, gboolean allow_shortcut,
             if (VALID_SHORTCUT(*(i+1))) {
                 shortcut = g_unichar_tolower(g_utf8_get_char(i+1));
                 *position = i - *strippedlabel;
+                *always_show = TRUE;
 
                 /* remove the & from the string */
                 for (; *i != '\0'; ++i)
@@ -340,7 +344,8 @@ ObMenu* menu_new(const gchar *name, const gchar *title,
     self->data = data;
 
     self->shortcut = parse_shortcut(title, allow_shortcut_selection,
-                                    &self->title, &self->shortcut_position);
+                                    &self->title, &self->shortcut_position,
+                                    &self->shortcut_always_show);
 
     g_hash_table_replace(menu_hash, self->name, self);
 
@@ -407,7 +412,7 @@ static gboolean menu_hide_delay_func(gpointer data)
     return FALSE; /* no repeat */
 }
 
-void menu_show(gchar *name, gint x, gint y, gint button, ObClient *client)
+void menu_show(gchar *name, gint x, gint y, gboolean mouse, ObClient *client)
 {
     ObMenu *self;
     ObMenuFrame *frame;
@@ -429,10 +434,10 @@ void menu_show(gchar *name, gint x, gint y, gint button, ObClient *client)
     menu_clear_pipe_caches();
 
     frame = menu_frame_new(self, 0, client);
-    if (!menu_frame_show_topmenu(frame, x, y, button))
+    if (!menu_frame_show_topmenu(frame, x, y, mouse))
         menu_frame_free(frame);
     else {
-        if (!button) {
+        if (!mouse) {
             /* select the first entry if it's not a submenu and we opened
              * the menu with the keyboard, and skip all headers */
             GList *it = frame->entries;
@@ -449,7 +454,7 @@ void menu_show(gchar *name, gint x, gint y, gint button, ObClient *client)
         }
 
         /* reset the hide timer */
-        if (!button)
+        if (!mouse)
             menu_can_hide = TRUE;
         else {
             menu_can_hide = FALSE;
@@ -674,7 +679,8 @@ void menu_entry_set_label(ObMenuEntry *self, const gchar *label,
         g_free(self->data.normal.label);
         self->data.normal.shortcut =
             parse_shortcut(label, allow_shortcut, &self->data.normal.label,
-                           &self->data.normal.shortcut_position);
+                           &self->data.normal.shortcut_position,
+                           &self->data.normal.shortcut_always_show);
         break;
     default:
         g_assert_not_reached();
This page took 0.029494 seconds and 4 git commands to generate.