gnome-screensaver r1586 - in trunk: . data src



Author: mccann
Date: Tue Jan 20 05:58:20 2009
New Revision: 1586
URL: http://svn.gnome.org/viewvc/gnome-screensaver?rev=1586&view=rev

Log:
2009-01-20  William Jon McCann  <jmccann redhat com>

	* data/gnome-screensaver.schemas.in:
	* data/lock-dialog-default.glade:
	* src/gnome-screensaver-dialog.c (popup_dialog_idle):
	* src/gs-listener-dbus.h:
	* src/gs-lock-plug.c (gs_lock_plug_set_status_message),
	(gs_lock_plug_get_property), (gs_lock_plug_set_property),
	(gs_lock_plug_class_init), (load_theme), (gs_lock_plug_init):
	* src/gs-manager.c (gs_manager_set_status_message),
	(gs_manager_set_property), (gs_manager_get_property),
	(gs_manager_create_window_for_monitor), (gs_manager_finalize):
	* src/gs-manager.h:
	* src/gs-monitor.c (_gs_monitor_update_from_prefs),
	(on_watcher_status_message_changed), (disconnect_watcher_signals),
	(connect_watcher_signals):
	* src/gs-prefs.c (_gs_prefs_set_status_message_enabled),
	(gs_prefs_load_from_gconf), (key_changed_cb), (gs_prefs_finalize):
	* src/gs-prefs.h:
	* src/gs-watcher-x11.c (gs_watcher_get_property),
	(set_status_text), (gs_watcher_set_property),
	(gs_watcher_class_init), (set_status),
	(on_presence_status_changed), (on_presence_status_text_changed),
	(connect_presence_watcher), (gs_watcher_finalize):
	* src/gs-window-x11.c (popup_dialog_idle),
	(gs_window_set_status_message), (gs_window_set_property),
	(gs_window_get_property), (gs_window_class_init):
	* src/gs-window.h:
	Read status message from session.



Modified:
   trunk/ChangeLog
   trunk/data/gnome-screensaver.schemas.in
   trunk/data/lock-dialog-default.glade
   trunk/src/gnome-screensaver-dialog.c
   trunk/src/gs-listener-dbus.h
   trunk/src/gs-lock-plug.c
   trunk/src/gs-manager.c
   trunk/src/gs-manager.h
   trunk/src/gs-monitor.c
   trunk/src/gs-prefs.c
   trunk/src/gs-prefs.h
   trunk/src/gs-watcher-x11.c
   trunk/src/gs-window-x11.c
   trunk/src/gs-window.h

Modified: trunk/data/gnome-screensaver.schemas.in
==============================================================================
--- trunk/data/gnome-screensaver.schemas.in	(original)
+++ trunk/data/gnome-screensaver.schemas.in	Tue Jan 20 05:58:20 2009
@@ -240,15 +240,15 @@
     </schema>
 
     <schema>
-      <key>/schemas/apps/gnome-screensaver/away_message</key>
-      <applyto>/apps/gnome-screensaver/away_message</applyto>
+      <key>/schemas/apps/gnome-screensaver/status_message_enabled</key>
+      <applyto>/apps/gnome-screensaver/status_message_enabled</applyto>
       <owner>gnome-screensaver</owner>
-      <type>string</type>
-      <default></default>
+      <type>bool</type>
+      <default>TRUE</default>
       <locale name="C">
-        <short>Reason for being away</short>
+        <short>Allow the session status message to be displayed</short>
         <long>
-          The reason for being away from the computer.
+        Allow the session status message to be displayed when the screen is locked.
         </long>
       </locale>
     </schema>

Modified: trunk/data/lock-dialog-default.glade
==============================================================================
--- trunk/data/lock-dialog-default.glade	(original)
+++ trunk/data/lock-dialog-default.glade	Tue Jan 20 05:58:20 2009
@@ -152,6 +152,31 @@
 			  </child>
 
 			  <child>
+			    <widget class="GtkLabel" id="status-message-label">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes"></property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">True</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">True</property>
+			      <property name="fill">True</property>
+			    </packing>
+			  </child>
+
+			  <child>
 			    <widget class="GtkVBox" id="auth-prompt-box">
 			      <property name="visible">True</property>
 			      <property name="homogeneous">False</property>
@@ -286,31 +311,6 @@
 			  </child>
 
 			  <child>
