aboutsummaryrefslogtreecommitdiff
path: root/src/status-service.c
diff options
context:
space:
mode:
authorTed Gould <ted@canonical.com>2009-08-08 09:15:30 -0600
committerTed Gould <ted@canonical.com>2009-08-08 09:15:30 -0600
commit46812f4eb145ce20d50b728944b8b4e1205bbb41 (patch)
treeee3af6f4f5180b100e6f725c5c43c2dee8aa6b59 /src/status-service.c
parent32ae53755e9d5646ca3779bd889303d6a8ef5378 (diff)
parent839f57951591a4bf9d0ce4fd32b0c5b2d06bf73e (diff)
downloadayatana-indicator-session-46812f4eb145ce20d50b728944b8b4e1205bbb41.tar.gz
ayatana-indicator-session-46812f4eb145ce20d50b728944b8b4e1205bbb41.tar.bz2
ayatana-indicator-session-46812f4eb145ce20d50b728944b8b4e1205bbb41.zip
Lots of updates from a branch to make things on the status
front all happy happy joy joy.
Diffstat (limited to 'src/status-service.c')
-rw-r--r--src/status-service.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/status-service.c b/src/status-service.c
index 4c48c72..5a9d9b5 100644
--- a/src/status-service.c
+++ b/src/status-service.c
@@ -23,6 +23,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <sys/types.h>
#include <pwd.h>
+#include <unistd.h>
#include <glib/gi18n.h>
@@ -67,6 +68,30 @@ static DbusmenuMenuitem * root_menuitem = NULL;
static DbusmenuMenuitem * status_menuitem = NULL;
static GMainLoop * mainloop = NULL;
static StatusServiceDbus * dbus_interface = NULL;
+static StatusProviderStatus global_status = STATUS_PROVIDER_STATUS_OFFLINE;
+
+static void
+status_update (void) {
+ StatusProviderStatus oldglobal = global_status;
+ global_status = STATUS_PROVIDER_STATUS_ONLINE;
+
+ int i;
+ for (i = 0; i < STATUS_PROVIDER_CNT; i++) {
+ StatusProviderStatus localstatus = status_provider_get_status(status_providers[i]);
+ if (localstatus > global_status) {
+ global_status = localstatus;
+ }
+ }
+
+ if (global_status != oldglobal) {
+ g_debug("Global status changed to: %s", _(status_strings[global_status]));
+
+ dbusmenu_menuitem_property_set(status_menuitem, "label", _(status_strings[global_status]));
+ status_service_dbus_set_status(dbus_interface, status_icons[global_status]);
+ }
+
+ return;
+}
/* A fun little function to actually lock the screen. If,
that's what you want, let's do it! */
@@ -114,8 +139,14 @@ build_providers (gpointer data)
int i;
for (i = 0; i < STATUS_PROVIDER_CNT; i++) {
status_providers[i] = status_provider_newfuncs[i]();
+
+ if (status_providers[i] != NULL) {
+ g_signal_connect(G_OBJECT(status_providers[i]), STATUS_PROVIDER_SIGNAL_STATUS_CHANGED, G_CALLBACK(status_update), NULL);
+ }
}
+ status_update();
+
return FALSE;
}
@@ -154,7 +185,7 @@ build_menu (gpointer data)
build_user_item(root);
status_menuitem = dbusmenu_menuitem_new();
- dbusmenu_menuitem_property_set(status_menuitem, "label", "Status");
+ dbusmenu_menuitem_property_set(status_menuitem, "label", _(status_strings[global_status]));
dbusmenu_menuitem_child_append(root, status_menuitem);
StatusProviderStatus i;