]> git.0d.be Git - empathy.git/commitdiff
Add 2 properties to EmpathyIdle to activate auto-away and auto-disconnect,
authorXavier Claessens <xclaesse@gmail.com>
Thu, 20 Sep 2007 10:46:27 +0000 (10:46 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Thu, 20 Sep 2007 10:46:27 +0000 (10:46 +0000)
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

ChangeLog
doc/libempathy/tmpl/empathy-idle.sgml
libempathy-gtk/empathy-status-icon.c
libempathy/empathy-idle.c
libempathy/empathy-idle.h

index 5df2d6cd5f3b17001b8b97c8bd593be94363a01c..d90001b458a7cfb1e450e90a3566cea36cc16941 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+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.
index 8971b783f1937bf70c2e2297c8af8a11500a2a6a..68edcafedef485826689a841742a232f0bd30546 100644 (file)
@@ -29,6 +29,16 @@ EmpathyIdle
 </para>
 
 
+<!-- ##### ARG EmpathyIdle:auto-away ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG EmpathyIdle:auto-disconnect ##### -->
+<para>
+
+</para>
+
 <!-- ##### ARG EmpathyIdle:flash-state ##### -->
 <para>
 
index 1fdc0095309fdfdcd9485d6a1145e74e0ca483f6..4fc1ca055c92fe692642d75b19b56415d61f1265 100644 (file)
@@ -157,6 +157,8 @@ empathy_status_icon_init (EmpathyStatusIcon *icon)
 
        priv->icon = gtk_status_icon_new ();
        priv->idle = empathy_idle_new ();
+       empathy_idle_set_auto_away (priv->idle, TRUE);
+       empathy_idle_set_auto_disconnect (priv->idle, TRUE);
        priv->manager = empathy_contact_manager_new ();
        priv->mc = empathy_mission_control_new ();
        priv->text_filter = empathy_filter_new ("org.gnome.Empathy.Chat",
index 4c7344e9b804ebc9680a9d09b7d8ae2ac2af5def..87389277c3f290d45c44edcb3491ec53c9775f76 100644 (file)
@@ -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);
index 011d2494a7022e318c3c2e8f4321412a40006713..b2f3e634aead95d0a47dc03e9d6e2a784357f2da 100644 (file)
@@ -48,20 +48,26 @@ struct _EmpathyIdleClass {
        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