-			    <widget class="GtkLabel" id="away-message-label">
-			      <property name="visible">True</property>
-			      <property name="label" translatable="yes"></property>
-			      <property name="use_underline">False</property>
-			      <property name="use_markup">False</property>
-			      <property name="justify">GTK_JUSTIFY_LEFT</property>
-			      <property name="wrap">True</property>
-			      <property name="selectable">False</property>
-			      <property name="xalign">0.5</property>
-			      <property name="yalign">0.5</property>
-			      <property name="xpad">0</property>
-			      <property name="ypad">0</property>
-			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-			      <property name="width_chars">-1</property>
-			      <property name="single_line_mode">False</property>
-			      <property name="angle">0</property>
-			    </widget>
-			    <packing>
-			      <property name="padding">0</property>
-			      <property name="expand">True</property>
-			      <property name="fill">True</property>
-			    </packing>
-			  </child>
-
-			  <child>
 			    <widget class="GtkHButtonBox" id="auth-action-area">
 			      <property name="visible">True</property>
 			      <property name="layout_style">GTK_BUTTONBOX_END</property>

Modified: trunk/src/gnome-screensaver-dialog.c
==============================================================================
--- trunk/src/gnome-screensaver-dialog.c	(original)
+++ trunk/src/gnome-screensaver-dialog.c	Tue Jan 20 05:58:20 2009
@@ -48,7 +48,7 @@
 static gboolean enable_logout  = FALSE;
 static gboolean enable_switch  = FALSE;
 static char    *logout_command = NULL;
-static char    *away_message   = NULL;
+static char    *status_message   = NULL;
 
 static GOptionEntry entries [] = {
         { "verbose", 0, 0, G_OPTION_ARG_NONE, &verbose,
@@ -61,7 +61,7 @@
           N_("Command to invoke from the logout button"), NULL },
         { "enable-switch", 0, 0, G_OPTION_ARG_NONE, &enable_switch,
           N_("Show the switch user button"), NULL },
-        { "away-message", 0, 0, G_OPTION_ARG_STRING, &away_message,
+        { "status-message", 0, 0, G_OPTION_ARG_STRING, &status_message,
           N_("Message to show in the dialog"), N_("MESSAGE") },
         { NULL }
 };
@@ -379,8 +379,8 @@
                 g_object_set (widget, "switch-enabled", TRUE, NULL);
         }
 
-        if (away_message) {
-                g_object_set (widget, "away-message", away_message, NULL);
+        if (status_message) {
+                g_object_set (widget, "status-message", status_message, NULL);
         }
 
         g_signal_connect (GS_LOCK_PLUG (widget), "response", G_CALLBACK (response_cb), NULL);

Modified: trunk/src/gs-listener-dbus.h
==============================================================================
--- trunk/src/gs-listener-dbus.h	(original)
+++ trunk/src/gs-listener-dbus.h	Tue Jan 20 05:58:20 2009
@@ -79,8 +79,6 @@
                                                  gboolean    enabled);
 gboolean    gs_listener_get_activation_enabled  (GSListener *listener);
 gboolean    gs_listener_is_inhibited            (GSListener *listener);
-void        gs_listener_emit_auth_request_begin (GSListener *listener);
-void        gs_listener_emit_auth_request_end   (GSListener *listener);
 
 G_END_DECLS
 

Modified: trunk/src/gs-lock-plug.c
==============================================================================
--- trunk/src/gs-lock-plug.c	(original)
+++ trunk/src/gs-lock-plug.c	Tue Jan 20 05:58:20 2009
@@ -84,7 +84,7 @@
         GtkWidget   *auth_prompt_box;
         GtkWidget   *auth_capslock_label;
         GtkWidget   *auth_message_label;
-        GtkWidget   *away_message_label;
+        GtkWidget   *status_message_label;
 
         GtkWidget   *auth_unlock_button;
         GtkWidget   *auth_switch_button;
@@ -104,7 +104,7 @@
         gboolean     leave_note_enabled;
         gboolean     logout_enabled;
         char        *logout_command;
-        char        *away_message;
+        char        *status_message;
 
         guint        timeout;
 
@@ -134,7 +134,7 @@
         PROP_LOGOUT_ENABLED,
         PROP_LOGOUT_COMMAND,
         PROP_SWITCH_ENABLED,
