static gboolean
import_dialog_account_id_in_list (GList *accounts,
                                  const gchar *account_id)
{
  GList *l;

  for (l = accounts; l; l = l->next)
    {
      McAccount *account = l->data;
      gchar *value;
      gboolean result;

      if (mc_account_get_param_string (account, "account", &value)
          == MC_ACCOUNT_SETTING_ABSENT)
        continue;

      result = tp_strdiff (value, account_id);

      g_free (value);

      if (!result)
        return TRUE;
    }

  return FALSE;
}
static void
account_widget_setup_widget (GtkWidget   *widget,
			     McAccount   *account,
			     const gchar *param_name)
{
	g_object_set_data_full (G_OBJECT (widget), "param_name",
				g_strdup (param_name), g_free);
	g_object_set_data_full (G_OBJECT (widget), "account",
				g_object_ref (account), g_object_unref);

	if (GTK_IS_SPIN_BUTTON (widget)) {
		gint value = 0;

		mc_account_get_param_int (account, param_name, &value);
		gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);

		g_signal_connect (widget, "value-changed",
				  G_CALLBACK (account_widget_int_changed_cb),
				  account);
	}
	else if (GTK_IS_ENTRY (widget)) {
		gchar *str = NULL;

		mc_account_get_param_string (account, param_name, &str);
		gtk_entry_set_text (GTK_ENTRY (widget), str ? str : "");
		g_free (str);

		if (strstr (param_name, "password")) {
			gtk_entry_set_visibility (GTK_ENTRY (widget), FALSE);
		}

		g_signal_connect (widget, "focus-out-event",
				  G_CALLBACK (account_widget_entry_focus_cb),
				  account);
	}
	else if (GTK_IS_TOGGLE_BUTTON (widget)) {
		gboolean value = FALSE;

		mc_account_get_param_boolean (account, param_name, &value);
		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);

		g_signal_connect (widget, "toggled",
				  G_CALLBACK (account_widget_checkbutton_toggled_cb),
				  account);
	} else {
		DEBUG ("Unknown type of widget for param %s", param_name);
	}
}
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;
}
void
empathy_account_widget_add_forget_button (McAccount   *account,
					  GtkBuilder  *gui,
					  const gchar *button,
					  const gchar *entry)
{
	GtkWidget *button_forget;
	GtkWidget *entry_password;
	gchar   *password = NULL;
	
	button_forget = GTK_WIDGET (gtk_builder_get_object (gui, button));
	entry_password = GTK_WIDGET (gtk_builder_get_object (gui, entry));

	mc_account_get_param_string (account, "password", &password);
	gtk_widget_set_sensitive (button_forget, !EMP_STR_EMPTY (password));
	g_free (password);

	g_signal_connect (button_forget, "clicked",
			  G_CALLBACK (account_widget_forget_clicked_cb),
			  entry_password);
	g_signal_connect (entry_password, "changed",
			  G_CALLBACK (account_widget_password_changed_cb),
			  button_forget);
}
void
empathy_account_widget_add_forget_button (McAccount   *account,
					  GladeXML    *glade,
					  const gchar *button,
					  const gchar *entry)
{
	GtkWidget *button_forget;
	GtkWidget *entry_password;
	gchar     *password = NULL;
	
	button_forget = glade_xml_get_widget (glade, button);
	entry_password = glade_xml_get_widget (glade, entry);

	mc_account_get_param_string (account, "password", &password);
	gtk_widget_set_sensitive (button_forget, !G_STR_EMPTY (password));
	g_free (password);

	g_signal_connect (button_forget, "clicked",
			  G_CALLBACK (account_widget_forget_clicked_cb),
			  entry_password);
	g_signal_connect (entry_password, "changed",
			  G_CALLBACK (account_widget_password_changed_cb),
			  button_forget);
}
Ejemplo n.º 6
0
static void
account_widget_irc_setup (EmpathyAccountWidgetIrc *settings)
{
  gchar *nick = NULL;
  gchar *fullname = NULL;
  gchar *server = NULL;
  gint port = 6667;
  gchar *charset;
  gboolean ssl = FALSE;
  EmpathyIrcNetwork *network = NULL;

  mc_account_get_param_string (settings->account, "account", &nick);
  mc_account_get_param_string (settings->account, "fullname", &fullname);
  mc_account_get_param_string (settings->account, "server", &server);
  mc_account_get_param_string (settings->account, "charset", &charset);
  mc_account_get_param_int (settings->account, "port", &port);
  mc_account_get_param_boolean (settings->account, "use-ssl", &ssl);

  if (!nick)
    {
      nick = g_strdup (g_get_user_name ());
      mc_account_set_param_string (settings->account, "account", nick);
    }

  if (!fullname)
    {
      fullname = g_strdup (g_get_real_name ());
      if (!fullname)
        {
          fullname = g_strdup (nick);
        }
      mc_account_set_param_string (settings->account, "fullname", fullname);
    }

  if (server != NULL)
    {
      GtkListStore *store;

      network = empathy_irc_network_manager_find_network_by_address (
          settings->network_manager, server);


      store = GTK_LIST_STORE (gtk_combo_box_get_model (
            GTK_COMBO_BOX (settings->combobox_network)));

      if (network != NULL)
        {
          gchar *name;

          g_object_set (network, "charset", charset, NULL);

          g_object_get (network, "name", &name, NULL);
          DEBUG ("Account use network %s", name);

          g_free (name);
        }
      else
        {
          /* We don't have this network. Let's create it */
          EmpathyIrcServer *srv;
          GtkTreeIter iter;

          DEBUG ("Create a network %s", server);
          network = empathy_irc_network_new (server);
          srv = empathy_irc_server_new (server, port, ssl);

          empathy_irc_network_append_server (network, srv);
          empathy_irc_network_manager_add (settings->network_manager, network);

          gtk_list_store_insert_with_values (store, &iter, -1,
              COL_NETWORK_OBJ, network,
              COL_NETWORK_NAME, server,
              -1);

          gtk_combo_box_set_active_iter (
              GTK_COMBO_BOX (settings->combobox_network), &iter);

          g_object_unref (srv);
          g_object_unref (network);
        }
    }


  fill_networks_model (settings, network);

  g_free (nick);
  g_free (fullname);
  g_free (server);
  g_free (charset);
}