[gnome-software/gnome-3-20] Actually connect up the cancel and 'Learn More' upgrade buttons



commit 66c4eef7bc2c823b7d019b07ad6dc0ff4b70db31
Author: Richard Hughes <richard hughsie com>
Date:   Thu Apr 14 18:11:52 2016 +0100

    Actually connect up the cancel and 'Learn More' upgrade buttons

 src/gs-shell-updates.c        |   49 +++++++++++++++++++++++++++++-----
 src/gs-upgrade-banner.c       |   59 ++++++++++++++++++++++++++++------------
 src/gs-upgrade-banner.h       |    7 +++--
 src/gs-upgrade-banner.ui      |   20 +++++++++++++-
 src/plugins/gs-plugin-dummy.c |    2 +
 5 files changed, 108 insertions(+), 29 deletions(-)
---
diff --git a/src/gs-shell-updates.c b/src/gs-shell-updates.c
index 70fffcb..beec8a3 100644
--- a/src/gs-shell-updates.c
+++ b/src/gs-shell-updates.c
@@ -58,6 +58,7 @@ struct _GsShellUpdates
        GtkBuilder              *builder;
        GCancellable            *cancellable;
        GCancellable            *cancellable_refresh;
+       GCancellable            *cancellable_upgrade_download;
        GSettings               *settings;
        GSettings               *desktop_settings;
        gboolean                 cache_valid;
@@ -978,7 +979,7 @@ upgrade_download_finished_cb (GObject *source,
 }
 
 static void
-gs_shell_updates_download_upgrade_cb (GsUpgradeBanner *upgrade_banner,
+gs_shell_updates_upgrade_download_cb (GsUpgradeBanner *upgrade_banner,
                                       GsShellUpdates *self)
 {
        GsApp *app;
@@ -989,10 +990,13 @@ gs_shell_updates_download_upgrade_cb (GsUpgradeBanner *upgrade_banner,
                return;
        }
 
+       if (self->cancellable_upgrade_download != NULL)
+               g_object_unref (self->cancellable_upgrade_download);
+       self->cancellable_upgrade_download = g_cancellable_new ();
        gs_plugin_loader_app_action_async (self->plugin_loader,
                                           app,
                                           GS_PLUGIN_LOADER_ACTION_UPGRADE_DOWNLOAD,
-                                          self->cancellable,
+                                          self->cancellable_upgrade_download,
                                           upgrade_download_finished_cb,
                                           self);
 }
@@ -1056,7 +1060,7 @@ upgrade_trigger_finished_cb (GObject *source,
 }
 
 static void
-gs_shell_updates_install_upgrade_cb (GsUpgradeBanner *upgrade_banner,
+gs_shell_updates_upgrade_install_cb (GsUpgradeBanner *upgrade_banner,
                                      GsShellUpdates *self)
 {
        GsApp *app;
@@ -1075,6 +1079,26 @@ gs_shell_updates_install_upgrade_cb (GsUpgradeBanner *upgrade_banner,
                                           self);
 }
 
+static void
+gs_shell_updates_upgrade_help_cb (GsUpgradeBanner *upgrade_banner,
+                                 GsShellUpdates *self)
+{
+       GsApp *app;
+       const gchar *uri;
+       g_autoptr(GError) error = NULL;
+
+       app = gs_upgrade_banner_get_app (upgrade_banner);
+       if (app == NULL) {
+               g_warning ("no upgrade available to launch");
+               return;
+       }
+
+       /* open the link */
+       uri = gs_app_get_url (app, AS_URL_KIND_HOMEPAGE);
+       if (!gtk_show_uri (NULL, uri, GDK_CURRENT_TIME, &error))
+               g_warning ("failed to open %s: %s", uri, error->message);
+}
+
 /**
  * gs_shell_updates_status_changed_cb:
  **/
@@ -1114,6 +1138,13 @@ gs_shell_updates_monitor_permission (GsShellUpdates *self)
                                  G_CALLBACK (on_permission_changed), self);
 }
 