-        PROP_AWAY_MESSAGE
+        PROP_STATUS_MESSAGE
 };
 
 static guint lock_plug_signals [LAST_SIGNAL];
@@ -311,7 +311,7 @@
 
         dsp = GDK_DISPLAY ();
         if (XkbGetState (dsp, XkbUseCoreKbd, &states) != Success) {
-              return FALSE;
+                return FALSE;
         }
 
         return (states.locked_mods & LockMask) != 0;
@@ -854,22 +854,22 @@
 }
 
 static void
-gs_lock_plug_set_away_message (GSLockPlug *plug,
-                               const char *away_message)
+gs_lock_plug_set_status_message (GSLockPlug *plug,
+                                 const char *status_message)
 {
         g_return_if_fail (GS_LOCK_PLUG (plug));
 
-        g_free (plug->priv->away_message);
-        plug->priv->away_message = g_strdup (away_message);
+        g_free (plug->priv->status_message);
+        plug->priv->status_message = g_strdup (status_message);
 
-        if (plug->priv->away_message_label) {
-                if (plug->priv->away_message) {
-                        gtk_label_set_text (GTK_LABEL (plug->priv->away_message_label),
-                                            plug->priv->away_message);
-                        gtk_widget_show (plug->priv->away_message_label);
+        if (plug->priv->status_message_label) {
+                if (plug->priv->status_message) {
+                        gtk_label_set_text (GTK_LABEL (plug->priv->status_message_label),
+                                            plug->priv->status_message);
+                        gtk_widget_show (plug->priv->status_message_label);
                 }
                 else {
-                        gtk_widget_hide (plug->priv->away_message_label);
+                        gtk_widget_hide (plug->priv->status_message_label);
                 }
         }
 }
@@ -894,8 +894,8 @@
         case PROP_SWITCH_ENABLED:
                 g_value_set_boolean (value, self->priv->switch_enabled);
                 break;
-        case PROP_AWAY_MESSAGE:
-                g_value_set_string (value, self->priv->away_message);
+        case PROP_STATUS_MESSAGE:
+                g_value_set_string (value, self->priv->status_message);
                 break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -951,8 +951,8 @@
         case PROP_LOGOUT_COMMAND:
                 gs_lock_plug_set_logout_command (self, g_value_get_string (value));
                 break;
-        case PROP_AWAY_MESSAGE:
-                gs_lock_plug_set_away_message (self, g_value_get_string (value));
+        case PROP_STATUS_MESSAGE:
+                gs_lock_plug_set_status_message (self, g_value_get_string (value));
                 break;
         case PROP_SWITCH_ENABLED:
                 gs_lock_plug_set_switch_enabled (self, g_value_get_boolean (value));
@@ -1025,17 +1025,17 @@
         g_object_class_install_property (object_class,
                                          PROP_LOGOUT_COMMAND,
                                          g_param_spec_string ("logout-command",
-                                                               NULL,
-                                                               NULL,
-                                                               NULL,
-                                                               G_PARAM_READWRITE));
+                                                              NULL,
+                                                              NULL,
+                                                              NULL,
+                                                              G_PARAM_READWRITE));
         g_object_class_install_property (object_class,
-                                         PROP_AWAY_MESSAGE,
-                                         g_param_spec_string ("away-message",
-                                                               NULL,
-                                                               NULL,
-                                                               NULL,
-                                                               G_PARAM_READWRITE));
+                                         PROP_STATUS_MESSAGE,
+                                         g_param_spec_string ("status-message",
+                                                              NULL,
+                                                              NULL,
+                                                              NULL,
+                                                              G_PARAM_READWRITE));
         g_object_class_install_property (object_class,
                                          PROP_SWITCH_ENABLED,
                                          g_param_spec_boolean ("switch-enabled",
@@ -1703,7 +1703,7 @@
 
         gtk_widget_show_all (lock_dialog);
 
-        plug->priv->away_message_label = glade_xml_get_widget (xml, "away-message-label");
+        plug->priv->status_message_label = glade_xml_get_widget (xml, "status-message-label");
 
         return TRUE;
 }
@@ -1743,12 +1743,6 @@
         }
 }
 
