diff options
author | Ted Gould <ted@canonical.com> | 2009-06-19 07:26:04 -0500 |
---|---|---|
committer | Ted Gould <ted@canonical.com> | 2009-06-19 07:26:04 -0500 |
commit | 8300e1671bdd07d48fcfd9b35887a6a93d0b0761 (patch) | |
tree | f8cf85b3387d4dee6f60621b30093acfecb359d6 | |
parent | c886775c88dddb6195c5c4d01dbd6b6a86f2fac6 (diff) | |
parent | 377777d3cde780875ab39ffb647e4009153365bc (diff) | |
download | ayatana-indicator-session-8300e1671bdd07d48fcfd9b35887a6a93d0b0761.tar.gz ayatana-indicator-session-8300e1671bdd07d48fcfd9b35887a6a93d0b0761.tar.bz2 ayatana-indicator-session-8300e1671bdd07d48fcfd9b35887a6a93d0b0761.zip |
Updating from branch, lazy loading the services.
-rw-r--r-- | debian/changelog | 6 | ||||
-rw-r--r-- | src/indicator-sus.c | 66 |
2 files changed, 62 insertions, 10 deletions
diff --git a/debian/changelog b/debian/changelog index 68b9c88..35f4cd2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +indicator-sus (0.1~ppa2~indicator3) UNRELEASED; urgency=low + + * Updating from branch, lazy loading the services. + + -- Ted Gould <ted@ubuntu.com> Fri, 19 Jun 2009 07:25:25 -0500 + indicator-sus (0.1~ppa2~indicator2) jaunty; urgency=low * Updating the build to make proper service files diff --git a/src/indicator-sus.c b/src/indicator-sus.c index 5d6c219..15d4e5a 100644 --- a/src/indicator-sus.c +++ b/src/indicator-sus.c @@ -17,6 +17,9 @@ static GtkMenu * users_menu = NULL; static GtkMenu * session_menu = NULL; static GtkMenu * main_menu = NULL; +static DBusGConnection * connection = NULL; +static DBusGProxy * proxy = NULL; + GtkLabel * get_label (void) { @@ -30,54 +33,97 @@ get_icon (void) return NULL; } -GtkMenu * -get_menu (void) +static gboolean +build_status_menu (gpointer userdata) { guint returnval = 0; GError * error = NULL; - DBusGConnection * connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); - DBusGProxy * proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); + if (proxy == NULL) { + /* If we don't have DBus, let's stay in the idle loop */ + return TRUE; + } if (!org_freedesktop_DBus_start_service_by_name (proxy, INDICATOR_STATUS_DBUS_NAME, 0, &returnval, &error)) { g_error("Unable to send message to DBus to start service: %s", error != NULL ? error->message : "(NULL error)" ); g_error_free(error); - return NULL; + return FALSE; } if (returnval != DBUS_START_REPLY_SUCCESS && returnval != DBUS_START_REPLY_ALREADY_RUNNING) { g_error("Return value isn't indicative of success: %d", returnval); - return NULL; + return FALSE; } status_menu = GTK_MENU(dbusmenu_gtkmenu_new(INDICATOR_STATUS_DBUS_NAME, INDICATOR_STATUS_DBUS_OBJECT)); + return FALSE; +} + +static gboolean +build_users_menu (gpointer userdata) +{ + guint returnval = 0; + GError * error = NULL; + + if (proxy == NULL) { + /* If we don't have DBus, let's stay in the idle loop */ + return TRUE; + } + if (!org_freedesktop_DBus_start_service_by_name (proxy, INDICATOR_USERS_DBUS_NAME, 0, &returnval, &error)) { g_error("Unable to send message to DBus to start service: %s", error != NULL ? error->message : "(NULL error)" ); g_error_free(error); - return NULL; + return FALSE; } if (returnval != DBUS_START_REPLY_SUCCESS && returnval != DBUS_START_REPLY_ALREADY_RUNNING) { g_error("Return value isn't indicative of success: %d", returnval); - return NULL; + return FALSE; } users_menu = GTK_MENU(dbusmenu_gtkmenu_new(INDICATOR_USERS_DBUS_NAME, INDICATOR_USERS_DBUS_OBJECT)); + return FALSE; +} + +static gboolean +build_session_menu (gpointer userdata) +{ + guint returnval = 0; + GError * error = NULL; + + if (proxy == NULL) { + /* If we don't have DBus, let's stay in the idle loop */ + return TRUE; + } + if (!org_freedesktop_DBus_start_service_by_name (proxy, INDICATOR_SESSION_DBUS_NAME, 0, &returnval, &error)) { g_error("Unable to send message to DBus to start service: %s", error != NULL ? error->message : "(NULL error)" ); g_error_free(error); - return NULL; + return FALSE; } if (returnval != DBUS_START_REPLY_SUCCESS && returnval != DBUS_START_REPLY_ALREADY_RUNNING) { g_error("Return value isn't indicative of success: %d", returnval); - return NULL; + return FALSE; } session_menu = GTK_MENU(dbusmenu_gtkmenu_new(INDICATOR_SESSION_DBUS_NAME, INDICATOR_SESSION_DBUS_OBJECT)); + return FALSE; +} + +GtkMenu * +get_menu (void) +{ + connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL); + proxy = dbus_g_proxy_new_for_name(connection, DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS); + + g_idle_add(build_status_menu, NULL); + g_idle_add(build_users_menu, NULL); + g_idle_add(build_session_menu, NULL); + main_menu = GTK_MENU(gtk_menu_new()); return main_menu; |