Merge lp:~indicator-applet-developers/indicator-session/ubuntu into lp:~ubuntu-desktop/indicator-session/ubuntu

Proposed by Ted Gould
Status: Merged
Merged at revision: not available
Proposed branch: lp:~indicator-applet-developers/indicator-session/ubuntu
Merge into: lp:~ubuntu-desktop/indicator-session/ubuntu
Diff against target: None lines
To merge this branch: bzr merge lp:~indicator-applet-developers/indicator-session/ubuntu
Reviewer Review Type Date Requested Status
Sebastien Bacher Pending
Ken VanDine Pending
Review via email: mp+11569@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Ted Gould (ted) wrote :

Upstream release 0.1.3

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'configure.ac'
--- configure.ac 2009-09-08 15:51:54 +0000
+++ configure.ac 2009-09-11 01:36:16 +0000
@@ -4,7 +4,7 @@
4AC_PREREQ(2.53)4AC_PREREQ(2.53)
55
6AM_CONFIG_HEADER(config.h)6AM_CONFIG_HEADER(config.h)
7AM_INIT_AUTOMAKE(indicator-session, 0.1.2)7AM_INIT_AUTOMAKE(indicator-session, 0.1.3)
88
9AM_MAINTAINER_MODE9AM_MAINTAINER_MODE
1010
1111
=== modified file 'debian/changelog'
--- debian/changelog 2009-09-08 16:16:10 +0000
+++ debian/changelog 2009-09-11 01:39:48 +0000
@@ -1,3 +1,13 @@
1indicator-session (0.1.3-0ubuntu1~ppa1) karmic; urgency=low
2
3 * Upstream release 0.1.3
4 * GConf Key change listening
5 * Pidgin and Empathy (2.26) startup detection
6 * Label fixes
7 * Icon fixes for logout windows (LP: #426355)
8
9 -- Ted Gould <ted@ubuntu.com> Thu, 10 Sep 2009 20:38:44 -0500
10
1indicator-session (0.1.2-0ubuntu1) karmic; urgency=low11indicator-session (0.1.2-0ubuntu1) karmic; urgency=low
212
3 * debian/control:13 * debian/control:
414
=== modified file 'src/gtk-dialog/Makefile.am'
--- src/gtk-dialog/Makefile.am 2009-09-02 14:17:44 +0000
+++ src/gtk-dialog/Makefile.am 2009-09-10 22:02:32 +0000
@@ -10,6 +10,6 @@
10 logout-dialog.c \10 logout-dialog.c \
11 logout-dialog.h11 logout-dialog.h
1212
13gtk_logout_helper_CFLAGS = $(GTKLOGOUTHELPER_CFLAGS) $(GCONF_CFLAGS) -Wall -Werror13gtk_logout_helper_CFLAGS = $(SESSIONSERVICE_CFLAGS) $(GTKLOGOUTHELPER_CFLAGS) $(GCONF_CFLAGS) -Wall -Werror -DINDICATOR_ICONS_DIR="\"$(INDICATORICONSDIR)\""
14gtk_logout_helper_LDADD = $(GTKLOGOUTHELPER_LIBS) $(GCONF_LIBS)14gtk_logout_helper_LDADD = $(SESSIONSERVICE_LIBS) $(GTKLOGOUTHELPER_LIBS) $(GCONF_LIBS)
1515
1616
=== modified file 'src/gtk-dialog/gconf-helper.c'
--- src/gtk-dialog/gconf-helper.c 2009-09-02 15:10:20 +0000
+++ src/gtk-dialog/gconf-helper.c 2009-09-10 22:05:42 +0000
@@ -1,6 +1,5 @@
1/*1/*
2A small wrapper utility to load indicators and put them as menu items2A small wrapper utility for connecting to gconf.
3into the gnome-panel using it's applet interface.
43
5Copyright 2009 Canonical Ltd.4Copyright 2009 Canonical Ltd.
65
@@ -23,10 +22,52 @@
2322
24#include <gconf/gconf-client.h>23#include <gconf/gconf-client.h>
2524
25#include <glib/gi18n.h>
26
27#include <dbus/dbus-glib.h>
28#include <dbus/dbus-glib-bindings.h>
29
30#include <libdbusmenu-glib/server.h>
31#include <libdbusmenu-glib/menuitem.h>
32
26#include "gconf-helper.h"33#include "gconf-helper.h"
2734
35static GConfClient * gconf_client = NULL;
36
28gboolean37gboolean
29supress_confirmations (void) {38supress_confirmations (void) {
30 GConfClient *client = gconf_client_get_default ();39 if(!gconf_client) {
31 return gconf_client_get_bool (client, SUPPRESS_KEY, NULL) ;40 gconf_client = gconf_client_get_default ();
32}41 }
42 return gconf_client_get_bool (gconf_client, SUPPRESS_KEY, NULL) ;
43}
44
45static void update_menu_entries_callback (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer data) {
46 RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi = (RestartShutdownLogoutMenuItems*) data;
47 GConfValue * value = gconf_entry_get_value (entry);
48 const gchar * key = gconf_entry_get_key (entry);
49
50 if(g_strcmp0 (key, SUPPRESS_KEY) == 0) {
51 if (gconf_value_get_bool (value)) {
52 dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->logout_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out"));
53 dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart"));
54 dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shutdown"));
55 } else {
56 dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->logout_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out..."));
57 dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart..."));
58 dbusmenu_menuitem_property_set(restart_shutdown_logout_mi->shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shutdown..."));
59 }
60 }
61}
62
63void
64update_menu_entries(RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi) {
65 if(!gconf_client) {
66 gconf_client = gconf_client_get_default ();
67 }
68 gconf_client_add_dir (gconf_client, GLOBAL_DIR,
69 GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
70 gconf_client_notify_add (gconf_client, SUPPRESS_KEY,
71 update_menu_entries_callback, restart_shutdown_logout_mi, NULL, NULL);
72}
73
3374
=== modified file 'src/gtk-dialog/gconf-helper.h'
--- src/gtk-dialog/gconf-helper.h 2009-09-02 15:10:20 +0000
+++ src/gtk-dialog/gconf-helper.h 2009-09-08 19:26:38 +0000
@@ -1,6 +1,5 @@
1/*1/*
2A small wrapper utility to load indicators and put them as menu items2A small wrapper utility for connecting to gconf.
3into the gnome-panel using it's applet interface.
43
5Copyright 2009 Canonical Ltd.4Copyright 2009 Canonical Ltd.
65
@@ -26,8 +25,26 @@
2625
27#include <gconf/gconf-client.h>26#include <gconf/gconf-client.h>
2827
28#include <glib/gi18n.h>
29
30#include <dbus/dbus-glib.h>
31#include <dbus/dbus-glib-bindings.h>
32
33#include <libdbusmenu-glib/server.h>
34#include <libdbusmenu-glib/menuitem.h>
35
29#define SUPPRESS_KEY "/apps/indicator-session/suppress_logout_restart_shutdown"36#define SUPPRESS_KEY "/apps/indicator-session/suppress_logout_restart_shutdown"
3037#define GLOBAL_DIR "/apps/indicator-session"
38
39typedef struct _RestartShutdownLogoutMenuItems
40{
41 DbusmenuMenuitem * logout_mi;
42 DbusmenuMenuitem * restart_mi;
43 DbusmenuMenuitem * shutdown_mi;
44}
45RestartShutdownLogoutMenuItems;
46
47void update_menu_entries(RestartShutdownLogoutMenuItems*);
31gboolean supress_confirmations (void);48gboolean supress_confirmations (void);
3249
33#endif /* __GCONF_HELPER__ */50#endif /* __GCONF_HELPER__ */
3451
=== modified file 'src/gtk-dialog/gtk-logout-helper.c'
--- src/gtk-dialog/gtk-logout-helper.c 2009-09-02 14:17:44 +0000
+++ src/gtk-dialog/gtk-logout-helper.c 2009-09-10 20:59:38 +0000
@@ -133,6 +133,10 @@
133 return 1;133 return 1;
134 }134 }
135135
136 /* Init some theme/icon stuff */
137 gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(),
138 INDICATOR_ICONS_DIR);
139
136 GtkWidget * dialog = NULL;140 GtkWidget * dialog = NULL;
137 if (!pk_require_auth(type) && !supress_confirmations()) {141 if (!pk_require_auth(type) && !supress_confirmations()) {
138 dialog = logout_dialog_new(type);142 dialog = logout_dialog_new(type);
139143
=== modified file 'src/gtk-dialog/logout-dialog.c'
--- src/gtk-dialog/logout-dialog.c 2009-08-24 15:40:20 +0000
+++ src/gtk-dialog/logout-dialog.c 2009-09-11 01:36:16 +0000
@@ -298,8 +298,9 @@
298 GTK_RESPONSE_OK);298 GTK_RESPONSE_OK);
299 gtk_widget_grab_default (logout_dialog->ok_button);299 gtk_widget_grab_default (logout_dialog->ok_button);
300300
301 /* Title */301 /* Window Title and Icon */
302 gtk_window_set_title (GTK_WINDOW(logout_dialog), _(title_strings[logout_dialog->action]));302 gtk_window_set_title (GTK_WINDOW(logout_dialog), _(title_strings[logout_dialog->action]));
303 gtk_window_set_icon_name (GTK_WINDOW(logout_dialog), icon_strings[logout_dialog->action]);
303304
304 /* hbox */305 /* hbox */
305 logout_dialog->hbox = gtk_hbox_new (FALSE, 12);306 logout_dialog->hbox = gtk_hbox_new (FALSE, 12);
306307
=== modified file 'src/session-service.c'
--- src/session-service.c 2009-09-08 15:09:45 +0000
+++ src/session-service.c 2009-09-10 22:05:42 +0000
@@ -6,6 +6,7 @@
66
7Authors:7Authors:
8 Ted Gould <ted@canonical.com>8 Ted Gould <ted@canonical.com>
9 Christoph Korn <c_korn@gmx.de>
910
10This program is free software: you can redistribute it and/or modify it 11This program is free software: you can redistribute it and/or modify it
11under the terms of the GNU General Public License version 3, as published 12under the terms of the GNU General Public License version 3, as published
@@ -47,6 +48,9 @@
4748
48static DbusmenuMenuitem * hibernate_mi = NULL;49static DbusmenuMenuitem * hibernate_mi = NULL;
49static DbusmenuMenuitem * suspend_mi = NULL;50static DbusmenuMenuitem * suspend_mi = NULL;
51static DbusmenuMenuitem * logout_mi = NULL;
52static DbusmenuMenuitem * restart_mi = NULL;
53static DbusmenuMenuitem * shutdown_mi = NULL;
5054
51/* Let's put this machine to sleep, with some info on how55/* Let's put this machine to sleep, with some info on how
52 it should sleep. */56 it should sleep. */
@@ -222,16 +226,14 @@
222 provides in the UI. It also connects them to the callbacks. */226 provides in the UI. It also connects them to the callbacks. */
223static void227static void
224create_items (DbusmenuMenuitem * root) {228create_items (DbusmenuMenuitem * root) {
225 DbusmenuMenuitem * mi = NULL;229 logout_mi = dbusmenu_menuitem_new();
226
227 mi = dbusmenu_menuitem_new();
228 if (supress_confirmations()) {230 if (supress_confirmations()) {
229 dbusmenu_menuitem_property_set(mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out"));231 dbusmenu_menuitem_property_set(logout_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out"));
230 } else {232 } else {
231 dbusmenu_menuitem_property_set(mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out ..."));233 dbusmenu_menuitem_property_set(logout_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Log Out..."));
232 }234 }
233 dbusmenu_menuitem_child_append(root, mi);235 dbusmenu_menuitem_child_append(root, logout_mi);
234 g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "logout");236 g_signal_connect(G_OBJECT(logout_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "logout");
235237
236 suspend_mi = dbusmenu_menuitem_new();238 suspend_mi = dbusmenu_menuitem_new();
237 dbusmenu_menuitem_property_set(suspend_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, "false");239 dbusmenu_menuitem_property_set(suspend_mi, DBUSMENU_MENUITEM_PROP_VISIBLE, "false");
@@ -245,23 +247,30 @@
245 dbusmenu_menuitem_child_append(root, hibernate_mi);247 dbusmenu_menuitem_child_append(root, hibernate_mi);
246 g_signal_connect(G_OBJECT(hibernate_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(sleep), "Hibernate");248 g_signal_connect(G_OBJECT(hibernate_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(sleep), "Hibernate");
247249
248 mi = dbusmenu_menuitem_new();250 restart_mi = dbusmenu_menuitem_new();
249 if (supress_confirmations()) {251 if (supress_confirmations()) {
250 dbusmenu_menuitem_property_set(mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart"));252 dbusmenu_menuitem_property_set(restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart"));
251 } else {253 } else {
252 dbusmenu_menuitem_property_set(mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart ..."));254 dbusmenu_menuitem_property_set(restart_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Restart..."));
253 }255 }
254 dbusmenu_menuitem_child_append(root, mi);256 dbusmenu_menuitem_child_append(root, restart_mi);
255 g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "restart");257 g_signal_connect(G_OBJECT(restart_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "restart");
256258
257 mi = dbusmenu_menuitem_new();259 shutdown_mi = dbusmenu_menuitem_new();
258 if (supress_confirmations()) {260 if (supress_confirmations()) {
259 dbusmenu_menuitem_property_set(mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shutdown"));261 dbusmenu_menuitem_property_set(shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shutdown"));
260 } else {262 } else {
261 dbusmenu_menuitem_property_set(mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shutdown ..."));263 dbusmenu_menuitem_property_set(shutdown_mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Shutdown..."));
262 }264 }
263 dbusmenu_menuitem_child_append(root, mi);265 dbusmenu_menuitem_child_append(root, shutdown_mi);
264 g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "shutdown");266 g_signal_connect(G_OBJECT(shutdown_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(show_dialog), "shutdown");
267
268 RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi = g_new0 (RestartShutdownLogoutMenuItems, 1);
269 restart_shutdown_logout_mi->logout_mi = logout_mi;
270 restart_shutdown_logout_mi->restart_mi = restart_mi;
271 restart_shutdown_logout_mi->shutdown_mi = shutdown_mi;
272
273 update_menu_entries(restart_shutdown_logout_mi);
265274
266 return;275 return;
267}276}
268277
=== modified file 'src/status-provider-pidgin.c'
--- src/status-provider-pidgin.c 2009-08-17 21:52:43 +0000
+++ src/status-provider-pidgin.c 2009-09-10 18:28:43 +0000
@@ -59,12 +59,14 @@
59 /* STATUS_PROVIDER_STATUS_AWAY, */ PG_STATUS_AWAY,59 /* STATUS_PROVIDER_STATUS_AWAY, */ PG_STATUS_AWAY,
60 /* STATUS_PROVIDER_STATUS_DND */ PG_STATUS_UNAVAILABLE,60 /* STATUS_PROVIDER_STATUS_DND */ PG_STATUS_UNAVAILABLE,
61 /* STATUS_PROVIDER_STATUS_INVISIBLE*/ PG_STATUS_INVISIBLE,61 /* STATUS_PROVIDER_STATUS_INVISIBLE*/ PG_STATUS_INVISIBLE,
62 /* STATUS_PROVIDER_STATUS_OFFLINE */ PG_STATUS_OFFLINE62 /* STATUS_PROVIDER_STATUS_OFFLINE */ PG_STATUS_OFFLINE,
63 /* STATUS_PROVIDER_STATUS_DISCONNECTED*/ PG_STATUS_OFFLINE
63};64};
6465
65typedef struct _StatusProviderPidginPrivate StatusProviderPidginPrivate;66typedef struct _StatusProviderPidginPrivate StatusProviderPidginPrivate;
66struct _StatusProviderPidginPrivate {67struct _StatusProviderPidginPrivate {
67 DBusGProxy * proxy;68 DBusGProxy * proxy;
69 DBusGProxy * dbus_proxy;
68 pg_status_t pg_status;70 pg_status_t pg_status;
69};71};
7072
@@ -80,6 +82,8 @@
80/* Internal Funcs */82/* Internal Funcs */
81static void set_status (StatusProvider * sp, StatusProviderStatus status);83static void set_status (StatusProvider * sp, StatusProviderStatus status);
82static StatusProviderStatus get_status (StatusProvider * sp);84static StatusProviderStatus get_status (StatusProvider * sp);
85static void setup_pidgin_proxy (StatusProviderPidgin * self);
86static void dbus_namechange (DBusGProxy * proxy, const gchar * name, const gchar * prev, const gchar * new, StatusProviderPidgin * self);
8387
84G_DEFINE_TYPE (StatusProviderPidgin, status_provider_pidgin, STATUS_PROVIDER_TYPE);88G_DEFINE_TYPE (StatusProviderPidgin, status_provider_pidgin, STATUS_PROVIDER_TYPE);
8589
@@ -183,22 +187,85 @@
183 all non-DBus stuff should be done */187 all non-DBus stuff should be done */
184188
185 GError * error = NULL;189 GError * error = NULL;
190
191 /* Set up the dbus Proxy */
192 priv->dbus_proxy = dbus_g_proxy_new_for_name_owner (bus,
193 DBUS_SERVICE_DBUS,
194 DBUS_PATH_DBUS,
195 DBUS_INTERFACE_DBUS,
196 &error);
197 if (error != NULL) {
198 g_warning("Unable to connect to DBus events: %s", error->message);
199 g_error_free(error);
200 return;
201 }
202
203 /* Configure the name owner changing */
204 dbus_g_proxy_add_signal(priv->dbus_proxy, "NameOwnerChanged",
205 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
206 G_TYPE_INVALID);
207 dbus_g_proxy_connect_signal(priv->dbus_proxy, "NameOwnerChanged",
208 G_CALLBACK(dbus_namechange),
209 self, NULL);
210
211 setup_pidgin_proxy(self);
212
213 return;
214}
215
216/* Watch to see if the Pidgin comes up on Dbus */
217static void
218dbus_namechange (DBusGProxy * proxy, const gchar * name, const gchar * prev, const gchar * new, StatusProviderPidgin * self)
219{
220 g_return_if_fail(name != NULL);
221 g_return_if_fail(new != NULL);
222
223 if (g_strcmp0(name, "im.pidgin.purple.PurpleService") == 0) {
224 setup_pidgin_proxy(self);
225 }
226 return;
227}
228
229/* Setup the Pidgin proxy so that we can talk to it
230 and get signals from it. */
231static void
232setup_pidgin_proxy (StatusProviderPidgin * self)
233{
234 StatusProviderPidginPrivate * priv = STATUS_PROVIDER_PIDGIN_GET_PRIVATE(self);
235
236 if (priv->proxy != NULL) {
237 g_debug("Odd, we were asked to set up a Pidgin proxy when we already had one.");
238 return;
239 }
240
241 DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SESSION, NULL);
242 g_return_if_fail(bus != NULL); /* Can't do anymore DBus stuff without this,
243 all non-DBus stuff should be done */
244
245 GError * error = NULL;
246
247 /* Set up the Pidgin Proxy */
186 priv->proxy = dbus_g_proxy_new_for_name_owner (bus,248 priv->proxy = dbus_g_proxy_new_for_name_owner (bus,
187 "im.pidgin.purple.PurpleService",249 "im.pidgin.purple.PurpleService",
188 "/im/pidgin/purple/PurpleObject",250 "/im/pidgin/purple/PurpleObject",
189 "im.pidgin.purple.PurpleInterface",251 "im.pidgin.purple.PurpleInterface",
190 &error);252 &error);
253 /* Report any errors */
191 if (error != NULL) {254 if (error != NULL) {
192 g_debug("Unable to get Pidgin proxy: %s", error->message);255 g_debug("Unable to get Pidgin proxy: %s", error->message);
193 g_error_free(error);256 g_error_free(error);
194 return;
195 }257 }
196258
259 /* If we have a proxy, let's start using it */
197 if (priv->proxy != NULL) {260 if (priv->proxy != NULL) {
261 /* Set the proxy to NULL if it's destroyed */
198 g_object_add_weak_pointer (G_OBJECT(priv->proxy), (gpointer *)&priv->proxy);262 g_object_add_weak_pointer (G_OBJECT(priv->proxy), (gpointer *)&priv->proxy);
263 /* If it's destroyed, let's clean up as well */
199 g_signal_connect(G_OBJECT(priv->proxy), "destroy",264 g_signal_connect(G_OBJECT(priv->proxy), "destroy",
200 G_CALLBACK(proxy_destroy), self);265 G_CALLBACK(proxy_destroy), self);
201266
267 /* Watching for the status change coming from the
268 Pidgin side of things. */
202 g_debug("Adding Pidgin Signals");269 g_debug("Adding Pidgin Signals");
203 dbus_g_object_register_marshaller(_status_provider_pidgin_marshal_VOID__INT_INT,270 dbus_g_object_register_marshaller(_status_provider_pidgin_marshal_VOID__INT_INT,
204 G_TYPE_NONE,271 G_TYPE_NONE,
@@ -216,6 +283,8 @@
216 (void *)self,283 (void *)self,
217 NULL);284 NULL);
218285
286 /* Get the current status to update our cached
287 value of the status. */
219 dbus_g_proxy_begin_call(priv->proxy,288 dbus_g_proxy_begin_call(priv->proxy,
220 "PurpleSavedstatusGetCurrent",289 "PurpleSavedstatusGetCurrent",
221 savedstatus_cb,290 savedstatus_cb,
@@ -346,11 +415,17 @@
346}415}
347416
348/* Takes the cached Pidgin status and makes it into the generic417/* Takes the cached Pidgin status and makes it into the generic
349 Status provider status */418 Status provider status. If there is no Pidgin proxy then it
419 returns the disconnected state. */
350static StatusProviderStatus420static StatusProviderStatus
351get_status (StatusProvider * sp)421get_status (StatusProvider * sp)
352{422{
353 g_return_val_if_fail(IS_STATUS_PROVIDER_PIDGIN(sp), STATUS_PROVIDER_STATUS_OFFLINE);423 g_return_val_if_fail(IS_STATUS_PROVIDER_PIDGIN(sp), STATUS_PROVIDER_STATUS_DISCONNECTED);
354 StatusProviderPidginPrivate * priv = STATUS_PROVIDER_PIDGIN_GET_PRIVATE(sp);424 StatusProviderPidginPrivate * priv = STATUS_PROVIDER_PIDGIN_GET_PRIVATE(sp);
425
426 if (priv->proxy == NULL) {
427 return STATUS_PROVIDER_STATUS_DISCONNECTED;
428 }
429
355 return pg_to_sp_map[priv->pg_status];430 return pg_to_sp_map[priv->pg_status];
356}431}
357432
=== modified file 'src/status-provider-telepathy.c'
--- src/status-provider-telepathy.c 2009-08-25 20:59:07 +0000
+++ src/status-provider-telepathy.c 2009-09-10 19:09:43 +0000
@@ -55,12 +55,14 @@
55 /* STATUS_PROVIDER_STATUS_AWAY, */ MC_STATUS_AWAY,55 /* STATUS_PROVIDER_STATUS_AWAY, */ MC_STATUS_AWAY,
56 /* STATUS_PROVIDER_STATUS_DND */ MC_STATUS_DND,56 /* STATUS_PROVIDER_STATUS_DND */ MC_STATUS_DND,
57 /* STATUS_PROVIDER_STATUS_INVISIBLE*/ MC_STATUS_HIDDEN,57 /* STATUS_PROVIDER_STATUS_INVISIBLE*/ MC_STATUS_HIDDEN,
58 /* STATUS_PROVIDER_STATUS_OFFLINE */ MC_STATUS_OFFLINE58 /* STATUS_PROVIDER_STATUS_OFFLINE */ MC_STATUS_OFFLINE,
59 /* STATUS_PROVIDER_STATUS_DISCONNECTED*/MC_STATUS_OFFLINE
59};60};
6061
61typedef struct _StatusProviderTelepathyPrivate StatusProviderTelepathyPrivate;62typedef struct _StatusProviderTelepathyPrivate StatusProviderTelepathyPrivate;
62struct _StatusProviderTelepathyPrivate {63struct _StatusProviderTelepathyPrivate {
63 DBusGProxy * proxy;64 DBusGProxy * proxy;
65 DBusGProxy * dbus_proxy;
64 mc_status_t mc_status;66 mc_status_t mc_status;
65};67};
6668
@@ -74,6 +76,8 @@
74static void status_provider_telepathy_dispose (GObject *object);76static void status_provider_telepathy_dispose (GObject *object);
75static void status_provider_telepathy_finalize (GObject *object);77static void status_provider_telepathy_finalize (GObject *object);
76/* Internal Funcs */78/* Internal Funcs */
79static void build_telepathy_proxy (StatusProviderTelepathy * self);
80static void dbus_namechange (DBusGProxy * proxy, const gchar * name, const gchar * prev, const gchar * new, StatusProviderTelepathy * self);
77static void set_status (StatusProvider * sp, StatusProviderStatus status);81static void set_status (StatusProvider * sp, StatusProviderStatus status);
78static StatusProviderStatus get_status (StatusProvider * sp);82static StatusProviderStatus get_status (StatusProvider * sp);
79static void changed_status (DBusGProxy * proxy, guint status, gchar * message, StatusProvider * sp);83static void changed_status (DBusGProxy * proxy, guint status, gchar * message, StatusProvider * sp);
@@ -107,10 +111,61 @@
107 StatusProviderTelepathyPrivate * priv = STATUS_PROVIDER_TELEPATHY_GET_PRIVATE(self);111 StatusProviderTelepathyPrivate * priv = STATUS_PROVIDER_TELEPATHY_GET_PRIVATE(self);
108112
109 priv->proxy = NULL;113 priv->proxy = NULL;
114 priv->dbus_proxy = NULL;
110 priv->mc_status = MC_STATUS_OFFLINE;115 priv->mc_status = MC_STATUS_OFFLINE;
111116
112 GError * error = NULL;117 GError * error = NULL;
113118
119 /* Grabbing the session bus */
120 DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
121 if (bus == NULL) {
122 g_warning("Unable to connect to Session Bus: %s", error == NULL ? "No message" : error->message);
123 g_error_free(error);
124 return;
125 }
126
127 /* Set up the dbus Proxy */
128 priv->dbus_proxy = dbus_g_proxy_new_for_name_owner (bus,
129 DBUS_SERVICE_DBUS,
130 DBUS_PATH_DBUS,
131 DBUS_INTERFACE_DBUS,
132 &error);
133 if (error != NULL) {
134 g_warning("Unable to connect to DBus events: %s", error->message);
135 g_error_free(error);
136 return;
137 }
138
139 /* Configure the name owner changing */
140 dbus_g_proxy_add_signal(priv->dbus_proxy, "NameOwnerChanged",
141 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
142 G_TYPE_INVALID);
143 dbus_g_proxy_connect_signal(priv->dbus_proxy, "NameOwnerChanged",
144 G_CALLBACK(dbus_namechange),
145 self, NULL);
146
147 build_telepathy_proxy(self);
148
149 return;
150}
151
152/* Builds up the proxy to Mission Control and configures all of the
153 signals for getting info from the proxy. Also does a call to get
154 the inital value of the status. */
155static void
156build_telepathy_proxy (StatusProviderTelepathy * self)
157{
158 g_debug("Building Telepathy Proxy");
159 StatusProviderTelepathyPrivate * priv = STATUS_PROVIDER_TELEPATHY_GET_PRIVATE(self);
160
161 if (priv->proxy != NULL) {
162 g_debug("Hmm, being asked to build a proxy we alredy have.");
163 return;
164 }
165
166 GError * error = NULL;
167
168 /* Grabbing the session bus */
114 DBusGConnection * session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);169 DBusGConnection * session_bus = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
115 if (session_bus == NULL) {170 if (session_bus == NULL) {
116 g_warning("Unable to connect to Session Bus: %s", error == NULL ? "No message" : error->message);171 g_warning("Unable to connect to Session Bus: %s", error == NULL ? "No message" : error->message);
@@ -118,7 +173,7 @@
118 return;173 return;
119 }174 }
120175
121 priv->proxy = NULL;176 /* Get the proxy to Mission Control */
122 priv->proxy = dbus_g_proxy_new_for_name_owner(session_bus,177 priv->proxy = dbus_g_proxy_new_for_name_owner(session_bus,
123 "org.freedesktop.Telepathy.MissionControl",178 "org.freedesktop.Telepathy.MissionControl",
124 "/org/freedesktop/Telepathy/MissionControl",179 "/org/freedesktop/Telepathy/MissionControl",
@@ -126,10 +181,13 @@
126 &error);181 &error);
127182
128 if (priv->proxy != NULL) {183 if (priv->proxy != NULL) {
184 /* If it goes, we set the proxy to NULL */
129 g_object_add_weak_pointer (G_OBJECT(priv->proxy), (gpointer *)&priv->proxy);185 g_object_add_weak_pointer (G_OBJECT(priv->proxy), (gpointer *)&priv->proxy);
186 /* And we clean up other variables associated */
130 g_signal_connect(G_OBJECT(priv->proxy), "destroy",187 g_signal_connect(G_OBJECT(priv->proxy), "destroy",
131 G_CALLBACK(proxy_destroy), self);188 G_CALLBACK(proxy_destroy), self);
132189
190 /* Set up the signal handler for watching when status changes. */
133 dbus_g_object_register_marshaller(_status_provider_telepathy_marshal_VOID__UINT_STRING,191 dbus_g_object_register_marshaller(_status_provider_telepathy_marshal_VOID__UINT_STRING,
134 G_TYPE_NONE,192 G_TYPE_NONE,
135 G_TYPE_UINT,193 G_TYPE_UINT,
@@ -163,6 +221,19 @@
163 return;221 return;
164}222}
165223
224/* Watch to see if the Mission Control comes up on Dbus */
225static void
226dbus_namechange (DBusGProxy * proxy, const gchar * name, const gchar * prev, const gchar * new, StatusProviderTelepathy * self)
227{
228 g_return_if_fail(name != NULL);
229 g_return_if_fail(new != NULL);
230
231 if (g_strcmp0(name, "org.freedesktop.Telepathy.MissionControl") == 0) {
232 build_telepathy_proxy(self);
233 }
234 return;
235}
236
166static void237static void
167status_provider_telepathy_dispose (GObject *object)238status_provider_telepathy_dispose (GObject *object)
168{239{
@@ -258,10 +329,11 @@
258static StatusProviderStatus329static StatusProviderStatus
259get_status (StatusProvider * sp)330get_status (StatusProvider * sp)
260{331{
332 g_return_val_if_fail(IS_STATUS_PROVIDER_TELEPATHY(sp), STATUS_PROVIDER_STATUS_DISCONNECTED);
261 StatusProviderTelepathyPrivate * priv = STATUS_PROVIDER_TELEPATHY_GET_PRIVATE(sp);333 StatusProviderTelepathyPrivate * priv = STATUS_PROVIDER_TELEPATHY_GET_PRIVATE(sp);
262334
263 if (priv->proxy == NULL) {335 if (priv->proxy == NULL) {
264 return mc_to_sp_map[MC_STATUS_OFFLINE];336 return STATUS_PROVIDER_STATUS_DISCONNECTED;
265 }337 }
266338
267 return mc_to_sp_map[priv->mc_status];339 return mc_to_sp_map[priv->mc_status];
268340
=== modified file 'src/status-provider.h'
--- src/status-provider.h 2009-08-25 04:43:50 +0000
+++ src/status-provider.h 2009-09-10 17:10:07 +0000
@@ -42,6 +42,7 @@
42 STATUS_PROVIDER_STATUS_DND,42 STATUS_PROVIDER_STATUS_DND,
43 STATUS_PROVIDER_STATUS_INVISIBLE,43 STATUS_PROVIDER_STATUS_INVISIBLE,
44 STATUS_PROVIDER_STATUS_OFFLINE,44 STATUS_PROVIDER_STATUS_OFFLINE,
45 STATUS_PROVIDER_STATUS_DISCONNECTED,
45 /* Leave as last */46 /* Leave as last */
46 STATUS_PROVIDER_STATUS_LAST47 STATUS_PROVIDER_STATUS_LAST
47}48}
4849
=== modified file 'src/status-service.c'
--- src/status-service.c 2009-09-03 19:52:47 +0000
+++ src/status-service.c 2009-09-10 18:40:49 +0000
@@ -55,7 +55,8 @@
55 /* STATUS_PROVIDER_STATUS_AWAY, */ N_("Away"),55 /* STATUS_PROVIDER_STATUS_AWAY, */ N_("Away"),
56 /* STATUS_PROVIDER_STATUS_DND */ N_("Busy"),56 /* STATUS_PROVIDER_STATUS_DND */ N_("Busy"),
57 /* STATUS_PROVIDER_STATUS_INVISIBLE */ N_("Invisible"),57 /* STATUS_PROVIDER_STATUS_INVISIBLE */ N_("Invisible"),
58 /* STATUS_PROVIDER_STATUS_OFFLINE, */ N_("Offline")58 /* STATUS_PROVIDER_STATUS_OFFLINE, */ N_("Offline"),
59 /* STATUS_PROVIDER_STATUS_DISCONNECTED*/ N_("Offline")
59};60};
6061
61static const gchar * status_icons[STATUS_PROVIDER_STATUS_LAST] = {62static const gchar * status_icons[STATUS_PROVIDER_STATUS_LAST] = {
@@ -63,21 +64,25 @@
63 /* STATUS_PROVIDER_STATUS_AWAY, */ "user-away",64 /* STATUS_PROVIDER_STATUS_AWAY, */ "user-away",
64 /* STATUS_PROVIDER_STATUS_DND, */ "user-busy",65 /* STATUS_PROVIDER_STATUS_DND, */ "user-busy",
65 /* STATUS_PROVIDER_STATUS_INVISIBLE, */ "user-invisible",66 /* STATUS_PROVIDER_STATUS_INVISIBLE, */ "user-invisible",
66 /* STATUS_PROVIDER_STATUS_OFFLINE */ "user-offline"67 /* STATUS_PROVIDER_STATUS_OFFLINE */ "user-offline",
68 /* STATUS_PROVIDER_STATUS_DISCONNECTED */"user-offline"
67};69};
6870
6971
70static DbusmenuMenuitem * root_menuitem = NULL;72static DbusmenuMenuitem * root_menuitem = NULL;
71static DbusmenuMenuitem * status_menuitem = NULL;73static DbusmenuMenuitem * status_menuitem = NULL;
74static DbusmenuMenuitem * status_menuitems[STATUS_PROVIDER_STATUS_LAST] = {0};
72static GMainLoop * mainloop = NULL;75static GMainLoop * mainloop = NULL;
73static StatusServiceDbus * dbus_interface = NULL;76static StatusServiceDbus * dbus_interface = NULL;
74static StatusProviderStatus global_status = STATUS_PROVIDER_STATUS_OFFLINE;77static StatusProviderStatus global_status = STATUS_PROVIDER_STATUS_DISCONNECTED;
7578
76static void79static void
77status_update (void) {80status_update (void) {
78 StatusProviderStatus oldglobal = global_status;81 StatusProviderStatus oldglobal = global_status;
79 global_status = STATUS_PROVIDER_STATUS_OFFLINE;82 global_status = STATUS_PROVIDER_STATUS_DISCONNECTED;
8083
84 /* Ask everyone what they think the status should be, if
85 they're more connected, up the global level */
81 int i;86 int i;
82 for (i = 0; i < STATUS_PROVIDER_CNT; i++) {87 for (i = 0; i < STATUS_PROVIDER_CNT; i++) {
83 StatusProviderStatus localstatus = status_provider_get_status(status_providers[i]);88 StatusProviderStatus localstatus = status_provider_get_status(status_providers[i]);
@@ -86,11 +91,34 @@
86 }91 }
87 }92 }
8893
94 /* If changed */
89 if (global_status != oldglobal) {95 if (global_status != oldglobal) {
90 g_debug("Global status changed to: %s", _(status_strings[global_status]));96 g_debug("Global status changed to: %s", _(status_strings[global_status]));
9197
98 /* Set the status name on the menu item */
92 dbusmenu_menuitem_property_set(status_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, _(status_strings[global_status]));99 dbusmenu_menuitem_property_set(status_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, _(status_strings[global_status]));
100 /* Configure the icon on the panel */
93 status_service_dbus_set_status(dbus_interface, status_icons[global_status]);101 status_service_dbus_set_status(dbus_interface, status_icons[global_status]);
102
103 /* If we're now disconnected, make setting the statuses
104 insensitive. */
105 if (global_status == STATUS_PROVIDER_STATUS_DISCONNECTED) {
106 StatusProviderStatus i;
107 for (i = STATUS_PROVIDER_STATUS_ONLINE; i < STATUS_PROVIDER_STATUS_LAST; i++) {
108 if (status_menuitems[i] == NULL) continue;
109 dbusmenu_menuitem_property_set(status_menuitems[i], DBUSMENU_MENUITEM_PROP_SENSITIVE, "false");
110 }
111 }
112
113 /* If we're now back to a state where we have an IM client
114 connected then we need to resensitize the items. */
115 if (oldglobal == STATUS_PROVIDER_STATUS_DISCONNECTED) {
116 StatusProviderStatus i;
117 for (i = STATUS_PROVIDER_STATUS_ONLINE; i < STATUS_PROVIDER_STATUS_LAST; i++) {
118 if (status_menuitems[i] == NULL) continue;
119 dbusmenu_menuitem_property_set(status_menuitems[i], DBUSMENU_MENUITEM_PROP_SENSITIVE, "true");
120 }
121 }
94 }122 }
95123
96 return;124 return;
@@ -195,14 +223,23 @@
195223
196 StatusProviderStatus i;224 StatusProviderStatus i;
197 for (i = STATUS_PROVIDER_STATUS_ONLINE; i < STATUS_PROVIDER_STATUS_LAST; i++) {225 for (i = STATUS_PROVIDER_STATUS_ONLINE; i < STATUS_PROVIDER_STATUS_LAST; i++) {
198 DbusmenuMenuitem * mi = dbusmenu_menuitem_new();226 if (i == STATUS_PROVIDER_STATUS_DISCONNECTED) {
199227 /* We don't want an item for the disconnected status. Users
200 dbusmenu_menuitem_property_set(mi, "type", DBUSMENU_CLIENT_TYPES_IMAGE);228 can't set that value through the menu :) */
201 dbusmenu_menuitem_property_set(mi, DBUSMENU_MENUITEM_PROP_LABEL, _(status_strings[i]));229 continue;
202 dbusmenu_menuitem_property_set(mi, DBUSMENU_MENUITEM_PROP_ICON, status_icons[i]);230 }
203 g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(status_menu_click), GINT_TO_POINTER(i));231
204232 status_menuitems[i] = dbusmenu_menuitem_new();
205 dbusmenu_menuitem_child_append(status_menuitem, mi);233
234 dbusmenu_menuitem_property_set(status_menuitems[i], "type", DBUSMENU_CLIENT_TYPES_IMAGE);
235 dbusmenu_menuitem_property_set(status_menuitems[i], DBUSMENU_MENUITEM_PROP_LABEL, _(status_strings[i]));
236 dbusmenu_menuitem_property_set(status_menuitems[i], DBUSMENU_MENUITEM_PROP_ICON, status_icons[i]);
237 if (global_status == STATUS_PROVIDER_STATUS_DISCONNECTED) {
238 dbusmenu_menuitem_property_set(status_menuitems[i], DBUSMENU_MENUITEM_PROP_SENSITIVE, "false");
239 }
240 g_signal_connect(G_OBJECT(status_menuitems[i]), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(status_menu_click), GINT_TO_POINTER(i));
241
242 dbusmenu_menuitem_child_append(status_menuitem, status_menuitems[i]);
206243
207 g_debug("Built %s", status_strings[i]);244 g_debug("Built %s", status_strings[i]);
208 }245 }

Subscribers

People subscribed via source and target branches

to all changes: