static void search_changed_handler (GObject *entry, GsShell *shell) { GsShellPrivate *priv = gs_shell_get_instance_private (shell); const gchar *text; if (priv->ignore_next_search_changed_signal) { priv->ignore_next_search_changed_signal = FALSE; return; } text = gtk_entry_get_text (GTK_ENTRY (entry)); if (text[0] == '\0' && gs_shell_get_mode (shell) == GS_SHELL_MODE_SEARCH) { gs_shell_change_mode (shell, GS_SHELL_MODE_OVERVIEW, NULL, NULL, TRUE); return; } if (strlen(text) > 2) { if (gs_shell_get_mode (shell) != GS_SHELL_MODE_SEARCH) { gs_shell_change_mode (shell, GS_SHELL_MODE_SEARCH, NULL, NULL, TRUE); } else { gs_shell_search_set_text (priv->shell_search, text); gs_page_switch_to (GS_PAGE (priv->shell_search), TRUE); } } }
/** * gs_shell_overview_switch_to: **/ void gs_shell_overview_switch_to (GsShellOverview *self, gboolean scroll_up) { GsShellOverviewPrivate *priv = gs_shell_overview_get_instance_private (self); GtkWidget *widget; GtkAdjustment *adj; if (gs_shell_get_mode (priv->shell) != GS_SHELL_MODE_OVERVIEW) { g_warning ("Called switch_to(overview) when in mode %s", gs_shell_get_mode_string (priv->shell)); return; } widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "buttonbox_main")); gtk_widget_show (widget); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar")); gtk_widget_show (widget); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "entry_search")); gtk_entry_set_text (GTK_ENTRY (widget), ""); if (scroll_up) { adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->scrolledwindow_overview)); gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj)); } gs_grab_focus_when_mapped (priv->scrolledwindow_overview); if (priv->cache_valid || priv->refresh_count > 0) return; gs_shell_overview_load (self); }
static gboolean window_keypress_handler (GtkWidget *window, GdkEvent *event, GsShell *shell) { GsShellPrivate *priv = gs_shell_get_instance_private (shell); GtkWidget *entry; guint keyval; gboolean handled; gboolean preedit_changed; guint preedit_change_id; gboolean res; g_autofree gchar *old_text = NULL; g_autofree gchar *new_text = NULL; if (gs_shell_get_mode (shell) != GS_SHELL_MODE_OVERVIEW && gs_shell_get_mode (shell) != GS_SHELL_MODE_SEARCH) return GDK_EVENT_PROPAGATE; if (!gdk_event_get_keyval (event, &keyval) || is_keynav_event (event, keyval) || keyval == GDK_KEY_space || keyval == GDK_KEY_Menu) return GDK_EVENT_PROPAGATE; entry = GTK_WIDGET (gtk_builder_get_object (priv->builder, "entry_search")); handled = GDK_EVENT_PROPAGATE; preedit_changed = FALSE; preedit_change_id = g_signal_connect (entry, "preedit-changed", G_CALLBACK (preedit_changed_cb), &preedit_changed); old_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); res = gtk_widget_event (entry, event); new_text = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); g_signal_handler_disconnect (entry, preedit_change_id); if ((res && g_strcmp0 (new_text, old_text) != 0) || preedit_changed) { gtk_entry_grab_focus_without_selecting (GTK_ENTRY (entry)); handled = GDK_EVENT_STOP; } return handled; }
static void gs_shell_loading_switch_to (GsPage *page, gboolean scroll_up) { GsShellLoading *self = GS_SHELL_LOADING (page); GsShellLoadingPrivate *priv = gs_shell_loading_get_instance_private (self); if (gs_shell_get_mode (priv->shell) != GS_SHELL_MODE_LOADING) { g_warning ("Called switch_to(loading) when in mode %s", gs_shell_get_mode_string (priv->shell)); return; } gs_shell_loading_load (self); }
static void gs_shell_search_activated_cb (GtkEntry *entry, GsShell *shell) { GsShellPrivate *priv = gs_shell_get_instance_private (shell); const gchar *text; text = gtk_entry_get_text (entry); if (text[0] == '\0') return; if (gs_shell_get_mode (shell) == GS_SHELL_MODE_SEARCH) { gs_shell_search_set_text (priv->shell_search, text); gs_page_switch_to (GS_PAGE (priv->shell_search), TRUE); } else { gs_shell_change_mode (shell, GS_SHELL_MODE_SEARCH, NULL, NULL, TRUE); } }