static void gs_page_app_removed_cb (GObject *source, GAsyncResult *res, gpointer user_data) { g_autoptr(GsPageHelper) helper = (GsPageHelper *) user_data; GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source); GsPage *page = helper->page; GsPagePrivate *priv = gs_page_get_instance_private (page); gboolean ret; g_autoptr(GError) error = NULL; ret = gs_plugin_loader_app_action_finish (plugin_loader, res, &error); if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) { g_debug ("%s", error->message); return; } if (!ret) { /* try to authenticate then retry */ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_AUTH_REQUIRED)) { g_autoptr(GError) error_local = NULL; GtkWidget *dialog; dialog = gs_auth_dialog_new (priv->plugin_loader, helper->app, gs_utils_get_error_value (error), &error_local); if (dialog == NULL) { g_warning ("%s", error_local->message); return; } gs_shell_modal_dialog_present (priv->shell, GTK_DIALOG (dialog)); g_signal_connect (dialog, "response", G_CALLBACK (gs_page_remove_authenticate_cb), g_steal_pointer (&helper)); return; } g_warning ("failed to remove: %s", error->message); return; } if (!gs_app_is_installed (helper->app) && GS_PAGE_GET_CLASS (page)->app_removed != NULL) { GS_PAGE_GET_CLASS (page)->app_removed (page, helper->app); } }
void gs_page_reload (GsPage *page) { GsPageClass *klass; g_return_if_fail (GS_IS_PAGE (page)); klass = GS_PAGE_GET_CLASS (page); g_assert (klass->reload != NULL); klass->reload (page); }
/** * gs_page_switch_from: * * Pure virtual method that subclasses have to override to show page specific * widgets. */ void gs_page_switch_from (GsPage *page) { GsPageClass *klass = GS_PAGE_GET_CLASS (page); GsPagePrivate *priv = gs_page_get_instance_private (page); priv->is_active = FALSE; if (klass->switch_from != NULL) klass->switch_from (page); }
static void gs_page_app_removed_cb (GObject *source, GAsyncResult *res, gpointer user_data) { g_autoptr(GsPageHelper) helper = (GsPageHelper *) user_data; GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source); GsPage *page = helper->page; gboolean ret; g_autoptr(GError) error = NULL; ret = gs_plugin_loader_job_action_finish (plugin_loader, res, &error); if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) { g_debug ("%s", error->message); return; } if (!ret) { /* try to authenticate then retry */ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_AUTH_REQUIRED)) { gs_page_authenticate (page, helper->app, gs_utils_get_error_value (error), helper->cancellable, gs_page_remove_authenticate_cb, helper); g_steal_pointer (&helper); return; } g_warning ("failed to remove: %s", error->message); return; } if (!gs_app_is_installed (helper->app) && GS_PAGE_GET_CLASS (page)->app_removed != NULL) { GS_PAGE_GET_CLASS (page)->app_removed (page, helper->app); } }
/** * gs_page_switch_to: * * Pure virtual method that subclasses have to override to show page specific * widgets. */ void gs_page_switch_to (GsPage *page, gboolean scroll_up) { GsPageClass *klass = GS_PAGE_GET_CLASS (page); GsPagePrivate *priv = gs_page_get_instance_private (page); priv->is_active = TRUE; if (klass->switch_to != NULL) klass->switch_to (page, scroll_up); }
/** * gs_page_switch_to: * * Pure virtual method that subclasses have to override to show page specific * widgets. */ void gs_page_switch_to (GsPage *page, gboolean scroll_up) { GsPageClass *klass; g_return_if_fail (GS_IS_PAGE (page)); klass = GS_PAGE_GET_CLASS (page); g_assert (klass->switch_to != NULL); klass->switch_to (page, scroll_up); }
gboolean gs_page_setup (GsPage *page, GsShell *shell, GsPluginLoader *plugin_loader, GtkBuilder *builder, GCancellable *cancellable, GError **error) { GsPageClass *klass; GsPagePrivate *priv = gs_page_get_instance_private (page); g_return_val_if_fail (GS_IS_PAGE (page), FALSE); klass = GS_PAGE_GET_CLASS (page); g_assert (klass->setup != NULL); priv->plugin_loader = g_object_ref (plugin_loader); priv->shell = shell; return klass->setup (page, shell, plugin_loader, builder, cancellable, error); }
static void gs_page_app_installed_cb (GObject *source, GAsyncResult *res, gpointer user_data) { g_autoptr(GsPageHelper) helper = (GsPageHelper *) user_data; GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (source); GsPage *page = helper->page; GsPagePrivate *priv = gs_page_get_instance_private (page); gboolean ret; g_autoptr(GError) error = NULL; ret = gs_plugin_loader_job_action_finish (plugin_loader, res, &error); if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_CANCELLED)) { g_debug ("%s", error->message); return; } if (!ret) { /* try to authenticate then retry */ if (g_error_matches (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_AUTH_REQUIRED)) { gs_page_authenticate (page, helper->app, gs_utils_get_error_value (error), helper->cancellable, gs_page_install_authenticate_cb, helper); g_steal_pointer (&helper); return; } g_warning ("failed to install %s: %s", gs_app_get_id (helper->app), error->message); return; } /* the single update needs system reboot, e.g. for firmware */ if (gs_app_has_quirk (helper->app, GS_APP_QUIRK_NEEDS_REBOOT)) { g_autoptr(GsAppList) list = gs_app_list_new (); gs_app_list_add (list, helper->app); gs_utils_reboot_notify (list); } /* only show this if the window is not active */ if (gs_app_is_installed (helper->app) && helper->action == GS_PLUGIN_ACTION_INSTALL && !gs_shell_is_active (priv->shell) && ((helper->interaction) & GS_SHELL_INTERACTION_NOTIFY) != 0) gs_app_notify_installed (helper->app); if (gs_app_is_installed (helper->app) && GS_PAGE_GET_CLASS (page)->app_installed != NULL) { GS_PAGE_GET_CLASS (page)->app_installed (page, helper->app); } }