From d22ab4c4dade1c458fa37fc0dc7b6b861e5cfbc3 Mon Sep 17 00:00:00 2001 From: pelatx Date: Tue, 17 Apr 2018 09:52:50 +0200 Subject: [PATCH] Linux native menus lost shortcuts (#637) * Initial commit. Some shortcuts still not seen. * Shorcuts return (to Linux native menus) * Indentation fix. * More indentation fixes. --- appshell/appshell_extensions_gtk.cpp | 14 +++++++++----- appshell/native_menu_model.cpp | 16 ++++++++++++++++ appshell/native_menu_model.h | 11 +++++------ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/appshell/appshell_extensions_gtk.cpp b/appshell/appshell_extensions_gtk.cpp index 43136c475..77bf201fe 100644 --- a/appshell/appshell_extensions_gtk.cpp +++ b/appshell/appshell_extensions_gtk.cpp @@ -1064,6 +1064,7 @@ int32 AddMenuItem(CefRefPtr browser, ExtensionString parentCommand, ExtensionString commandId = model.getCommandId(tag); model.setOsItem(tag, entry); + model.setKey(tag, key); ParseShortcut(browser, entry, key, commandId); GtkWidget* menuHeader = (GtkWidget*) model.getOsItem(parentTag); GtkWidget* menuWidget = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menuHeader)); @@ -1140,13 +1141,16 @@ int32 SetMenuItemState(CefRefPtr browser, ExtensionString command, b if (checked == true) { newMenuItem = gtk_check_menu_item_new_with_label(label); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(newMenuItem), true); - } else if (checked == false){ + } else { newMenuItem = gtk_menu_item_new_with_label(label); } gtk_widget_destroy(menuItem); InstallMenuHandler(newMenuItem, browser, tag); + model.setOsItem(tag, newMenuItem); + ExtensionString key = model.getKey(tag); + ParseShortcut(browser, newMenuItem, key, command); gtk_menu_shell_insert(GTK_MENU_SHELL(parent), newMenuItem, position); gtk_widget_set_sensitive(newMenuItem, enabled); gtk_widget_show(newMenuItem); @@ -1191,13 +1195,15 @@ int32 GetMenuTitle(CefRefPtr browser, ExtensionString commandId, Ext int32 SetMenuItemShortcut(CefRefPtr browser, ExtensionString commandId, ExtensionString shortcut, ExtensionString displayStr) { - NativeMenuModel model = NativeMenuModel::getInstance(getMenuParent(browser)); - int32 tag = model.getTag(commandId); + NativeMenuModel& model = NativeMenuModel::getInstance(getMenuParent(browser)); + int tag = model.getTag(commandId); if (tag == kTagNotFound) { return ERR_NOT_FOUND; } GtkWidget* entry = (GtkWidget*) model.getOsItem(tag); + model.setKey(tag, shortcut); ParseShortcut(browser, entry, shortcut, commandId); + return NO_ERROR; } @@ -1396,5 +1402,3 @@ std::string GetSystemUniqueID() return buf; } - - diff --git a/appshell/native_menu_model.cpp b/appshell/native_menu_model.cpp index 4ccd98a43..59191833d 100644 --- a/appshell/native_menu_model.cpp +++ b/appshell/native_menu_model.cpp @@ -97,6 +97,22 @@ ExtensionString NativeMenuModel::getParentId(int tag) { return menuItems[tag].parentId; } +ExtensionString NativeMenuModel::getKey(int tag) { + menu::iterator foundItem = menuItems.find(tag); + if(foundItem == menuItems.end()) { + return ExtensionString(); + } + return menuItems[tag].key; +} + +void NativeMenuModel::setKey (int tag, ExtensionString theKey) { + menu::iterator foundItem = menuItems.find(tag); + if(foundItem == menuItems.end()) { + return; + } + menuItems[tag].key = theKey; +} + int NativeMenuModel::getOrCreateTag(ExtensionString command, ExtensionString parent) { menuTag::iterator foundItem = commandMap.find(command); diff --git a/appshell/native_menu_model.h b/appshell/native_menu_model.h index 72892d1e7..fe3013887 100644 --- a/appshell/native_menu_model.h +++ b/appshell/native_menu_model.h @@ -46,7 +46,8 @@ class NativeMenuItemModel enabled(enabled), osItem(NULL), commandId(commandId), - parentId(parentId) + parentId(parentId), + key(ExtensionString()) { } bool checked; @@ -54,6 +55,7 @@ class NativeMenuItemModel void *osItem; ExtensionString commandId; ExtensionString parentId; + ExtensionString key; }; //command name -> menutag @@ -91,13 +93,10 @@ class NativeMenuModel { int setTag(ExtensionString command, ExtensionString parent, int tag); ExtensionString getCommandId(int tag); ExtensionString getParentId(int tag); + ExtensionString getKey(int tag); + void setKey(int tag, ExtensionString theKey); void setOsItem (int tag, void* theItem); void* getOsItem (int tag); int removeMenuItem(const ExtensionString& command); }; - - - - -