X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fmenuframe.c;h=d92f47df686cc756dc7ae635dafe23e0d522cee6;hb=5d5be2ba2a6e0b3886e0076475ed9d7a2d4ac9ab;hp=f359c9852ee091b0c14e2793de5584fbc427b124;hpb=939fbcfd31e07a6e0f1cdbfcef9b04f63e6af700;p=chaz%2Fopenbox diff --git a/openbox/menuframe.c b/openbox/menuframe.c index f359c985..d92f47df 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -174,15 +174,15 @@ static void menu_entry_frame_free(ObMenuEntryFrame *self) if (self) { XDestroyWindow(ob_display, self->text); XDestroyWindow(ob_display, self->window); - g_hash_table_insert(menu_frame_map, &self->text, self); - g_hash_table_insert(menu_frame_map, &self->window, self); + g_hash_table_remove(menu_frame_map, &self->text); + g_hash_table_remove(menu_frame_map, &self->window); if (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) { XDestroyWindow(ob_display, self->icon); - g_hash_table_insert(menu_frame_map, &self->icon, self); + g_hash_table_remove(menu_frame_map, &self->icon); } if (self->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU) { XDestroyWindow(ob_display, self->bullet); - g_hash_table_insert(menu_frame_map, &self->bullet, self); + g_hash_table_remove(menu_frame_map, &self->bullet); } RrAppearanceFree(self->a_normal); @@ -318,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 ? @@ -325,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) @@ -681,10 +693,10 @@ static gboolean menu_frame_show(ObMenuFrame *self) if (menu_frame_visible == NULL) { /* no menus shown yet */ - if (!grab_pointer(TRUE, OB_CURSOR_POINTER)) + if (!grab_pointer(TRUE, TRUE, OB_CURSOR_POINTER)) return FALSE; if (!grab_keyboard(TRUE)) { - grab_pointer(FALSE, OB_CURSOR_POINTER); + grab_pointer(FALSE, TRUE, OB_CURSOR_POINTER); return FALSE; } } @@ -809,7 +821,7 @@ void menu_frame_hide(ObMenuFrame *self) if (menu_frame_visible == NULL) { /* last menu shown */ - grab_pointer(FALSE, OB_CURSOR_NONE); + grab_pointer(FALSE, TRUE, OB_CURSOR_NONE); grab_keyboard(FALSE); } @@ -886,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; @@ -913,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, @@ -988,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) @@ -1014,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); }