-#define INVISIBLE_CHAR_DEFAULT       '*'
-#define INVISIBLE_CHAR_BLACK_CIRCLE  0x25cf
-#define INVISIBLE_CHAR_WHITE_BULLET  0x25e6
-#define INVISIBLE_CHAR_BULLET        0x2022
-#define INVISIBLE_CHAR_NONE          0
-
 static void
 gs_lock_plug_init (GSLockPlug *plug)
 {
@@ -1866,14 +1860,14 @@
         g_signal_connect (plug->priv->auth_cancel_button, "clicked",
                           G_CALLBACK (cancel_button_clicked), plug);
 
-        if (plug->priv->away_message_label) {
-              if (plug->priv->away_message) {
-                      gtk_label_set_text (GTK_LABEL (plug->priv->away_message_label),
-                                          plug->priv->away_message);
-              }
-              else {
-                      gtk_widget_hide (plug->priv->away_message_label);
-              }
+        if (plug->priv->status_message_label) {
+                if (plug->priv->status_message) {
+                        gtk_label_set_text (GTK_LABEL (plug->priv->status_message_label),
+                                            plug->priv->status_message);
+                }
+                else {
+                        gtk_widget_hide (plug->priv->status_message_label);
+                }
         }
 
         if (plug->priv->auth_switch_button != NULL) {

Modified: trunk/src/gs-manager.c
==============================================================================
--- trunk/src/gs-manager.c	(original)
+++ trunk/src/gs-manager.c	Tue Jan 20 05:58:20 2009
@@ -71,7 +71,7 @@
         char        *logout_command;
         char        *keyboard_command;
 
-        char        *away_message;
+        char        *status_message;
 
         /* State */
         guint        active : 1;
@@ -111,7 +111,7 @@
         PROP_LOGOUT_TIMEOUT,
         PROP_LOGOUT_COMMAND,
         PROP_KEYBOARD_COMMAND,
-        PROP_AWAY_MESSAGE,
+        PROP_STATUS_MESSAGE,
         PROP_ACTIVE,
         PROP_THROTTLED,
 };
@@ -615,19 +615,19 @@
 }
 
 void
-gs_manager_set_away_message (GSManager  *manager,
-                             const char *away_message)
+gs_manager_set_status_message (GSManager  *manager,
+                               const char *status_message)
 {
         GSList *l;
 
         g_return_if_fail (GS_IS_MANAGER (manager));
 
-        g_free (manager->priv->away_message);
+        g_free (manager->priv->status_message);
 
-        manager->priv->away_message = g_strdup (away_message);
+        manager->priv->status_message = g_strdup (status_message);
 
         for (l = manager->priv->windows; l; l = l->next) {
-                gs_window_set_away_message (l->data, manager->priv->away_message);
+                gs_window_set_status_message (l->data, manager->priv->status_message);
         }
 }
 
@@ -753,8 +753,8 @@
         case PROP_KEYBOARD_COMMAND:
                 gs_manager_set_keyboard_command (self, g_value_get_string (value));
                 break;
-        case PROP_AWAY_MESSAGE:
-                gs_manager_set_away_message (self, g_value_get_string (value));
+        case PROP_STATUS_MESSAGE:
+                gs_manager_set_status_message (self, g_value_get_string (value));
                 break;
         case PROP_CYCLE_TIMEOUT:
                 gs_manager_set_cycle_timeout (self, g_value_get_long (value));
@@ -803,8 +803,8 @@
         case PROP_KEYBOARD_COMMAND:
                 g_value_set_string (value, self->priv->keyboard_command);
                 break;
-        case PROP_AWAY_MESSAGE:
-                g_value_set_string (value, self->priv->away_message);
+        case PROP_STATUS_MESSAGE:
+                g_value_set_string (value, self->priv->status_message);
                 break;
         case PROP_CYCLE_TIMEOUT:
                 g_value_set_long (value, self->priv->cycle_timeout);
@@ -1444,7 +1444,7 @@
         gs_window_set_logout_command (window, manager->priv->logout_command);
         gs_window_set_keyboard_enabled (window, manager->priv->keyboard_enabled);
         gs_window_set_keyboard_command (window, manager->priv->keyboard_command);
-        gs_window_set_away_message (window, manager->priv->away_message);
+        gs_window_set_status_message (window, manager->priv->status_message);
 
         connect_window_signals (manager, window);
 
@@ -1551,7 +1551,7 @@
         free_themes (manager);
         g_free (manager->priv->logout_command);
         g_free (manager->priv->keyboard_command);
-        g_free (manager->priv->away_message);
+        g_free (manager->priv->status_message);
 
         remove_unfade_idle (manager);
         remove_timers (manager);

Modified: trunk/src/gs-manager.h
==============================================================================
--- trunk/src/gs-manager.h	(original)
+++ trunk/src/gs-manager.h	Tue Jan 20 05:58:20 2009
@@ -71,7 +71,7 @@
                                              gboolean    enabled);
 void        gs_manager_set_keyboard_command (GSManager  *manager,
                                              const char *command);