+static void
+gs_shell_updates_upgrade_cancel_cb (GsUpgradeBanner *upgrade_banner,
+                                   GsShellUpdates *self)
+{
+       g_cancellable_cancel (self->cancellable_upgrade_download);
+}
+
 void
 gs_shell_updates_setup (GsShellUpdates *self,
                        GsShell *shell,
@@ -1144,10 +1175,14 @@ gs_shell_updates_setup (GsShellUpdates *self,
                          G_CALLBACK (gs_shell_updates_button_clicked_cb), self);
 
        /* setup system upgrades */
-       g_signal_connect (self->upgrade_banner, "download-button-clicked",
-                         G_CALLBACK (gs_shell_updates_download_upgrade_cb), self);
-       g_signal_connect (self->upgrade_banner, "install-button-clicked",
-                         G_CALLBACK (gs_shell_updates_install_upgrade_cb), self);
+       g_signal_connect (self->upgrade_banner, "download-clicked",
+                         G_CALLBACK (gs_shell_updates_upgrade_download_cb), self);
+       g_signal_connect (self->upgrade_banner, "install-clicked",
+                         G_CALLBACK (gs_shell_updates_upgrade_install_cb), self);
+       g_signal_connect (self->upgrade_banner, "cancel-clicked",
+                         G_CALLBACK (gs_shell_updates_upgrade_cancel_cb), self);
+       g_signal_connect (self->upgrade_banner, "help-clicked",
+                         G_CALLBACK (gs_shell_updates_upgrade_help_cb), self);
 
        self->header_end_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
        gtk_widget_set_visible (self->header_end_box, TRUE);
diff --git a/src/gs-upgrade-banner.c b/src/gs-upgrade-banner.c
index 6a460af..86f5c07 100644
--- a/src/gs-upgrade-banner.c
+++ b/src/gs-upgrade-banner.c
@@ -21,21 +21,23 @@
 
 #include "config.h"
 
-#include "gs-upgrade-banner.h"
-
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 #include <stdlib.h>
 
+#include "gs-upgrade-banner.h"
+
 typedef struct
 {
        GsApp           *app;
 
        GtkWidget       *button_upgrades_download;
        GtkWidget       *button_upgrades_install;
-       GtkWidget       *button_upgrades_learn_more;
+       GtkWidget       *button_upgrades_help;
+       GtkWidget       *button_upgrades_cancel;
        GtkWidget       *label_upgrades_summary;
        GtkWidget       *label_upgrades_title;
+       GtkWidget       *label_upgrades_warning;
        GtkWidget       *progressbar;
 } GsUpgradeBannerPrivate;
 
@@ -44,7 +46,8 @@ G_DEFINE_TYPE_WITH_PRIVATE (GsUpgradeBanner, gs_upgrade_banner, GTK_TYPE_BIN)
 enum {
        SIGNAL_DOWNLOAD_BUTTON_CLICKED,
        SIGNAL_INSTALL_BUTTON_CLICKED,
-       SIGNAL_LEARN_MORE_BUTTON_CLICKED,
+       SIGNAL_HELP_BUTTON_CLICKED,
+       SIGNAL_CANCEL_BUTTON_CLICKED,
        SIGNAL_LAST
 };
 
@@ -54,6 +57,7 @@ static void
 gs_upgrade_banner_refresh (GsUpgradeBanner *self)
 {
        GsUpgradeBannerPrivate *priv = gs_upgrade_banner_get_instance_private (self);
+       const gchar *uri;
        g_autofree gchar *name_bold = NULL;
        g_autofree gchar *version_bold = NULL;
        g_autofree gchar *str = NULL;
@@ -116,17 +120,14 @@ gs_upgrade_banner_refresh (GsUpgradeBanner *self)
        /* Show the right buttons for the current state */
        switch (gs_app_get_state (priv->app)) {
        case AS_APP_STATE_AVAILABLE:
-               gtk_widget_show (priv->button_upgrades_learn_more);
                gtk_widget_show (priv->button_upgrades_download);
                gtk_widget_hide (priv->button_upgrades_install);
                break;
        case AS_APP_STATE_INSTALLING:
-               gtk_widget_show (priv->button_upgrades_learn_more);
                gtk_widget_hide (priv->button_upgrades_download);
                gtk_widget_hide (priv->button_upgrades_install);
                break;
        case AS_APP_STATE_UPDATABLE:
-               gtk_widget_show (priv->button_upgrades_learn_more);
                gtk_widget_hide (priv->button_upgrades_download);
                gtk_widget_show (priv->button_upgrades_install);
                break;
@@ -135,11 +136,15 @@ gs_upgrade_banner_refresh (GsUpgradeBanner *self)
                break;
        }
 
+       /* only show help when we have a URL */
+       uri = gs_app_get_url (priv->app, AS_URL_KIND_HOMEPAGE);
+       gtk_widget_set_visible (priv->button_upgrades_help, uri != NULL);
+
        /* do a fill bar for the current progress */
        switch (gs_app_get_state (priv->app)) {
        case AS_APP_STATE_INSTALLING:
                gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progressbar),
-                                              gs_app_get_progress (priv->app));
+                                              (gdouble) gs_app_get_progress (priv->app) / 100.0f);
                gtk_widget_show (priv->progressbar);
                break;
        default:
