From 501c8a7e9add926f34b6dbbcce9d9e6f81706445 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 12 Mar 2010 21:54:12 -0600 Subject: Looking for a desktop file, and if it exists, putting it as a final menu item. --- src/session-service.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/session-service.c') diff --git a/src/session-service.c b/src/session-service.c index 51a930a..c98ecff 100644 --- a/src/session-service.c +++ b/src/session-service.c @@ -28,6 +28,7 @@ with this program. If not, see . #include #include +#include #include #include @@ -50,6 +51,8 @@ with this program. If not, see . #define UP_OBJECT "/org/freedesktop/UPower" #define UP_INTERFACE "org.freedesktop.UPower" +#define DESKTOP_FILE "/usr/share/applications/indicator-session-extra.desktop" + #define GUEST_SESSION_LAUNCHER "/usr/share/gdm/guest-session/guest-session-launch" #define LOCKDOWN_DIR "/desktop/gnome/lockdown" @@ -415,6 +418,16 @@ compare_users_by_username (const gchar *a, return retval; } +/* Take a desktop file and execute it */ +static void +desktop_activate_cb (DbusmenuMenuitem * mi, guint timestamp, gpointer data) +{ + GAppInfo * appinfo = G_APP_INFO(data); + g_return_if_fail(appinfo != NULL); + g_app_info_launch(appinfo, NULL, NULL, NULL); + return; +} + /* Builds up the menu for us */ static void rebuild_items (DbusmenuMenuitem *root, @@ -580,6 +593,21 @@ rebuild_items (DbusmenuMenuitem *root, update_menu_entries(restart_shutdown_logout_mi); + if (g_file_test(DESKTOP_FILE, G_FILE_TEST_EXISTS)) { + GAppInfo * appinfo = G_APP_INFO(g_desktop_app_info_new_from_filename(DESKTOP_FILE)); + + if (appinfo != NULL) { + DbusmenuMenuitem * separator = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); + dbusmenu_menuitem_child_append(root, separator); + + DbusmenuMenuitem * desktop_mi = dbusmenu_menuitem_new(); + dbusmenu_menuitem_property_set(desktop_mi, DBUSMENU_MENUITEM_PROP_LABEL, g_app_info_get_name(appinfo)); + g_signal_connect(G_OBJECT(desktop_mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(desktop_activate_cb), appinfo); + dbusmenu_menuitem_child_append(root, desktop_mi); + } + } + return; } -- cgit v1.2.3