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); } } }
GsPage * gs_page_new (void) { GsPage *page; page = g_object_new (GS_TYPE_PAGE, NULL); return GS_PAGE (page); }
void gs_shell_category_setup (GsShellCategory *shell_category, GsShell *shell, GsPluginLoader *plugin_loader, GtkBuilder *builder, GCancellable *cancellable) { GsShellCategoryPrivate *priv = shell_category->priv; GtkAdjustment *adj; priv->plugin_loader = g_object_ref (plugin_loader); priv->builder = g_object_ref (builder); priv->shell = shell; g_signal_connect (priv->listbox_filter, "row-selected", G_CALLBACK (filter_selected), shell_category); adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->scrolledwindow_category)); gtk_container_set_focus_vadjustment (GTK_CONTAINER (priv->category_detail_grid), adj); g_signal_connect (priv->listbox_filter, "key-press-event", G_CALLBACK (key_event), shell_category); /* chain up */ gs_page_setup (GS_PAGE (shell_category), shell, plugin_loader, cancellable); }
static void gs_page_dispose (GObject *object) { GsPage *page = GS_PAGE (object); GsPagePrivate *priv = gs_page_get_instance_private (page); g_clear_object (&priv->plugin_loader); g_clear_object (&priv->header_start_widget); g_clear_object (&priv->header_end_widget); G_OBJECT_CLASS (gs_page_parent_class)->dispose (object); }
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); } }
void gs_shell_loading_setup (GsShellLoading *self, GsShell *shell, GsPluginLoader *plugin_loader, GtkBuilder *builder, GCancellable *cancellable) { GsShellLoadingPrivate *priv = gs_shell_loading_get_instance_private (self); g_return_if_fail (GS_IS_SHELL_LOADING (self)); priv->shell = shell; priv->plugin_loader = g_object_ref (plugin_loader); priv->cancellable = g_object_ref (cancellable); /* chain up */ gs_page_setup (GS_PAGE (self), shell, plugin_loader, cancellable); }
void gs_shell_overview_setup (GsShellOverview *self, GsShell *shell, GsPluginLoader *plugin_loader, GtkBuilder *builder, GCancellable *cancellable) { GsShellOverviewPrivate *priv = gs_shell_overview_get_instance_private (self); GtkAdjustment *adj; GtkWidget *tile; gint i; g_return_if_fail (GS_IS_SHELL_OVERVIEW (self)); priv->plugin_loader = g_object_ref (plugin_loader); priv->builder = g_object_ref (builder); priv->cancellable = g_object_ref (cancellable); /* avoid a ref cycle */ priv->shell = shell; adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->scrolledwindow_overview)); gtk_container_set_focus_vadjustment (GTK_CONTAINER (priv->box_overview), adj); tile = gs_feature_tile_new (NULL); gtk_container_add (GTK_CONTAINER (priv->bin_featured), tile); for (i = 0; i < N_TILES; i++) { tile = gs_popular_tile_new (NULL); gtk_container_add (GTK_CONTAINER (priv->box_popular), tile); tile = gs_popular_tile_new (NULL); gtk_container_add (GTK_CONTAINER (priv->box_popular_rotating), tile); } /* chain up */ gs_page_setup (GS_PAGE (self), shell, plugin_loader, cancellable); }
void gs_shell_change_mode (GsShell *shell, GsShellMode mode, GsApp *app, gpointer data, gboolean scroll_up) { GsShellPrivate *priv = gs_shell_get_instance_private (shell); GsPage *new_page; GtkWidget *widget; const gchar *text; GtkStyleContext *context; if (priv->ignore_primary_buttons) return; widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "header")); gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (widget), TRUE); /* hide all mode specific header widgets here, they will be shown in the * refresh functions */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "application_details_header")); gtk_widget_hide (widget); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "buttonbox_main")); gtk_widget_hide (widget); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "header_selection_menu_button")); gtk_widget_hide (widget); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "search_bar")); gtk_widget_hide (widget); context = gtk_widget_get_style_context (GTK_WIDGET (gtk_builder_get_object (priv->builder, "header"))); gtk_style_context_remove_class (context, "selection-mode"); /* set the window title back to default */ /* TRANSLATORS: this is the main window title */ gtk_window_set_title (priv->main_window, _("Software")); /* show the back button if needed */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_back")); gtk_widget_set_visible (widget, !g_queue_is_empty (priv->back_entry_stack)); /* update main buttons according to mode */ priv->ignore_primary_buttons = TRUE; widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_all")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), mode == GS_SHELL_MODE_OVERVIEW); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_installed")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), mode == GS_SHELL_MODE_INSTALLED); widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "button_updates")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), mode == GS_SHELL_MODE_UPDATES); gtk_widget_set_visible (widget, !gs_update_monitor_is_managed() || mode == GS_SHELL_MODE_UPDATES); priv->ignore_primary_buttons = FALSE; /* switch page */ widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "stack_main")); gtk_stack_set_visible_child_name (GTK_STACK (widget), page_name[mode]); /* do action for mode */ priv->mode = mode; switch (mode) { case GS_SHELL_MODE_OVERVIEW: new_page = GS_PAGE (priv->shell_overview); break; case GS_SHELL_MODE_INSTALLED: new_page = GS_PAGE (priv->shell_installed); break; case GS_SHELL_MODE_MODERATE: new_page = GS_PAGE (priv->shell_moderate); break; case GS_SHELL_MODE_SEARCH: widget = GTK_WIDGET (gtk_builder_get_object (priv->builder, "entry_search")); text = gtk_entry_get_text (GTK_ENTRY (widget)); gs_shell_search_set_text (priv->shell_search, text); new_page = GS_PAGE (priv->shell_search); break; case GS_SHELL_MODE_UPDATES: new_page = GS_PAGE (priv->shell_updates); break; case GS_SHELL_MODE_DETAILS: if (app != NULL) gs_shell_details_set_app (priv->shell_details, app); if (data != NULL) gs_shell_details_set_filename (priv->shell_details, data); new_page = GS_PAGE (priv->shell_details); break; case GS_SHELL_MODE_CATEGORY: gs_shell_category_set_category (priv->shell_category, GS_CATEGORY (data)); new_page = GS_PAGE (priv->shell_category); break; case GS_SHELL_MODE_EXTRAS: new_page = GS_PAGE (priv->shell_extras); break; default: g_assert_not_reached (); } gs_page_switch_to (new_page, scroll_up); /* update header bar widgets */ widget = gs_page_get_header_start_widget (new_page); gs_shell_set_header_start_widget (shell, widget); widget = gs_page_get_header_end_widget (new_page); gs_shell_set_header_end_widget (shell, widget); /* destroy any existing modals */ if (priv->modal_dialogs != NULL) g_ptr_array_set_size (priv->modal_dialogs, 0); }