[gnome-control-center/rhel/8.4.0: 11/32] info: Update registration state in panel when it happens on disk
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/rhel/8.4.0: 11/32] info: Update registration state in panel when it happens on disk
- Date: Tue, 13 Apr 2021 14:34:54 +0000 (UTC)
commit 6426ba63ee9e7d86314494d182296296cdaa8836
Author: Ray Strode <rstrode redhat com>
Date: Sun Jan 24 13:03:03 2021 -0500
info: Update registration state in panel when it happens on disk
The code was failing to listen for change notifications, so if the
panel was open while the system got registered, it wouldn't update.
This commit fixes that.
panels/info/cc-info-overview-panel.c | 33 +++++++++++++++++++++++----
panels/info/cc-subscription-details-dialog.c | 17 ++++++++++++--
panels/info/cc-subscription-details-dialog.h | 3 ++-
panels/info/cc-subscription-register-dialog.c | 17 ++++++++++++--
panels/info/cc-subscription-register-dialog.h | 3 ++-
5 files changed, 63 insertions(+), 10 deletions(-)
---
diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c
index b2cbefb25..65246758e 100644
--- a/panels/info/cc-info-overview-panel.c
+++ b/panels/info/cc-info-overview-panel.c
@@ -87,6 +87,7 @@ typedef struct
char *gnome_date;
GCancellable *cancellable;
+ GCancellable *subscription_cancellable;
/* Free space */
GList *primary_mounts;
@@ -848,14 +849,13 @@ on_details_button_clicked (GtkWidget *widget,
CcSubscriptionDetailsDialog *dialog;
GtkWindow *toplevel;
- dialog = cc_subscription_details_dialog_new (priv->subscription_proxy);
+ dialog = cc_subscription_details_dialog_new (priv->subscription_proxy,
+ priv->subscription_cancellable);
toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self)));
gtk_window_set_transient_for (GTK_WINDOW (dialog), toplevel);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (GTK_WIDGET (dialog));
-
- reload_subscription_status (self);
}
static void
@@ -866,12 +866,27 @@ on_register_button_clicked (GtkWidget *widget,
CcSubscriptionRegisterDialog *dialog;
GtkWindow *toplevel;
- dialog = cc_subscription_register_dialog_new (priv->subscription_proxy);
+ dialog = cc_subscription_register_dialog_new (priv->subscription_proxy,
+ priv->subscription_cancellable);
toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self)));
gtk_window_set_transient_for (GTK_WINDOW (dialog), toplevel);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+static void
+on_subscription_status_changed (GDBusProxy *proxy,
+ GVariant *changed_properties,
+ GStrv invalidated_properties,
+ CcInfoOverviewPanel *self)
+{
+ CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (self);
+
+ g_cancellable_cancel (priv->subscription_cancellable);
+ g_object_unref (priv->subscription_cancellable);
+
+ priv->subscription_cancellable = g_cancellable_new ();
reload_subscription_status (self);
}
@@ -897,6 +912,9 @@ info_overview_panel_setup_subscriptions (CcInfoOverviewPanel *self)
return;
}
+ g_signal_connect (priv->subscription_proxy, "g-properties-changed",
+ G_CALLBACK (on_subscription_status_changed), self);
+
g_signal_connect (priv->details_button, "clicked", G_CALLBACK (on_details_button_clicked), self);
g_signal_connect (priv->register_button, "clicked", G_CALLBACK (on_register_button_clicked), self);
@@ -953,6 +971,12 @@ cc_info_overview_panel_finalize (GObject *object)
{
CcInfoOverviewPanelPrivate *priv = cc_info_overview_panel_get_instance_private (CC_INFO_OVERVIEW_PANEL
(object));
+ if (priv->subscription_cancellable)
+ {
+ g_cancellable_cancel (priv->subscription_cancellable);
+ g_clear_object (&priv->subscription_cancellable);
+ }
+
if (priv->cancellable)
{
g_cancellable_cancel (priv->cancellable);
@@ -1014,6 +1038,7 @@ cc_info_overview_panel_init (CcInfoOverviewPanel *self)
g_resources_register (cc_info_get_resource ());
priv->cancellable = g_cancellable_new ();
+ priv->subscription_cancellable = g_cancellable_new ();
priv->graphics_data = get_graphics_data ();
diff --git a/panels/info/cc-subscription-details-dialog.c b/panels/info/cc-subscription-details-dialog.c
index 1931ced81..3d77e6c48 100644
--- a/panels/info/cc-subscription-details-dialog.c
+++ b/panels/info/cc-subscription-details-dialog.c
@@ -338,7 +338,6 @@ cc_subscription_details_dialog_init (CcSubscriptionDetailsDialog *self)
{
gtk_widget_init_template (GTK_WIDGET (self));
- self->cancellable = g_cancellable_new ();
self->products = g_ptr_array_new_with_free_func ((GDestroyNotify) product_data_free);
self->state = DIALOG_STATE_SHOW_DETAILS;
}
@@ -392,13 +391,27 @@ cc_subscription_details_dialog_class_init (CcSubscriptionDetailsDialogClass *kla
gtk_widget_class_bind_template_callback (widget_class, dismiss_notification);
}
+static void
+on_dialog_cancelled (CcSubscriptionDetailsDialog *self)
+{
+ gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE);
+}
+
CcSubscriptionDetailsDialog *
-cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy)
+cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy,
+ GCancellable *cancellable)
{
CcSubscriptionDetailsDialog *self;
self = g_object_new (CC_TYPE_SUBSCRIPTION_DETAILS_DIALOG, "use-header-bar", TRUE, NULL);
self->subscription_proxy = g_object_ref (subscription_proxy);
+ self->cancellable = g_object_ref (cancellable);
+
+ g_signal_connect_object (G_OBJECT (self->cancellable),
+ "cancelled",
+ G_CALLBACK (on_dialog_cancelled),
+ self,
+ G_CONNECT_SWAPPED);
load_installed_products (self);
dialog_reload (self);
diff --git a/panels/info/cc-subscription-details-dialog.h b/panels/info/cc-subscription-details-dialog.h
index a61a22838..f14dd157b 100644
--- a/panels/info/cc-subscription-details-dialog.h
+++ b/panels/info/cc-subscription-details-dialog.h
@@ -27,6 +27,7 @@ G_BEGIN_DECLS
#define CC_TYPE_SUBSCRIPTION_DETAILS_DIALOG (cc_subscription_details_dialog_get_type ())
G_DECLARE_FINAL_TYPE (CcSubscriptionDetailsDialog, cc_subscription_details_dialog, CC,
SUBSCRIPTION_DETAILS_DIALOG, GtkDialog)
-CcSubscriptionDetailsDialog *cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy);
+CcSubscriptionDetailsDialog *cc_subscription_details_dialog_new (GDBusProxy *subscription_proxy,
+ GCancellable *cancellable);
G_END_DECLS
diff --git a/panels/info/cc-subscription-register-dialog.c b/panels/info/cc-subscription-register-dialog.c
index d7a17cc99..e8c2f581c 100644
--- a/panels/info/cc-subscription-register-dialog.c
+++ b/panels/info/cc-subscription-register-dialog.c
@@ -326,7 +326,6 @@ cc_subscription_register_dialog_init (CcSubscriptionRegisterDialog *self)
{
gtk_widget_init_template (GTK_WIDGET (self));
- self->cancellable = g_cancellable_new ();
self->state = DIALOG_STATE_REGISTER;
gtk_entry_set_text (self->url_entry, SERVER_URL);
@@ -391,13 +390,27 @@ cc_subscription_register_dialog_class_init (CcSubscriptionRegisterDialogClass *k
gtk_widget_class_bind_template_callback (widget_class, register_with_activation_keys_radio_toggled_cb);
}
+static void
+on_dialog_cancelled (CcSubscriptionRegisterDialog *self)
+{
+ gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CLOSE);
+}
+
CcSubscriptionRegisterDialog *
-cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy)
+cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy,
+ GCancellable *cancellable)
{
CcSubscriptionRegisterDialog *self;
self = g_object_new (CC_TYPE_SUBSCRIPTION_REGISTER_DIALOG, "use-header-bar", TRUE, NULL);
self->subscription_proxy = g_object_ref (subscription_proxy);
+ self->cancellable = g_object_ref (cancellable);
+
+ g_signal_connect_object (G_OBJECT (self->cancellable),
+ "cancelled",
+ G_CALLBACK (on_dialog_cancelled),
+ self,
+ G_CONNECT_SWAPPED);
return self;
}
diff --git a/panels/info/cc-subscription-register-dialog.h b/panels/info/cc-subscription-register-dialog.h
index c5918df9f..31c254084 100644
--- a/panels/info/cc-subscription-register-dialog.h
+++ b/panels/info/cc-subscription-register-dialog.h
@@ -27,6 +27,7 @@ G_BEGIN_DECLS
#define CC_TYPE_SUBSCRIPTION_REGISTER_DIALOG (cc_subscription_register_dialog_get_type ())
G_DECLARE_FINAL_TYPE (CcSubscriptionRegisterDialog, cc_subscription_register_dialog, CC,
SUBSCRIPTION_REGISTER_DIALOG, GtkDialog)
-CcSubscriptionRegisterDialog *cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy);
+CcSubscriptionRegisterDialog *cc_subscription_register_dialog_new (GDBusProxy *subscription_proxy,
+ GCancellable *cancellable);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]