#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,
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);
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,
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,
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);
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
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,
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);
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);