+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.
+
2007-09-19 Xavier Claessens <xclaesse@gmail.com>
* libempathy-gtk/empathy-smiley-manager.c: Fix a leak.
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;
};
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)
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));
}
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;
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;
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,
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;
}
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);
GObjectClass parent_class;
};
-GType empathy_idle_get_type (void) G_GNUC_CONST;
-EmpathyIdle *empathy_idle_new (void);
-McPresence empathy_idle_get_state (EmpathyIdle *idle);
-void empathy_idle_set_state (EmpathyIdle *idle,
- McPresence state);
-const gchar *empathy_idle_get_status (EmpathyIdle *idle);
-void empathy_idle_set_status (EmpathyIdle *idle,
- const gchar *status);
-McPresence empathy_idle_get_flash_state (EmpathyIdle *idle);
-void empathy_idle_set_flash_state (EmpathyIdle *idle,
- McPresence state);
-void empathy_idle_set_presence (EmpathyIdle *idle,
- McPresence state,
- const gchar *status);
+GType empathy_idle_get_type (void) G_GNUC_CONST;
+EmpathyIdle *empathy_idle_new (void);
+McPresence empathy_idle_get_state (EmpathyIdle *idle);
+void empathy_idle_set_state (EmpathyIdle *idle,
+ McPresence state);
+const gchar *empathy_idle_get_status (EmpathyIdle *idle);
+void empathy_idle_set_status (EmpathyIdle *idle,
+ const gchar *status);
+McPresence empathy_idle_get_flash_state (EmpathyIdle *idle);
+void empathy_idle_set_flash_state (EmpathyIdle *idle,
+ McPresence state);
+void empathy_idle_set_presence (EmpathyIdle *idle,
+ McPresence state,
+ const gchar *status);
+gboolean empathy_idle_get_auto_away (EmpathyIdle *idle);
+void empathy_idle_set_auto_away (EmpathyIdle *idle,
+ gboolean auto_away);
+gboolean empathy_idle_get_auto_disconnect (EmpathyIdle *idle);
+void empathy_idle_set_auto_disconnect (EmpathyIdle *idle,
+ gboolean auto_disconnect);
G_END_DECLS