From 42fc8277d9a517436ddb4367cd922e8b73a4b632 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Mon, 6 Feb 2012 12:11:38 +0000 Subject: handle gtk3 box constructor changes --- src/user-widget.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user-widget.c b/src/user-widget.c index 937a9eb..8388ec5 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -136,7 +136,7 @@ user_widget_init (UserWidget *self) gtk_misc_set_padding (GTK_MISC(priv->user_image),0, 4.0); priv->user_name = gtk_label_new (""); - priv->container = gtk_hbox_new (FALSE, 0); + priv->container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); priv->tick_icon = gtk_image_new_from_icon_name ("account-logged-in", GTK_ICON_SIZE_MENU); gtk_misc_set_alignment(GTK_MISC(priv->tick_icon), 1.0, 0.5); -- cgit v1.2.3 From 64d649ed43bc2f1635862c8cd9d8fceec898b4eb Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Mon, 6 Feb 2012 19:31:44 +0000 Subject: pkclient in place --- configure.ac | 6 +- src/apt-watcher.c | 406 ++---------------------------------------------------- src/apt-watcher.h | 2 +- 3 files changed, 19 insertions(+), 395 deletions(-) diff --git a/configure.ac b/configure.ac index 3e5fa97..52a54b9 100644 --- a/configure.ac +++ b/configure.ac @@ -62,7 +62,8 @@ AS_IF([test "x$with_gtk" = x3], dbus-glib-1 gudev-1.0 gio-unix-2.0 - indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION) + indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION + packagekit-glib2) ], [test "x$with_gtk" = x2], [PKG_CHECK_MODULES(SESSIONSERVICE, dbusmenu-glib-0.4 >= $DBUSMENUGLIB_REQUIRED_VERSION @@ -70,7 +71,8 @@ AS_IF([test "x$with_gtk" = x3], gudev-1.0 dbus-glib-1 gio-unix-2.0 - indicator-0.4 >= $INDICATOR_REQUIRED_VERSION) + indicator-0.4 >= $INDICATOR_REQUIRED_VERSION + packagekit-glib2) ] ) diff --git a/src/apt-watcher.c b/src/apt-watcher.c index 481029a..07b633d 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -17,104 +17,50 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include +// Conor - 6/2/2012 +// Please pull in packagekit's client lib +// using apt-get install --no-install-recommends libpackagekit-glib2-dev +// make sure you don't install package-kit +#define I_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE + #include +#include #include "apt-watcher.h" -#include "apt-transaction.h" +#include "dbus-shared-names.h" static guint watcher_id; struct _AptWatcher { GObject parent_instance; - guint reboot_query; - GCancellable * proxy_cancel; - GDBusProxy * proxy; SessionDbus* session_dbus_interface; DbusmenuMenuitem* apt_item; AptState current_state; - AptTransaction* current_transaction; + PkClient* pkclient; }; - -static void -apt_watcher_on_name_appeared (GDBusConnection *connection, - const gchar *name, - const gchar *name_owner, - gpointer user_data); -static void -apt_watcher_on_name_vanished (GDBusConnection *connection, - const gchar *name, - gpointer user_data); -static void fetch_proxy_cb (GObject * object, - GAsyncResult * res, - gpointer user_data); - -static void apt_watcher_upgrade_system_cb (GObject * obj, - GAsyncResult * res, - gpointer user_data); - - + static void apt_watcher_show_apt_dialog (DbusmenuMenuitem* mi, guint timestamp, gpointer userdata); -static void apt_watcher_signal_cb (GDBusProxy* proxy, - gchar* sender_name, - gchar* signal_name, - GVariant* parameters, - gpointer user_data); -static void apt_watcher_manage_transactions (AptWatcher* self, - gchar* transaction_id); -static gboolean apt_watcher_query_reboot_status (gpointer self); -static void apt_watcher_transaction_state_simulation_update_cb (AptTransaction* trans, - gint update, - gpointer user_data); -static void apt_watcher_transaction_state_real_update_cb (AptTransaction* trans, - gint update, - gpointer user_data); -static gboolean apt_watcher_start_apt_interaction (gpointer data); - G_DEFINE_TYPE (AptWatcher, apt_watcher, G_TYPE_OBJECT); static void apt_watcher_init (AptWatcher *self) { self->current_state = UP_TO_DATE; - self->proxy_cancel = g_cancellable_new(); - self->proxy = NULL; - self->reboot_query = 0; - self->current_transaction = NULL; - g_timeout_add_seconds (60, + self->pkclient = pk_client_new (); + /*g_timeout_add_seconds (60, apt_watcher_start_apt_interaction, - self); -} - -static gboolean -apt_watcher_start_apt_interaction (gpointer data) -{ - g_return_val_if_fail (APT_IS_WATCHER (data), FALSE); - AptWatcher* self = APT_WATCHER (data); - g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.debian.apt", - "/org/debian/apt", - "org.debian.apt", - self->proxy_cancel, - fetch_proxy_cb, - self); - return FALSE; + self); */ } static void apt_watcher_finalize (GObject *object) { g_bus_unwatch_name (watcher_id); - AptWatcher* self = APT_WATCHER (object); + //AptWatcher* self = APT_WATCHER (object); - if (self->proxy != NULL) - g_object_unref (self->proxy); - G_OBJECT_CLASS (apt_watcher_parent_class)->finalize (object); } @@ -125,109 +71,6 @@ apt_watcher_class_init (AptWatcherClass *klass) object_class->finalize = apt_watcher_finalize; } -static void -fetch_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) -{ - GError * error = NULL; - - AptWatcher* self = APT_WATCHER(user_data); - g_return_if_fail(self != NULL); - - GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error); - - if (self->proxy_cancel != NULL) { - g_object_unref(self->proxy_cancel); - self->proxy_cancel = NULL; - } - - if (error != NULL) { - g_warning("Could not grab DBus proxy for %s: %s", - "org.debian.apt", error->message); - g_error_free(error); - return; - } - - self->proxy = proxy; - // Set up the watch. - watcher_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM, - "org.debian.apt", - G_BUS_NAME_WATCHER_FLAGS_NONE, - apt_watcher_on_name_appeared, - apt_watcher_on_name_vanished, - self, - NULL); - - g_signal_connect (self->proxy, - "g-signal", - G_CALLBACK(apt_watcher_signal_cb), - self); -} - -static void -apt_watcher_on_name_appeared (GDBusConnection *connection, - const gchar *name, - const gchar *name_owner, - gpointer user_data) -{ - g_return_if_fail (APT_IS_WATCHER (user_data)); - AptWatcher* watcher = APT_WATCHER (user_data); - - g_print ("Name %s on %s is owned by %s\n", - name, - "the system bus", - name_owner); - - g_dbus_proxy_call (watcher->proxy, - "UpgradeSystem", - g_variant_new("(b)", TRUE), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - apt_watcher_upgrade_system_cb, - user_data); -} - - -static void -apt_watcher_on_name_vanished (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - g_debug ("Name %s does not exist or has just vanished", - name); - g_return_if_fail (APT_IS_WATCHER (user_data)); -} - -static void -apt_watcher_upgrade_system_cb (GObject * obj, - GAsyncResult * res, - gpointer user_data) -{ - g_return_if_fail (APT_IS_WATCHER (user_data)); - AptWatcher* self = APT_WATCHER (user_data); - - GError * error = NULL; - GVariant * result; - - result = g_dbus_proxy_call_finish(self->proxy, res, &error); - - if (error != NULL) { - g_warning ("unable to complete the UpgradeSystem apt call"); - g_error_free (error); - return; - } - - gchar* transaction_id = NULL; - g_variant_get (result, "(s)", &transaction_id); - - if (transaction_id == NULL){ - g_warning ("apt_watcher_upgrade_system_cb - transaction id is null"); - return; - } - - apt_watcher_manage_transactions (self, transaction_id); - -} static void apt_watcher_show_apt_dialog (DbusmenuMenuitem * mi, @@ -260,227 +103,6 @@ apt_watcher_show_apt_dialog (DbusmenuMenuitem * mi, } } -static void -apt_watcher_transaction_state_real_update_cb (AptTransaction* trans, - gint update, - gpointer user_data) -{ - g_debug ("apt-watcher -transaction update %i", update); - g_return_if_fail (APT_IS_WATCHER (user_data)); - AptWatcher* self = APT_WATCHER (user_data); - - AptState state = (AptState)update; - if (self->current_state != RESTART_NEEDED) - { - if (state == UP_TO_DATE){ - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Software Up to Date")); - self->current_state = state; - } - else if (state == UPDATES_AVAILABLE){ - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Updates Available…")); - self->current_state = state; - } - else if (state == UPGRADE_IN_PROGRESS){ - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Updates Installing…")); - self->current_state = state; - } - else if (state == FINISHED){ - gboolean query_again = FALSE; - - // Only query if the previous state was an upgrade. - if (self->current_state != UPGRADE_IN_PROGRESS){ - query_again = TRUE; - } - else{ - if (self->reboot_query != 0){ - g_source_remove (self->reboot_query); - self->reboot_query = 0; - } - self->reboot_query = g_timeout_add_seconds (1, - apt_watcher_query_reboot_status, - self); - } - self->current_state = state; - - g_object_unref (G_OBJECT(self->current_transaction)); - self->current_transaction = NULL; - - // It is impossible to determine from a 'real' transaction whether - // updates are available therefore it is necessary to check again via a - // simulation whether there are updates available. - if (query_again){ - g_dbus_proxy_call (self->proxy, - "UpgradeSystem", - g_variant_new("(b)", TRUE), - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - apt_watcher_upgrade_system_cb, - self); - } - } - } -} - - -static void -apt_watcher_transaction_state_simulation_update_cb (AptTransaction* trans, - gint update, - gpointer user_data) -{ - g_debug ("apt-watcher -transaction update %i", update); - g_return_if_fail (APT_IS_WATCHER (user_data)); - AptWatcher* self = APT_WATCHER (user_data); - - AptState state = (AptState)update; - if (self->current_state != RESTART_NEEDED) - { - if (state == UP_TO_DATE){ - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Software Up to Date")); - if (self->reboot_query != 0){ - g_source_remove (self->reboot_query); - self->reboot_query = 0; - } - self->reboot_query = g_timeout_add_seconds (1, - apt_watcher_query_reboot_status, - self); - } - else if (state == UPDATES_AVAILABLE){ - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Updates Available…")); - } - else if (state == UPGRADE_IN_PROGRESS){ - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Updates Installing…")); - } - self->current_state = state; - } - if (self->current_state != UPGRADE_IN_PROGRESS){ - g_object_unref (G_OBJECT(self->current_transaction)); - self->current_transaction = NULL; - } -} - -static void -apt_watcher_manage_transactions (AptWatcher* self, gchar* transaction_id) -{ - if (self->current_transaction == NULL){ - self->current_transaction = apt_transaction_new (transaction_id, SIMULATION); - g_signal_connect (G_OBJECT(self->current_transaction), - "state-update", - G_CALLBACK(apt_watcher_transaction_state_simulation_update_cb), self); - } -} - -static gboolean -apt_watcher_query_reboot_status (gpointer data) -{ - g_return_val_if_fail (APT_IS_WATCHER (data), FALSE); - AptWatcher* self = APT_WATCHER (data); - - GVariant* reboot_result = g_dbus_proxy_get_cached_property (self->proxy, - "RebootRequired"); - gboolean reboot = FALSE; - g_variant_get (reboot_result, "b", &reboot); - g_debug ("apt_watcher_query_reboot_status: reboot prop = %i", reboot); - if (reboot == FALSE){ - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Software Up to Date")); - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_DISPOSITION, - DBUSMENU_MENUITEM_DISPOSITION_NORMAL); - - } - else{ - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Restart to Complete Updates…")); - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_DISPOSITION, - DBUSMENU_MENUITEM_DISPOSITION_ALERT); - session_dbus_restart_required (self->session_dbus_interface); - self->current_state = RESTART_NEEDED; - } - self->reboot_query = 0; - return FALSE; -} - -static void apt_watcher_signal_cb ( GDBusProxy* proxy, - gchar* sender_name, - gchar* signal_name, - GVariant* parameters, - gpointer user_data) -{ - g_return_if_fail (APT_IS_WATCHER (user_data)); - AptWatcher* self = APT_WATCHER (user_data); - - g_variant_ref_sink (parameters); - GVariant *value = g_variant_get_child_value (parameters, 0); - - if (g_strcmp0(signal_name, "ActiveTransactionsChanged") == 0){ - gchar* current = NULL; - g_debug ("ActiveTransactionsChanged"); - - g_variant_get(value, "s", ¤t); - - if (g_str_has_prefix (current, "/org/debian/apt/transaction/") == TRUE){ - g_debug ("ActiveTransactionsChanged - current is %s", current); - - // Cancel all existing operations. - if (self->reboot_query != 0){ - g_source_remove (self->reboot_query); - self->reboot_query = 0; - } - - if (self->current_transaction != NULL) - { - g_object_unref (G_OBJECT(self->current_transaction)); - self->current_transaction = NULL; - } - - self->current_transaction = apt_transaction_new (current, REAL); - g_signal_connect (G_OBJECT(self->current_transaction), - "state-update", - G_CALLBACK(apt_watcher_transaction_state_real_update_cb), self); - } - } - else if (g_strcmp0(signal_name, "PropertyChanged") == 0) - { - gchar* prop_name= NULL; - GVariant* value = NULL; - g_variant_get (parameters, "(sv)", &prop_name, &value); - g_debug ("transaction prop update - prop = %s", prop_name); - - if (g_strcmp0 (prop_name, "RebootRequired") == 0){ - gboolean reboot_required = FALSE; - g_variant_get (value, "(b)", &reboot_required); - if (reboot_required){ - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_LABEL, - _("Restart to Complete Updates…")); - dbusmenu_menuitem_property_set (self->apt_item, - DBUSMENU_MENUITEM_PROP_DISPOSITION, - DBUSMENU_MENUITEM_DISPOSITION_ALERT); - self->current_state = RESTART_NEEDED; - } - } - } - - g_variant_unref (value); - g_variant_unref (parameters); -} - AptWatcher* apt_watcher_new (SessionDbus* session_dbus, DbusmenuMenuitem* item) { diff --git a/src/apt-watcher.h b/src/apt-watcher.h index 6b7d5e1..54d26f5 100644 --- a/src/apt-watcher.h +++ b/src/apt-watcher.h @@ -28,6 +28,7 @@ with this program. If not, see . #include #include "session-dbus.h" +#include "dbus-shared-names.h" G_BEGIN_DECLS @@ -50,7 +51,6 @@ GType apt_watcher_get_type (void) G_GNUC_CONST; AptWatcher* apt_watcher_new (SessionDbus* session_dbus, DbusmenuMenuitem* apt_item); - G_END_DECLS #endif /* _APT_WATCHER_H_ */ -- cgit v1.2.3 From 9954c4eb34c9c9c66d3010d7e1dced82b0747518 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Mon, 6 Feb 2012 20:28:34 +0000 Subject: we need to talk to dbus to listen for signals from package kit, the lib doesnt wrap the signals ... --- src/apt-watcher.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 126 insertions(+), 14 deletions(-) diff --git a/src/apt-watcher.c b/src/apt-watcher.c index 07b633d..571b1c2 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -37,38 +37,121 @@ struct _AptWatcher DbusmenuMenuitem* apt_item; AptState current_state; PkClient* pkclient; + GCancellable * proxy_cancel; + GDBusProxy * proxy; }; static void apt_watcher_show_apt_dialog (DbusmenuMenuitem* mi, guint timestamp, gpointer userdata); +//static gboolean apt_watcher_start_apt_interaction (gpointer data); G_DEFINE_TYPE (AptWatcher, apt_watcher, G_TYPE_OBJECT); +static void apt_watcher_signal_cb ( GDBusProxy* proxy, + gchar* sender_name, + gchar* signal_name, + GVariant* parameters, + gpointer user_data) +{ + g_return_if_fail (APT_IS_WATCHER (user_data)); + //AptWatcher* self = APT_WATCHER (user_data); + + g_variant_ref_sink (parameters); + GVariant *value = g_variant_get_child_value (parameters, 0); + + if (g_strcmp0(signal_name, "UpdatesChanged") == 0){ + g_debug ("UpdatesChanged signal received"); + + } + else if (g_strcmp0(signal_name, "RestartScheduled") == 0) { + g_debug ("RestartScheduled signal received"); + } + + g_variant_unref (value); + g_variant_unref (parameters); +} + static void -apt_watcher_init (AptWatcher *self) +apt_watcher_on_name_appeared (GDBusConnection *connection, + const gchar *name, + const gchar *name_owner, + gpointer user_data) { - self->current_state = UP_TO_DATE; - self->pkclient = pk_client_new (); - /*g_timeout_add_seconds (60, - apt_watcher_start_apt_interaction, - self); */ + g_return_if_fail (APT_IS_WATCHER (user_data)); + // AptWatcher* watcher = APT_WATCHER (user_data); + + g_print ("Name %s on %s is owned by %s\n", + name, + "the system bus", + name_owner); } + static void -apt_watcher_finalize (GObject *object) +apt_watcher_on_name_vanished (GDBusConnection *connection, + const gchar *name, + gpointer user_data) { - g_bus_unwatch_name (watcher_id); - //AptWatcher* self = APT_WATCHER (object); - - G_OBJECT_CLASS (apt_watcher_parent_class)->finalize (object); + g_debug ("Name %s does not exist or has just vanished", + name); + g_return_if_fail (APT_IS_WATCHER (user_data)); } static void -apt_watcher_class_init (AptWatcherClass *klass) +fetch_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) { - GObjectClass* object_class = G_OBJECT_CLASS (klass); - object_class->finalize = apt_watcher_finalize; + GError * error = NULL; + + AptWatcher* self = APT_WATCHER(user_data); + g_return_if_fail(self != NULL); + + GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error); + + if (self->proxy_cancel != NULL) { + g_object_unref(self->proxy_cancel); + self->proxy_cancel = NULL; + } + + if (error != NULL) { + g_warning("Could not grab DBus proxy for %s: %s", + "org.debian.apt", error->message); + g_error_free(error); + return; + } + + self->proxy = proxy; + // Set up the watch. + watcher_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM, + "org.freedesktop.PackageKit", + G_BUS_NAME_WATCHER_FLAGS_NONE, + apt_watcher_on_name_appeared, + apt_watcher_on_name_vanished, + self, + NULL); + + g_signal_connect (self->proxy, + "g-signal", + G_CALLBACK(apt_watcher_signal_cb), + self); +} + + +static gboolean +apt_watcher_start_apt_interaction (gpointer data) +{ + g_return_val_if_fail (APT_IS_WATCHER (data), FALSE); + AptWatcher* self = APT_WATCHER (data); + 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", + self->proxy_cancel, + fetch_proxy_cb, + self); + return FALSE; } @@ -103,6 +186,35 @@ apt_watcher_show_apt_dialog (DbusmenuMenuitem * mi, } } +static void +apt_watcher_init (AptWatcher *self) +{ + self->current_state = UP_TO_DATE; + self->pkclient = pk_client_new (); + g_timeout_add_seconds (60, + apt_watcher_start_apt_interaction, + self); +} + +static void +apt_watcher_finalize (GObject *object) +{ + g_bus_unwatch_name (watcher_id); + AptWatcher* self = APT_WATCHER (object); + + if (self->proxy != NULL) + g_object_unref (self->proxy); + + G_OBJECT_CLASS (apt_watcher_parent_class)->finalize (object); +} + +static void +apt_watcher_class_init (AptWatcherClass *klass) +{ + GObjectClass* object_class = G_OBJECT_CLASS (klass); + object_class->finalize = apt_watcher_finalize; +} + AptWatcher* apt_watcher_new (SessionDbus* session_dbus, DbusmenuMenuitem* item) { -- cgit v1.2.3 From e0c43e050f0ec37d22111cc90b7fa1dc7f5c0da8 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Mon, 6 Feb 2012 21:07:57 +0000 Subject: query for updates half complete --- src/apt-watcher.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/apt-watcher.c b/src/apt-watcher.c index 571b1c2..0165bf0 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -41,13 +41,16 @@ struct _AptWatcher GDBusProxy * proxy; }; -static void apt_watcher_show_apt_dialog (DbusmenuMenuitem* mi, - guint timestamp, - gpointer userdata); -//static gboolean apt_watcher_start_apt_interaction (gpointer data); - G_DEFINE_TYPE (AptWatcher, apt_watcher, G_TYPE_OBJECT); +static void +get_updates_complete (GObject *source_object, + GAsyncResult *res, + gpointer user_data) +{ + +} + static void apt_watcher_signal_cb ( GDBusProxy* proxy, gchar* sender_name, gchar* signal_name, @@ -55,14 +58,19 @@ static void apt_watcher_signal_cb ( GDBusProxy* proxy, gpointer user_data) { g_return_if_fail (APT_IS_WATCHER (user_data)); - //AptWatcher* self = APT_WATCHER (user_data); + AptWatcher* self = APT_WATCHER (user_data); g_variant_ref_sink (parameters); GVariant *value = g_variant_get_child_value (parameters, 0); if (g_strcmp0(signal_name, "UpdatesChanged") == 0){ g_debug ("UpdatesChanged signal received"); - + self->pkclient = pk_client_new (); + pk_client_get_updates_async (self->pkclient, + PK_FILTER_ENUM_NONE, + NULL, NULL, NULL, + get_updates_complete, + self); } else if (g_strcmp0(signal_name, "RestartScheduled") == 0) { g_debug ("RestartScheduled signal received"); @@ -190,7 +198,6 @@ static void apt_watcher_init (AptWatcher *self) { self->current_state = UP_TO_DATE; - self->pkclient = pk_client_new (); g_timeout_add_seconds (60, apt_watcher_start_apt_interaction, self); -- cgit v1.2.3 From bf53f6ba5ca03a9cf6617eb09046ad5cc2e564ad Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 7 Feb 2012 11:37:06 +0000 Subject: fetching available packages --- src/apt-watcher.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/apt-watcher.c b/src/apt-watcher.c index 0165bf0..41ed8fc 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -30,6 +30,10 @@ with this program. If not, see . static guint watcher_id; +// TODO +// Get it working and then remove the pkclient pointer in the priv +// it's not needed. + struct _AptWatcher { GObject parent_instance; @@ -38,7 +42,7 @@ struct _AptWatcher AptState current_state; PkClient* pkclient; GCancellable * proxy_cancel; - GDBusProxy * proxy; + GDBusProxy * proxy; }; G_DEFINE_TYPE (AptWatcher, apt_watcher, G_TYPE_OBJECT); @@ -48,7 +52,23 @@ get_updates_complete (GObject *source_object, GAsyncResult *res, gpointer user_data) { + g_return_if_fail (APT_IS_WATCHER (user_data)); + //AptWatcher* self = APT_WATCHER (user_data); + + g_print ("Get updates complete"); + PkResults * results; + + results = pk_client_generic_finish (PK_CLIENT(source_object), res, NULL); + if (results == NULL){ + g_warning ("Unable to query for updates - results were NULL ?"); + return; + } + + GPtrArray *packages; + packages = pk_results_get_package_array (results); + g_ptr_array_unref (packages); + g_object_unref (results); } static void apt_watcher_signal_cb ( GDBusProxy* proxy, @@ -65,11 +85,12 @@ static void apt_watcher_signal_cb ( GDBusProxy* proxy, if (g_strcmp0(signal_name, "UpdatesChanged") == 0){ g_debug ("UpdatesChanged signal received"); - self->pkclient = pk_client_new (); + if (self->pkclient == NULL) + self->pkclient = pk_client_new (); pk_client_get_updates_async (self->pkclient, PK_FILTER_ENUM_NONE, NULL, NULL, NULL, - get_updates_complete, + (GAsyncReadyCallback)get_updates_complete, self); } else if (g_strcmp0(signal_name, "RestartScheduled") == 0) { @@ -198,7 +219,7 @@ static void apt_watcher_init (AptWatcher *self) { self->current_state = UP_TO_DATE; - g_timeout_add_seconds (60, + g_timeout_add_seconds (1, apt_watcher_start_apt_interaction, self); } @@ -211,6 +232,8 @@ apt_watcher_finalize (GObject *object) if (self->proxy != NULL) g_object_unref (self->proxy); + if (self->pkclient != NULL) + g_object_unref (self->pkclient); G_OBJECT_CLASS (apt_watcher_parent_class)->finalize (object); } -- cgit v1.2.3 From 6e585e5487560785caaaf129a1084fd94313ce11 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 7 Feb 2012 14:35:29 +0000 Subject: apt watcher updates --- src/apt-watcher.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/apt-watcher.c b/src/apt-watcher.c index 41ed8fc..eed0080 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -67,6 +67,11 @@ get_updates_complete (GObject *source_object, GPtrArray *packages; packages = pk_results_get_package_array (results); + g_print ("Packages count = %i", + packages->len); + if (packages->len > 0){ + + } g_ptr_array_unref (packages); g_object_unref (results); } @@ -135,10 +140,10 @@ fetch_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) AptWatcher* self = APT_WATCHER(user_data); g_return_if_fail(self != NULL); - GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error); + GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish (res, &error); if (self->proxy_cancel != NULL) { - g_object_unref(self->proxy_cancel); + g_object_unref (self->proxy_cancel); self->proxy_cancel = NULL; } @@ -165,7 +170,6 @@ fetch_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) self); } - static gboolean apt_watcher_start_apt_interaction (gpointer data) { -- cgit v1.2.3 From e856eb999de074536d8bdf634f519f3947daf7c3 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 7 Feb 2012 15:49:20 +0000 Subject: no need to hold on to a reference to a pkclient instance --- src/apt-watcher.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/apt-watcher.c b/src/apt-watcher.c index eed0080..bcf6c97 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -40,13 +40,13 @@ struct _AptWatcher SessionDbus* session_dbus_interface; DbusmenuMenuitem* apt_item; AptState current_state; - PkClient* pkclient; GCancellable * proxy_cancel; GDBusProxy * proxy; }; G_DEFINE_TYPE (AptWatcher, apt_watcher, G_TYPE_OBJECT); + static void get_updates_complete (GObject *source_object, GAsyncResult *res, @@ -56,7 +56,7 @@ get_updates_complete (GObject *source_object, //AptWatcher* self = APT_WATCHER (user_data); g_print ("Get updates complete"); - PkResults * results; + PkResults *results; results = pk_client_generic_finish (PK_CLIENT(source_object), res, NULL); @@ -70,10 +70,25 @@ get_updates_complete (GObject *source_object, g_print ("Packages count = %i", packages->len); if (packages->len > 0){ - + g_print ("Apparently we have updates available"); } g_ptr_array_unref (packages); g_object_unref (results); + g_object_unref (source_object); +} + +static void +apt_watcher_check_for_updates (AptWatcher* self) +{ + g_debug ("UpdatesChanged signal received"); + PkClient* client; + client = pk_client_new (); + + pk_client_get_updates_async (client, + PK_FILTER_ENUM_NONE, + NULL, NULL, NULL, + (GAsyncReadyCallback)get_updates_complete, + self); } static void apt_watcher_signal_cb ( GDBusProxy* proxy, @@ -89,14 +104,8 @@ static void apt_watcher_signal_cb ( GDBusProxy* proxy, GVariant *value = g_variant_get_child_value (parameters, 0); if (g_strcmp0(signal_name, "UpdatesChanged") == 0){ - g_debug ("UpdatesChanged signal received"); - if (self->pkclient == NULL) - self->pkclient = pk_client_new (); - pk_client_get_updates_async (self->pkclient, - PK_FILTER_ENUM_NONE, - NULL, NULL, NULL, - (GAsyncReadyCallback)get_updates_complete, - self); + g_print ("updates changed signal received"); + apt_watcher_check_for_updates (self); } else if (g_strcmp0(signal_name, "RestartScheduled") == 0) { g_debug ("RestartScheduled signal received"); @@ -162,8 +171,7 @@ fetch_proxy_cb (GObject * object, GAsyncResult * res, gpointer user_data) apt_watcher_on_name_appeared, apt_watcher_on_name_vanished, self, - NULL); - + NULL); g_signal_connect (self->proxy, "g-signal", G_CALLBACK(apt_watcher_signal_cb), @@ -184,6 +192,7 @@ apt_watcher_start_apt_interaction (gpointer data) self->proxy_cancel, fetch_proxy_cb, self); + apt_watcher_check_for_updates (self); return FALSE; } @@ -236,8 +245,6 @@ apt_watcher_finalize (GObject *object) if (self->proxy != NULL) g_object_unref (self->proxy); - if (self->pkclient != NULL) - g_object_unref (self->pkclient); G_OBJECT_CLASS (apt_watcher_parent_class)->finalize (object); } -- cgit v1.2.3 From 3c560ddcaeb71953c7dfecf2acfa11aa77b0e3d9 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Wed, 8 Feb 2012 12:29:49 +0000 Subject: pk kit compat layer seems to be sane --- src/apt-watcher.c | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/apt-watcher.c b/src/apt-watcher.c index bcf6c97..cdb3ce9 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -33,7 +33,6 @@ static guint watcher_id; // TODO // Get it working and then remove the pkclient pointer in the priv // it's not needed. - struct _AptWatcher { GObject parent_instance; @@ -53,9 +52,8 @@ get_updates_complete (GObject *source_object, gpointer user_data) { g_return_if_fail (APT_IS_WATCHER (user_data)); - //AptWatcher* self = APT_WATCHER (user_data); + AptWatcher* self = APT_WATCHER (user_data); - g_print ("Get updates complete"); PkResults *results; results = pk_client_generic_finish (PK_CLIENT(source_object), res, NULL); @@ -67,10 +65,26 @@ get_updates_complete (GObject *source_object, GPtrArray *packages; packages = pk_results_get_package_array (results); - g_print ("Packages count = %i", - packages->len); + + const gchar* disposition; + disposition = dbusmenu_menuitem_property_get (self->apt_item, + DBUSMENU_MENUITEM_PROP_DISPOSITION); + gboolean do_update; + do_update = g_strcmp0 (disposition, DBUSMENU_MENUITEM_DISPOSITION_ALERT) != 0; + if (packages->len > 0){ - g_print ("Apparently we have updates available"); + g_print ("Apparently we have updates available - change dbmitem %i", do_update); + if (do_update) + dbusmenu_menuitem_property_set (self->apt_item, + DBUSMENU_MENUITEM_PROP_LABEL, + _("Updates Available…")); + } + else{ + g_print ("No updates available - change dbmitem - %i", do_update); + if (do_update) + dbusmenu_menuitem_property_set (self->apt_item, + DBUSMENU_MENUITEM_PROP_LABEL, + _("Software Up to Date")); } g_ptr_array_unref (packages); g_object_unref (results); @@ -80,7 +94,6 @@ get_updates_complete (GObject *source_object, static void apt_watcher_check_for_updates (AptWatcher* self) { - g_debug ("UpdatesChanged signal received"); PkClient* client; client = pk_client_new (); @@ -102,13 +115,19 @@ static void apt_watcher_signal_cb ( GDBusProxy* proxy, g_variant_ref_sink (parameters); GVariant *value = g_variant_get_child_value (parameters, 0); - + g_debug ("apt-watcher-signal cb signal name - %s", signal_name); if (g_strcmp0(signal_name, "UpdatesChanged") == 0){ - g_print ("updates changed signal received"); + g_debug ("updates changed signal received"); apt_watcher_check_for_updates (self); } else if (g_strcmp0(signal_name, "RestartScheduled") == 0) { g_debug ("RestartScheduled signal received"); + dbusmenu_menuitem_property_set (self->apt_item, + DBUSMENU_MENUITEM_PROP_LABEL, + _("Restart to Complete Updates…")); + dbusmenu_menuitem_property_set (self->apt_item, + DBUSMENU_MENUITEM_PROP_DISPOSITION, + DBUSMENU_MENUITEM_DISPOSITION_ALERT); } g_variant_unref (value); -- cgit v1.2.3 From d4162d24e4bdee56df9bf6815207cf0ecf15fed3 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Wed, 8 Feb 2012 16:37:31 +0000 Subject: get rid of the transaction as we don't need to worry about updates installing state --- src/Makefile.am | 4 +- src/apt-transaction.c | 263 -------------------------------------------------- src/apt-transaction.h | 49 ---------- src/apt-watcher.c | 9 +- 4 files changed, 5 insertions(+), 320 deletions(-) delete mode 100644 src/apt-transaction.c delete mode 100644 src/apt-transaction.h diff --git a/src/Makefile.am b/src/Makefile.am index afee66c..67a1cb6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -114,9 +114,7 @@ indicator_session_service_SOURCES = \ if BUILD_APT indicator_session_service_SOURCES += \ apt-watcher.h \ - apt-watcher.c \ - apt-transaction.h \ - apt-transaction.c + apt-watcher.c endif indicator_session_service_CFLAGS = \ diff --git a/src/apt-transaction.c b/src/apt-transaction.c deleted file mode 100644 index 2b3f5a4..0000000 --- a/src/apt-transaction.c +++ /dev/null @@ -1,263 +0,0 @@ -/* -Copyright 2011 Canonical Ltd. - -Authors: - Conor Curran - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - -#include - -#include "apt-transaction.h" -#include "dbus-shared-names.h" - -static void apt_transaction_investigate (AptTransaction* self); -static void apt_transaction_simulate_transaction_cb (GObject * obj, - GAsyncResult * res, - gpointer user_data); -static void apt_transaction_receive_signal (GDBusProxy * proxy, - gchar * sender_name, - gchar * signal_name, - GVariant * parameters, - gpointer user_data); -static void apt_transaction_finish_proxy_setup (GObject *source_object, - GAsyncResult *res, - gpointer user_data); - -struct _AptTransaction -{ - GObject parent_instance; - GDBusProxy * proxy; - GCancellable * proxy_cancel; - gchar* id; - TransactionType type; -}; - -enum { - UPDATE, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = { 0 }; - -G_DEFINE_TYPE (AptTransaction, apt_transaction, G_TYPE_OBJECT); - -static void -apt_transaction_init (AptTransaction *self) -{ - self->proxy = NULL; - self->id = NULL; - self->proxy_cancel = g_cancellable_new(); -} - -static void -apt_transaction_finalize (GObject *object) -{ - AptTransaction* self = APT_TRANSACTION(object); - g_signal_handlers_disconnect_by_func (G_OBJECT (self->proxy), - G_CALLBACK (apt_transaction_receive_signal), - self); - if (self->proxy != NULL){ - g_object_unref (self->proxy); - self->proxy = NULL; - } - g_free (self->id); - G_OBJECT_CLASS (apt_transaction_parent_class)->finalize (object); -} - -static void -apt_transaction_class_init (AptTransactionClass *klass) -{ - GObjectClass* object_class = G_OBJECT_CLASS (klass); - object_class->finalize = apt_transaction_finalize; - - signals[UPDATE] = g_signal_new("state-update", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__INT, - G_TYPE_NONE, 1, G_TYPE_INT); -} - -// TODO: you don't need this additional helper -// Just GObject properties properly -static void -apt_transaction_investigate (AptTransaction* self) -{ - g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_NONE, - NULL, - "org.debian.apt", - self->id, - "org.debian.apt.transaction", - self->proxy_cancel, - apt_transaction_finish_proxy_setup, - self); -} - -static void -apt_transaction_finish_proxy_setup (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - g_return_if_fail (APT_IS_TRANSACTION (user_data)); - AptTransaction* self = APT_TRANSACTION(user_data); - GError * error = NULL; - - GDBusProxy * proxy = g_dbus_proxy_new_for_bus_finish(res, &error); - - if (self->proxy_cancel != NULL) { - g_object_unref(self->proxy_cancel); - self->proxy_cancel = NULL; - } - - if (error != NULL) { - g_warning("Could not grab DBus proxy for %s: %s", - "org.debian.apt", error->message); - g_error_free(error); - return; - } - - self->proxy = proxy; - - g_signal_connect (G_OBJECT(self->proxy), - "g-signal", - G_CALLBACK (apt_transaction_receive_signal), - self); - - if (self->type == SIMULATION){ - g_dbus_proxy_call (self->proxy, - "Simulate", - NULL, - G_DBUS_CALL_FLAGS_NONE, - -1, - NULL, - apt_transaction_simulate_transaction_cb, - self); - } -} - -static void -apt_transaction_receive_signal (GDBusProxy * proxy, - gchar * sender_name, - gchar * signal_name, - GVariant * parameters, - gpointer user_data) -{ - g_return_if_fail (APT_IS_TRANSACTION (user_data)); - AptTransaction* self = APT_TRANSACTION(user_data); - AptState current_state = DONT_KNOW; - - if (g_strcmp0(signal_name, "PropertyChanged") == 0) - { - gchar* prop_name= NULL; - GVariant* value = NULL; - g_variant_get (parameters, "(sv)", &prop_name, &value); - g_debug ("transaction prop update - prop = %s", prop_name); - - if (g_variant_is_of_type (value, G_VARIANT_TYPE_STRING) == TRUE){ - gchar* key = NULL; - g_variant_get (value, "s", &key); - g_debug ("transaction prop update - value = %s", key); - } - - if (g_strcmp0 (prop_name, "Dependencies") == 0){ - - gchar** install = NULL; - gchar** reinstall = NULL; - gchar** remove = NULL; - gchar** purge = NULL; - gchar** upgrade = NULL; - gchar** downgrade = NULL; - gchar** keep = NULL; - g_variant_get (value, "(asasasasasasas)", &install, - &reinstall, &remove, &purge, &upgrade, &downgrade, - &keep); - /* - g_debug ("upgrade package length %i", g_strv_length(upgrade)); - g_debug ("install package length %i", g_strv_length(install)); - g_debug ("reinstall package length %i", g_strv_length(reinstall)); - g_debug ("remove package length %i", g_strv_length(remove)); - g_debug ("purge package length %i", g_strv_length(purge)); - */ - gboolean upgrade_needed = (g_strv_length(upgrade) > 1) || - (g_strv_length(install) > 1) || - (g_strv_length(reinstall) > 1) || - (g_strv_length(remove) > 1) || - (g_strv_length(purge) > 1); - if (upgrade_needed == TRUE){ - current_state = UPDATES_AVAILABLE; - } - else{ - current_state = UP_TO_DATE; - } - } - if (self->type == REAL) - { - GVariant* role = g_dbus_proxy_get_cached_property (self->proxy, - "Role"); - if (g_variant_is_of_type (role, G_VARIANT_TYPE_STRING) == TRUE){ - gchar* current_role = NULL; - g_variant_get (role, "s", ¤t_role); - //g_debug ("Current transaction role = %s", current_role); - if (g_strcmp0 (current_role, "role-commit-packages") == 0 || - g_strcmp0 (current_role, "role-upgrade-system") == 0){ - g_debug ("UPGRADE IN PROGRESS"); - current_state = UPGRADE_IN_PROGRESS; - } - } - } - } - else if (g_strcmp0(signal_name, "Finished") == 0) - { - g_debug ("TRANSACTION Finished"); - current_state = FINISHED; - } - // Finally send out the state update - if (current_state != DONT_KNOW){ - g_signal_emit (self, - signals[UPDATE], - 0, - current_state); - } -} - -static void -apt_transaction_simulate_transaction_cb (GObject * obj, - GAsyncResult * res, - gpointer user_data) -{ - GError * error = NULL; - if (error != NULL) { - g_warning ("unable to complete the simulate call"); - g_error_free (error); - return; - } -} -TransactionType -apt_transaction_get_transaction_type (AptTransaction* self) -{ - return self->type; -} - -AptTransaction* apt_transaction_new (gchar* transaction_id, TransactionType t) -{ - AptTransaction* tr = g_object_new (APT_TYPE_TRANSACTION, NULL); - tr->id = transaction_id; - tr->type = t; - g_debug ("Apt transaction new id = %s", tr->id); - apt_transaction_investigate (tr); - return tr; -} diff --git a/src/apt-transaction.h b/src/apt-transaction.h deleted file mode 100644 index 9e4370d..0000000 --- a/src/apt-transaction.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -Copyright 2011 Canonical Ltd. - -Authors: - Conor Curran - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - -#ifndef _APT_TRANSACTION_H_ -#define _APT_TRANSACTION_H_ - -#include -#include "dbus-shared-names.h" - -G_BEGIN_DECLS - -#define APT_TYPE_TRANSACTION (apt_transaction_get_type ()) -#define APT_TRANSACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), APT_TYPE_TRANSACTION, AptTransaction)) -#define APT_TRANSACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), APT_TYPE_TRANSACTION, AptTransactionClass)) -#define APT_IS_TRANSACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), APT_TYPE_TRANSACTION)) -#define APT_IS_TRANSACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), APT_TYPE_TRANSACTION)) -#define APT_TRANSACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), APT_TYPE_TRANSACTION, AptTransactionClass)) - -typedef struct _AptTransactionClass AptTransactionClass; -typedef struct _AptTransaction AptTransaction; - -struct _AptTransactionClass -{ - GObjectClass parent_class; -}; - -AptTransaction* apt_transaction_new (gchar* transaction_id, TransactionType t); -TransactionType apt_transaction_get_transaction_type (AptTransaction* self); -GType apt_transaction_get_type (void) G_GNUC_CONST; - -G_END_DECLS - -#endif /* _APT_TRANSACTION_H_ */ diff --git a/src/apt-watcher.c b/src/apt-watcher.c index cdb3ce9..cab2d8b 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -30,9 +30,6 @@ with this program. If not, see . static guint watcher_id; -// TODO -// Get it working and then remove the pkclient pointer in the priv -// it's not needed. struct _AptWatcher { GObject parent_instance; @@ -114,7 +111,6 @@ static void apt_watcher_signal_cb ( GDBusProxy* proxy, AptWatcher* self = APT_WATCHER (user_data); g_variant_ref_sink (parameters); - GVariant *value = g_variant_get_child_value (parameters, 0); g_debug ("apt-watcher-signal cb signal name - %s", signal_name); if (g_strcmp0(signal_name, "UpdatesChanged") == 0){ g_debug ("updates changed signal received"); @@ -129,8 +125,11 @@ static void apt_watcher_signal_cb ( GDBusProxy* proxy, DBUSMENU_MENUITEM_PROP_DISPOSITION, DBUSMENU_MENUITEM_DISPOSITION_ALERT); } + else if (g_strcmp0(signal_name, "TransactionListChanged") == 0) { + GVariant *value = g_variant_get_child_value (parameters, 0); + g_variant_unref (value); - g_variant_unref (value); + } g_variant_unref (parameters); } -- cgit v1.2.3 From 4145c29279197d5985d348fbe2ef219a4c015a11 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Wed, 8 Feb 2012 17:23:19 +0000 Subject: correct conflict --- src/user-widget.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/user-widget.c b/src/user-widget.c index 8388ec5..33b9e40 100644 --- a/src/user-widget.c +++ b/src/user-widget.c @@ -136,7 +136,13 @@ user_widget_init (UserWidget *self) gtk_misc_set_padding (GTK_MISC(priv->user_image),0, 4.0); priv->user_name = gtk_label_new (""); + +#if HAVE_GTK3 priv->container = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); +#else + priv->container = gtk_hbox_new (FALSE, 0); +#endif + priv->tick_icon = gtk_image_new_from_icon_name ("account-logged-in", GTK_ICON_SIZE_MENU); gtk_misc_set_alignment(GTK_MISC(priv->tick_icon), 1.0, 0.5); -- cgit v1.2.3 From 2890929b32c38c8c99ce381dd20b4df30d24f2ad Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Wed, 8 Feb 2012 18:25:18 +0000 Subject: merge request comments acted upon --- src/apt-watcher.c | 15 ++++----------- src/apt-watcher.h | 1 - 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/apt-watcher.c b/src/apt-watcher.c index 4e69ee6..6e8a5c9 100644 --- a/src/apt-watcher.c +++ b/src/apt-watcher.c @@ -52,11 +52,11 @@ get_updates_complete (GObject *source_object, AptWatcher* self = APT_WATCHER (user_data); PkResults *results; + GError *error = NULL; + results = pk_client_generic_finish (PK_CLIENT(source_object), res, &error); - results = pk_client_generic_finish (PK_CLIENT(source_object), res, NULL); - - if (results == NULL){ - g_warning ("Unable to query for updates - results were NULL ?"); + if (error != NULL){ + g_warning ("Unable to query for updates - error - %s", error->message); return; } @@ -110,7 +110,6 @@ static void apt_watcher_signal_cb ( GDBusProxy* proxy, g_return_if_fail (APT_IS_WATCHER (user_data)); AptWatcher* self = APT_WATCHER (user_data); - g_variant_ref_sink (parameters); g_debug ("apt-watcher-signal cb signal name - %s", signal_name); if (g_strcmp0(signal_name, "UpdatesChanged") == 0){ g_debug ("updates changed signal received"); @@ -125,12 +124,6 @@ static void apt_watcher_signal_cb ( GDBusProxy* proxy, DBUSMENU_MENUITEM_PROP_DISPOSITION, DBUSMENU_MENUITEM_DISPOSITION_ALERT); } - else if (g_strcmp0(signal_name, "TransactionListChanged") == 0) { - GVariant *value = g_variant_get_child_value (parameters, 0); - g_variant_unref (value); - - } - g_variant_unref (parameters); } static void diff --git a/src/apt-watcher.h b/src/apt-watcher.h index 54d26f5..c571502 100644 --- a/src/apt-watcher.h +++ b/src/apt-watcher.h @@ -28,7 +28,6 @@ with this program. If not, see . #include #include "session-dbus.h" -#include "dbus-shared-names.h" G_BEGIN_DECLS -- cgit v1.2.3 From 512b6ab53a8d2b023131c60087b04b6dc216e4fe Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Wed, 8 Feb 2012 18:36:33 +0000 Subject: prep for release 0.3.91 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 7fa6b48..8d02d69 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ AC_INIT(src/indicator-session.c) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(indicator-session, 0.3.90) +AM_INIT_AUTOMAKE(indicator-session, 0.3.91) AM_MAINTAINER_MODE -- cgit v1.2.3 From 9dec8f6fe22ccd4c52dd1d7e9fd925b87c2830c7 Mon Sep 17 00:00:00 2001 From: Robert Ancell Date: Fri, 10 Feb 2012 18:33:14 +1100 Subject: Don't lock the session when switching to another one - something else (ConsoleKit?) already does this and locks it regardless of if the setting has been configured. By explicitly doing the lock it means we can't override it inside GNOME screensaver to switch to the greeter instead, so this patch removes the code. --- src/user-menu-mgr.c | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/src/user-menu-mgr.c b/src/user-menu-mgr.c index 3f4bdc4..7aad2af 100644 --- a/src/user-menu-mgr.c +++ b/src/user-menu-mgr.c @@ -285,29 +285,11 @@ check_new_session () return TRUE; } -/* Check to see if the lockdown key is protecting from - locking the screen. If not, lock it. */ -static void -lock_if_possible (void) { - ensure_settings_client (); - - if (!g_settings_get_boolean (settings, LOCKDOWN_KEY_SCREENSAVER)) { - lock_screen(NULL, 0, NULL); - } - - return; -} - - /* Starts a new generic session */ static void activate_new_session (DbusmenuMenuitem * mi, guint timestamp, gpointer user_data) { - lock_if_possible(); - - users_service_dbus_show_greeter (USERS_SERVICE_DBUS(user_data)); - - return; + users_service_dbus_show_greeter (USERS_SERVICE_DBUS(user_data)); } /* Activates a session for a particular user. */ @@ -317,8 +299,6 @@ activate_user_session (DbusmenuMenuitem *mi, guint timestamp, gpointer user_data UserData *user = (UserData *)user_data; UsersServiceDbus *service = user->service; - lock_if_possible(); - users_service_dbus_activate_user_session (service, user); } @@ -406,11 +386,7 @@ activate_guest_session (DbusmenuMenuitem * mi, guint timestamp, gpointer user_da UserMenuMgr* user_mgr = USER_MENU_MGR(user_data); UsersServiceDbus *service = user_mgr->users_dbus_interface; - lock_if_possible(); - - if (users_service_dbus_activate_guest_session(service)) { - return; - } + users_service_dbus_activate_guest_session(service); } -- cgit v1.2.3 From 05f7c359ae59cbcf9890dddf27dd4362269459c8 Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Thu, 23 Feb 2012 00:20:15 +0100 Subject: make gudev dep optional Debian has arches w/o udev (hurd-*, kfreebsd-*). These cannot build indicator-session currently because libgudev-1.0-dev is missing there. Make the gudev dep optional and thus make indicator-session buildable on non-Linux arches again. --- configure.ac | 12 +++++++++--- src/Makefile.am | 15 +++++++++++++-- src/device-menu-mgr.c | 2 ++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 8d02d69..0c2a9f8 100644 --- a/configure.ac +++ b/configure.ac @@ -61,7 +61,6 @@ AS_IF([test "x$with_gtk" = x3], [PKG_CHECK_MODULES(SESSIONSERVICE, dbusmenu-glib-0.4 >= $DBUSMENUGLIB_REQUIRED_VERSION dbusmenu-gtk3-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION dbus-glib-1 - gudev-1.0 gio-unix-2.0 indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION packagekit-glib2) @@ -69,7 +68,6 @@ AS_IF([test "x$with_gtk" = x3], [test "x$with_gtk" = x2], [PKG_CHECK_MODULES(SESSIONSERVICE, dbusmenu-glib-0.4 >= $DBUSMENUGLIB_REQUIRED_VERSION dbusmenu-gtk-0.4 >= $DBUSMENUGTK_REQUIRED_VERSION - gudev-1.0 dbus-glib-1 gio-unix-2.0 indicator-0.4 >= $INDICATOR_REQUIRED_VERSION @@ -80,6 +78,10 @@ AS_IF([test "x$with_gtk" = x3], AC_SUBST(SESSIONERVICE_CFLAGS) AC_SUBST(SESSIONERVICE_LIBS) +PKG_CHECK_MODULES(GUDEV, gudev-1.0, has_gudev=true, has_gudev=false) +AC_SUBST(GUDEV_CFLAGS) +AC_SUBST(GUDEV_LIBS) + AM_CONDITIONAL([USE_GTK3], [test "x$with_gtk" = "x3"]) AS_IF([test "x$with_gtk" = x3], [ AC_DEFINE(HAVE_GTK3, 1, [whether gtk3 is available]) @@ -199,7 +201,9 @@ AM_GLIB_GNU_GETTEXT # Files ########################### -AC_OUTPUT([ +AM_CONDITIONAL([HAS_GUDEV], [test "x$has_gudev" = "xtrue"]) + +AC_CONFIG_FILES([ Makefile src/Makefile data/Makefile @@ -223,6 +227,8 @@ data/extra-sessions/Makefile po/Makefile.in ]) +AC_OUTPUT + ########################### # Results ########################### diff --git a/src/Makefile.am b/src/Makefile.am index 67a1cb6..04801b5 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -107,8 +107,6 @@ indicator_session_service_SOURCES = \ user-menu-mgr.c \ device-menu-mgr.h \ device-menu-mgr.c \ - udev-mgr.h \ - udev-mgr.c \ sane-rules.h if BUILD_APT @@ -117,6 +115,12 @@ indicator_session_service_SOURCES += \ apt-watcher.c endif +if HAS_GUDEV +indicator_session_service_SOURCES += \ + udev-mgr.h \ + udev-mgr.c +endif + indicator_session_service_CFLAGS = \ $(SESSIONSERVICE_CFLAGS) \ $(GCONF_CFLAGS) \ @@ -127,6 +131,13 @@ indicator_session_service_LDADD = \ $(SESSIONSERVICE_LIBS) \ $(GCONF_LIBS) +if HAS_GUDEV +indicator_session_service_CFLAGS += \ + $(GUDEV_CFLAGS) +indicator_session_service_LDADD += \ + $(GUDEV_LIBS) +endif + ################# # GTK Logout Stuff ################# diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index f8f0696..8e0713e 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -733,8 +733,10 @@ device_menu_mgr_build_static_items (DeviceMenuMgr* self, gboolean greeter_mode) restart_shutdown_logout_mi->shutdown_mi = shutdown_mi; update_menu_entries(restart_shutdown_logout_mi); +#ifdef HAS_GUDEV // Time to create the udev mgr and hand it the static relevant items. self->udev_mgr = udev_mgr_new (scanners_menuitem, webcam_menuitem); +#endif } static void -- cgit v1.2.3 -- cgit v1.2.3 From 9b6ac737fa4440f59cc3ed230144957bfd8d89de Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 22 Feb 2012 23:21:55 -0600 Subject: Add default accessible descriptions to the entries --- src/indicator-session.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/indicator-session.c b/src/indicator-session.c index e748825..1640ed4 100644 --- a/src/indicator-session.c +++ b/src/indicator-session.c @@ -162,6 +162,7 @@ indicator_session_init (IndicatorSession *self) } self->users.label = GTK_LABEL (gtk_label_new (NULL)); + self->users.accessible_desc = _("User Menu"); const gchar *greeter_var; greeter_var = g_getenv("INDICATOR_GREETER_MODE"); @@ -169,6 +170,7 @@ indicator_session_init (IndicatorSession *self) // devices self->devices.name_hint = PACKAGE"-devices"; + self->devices.accessible_desc = _("Device Menu"); self->devices.menu = GTK_MENU (dbusmenu_gtkmenu_new(INDICATOR_SESSION_DBUS_NAME, INDICATOR_SESSION_DBUS_OBJECT)); if (greeter_mode){ -- cgit v1.2.3 From d88e2f6976a8e3cfe3d195899cc28a2706b8439f Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 22 Feb 2012 23:22:14 -0600 Subject: If we change the icon to show reboot we need to tell that to the a11y string as well --- src/indicator-session.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/indicator-session.c b/src/indicator-session.c index 1640ed4..5d894e8 100644 --- a/src/indicator-session.c +++ b/src/indicator-session.c @@ -516,6 +516,8 @@ receive_signal (GDBusProxy * proxy, g_debug ("reboot required"); indicator_image_helper_update(self->devices.image, ICON_RESTART); } + self->devices.accessible_desc = _("Device Menu (reboot required)"); + g_signal_emit(G_OBJECT(self), INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE_ID, 0, &(self->devices)); } } -- cgit v1.2.3 From cc124ba5add6debff0f4053f43e3f2e160b2039c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 23 Feb 2012 08:38:00 -0600 Subject: Making sure to distribute the files even if we don't use them to build. --- src/Makefile.am | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Makefile.am b/src/Makefile.am index 04801b5..4da3fc5 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,6 @@ +EXTRA_DIST = + libexec_PROGRAMS = \ indicator-session-service @@ -113,12 +115,20 @@ if BUILD_APT indicator_session_service_SOURCES += \ apt-watcher.h \ apt-watcher.c +else +EXTRA_DIST += \ + apt-watcher.h \ + apt-watcher.c endif if HAS_GUDEV indicator_session_service_SOURCES += \ udev-mgr.h \ udev-mgr.c +else +EXTRA_DIST += \ + udev-mgr.h \ + udev-mgr.c endif indicator_session_service_CFLAGS = \ @@ -179,7 +189,7 @@ BUILT_SOURCES = \ accounts-service-client.h \ accounts-service-user-client.h -EXTRA_DIST = \ +EXTRA_DIST += \ org.freedesktop.ConsoleKit.Manager.xml \ org.freedesktop.ConsoleKit.Seat.xml \ org.freedesktop.ConsoleKit.Session.xml \ -- cgit v1.2.3 From 76e3d09219f1dd4f7dcb1e99dcaec562ff7cdcaf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 23 Feb 2012 08:39:11 -0600 Subject: Move the variables into the list straight up as they'll be NULL if undefined --- src/Makefile.am | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 4da3fc5..a1e443e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -136,17 +136,12 @@ indicator_session_service_CFLAGS = \ $(GCONF_CFLAGS) \ -DLIBEXECDIR=\"$(libexecdir)\" \ -Wall -Werror \ - -DG_LOG_DOMAIN=\"Indicator-Session\" + -DG_LOG_DOMAIN=\"Indicator-Session\" \ + $(GUDEV_CFLAGS) indicator_session_service_LDADD = \ $(SESSIONSERVICE_LIBS) \ - $(GCONF_LIBS) - -if HAS_GUDEV -indicator_session_service_CFLAGS += \ - $(GUDEV_CFLAGS) -indicator_session_service_LDADD += \ + $(GCONF_LIBS) \ $(GUDEV_LIBS) -endif ################# # GTK Logout Stuff -- cgit v1.2.3 From 68cf3cfad3861048d620b2486abf47d5a3ce2886 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 23 Feb 2012 08:40:17 -0600 Subject: Don't include the header or the variable if we're not using GUDev --- src/device-menu-mgr.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/device-menu-mgr.c b/src/device-menu-mgr.c index 8e0713e..cfdb55d 100644 --- a/src/device-menu-mgr.c +++ b/src/device-menu-mgr.c @@ -31,7 +31,9 @@ with this program. If not, see . #include "apt-watcher.h" #endif /* HAVE_APT */ +#ifdef HAS_GUDEV #include "udev-mgr.h" +#endif /* HAS_GUDEV */ #define UP_ADDRESS "org.freedesktop.UPower" #define UP_OBJECT "/org/freedesktop/UPower" @@ -47,7 +49,9 @@ struct _DeviceMenuMgr #ifdef HAVE_APT AptWatcher* apt_watcher; #endif /* HAVE_APT */ +#ifdef HAS_GUDEV UdevMgr* udev_mgr; +#endif /* HAS_GUDEV */ }; static GSettings *lockdown_settings = NULL; -- cgit v1.2.3 From 2afbdf3abb677533b1fdfb25d8b0aa64ebb332f9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 23 Feb 2012 08:49:04 -0600 Subject: 0.3.92 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 0c2a9f8..ab12f12 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ AC_INIT(src/indicator-session.c) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(indicator-session, 0.3.91) +AM_INIT_AUTOMAKE(indicator-session, 0.3.92) AM_MAINTAINER_MODE -- cgit v1.2.3