]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-account-widget-generic.c
EmpathyTpContactFactory: If the presence dict doesn't contain a presence-message...
[empathy.git] / libempathy-gtk / empathy-account-widget-generic.c
index 73b579a55f4c8a4e180df7286faa074290c273f7..8ade3f26f59d8fa33f3d4cac8cb297f57e844e58 100644 (file)
 #include <libmissioncontrol/mc-account.h>
 #include <libmissioncontrol/mc-protocol.h>
 
-#include <libempathy-gtk/empathy-ui-utils.h>
+#include <libempathy/empathy-debug.h>
 
 #include "empathy-account-widget-generic.h"
+#include "empathy-ui-utils.h"
+
+#define DEBUG_DOMAIN "AccountWidgetGeneric"
 
 typedef struct {
        McAccount     *account;
 
        GtkWidget     *sw;
        GtkWidget     *table_settings;
-       GtkSizeGroup  *size_group;
 
        guint          n_rows;
 } EmpathyAccountWidgetGeneric;
 
-static gboolean account_widget_generic_entry_focus_cb         (GtkWidget                  *widget,
-                                                              GdkEventFocus              *event,
-                                                              EmpathyAccountWidgetGeneric *settings);
-static void     account_widget_generic_int_changed_cb         (GtkWidget                  *widget,
-                                                              EmpathyAccountWidgetGeneric *settings);
-static void     account_widget_generic_checkbutton_toggled_cb (GtkWidget                  *widget,
-                                                              EmpathyAccountWidgetGeneric *settings);
-static gchar *  account_widget_generic_format_param_name      (const gchar                *param_name);
-static void     account_widget_generic_setup_foreach          (McProtocolParam            *param,
-                                                              EmpathyAccountWidgetGeneric *settings);
-static void     account_widget_generic_destroy_cb             (GtkWidget                  *widget,
-                                                              EmpathyAccountWidgetGeneric *settings);
-
 static gboolean 
 account_widget_generic_entry_focus_cb (GtkWidget                  *widget,
                                       GdkEventFocus              *event,
@@ -129,7 +118,7 @@ static void
 account_widget_generic_setup_foreach (McProtocolParam            *param,
                                      EmpathyAccountWidgetGeneric *settings)
 {
-       GtkWidget *widget;
+       GtkWidget *widget = NULL;
        gchar     *param_name_formatted;
 
        param_name_formatted = account_widget_generic_format_param_name (param->name);
@@ -143,9 +132,9 @@ account_widget_generic_setup_foreach (McProtocolParam            *param,
 
                str = g_strdup_printf (_("%s:"), param_name_formatted);
                widget = gtk_label_new (str);
+               gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
                g_free (str);
 
-               gtk_size_group_add_widget (settings->size_group, widget);
                gtk_table_attach (GTK_TABLE (settings->table_settings),
                                  widget,
                                  0, 1,
@@ -178,16 +167,36 @@ account_widget_generic_setup_foreach (McProtocolParam            *param,
                                  GTK_FILL | GTK_EXPAND, 0,
                                  0, 0);
        }
-       else if (param->signature[0] == 'q' ||
-                param->signature[0] == 'n') {
-               gchar *str = NULL;
-               gint   value = 0;
+       /* int types: ynqiuxt. double type is 'd' */
+       else if (param->signature[0] == 'y' ||
+                param->signature[0] == 'n' ||
+                param->signature[0] == 'q' ||
+                param->signature[0] == 'i' ||
+                param->signature[0] == 'u' ||
+                param->signature[0] == 'x' ||
+                param->signature[0] == 't' ||
+                param->signature[0] == 'd') {
+               gchar   *str = NULL;
+               gint     value = 0;
+               gdouble  minint = 0;
+               gdouble  maxint = 0;
+               gdouble  step = 1;
+               switch (param->signature[0]) {
+               case 'y': minint = G_MININT8;  maxint = G_MAXINT8;   break;
+               case 'n': minint = G_MININT16; maxint = G_MAXINT16;  break;
+               case 'q': minint = 0;          maxint = G_MAXUINT16; break;
+               case 'i': minint = G_MININT32; maxint = G_MAXINT32;  break;
+               case 'u': minint = 0;          maxint = G_MAXUINT32; break;
+               case 'x': minint = G_MININT64; maxint = G_MAXINT64;  break;
+               case 't': minint = 0;          maxint = G_MAXUINT64; break;
+               case 'd': minint = G_MININT32; maxint = G_MAXINT32; step = 0.1; break;
+               }
 
                str = g_strdup_printf (_("%s:"), param_name_formatted);
                widget = gtk_label_new (str);
+               gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
                g_free (str);
 
-               gtk_size_group_add_widget (settings->size_group, widget);
                gtk_table_attach (GTK_TABLE (settings->table_settings),
                                  widget,
                                  0, 1,
@@ -195,7 +204,7 @@ account_widget_generic_setup_foreach (McProtocolParam            *param,
                                  GTK_FILL, 0,
                                  0, 0);
 
-               widget = gtk_spin_button_new_with_range (0, G_MAXINT, 1);
+               widget = gtk_spin_button_new_with_range (minint, maxint, step);
                mc_account_get_param_int (settings->account,
                                          param->name,
                                          &value);
@@ -233,13 +242,17 @@ account_widget_generic_setup_foreach (McProtocolParam            *param,
                                  GTK_FILL | GTK_EXPAND, 0,
                                  0, 0);
        } else {
-               g_assert_not_reached ();
+               empathy_debug (DEBUG_DOMAIN,
+                              "Unknown signature for param %s: %s\n",
+                              param_name_formatted, param->signature);
        }
 
-       g_free (param_name_formatted);
+       if (widget) {
+               g_object_set_data_full (G_OBJECT (widget), "param_name", 
+                                       g_strdup (param->name), g_free);
+       }
 
-       g_object_set_data_full (G_OBJECT (widget), "param_name", 
-                               g_strdup (param->name), g_free);
+       g_free (param_name_formatted);
 }
 
 static void
@@ -251,6 +264,17 @@ accounts_widget_generic_setup (EmpathyAccountWidgetGeneric *settings)
 
        profile = mc_account_get_profile (settings->account);
        protocol = mc_profile_get_protocol (profile);
+
+       if (!protocol) {
+               /* The CM is not installed, MC shouldn't list them
+                * see SF bug #1688779
+                * FIXME: We should display something asking the user to 
+                * install the CM
+                */
+               g_object_unref (profile);
+               return;
+       }
+
        params = mc_protocol_get_params (protocol);
 
        g_slist_foreach (params,
@@ -267,19 +291,15 @@ account_widget_generic_destroy_cb (GtkWidget                  *widget,
                                   EmpathyAccountWidgetGeneric *settings)
 {
        g_object_unref (settings->account);
-       g_object_unref (settings->size_group);
-
        g_free (settings);
 }
 
 GtkWidget *
-empathy_account_widget_generic_new (McAccount *account,
-                                  GtkWidget *label_name)
+empathy_account_widget_generic_new (McAccount *account)
 {
        EmpathyAccountWidgetGeneric *settings;
 
        g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
-       g_return_val_if_fail (GTK_IS_WIDGET (label_name), NULL);
 
        settings = g_new0 (EmpathyAccountWidgetGeneric, 1);
 
@@ -294,11 +314,6 @@ empathy_account_widget_generic_new (McAccount *account,
                                        GTK_POLICY_AUTOMATIC);
        gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (settings->sw),
                                               settings->table_settings);
-
-       settings->size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-       if (label_name) {
-               gtk_size_group_add_widget (settings->size_group, label_name);
-       }
        
        accounts_widget_generic_setup (settings);