Mercurial > pidgin
comparison src/gtkblist.c @ 8143:8633dc570442
[gaim-migrate @ 8851]
sf cvs fing sucks.
This is the rest of the accessibility stuff from that cool Nathan guy.
It makes shift+f10 bring up context menus. Please check over stuff and
make sure neither of us broke anything.
Also, someone think of a good way to phrase that thing about this that's
in the ChangeLog.
Thank you, and have a nice day.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Mon, 19 Jan 2004 22:40:17 +0000 |
parents | 4971193f761d |
children | 7c45eb829340 |
comparison
equal
deleted
inserted
replaced
8142:f2919ca98e78 | 8143:8633dc570442 |
---|---|
871 } | 871 } |
872 | 872 |
873 return FALSE; | 873 return FALSE; |
874 } | 874 } |
875 | 875 |
876 static gboolean gtk_blist_button_press_cb(GtkWidget *tv, GdkEventButton *event, gpointer null) | 876 static GtkWidget * |
877 create_group_menu (GaimBlistNode *node) | |
878 { | |
879 GtkWidget *menu; | |
880 | |
881 menu = gtk_menu_new(); | |
882 gaim_new_item_from_stock(menu, _("Add a _Buddy"), GTK_STOCK_ADD, | |
883 G_CALLBACK(gaim_gtk_blist_add_buddy_cb), node, 0, 0, NULL); | |
884 gaim_new_item_from_stock(menu, _("Add a C_hat"), GTK_STOCK_ADD, | |
885 G_CALLBACK(gaim_gtk_blist_add_chat_cb), node, 0, 0, NULL); | |
886 gaim_new_item_from_stock(menu, _("_Delete Group"), GTK_STOCK_REMOVE, | |
887 G_CALLBACK(gaim_gtk_blist_remove_cb), node, 0, 0, NULL); | |
888 gaim_new_item_from_stock(menu, _("_Rename"), NULL, | |
889 G_CALLBACK(show_rename_group), node, 0, 0, NULL); | |
890 return menu; | |
891 } | |
892 | |
893 static GtkWidget * | |
894 create_chat_menu (GaimBlistNode *node) | |
895 { | |
896 GtkWidget *menu; | |
897 gboolean autojoin = gaim_blist_node_get_bool(node, | |
898 "gtk-autojoin"); | |
899 | |
900 menu = gtk_menu_new(); | |
901 gaim_new_item_from_stock(menu, _("_Join"), GAIM_STOCK_CHAT, | |
902 G_CALLBACK(gtk_blist_menu_join_cb), node, 0, 0, NULL); | |
903 gaim_new_check_item(menu, _("Auto-Join"), | |
904 G_CALLBACK(gtk_blist_menu_autojoin_cb), node, | |
905 autojoin); | |
906 gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_EDIT, | |
907 G_CALLBACK(gtk_blist_menu_alias_cb), node, 0, 0, NULL); | |
908 gaim_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE, | |
909 G_CALLBACK(gaim_gtk_blist_remove_cb), node, 0, 0, NULL); | |
910 return menu; | |
911 } | |
912 | |
913 static GtkWidget * | |
914 create_contact_menu (GaimBlistNode *node) | |
915 { | |
916 GtkWidget *menu; | |
917 | |
918 menu = gtk_menu_new(); | |
919 gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_EDIT, | |
920 G_CALLBACK(gtk_blist_menu_alias_cb), node, 0, 0, NULL); | |
921 gaim_new_item_from_stock(menu, _("_Collapse"), GTK_STOCK_ZOOM_OUT, | |
922 G_CALLBACK(gaim_gtk_blist_collapse_contact_cb), | |
923 node, 0, 0, NULL); | |
924 gaim_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE, | |
925 G_CALLBACK(gaim_gtk_blist_remove_cb), node, 0, 0, NULL); | |
926 return menu; | |
927 } | |
928 | |
929 static GtkWidget * | |
930 create_buddy_menu (GaimBlistNode *node, | |
931 GaimBuddy *b, | |
932 GaimPlugin *prpl, | |
933 GaimPluginProtocolInfo *prpl_info) | |
934 { | |
935 struct _gaim_gtk_blist_node *gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; | |
936 GtkWidget *menu; | |
937 GtkWidget *menuitem; | |
938 gboolean show_offline = gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies"); | |
939 | |
940 menu = gtk_menu_new(); | |
941 make_buddy_menu(menu, prpl_info, b); | |
942 | |
943 if(GAIM_BLIST_NODE_IS_CONTACT(node)) { | |
944 gaim_separator(menu); | |
945 | |
946 if(gtknode->contact_expanded) { | |
947 gaim_new_item_from_stock(menu, _("_Collapse"), | |
948 GTK_STOCK_ZOOM_OUT, | |
949 G_CALLBACK(gaim_gtk_blist_collapse_contact_cb), | |
950 node, 0, 0, NULL); | |
951 } else { | |
952 gaim_new_item_from_stock(menu, _("_Expand"), | |
953 GTK_STOCK_ZOOM_IN, | |
954 G_CALLBACK(gaim_gtk_blist_expand_contact_cb), node, | |
955 0, 0, NULL); | |
956 } | |
957 if(node->child->next) { | |
958 GaimBlistNode *bnode; | |
959 | |
960 for(bnode = node->child; bnode; bnode = bnode->next) { | |
961 GaimBuddy *buddy = (GaimBuddy*)bnode; | |
962 GtkWidget *submenu; | |
963 GtkWidget *image; | |
964 | |
965 if(buddy == b) | |
966 continue; | |
967 if(!buddy->account->gc) | |
968 continue; | |
969 if(!show_offline && !GAIM_BUDDY_IS_ONLINE(buddy)) | |
970 continue; | |
971 | |
972 menuitem = gtk_image_menu_item_new_with_label(buddy->name); | |
973 image = gtk_image_new_from_pixbuf( | |
974 gaim_gtk_blist_get_status_icon(bnode, | |
975 GAIM_STATUS_ICON_SMALL)); | |
976 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), | |
977 image); | |
978 gtk_widget_show(image); | |
979 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
980 gtk_widget_show(menuitem); | |
981 | |
982 submenu = gtk_menu_new(); | |
983 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); | |
984 gtk_widget_show(submenu); | |
985 | |
986 prpl = gaim_find_prpl(gaim_account_get_protocol_id(buddy->account)); | |
987 prpl_info = prpl ? GAIM_PLUGIN_PROTOCOL_INFO(prpl) : NULL; | |
988 | |
989 make_buddy_menu(submenu, prpl_info, buddy); | |
990 } | |
991 } | |
992 } | |
993 return menu; | |
994 } | |
995 | |
996 static gboolean | |
997 gaim_gtk_blist_show_context_menu(GaimBlistNode *node, | |
998 GtkMenuPositionFunc func, | |
999 GtkWidget *tv, | |
1000 guint button, | |
1001 guint32 time) | |
1002 { | |
1003 struct _gaim_gtk_blist_node *gtknode; | |
1004 GtkWidget *menu = NULL; | |
1005 gboolean handled = FALSE; | |
1006 | |
1007 gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; | |
1008 | |
1009 /* Create a menu based on the thing we right-clicked on */ | |
1010 if (GAIM_BLIST_NODE_IS_GROUP(node)) { | |
1011 menu = create_group_menu(node); | |
1012 } else if (GAIM_BLIST_NODE_IS_CHAT(node)) { | |
1013 menu = create_chat_menu(node); | |
1014 } else if ((GAIM_BLIST_NODE_IS_CONTACT(node)) && (gtknode->contact_expanded)) { | |
1015 menu = create_contact_menu(node); | |
1016 } else if (GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_BUDDY(node)) { | |
1017 GaimBuddy *b; | |
1018 GaimPlugin *prpl = NULL; | |
1019 GaimPluginProtocolInfo *prpl_info = NULL; | |
1020 | |
1021 if (GAIM_BLIST_NODE_IS_CONTACT(node)) | |
1022 b = gaim_contact_get_priority_buddy((GaimContact*)node); | |
1023 else | |
1024 b = (GaimBuddy *)node; | |
1025 | |
1026 prpl = gaim_find_prpl(gaim_account_get_protocol_id(b->account)); | |
1027 if (prpl != NULL) | |
1028 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); | |
1029 menu = create_buddy_menu(node, b, prpl, prpl_info); | |
1030 } | |
1031 | |
1032 /* Now display the menu */ | |
1033 if (menu != NULL) { | |
1034 gtk_widget_show_all(menu); | |
1035 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, func, tv, button, time); | |
1036 handled = TRUE; | |
1037 } | |
1038 | |
1039 return handled; | |
1040 } | |
1041 | |
1042 static gboolean gtk_blist_button_press_cb(GtkWidget *tv, GdkEventButton *event, gpointer user_data) | |
877 { | 1043 { |
878 GtkTreePath *path; | 1044 GtkTreePath *path; |
879 GaimBlistNode *node; | 1045 GaimBlistNode *node; |
880 GValue val = { 0, }; | 1046 GValue val = { 0, }; |
881 GtkTreeIter iter; | 1047 GtkTreeIter iter; |
882 GtkWidget *menu, *menuitem; | |
883 GtkTreeSelection *sel; | 1048 GtkTreeSelection *sel; |
884 GaimPlugin *prpl = NULL; | 1049 GaimPlugin *prpl = NULL; |
885 GaimPluginProtocolInfo *prpl_info = NULL; | 1050 GaimPluginProtocolInfo *prpl_info = NULL; |
886 struct _gaim_gtk_blist_node *gtknode; | 1051 struct _gaim_gtk_blist_node *gtknode; |
887 gboolean handled = FALSE; | 1052 gboolean handled = FALSE; |
888 | 1053 |
889 /* Here we figure out which node was clicked */ | 1054 /* Here we figure out which node was clicked */ |
890 if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), event->x, event->y, &path, NULL, NULL, NULL)) | 1055 if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), event->x, event->y, &path, NULL, NULL, NULL)) |
891 return FALSE; | 1056 return FALSE; |
892 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); | 1057 gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); |
893 gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); | 1058 gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); |
894 node = g_value_get_pointer(&val); | 1059 node = g_value_get_pointer(&val); |
895 gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; | 1060 gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; |
896 | 1061 |
897 if (GAIM_BLIST_NODE_IS_GROUP(node) && | 1062 /* Right click draws a context menu */ |
898 event->button == 3 && event->type == GDK_BUTTON_PRESS) { | 1063 if ((event->button == 3) && (event->type == GDK_BUTTON_PRESS)) { |
899 menu = gtk_menu_new(); | 1064 handled = gaim_gtk_blist_show_context_menu(node, NULL, tv, 3, event->time); |
900 gaim_new_item_from_stock(menu, _("Add a _Buddy"), GTK_STOCK_ADD, | 1065 |
901 G_CALLBACK(gaim_gtk_blist_add_buddy_cb), node, 0, 0, NULL); | 1066 /* CTRL+middle click expands or collapse a contact */ |
902 gaim_new_item_from_stock(menu, _("Add a C_hat"), GTK_STOCK_ADD, | 1067 } else if ((event->button == 2) && (event->type == GDK_BUTTON_PRESS) && |
903 G_CALLBACK(gaim_gtk_blist_add_chat_cb), node, 0, 0, NULL); | 1068 (event->state & GDK_CONTROL_MASK) && (GAIM_BLIST_NODE_IS_CONTACT(node))) { |
904 gaim_new_item_from_stock(menu, _("_Delete Group"), GTK_STOCK_REMOVE, | 1069 if (gtknode->contact_expanded) |
905 G_CALLBACK(gaim_gtk_blist_remove_cb), node, 0, 0, NULL); | |
906 gaim_new_item_from_stock(menu, _("_Rename"), NULL, | |
907 G_CALLBACK(show_rename_group), node, 0, 0, NULL); | |
908 gtk_widget_show_all(menu); | |
909 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); | |
910 | |
911 handled = TRUE; | |
912 } else if (GAIM_BLIST_NODE_IS_CHAT(node) && | |
913 event->button == 3 && event->type == GDK_BUTTON_PRESS) { | |
914 GaimChat *chat = (GaimChat *)node; | |
915 gboolean autojoin = gaim_blist_node_get_bool((GaimBlistNode*)chat, | |
916 "gtk-autojoin"); | |
917 | |
918 menu = gtk_menu_new(); | |
919 gaim_new_item_from_stock(menu, _("_Join"), GAIM_STOCK_CHAT, | |
920 G_CALLBACK(gtk_blist_menu_join_cb), node, 0, 0, NULL); | |
921 gaim_new_check_item(menu, _("Auto-Join"), | |
922 G_CALLBACK(gtk_blist_menu_autojoin_cb), node, | |
923 autojoin); | |
924 gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_EDIT, | |
925 G_CALLBACK(gtk_blist_menu_alias_cb), node, 0, 0, NULL); | |
926 gaim_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE, | |
927 G_CALLBACK(gaim_gtk_blist_remove_cb), node, 0, 0, NULL); | |
928 gtk_widget_show_all(menu); | |
929 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); | |
930 | |
931 handled = TRUE; | |
932 } else if (GAIM_BLIST_NODE_IS_CONTACT(node) && | |
933 event->state & GDK_CONTROL_MASK && event->button == 2 && | |
934 event->type == GDK_BUTTON_PRESS) { | |
935 if(gtknode->contact_expanded) | |
936 gaim_gtk_blist_collapse_contact_cb(NULL, node); | 1070 gaim_gtk_blist_collapse_contact_cb(NULL, node); |
937 else | 1071 else |
938 gaim_gtk_blist_expand_contact_cb(NULL, node); | 1072 gaim_gtk_blist_expand_contact_cb(NULL, node); |
939 handled = TRUE; | 1073 handled = TRUE; |
940 } else if (GAIM_BLIST_NODE_IS_CONTACT(node) && gtknode->contact_expanded | 1074 |
941 && event->button == 3 && event->type == GDK_BUTTON_PRESS) { | 1075 /* Double middle click gets info */ |
942 menu = gtk_menu_new(); | 1076 } else if ((event->button == 2) && (event->type == GDK_2BUTTON_PRESS) && |
943 gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_EDIT, | 1077 ((GAIM_BLIST_NODE_IS_CONTACT(node)) || (GAIM_BLIST_NODE_IS_BUDDY(node)))) { |
944 G_CALLBACK(gtk_blist_menu_alias_cb), node, 0, 0, NULL); | |
945 gaim_new_item_from_stock(menu, _("_Collapse"), GTK_STOCK_ZOOM_OUT, | |
946 G_CALLBACK(gaim_gtk_blist_collapse_contact_cb), | |
947 node, 0, 0, NULL); | |
948 gaim_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE, | |
949 G_CALLBACK(gaim_gtk_blist_remove_cb), node, 0, 0, NULL); | |
950 gtk_widget_show_all(menu); | |
951 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time); | |
952 handled = TRUE; | |
953 } else if (GAIM_BLIST_NODE_IS_CONTACT(node) || | |
954 GAIM_BLIST_NODE_IS_BUDDY(node)) { | |
955 GaimBuddy *b; | 1078 GaimBuddy *b; |
956 if(GAIM_BLIST_NODE_IS_CONTACT(node)) | 1079 if(GAIM_BLIST_NODE_IS_CONTACT(node)) |
957 b = gaim_contact_get_priority_buddy((GaimContact*)node); | 1080 b = gaim_contact_get_priority_buddy((GaimContact*)node); |
958 else | 1081 else |
959 b = (GaimBuddy *)node; | 1082 b = (GaimBuddy *)node; |
960 | 1083 |
961 /* Protocol specific options */ | |
962 prpl = gaim_find_prpl(gaim_account_get_protocol_id(b->account)); | 1084 prpl = gaim_find_prpl(gaim_account_get_protocol_id(b->account)); |
963 | |
964 if (prpl != NULL) | 1085 if (prpl != NULL) |
965 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); | 1086 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); |
966 | 1087 |
967 if(event->button == 2 && event->type == GDK_2BUTTON_PRESS) { | 1088 if (prpl && prpl_info->get_info) |
968 if (prpl && prpl_info->get_info) | 1089 serv_get_info(b->account->gc, b->name); |
969 serv_get_info(b->account->gc, b->name); | 1090 handled = TRUE; |
970 handled = TRUE; | 1091 } |
971 } else if(event->button == 3 && event->type == GDK_BUTTON_PRESS) { | 1092 |
972 gboolean show_offline = gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies"); | 1093 #if (1) |
973 menu = gtk_menu_new(); | 1094 /* |
974 make_buddy_menu(menu, prpl_info, b); | 1095 * This code only exists because GTK doesn't work. If we return |
975 | 1096 * FALSE here, as would be normal the event propoagates down and |
976 if(GAIM_BLIST_NODE_IS_CONTACT(node)) { | 1097 * somehow gets interpreted as the start of a drag event. |
977 gaim_separator(menu); | 1098 * |
978 | 1099 * Um, isn't it _normal_ to return TRUE here? Since the event |
979 if(gtknode->contact_expanded) { | 1100 * was handled? --Mark |
980 gaim_new_item_from_stock(menu, _("_Collapse"), | 1101 */ |
981 GTK_STOCK_ZOOM_OUT, | |
982 G_CALLBACK(gaim_gtk_blist_collapse_contact_cb), | |
983 node, 0, 0, NULL); | |
984 } else { | |
985 gaim_new_item_from_stock(menu, _("_Expand"), | |
986 GTK_STOCK_ZOOM_IN, | |
987 G_CALLBACK(gaim_gtk_blist_expand_contact_cb), node, | |
988 0, 0, NULL); | |
989 } | |
990 if(node->child->next) { | |
991 GaimBlistNode *bnode; | |
992 | |
993 for(bnode = node->child; bnode; bnode = bnode->next) { | |
994 GaimBuddy *buddy = (GaimBuddy*)bnode; | |
995 GtkWidget *submenu; | |
996 GtkWidget *image; | |
997 | |
998 if(buddy == b) | |
999 continue; | |
1000 if(!buddy->account->gc) | |
1001 continue; | |
1002 if(!show_offline && !GAIM_BUDDY_IS_ONLINE(buddy)) | |
1003 continue; | |
1004 | |
1005 | |
1006 menuitem = gtk_image_menu_item_new_with_label(buddy->name); | |
1007 image = gtk_image_new_from_pixbuf( | |
1008 gaim_gtk_blist_get_status_icon(bnode, | |
1009 GAIM_STATUS_ICON_SMALL)); | |
1010 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), | |
1011 image); | |
1012 gtk_widget_show(image); | |
1013 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
1014 gtk_widget_show(menuitem); | |
1015 | |
1016 submenu = gtk_menu_new(); | |
1017 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); | |
1018 gtk_widget_show(submenu); | |
1019 | |
1020 prpl = gaim_find_prpl(gaim_account_get_protocol_id(buddy->account)); | |
1021 prpl_info = prpl ? GAIM_PLUGIN_PROTOCOL_INFO(prpl) : NULL; | |
1022 | |
1023 make_buddy_menu(submenu, prpl_info, buddy); | |
1024 } | |
1025 } | |
1026 } | |
1027 | |
1028 gtk_widget_show_all(menu); | |
1029 | |
1030 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, | |
1031 event->time); | |
1032 | |
1033 handled = TRUE; | |
1034 } | |
1035 } | |
1036 | |
1037 #if (1) /* This code only exists because GTK doesn't work. If we return FALSE here, as would be normal | |
1038 * the event propoagates down and somehow gets interpreted as the start of a drag event. */ | |
1039 if(handled) { | 1102 if(handled) { |
1040 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); | 1103 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); |
1041 gtk_tree_selection_select_path(sel, path); | 1104 gtk_tree_selection_select_path(sel, path); |
1042 gtk_tree_path_free(path); | 1105 gtk_tree_path_free(path); |
1043 return TRUE; | 1106 return TRUE; |
1044 } | 1107 } |
1045 #endif | 1108 #endif |
1046 gtk_tree_path_free(path); | 1109 gtk_tree_path_free(path); |
1110 | |
1047 return FALSE; | 1111 return FALSE; |
1112 } | |
1113 | |
1114 static gboolean | |
1115 gaim_gtk_blist_popup_menu_cb(GtkWidget *tv, void *user_data) | |
1116 { | |
1117 GaimBlistNode *node; | |
1118 GValue val = { 0, }; | |
1119 GtkTreeIter iter; | |
1120 GtkTreeSelection *sel; | |
1121 gboolean handled = FALSE; | |
1122 | |
1123 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); | |
1124 if (!gtk_tree_selection_get_selected(sel, NULL, &iter)) | |
1125 return FALSE; | |
1126 | |
1127 gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), | |
1128 &iter, NODE_COLUMN, &val); | |
1129 node = g_value_get_pointer(&val); | |
1130 | |
1131 /* Shift+F10 draws a context menu */ | |
1132 handled = gaim_gtk_blist_show_context_menu(node, gaim_gtk_treeview_popup_menu_position_func, tv, 0, GDK_CURRENT_TIME); | |
1133 | |
1134 return handled; | |
1048 } | 1135 } |
1049 | 1136 |
1050 static void gaim_gtk_blist_show_empty_groups_cb(gpointer data, guint action, GtkWidget *item) | 1137 static void gaim_gtk_blist_show_empty_groups_cb(gpointer data, guint action, GtkWidget *item) |
1051 { | 1138 { |
1052 gaim_prefs_set_bool("/gaim/gtk/blist/show_empty_groups", | 1139 gaim_prefs_set_bool("/gaim/gtk/blist/show_empty_groups", |
1862 { | 1949 { |
1863 /* Buddies menu */ | 1950 /* Buddies menu */ |
1864 { N_("/_Buddies"), NULL, NULL, 0, "<Branch>" }, | 1951 { N_("/_Buddies"), NULL, NULL, 0, "<Branch>" }, |
1865 { N_("/Buddies/New Instant _Message..."), "<CTL>M", show_im_dialog, 0, "<StockItem>", GAIM_STOCK_IM }, | 1952 { N_("/Buddies/New Instant _Message..."), "<CTL>M", show_im_dialog, 0, "<StockItem>", GAIM_STOCK_IM }, |
1866 { N_("/Buddies/Join a _Chat..."), "<CTL>C", join_chat, 0, "<StockItem>", GAIM_STOCK_CHAT }, | 1953 { N_("/Buddies/Join a _Chat..."), "<CTL>C", join_chat, 0, "<StockItem>", GAIM_STOCK_CHAT }, |
1867 { N_("/Buddies/Get _User Info..."), "<CTL>J", show_info_dialog, 0, "<StockItem>", GAIM_STOCK_INFO }, | 1954 { N_("/Buddies/Get User _Info..."), "<CTL>I", show_info_dialog, 0, "<StockItem>", GAIM_STOCK_INFO }, |
1868 { "/Buddies/sep1", NULL, NULL, 0, "<Separator>" }, | 1955 { "/Buddies/sep1", NULL, NULL, 0, "<Separator>" }, |
1869 { N_("/Buddies/Show _Offline Buddies"), NULL, gaim_gtk_blist_edit_mode_cb, 1, "<CheckItem>"}, | 1956 { N_("/Buddies/Show _Offline Buddies"), NULL, gaim_gtk_blist_edit_mode_cb, 1, "<CheckItem>"}, |
1870 { N_("/Buddies/Show _Empty Groups"), NULL, gaim_gtk_blist_show_empty_groups_cb, 1, "<CheckItem>"}, | 1957 { N_("/Buddies/Show _Empty Groups"), NULL, gaim_gtk_blist_show_empty_groups_cb, 1, "<CheckItem>"}, |
1871 { N_("/Buddies/_Add Buddy..."), "<CTL>B", gaim_gtk_blist_add_buddy_cb, 0, "<StockItem>", GTK_STOCK_ADD }, | 1958 { N_("/Buddies/_Add Buddy..."), "<CTL>B", gaim_gtk_blist_add_buddy_cb, 0, "<StockItem>", GTK_STOCK_ADD }, |
1872 { N_("/Buddies/Add C_hat..."), NULL, gaim_gtk_blist_add_chat_cb, 0, "<StockItem>", GTK_STOCK_ADD }, | 1959 { N_("/Buddies/Add C_hat..."), NULL, gaim_gtk_blist_add_chat_cb, 0, "<StockItem>", GTK_STOCK_ADD }, |
2666 g_signal_connect(G_OBJECT(gtkblist->treeview), "row-activated", G_CALLBACK(gtk_blist_row_activated_cb), NULL); | 2753 g_signal_connect(G_OBJECT(gtkblist->treeview), "row-activated", G_CALLBACK(gtk_blist_row_activated_cb), NULL); |
2667 g_signal_connect(G_OBJECT(gtkblist->treeview), "row-expanded", G_CALLBACK(gtk_blist_row_expanded_cb), NULL); | 2754 g_signal_connect(G_OBJECT(gtkblist->treeview), "row-expanded", G_CALLBACK(gtk_blist_row_expanded_cb), NULL); |
2668 g_signal_connect(G_OBJECT(gtkblist->treeview), "row-collapsed", G_CALLBACK(gtk_blist_row_collapsed_cb), NULL); | 2755 g_signal_connect(G_OBJECT(gtkblist->treeview), "row-collapsed", G_CALLBACK(gtk_blist_row_collapsed_cb), NULL); |
2669 g_signal_connect(G_OBJECT(gtkblist->treeview), "button-press-event", G_CALLBACK(gtk_blist_button_press_cb), NULL); | 2756 g_signal_connect(G_OBJECT(gtkblist->treeview), "button-press-event", G_CALLBACK(gtk_blist_button_press_cb), NULL); |
2670 g_signal_connect(G_OBJECT(gtkblist->treeview), "key-press-event", G_CALLBACK(gtk_blist_key_press_cb), NULL); | 2757 g_signal_connect(G_OBJECT(gtkblist->treeview), "key-press-event", G_CALLBACK(gtk_blist_key_press_cb), NULL); |
2758 g_signal_connect(G_OBJECT(gtkblist->treeview), "popup-menu", G_CALLBACK(gaim_gtk_blist_popup_menu_cb), NULL); | |
2671 | 2759 |
2672 /* Enable CTRL+F searching */ | 2760 /* Enable CTRL+F searching */ |
2673 gtk_tree_view_set_search_column(GTK_TREE_VIEW(gtkblist->treeview), NAME_COLUMN); | 2761 gtk_tree_view_set_search_column(GTK_TREE_VIEW(gtkblist->treeview), NAME_COLUMN); |
2674 | 2762 |
2675 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sw, TRUE, TRUE, 0); | 2763 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sw, TRUE, TRUE, 0); |