@@ -186,7 +191,13 @@ install_button_cb (GtkWidget *widget, GsUpgradeBanner *self)
 static void
 learn_more_button_cb (GtkWidget *widget, GsUpgradeBanner *self)
 {
-       g_signal_emit (self, signals[SIGNAL_LEARN_MORE_BUTTON_CLICKED], 0);
+       g_signal_emit (self, signals[SIGNAL_HELP_BUTTON_CLICKED], 0);
+}
+
+static void
+cancel_button_cb (GtkWidget *widget, GsUpgradeBanner *self)
+{
+       g_signal_emit (self, signals[SIGNAL_CANCEL_BUTTON_CLICKED], 0);
 }
 
 void
@@ -253,9 +264,12 @@ gs_upgrade_banner_init (GsUpgradeBanner *self)
        g_signal_connect (priv->button_upgrades_install, "clicked",
                          G_CALLBACK (install_button_cb),
                          self);
-       g_signal_connect (priv->button_upgrades_learn_more, "clicked",
+       g_signal_connect (priv->button_upgrades_help, "clicked",
                          G_CALLBACK (learn_more_button_cb),
                          self);
+       g_signal_connect (priv->button_upgrades_cancel, "clicked",
+                         G_CALLBACK (cancel_button_cb),
+                         self);
 }
 
 static void
@@ -267,23 +281,30 @@ gs_upgrade_banner_class_init (GsUpgradeBannerClass *klass)
        widget_class->destroy = gs_upgrade_banner_destroy;
 
        signals [SIGNAL_DOWNLOAD_BUTTON_CLICKED] =
-               g_signal_new ("download-button-clicked",
+               g_signal_new ("download-clicked",
                              G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (GsUpgradeBannerClass, download_button_clicked),
+                             G_STRUCT_OFFSET (GsUpgradeBannerClass, download_clicked),
                              NULL, NULL, g_cclosure_marshal_VOID__VOID,
                              G_TYPE_NONE, 0);
 
        signals [SIGNAL_INSTALL_BUTTON_CLICKED] =
-               g_signal_new ("install-button-clicked",
+               g_signal_new ("install-clicked",
+                             G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
+                             G_STRUCT_OFFSET (GsUpgradeBannerClass, install_clicked),
+                             NULL, NULL, g_cclosure_marshal_VOID__VOID,
+                             G_TYPE_NONE, 0);
+
+       signals [SIGNAL_CANCEL_BUTTON_CLICKED] =
+               g_signal_new ("cancel-clicked",
                              G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (GsUpgradeBannerClass, install_button_clicked),
+                             G_STRUCT_OFFSET (GsUpgradeBannerClass, cancel_clicked),
                              NULL, NULL, g_cclosure_marshal_VOID__VOID,
                              G_TYPE_NONE, 0);
 
-       signals [SIGNAL_LEARN_MORE_BUTTON_CLICKED] =
-               g_signal_new ("learn-more-button-clicked",
+       signals [SIGNAL_HELP_BUTTON_CLICKED] =
+               g_signal_new ("help-clicked",
                              G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
-                             G_STRUCT_OFFSET (GsUpgradeBannerClass, learn_more_button_clicked),
+                             G_STRUCT_OFFSET (GsUpgradeBannerClass, help_clicked),
                              NULL, NULL, g_cclosure_marshal_VOID__VOID,
                              G_TYPE_NONE, 0);
 
@@ -291,10 +312,12 @@ gs_upgrade_banner_class_init (GsUpgradeBannerClass *klass)
 
        gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, 
button_upgrades_download);
        gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, button_upgrades_install);
-       gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, 
button_upgrades_learn_more);
+       gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, button_upgrades_cancel);
+       gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, button_upgrades_help);
        gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, label_upgrades_summary);
        gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, label_upgrades_title);
        gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, progressbar);
