326
327
/* update the enabled switch */
327
328
g_signal_handlers_block_by_func (priv->enabled_switch,
328
accounts_dialog_enable_switch_flipped, dialog);
329
mx_gtk_light_switch_set_active (MX_GTK_LIGHT_SWITCH (priv->enabled_switch),
329
accounts_dialog_enable_switch_active_cb, dialog);
330
gtk_switch_set_active (GTK_SWITCH (priv->enabled_switch),
330
331
account_enabled);
331
332
g_signal_handlers_unblock_by_func (priv->enabled_switch,
332
accounts_dialog_enable_switch_flipped, dialog);
333
accounts_dialog_enable_switch_active_cb, dialog);
334
/* inform the account widget */
335
g_object_set (priv->setting_widget_object,
336
"enabled", account_enabled,
335
/* Display the Enable switch if account supports it */
336
gtk_widget_set_visible (priv->enabled_switch,
337
!(storage_restrictions & TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_ENABLED));
339
339
if (account_enabled)
656
656
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
657
657
EmpathyAccountSettings *settings;
659
const gchar *name, *display_name;
660
TpConnectionManager *cm;
661
TpConnectionManagerProtocol *proto;
662
gboolean is_gtalk, is_facebook;
664
cm = empathy_protocol_chooser_dup_selected (
665
EMPATHY_PROTOCOL_CHOOSER (priv->combobox_protocol), &proto, &is_gtalk,
659
settings = empathy_protocol_chooser_create_account_settings (
660
EMPATHY_PROTOCOL_CHOOSER (priv->combobox_protocol));
661
if (settings == NULL)
672
else if (is_facebook)
677
display_name = empathy_protocol_name_to_display_name (name);
678
if (display_name == NULL)
679
display_name = proto->name;
682
/* To translator: %s is the name of the protocol, such as "Google Talk" or
685
str = g_strdup_printf (_("New %s account"), display_name);
686
settings = empathy_account_settings_new (cm->name, proto->name, str);
692
gchar *fallback_servers[] = {
693
"talkx.l.google.com",
694
"talkx.l.google.com:443,oldssl",
695
"talkx.l.google.com:80",
698
gchar *extra_certificate_identities[] = {
702
empathy_account_settings_set_icon_name_async (settings, "im-google-talk",
705
empathy_account_settings_set_strv (settings, "fallback-servers",
708
if (empathy_account_settings_have_tp_param (settings,
709
"extra-certificate-identities"))
711
empathy_account_settings_set_strv (settings,
712
"extra-certificate-identities", extra_certificate_identities);
715
else if (is_facebook)
717
empathy_account_settings_set_icon_name_async (settings, "im-facebook",
720
empathy_account_settings_set_string (settings, "server",
721
"chat.facebook.com");
724
664
accounts_dialog_add (dialog, settings);
725
665
accounts_dialog_model_set_selected (dialog, settings);
727
667
gtk_widget_show_all (priv->hbox_protocol);
729
669
g_object_unref (settings);
1646
1579
accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog,
1647
1580
EmpathyAccountSettings *settings)
1649
GtkTreeSelection *selection;
1650
1582
GtkTreeIter iter;
1651
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
1653
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
1654
1584
if (accounts_dialog_get_settings_iter (dialog, settings, &iter))
1655
1585
select_and_scroll_to_iter (dialog, &iter);
1589
accounts_dialog_treeview_enabled_cb (GtkMenuItem *item,
1594
enabled = tp_account_is_enabled (account);
1595
tp_account_set_enabled_async (account, !enabled, NULL, NULL);
1599
accounts_dialog_treeview_button_press_event_cb (GtkTreeView *view,
1600
GdkEventButton *event,
1601
EmpathyAccountsDialog *dialog)
1603
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
1604
TpAccount *account = NULL;
1605
GtkTreeModel *model = NULL;
1606
GtkTreePath *path = NULL;
1609
GtkWidget *item_enable, *item_disable;
1610
GtkWidget *image_enable, *image_disable;
1612
/* ignore multiple clicks */
1613
if (event->type != GDK_BUTTON_PRESS)
1616
if (event->button != 3)
1619
/* Selection is not yet set, so we have to get account from event position */
1620
model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
1621
if (!gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (priv->treeview),
1622
event->x, event->y, &path, NULL, NULL, NULL))
1625
if (!gtk_tree_model_get_iter (model, &iter, path))
1628
gtk_tree_model_get (model, &iter, COL_ACCOUNT, &account, -1);
1630
/* Create the menu */
1631
menu = empathy_context_menu_new (GTK_WIDGET (view));
1633
/* Get images for menu items */
1634
image_enable = gtk_image_new_from_icon_name (empathy_icon_name_for_presence (
1635
tp_account_manager_get_most_available_presence (
1636
priv->account_manager, NULL, NULL)),
1637
GTK_ICON_SIZE_MENU);
1638
image_disable = gtk_image_new_from_icon_name (
1639
empathy_icon_name_for_presence (TP_CONNECTION_PRESENCE_TYPE_OFFLINE),
1640
GTK_ICON_SIZE_MENU);
1642
/* Menu items: to enabled/disable the account */
1643
item_enable = gtk_image_menu_item_new_with_mnemonic (_("_Enable"));
1644
item_disable = gtk_image_menu_item_new_with_mnemonic (_("_Disable"));
1645
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item_enable),
1647
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item_disable),
1650
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item_enable);
1651
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item_disable);
1653
if (tp_account_is_enabled (account))
1655
tp_g_signal_connect_object (item_disable, "activate",
1656
G_CALLBACK (accounts_dialog_treeview_enabled_cb), account, 0);
1657
gtk_widget_set_sensitive (item_enable, FALSE);
1661
tp_g_signal_connect_object (item_enable, "activate",
1662
G_CALLBACK (accounts_dialog_treeview_enabled_cb), account, 0);
1663
gtk_widget_set_sensitive (item_disable, FALSE);
1666
gtk_widget_show (item_enable);
1667
gtk_widget_show (item_disable);
1669
/* FIXME: Add here presence items, to be able to set per-account presence */
1672
gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
1673
event->button, event->time);
1676
tp_clear_object (&account);
1677
gtk_tree_path_free (path);
1658
1683
accounts_dialog_add (EmpathyAccountsDialog *dialog,
1659
1684
EmpathyAccountSettings *settings)
2189
2205
"button_add", "clicked", accounts_dialog_button_add_clicked_cb,
2190
2206
"button_remove", "clicked", accounts_dialog_button_remove_clicked_cb,
2191
2207
"button_import", "clicked", accounts_dialog_button_import_clicked_cb,
2208
"treeview", "button-press-event",
2209
accounts_dialog_treeview_button_press_event_cb,
2194
2212
content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
2196
gtk_container_add (GTK_CONTAINER (content_area), top_hbox);
2214
gtk_box_pack_start (GTK_BOX (content_area), top_hbox, TRUE, TRUE, 0);
2198
2216
g_object_unref (gui);
2292
2310
align = gtk_alignment_new (0.5, 0.5, 1., 0.);
2293
2311
gtk_box_pack_start (GTK_BOX (content_area), align, FALSE, TRUE, 0);
2295
priv->enabled_switch = mx_gtk_light_switch_new ();
2313
priv->enabled_switch = gtk_switch_new ();
2296
2314
gtk_container_add (GTK_CONTAINER (align), priv->enabled_switch);
2297
g_signal_connect (priv->enabled_switch, "switch-flipped",
2298
G_CALLBACK (accounts_dialog_enable_switch_flipped), dialog);
2315
g_signal_connect (priv->enabled_switch, "notify::active",
2316
G_CALLBACK (accounts_dialog_enable_switch_active_cb), dialog);
2299
2317
gtk_widget_show_all (align);
2301
2319
/* Tweak the dialog */
2419
2436
tp_account_manager_prepare_async (priv->account_manager, NULL,
2420
2437
accounts_dialog_manager_ready_cb, dialog);
2422
if (empathy_import_accounts_to_import ())
2424
gtk_widget_show (priv->button_import);
2426
if (!g_settings_get_boolean (gsettings, EMPATHY_PREFS_IMPORT_ASKED))
2428
GtkWidget *import_dialog;
2430
g_settings_set_boolean (gsettings, EMPATHY_PREFS_IMPORT_ASKED, TRUE);
2431
import_dialog = empathy_import_dialog_new (GTK_WINDOW (dialog),
2433
gtk_widget_show (import_dialog);
2437
2439
priv->connectivity = empathy_connectivity_dup_singleton ();
2439
g_object_unref (gsettings);
2525
2526
path = g_build_filename (BIN_DIR, "empathy-accounts", NULL);
2529
cmd = g_string_new (path);
2530
2532
if (selected_account != NULL)
2532
const gchar *account_path;
2534
account_path = tp_proxy_get_object_path (TP_PROXY (selected_account));
2535
account_option = g_strdup_printf ("--select-account=%s",
2536
&account_path[strlen (TP_ACCOUNT_OBJECT_PATH_BASE)]);
2538
argv[i++] = account_option;
2534
g_string_append_printf (cmd, " --select-account=%s",
2535
tp_account_get_path_suffix (selected_account));
2542
argv[i++] = "--if-needed";
2539
g_string_append_printf (cmd, " --if-needed");
2545
argv[i++] = "--hidden";
2542
g_string_append_printf (cmd, " --hidden");
2547
2544
DEBUG ("Launching empathy-accounts (if_needed: %d, hidden: %d, account: %s)",
2548
2545
if_needed, hidden,
2549
2546
selected_account == NULL ? "<none selected>" :
2550
2547
tp_proxy_get_object_path (TP_PROXY (selected_account)));
2552
gdk_spawn_on_screen (screen, NULL, (gchar**) argv, NULL, G_SPAWN_SEARCH_PATH,
2553
NULL, NULL, NULL, &error);
2549
app_info = g_app_info_create_from_commandline (cmd->str, NULL, 0, &error);
2550
if (app_info == NULL)
2552
DEBUG ("Failed to create app info: %s", error->message);
2553
g_error_free (error);
2557
display = gdk_screen_get_display (screen);
2558
context = gdk_display_get_app_launch_context (display);
2560
if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context,
2556
2563
g_warning ("Failed to open accounts dialog: %s", error->message);
2557
2564
g_error_free (error);
2560
g_free (account_option);
2568
tp_clear_object (&app_info);
2569
tp_clear_object (&context);
2570
g_string_free (cmd, TRUE);