aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy/empathy-idle.c
diff options
context:
space:
mode:
authorXavier Claessens <xclaesse@gmail.com>2007-09-20 18:46:27 +0800
committerXavier Claessens <xclaesse@src.gnome.org>2007-09-20 18:46:27 +0800
commitc51d527f11b2d253ed13788830136bc1787029b1 (patch)
tree7ef6a806bcb9614fd1949f409730e47f9c615e6b /libempathy/empathy-idle.c
parentf637a06fb631be72db06bc5f45ad2449f80e35e7 (diff)
downloadgsoc2013-empathy-c51d527f11b2d253ed13788830136bc1787029b1.tar
gsoc2013-empathy-c51d527f11b2d253ed13788830136bc1787029b1.tar.gz
gsoc2013-empathy-c51d527f11b2d253ed13788830136bc1787029b1.tar.bz2
gsoc2013-empathy-c51d527f11b2d253ed13788830136bc1787029b1.tar.lz
gsoc2013-empathy-c51d527f11b2d253ed13788830136bc1787029b1.tar.xz
gsoc2013-empathy-c51d527f11b2d253ed13788830136bc1787029b1.tar.zst
gsoc2013-empathy-c51d527f11b2d253ed13788830136bc1787029b1.zip
Add 2 properties to EmpathyIdle to activate auto-away and auto-disconnect,
2007-09-20 Xavier Claessens <xclaesse@gmail.com> * libempathy-gtk/empathy-status-icon.c: * libempathy/empathy-idle.c: * libempathy/empathy-idle.h: * doc/libempathy/tmpl/empathy-idle.sgml: Add 2 properties to EmpathyIdle to activate auto-away and auto-disconnect, default to off. Only empathy main client will turn them on, like that if other processes are running with an EmpathyIdle instance they won't change presence in the same time than Empathy client. svn path=/trunk/; revision=301
Diffstat (limited to 'libempathy/empathy-idle.c')
-rw-r--r--libempathy/empathy-idle.c81
1 files changed, 77 insertions, 4 deletions
diff --git a/libempathy/empathy-idle.c b/libempathy/empathy-idle.c
index 4c7344e9b..87389277c 100644
--- a/libempathy/empathy-idle.c
+++ b/libempathy/empathy-idle.c
@@ -54,13 +54,15 @@ struct _EmpathyIdlePriv {
MissionControl *mc;
DBusGProxy *gs_proxy;
DBusGProxy *nm_proxy;
- gboolean is_idle;
McPresence state;
McPresence flash_state;
gchar *status;
McPresence saved_state;
gchar *saved_status;
+ gboolean is_idle;
gboolean nm_connected;
+ gboolean auto_away;
+ gboolean auto_disconnect;
guint ext_away_timeout;
};
@@ -92,7 +94,9 @@ enum {
PROP_0,
PROP_STATE,
PROP_STATUS,
- PROP_FLASH_STATE
+ PROP_FLASH_STATE,
+ PROP_AUTO_AWAY,
+ PROP_AUTO_DISCONNECT
};
G_DEFINE_TYPE (EmpathyIdle, empathy_idle, G_TYPE_OBJECT)
@@ -130,6 +134,22 @@ empathy_idle_class_init (EmpathyIdleClass *klass)
MC_PRESENCE_UNSET,
G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_AUTO_AWAY,
+ g_param_spec_boolean ("auto-away",
+ "Automatic set presence to away",
+ "Should it set presence to away if inactive",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_AUTO_DISCONNECT,
+ g_param_spec_boolean ("auto-disconnect",
+ "Automatic set presence to offline",
+ "Should it set presence to offline if NM is disconnected",
+ FALSE,
+ G_PARAM_READWRITE));
+
g_type_class_add_private (object_class, sizeof (EmpathyIdlePriv));
}
@@ -258,6 +278,12 @@ idle_get_property (GObject *object,
case PROP_FLASH_STATE:
g_value_set_enum (value, empathy_idle_get_flash_state (idle));
break;
+ case PROP_AUTO_AWAY:
+ g_value_set_boolean (value, empathy_idle_get_auto_away (idle));
+ break;
+ case PROP_AUTO_DISCONNECT:
+ g_value_set_boolean (value, empathy_idle_get_auto_disconnect (idle));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
@@ -286,6 +312,9 @@ idle_set_property (GObject *object,
case PROP_FLASH_STATE:
empathy_idle_set_flash_state (idle, g_value_get_enum (value));
break;
+ case PROP_AUTO_AWAY:
+ empathy_idle_set_auto_away (idle, g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
@@ -414,6 +443,44 @@ empathy_idle_set_presence (EmpathyIdle *idle,
NULL, NULL);
}
+gboolean
+empathy_idle_get_auto_away (EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv = GET_PRIV (idle);
+
+ return priv->auto_away;
+}
+
+void
+empathy_idle_set_auto_away (EmpathyIdle *idle,
+ gboolean auto_away)
+{
+ EmpathyIdlePriv *priv = GET_PRIV (idle);
+
+ priv->auto_away = auto_away;
+
+ g_object_notify (G_OBJECT (idle), "auto-away");
+}
+
+gboolean
+empathy_idle_get_auto_disconnect (EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv = GET_PRIV (idle);
+
+ return priv->auto_disconnect;
+}
+
+void
+empathy_idle_set_auto_disconnect (EmpathyIdle *idle,
+ gboolean auto_disconnect)
+{
+ EmpathyIdlePriv *priv = GET_PRIV (idle);
+
+ priv->auto_disconnect = auto_disconnect;
+
+ g_object_notify (G_OBJECT (idle), "auto-disconnect");
+}
+
static void
idle_presence_changed_cb (MissionControl *mc,
McPresence state,
@@ -450,8 +517,10 @@ idle_session_idle_changed_cb (DBusGProxy *gs_proxy,
is_idle ? "yes" : "no");
if (priv->state <= MC_PRESENCE_OFFLINE ||
- priv->state == MC_PRESENCE_HIDDEN) {
- /* We are not online so nothing to do here */
+ priv->state == MC_PRESENCE_HIDDEN ||
+ !priv->auto_away) {
+ /* We are not online or we don't want to go auto away,
+ * nothing to do here */
priv->is_idle = is_idle;
return;
}
@@ -507,6 +576,10 @@ idle_nm_state_change_cb (DBusGProxy *proxy,
empathy_debug (DEBUG_DOMAIN, "New network state (%d)", state);
+ if (!priv->auto_disconnect) {
+ return;
+ }
+
if (state != NM_STATE_CONNECTED && priv->nm_connected) {
/* We are no more connected */
idle_ext_away_stop (idle);