aboutsummaryrefslogtreecommitdiff
path: root/src/session-service.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/session-service.c')
-rw-r--r--src/session-service.c112
1 files changed, 61 insertions, 51 deletions
diff --git a/src/session-service.c b/src/session-service.c
index e89a9a0..9fb9ee7 100644
--- a/src/session-service.c
+++ b/src/session-service.c
@@ -38,15 +38,16 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#include <libindicator/indicator-service.h>
#include "dbus-shared-names.h"
+#include "dbusmenu-shared.h"
#include "gtk-dialog/gconf-helper.h"
#include "users-service-dbus.h"
#include "lock-helper.h"
-#define DKP_ADDRESS "org.freedesktop.DeviceKit.Power"
-#define DKP_OBJECT "/org/freedesktop/DeviceKit/Power"
-#define DKP_INTERFACE "org.freedesktop.DeviceKit.Power"
+#define UP_ADDRESS "org.freedesktop.UPower"
+#define UP_OBJECT "/org/freedesktop/UPower"
+#define UP_INTERFACE "org.freedesktop.UPower"
#define GUEST_SESSION_LAUNCHER "/usr/share/gdm/guest-session/guest-session-launch"
@@ -72,8 +73,8 @@ static GList *users;
static DbusmenuMenuitem * root_menuitem = NULL;
static GMainLoop * mainloop = NULL;
-static DBusGProxy * dkp_main_proxy = NULL;
-static DBusGProxy * dkp_prop_proxy = NULL;
+static DBusGProxy * up_main_proxy = NULL;
+static DBusGProxy * up_prop_proxy = NULL;
static DBusGProxyCall * suspend_call = NULL;
static DBusGProxyCall * hibernate_call = NULL;
@@ -147,14 +148,14 @@ machine_sleep (DbusmenuMenuitem * mi, guint timestamp, gpointer userdata)
{
gchar * type = (gchar *)userdata;
- if (dkp_main_proxy == NULL) {
- g_warning("Can not %s as no DeviceKit Power Proxy", type);
+ if (up_main_proxy == NULL) {
+ g_warning("Can not %s as no upower proxy", type);
}
screensaver_throttle(type);
lock_screen(NULL, 0, NULL);
- dbus_g_proxy_begin_call(dkp_main_proxy,
+ dbus_g_proxy_begin_call(up_main_proxy,
type,
sleep_response,
NULL,
@@ -213,17 +214,17 @@ hibernate_prop_cb (DBusGProxy * proxy, DBusGProxyCall * call, gpointer userdata)
/* A signal that we need to recheck to ensure we can still
hibernate and/or suspend */
static void
-dpk_changed_cb (DBusGProxy * proxy, gpointer user_data)
+up_changed_cb (DBusGProxy * proxy, gpointer user_data)
{
/* Start Async call to see if we can hibernate */
if (suspend_call == NULL) {
- suspend_call = dbus_g_proxy_begin_call(dkp_prop_proxy,
+ suspend_call = dbus_g_proxy_begin_call(up_prop_proxy,
"Get",
suspend_prop_cb,
NULL,
NULL,
G_TYPE_STRING,
- DKP_INTERFACE,
+ UP_INTERFACE,
G_TYPE_STRING,
"can-suspend",
G_TYPE_INVALID,
@@ -233,13 +234,13 @@ dpk_changed_cb (DBusGProxy * proxy, gpointer user_data)
/* Start Async call to see if we can suspend */
if (hibernate_call == NULL) {
- hibernate_call = dbus_g_proxy_begin_call(dkp_prop_proxy,
+ hibernate_call = dbus_g_proxy_begin_call(up_prop_proxy,
"Get",
hibernate_prop_cb,
NULL,
NULL,
G_TYPE_STRING,
- DKP_INTERFACE,
+ UP_INTERFACE,
G_TYPE_STRING,
"can-hibernate",
G_TYPE_INVALID,
@@ -254,39 +255,39 @@ dpk_changed_cb (DBusGProxy * proxy, gpointer user_data)
DKp checking. We're even setting up the calls for the props
we need */
static void
-setup_dkp (void) {
+setup_up (void) {
DBusGConnection * bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL);
g_return_if_fail(bus != NULL);
- if (dkp_main_proxy == NULL) {
- dkp_main_proxy = dbus_g_proxy_new_for_name(bus,
- DKP_ADDRESS,
- DKP_OBJECT,
- DKP_INTERFACE);
+ if (up_main_proxy == NULL) {
+ up_main_proxy = dbus_g_proxy_new_for_name(bus,
+ UP_ADDRESS,
+ UP_OBJECT,
+ UP_INTERFACE);
}
- g_return_if_fail(dkp_main_proxy != NULL);
+ g_return_if_fail(up_main_proxy != NULL);
- if (dkp_prop_proxy == NULL) {
- dkp_prop_proxy = dbus_g_proxy_new_for_name(bus,
- DKP_ADDRESS,
- DKP_OBJECT,
+ if (up_prop_proxy == NULL) {
+ up_prop_proxy = dbus_g_proxy_new_for_name(bus,
+ UP_ADDRESS,
+ UP_OBJECT,
DBUS_INTERFACE_PROPERTIES);
}
- g_return_if_fail(dkp_prop_proxy != NULL);
+ g_return_if_fail(up_prop_proxy != NULL);
/* Connect to changed signal */
- dbus_g_proxy_add_signal(dkp_main_proxy,
+ dbus_g_proxy_add_signal(up_main_proxy,
"Changed",
G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(dkp_main_proxy,
+ dbus_g_proxy_connect_signal(up_main_proxy,
"Changed",
- G_CALLBACK(dpk_changed_cb),
+ G_CALLBACK(up_changed_cb),
NULL,
NULL);
/* Force an original "changed" event */
- dpk_changed_cb(dkp_main_proxy, NULL);
+ up_changed_cb(up_main_proxy, NULL);
return;
}
@@ -437,14 +438,40 @@ rebuild_items (DbusmenuMenuitem *root,
if (can_activate == TRUE)
{
+ DbusmenuMenuitem * separator1 = dbusmenu_menuitem_new();
+ dbusmenu_menuitem_property_set(separator1, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR);
+ dbusmenu_menuitem_child_append(root, separator1);
+
if (check_guest_session ())
{
mi = dbusmenu_menuitem_new ();
- dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, _("Guest Session"));
+ dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, USER_ITEM_TYPE);
+ dbusmenu_menuitem_property_set (mi, USER_ITEM_PROP_NAME, _("Guest Session"));
+ dbusmenu_menuitem_property_set_bool (mi, USER_ITEM_PROP_LOGGED_IN, FALSE);
dbusmenu_menuitem_child_append (root, mi);
g_signal_connect (G_OBJECT (mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_guest_session), NULL);
}
+ if (check_new_session ())
+ {
+ ensure_gconf_client ();
+
+ switch_menuitem = dbusmenu_menuitem_new ();
+ dbusmenu_menuitem_property_set (switch_menuitem, DBUSMENU_MENUITEM_PROP_TYPE, MENU_SWITCH_TYPE);
+ dbusmenu_menuitem_property_set (switch_menuitem, MENU_SWITCH_USER, g_get_user_name());
+ dbusmenu_menuitem_child_append (root, switch_menuitem);
+ g_signal_connect (G_OBJECT (switch_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_new_session), NULL);
+
+ if (gconf_client_get_bool (gconf_client, LOCKDOWN_KEY, NULL))
+ {
+ dbusmenu_menuitem_property_set_bool (switch_menuitem, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE);
+ }
+ else
+ {
+ dbusmenu_menuitem_property_set_bool (switch_menuitem, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE);
+ }
+ }
+
if (count > MINIMUM_USERS && count < MAXIMUM_USERS)
{
if (users != NULL)
@@ -470,30 +497,13 @@ rebuild_items (DbusmenuMenuitem *root,
user->service = service;
mi = dbusmenu_menuitem_new ();
- dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_LABEL, user->real_name);
+ dbusmenu_menuitem_property_set (mi, DBUSMENU_MENUITEM_PROP_TYPE, USER_ITEM_TYPE);
+ dbusmenu_menuitem_property_set (mi, USER_ITEM_PROP_NAME, user->real_name);
+ dbusmenu_menuitem_property_set_bool (mi, USER_ITEM_PROP_LOGGED_IN, user->sessions != NULL);
dbusmenu_menuitem_child_append (root, mi);
g_signal_connect (G_OBJECT (mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_user_session), user);
}
}
-
- if (check_new_session ())
- {
- ensure_gconf_client ();
-
- switch_menuitem = dbusmenu_menuitem_new ();
- dbusmenu_menuitem_property_set (switch_menuitem, DBUSMENU_MENUITEM_PROP_LABEL, _("Switch User..."));
- dbusmenu_menuitem_child_append (root, switch_menuitem);
- g_signal_connect (G_OBJECT (switch_menuitem), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK (activate_new_session), NULL);
-
- if (gconf_client_get_bool (gconf_client, LOCKDOWN_KEY, NULL))
- {
- dbusmenu_menuitem_property_set_bool (switch_menuitem, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE);
- }
- else
- {
- dbusmenu_menuitem_property_set_bool (switch_menuitem, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE);
- }
- }
}
DbusmenuMenuitem * separator = dbusmenu_menuitem_new();
@@ -639,7 +649,7 @@ main (int argc, char ** argv)
G_CALLBACK (user_removed),
root_menuitem);
- setup_dkp();
+ setup_up();
DbusmenuServer * server = dbusmenu_server_new(INDICATOR_SESSION_DBUS_OBJECT);
dbusmenu_server_set_root(server, root_menuitem);