]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-presence-chooser.c
Updated Basque language
[empathy.git] / libempathy-gtk / empathy-presence-chooser.c
index 8fba26ff7a2af9743f0e62243fbdafd8811a87b8..ba36e091c518a65419e6544c9169e3dc58b85813 100644 (file)
@@ -35,6 +35,7 @@
 
 #include <telepathy-glib/util.h>
 
+#include <libempathy/empathy-connectivity.h>
 #include <libempathy/empathy-idle.h>
 #include <libempathy/empathy-utils.h>
 #include <libempathy/empathy-status-presets.h>
@@ -79,9 +80,9 @@ enum {
 
 /* For combobox's model */
 enum {
+       COL_STATUS_TEXT,
        COL_STATE_ICON_NAME,
        COL_STATE,
-       COL_STATUS_TEXT,
        COL_DISPLAY_MARKUP,
        COL_STATUS_CUSTOMISABLE,
        COL_TYPE,
@@ -98,6 +99,9 @@ typedef enum  {
 
 typedef struct {
        EmpathyIdle *idle;
+       EmpathyConnectivity *connectivity;
+
+       gulong state_change_signal_id;
 
        gboolean     editing_status;
        int          block_set_editing;
@@ -162,9 +166,9 @@ presence_chooser_create_model (EmpathyPresenceChooser *self)
        int i;
 
        store = gtk_list_store_new (N_COLUMNS,
+                                   G_TYPE_STRING,    /* COL_STATUS_TEXT */
                                    G_TYPE_STRING,    /* COL_STATE_ICON_NAME */
                                    G_TYPE_UINT,      /* COL_STATE */
-                                   G_TYPE_STRING,    /* COL_STATUS_TEXT */
                                    G_TYPE_STRING,    /* COL_DISPLAY_MARKUP */
                                    G_TYPE_BOOLEAN,   /* COL_STATUS_CUSTOMISABLE */
                                    G_TYPE_INT);      /* COL_TYPE */
@@ -179,9 +183,9 @@ presence_chooser_create_model (EmpathyPresenceChooser *self)
                icon_name = empathy_icon_name_for_presence (states[i].state);
 
                gtk_list_store_insert_with_values (store, NULL, -1,
+                       COL_STATUS_TEXT, status,
                        COL_STATE_ICON_NAME, icon_name,
                        COL_STATE, states[i].state,
-                       COL_STATUS_TEXT, status,
                        COL_DISPLAY_MARKUP, status,
                        COL_STATUS_CUSTOMISABLE, states[i].customisable,
                        COL_TYPE, ENTRY_TYPE_BUILTIN,
@@ -194,9 +198,9 @@ presence_chooser_create_model (EmpathyPresenceChooser *self)
                        for (l = list; l; l = l->next) {
                                gtk_list_store_insert_with_values (store,
                                        NULL, -1,
+                                       COL_STATUS_TEXT, l->data,
                                        COL_STATE_ICON_NAME, icon_name,
                                        COL_STATE, states[i].state,
-                                       COL_STATUS_TEXT, l->data,
                                        COL_DISPLAY_MARKUP, l->data,
                                        COL_STATUS_CUSTOMISABLE, TRUE,
                                        COL_TYPE, ENTRY_TYPE_SAVED,
@@ -205,9 +209,9 @@ presence_chooser_create_model (EmpathyPresenceChooser *self)
                        g_list_free (list);
 
                        gtk_list_store_insert_with_values (store, NULL, -1,
+                               COL_STATUS_TEXT, _("Custom Message..."),
                                COL_STATE_ICON_NAME, icon_name,
                                COL_STATE, states[i].state,
-                               COL_STATUS_TEXT, "",
                                COL_DISPLAY_MARKUP, custom_message,
                                COL_STATUS_CUSTOMISABLE, TRUE,
                                COL_TYPE, ENTRY_TYPE_CUSTOM,
@@ -222,8 +226,8 @@ presence_chooser_create_model (EmpathyPresenceChooser *self)
                        -1);
 
        gtk_list_store_insert_with_values (store, NULL, -1,
+               COL_STATUS_TEXT, _("Edit Custom Messages..."),
                COL_STATE_ICON_NAME, GTK_STOCK_EDIT,
-               COL_STATUS_TEXT, "",
                COL_DISPLAY_MARKUP, _("Edit Custom Messages..."),
                COL_TYPE, ENTRY_TYPE_EDIT_CUSTOM,
                -1);
@@ -709,6 +713,14 @@ presence_chooser_entry_focus_out_cb (EmpathyPresenceChooser *chooser,
        return FALSE;
 }
 
+static void
+presence_chooser_connectivity_state_change (EmpathyConnectivity *connectivity,
+                                           gboolean new_online,
+                                           EmpathyPresenceChooser *chooser)
+{
+       gtk_widget_set_sensitive (GTK_WIDGET (chooser), new_online);
+}
+
 static void
 empathy_presence_chooser_init (EmpathyPresenceChooser *chooser)
 {
@@ -780,6 +792,14 @@ empathy_presence_chooser_init (EmpathyPresenceChooser *chooser)
        /* FIXME: this string sucks */
        gtk_widget_set_tooltip_text (GTK_WIDGET (chooser),
                _("Set your presence and current status"));
+
+       priv->connectivity = empathy_connectivity_dup_singleton ();
+       priv->state_change_signal_id = g_signal_connect (priv->connectivity,
+               "state-change",
+               G_CALLBACK (presence_chooser_connectivity_state_change),
+               chooser);
+       presence_chooser_connectivity_state_change (priv->connectivity,
+               empathy_connectivity_is_online (priv->connectivity), chooser);
 }
 
 static void
@@ -802,6 +822,12 @@ presence_chooser_finalize (GObject *object)
                                              object);
        g_object_unref (priv->idle);
 
+       g_signal_handler_disconnect (priv->connectivity,
+                                    priv->state_change_signal_id);
+       priv->state_change_signal_id = 0;
+
+       g_object_unref (priv->connectivity);
+
        G_OBJECT_CLASS (empathy_presence_chooser_parent_class)->finalize (object);
 }
 
@@ -1049,6 +1075,7 @@ presence_chooser_menu_add_item (GtkWidget   *menu,
        gtk_widget_show (image);
 
        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+       gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (item), TRUE);
        gtk_widget_show (item);
 
        g_object_set_data_full (G_OBJECT (item),