-void        gs_manager_set_away_message     (GSManager  *manager,
+void        gs_manager_set_status_message   (GSManager  *manager,
                                              const char *message);
 void        gs_manager_get_lock_enabled     (GSManager  *manager,
                                              gboolean   *lock_enabled);

Modified: trunk/src/gs-monitor.c
==============================================================================
--- trunk/src/gs-monitor.c	(original)
+++ trunk/src/gs-monitor.c	Tue Jan 20 05:58:20 2009
@@ -55,7 +55,6 @@
         GSPrefs        *prefs;
         GSFade         *fade;
         GSGrab         *grab;
-
         guint           release_grab_id;
 };
 
@@ -289,7 +288,6 @@
         gs_manager_set_logout_timeout (monitor->priv->manager, monitor->priv->prefs->logout_timeout);
         gs_manager_set_logout_command (monitor->priv->manager, monitor->priv->prefs->logout_command);
         gs_manager_set_keyboard_command (monitor->priv->manager, monitor->priv->prefs->keyboard_command);
-        gs_manager_set_away_message (monitor->priv->manager, monitor->priv->prefs->away_message);
         gs_manager_set_cycle_timeout (monitor->priv->manager, monitor->priv->prefs->cycle);
         gs_manager_set_mode (monitor->priv->manager, monitor->priv->prefs->mode);
         gs_manager_set_themes (monitor->priv->manager, monitor->priv->prefs->themes);
@@ -314,6 +312,17 @@
         if (activate_watch) {
                 gs_watcher_set_active (monitor->priv->watcher, TRUE);
         }
+
+        if (monitor->priv->prefs->status_message_enabled) {
+                char *text;
+                g_object_get (monitor->priv->watcher,
+                              "status-message", &text,
+                              NULL);
+                gs_manager_set_status_message (monitor->priv->manager, text);
+                g_free (text);
+        } else {
+                gs_manager_set_status_message (monitor->priv->manager, NULL);
+        }
 }
 
 static void
@@ -345,10 +354,22 @@
 }
 
 static void
+on_watcher_status_message_changed (GSWatcher  *watcher,
+                                   GParamSpec *pspec,
+                                   GSMonitor  *monitor)
+{
+        char *text;
+        g_object_get (watcher, "status-message", &text, NULL);
+        gs_manager_set_status_message (monitor->priv->manager, text);
+        g_free (text);
+}
+
+static void
 disconnect_watcher_signals (GSMonitor *monitor)
 {
         g_signal_handlers_disconnect_by_func (monitor->priv->watcher, watcher_idle_cb, monitor);
         g_signal_handlers_disconnect_by_func (monitor->priv->watcher, watcher_idle_notice_cb, monitor);
+        g_signal_handlers_disconnect_by_func (monitor->priv->watcher, on_watcher_status_message_changed, monitor);
 }
 
 static void
@@ -358,6 +379,9 @@
                           G_CALLBACK (watcher_idle_cb), monitor);
         g_signal_connect (monitor->priv->watcher, "idle-notice-changed",
                           G_CALLBACK (watcher_idle_notice_cb), monitor);
+        g_signal_connect (monitor->priv->watcher, "notify::status-message",
+                          G_CALLBACK (on_watcher_status_message_changed), monitor);
+
 }
 
 static void

Modified: trunk/src/gs-prefs.c
==============================================================================
--- trunk/src/gs-prefs.c	(original)
+++ trunk/src/gs-prefs.c	Tue Jan 20 05:58:20 2009
@@ -53,7 +53,7 @@
 #define KEY_LOGOUT_COMMAND KEY_DIR "/logout_command"
 #define KEY_KEYBOARD_ENABLED KEY_DIR "/embedded_keyboard_enabled"
 #define KEY_KEYBOARD_COMMAND KEY_DIR "/embedded_keyboard_command"
