[gnome-software/gnome-3-20] Actually connect up the cancel and 'Learn More' upgrade buttons
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software/gnome-3-20] Actually connect up the cancel and 'Learn More' upgrade buttons
- Date: Thu, 14 Apr 2016 17:31:21 +0000 (UTC)
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]