summaryrefslogtreecommitdiff
path: root/mate-session/gsm-xsmp-client.c
diff options
context:
space:
mode:
authorinfirit <[email protected]>2014-11-07 12:59:59 +0100
committerinfirit <[email protected]>2014-11-07 14:31:51 +0100
commitacbe76ca6d576c397112c08b86bb9c301102f4ab (patch)
treec1b9e91e637363304f5d61d83289bd3b92f3efa3 /mate-session/gsm-xsmp-client.c
parent50b6f0d9f4b8a47bb2886756cc337cd5ffe66338 (diff)
downloadmate-session-manager-acbe76ca6d576c397112c08b86bb9c301102f4ab.tar.bz2
mate-session-manager-acbe76ca6d576c397112c08b86bb9c301102f4ab.tar.xz
gsm: Do not assume XSMP clients set the SmProgram property
Since setting some properties can be skipped, there is no guarantee that SmProgram is set. Based on gnome-session commit: 35a9945ae1339297de2e0eeff543e876186dea6e From: Vincent Untz <[email protected]> Gnome bug: https://bugzilla.gnome.org/show_bug.cgi?id=590828
Diffstat (limited to 'mate-session/gsm-xsmp-client.c')
-rw-r--r--mate-session/gsm-xsmp-client.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/mate-session/gsm-xsmp-client.c b/mate-session/gsm-xsmp-client.c
index f8b78c2..759e2ab 100644
--- a/mate-session/gsm-xsmp-client.c
+++ b/mate-session/gsm-xsmp-client.c
@@ -524,6 +524,11 @@ get_desktop_file_path (GsmXSMPClient *client)
/* If we can't get desktop file from GsmDesktopFile then we
* try to find the desktop file from its program name */
prop = find_property (client, SmProgram, NULL);
+
+ if (!prop) {
+ goto out;
+ }
+
program_name = prop->vals[0].value;
dirs = gsm_util_get_autostart_dirs ();
@@ -551,7 +556,16 @@ set_desktop_file_keys_from_client (GsmClient *client,
char *comment;
prop = find_property (GSM_XSMP_CLIENT (client), SmProgram, NULL);
- name = g_strdup (prop->vals[0].value);
+
+ if (prop) {
+ name = g_strdup (prop->vals[0].value);
+ } else {
+ /* It'd be really surprising to reach this code: if we're here,
+ * then the XSMP client already has set several XSMP
+ * properties. But it could still be that SmProgram is not set.
+ */
+ name = g_strdup (_("Remembered Application"));
+ }
comment = g_strdup_printf ("Client %s which was automatically saved",
gsm_client_peek_startup_id (client));
@@ -639,6 +653,7 @@ xsmp_save (GsmClient *client,
desktop_file_path = get_desktop_file_path (GSM_XSMP_CLIENT (client));
+ /* this can accept desktop_file_path == NULL */
keyfile = create_client_key_file (client,
desktop_file_path,
&local_error);
@@ -778,10 +793,12 @@ static char *
xsmp_get_app_name (GsmClient *client)
{
SmProp *prop;
- char *name;
+ char *name = NULL;
prop = find_property (GSM_XSMP_CLIENT (client), SmProgram, NULL);
- name = prop_to_command (prop);
+ if (prop) {
+ name = prop_to_command (prop);
+ }
return name;
}