-#define KEY_AWAY_MESSAGE   KEY_DIR "/away_message"
+#define KEY_STATUS_MESSAGE_ENABLED   KEY_DIR "/status_message_enabled"
 
 #define GS_PREFS_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GS_TYPE_PREFS, GSPrefsPrivate))
 
@@ -269,11 +269,10 @@
 }
 
 static void
-_gs_prefs_set_away_message (GSPrefs    *prefs,
-                            const char *value)
+_gs_prefs_set_status_message_enabled (GSPrefs  *prefs,
+                                      gboolean  enabled)
 {
-        g_free (prefs->away_message);
-        prefs->away_message = g_strdup (value);
+        prefs->status_message_enabled = enabled;
 }
 
 static void
@@ -441,13 +440,12 @@
         g_free (string);
 
         error = NULL;
-        string = gconf_client_get_string (prefs->priv->gconf_client, KEY_AWAY_MESSAGE, &error);
+        bvalue = gconf_client_get_bool (prefs->priv->gconf_client, KEY_STATUS_MESSAGE_ENABLED, &error);
         if (! error) {
-                _gs_prefs_set_away_message (prefs, string);
+                _gs_prefs_set_status_message_enabled (prefs, bvalue);
         } else {
-                key_error_and_free (KEY_AWAY_MESSAGE, error);
+                key_error_and_free (KEY_STATUS_MESSAGE_ENABLED, error);
         }
-        g_free (string);
 
         /* Logout options */
 
@@ -688,13 +686,13 @@
                         invalid_type_warning (key);
                 }
 
