diff options
-rw-r--r-- | modules/addressbook/e-book-shell-content.c | 13 | ||||
-rw-r--r-- | modules/calendar/e-cal-shell-content.c | 21 | ||||
-rw-r--r-- | modules/calendar/e-memo-shell-content.c | 11 | ||||
-rw-r--r-- | modules/calendar/e-task-shell-content.c | 11 | ||||
-rw-r--r-- | modules/mail/e-mail-shell-content.c | 11 | ||||
-rw-r--r-- | shell/e-shell-content.c | 23 | ||||
-rw-r--r-- | shell/e-shell-content.h | 3 | ||||
-rw-r--r-- | shell/e-shell-searchbar.c | 13 |
8 files changed, 100 insertions, 6 deletions
diff --git a/modules/addressbook/e-book-shell-content.c b/modules/addressbook/e-book-shell-content.c index 66cd6a4660..bc374079a3 100644 --- a/modules/addressbook/e-book-shell-content.c +++ b/modules/addressbook/e-book-shell-content.c @@ -364,6 +364,18 @@ book_shell_content_check_state (EShellContent *shell_content) } static void +book_shell_content_focus_search_results (EShellContent *shell_content) +{ + EBookShellContent *book_shell_content; + EAddressbookView *view; + + book_shell_content = E_BOOK_SHELL_CONTENT (shell_content); + view = e_book_shell_content_get_current_view (book_shell_content); + + gtk_widget_grab_focus (GTK_WIDGET (view)); +} + +static void book_shell_content_class_init (EBookShellContentClass *class) { GObjectClass *object_class; @@ -380,6 +392,7 @@ book_shell_content_class_init (EBookShellContentClass *class) shell_content_class = E_SHELL_CONTENT_CLASS (class); shell_content_class->check_state = book_shell_content_check_state; + shell_content_class->focus_search_results = book_shell_content_focus_search_results; g_object_class_install_property ( object_class, diff --git a/modules/calendar/e-cal-shell-content.c b/modules/calendar/e-cal-shell-content.c index a51a072f66..146d9b964a 100644 --- a/modules/calendar/e-cal-shell-content.c +++ b/modules/calendar/e-cal-shell-content.c @@ -357,6 +357,7 @@ cal_shell_content_constructed (GObject *object) foreign_content = e_shell_view_get_shell_content (foreign_view); g_object_get (foreign_content, "model", &task_model, NULL); } + /* Build content widgets. */ container = GTK_WIDGET (object); @@ -547,10 +548,27 @@ cal_shell_content_map (GtkWidget *widget) } static void +cal_shell_content_focus_search_results (EShellContent *shell_content) +{ + ECalShellContent *cal_shell_content; + GnomeCalendar *calendar; + GnomeCalendarViewType view_type; + ECalendarView *calendar_view; + + cal_shell_content = E_CAL_SHELL_CONTENT (shell_content); + calendar = e_cal_shell_content_get_calendar (cal_shell_content); + view_type = gnome_calendar_get_view (calendar); + calendar_view = gnome_calendar_get_calendar_view (calendar, view_type); + + gtk_widget_grab_focus (GTK_WIDGET (calendar_view)); +} + +static void cal_shell_content_class_init (ECalShellContentClass *class) { GObjectClass *object_class; GtkWidgetClass *widget_class; + EShellContentClass *shell_content_class; parent_class = g_type_class_peek_parent (class); g_type_class_add_private (class, sizeof (ECalShellContentPrivate)); @@ -564,6 +582,9 @@ cal_shell_content_class_init (ECalShellContentClass *class) widget_class = GTK_WIDGET_CLASS (class); widget_class->map = cal_shell_content_map; + shell_content_class = E_SHELL_CONTENT_CLASS (class); + shell_content_class->focus_search_results = cal_shell_content_focus_search_results; + g_object_class_install_property ( object_class, PROP_CALENDAR, diff --git a/modules/calendar/e-memo-shell-content.c b/modules/calendar/e-memo-shell-content.c index f9188dedc5..663920044c 100644 --- a/modules/calendar/e-memo-shell-content.c +++ b/modules/calendar/e-memo-shell-content.c @@ -601,6 +601,16 @@ memo_shell_content_check_state (EShellContent *shell_content) } static void +memo_shell_content_focus_search_results (EShellContent *shell_content) +{ + EMemoShellContentPrivate *priv; + + priv = E_MEMO_SHELL_CONTENT_GET_PRIVATE (shell_content); + + gtk_widget_grab_focus (priv->memo_table); +} + +static void memo_shell_content_class_init (EMemoShellContentClass *class) { GObjectClass *object_class; @@ -618,6 +628,7 @@ memo_shell_content_class_init (EMemoShellContentClass *class) shell_content_class = E_SHELL_CONTENT_CLASS (class); shell_content_class->check_state = memo_shell_content_check_state; + shell_content_class->focus_search_results = memo_shell_content_focus_search_results; g_object_class_install_property ( object_class, diff --git a/modules/calendar/e-task-shell-content.c b/modules/calendar/e-task-shell-content.c index b2744a883e..bb2017fa8a 100644 --- a/modules/calendar/e-task-shell-content.c +++ b/modules/calendar/e-task-shell-content.c @@ -621,6 +621,16 @@ task_shell_content_check_state (EShellContent *shell_content) } static void +task_shell_content_focus_search_results (EShellContent *shell_content) +{ + ETaskShellContentPrivate *priv; + + priv = E_TASK_SHELL_CONTENT_GET_PRIVATE (shell_content); + + gtk_widget_grab_focus (priv->task_table); +} + +static void task_shell_content_class_init (ETaskShellContentClass *class) { GObjectClass *object_class; @@ -638,6 +648,7 @@ task_shell_content_class_init (ETaskShellContentClass *class) shell_content_class = E_SHELL_CONTENT_CLASS (class); shell_content_class->check_state = task_shell_content_check_state; + shell_content_class->focus_search_results = task_shell_content_focus_search_results; g_object_class_install_property ( object_class, diff --git a/modules/mail/e-mail-shell-content.c b/modules/mail/e-mail-shell-content.c index d0e3ffa0e9..e7fb20d1cf 100644 --- a/modules/mail/e-mail-shell-content.c +++ b/modules/mail/e-mail-shell-content.c @@ -489,6 +489,16 @@ mail_shell_content_check_state (EShellContent *shell_content) return e_mail_reader_check_state (E_MAIL_READER (shell_content)); } +static void +mail_shell_content_focus_search_results (EShellContent *shell_content) +{ + EMailShellContentPrivate *priv; + + priv = E_MAIL_SHELL_CONTENT_GET_PRIVATE (shell_content); + + gtk_widget_grab_focus (priv->message_list); +} + static GtkActionGroup * mail_shell_content_get_action_group (EMailReader *reader) { @@ -695,6 +705,7 @@ mail_shell_content_class_init (EMailShellContentClass *class) shell_content_class = E_SHELL_CONTENT_CLASS (class); shell_content_class->check_state = mail_shell_content_check_state; + shell_content_class->focus_search_results = mail_shell_content_focus_search_results; /* Inherited from EMailReader */ g_object_class_override_property ( diff --git a/shell/e-shell-content.c b/shell/e-shell-content.c index 515dfa83bf..d897e110ad 100644 --- a/shell/e-shell-content.c +++ b/shell/e-shell-content.c @@ -386,6 +386,29 @@ e_shell_content_check_state (EShellContent *shell_content) } /** + * e_shell_content_focus_search_results: + * @shell_content: an #EShellContent + * + * #EShellContent subclasses should implement the + * <structfield>focus_search_results</structfield> method in + * #EShellContentClass to direct input focus to the widget + * displaying search results. This is usually called during + * e_shell_view_execute_search(). + **/ +void +e_shell_content_focus_search_results (EShellContent *shell_content) +{ + EShellContentClass *shell_content_class; + + g_return_if_fail (E_IS_SHELL_CONTENT (shell_content)); + + shell_content_class = E_SHELL_CONTENT_GET_CLASS (shell_content); + + if (shell_content_class->focus_search_results != NULL) + shell_content_class->focus_search_results (shell_content); +} + +/** * e_shell_content_get_shell_view: * @shell_content: an #EShellContent * diff --git a/shell/e-shell-content.h b/shell/e-shell-content.h index e6a11291a7..a92ac346b8 100644 --- a/shell/e-shell-content.h +++ b/shell/e-shell-content.h @@ -68,6 +68,7 @@ struct _EShellContentClass { /* Methods */ guint32 (*check_state) (EShellContent *shell_content); + void (*focus_search_results) (EShellContent *shell_content); }; GType e_shell_content_get_type (void); @@ -75,6 +76,8 @@ GtkWidget * e_shell_content_new (struct _EShellView *shell_view); void e_shell_content_set_searchbar (EShellContent *shell_content, GtkWidget *searchbar); guint32 e_shell_content_check_state (EShellContent *shell_content); +void e_shell_content_focus_search_results + (EShellContent *shell_content); struct _EShellView * e_shell_content_get_shell_view (EShellContent *shell_content); const gchar * e_shell_content_get_view_id (EShellContent *shell_content); diff --git a/shell/e-shell-searchbar.c b/shell/e-shell-searchbar.c index e8e4fe230d..d1f8f65d62 100644 --- a/shell/e-shell-searchbar.c +++ b/shell/e-shell-searchbar.c @@ -300,7 +300,7 @@ static void shell_searchbar_execute_search_cb (EShellView *shell_view, EShellSearchbar *searchbar) { - GtkWidget *widget; + EShellContent *shell_content; shell_searchbar_update_search_widgets (searchbar); @@ -312,9 +312,10 @@ shell_searchbar_execute_search_cb (EShellView *shell_view, /* Direct the focus away from the search entry, so that a * focus-in event is required before the text can be changed. * This will reset the entry to the appropriate visual state. */ - widget = searchbar->priv->search_entry; - if (gtk_widget_is_focus (widget)) - gtk_widget_child_focus (widget, GTK_DIR_TAB_FORWARD); + if (gtk_widget_is_focus (searchbar->priv->search_entry)) { + shell_content = e_shell_view_get_shell_content (shell_view); + e_shell_content_focus_search_results (shell_content); + } } static void @@ -857,7 +858,7 @@ e_shell_searchbar_class_init (EShellSearchbarClass *class) G_PARAM_CONSTRUCT)); /** - * EShellContent:shell-view + * EShellSearchbar:shell-view * * The #EShellView to which the searchbar widget belongs. **/ @@ -873,7 +874,7 @@ e_shell_searchbar_class_init (EShellSearchbarClass *class) G_PARAM_CONSTRUCT_ONLY)); /** - * EShellContent:state-group + * EShellSearchbar:state-group * * Key file group name to read and write search bar state. **/ |