gnome-screensaver r1586 - in trunk: . data src
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-screensaver r1586 - in trunk: . data src
- Date: Tue, 20 Jan 2009 05:58:20 +0000 (UTC)
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]