[evolution] Bug #711351 - Folder change in folder tree steals focus
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug #711351 - Folder change in folder tree steals focus
- Date: Fri, 7 Mar 2014 13:49:28 +0000 (UTC)
commit d325d27f96d7b3db849924b0282799968fb06010
Author: Milan Crha <mcrha redhat com>
Date: Fri Mar 7 14:48:30 2014 +0100
Bug #711351 - Folder change in folder tree steals focus
modules/mail/e-mail-shell-content.c | 3 ++
shell/e-shell-searchbar.c | 10 ++++++-
shell/e-shell-searchbar.h | 2 +
shell/e-shell-window-actions.c | 47 ++++++++++++++++++++++++++++++++++-
4 files changed, 60 insertions(+), 2 deletions(-)
---
diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c
index bd631f1..24c4ec6 100644
--- a/modules/mail/e-mail-shell-content.c
+++ b/modules/mail/e-mail-shell-content.c
@@ -222,6 +222,9 @@ mail_shell_content_focus_search_results (EShellContent *shell_content)
reader = E_MAIL_READER (mail_shell_content->priv->mail_view);
message_list = e_mail_reader_get_message_list (reader);
+ if (!message_list || MESSAGE_LIST (message_list)->just_set_folder)
+ return;
+
gtk_widget_grab_focus (message_list);
}
diff --git a/shell/e-shell-searchbar.c b/shell/e-shell-searchbar.c
index d00ed7c..2c070cf 100644
--- a/shell/e-shell-searchbar.c
+++ b/shell/e-shell-searchbar.c
@@ -477,7 +477,6 @@ shell_searchbar_option_changed_cb (GtkRadioAction *action,
e_shell_view_execute_search (shell_view);
} else {
shell_searchbar_save_search_option (searchbar);
- gtk_widget_grab_focus (searchbar->priv->search_entry);
}
} else if (search_text != NULL)
@@ -1443,3 +1442,12 @@ e_shell_searchbar_save_state (EShellSearchbar *searchbar)
searchbar->priv->state_dirty = FALSE;
}
+
+void
+e_shell_searchbar_search_entry_grab_focus (EShellSearchbar *searchbar)
+{
+ g_return_if_fail (E_IS_SHELL_SEARCHBAR (searchbar));
+ g_return_if_fail (searchbar->priv->search_entry);
+
+ gtk_widget_grab_focus (searchbar->priv->search_entry);
+}
diff --git a/shell/e-shell-searchbar.h b/shell/e-shell-searchbar.h
index dc0b22b..e5ccfb1 100644
--- a/shell/e-shell-searchbar.h
+++ b/shell/e-shell-searchbar.h
@@ -110,6 +110,8 @@ void e_shell_searchbar_set_state_group
const gchar *state_group);
void e_shell_searchbar_load_state (EShellSearchbar *searchbar);
void e_shell_searchbar_save_state (EShellSearchbar *searchbar);
+void e_shell_searchbar_search_entry_grab_focus
+ (EShellSearchbar *searchbar);
G_END_DECLS
diff --git a/shell/e-shell-window-actions.c b/shell/e-shell-window-actions.c
index fee8559..9146b54 100644
--- a/shell/e-shell-window-actions.c
+++ b/shell/e-shell-window-actions.c
@@ -538,6 +538,41 @@ action_search_edit_cb (GtkAction *action,
e_shell_window_update_search_menu (shell_window);
}
+static void
+search_options_selection_cancel_cb (GtkMenuShell *menu,
+ EShellWindow *shell_window);
+
+static void
+search_options_selection_done_cb (GtkMenuShell *menu,
+ EShellWindow *shell_window)
+{
+ EShellView *shell_view;
+ EShellSearchbar *search_bar;
+ const gchar *view_name;
+
+ /* disconnect first */
+ g_signal_handlers_disconnect_by_func (menu, search_options_selection_done_cb, shell_window);
+ g_signal_handlers_disconnect_by_func (menu, search_options_selection_cancel_cb, shell_window);
+
+ g_return_if_fail (E_IS_SHELL_WINDOW (shell_window));
+
+ view_name = e_shell_window_get_active_view (shell_window);
+ shell_view = e_shell_window_get_shell_view (shell_window, view_name);
+ g_return_if_fail (shell_view != NULL);
+
+ search_bar = E_SHELL_SEARCHBAR (e_shell_view_get_searchbar (shell_view));
+ e_shell_searchbar_search_entry_grab_focus (search_bar);
+}
+
+static void
+search_options_selection_cancel_cb (GtkMenuShell *menu,
+ EShellWindow *shell_window)
+{
+ /* only disconnect both functions, thus the selection-done is not called */
+ g_signal_handlers_disconnect_by_func (menu, search_options_selection_done_cb, shell_window);
+ g_signal_handlers_disconnect_by_func (menu, search_options_selection_cancel_cb, shell_window);
+}
+
/**
* E_SHELL_WINDOW_ACTION_SEARCH_OPTIONS:
* @window: an #EShellWindow
@@ -553,13 +588,23 @@ action_search_options_cb (GtkAction *action,
EShellViewClass *shell_view_class;
const gchar *view_name;
const gchar *widget_path;
+ GtkWidget *popup_menu;
view_name = e_shell_window_get_active_view (shell_window);
shell_view = e_shell_window_get_shell_view (shell_window, view_name);
shell_view_class = E_SHELL_VIEW_GET_CLASS (shell_view);
widget_path = shell_view_class->search_options;
- e_shell_view_show_popup_menu (shell_view, widget_path, NULL);
+ popup_menu = e_shell_view_show_popup_menu (shell_view, widget_path, NULL);
+
+ if (popup_menu) {
+ g_return_if_fail (GTK_IS_MENU_SHELL (popup_menu));
+
+ g_signal_connect_object (popup_menu, "selection-done",
+ G_CALLBACK (search_options_selection_done_cb), shell_window, 0);
+ g_signal_connect_object (popup_menu, "cancel",
+ G_CALLBACK (search_options_selection_cancel_cb), shell_window, 0);
+ }
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]