+       gtk_widget_class_bind_template_child_private (widget_class, GsUpgradeBanner, label_upgrades_warning);
 }
 
 GtkWidget *
diff --git a/src/gs-upgrade-banner.h b/src/gs-upgrade-banner.h
index 8e01884..afd727d 100644
--- a/src/gs-upgrade-banner.h
+++ b/src/gs-upgrade-banner.h
@@ -36,9 +36,10 @@ struct _GsUpgradeBannerClass
 {
        GtkBinClass      parent_class;
 
-       void            (*download_button_clicked)      (GsUpgradeBanner        *self);
-       void            (*install_button_clicked)       (GsUpgradeBanner        *self);
-       void            (*learn_more_button_clicked)    (GsUpgradeBanner        *self);
+       void            (*download_clicked)     (GsUpgradeBanner        *self);
+       void            (*install_clicked)      (GsUpgradeBanner        *self);
+       void            (*cancel_clicked)       (GsUpgradeBanner        *self);
+       void            (*help_clicked)         (GsUpgradeBanner        *self);
 };
 
 GtkWidget      *gs_upgrade_banner_new                  (void);
diff --git a/src/gs-upgrade-banner.ui b/src/gs-upgrade-banner.ui
index 0ee10db..4159e49 100644
--- a/src/gs-upgrade-banner.ui
+++ b/src/gs-upgrade-banner.ui
@@ -60,7 +60,7 @@
             <property name="margin_top">16</property>
             <property name="margin_bottom">28</property>
             <child>
-              <object class="GtkButton" id="button_upgrades_learn_more">
+              <object class="GtkButton" id="button_upgrades_help">
                 <property name="label" translatable="yes">_Learn More</property>
                 <property name="width_request">150</property>
                 <property name="visible">True</property>
@@ -96,6 +96,24 @@
               </packing>
             </child>
             <child>
+              <object class="GtkButton" id="button_upgrades_cancel">
+                <property name="label" translatable="yes">_Cancel</property>
+                <property name="width_request">150</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="relief">none</property>
+                <style>
+                  <class name="upgrade-button"/>
+                </style>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+              </packing>
+            </child>
+            <child>
               <object class="GtkButton" id="button_upgrades_install">
                 <property name="label" translatable="yes">_Install</property>
                 <property name="width_request">150</property>
diff --git a/src/plugins/gs-plugin-dummy.c b/src/plugins/gs-plugin-dummy.c
index c4aee38..8cd873b 100644
--- a/src/plugins/gs-plugin-dummy.c
+++ b/src/plugins/gs-plugin-dummy.c
@@ -250,6 +250,8 @@ gs_plugin_add_distro_upgrades (GsPlugin *plugin,
        gs_app_set_kind (app, AS_APP_KIND_OS_UPGRADE);
        gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
        gs_app_set_name (app, GS_APP_QUALITY_LOWEST, "Fedora");
+       gs_app_set_url (app, AS_URL_KIND_HOMEPAGE,
+                       "https://fedoraproject.org/wiki/Releases/24/Schedule";);
        gs_app_set_version (app, "24");
        gs_app_set_management_plugin (app, plugin->name);
        gs_plugin_add_app (list, app);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]