[gnome-control-center] info: Don't block for PackageKit
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] info: Don't block for PackageKit
- Date: Mon, 15 Oct 2012 14:42:15 +0000 (UTC)
commit d294951433fb5902d1e5185e4827daea382396aa
Author: Bastien Nocera <hadess hadess net>
Date: Mon Oct 15 16:13:55 2012 +0200
info: Don't block for PackageKit
Hanging for 30 seconds when PackageKit doesn't work properly
isn't cool, so do this async.
panels/info/cc-info-panel.c | 86 ++++++++++++++++++++++++------------------
1 files changed, 49 insertions(+), 37 deletions(-)
---
diff --git a/panels/info/cc-info-panel.c b/panels/info/cc-info-panel.c
index 5cada60..c3dd0b5 100644
--- a/panels/info/cc-info-panel.c
+++ b/panels/info/cc-info-panel.c
@@ -1940,58 +1940,70 @@ on_updates_button_clicked (GtkWidget *widget,
}
static void
-info_panel_setup_updates (CcInfoPanel *self)
+got_pk_proxy_cb (GObject *source_object,
+ GAsyncResult *res,
+ CcInfoPanel *self)
{
GError *error = NULL;
+ GVariant *v;
+ guint32 major, minor, micro;
+
+ self->priv->pk_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
- self->priv->pk_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
- G_DBUS_PROXY_FLAGS_NONE,
- NULL,
- "org.freedesktop.PackageKit",
- "/org/freedesktop/PackageKit",
- "org.freedesktop.PackageKit",
- NULL,
- &error);
if (self->priv->pk_proxy == NULL)
{
g_warning ("Unable to get PackageKit proxy object: %s", error->message);
g_error_free (error);
- error = NULL;
self->priv->updates_state = PK_NOT_AVAILABLE;
+ refresh_update_button (self);
+ return;
+ }
+
+ v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMajor");
+ g_variant_get (v, "u", &major);
+ g_variant_unref (v);
+ v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMinor");
+ g_variant_get (v, "u", &minor);
+ g_variant_unref (v);
+ v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMicro");
+ g_variant_get (v, "u", µ);
+ g_variant_unref (v);
+
+ if (major != 0 || minor != 8)
+ {
+ g_warning ("PackageKit version %u.%u.%u not supported", major, minor, micro);
+ g_clear_object (&self->priv->pk_proxy);
+ self->priv->updates_state = PK_NOT_AVAILABLE;
+ refresh_update_button (self);
}
else
{
- GVariant *v;
- guint32 major, minor, micro;
-
- v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMajor");
- g_variant_get (v, "u", &major);
- g_variant_unref (v);
- v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMinor");
- g_variant_get (v, "u", &minor);
- g_variant_unref (v);
- v = g_dbus_proxy_get_cached_property (self->priv->pk_proxy, "VersionMicro");
- g_variant_get (v, "u", µ);
- g_variant_unref (v);
-
- if (major != 0 || minor != 8)
- {
- g_warning ("PackageKit version %u.%u.%u not supported", major, minor, micro);
- g_clear_object (&self->priv->pk_proxy);
- self->priv->updates_state = PK_NOT_AVAILABLE;
- }
- else
- {
- g_signal_connect (self->priv->pk_proxy,
- "g-signal",
- G_CALLBACK (on_pk_signal),
- self);
- refresh_updates (self);
- }
+ g_signal_connect (self->priv->pk_proxy,
+ "g-signal",
+ G_CALLBACK (on_pk_signal),
+ self);
+ refresh_updates (self);
}
}
static void
+info_panel_setup_updates (CcInfoPanel *self)
+{
+ self->priv->updates_state = CHECKING_UPDATES;
+ refresh_update_button (self);
+
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "org.freedesktop.PackageKit",
+ "/org/freedesktop/PackageKit",
+ "org.freedesktop.PackageKit",
+ NULL,
+ (GAsyncReadyCallback) got_pk_proxy_cb,
+ self);
+}
+
+static void
cc_info_panel_init (CcInfoPanel *self)
{
GError *error = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]