diff --git a/data/geany.glade b/data/geany.glade index 1c5a86a9..d0f49bd2 100644 --- a/data/geany.glade +++ b/data/geany.glade @@ -6562,7 +6562,8 @@ False _Edit True - + + False diff --git a/src/callbacks.c b/src/callbacks.c index 1177925a..649072c0 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -183,7 +183,7 @@ static void on_file1_activate(GtkMenuItem *menuitem, gpointer user_data) /* edit actions, c&p & co, from menu bar and from popup menu */ -static void on_edit1_activate(GtkMenuItem *menuitem, gpointer user_data) +static void on_edit1_select(GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *item; GeanyDocument *doc = document_get_current(); @@ -200,6 +200,16 @@ static void on_edit1_activate(GtkMenuItem *menuitem, gpointer user_data) } +static void on_edit1_deselect(GtkMenuShell *menushell, gpointer user_data) +{ + /* we re-enable items that were disabled in on_edit1_select() on menu popdown to + * workaround mutli-layout keyboard issues in our keybinding handling code, so that + * GTK's accelerator handling can catch them. + * See https://github.com/geany/geany/issues/1368#issuecomment-273678207 */ + ui_menu_copy_items_set_sensitive(TRUE); +} + + void on_undo1_activate(GtkMenuItem *menuitem, gpointer user_data) { GeanyDocument *doc = document_get_current(); diff --git a/src/ui_utils.c b/src/ui_utils.c index 702a3453..43c5c49f 100644 --- a/src/ui_utils.c +++ b/src/ui_utils.c @@ -512,10 +512,19 @@ void ui_update_popup_goto_items(gboolean enable) } +void ui_menu_copy_items_set_sensitive(gboolean sensitive) +{ + guint i, len; + + len = G_N_ELEMENTS(widgets.menu_copy_items); + for (i = 0; i < len; i++) + ui_widget_set_sensitive(widgets.menu_copy_items[i], sensitive); +} + + void ui_update_menu_copy_items(GeanyDocument *doc) { gboolean enable = FALSE; - guint i, len; GtkWidget *focusw = gtk_window_get_focus(GTK_WINDOW(main_widgets.window)); g_return_if_fail(doc == NULL || doc->is_valid); @@ -533,9 +542,7 @@ void ui_update_menu_copy_items(GeanyDocument *doc) enable = gtk_text_buffer_get_selection_bounds(buffer, NULL, NULL); } - len = G_N_ELEMENTS(widgets.menu_copy_items); - for (i = 0; i < len; i++) - ui_widget_set_sensitive(widgets.menu_copy_items[i], enable); + ui_menu_copy_items_set_sensitive(enable); } diff --git a/src/ui_utils.h b/src/ui_utils.h index b260d0be..e94e5153 100644 --- a/src/ui_utils.h +++ b/src/ui_utils.h @@ -297,6 +297,8 @@ void ui_update_popup_copy_items(GeanyDocument *doc); void ui_update_popup_goto_items(gboolean enable); +void ui_menu_copy_items_set_sensitive(gboolean sensitive); + void ui_update_menu_copy_items(GeanyDocument *doc); void ui_update_insert_include_item(GeanyDocument *doc, gint item);