10139N/Adiff -urN gnome-session-2.27.4/capplet/gsm-properties-dialog.c ../SUNWgnome-session-2.26.1.p12.hacked/gnome-session-2.27.4/capplet/gsm-properties-dialog.c
10139N/A--- gnome-session-2.27.4/capplet/gsm-properties-dialog.c 2009-07-01 13:45:30.000000000 +0100
10139N/A+++ ../SUNWgnome-session-2.26.1.p12.hacked/gnome-session-2.27.4/capplet/gsm-properties-dialog.c 2009-07-21 14:49:15.145840020 +0100
10430N/A@@ -35,6 +35,8 @@
10139N/A #include "gsm-util.h"
10139N/A #include "gsp-app.h"
10139N/A #include "gsp-app-manager.h"
15354N/A+#include <dbus/dbus-glib.h>
10139N/A+#include <dbus/dbus-glib-lowlevel.h>
10139N/A
10139N/A #define GSM_PROPERTIES_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_PROPERTIES_DIALOG, GsmPropertiesDialogPrivate))
10139N/A
10139N/A@@ -45,6 +47,10 @@
15386N/A
10139N/A #define GTKBUILDER_FILE "session-properties.ui"
10139N/A
10139N/A+#define GSM_SERVICE_DBUS "org.gnome.SessionManager"
10139N/A+#define GSM_PATH_DBUS "/org/gnome/SessionManager"
15354N/A+#define GSM_INTERFACE_DBUS "org.gnome.SessionManager"
10430N/A+
10139N/A #define CAPPLET_TREEVIEW_WIDGET_NAME "session_properties_treeview"
10139N/A #define CAPPLET_ADD_WIDGET_NAME "session_properties_add_button"
10139N/A #define CAPPLET_DELETE_WIDGET_NAME "session_properties_delete_button"
10430N/A@@ -1246,10 +1253,113 @@
10139N/A }
15354N/A
15354N/A static void
15354N/A+display_error (const char *message)
10139N/A+{
15354N/A+ GtkWidget *dialog;
15354N/A+
15354N/A+ dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR,
10353N/A+ GTK_BUTTONS_CLOSE, "%s", message);
15354N/A+
15354N/A+ gtk_dialog_run (GTK_DIALOG (dialog));
12536N/A+ gtk_widget_destroy (dialog);
16385N/A+}
16385N/A+
16385N/A+static DBusGConnection *
10139N/A+get_session_bus (void)
10139N/A+{
10139N/A+ DBusGConnection *bus;
10139N/A+ GError *error = NULL;
10139N/A+
10139N/A+ bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
10139N/A+
10139N/A+ if (bus == NULL) {
10139N/A+ g_warning ("Couldn't connect to session bus: %s", error->message);
10139N/A+ g_error_free (error);
10139N/A+ }
10139N/A+
10139N/A+ return bus;
10139N/A+}
10139N/A+
10139N/A+static DBusGProxy *
10139N/A+get_sm_proxy (void)
10139N/A+{
10139N/A+ DBusGConnection *connection;
10139N/A+ DBusGProxy *sm_proxy;
10139N/A+
10139N/A+ connection = get_session_bus ();
15354N/A+ if (connection == NULL) {
10139N/A+ display_error (_("Could not connect to the session manager"));
10139N/A+ return NULL;
10139N/A+ }
10139N/A+
10139N/A+ sm_proxy = dbus_g_proxy_new_for_name (connection,
10139N/A+ GSM_SERVICE_DBUS,
10139N/A+ GSM_PATH_DBUS,
10139N/A+ GSM_INTERFACE_DBUS);
15354N/A+
10139N/A+ if (sm_proxy == NULL) {
10139N/A+ display_error (_("Could not connect to the session manager"));
10139N/A+ return NULL;
10139N/A+ }
10139N/A+
10139N/A+ return sm_proxy;
10139N/A+}
10139N/A+
10139N/A+static char*
10139N/A+save_session (void)
10139N/A+{
10139N/A+ DBusGProxy *sm_proxy;
10139N/A+ GError *error;
10139N/A+ gboolean res = FALSE;
10139N/A+
10139N/A+ sm_proxy = get_sm_proxy ();
10139N/A+ if (sm_proxy == NULL) {
10139N/A+ return NULL;
10139N/A+ }
10139N/A+
10139N/A+ error = NULL;
10139N/A+ res = dbus_g_proxy_call (sm_proxy,
10139N/A+ "SaveSession",
10430N/A+ &error,
10139N/A+ G_TYPE_INVALID,
10430N/A+ G_TYPE_INVALID);
10139N/A+
10139N/A+ if (!res) {
10139N/A+ if (error != NULL) {
10139N/A+ g_warning ("Failed to call save session: %s",
10139N/A+ error->message);
10139N/A+ g_error_free (error);
16385N/A+ } else {
10139N/A+ g_warning ("Failed to call save session");
10139N/A+ }
10139N/A+ }
10139N/A+
10139N/A+ if (sm_proxy != NULL) {
10139N/A+ g_object_unref (sm_proxy);
10139N/A+ }
10139N/A+
10139N/A+ if (res)
10139N/A+ return "Session saved successfully!";
10139N/A+}
10139N/A+
10139N/A+static void
15354N/A on_save_session_clicked (GtkWidget *widget,
15354N/A GsmPropertiesDialog *dialog)
10430N/A {
15354N/A- g_debug ("Session saving is not implemented yet!");
12090N/A+ GtkWidget *message;
10495N/A+ char *status=NULL;
15354N/A+
15354N/A+ status = save_session ();
15354N/A+
10430N/A+ if (status) {
10139N/A+ message = gtk_message_dialog_new (GTK_WINDOW (dialog),
10139N/A+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
10139N/A+ GTK_MESSAGE_INFO,
10139N/A+ GTK_BUTTONS_OK,
10139N/A+ status);
15354N/A+ gtk_dialog_run (GTK_DIALOG (message));
15354N/A+ gtk_widget_destroy (message);
15354N/A+ }
10139N/A }
10139N/A
10139N/A static void
10139N/Adiff -urN -x '*.orig' gnome-session-2.26.1/gnome-session/gsm-manager.c ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/gnome-session/gsm-manager.c
15354N/A--- gnome-session-2.26.1/gnome-session/gsm-manager.c 2009-04-16 11:41:55.315470790 +0100
10139N/A+++ ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/gnome-session/gsm-manager.c 2009-04-16 11:42:51.278978139 +0100
10139N/A@@ -1913,6 +1913,18 @@
16223N/A }
10139N/A
10430N/A static void
10139N/A+on_xsmp_client_save_request (GsmXSMPClient *client,
10139N/A+ gboolean show_dialog,
10139N/A+ GsmManager *manager)
10139N/A+{
10139N/A+ GError *error;
10139N/A+
10139N/A+ g_debug ("GsmManager: save_request");
10139N/A+ error = NULL;
10139N/A+ gsm_session_save (manager->priv->clients, &error);
10139N/A+}
10139N/A+
10139N/A+static void
10139N/A on_store_client_added (GsmStore *store,
10139N/A const char *id,
10139N/A GsmManager *manager)
10139N/A@@ -1933,6 +1945,10 @@
10139N/A "logout-request",
10139N/A G_CALLBACK (on_xsmp_client_logout_request),
10139N/A manager);
10139N/A+ g_signal_connect (client,
10139N/A+ "save-request",
10139N/A+ G_CALLBACK (on_xsmp_client_save_request),
10139N/A+ manager);
10139N/A }
10139N/A
10139N/A g_signal_connect (client,
10139N/A@@ -2831,6 +2847,29 @@
10139N/A }
10139N/A
16385N/A gboolean
16385N/A+gsm_manager_save_session (GsmManager *manager,
16223N/A+ GError **error)
16223N/A+{
15386N/A+ g_debug ("GsmManager: SaveSession called");
15386N/A+
15354N/A+ g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE);
15354N/A+
15354N/A+ if (manager->priv->phase != GSM_MANAGER_PHASE_RUNNING) {
14121N/A+ g_set_error (error,
14121N/A+ GSM_MANAGER_ERROR,
14121N/A+ GSM_MANAGER_ERROR_NOT_IN_RUNNING,
13607N/A+ "SaveSession interface is only available during the Running phase");
13607N/A+ return FALSE;
12573N/A+ }
12573N/A+
12536N/A+ g_debug ("GsmManager: SaveSession, saving");
12536N/A+
12536N/A+ maybe_save_session (manager);
12090N/A+
12090N/A+ return TRUE;
12090N/A+}
12090N/A+
11853N/A+gboolean
11853N/A gsm_manager_can_shutdown (GsmManager *manager,
11246N/A gboolean *shutdown_available,
11246N/A GError **error)
11148N/Adiff -urN -x '*.orig' gnome-session-2.26.1/gnome-session/gsm-manager.h ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/gnome-session/gsm-manager.h
11148N/A--- gnome-session-2.26.1/gnome-session/gsm-manager.h 2009-04-14 16:31:45.000000000 +0100
10879N/A+++ ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/gnome-session/gsm-manager.h 2009-04-16 11:42:51.294073611 +0100
10879N/A@@ -152,6 +152,9 @@
10720N/A gboolean gsm_manager_shutdown (GsmManager *manager,
10720N/A GError **error);
10527N/A
10527N/A+gboolean gsm_manager_save_session (GsmManager *manager,
10500N/A+ GError **error);
10500N/A+
10495N/A gboolean gsm_manager_can_shutdown (GsmManager *manager,
10495N/A gboolean *shutdown_available,
10495N/A GError **error);
10430N/Adiff -urN -x '*.orig' gnome-session-2.26.1/gnome-session/gsm-xsmp-client.c ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/gnome-session/gsm-xsmp-client.c
10430N/A--- gnome-session-2.26.1/gnome-session/gsm-xsmp-client.c 2009-04-14 16:31:45.000000000 +0100
10353N/A+++ ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/gnome-session/gsm-xsmp-client.c 2009-04-16 11:42:51.311373196 +0100
10353N/A@@ -69,6 +69,7 @@
10353N/A enum {
10353N/A REGISTER_REQUEST,
10334N/A LOGOUT_REQUEST,
10334N/A+ SAVE_REQUEST,
10261N/A LAST_SIGNAL
10261N/A };
10261N/A
10257N/A@@ -1011,6 +1012,17 @@
10257N/A g_cclosure_marshal_VOID__BOOLEAN,
10257N/A G_TYPE_NONE,
10257N/A 1, G_TYPE_BOOLEAN);
10257N/A+ signals[SAVE_REQUEST] =
10139N/A+ g_signal_new ("save-request",
10139N/A+ G_OBJECT_CLASS_TYPE (object_class),
10139N/A+ G_SIGNAL_RUN_LAST,
10139N/A+ G_STRUCT_OFFSET (GsmXSMPClientClass, save_request),
10139N/A+ NULL,
10139N/A+ NULL,
10139N/A+ g_cclosure_marshal_VOID__BOOLEAN,
10139N/A+ G_TYPE_NONE,
10139N/A+ 1, G_TYPE_BOOLEAN);
10139N/A+
10139N/A
10139N/A g_object_class_install_property (object_class,
10139N/A PROP_ICE_CONNECTION,
10139N/Adiff -urN -x '*.orig' gnome-session-2.26.1/gnome-session/gsm-xsmp-client.h ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/gnome-session/gsm-xsmp-client.h
10139N/A--- gnome-session-2.26.1/gnome-session/gsm-xsmp-client.h 2009-04-14 16:31:45.000000000 +0100
10139N/A+++ ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/gnome-session/gsm-xsmp-client.h 2009-04-16 11:42:51.323164917 +0100
10139N/A@@ -54,7 +54,8 @@
10139N/A char **client_id);
10139N/A gboolean (*logout_request) (GsmXSMPClient *client,
10139N/A gboolean prompt);
10139N/A-
10139N/A+ gboolean (*save_request) (GsmXSMPClient *client,
10139N/A+ gboolean prompt);
10139N/A
10139N/A void (*saved_state) (GsmXSMPClient *client);
10139N/A
10139N/Adiff -urN -x '*.orig' gnome-session-2.26.1/gnome-session/org.gnome.SessionManager.xml ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/gnome-session/org.gnome.SessionManager.xml
10139N/A--- gnome-session-2.26.1/gnome-session/org.gnome.SessionManager.xml 2009-04-14 16:31:45.000000000 +0100
10139N/A+++ ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/gnome-session/org.gnome.SessionManager.xml 2009-04-16 11:42:51.333867423 +0100
10139N/A@@ -256,6 +256,14 @@
10139N/A </doc:doc>
10139N/A </method>
10139N/A
10139N/A+ <method name="SaveSession">
10139N/A+ <doc:doc>
10139N/A+ <doc:description>
10139N/A+ <doc:para>Request to save session</doc:para>
10139N/A+ </doc:description>
10139N/A+ </doc:doc>
10139N/A+ </method>
10139N/A+
10139N/A <method name="CanShutdown">
10139N/A <arg name="is_available" direction="out" type="b">
10139N/A <doc:doc>
10139N/Adiff -urN -x '*.orig' gnome-session-2.26.1/tools/gnome-session-save.c ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/tools/gnome-session-save.c
10139N/A--- gnome-session-2.26.1/tools/gnome-session-save.c 2009-04-14 16:31:45.000000000 +0100
10139N/A+++ ../SUNWgnome-session-2.26.1.p13/gnome-session-2.26.1/tools/gnome-session-save.c 2009-04-16 11:44:36.581278915 +0100
10139N/A@@ -240,11 +240,48 @@
10139N/A }
10139N/A }
10139N/A
10139N/A+static gboolean
10139N/A+save_session (void)
10139N/A+{
10139N/A+ DBusGProxy *sm_proxy;
10139N/A+ GError *error;
10139N/A+ gboolean res = FALSE;
10139N/A+
10139N/A+ sm_proxy = get_sm_proxy ();
10139N/A+ if (sm_proxy == NULL) {
10139N/A+ return TRUE;
10139N/A+ }
10139N/A+
10139N/A+ error = NULL;
10139N/A+ res = dbus_g_proxy_call (sm_proxy,
10139N/A+ "SaveSession",
10139N/A+ &error,
10139N/A+ G_TYPE_INVALID,
10139N/A+ G_TYPE_INVALID);
10139N/A+
10139N/A+ if (!res) {
10139N/A+ if (error != NULL) {
10139N/A+ g_warning ("Failed to call save session: %s",
+ error->message);
+ g_error_free (error);
+ } else {
+ g_warning ("Failed to call save session");
+ }
+ }
+
+ if (sm_proxy != NULL) {
+ g_object_unref (sm_proxy);
+ }
+
+ return (!res);
+}
+
int
main (int argc, char *argv[])
{
GError *error;
int conflicting_options;
+ int exit_status = 0;
/* Initialize the i18n stuff */
bindtextdomain (GETTEXT_PACKAGE, LOCALE_DIR);
@@ -279,6 +316,9 @@
logout_dialog = TRUE;
}
+ if (argc == 1)
+ exit_status = save_session ();
+
if (logout) {
do_logout (GSM_LOGOUT_MODE_NO_CONFIRMATION);
} else if (force_logout) {
@@ -289,5 +329,5 @@
do_shutdown_dialog ();
}
- return 0;
+ return exit_status;
}