Author: olivier
Date: 2008-10-17 12:53:05 +0000 (Fri, 17 Oct 2008)
New Revision: 28281
Modified:
libxfcegui4/trunk/configure.in.in
libxfcegui4/trunk/libxfcegui4/session-client.c
Log:
Add support for setting session properties after the connection was established
with the session manager (required to be able to change restart style)
Modified: libxfcegui4/trunk/configure.in.in
===================================================================
--- libxfcegui4/trunk/configure.in.in 2008-10-17 09:30:43 UTC (rev 28280)
+++ libxfcegui4/trunk/configure.in.in 2008-10-17 12:53:05 UTC (rev 28281)
@@ -7,7 +7,7 @@
dnl ***************************
dnl *** Version information ***
dnl ***************************
-m4_define([libxfcegui4_verinfo], [6:4:2])
+m4_define([libxfcegui4_verinfo], [6:5:2])
m4_define([libxfcegui4_version_major], [4])
m4_define([libxfcegui4_version_minor], [5])
m4_define([libxfcegui4_version_micro], [91])
Modified: libxfcegui4/trunk/libxfcegui4/session-client.c
===================================================================
--- libxfcegui4/trunk/libxfcegui4/session-client.c 2008-10-17 09:30:43 UTC
(rev 28280)
+++ libxfcegui4/trunk/libxfcegui4/session-client.c 2008-10-17 12:53:05 UTC
(rev 28281)
@@ -916,24 +916,67 @@
void client_session_set_restart_style(SessionClient * session_client,
SessionRestartStyle value)
{
+#ifdef HAVE_LIBSM
+ SmProp prop, *props[1];
+ SmPropValue propval;
+ char hint = SmRestartIfRunning;
+#endif /* HAVE_LIBSM */
+ session_client->restart_style = value;
+
+#ifdef HAVE_LIBSM
if (session_client->session_connection != NULL) {
- g_error("SessionClient: changing \"restart_style\" while connected to
session manager is not implemented.");
- return;
+ switch (session_client->restart_style) {
+ case SESSION_RESTART_IF_RUNNING:
+ hint = SmRestartIfRunning;
+ break;
+ case SESSION_RESTART_ANYWAY:
+ hint = SmRestartAnyway;
+ break;
+ case SESSION_RESTART_IMMEDIATELY:
+ hint = SmRestartImmediately;
+ break;
+ case SESSION_RESTART_NEVER:
+ default:
+ hint = SmRestartNever;
+ break;
+ }
+
+ prop.name = SmRestartStyleHint;
+ prop.type = SmCARD8;
+ prop.num_vals = 1;
+ prop.vals = &propval;
+ propval.value = &hint;
+ propval.length = 1;
+ props[0] = ∝
+
+ SmcSetProperties ((SmcConn) session_client->session_connection, 1,
props);
}
-
- session_client->restart_style = value;
+#endif /* HAVE_LIBSM */
}
/* void client_session_set_interact_style(SessionClient * session_client,
SessionInteractStyle value) */
void client_session_set_priority(SessionClient * session_client, gchar value)
{
+#ifdef HAVE_LIBSM
+ SmProp prop, *props[1];
+ SmPropValue propval;
+#endif /* HAVE_LIBSM */
+
+ session_client->priority = value;
+#ifdef HAVE_LIBSM
if (session_client->session_connection != NULL) {
- g_error("SessionClient: changing \"priority\" while connected to
session manager is not implemented.");
- return;
+ prop.name = "_GSM_Priority";
+ prop.type = SmCARD8;
+ prop.num_vals = 1;
+ prop.vals = &propval;
+ propval.value = &session_client->priority;
+ propval.length = 1;
+ props[0] = ∝
+
+ SmcSetProperties ((SmcConn) session_client->session_connection, 1,
props);
}
-
- session_client->priority = value;
+#endif /* HAVE_LIBSM */
}
void client_session_set_client_id(SessionClient * session_client, gchar const*
value)
@@ -953,28 +996,61 @@
void client_session_set_current_directory(SessionClient * session_client,
gchar const* value)
{
- if (session_client->session_connection != NULL) {
- g_error("SessionClient: changing \"current_directory\" while connected
to session manager is not implemented.");
- return;
- }
-
+#ifdef HAVE_LIBSM
+ SmProp prop, *props[1];
+ SmPropValue propval;
+#endif /* HAVE_LIBSM */
+
if (session_client->current_directory != value) {
g_free(session_client->current_directory);
- session_client->current_directory = g_strdup(value);
+ session_client->current_directory = NULL;
+ if (value) {
+ session_client->current_directory = g_strdup(value);
+ }
}
+#ifdef HAVE_LIBSM
+ if (session_client->session_connection != NULL) {
+ prop.name = SmCurrentDirectory;
+ prop.type = SmARRAY8;
+ prop.num_vals = 1;
+ prop.vals = &propval;
+ if (session_client->current_directory) {
+ propval.value = (char *) session_client->current_directory;
+ }
+ else {
+ propval.value = (char *) g_get_home_dir ();
+ }
+ propval.length = strlen (propval.value);
+ props[0] = ∝
+
+ SmcSetProperties ((SmcConn) session_client->session_connection, 1,
props);
+ }
+#endif /* HAVE_LIBSM */
}
void client_session_set_program(SessionClient * session_client, gchar const*
value)
{
- if (session_client->session_connection != NULL) {
- g_error("SessionClient: changing \"program\" while connected to
session manager is not implemented.");
- return;
- }
+#ifdef HAVE_LIBSM
+ SmProp prop, *props[1];
+ SmPropValue propval;
+#endif /* HAVE_LIBSM */
if (session_client->program != value) {
g_free(session_client->program);
session_client->program = g_strdup(value);
}
+#ifdef HAVE_LIBSM
+ if (session_client->session_connection != NULL) {
+ prop.name = SmProgram;
+ prop.type = SmARRAY8;
+ prop.num_vals = 1;
+ prop.vals = &propval;
+ propval.value = session_client->program;
+ propval.length = strlen (session_client->program);
+
+ SmcSetProperties ((SmcConn) session_client->session_connection, 1,
props);
+ }
+#endif /* HAVE_LIBSM */
}
void client_session_set_clone_command(SessionClient * session_client, gchar**
const value)
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits