comparison pidgin/gtkblist.c @ 21300:abbf74f4732b

propagate from branch 'im.pidgin.pidgin' (head e3fd21e6dabb99e5604e8337380353fcbe1a7279) to branch 'im.pidgin.elb.make' (head 7422b9a549f752c05cc75f0c8e56fdd2bced034a)
author Stu Tomlinson <stu@nosnilmot.com>
date Sat, 10 Nov 2007 16:17:54 +0000
parents 6de09629f091
children fbb044f7af3d 38cc722159ff
comparison
equal deleted inserted replaced
21132:f2dcad9572b2 21300:abbf74f4732b
523 g_free(a); 523 g_free(a);
524 524
525 if (i > 1) 525 if (i > 1)
526 { 526 {
527 char *msg = g_strdup_printf(ngettext("You have %d contact named %s. Would you like to merge them?", "You currently have %d contacts named %s. Would you like to merge them?", i), i, alias); 527 char *msg = g_strdup_printf(ngettext("You have %d contact named %s. Would you like to merge them?", "You currently have %d contacts named %s. Would you like to merge them?", i), i, alias);
528 purple_request_action(NULL, NULL, msg, _("Merging these contacts will cause them to share a single entry on the buddy list and use a single conversation window. " 528 purple_request_action_with_hint(NULL, NULL, msg, _("Merging these contacts will cause them to share a single entry on the buddy list and use a single conversation window. "
529 "You can separate them again by choosing 'Expand' from the contact's context menu"), 0, NULL, NULL, NULL, 529 "You can separate them again by choosing 'Expand' from the contact's context menu"), 0, NULL, NULL, NULL,
530 merges, 2, _("_Merge"), PURPLE_CALLBACK(gtk_blist_do_personize), _("_Cancel"), PURPLE_CALLBACK(g_list_free)); 530 PURPLE_REQUEST_UI_HINT_BLIST, merges, 2, _("_Merge"), PURPLE_CALLBACK(gtk_blist_do_personize), _("_Cancel"), PURPLE_CALLBACK(g_list_free));
531 g_free(msg); 531 g_free(msg);
532 } else 532 } else
533 g_list_free(merges); 533 g_list_free(merges);
534 } 534 }
535 535
603 if (!get_iter_from_node(node, &iter)) 603 if (!get_iter_from_node(node, &iter))
604 /* Now it's definitely a bug */ 604 /* Now it's definitely a bug */
605 return; 605 return;
606 } 606 }
607 607
608 pidgin_blist_tooltip_destroy();
609
608 path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); 610 path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter);
609 g_object_set(G_OBJECT(gtkblist->text_rend), "editable", TRUE, NULL); 611 g_object_set(G_OBJECT(gtkblist->text_rend), "editable", TRUE, NULL);
610 gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), FALSE); 612 gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), FALSE);
611 gtk_widget_grab_focus(gtkblist->treeview); 613 gtk_widget_grab_focus(gtkblist->treeview);
612 #if GTK_CHECK_VERSION(2,2,0) 614 #if GTK_CHECK_VERSION(2,2,0)
618 gtk_tree_path_free(path); 620 gtk_tree_path_free(path);
619 } 621 }
620 622
621 static void gtk_blist_menu_bp_cb(GtkWidget *w, PurpleBuddy *b) 623 static void gtk_blist_menu_bp_cb(GtkWidget *w, PurpleBuddy *b)
622 { 624 {
623 pidgin_pounce_editor_show(b->account, b->name, NULL); 625 pidgin_pounce_editor_show_with_parent(GTK_WINDOW(gtkblist->window), b->account, b->name, NULL);
624 } 626 }
625 627
626 static void gtk_blist_menu_showlog_cb(GtkWidget *w, PurpleBlistNode *node) 628 static void gtk_blist_menu_showlog_cb(GtkWidget *w, PurpleBlistNode *node)
627 { 629 {
628 PurpleLogType type; 630 PurpleLogType type;
644 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_find_prpl(purple_account_get_protocol_id(account))); 646 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_find_prpl(purple_account_get_protocol_id(account)));
645 if (prpl_info && prpl_info->get_chat_name) { 647 if (prpl_info && prpl_info->get_chat_name) {
646 name = prpl_info->get_chat_name(c->components); 648 name = prpl_info->get_chat_name(c->components);
647 } 649 }
648 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { 650 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) {
649 pidgin_log_show_contact((PurpleContact *)node); 651 pidgin_log_show_contact_with_parent(GTK_WINDOW(gtkblist->window), (PurpleContact *)node);
650 pidgin_clear_cursor(gtkblist->window); 652 pidgin_clear_cursor(gtkblist->window);
651 return; 653 return;
652 } else { 654 } else {
653 pidgin_clear_cursor(gtkblist->window); 655 pidgin_clear_cursor(gtkblist->window);
654 656
656 * that doesn't match the type of one of the blocks above. */ 658 * that doesn't match the type of one of the blocks above. */
657 g_return_if_reached(); 659 g_return_if_reached();
658 } 660 }
659 661
660 if (name && account) { 662 if (name && account) {
661 pidgin_log_show(type, name, account); 663 pidgin_log_show_with_parent(GTK_WINDOW(gtkblist->window), type, name, account);
662 g_free(name); 664 g_free(name);
663 665
664 pidgin_clear_cursor(gtkblist->window); 666 pidgin_clear_cursor(gtkblist->window);
665 } 667 }
666 } 668 }
681 for (bnode = node->child; bnode != NULL; bnode = bnode->next) { 683 for (bnode = node->child; bnode != NULL; bnode = bnode->next) {
682 purple_blist_node_set_bool(bnode, "show_offline", setting); 684 purple_blist_node_set_bool(bnode, "show_offline", setting);
683 } 685 }
684 } 686 }
685 pidgin_blist_update(purple_get_blist(), node); 687 pidgin_blist_update(purple_get_blist(), node);
686 }
687
688 static void gtk_blist_show_systemlog_cb()
689 {
690 pidgin_syslog_show();
691 } 688 }
692 689
693 static void gtk_blist_show_onlinehelp_cb() 690 static void gtk_blist_show_onlinehelp_cb()
694 { 691 {
695 purple_notify_uri(NULL, PURPLE_WEBSITE "documentation"); 692 purple_notify_uri(NULL, PURPLE_WEBSITE "documentation");
2798 { 2795 {
2799 GtkTreePath *path; 2796 GtkTreePath *path;
2800 GtkTreeIter iter; 2797 GtkTreeIter iter;
2801 PurpleBlistNode *node; 2798 PurpleBlistNode *node;
2802 GValue val; 2799 GValue val;
2800 gboolean editable = FALSE;
2801
2802 /* If we're editing a cell (e.g. alias editing), don't show the tooltip */
2803 g_object_get(G_OBJECT(gtkblist->text_rend), "editable", &editable, NULL);
2804 if (editable)
2805 return FALSE;
2803 2806
2804 if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y + (gtkblist->tip_rect.height/2), 2807 if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y + (gtkblist->tip_rect.height/2),
2805 &path, NULL, NULL, NULL)) 2808 &path, NULL, NULL, NULL))
2806 return FALSE; 2809 return FALSE;
2807 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); 2810 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path);
3058 { 3061 {
3059 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/debug/enabled", 3062 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/debug/enabled",
3060 !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")); 3063 !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled"));
3061 } 3064 }
3062 3065
3066 static void
3067 pidgin_blist_show_with_parent(gpointer data1, void (*callback)(GtkWindow *parent), gpointer data3)
3068 {
3069 callback(GTK_WINDOW(gtkblist->window));
3070 }
3063 3071
3064 /*************************************************** 3072 /***************************************************
3065 * Crap * 3073 * Crap *
3066 ***************************************************/ 3074 ***************************************************/
3067 static GtkItemFactoryEntry blist_menu[] = 3075 static GtkItemFactoryEntry blist_menu[] =
3091 { N_("/_Accounts"), NULL, NULL, 0, "<Branch>", NULL }, 3099 { N_("/_Accounts"), NULL, NULL, 0, "<Branch>", NULL },
3092 { N_("/Accounts/Manage"), "<CTL>A", pidgin_accounts_window_show, 0, "<Item>", NULL }, 3100 { N_("/Accounts/Manage"), "<CTL>A", pidgin_accounts_window_show, 0, "<Item>", NULL },
3093 3101
3094 /* Tools */ 3102 /* Tools */
3095 { N_("/_Tools"), NULL, NULL, 0, "<Branch>", NULL }, 3103 { N_("/_Tools"), NULL, NULL, 0, "<Branch>", NULL },
3096 { N_("/Tools/Buddy _Pounces"), NULL, pidgin_pounces_manager_show, 0, "<Item>", NULL }, 3104 { N_("/Tools/Buddy _Pounces"), NULL, pidgin_blist_show_with_parent, (int)pidgin_pounces_manager_show_with_parent, "<Item>", NULL },
3097 { N_("/Tools/_Certificates"), NULL, pidgin_certmgr_show, 0, "<Item>", NULL }, 3105 { N_("/Tools/_Certificates"), NULL, pidgin_certmgr_show, 0, "<Item>", NULL },
3098 { N_("/Tools/Plu_gins"), "<CTL>U", pidgin_plugin_dialog_show, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_PLUGINS }, 3106 { N_("/Tools/Plu_gins"), "<CTL>U", pidgin_blist_show_with_parent, (int)pidgin_plugin_dialog_show_with_parent, "<StockItem>", PIDGIN_STOCK_TOOLBAR_PLUGINS },
3099 { N_("/Tools/Pr_eferences"), "<CTL>P", pidgin_prefs_show, 0, "<StockItem>", GTK_STOCK_PREFERENCES }, 3107 { N_("/Tools/Pr_eferences"), "<CTL>P", pidgin_prefs_show, 0, "<StockItem>", GTK_STOCK_PREFERENCES },
3100 { N_("/Tools/Pr_ivacy"), NULL, pidgin_privacy_dialog_show, 0, "<Item>", NULL }, 3108 { N_("/Tools/Pr_ivacy"), NULL, pidgin_privacy_dialog_show, 0, "<Item>", NULL },
3101 { "/Tools/sep2", NULL, NULL, 0, "<Separator>", NULL }, 3109 { "/Tools/sep2", NULL, NULL, 0, "<Separator>", NULL },
3102 { N_("/Tools/_File Transfers"), "<CTL>T", pidgin_xfer_dialog_show, 0, "<Item>", NULL }, 3110 { N_("/Tools/_File Transfers"), "<CTL>T", pidgin_xfer_dialog_show, 0, "<Item>", NULL },
3103 { N_("/Tools/R_oom List"), NULL, pidgin_roomlist_dialog_show, 0, "<Item>", NULL }, 3111 { N_("/Tools/R_oom List"), NULL, pidgin_roomlist_dialog_show, 0, "<Item>", NULL },
3104 { N_("/Tools/System _Log"), NULL, gtk_blist_show_systemlog_cb, 0, "<Item>", NULL }, 3112 { N_("/Tools/System _Log"), NULL, pidgin_blist_show_with_parent, (int)pidgin_syslog_show_with_parent, "<Item>", NULL },
3105 { "/Tools/sep3", NULL, NULL, 0, "<Separator>", NULL }, 3113 { "/Tools/sep3", NULL, NULL, 0, "<Separator>", NULL },
3106 { N_("/Tools/Mute _Sounds"), "<CTL>S", pidgin_blist_mute_sounds_cb, 0, "<CheckItem>", NULL }, 3114 { N_("/Tools/Mute _Sounds"), "<CTL>S", pidgin_blist_mute_sounds_cb, 0, "<CheckItem>", NULL },
3107 /* Help */ 3115 /* Help */
3108 { N_("/_Help"), NULL, NULL, 0, "<Branch>", NULL }, 3116 { N_("/_Help"), NULL, NULL, 0, "<Branch>", NULL },
3109 { N_("/Help/Online _Help"), "F1", gtk_blist_show_onlinehelp_cb, 0, "<StockItem>", GTK_STOCK_HELP }, 3117 { N_("/Help/Online _Help"), "F1", gtk_blist_show_onlinehelp_cb, 0, "<StockItem>", GTK_STOCK_HELP },
3110 { N_("/Help/_Debug Window"), NULL, toggle_debug, 0, "<Item>", NULL }, 3118 { N_("/Help/_Debug Window"), NULL, toggle_debug, 0, "<Item>", NULL },
3111 #if GTK_CHECK_VERSION(2,6,0) 3119 #if GTK_CHECK_VERSION(2,6,0)
3112 { N_("/Help/_About"), NULL, pidgin_dialogs_about, 0, "<StockItem>", GTK_STOCK_ABOUT }, 3120 { N_("/Help/_About"), NULL, pidgin_blist_show_with_parent, (int)pidgin_dialogs_about_with_parent, "<StockItem>", GTK_STOCK_ABOUT },
3113 #else 3121 #else
3114 { N_("/Help/_About"), NULL, pidgin_dialogs_about, 0, "<Item>", NULL }, 3122 { N_("/Help/_About"), NULL, pidgin_blist_show_with_parent, (int)pidgin_dialogs_about_with_parent, "<Item>", NULL },
3115 #endif 3123 #endif
3116 }; 3124 };
3117 3125
3118 /********************************************************* 3126 /*********************************************************
3119 * Private Utility functions * 3127 * Private Utility functions *
3385 ret = gdk_pixbuf_new_from_file(path, NULL); 3393 ret = gdk_pixbuf_new_from_file(path, NULL);
3386 g_free(path); 3394 g_free(path);
3387 return ret; 3395 return ret;
3388 } 3396 }
3389 3397
3390 if (purple_status_get_attr_string(purple_presence_get_active_status(p), PURPLE_TUNE_TITLE)) { 3398 if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_TUNE)) {
3391 path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emblems", "16", "music.png", NULL); 3399 path = g_build_filename(DATADIR, "pixmaps", "pidgin", "emblems", "16", "music.png", NULL);
3392 ret = gdk_pixbuf_new_from_file(path, NULL); 3400 ret = gdk_pixbuf_new_from_file(path, NULL);
3393 g_free(path); 3401 g_free(path);
3394 return ret; 3402 return ret;
3395 } 3403 }
3854 3862
3855 widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Buddies/Add Chat...")); 3863 widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Buddies/Add Chat..."));
3856 gtk_widget_set_sensitive(widget, pidgin_blist_joinchat_is_showable()); 3864 gtk_widget_set_sensitive(widget, pidgin_blist_joinchat_is_showable());
3857 3865
3858 widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Privacy")); 3866 widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Privacy"));
3859 gtk_widget_set_sensitive(widget, (purple_connections_get_all() != NULL)); 3867 gtk_widget_set_sensitive(widget, sensitive);
3860 3868
3861 widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Room List")); 3869 widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Room List"));
3862 gtk_widget_set_sensitive(widget, pidgin_roomlist_is_showable()); 3870 gtk_widget_set_sensitive(widget, pidgin_roomlist_is_showable());
3863 } 3871 }
3864 3872
4362 primary = g_strdup_printf(_("%s disconnected"), 4370 primary = g_strdup_printf(_("%s disconnected"),
4363 purple_account_get_username(account)); 4371 purple_account_get_username(account));
4364 text = g_hash_table_lookup(gtkblist->connection_errors, account); 4372 text = g_hash_table_lookup(gtkblist->connection_errors, account);
4365 4373
4366 enabled = purple_account_get_enabled(account, purple_core_get_ui()); 4374 enabled = purple_account_get_enabled(account, purple_core_get_ui());
4367 purple_request_action(account, _("Connection Error"), primary, text, 2, 4375 purple_request_action_with_hint(account, _("Connection Error"), primary, text, 2,
4368 account, NULL, NULL, 4376 account, NULL, NULL,
4369 account, 3, 4377 PURPLE_REQUEST_UI_HINT_ACCOUNT, account, 3,
4370 _("OK"), NULL, 4378 _("OK"), NULL,
4371 _("Modify Account"), PURPLE_CALLBACK(ce_modify_account_cb), 4379 _("Modify Account"), PURPLE_CALLBACK(ce_modify_account_cb),
4372 enabled ? _("Connect") : _("Re-enable Account"), 4380 enabled ? _("Connect") : _("Re-enable Account"),
4373 enabled ? PURPLE_CALLBACK(purple_account_connect) : 4381 enabled ? PURPLE_CALLBACK(purple_account_connect) :
4374 PURPLE_CALLBACK(ce_enable_account_cb)); 4382 PURPLE_CALLBACK(ce_enable_account_cb));
5826 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); 5834 gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE));
5827 5835
5828 gtkblist = PIDGIN_BLIST(purple_get_blist()); 5836 gtkblist = PIDGIN_BLIST(purple_get_blist());
5829 5837
5830 data->window = gtk_dialog_new_with_buttons(_("Add Buddy"), 5838 data->window = gtk_dialog_new_with_buttons(_("Add Buddy"),
5831 NULL, GTK_DIALOG_NO_SEPARATOR, 5839 gtkblist ? GTK_WINDOW(gtkblist->window) : NULL, GTK_DIALOG_NO_SEPARATOR,
5832 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 5840 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
5833 GTK_STOCK_ADD, GTK_RESPONSE_OK, 5841 GTK_STOCK_ADD, GTK_RESPONSE_OK,
5834 NULL); 5842 NULL);
5835 5843
5844 if (gtkblist)
5845 gtk_window_set_transient_for(GTK_WINDOW(data->window), GTK_WINDOW(gtkblist->window));
5836 gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); 5846 gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK);
5837 gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE); 5847 gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE);
5838 gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); 5848 gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE);
5839 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER); 5849 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER);
5840 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); 5850 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE);
6208 gtkblist = PIDGIN_BLIST(purple_get_blist()); 6218 gtkblist = PIDGIN_BLIST(purple_get_blist());
6209 6219
6210 data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); 6220 data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
6211 6221
6212 data->window = gtk_dialog_new_with_buttons(_("Add Chat"), 6222 data->window = gtk_dialog_new_with_buttons(_("Add Chat"),
6213 NULL, GTK_DIALOG_NO_SEPARATOR, 6223 gtkblist ? GTK_WINDOW(gtkblist->window) : NULL, GTK_DIALOG_NO_SEPARATOR,
6214 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 6224 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
6215 GTK_STOCK_ADD, GTK_RESPONSE_OK, 6225 GTK_STOCK_ADD, GTK_RESPONSE_OK,
6216 NULL); 6226 NULL);
6217 6227
6228 if (gtkblist)
6229 gtk_window_set_transient_for(GTK_WINDOW(data->window), GTK_WINDOW(gtkblist->window));
6218 gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); 6230 gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK);
6219 gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE); 6231 gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE);
6220 gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); 6232 gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE);
6221 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER); 6233 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER);
6222 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); 6234 gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE);
6316 } 6328 }
6317 6329
6318 static void 6330 static void
6319 pidgin_blist_request_add_group(void) 6331 pidgin_blist_request_add_group(void)
6320 { 6332 {
6321 purple_request_input(NULL, _("Add Group"), NULL, 6333 purple_request_input_with_hint(NULL, _("Add Group"), NULL,
6322 _("Please enter the name of the group to be added."), 6334 _("Please enter the name of the group to be added."),
6323 NULL, FALSE, FALSE, NULL, 6335 NULL, FALSE, FALSE, NULL,
6324 _("Add"), G_CALLBACK(add_group_cb), 6336 _("Add"), G_CALLBACK(add_group_cb),
6325 _("Cancel"), NULL, 6337 _("Cancel"), NULL,
6326 NULL, NULL, NULL, 6338 NULL, NULL, NULL,
6327 NULL); 6339 PURPLE_REQUEST_UI_HINT_BLIST, NULL);
6328 } 6340 }
6329 6341
6330 void 6342 void
6331 pidgin_blist_toggle_visibility() 6343 pidgin_blist_toggle_visibility()
6332 { 6344 {