]> Dogcows Code - chaz/openbox/blobdiff - openbox/menuframe.c
add keyboard shortcuts to the menus. you can specify the shortcut key with & even...
[chaz/openbox] / openbox / menuframe.c
index c6a333a9a86ac8193d007df49f027108163bc62b..d92f47df686cc756dc7ae635dafe23e0d522cee6 100644 (file)
@@ -31,9 +31,8 @@
 #define SEPARATOR_HEIGHT 3
 #define MAX_MENU_WIDTH 400
 
-#define FRAME_EVENTMASK (ButtonPressMask |ButtonMotionMask | \
-                         PointerMotionHintMask | \
-                         EnterWindowMask | LeaveWindowMask)
+#define FRAME_EVENTMASK (ButtonPressMask |ButtonMotionMask | EnterWindowMask |\
+                         LeaveWindowMask)
 #define ENTRY_EVENTMASK (EnterWindowMask | LeaveWindowMask | \
                          ButtonPressMask | ButtonReleaseMask)
 
@@ -319,6 +318,13 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                    self->a_text_selected :
                    self->a_text_normal));
         text_a->texture[0].data.text.string = self->entry->data.normal.label;
+        if (self->frame->menu->show_all_shortcuts ||
+            self->entry->data.normal.shortcut_position > 0)
+        {
+            text_a->texture[0].data.text.shortcut =
+                self->entry->data.normal.shortcut;
+        } else
+            text_a->texture[0].data.text.shortcut = 0;
         break;
     case OB_MENU_ENTRY_TYPE_SUBMENU:
         text_a = (self == self->frame->selected ?
@@ -326,6 +332,11 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                   self->a_text_normal);
         sub = self->entry->data.submenu.submenu;
         text_a->texture[0].data.text.string = sub ? sub->title : "";
+        if (self->frame->menu->show_all_shortcuts ||
+            sub->shortcut_position > 0) {
+            text_a->texture[0].data.text.shortcut = sub->shortcut;
+        } else
+            text_a->texture[0].data.text.shortcut = 0;
         break;
     case OB_MENU_ENTRY_TYPE_SEPARATOR:
         if (self->entry->data.separator.label != NULL)
@@ -887,7 +898,8 @@ static gboolean menu_entry_frame_submenu_timeout(gpointer data)
     return FALSE;
 }
 
-void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry)
+void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry,
+                       gboolean immediate)
 {
     ObMenuEntryFrame *old = self->selected;
     ObMenuFrame *oldchild = self->child;
@@ -914,7 +926,7 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry)
         menu_entry_frame_render(self->selected);
 
         if (self->selected->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) {
-            if (config_submenu_show_delay) {
+            if (config_submenu_show_delay && !immediate) {
                 /* initiate a new submenu open request */
                 ob_main_loop_timeout_add(ob_main_loop,
                                          config_submenu_show_delay * 1000,
@@ -989,7 +1001,7 @@ void menu_frame_select_previous(ObMenuFrame *self)
             }
         }
     }
-    menu_frame_select(self, it ? it->data : NULL);
+    menu_frame_select(self, it ? it->data : NULL, TRUE);
 }
 
 void menu_frame_select_next(ObMenuFrame *self)
@@ -1015,5 +1027,5 @@ void menu_frame_select_next(ObMenuFrame *self)
             }
         }
     }
-    menu_frame_select(self, it ? it->data : NULL);
+    menu_frame_select(self, it ? it->data : NULL, TRUE);
 }
This page took 0.025326 seconds and 4 git commands to generate.