static void
unset_server_params (EmpathyAccountWidgetIrc *settings)
{
  DEBUG ("Unset server, port and use-ssl");
  mc_account_unset_param (settings->account, "server");
  mc_account_unset_param (settings->account, "port");
  mc_account_unset_param (settings->account, "use-ssl");
}
static void
account_widget_forget_clicked_cb (GtkWidget *button,
				  GtkWidget *entry)
{
	McAccount   *account;
	const gchar *param_name;

	param_name = g_object_get_data (G_OBJECT (entry), "param_name");
	account = g_object_get_data (G_OBJECT (entry), "account");

	DEBUG ("Unset %s", param_name);
	mc_account_unset_param (account, param_name);
	gtk_entry_set_text (GTK_ENTRY (entry), "");
}
static gboolean
account_widget_entry_focus_cb (GtkWidget     *widget,
			       GdkEventFocus *event,
			       McAccount     *account)
{
	const gchar *str;
	const gchar *param_name;

	str = gtk_entry_get_text (GTK_ENTRY (widget));
	param_name = g_object_get_data (G_OBJECT (widget), "param_name");

	if (EMP_STR_EMPTY (str)) {
		gchar *value = NULL;

		mc_account_unset_param (account, param_name);
		mc_account_get_param_string (account, param_name, &value);
		DEBUG ("Unset %s and restore to %s", param_name, value);
		gtk_entry_set_text (GTK_ENTRY (widget), value ? value : "");
		g_free (value);
	} else {
		McProfile   *profile;
		const gchar *domain = NULL;
		gchar       *dup_str = NULL;

		profile = mc_account_get_profile (account);
		if (mc_profile_get_capabilities (profile) &
		    MC_PROFILE_CAPABILITY_SPLIT_ACCOUNT) {
			domain = mc_profile_get_default_account_domain (profile);
		}

		if (domain && !strstr (str, "@") &&
		    strcmp (param_name, "account") == 0) {
			DEBUG ("Adding @%s suffix to account", domain);
			str = dup_str = g_strconcat (str, "@", domain, NULL);
			gtk_entry_set_text (GTK_ENTRY (widget), str);
		}
		DEBUG ("Setting %s to %s", param_name,
			strstr (param_name, "password") ? "***" : str);
		mc_account_set_param_string (account, param_name, str);
		g_free (dup_str);
		g_object_unref (profile);
	}

	return FALSE;
}
static void
account_widget_int_changed_cb (GtkWidget *widget,
			       McAccount *account)
{
	const gchar *param_name;
	gint         value;

	value = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
	param_name = g_object_get_data (G_OBJECT (widget), "param_name");

	if (value == 0) {
		mc_account_unset_param (account, param_name);
		mc_account_get_param_int (account, param_name, &value);
		DEBUG ("Unset %s and restore to %d", param_name, value);
		gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
	} else {
		DEBUG ("Setting %s to %d", param_name, value);
		mc_account_set_param_int (account, param_name, value);
	}
}
static void
account_widget_checkbutton_toggled_cb (GtkWidget *widget,
				       McAccount *account)
{
	gboolean     value;
	gboolean     default_value;
	const gchar *param_name;

	value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
	param_name = g_object_get_data (G_OBJECT (widget), "param_name");

	/* FIXME: This is ugly! checkbox don't have a "not-set" value so we
	 * always unset the param and set the value if different from the
	 * default value. */
	mc_account_unset_param (account, param_name);
	mc_account_get_param_boolean (account, param_name, &default_value);

	if (default_value == value) {
		DEBUG ("Unset %s and restore to %d", param_name, default_value);
	} else {
		DEBUG ("Setting %s to %d", param_name, value);
		mc_account_set_param_boolean (account, param_name, value);
	}
}