comparison src/buddy.c @ 678:c72f58814e9f

[gaim-migrate @ 688] permit/deny stuff moved to prefs; permit/deny stuff works *properly* now, permit/deny stuff much more logical in preferences. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Tue, 15 Aug 2000 01:29:35 +0000
parents b3b5d9d18eea
children 4e3f5d9cacd5
comparison
equal deleted inserted replaced
677:05f6f7dabb7e 678:c72f58814e9f
68 static GtkTooltips *tips; 68 static GtkTooltips *tips;
69 static GtkWidget *editpane; 69 static GtkWidget *editpane;
70 static GtkWidget *buddypane; 70 static GtkWidget *buddypane;
71 static GtkWidget *permitpane; 71 static GtkWidget *permitpane;
72 static GtkWidget *edittree; 72 static GtkWidget *edittree;
73 static GtkWidget *permtree;
74 static GtkWidget *imbutton, *infobutton, *chatbutton; 73 static GtkWidget *imbutton, *infobutton, *chatbutton;
75 static GtkWidget *addbutton, *groupbutton, *rembutton; 74 static GtkWidget *addbutton, *groupbutton, *rembutton;
76 static GtkWidget *addpermbutton, *rempermbutton;
77 75
78 static int last_lag_us; 76 static int last_lag_us;
79 77
80 extern int ticker_prefs; 78 extern int ticker_prefs;
81 79
239 adjust_pic(groupbutton, _("Group"), NULL); 237 adjust_pic(groupbutton, _("Group"), NULL);
240 adjust_pic(rembutton, _("Remove"), (gchar **)daemon_buddydel_xpm); 238 adjust_pic(rembutton, _("Remove"), (gchar **)daemon_buddydel_xpm);
241 adjust_pic(chatbutton, _("Chat"), (gchar **)daemon_buddychat_xpm); 239 adjust_pic(chatbutton, _("Chat"), (gchar **)daemon_buddychat_xpm);
242 adjust_pic(imbutton, _("IM"), (gchar **)daemon_im_xpm); 240 adjust_pic(imbutton, _("IM"), (gchar **)daemon_im_xpm);
243 adjust_pic(infobutton, _("Info"), (gchar **)daemon_info_xpm); 241 adjust_pic(infobutton, _("Info"), (gchar **)daemon_info_xpm);
244 adjust_pic(addpermbutton, _("Add"), (gchar **)daemon_permadd_xpm); 242 /* adjust_pic(addpermbutton, _("Add"), (gchar **)daemon_permadd_xpm);
245 adjust_pic(rempermbutton, _("Remove"), (gchar **)daemon_permdel_xpm); 243 adjust_pic(rempermbutton, _("Remove"), (gchar **)daemon_permdel_xpm);
246 } else { 244 */ } else {
247 adjust_pic(addbutton, _("Add"), (gchar **)buddyadd_xpm); 245 adjust_pic(addbutton, _("Add"), (gchar **)buddyadd_xpm);
248 adjust_pic(groupbutton, _("Group"), NULL); 246 adjust_pic(groupbutton, _("Group"), NULL);
249 adjust_pic(rembutton, _("Remove"), (gchar **)buddydel_xpm); 247 adjust_pic(rembutton, _("Remove"), (gchar **)buddydel_xpm);
250 adjust_pic(chatbutton, _("Chat"), (gchar **)buddychat_xpm); 248 adjust_pic(chatbutton, _("Chat"), (gchar **)buddychat_xpm);
251 adjust_pic(imbutton, _("IM"), (gchar **)im_xpm); 249 adjust_pic(imbutton, _("IM"), (gchar **)im_xpm);
252 adjust_pic(infobutton, _("Info"), (gchar **)info_xpm); 250 adjust_pic(infobutton, _("Info"), (gchar **)info_xpm);
253 adjust_pic(addpermbutton, _("Add"), (gchar **)permadd_xpm); 251 /* adjust_pic(addpermbutton, _("Add"), (gchar **)permadd_xpm);
254 adjust_pic(rempermbutton, _("Remove"), (gchar **)permdel_xpm); 252 adjust_pic(rempermbutton, _("Remove"), (gchar **)permdel_xpm);
255 } 253 */ }
256 gtk_widget_hide(addbutton->parent); 254 gtk_widget_hide(addbutton->parent);
257 gtk_widget_show(addbutton->parent); 255 gtk_widget_show(addbutton->parent);
258 gtk_widget_hide(chatbutton->parent); 256 gtk_widget_hide(chatbutton->parent);
259 gtk_widget_show(chatbutton->parent); 257 gtk_widget_show(chatbutton->parent);
260 gtk_widget_hide(addpermbutton->parent); 258 /* gtk_widget_hide(addpermbutton->parent);
261 gtk_widget_show(addpermbutton->parent); 259 gtk_widget_show(addpermbutton->parent);
262 } 260 */}
263 261
264 262
265 263
266 #ifdef USE_APPLET 264 #ifdef USE_APPLET
267 gint applet_destroy_buddy( GtkWidget *widget, GdkEvent *event,gpointer *data ) { 265 gint applet_destroy_buddy( GtkWidget *widget, GdkEvent *event,gpointer *data ) {
552 do_export( (GtkWidget *) NULL, 0 ); 550 do_export( (GtkWidget *) NULL, 0 );
553 } 551 }
554 552
555 553
556 554
557 void build_permit_tree()
558 {
559 GtkWidget *ti;
560 GtkWidget *sub;
561 GList *plist = permit;
562 GList *dlist = deny;
563
564 gtk_tree_clear_items(GTK_TREE(permtree), 0, -1);
565
566 ti = gtk_tree_item_new_with_label(_("Permit"));
567 sub = gtk_tree_new();
568 gtk_widget_show(ti);
569 gtk_widget_show(sub);
570 gtk_tree_prepend(GTK_TREE(permtree), ti);
571 gtk_tree_item_set_subtree(GTK_TREE_ITEM(ti), sub);
572 gtk_tree_item_expand(GTK_TREE_ITEM(ti));
573
574 while(plist) {
575 ti = gtk_tree_item_new_with_label((char *)plist->data);
576 gtk_widget_show(ti);
577 gtk_tree_prepend(GTK_TREE(sub), ti);
578 plist = plist->next;
579 }
580
581
582 ti = gtk_tree_item_new_with_label(_("Deny"));
583 sub = gtk_tree_new();
584 gtk_widget_show(ti);
585 gtk_widget_show(sub);
586 gtk_tree_prepend(GTK_TREE(permtree), ti);
587 gtk_tree_item_set_subtree(GTK_TREE_ITEM(ti), sub);
588 gtk_tree_item_expand(GTK_TREE_ITEM(ti));
589
590 while(dlist) {
591 ti = gtk_tree_item_new_with_label((char *)dlist->data);
592 gtk_widget_show(ti);
593 gtk_tree_prepend(GTK_TREE(sub), ti);
594 dlist = dlist->next;
595 }
596
597
598 }
599 555
600 556
601 gboolean edit_drag_compare_func (GtkCTree *ctree, GtkCTreeNode *source_node, 557 gboolean edit_drag_compare_func (GtkCTree *ctree, GtkCTreeNode *source_node,
602 GtkCTreeNode *new_parent, GtkCTreeNode *new_sibling) 558 GtkCTreeNode *new_parent, GtkCTreeNode *new_sibling)
603 { 559 {
986 /* Nothing selected. */ 942 /* Nothing selected. */
987 } 943 }
988 update_num_groups(); 944 update_num_groups();
989 } 945 }
990 946
991 static void do_del_perm(GtkWidget *w, GtkTree *permtree)
992 {
993 GtkLabel *label, *plabel;
994 GtkWidget *item, *pitem;
995 char *c, *d;
996 GList *i;
997
998 GList *plist;
999 GList *dlist;
1000 int level;
1001
1002 plist = permit;
1003 dlist = deny;
1004
1005 i = GTK_TREE_SELECTION(permtree);
1006 if (i) {
1007 item = GTK_WIDGET(i->data);
1008 gtk_tree_unselect_child(GTK_TREE(permtree), item);
1009 label = GTK_LABEL(GTK_BIN(item)->child);
1010 gtk_label_get(label, &c);
1011 level = GTK_TREE(item->parent)->level;
1012 if (level > 0) {
1013 pitem = GTK_WIDGET(GTK_TREE(item->parent)->tree_owner);
1014 plabel = GTK_LABEL(GTK_BIN(pitem)->child);
1015 gtk_label_get(plabel, &d);
1016 if (!strcasecmp(d, _("Permit"))) {
1017 while(plist) {
1018 if (!strcasecmp((char *)(plist->data), c)) {
1019 permit = g_list_remove(permit, plist->data);
1020 break;
1021 }
1022
1023 plist = plist->next;
1024 }
1025
1026 } else {
1027 while(dlist) {
1028 if (!strcasecmp((char *)(dlist->data), c)) {
1029 deny = g_list_remove(deny, dlist->data);
1030
1031 break;
1032 }
1033 dlist = dlist->next;
1034 }
1035
1036 }
1037
1038
1039 } else {
1040 /* Can't delete groups here! :) */
1041 return;
1042 }
1043 serv_set_permit_deny();
1044 gtk_tree_clear_items(GTK_TREE(permtree), 0, -1);
1045 build_permit_tree();
1046 serv_save_config();
1047 }
1048 }
1049
1050
1051 947
1052 void gaimreg_callback(GtkWidget *widget) 948 void gaimreg_callback(GtkWidget *widget)
1053 { 949 {
1054 show_register_dialog(); 950 show_register_dialog();
1055 } 951 }
1129 1025
1130 void add_group_callback(GtkWidget *widget, void *dummy) 1026 void add_group_callback(GtkWidget *widget, void *dummy)
1131 { 1027 {
1132 show_add_group(); 1028 show_add_group();
1133 } 1029 }
1134
1135 void add_perm_callback(GtkWidget *widget, void *dummy)
1136 {
1137 show_add_perm(NULL);
1138 }
1139
1140 1030
1141 static void info_callback(GtkWidget *widget, GtkTree *tree) 1031 static void info_callback(GtkWidget *widget, GtkTree *tree)
1142 { 1032 {
1143 GList *i; 1033 GList *i;
1144 struct buddy *b = NULL; 1034 struct buddy *b = NULL;
1735 } 1625 }
1736 setup_buddy_chats(); 1626 setup_buddy_chats();
1737 } 1627 }
1738 1628
1739 1629
1740 static void set_permit(GtkWidget *w, int *data)
1741 {
1742 permdeny = (int)data;
1743 /* printf("BLAH BLAH %d %d", permdeny, (int) data); */
1744 /* We don't save this 'at home', it's on the server.
1745 * So, we gotta resend the config to the server. */
1746 serv_save_config();
1747 /* we do this here because we can :) */
1748 serv_set_permit_deny();
1749 }
1750
1751
1752 static void move_blist_window(GtkWidget *w, GdkEventConfigure *e, void *dummy) 1630 static void move_blist_window(GtkWidget *w, GdkEventConfigure *e, void *dummy)
1753 { 1631 {
1754 int x, y, width, height; 1632 int x, y, width, height;
1755 int save = 0; 1633 int save = 0;
1756 gdk_window_get_position(blist->window, &x, &y); 1634 gdk_window_get_position(blist->window, &x, &y);
1828 GtkWidget *notebook; 1706 GtkWidget *notebook;
1829 GtkWidget *label; 1707 GtkWidget *label;
1830 GtkWidget *bbox; 1708 GtkWidget *bbox;
1831 GtkWidget *permopt; 1709 GtkWidget *permopt;
1832 GtkWidget *tbox; 1710 GtkWidget *tbox;
1833 GtkWidget *xbox;
1834 GtkWidget *pbox;
1835 1711
1836 1712
1837 #ifdef USE_APPLET 1713 #ifdef USE_APPLET
1838 blist = gtk_window_new(GTK_WINDOW_DIALOG); 1714 blist = gtk_window_new(GTK_WINDOW_DIALOG);
1839 #else 1715 #else
2058 gtk_widget_show(tbox); 1934 gtk_widget_show(tbox);
2059 gtk_widget_show(bbox); 1935 gtk_widget_show(bbox);
2060 gtk_widget_show(editpane); 1936 gtk_widget_show(editpane);
2061 1937
2062 1938
2063 /* Permit/Deny */ 1939
2064
2065 permitpane = gtk_vbox_new(FALSE, 0);
2066
2067 permopt = gtk_radio_button_new_with_label(NULL, _("Allow anyone"));
2068 gtk_box_pack_start(GTK_BOX(permitpane), permopt, FALSE, FALSE, 0);
2069 gtk_signal_connect(GTK_OBJECT(permopt), "clicked", GTK_SIGNAL_FUNC(set_permit), (void *)1);
2070 gtk_widget_show(permopt);
2071 if (permdeny == 1)
2072 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(permopt), TRUE);
2073
2074 permopt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(permopt)), _("Permit some"));
2075 gtk_box_pack_start(GTK_BOX(permitpane), permopt, FALSE, FALSE, 0);
2076 gtk_signal_connect(GTK_OBJECT(permopt), "clicked", GTK_SIGNAL_FUNC(set_permit), (void *)3);
2077 gtk_widget_show(permopt);
2078 if (permdeny == 3)
2079 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(permopt), TRUE);
2080
2081
2082 permopt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(permopt)), _("Deny some"));
2083 gtk_box_pack_start(GTK_BOX(permitpane), permopt, FALSE, FALSE, 0);
2084 gtk_signal_connect(GTK_OBJECT(permopt), "clicked", GTK_SIGNAL_FUNC(set_permit), (void *)4);
2085 gtk_widget_show(permopt);
2086 if (permdeny == 4)
2087 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(permopt), TRUE);
2088
2089
2090
2091 addpermbutton = gtk_button_new_with_label(_("Add"));
2092 rempermbutton = gtk_button_new_with_label(_("Remove"));
2093
2094 if (display_options & OPT_DISP_COOL_LOOK)
2095 {
2096 gtk_button_set_relief(GTK_BUTTON(addpermbutton), GTK_RELIEF_NONE);
2097 gtk_button_set_relief(GTK_BUTTON(rempermbutton), GTK_RELIEF_NONE);
2098 }
2099
2100 permtree = gtk_tree_new();
2101 build_permit_tree();
2102 pbox = gtk_hbox_new(TRUE, 10);
2103 xbox = gtk_scrolled_window_new(NULL, NULL);
2104 /* Put the buttons in the box */
2105 gtk_box_pack_start(GTK_BOX(pbox), addpermbutton, TRUE, TRUE, 10);
2106 gtk_box_pack_start(GTK_BOX(pbox), rempermbutton, TRUE, TRUE, 10);
2107
2108
2109 gtk_tooltips_set_tip(tips, addpermbutton, _("Add buddy to permit/deny"), "Penguin");
2110 gtk_tooltips_set_tip(tips, rempermbutton, _("Remove buddy from permit/deny"), "Penguin");
2111 /* And the boxes in the box */
2112 gtk_box_pack_start(GTK_BOX(permitpane), xbox, TRUE, TRUE, 5);
2113 gtk_box_pack_start(GTK_BOX(permitpane), pbox, FALSE, FALSE, 5);
2114
2115 /* Handle closes right */
2116
2117
2118
2119 /* Finish up */
2120 gtk_widget_show(addpermbutton);
2121 gtk_widget_show(rempermbutton);
2122 gtk_widget_show(permtree);
2123 gtk_widget_show(xbox);
2124 gtk_widget_show(pbox);
2125 gtk_widget_show(permitpane);
2126
2127 1940
2128 1941
2129 label = gtk_label_new(_("Online")); 1942 label = gtk_label_new(_("Online"));
2130 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), buddypane, label); 1943 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), buddypane, label);
2131 label = gtk_label_new(_("Edit Buddies")); 1944 label = gtk_label_new(_("Edit Buddies"));
2132 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), editpane, label); 1945 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), editpane, label);
2133 label = gtk_label_new(_("Permit"));
2134 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), permitpane, label);
2135 1946
2136 gtk_widget_show_all(notebook); 1947 gtk_widget_show_all(notebook);
2137 1948
2138 /* Pack things in the vbox */ 1949 /* Pack things in the vbox */
2139 gtk_widget_show(vbox); 1950 gtk_widget_show(vbox);
2147 gtk_signal_connect(GTK_OBJECT(infobutton), "clicked", GTK_SIGNAL_FUNC(info_callback), buddies); 1958 gtk_signal_connect(GTK_OBJECT(infobutton), "clicked", GTK_SIGNAL_FUNC(info_callback), buddies);
2148 gtk_signal_connect(GTK_OBJECT(chatbutton), "clicked", GTK_SIGNAL_FUNC(chat_callback), buddies); 1959 gtk_signal_connect(GTK_OBJECT(chatbutton), "clicked", GTK_SIGNAL_FUNC(chat_callback), buddies);
2149 gtk_signal_connect(GTK_OBJECT(rembutton), "clicked", GTK_SIGNAL_FUNC(do_del_buddy), edittree); 1960 gtk_signal_connect(GTK_OBJECT(rembutton), "clicked", GTK_SIGNAL_FUNC(do_del_buddy), edittree);
2150 gtk_signal_connect(GTK_OBJECT(addbutton), "clicked", GTK_SIGNAL_FUNC(add_buddy_callback), NULL); 1961 gtk_signal_connect(GTK_OBJECT(addbutton), "clicked", GTK_SIGNAL_FUNC(add_buddy_callback), NULL);
2151 gtk_signal_connect(GTK_OBJECT(groupbutton), "clicked", GTK_SIGNAL_FUNC(add_group_callback), NULL); 1962 gtk_signal_connect(GTK_OBJECT(groupbutton), "clicked", GTK_SIGNAL_FUNC(add_group_callback), NULL);
2152 gtk_signal_connect(GTK_OBJECT(addpermbutton), "clicked", GTK_SIGNAL_FUNC(add_perm_callback), NULL);
2153 gtk_signal_connect(GTK_OBJECT(rempermbutton), "clicked", GTK_SIGNAL_FUNC(do_del_perm), permtree);
2154 gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0); 1963 gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
2155 gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0); 1964 gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
2156 1965
2157 gtk_container_add(GTK_CONTAINER(blist), vbox); 1966 gtk_container_add(GTK_CONTAINER(blist), vbox);
2158 1967
2169 /* The edit tree */ 1978 /* The edit tree */
2170 gtk_container_add(GTK_CONTAINER(tbox), edittree); 1979 gtk_container_add(GTK_CONTAINER(tbox), edittree);
2171 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(tbox), 1980 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(tbox),
2172 GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC); 1981 GTK_POLICY_NEVER,GTK_POLICY_AUTOMATIC);
2173 1982
2174
2175 /* The permit tree */
2176 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(xbox), permtree);
2177 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(xbox),
2178 GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
2179 1983
2180 gtk_window_set_title(GTK_WINDOW(blist), _("Gaim - Buddy List")); 1984 gtk_window_set_title(GTK_WINDOW(blist), _("Gaim - Buddy List"));
2181 1985
2182 if (general_options & OPT_GEN_SAVED_WINDOWS) { 1986 if (general_options & OPT_GEN_SAVED_WINDOWS) {
2183 if (blist_pos.width != 0) { /* Sanity check! */ 1987 if (blist_pos.width != 0) { /* Sanity check! */
2190 void refresh_buddy_window() 1994 void refresh_buddy_window()
2191 { 1995 {
2192 setup_buddy_chats(); 1996 setup_buddy_chats();
2193 1997
2194 build_edit_tree(); 1998 build_edit_tree();
2195 build_permit_tree(); 1999 build_permit_tree();
2196 2000
2197 update_button_pix(); 2001 update_button_pix();
2198 gtk_widget_show(blist); 2002 gtk_widget_show(blist);
2199 2003
2200 2004