-        } else if (strcmp (key, KEY_AWAY_MESSAGE) == 0) {
+        } else if (strcmp (key, KEY_STATUS_MESSAGE_ENABLED) == 0) {
 
-                if (value->type == GCONF_VALUE_STRING) {
-                        const char *away_message;
+                if (value->type == GCONF_VALUE_BOOL) {
+                        gboolean enabled;
 
-                        away_message = gconf_value_get_string (value);
-                        _gs_prefs_set_away_message (prefs, away_message);
+                        enabled = gconf_value_get_bool (value);
+                        _gs_prefs_set_status_message_enabled (prefs, enabled);
 
                         changed = TRUE;
                 } else {
@@ -830,7 +828,6 @@
 
         g_free (prefs->logout_command);
         g_free (prefs->keyboard_command);
-        g_free (prefs->away_message);
 
         G_OBJECT_CLASS (gs_prefs_parent_class)->finalize (object);
 }

Modified: trunk/src/gs-prefs.h
==============================================================================
--- trunk/src/gs-prefs.h	(original)
+++ trunk/src/gs-prefs.h	Tue Jan 20 05:58:20 2009
@@ -53,6 +53,7 @@
         guint            user_switch_disabled : 1;      /* Whether user switching is disabled */
         guint            user_switch_enabled : 1;       /* Whether to offer the user switch option */
         guint            keyboard_enabled : 1;  /* Whether to try to embed a keyboard */
+        guint            status_message_enabled : 1; /* show the status message in the lock */
 
         guint            power_timeout;         /* how much idle time before power management */
         guint            timeout;               /* how much idle time before activation */
@@ -62,7 +63,6 @@
 
         char            *logout_command;        /* command to use to logout */
         char            *keyboard_command;      /* command to use to embed a keyboard */
-        char            *away_message;
 
         GSList          *themes;                /* the screensaver themes to run */
         GSSaverMode      mode;                  /* theme selection mode */

Modified: trunk/src/gs-watcher-x11.c
==============================================================================
--- trunk/src/gs-watcher-x11.c	(original)
+++ trunk/src/gs-watcher-x11.c	Tue Jan 20 05:58:20 2009
@@ -57,12 +57,18 @@
         guint           idle_notice : 1;
 
         guint           idle_id;
+        char           *status_message;
 
         DBusGProxy     *presence_proxy;
         guint           watchdog_timer_id;
 };
 
 enum {
+        PROP_0,
+        PROP_STATUS_MESSAGE
+};
+
+enum {
         IDLE_CHANGED,
         IDLE_NOTICE_CHANGED,
         LAST_SIGNAL
@@ -91,11 +97,71 @@
 }
 
 static void
+gs_watcher_get_property (GObject    *object,
+                         guint       prop_id,
+                         GValue     *value,
+                         GParamSpec *pspec)
+{
+        GSWatcher *self;
+
+        self = GS_WATCHER (object);
+
+        switch (prop_id) {
+        case PROP_STATUS_MESSAGE:
+                g_value_set_string (value, self->priv->status_message);
+                break;
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+                break;
+        }
+}
+
+static void
+set_status_text (GSWatcher  *watcher,
+                 const char *text)
+{
+        g_free (watcher->priv->status_message);
+
+        watcher->priv->status_message = g_strdup (text);
+        g_object_notify (G_OBJECT (watcher), "status-message");
+}
+
+static void
+gs_watcher_set_property (GObject          *object,
+                         guint             prop_id,
+                         const GValue     *value,
+                         GParamSpec       *pspec)
+{
+        GSWatcher *self;
+
+        self = GS_WATCHER (object);
+
+        switch (prop_id) {
+        case PROP_STATUS_MESSAGE:
+                set_status_text (self, g_value_get_string (value));
+                break;
+        default:
+                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+                break;
+        }
+}
+
+static void
 gs_watcher_class_init (GSWatcherClass *klass)
 {
         GObjectClass   *object_class = G_OBJECT_CLASS (klass);
 
         object_class->finalize = gs_watcher_finalize;
+        object_class->get_property = gs_watcher_get_property;
+        object_class->set_property = gs_watcher_set_property;
+
+        g_object_class_install_property (object_class,
+                                         PROP_STATUS_MESSAGE,
+                                         g_param_spec_string ("status-message",
+                                                              NULL,
+                                                              NULL,
+                                                              NULL,
+                                                              G_PARAM_READWRITE));
 
         signals [IDLE_CHANGED] =
                 g_signal_new ("idle-changed",
@@ -269,9 +335,8 @@
 }
 
 static void
-on_presence_status_changed (DBusGProxy    *presence_proxy,
-                            guint          status,
-                            GSWatcher     *watcher)
+set_status (GSWatcher *watcher,
+            guint      status)
 {
         gboolean res;
         gboolean is_idle;
@@ -307,6 +372,22 @@
         }
 }
 
+static void
+on_presence_status_changed (DBusGProxy    *presence_proxy,
+                            guint          status,
+                            GSWatcher     *watcher)
+{
+        set_status (watcher, status);
+}
+
+static void
+on_presence_status_text_changed (DBusGProxy    *presence_proxy,
+                                 const char    *status_text,
+                                 GSWatcher     *watcher)
+{
+        set_status_text (watcher, status_text);
+}
+
 static gboolean
 connect_presence_watcher (GSWatcher *watcher)
 {
@@ -342,15 +423,26 @@
                                              G_CALLBACK (on_presence_status_changed),
                                              watcher,
                                              NULL);
+                dbus_g_proxy_add_signal (watcher->priv->presence_proxy,
+                                         "StatusTextChanged",
+                                         G_TYPE_STRING,
+                                         G_TYPE_INVALID);
+                dbus_g_proxy_connect_signal (watcher->priv->presence_proxy,
+                                             "StatusTextChanged",
+                                             G_CALLBACK (on_presence_status_text_changed),
+                                             watcher,
+                                             NULL);
 
                 proxy = dbus_g_proxy_new_from_proxy (watcher->priv->presence_proxy,
                                                      "org.freedesktop.DBus.Properties",
                                                      "/org/gnome/SessionManager/Presence");
                 if (proxy != NULL) {
                         guint       status;
+                        const char *status_text;
                         GValue      value = { 0, };
 
                         status = 0;
+                        status_text = NULL;
 
                         error = NULL;
                         dbus_g_proxy_call (proxy,
@@ -369,6 +461,28 @@
                         } else {
                                 status = g_value_get_uint (&value);
                         }
+
+                        g_value_unset (&value);
+
+                        error = NULL;
+                        dbus_g_proxy_call (proxy,
+                                           "Get",
+                                           &error,
+                                           G_TYPE_STRING, "org.gnome.SessionManager.Presence",
+                                           G_TYPE_STRING, "status-text",
+                                           G_TYPE_INVALID,
+                                           G_TYPE_VALUE, &value,
+                                           G_TYPE_INVALID);
+
+                        if (error != NULL) {
+                                g_warning ("Couldn't get presence status text: %s", error->message);
+                                g_error_free (error);
+                        } else {
+                                status_text = g_value_get_string (&value);
+                        }
+
+                        set_status (watcher, status);
+                        set_status_text (watcher, status_text);
                 }
         } else {
                 g_warning ("Failed to get session presence proxy: %s", error->message);
@@ -422,6 +536,8 @@
                 g_object_unref (watcher->priv->presence_proxy);
         }
 
