From 111dbc64964844bc72dd0ce83fa4af14735c5252 Mon Sep 17 00:00:00 2001 From: Abel 'Akronix' Serrano Juste Date: Sat, 31 Oct 2015 17:06:41 +0100 Subject: [PATCH 1/4] Keybinding for switching focus to splitwindow. Fix #631 --- plugins/splitwindow.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/plugins/splitwindow.c b/plugins/splitwindow.c index 724c765e9b..0106f114f8 100644 --- a/plugins/splitwindow.c +++ b/plugins/splitwindow.c @@ -29,6 +29,7 @@ #include "gtkcompat.h" #include +#include PLUGIN_VERSION_CHECK(GEANY_API_VERSION) PLUGIN_SET_INFO(_("Split Window"), _("Splits the editor view into two windows."), @@ -45,6 +46,7 @@ enum KB_SPLIT_HORIZONTAL, KB_SPLIT_VERTICAL, KB_SPLIT_UNSPLIT, + KB_FOCUS_SPLIT_WINDOW, KB_COUNT }; @@ -409,6 +411,14 @@ static void on_unsplit(GtkMenuItem *menuitem, gpointer user_data) } +static void switch_focus_to_split_window( void ) +{ + GtkWidget *sci_widget = GTK_WIDGET(edit_window.sci); + if (!gtk_widget_has_focus(sci_widget)) + gtk_widget_grab_focus(sci_widget); +} + + static void kb_activate(guint key_id) { switch (key_id) @@ -425,6 +435,10 @@ static void kb_activate(guint key_id) if (plugin_state != STATE_UNSPLIT) on_unsplit(NULL, NULL); break; + case KB_FOCUS_SPLIT_WINDOW: + if (plugin_state != STATE_UNSPLIT) + switch_focus_to_split_window(); + break; } } @@ -468,6 +482,8 @@ void plugin_init(GeanyData *data) 0, 0, "split_vertical", _("Top and Bottom"), menu_items.vertical); keybindings_set_item(key_group, KB_SPLIT_UNSPLIT, kb_activate, 0, 0, "split_unsplit", _("_Unsplit"), menu_items.unsplit); + keybindings_set_item(key_group, KB_FOCUS_SPLIT_WINDOW, kb_activate, + GDK_F3, 0, "focus_split_window", _("Switch to Split Window"), NULL); } From ef73a434ff35f7e8d8d1f976ba7cbebe36b6fa53 Mon Sep 17 00:00:00 2001 From: Abel Serrano Juste Date: Fri, 20 Apr 2018 09:44:58 +0200 Subject: [PATCH 2/4] Improvements on switch focus feature for the split window plugin. - Removed default shortcut for switch focus - switch focus between main and splitted window --- plugins/splitwindow.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/plugins/splitwindow.c b/plugins/splitwindow.c index 0106f114f8..af492d26fa 100644 --- a/plugins/splitwindow.c +++ b/plugins/splitwindow.c @@ -29,8 +29,6 @@ #include "gtkcompat.h" #include -#include - PLUGIN_VERSION_CHECK(GEANY_API_VERSION) PLUGIN_SET_INFO(_("Split Window"), _("Splits the editor view into two windows."), VERSION, _("The Geany developer team")) @@ -64,6 +62,7 @@ static struct GtkWidget *horizontal; GtkWidget *vertical; GtkWidget *unsplit; + GtkWidget *switch_focus; } menu_items; @@ -196,6 +195,8 @@ static void set_state(enum State id) (id != STATE_SPLIT_HORIZONTAL) && (id != STATE_SPLIT_VERTICAL)); gtk_widget_set_sensitive(menu_items.unsplit, id != STATE_UNSPLIT); + gtk_widget_set_sensitive(menu_items.switch_focus, + id != STATE_UNSPLIT); plugin_state = id; } @@ -411,11 +412,15 @@ static void on_unsplit(GtkMenuItem *menuitem, gpointer user_data) } -static void switch_focus_to_split_window( void ) +static void on_switch_focus( void ) { - GtkWidget *sci_widget = GTK_WIDGET(edit_window.sci); - if (!gtk_widget_has_focus(sci_widget)) - gtk_widget_grab_focus(sci_widget); + GtkWidget *splitted_window = GTK_WIDGET(edit_window.sci); + GtkWidget *main_window = GTK_WIDGET(edit_window.editor->sci); + + if (!gtk_widget_has_focus(splitted_window)) + gtk_widget_grab_focus(splitted_window); + else + gtk_widget_grab_focus(main_window); } @@ -437,7 +442,7 @@ static void kb_activate(guint key_id) break; case KB_FOCUS_SPLIT_WINDOW: if (plugin_state != STATE_UNSPLIT) - switch_focus_to_split_window(); + on_switch_focus(); break; } } @@ -470,6 +475,11 @@ void plugin_init(GeanyData *data) g_signal_connect(item, "activate", G_CALLBACK(on_unsplit), NULL); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + menu_items.switch_focus = item = + gtk_menu_item_new_with_mnemonic(_("Switch _Focus")); + g_signal_connect(item, "activate", G_CALLBACK(on_switch_focus), NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); + gtk_widget_show_all(menu_items.main); set_state(STATE_UNSPLIT); @@ -483,7 +493,7 @@ void plugin_init(GeanyData *data) keybindings_set_item(key_group, KB_SPLIT_UNSPLIT, kb_activate, 0, 0, "split_unsplit", _("_Unsplit"), menu_items.unsplit); keybindings_set_item(key_group, KB_FOCUS_SPLIT_WINDOW, kb_activate, - GDK_F3, 0, "focus_split_window", _("Switch to Split Window"), NULL); + 0, 0, "focus_split_window", _("Switch focus between windows"), menu_items.switch_focus); } From fa26e40a47fd3e638d6ea2dfda53cbb33d3d8f62 Mon Sep 17 00:00:00 2001 From: Abel Serrano Juste Date: Mon, 23 Apr 2018 18:44:21 +0200 Subject: [PATCH 3/4] Added keybinding mnemonic to Switch focus. Added keybinding mnemonic to Switch focus between windows in split window plugin. --- plugins/splitwindow.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/splitwindow.c b/plugins/splitwindow.c index af492d26fa..f907dc45a0 100644 --- a/plugins/splitwindow.c +++ b/plugins/splitwindow.c @@ -493,7 +493,7 @@ void plugin_init(GeanyData *data) keybindings_set_item(key_group, KB_SPLIT_UNSPLIT, kb_activate, 0, 0, "split_unsplit", _("_Unsplit"), menu_items.unsplit); keybindings_set_item(key_group, KB_FOCUS_SPLIT_WINDOW, kb_activate, - 0, 0, "focus_split_window", _("Switch focus between windows"), menu_items.switch_focus); + 0, 0, "focus_split_window", _("Switch _focus between windows"), menu_items.switch_focus); } From b0183d7000f2797941120b4fbdff3b358542928d Mon Sep 17 00:00:00 2001 From: Abel Serrano Juste Date: Wed, 25 Apr 2018 20:10:06 +0200 Subject: [PATCH 4/4] Update splitwindow.c Removed incorrect mnemonics in calls to keybindings_set_item() --- plugins/splitwindow.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/splitwindow.c b/plugins/splitwindow.c index f907dc45a0..ce14f39a6a 100644 --- a/plugins/splitwindow.c +++ b/plugins/splitwindow.c @@ -491,9 +491,9 @@ void plugin_init(GeanyData *data) keybindings_set_item(key_group, KB_SPLIT_VERTICAL, kb_activate, 0, 0, "split_vertical", _("Top and Bottom"), menu_items.vertical); keybindings_set_item(key_group, KB_SPLIT_UNSPLIT, kb_activate, - 0, 0, "split_unsplit", _("_Unsplit"), menu_items.unsplit); + 0, 0, "split_unsplit", _("Unsplit"), menu_items.unsplit); keybindings_set_item(key_group, KB_FOCUS_SPLIT_WINDOW, kb_activate, - 0, 0, "focus_split_window", _("Switch _focus between windows"), menu_items.switch_focus); + 0, 0, "focus_split_window", _("Switch focus between windows"), menu_items.switch_focus); }