+        g_free (watcher->priv->status_message);
+
         G_OBJECT_CLASS (gs_watcher_parent_class)->finalize (object);
 }
 

Modified: trunk/src/gs-window-x11.c
==============================================================================
--- trunk/src/gs-window-x11.c	(original)
+++ trunk/src/gs-window-x11.c	Tue Jan 20 05:58:20 2009
@@ -70,7 +70,7 @@
         guint64    logout_timeout;
         char      *logout_command;
         char      *keyboard_command;
-        char      *away_message;
+        char      *status_message;
 
         GtkWidget *vbox;
         GtkWidget *drawing_area;
@@ -125,7 +125,7 @@
         PROP_LOGOUT_COMMAND,
         PROP_LOGOUT_TIMEOUT,
         PROP_MONITOR,
-        PROP_AWAY_MESSAGE
+        PROP_STATUS_MESSAGE
 };
 
 static guint           signals [LAST_SIGNAL] = { 0, };
@@ -1532,11 +1532,11 @@
                 g_string_append_printf (command, " --logout-command='%s'", window->priv->logout_command);
         }
 
-        if (window->priv->away_message) {
+        if (window->priv->status_message) {
                 char *quoted;
 
-                quoted = g_shell_quote (window->priv->away_message);
-                g_string_append_printf (command, " --away-message=%s", quoted);
+                quoted = g_shell_quote (window->priv->status_message);
+                g_string_append_printf (command, " --status-message=\"%s\"", quoted);
                 g_free (quoted);
         }
 
@@ -1722,13 +1722,13 @@
 }
 
 void
-gs_window_set_away_message (GSWindow   *window,
-                            const char *away_message)
+gs_window_set_status_message (GSWindow   *window,
+                            const char *status_message)
 {
         g_return_if_fail (GS_IS_WINDOW (window));
 
-        g_free (window->priv->away_message);
-        window->priv->away_message = g_strdup (away_message);
+        g_free (window->priv->status_message);
+        window->priv->status_message = g_strdup (status_message);
 }
 
 void
@@ -1782,8 +1782,8 @@
         case PROP_LOGOUT_COMMAND:
                 gs_window_set_logout_command (self, g_value_get_string (value));
                 break;
-        case PROP_AWAY_MESSAGE:
-                gs_window_set_away_message (self, g_value_get_string (value));
+        case PROP_STATUS_MESSAGE:
+                gs_window_set_status_message (self, g_value_get_string (value));
                 break;
         case PROP_LOGOUT_TIMEOUT:
                 gs_window_set_logout_timeout (self, g_value_get_long (value));
@@ -1823,8 +1823,8 @@
         case PROP_LOGOUT_COMMAND:
                 g_value_set_string (value, self->priv->logout_command);
                 break;
-        case PROP_AWAY_MESSAGE:
-                g_value_set_string (value, self->priv->away_message);
+        case PROP_STATUS_MESSAGE:
+                g_value_set_string (value, self->priv->status_message);
                 break;
         case PROP_LOGOUT_TIMEOUT:
                 g_value_set_long (value, self->priv->logout_timeout);
@@ -2168,8 +2168,8 @@
                                                               NULL,
                                                               G_PARAM_READWRITE));
         g_object_class_install_property (object_class,
-                                         PROP_AWAY_MESSAGE,
-                                         g_param_spec_string ("away-message",
+                                         PROP_STATUS_MESSAGE,
+                                         g_param_spec_string ("status-message",
                                                               NULL,
                                                               NULL,
                                                               NULL,

Modified: trunk/src/gs-window.h
==============================================================================
--- trunk/src/gs-window.h	(original)
+++ trunk/src/gs-window.h	Tue Jan 20 05:58:20 2009
@@ -81,8 +81,8 @@
                                           glong      timeout);
 void        gs_window_set_logout_command (GSWindow   *window,
                                           const char *command);
-void        gs_window_set_away_message   (GSWindow   *window,
-                                          const char *away_message);
+void        gs_window_set_status_message   (GSWindow   *window,
+                                            const char *status_message);
 
 void        gs_window_request_unlock     (GSWindow  *window);
 void        gs_window_cancel_unlock_request (GSWindow  *window);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]