comparison src/prefs.c @ 1030:38452403563b

[gaim-migrate @ 1040] updating the buddy list to work better with multiple connections. there are still a bunch of things fucked up with this but i wanted more people to start working on it than just me, especially since i won't be here this weekend. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Fri, 27 Oct 2000 07:53:32 +0000
parents 5bad25457843
children b288f17c2fb2
comparison
equal deleted inserted replaced
1029:740c6f933fe0 1030:38452403563b
402 #ifdef USE_APPLET 402 #ifdef USE_APPLET
403 gaim_button(_("Automatically show buddy list on sign on"), &general_options, OPT_GEN_APP_BUDDY_SHOW, box); 403 gaim_button(_("Automatically show buddy list on sign on"), &general_options, OPT_GEN_APP_BUDDY_SHOW, box);
404 #endif 404 #endif
405 405
406 gtk_widget_show(prefdialog); 406 gtk_widget_show(prefdialog);
407 }
408
409 static GtkWidget *permtree = NULL;
410
411 static void build_deny_tree()
412 {
413 GtkWidget *ti;
414 GtkWidget *sub;
415 GList *plist = permit;
416 GList *dlist = deny;
417
418 if (!permtree) return;
419
420 gtk_tree_clear_items(GTK_TREE(permtree), 0, -1);
421
422 ti = gtk_tree_item_new_with_label(_("Permit"));
423 sub = gtk_tree_new();
424 gtk_widget_show(ti);
425 gtk_widget_show(sub);
426 gtk_tree_prepend(GTK_TREE(permtree), ti);
427 gtk_tree_item_set_subtree(GTK_TREE_ITEM(ti), sub);
428 gtk_tree_item_expand(GTK_TREE_ITEM(ti));
429
430 while(plist) {
431 ti = gtk_tree_item_new_with_label((char *)plist->data);
432 gtk_widget_show(ti);
433 gtk_tree_prepend(GTK_TREE(sub), ti);
434 plist = plist->next;
435 }
436
437
438 ti = gtk_tree_item_new_with_label(_("Deny"));
439 sub = gtk_tree_new();
440 gtk_widget_show(ti);
441 gtk_widget_show(sub);
442 gtk_tree_prepend(GTK_TREE(permtree), ti);
443 gtk_tree_item_set_subtree(GTK_TREE_ITEM(ti), sub);
444 gtk_tree_item_expand(GTK_TREE_ITEM(ti));
445
446 while(dlist) {
447 ti = gtk_tree_item_new_with_label((char *)dlist->data);
448 gtk_widget_show(ti);
449 gtk_tree_prepend(GTK_TREE(sub), ti);
450 dlist = dlist->next;
451 }
452 }
453
454 static void do_del_perm(GtkWidget *w, GtkTree *ptree)
455 {
456 GtkLabel *label, *plabel;
457 GtkWidget *item, *pitem;
458 char *c, *d;
459 GList *i;
460
461 GList *plist;
462 GList *dlist;
463 int level;
464
465 plist = permit;
466 dlist = deny;
467
468 i = GTK_TREE_SELECTION(ptree);
469 if (i) {
470 item = GTK_WIDGET(i->data);
471 gtk_tree_unselect_child(GTK_TREE(ptree), item);
472 label = GTK_LABEL(GTK_BIN(item)->child);
473 gtk_label_get(label, &c);
474 level = GTK_TREE(item->parent)->level;
475 if (level > 0) {
476 pitem = GTK_WIDGET(GTK_TREE(item->parent)->tree_owner);
477 plabel = GTK_LABEL(GTK_BIN(pitem)->child);
478 gtk_label_get(plabel, &d);
479 if (!strcasecmp(d, _("Permit"))) {
480 while(plist) {
481 if (!strcasecmp((char *)(plist->data), c)) {
482 permit = g_list_remove(permit, plist->data);
483 break;
484 }
485
486 plist = plist->next;
487 }
488
489 } else {
490 while(dlist) {
491 if (!strcasecmp((char *)(dlist->data), c)) {
492 deny = g_list_remove(deny, dlist->data);
493
494 break;
495 }
496 dlist = dlist->next;
497 }
498
499 }
500
501
502 } else {
503 /* Can't delete groups here! :) */
504 return;
505 }
506 serv_set_permit_deny();
507 gtk_tree_clear_items(GTK_TREE(ptree), 0, -1);
508 build_permit_tree();
509 serv_save_config();
510 do_export(0, 0);
511 }
512 }
513
514
515 static void set_permit(GtkWidget *w, int *data)
516 {
517 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))) {
518 permdeny = (int)data;
519 if (blist) {
520 do_export(0, 0);
521 serv_save_config();
522 /* we do this here because we can :) */
523 serv_set_permit_deny();
524 }
525 }
526 }
527
528 static GtkWidget *deny_radio(char *label, int which, GtkWidget *box, GtkWidget *set)
529 {
530 GtkWidget *opt;
531
532 if (!set)
533 opt = gtk_radio_button_new_with_label(NULL, label);
534 else
535 opt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(set)), label);
536 gtk_box_pack_start(GTK_BOX(box), opt, FALSE, FALSE, 0);
537 gtk_signal_connect(GTK_OBJECT(opt), "clicked", GTK_SIGNAL_FUNC(set_permit), (void *)which);
538 gtk_widget_show(opt);
539 if (permdeny == which)
540 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE);
541
542 return opt;
543 }
544
545 static void permdest(GtkWidget *m, gpointer n)
546 {
547 do_export(0, 0);
548 serv_save_config();
549 gtk_widget_destroy(permtree);
550 permtree = NULL;
551 }
552
553 static void add_perm_callback(GtkWidget *widget, void *dummy)
554 {
555 if (!blist)
556 do_error_dialog(_("Please sign on before editing the permit/deny lists."),
557 _("Please sign on"));
558 else
559 show_add_perm(NULL);
560 }
561
562 static void deny_page()
563 {
564 GtkWidget *parent;
565 GtkWidget *box;
566 GtkWidget *label;
567 GtkWidget *sep;
568 GtkWidget *hbox;
569 GtkWidget *vbox;
570 GtkWidget *xbox;
571 GtkWidget *opt;
572 GtkWidget *button;
573
574 parent = prefdialog->parent;
575 gtk_widget_destroy(prefdialog);
576
577 prefdialog = gtk_frame_new(_("Permit/Deny List Options"));
578 gtk_container_add(GTK_CONTAINER(parent), prefdialog);
579
580 box = gtk_vbox_new(FALSE, 5);
581 gtk_container_add(GTK_CONTAINER(prefdialog), box);
582 gtk_widget_show(box);
583
584 label = gtk_label_new(_("All options take effect immediately unless otherwise noted."));
585 gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5);
586 gtk_widget_show(label);
587
588 sep = gtk_hseparator_new();
589 gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 5);
590 gtk_widget_show(sep);
591
592 label = gtk_label_new(_("The permit/deny configuration will change between users,\n"
593 "and changes while you are signed off will not be saved."));
594 gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5);
595 gtk_widget_show(label);
596
597 hbox = gtk_hbox_new(FALSE, 0);
598 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5);
599 gtk_widget_show(hbox);
600
601 vbox = gtk_vbox_new(FALSE, 0);
602 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
603 gtk_widget_show(vbox);
604
605 opt = deny_radio(_("Allow Anyone"), PERMIT_ALL, vbox, NULL);
606 #if 0
607 /* This doesn't work because TOC doesn't have a PERMIT_BUDDY setting
608 * and merging the two would be very difficult at best, most likely
609 * impossible. If we can guarantee only Oscar than this is easy */
610 opt = deny_radio(_("Allow only users on Buddy List"), PERMIT_BUDDY, vbox, opt);
611 #endif
612 opt = deny_radio(_("Allow only the users in \"Permit\""), PERMIT_SOME, vbox, opt);
613
614 vbox = gtk_vbox_new(FALSE, 0);
615 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5);
616 gtk_widget_show(vbox);
617
618 opt = deny_radio(_("Block all users"), PERMIT_NONE, vbox, opt);
619 opt = deny_radio(_("Block the users in \"Deny\""), DENY_SOME, vbox, opt);
620
621 xbox = gtk_scrolled_window_new(NULL, NULL);
622 gtk_box_pack_start(GTK_BOX(box), xbox, TRUE, TRUE, 5);
623 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(xbox),
624 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
625 gtk_widget_show(xbox);
626
627 permtree = gtk_tree_new();
628 build_deny_tree();
629 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(xbox), permtree);
630 gtk_signal_connect(GTK_OBJECT(permtree), "destroy", GTK_SIGNAL_FUNC(permdest), 0);
631 gtk_widget_show(permtree);
632
633 hbox = gtk_hbox_new(TRUE, 10);
634 gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5);
635 gtk_widget_show(hbox);
636
637 button = picture_button(prefs, _("Add"), gnome_add_xpm);
638 gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 10);
639 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(add_perm_callback), NULL);
640
641 button = picture_button(prefs, _("Remove"), gnome_remove_xpm);
642 gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 10);
643 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_del_perm), permtree);
644
645 gtk_widget_show(prefdialog);
646 }
647
648 void build_permit_tree()
649 {
650 if (permtree)
651 deny_page();
652 } 407 }
653 408
654 static void convo_page() 409 static void convo_page()
655 { 410 {
656 GtkWidget *parent; 411 GtkWidget *parent;
2037 } 1792 }
2038 #endif 1793 #endif
2039 1794
2040 void prefs_build_buddy(GtkWidget *preftree) 1795 void prefs_build_buddy(GtkWidget *preftree)
2041 { 1796 {
2042 GtkCTreeNode *parent, *node; 1797 GtkCTreeNode *parent;
2043 char *text[1]; 1798 char *text[1];
2044 1799
2045 text[0] = _("Buddy List"); 1800 text[0] = _("Buddy List");
2046 parent = gtk_ctree_insert_node(GTK_CTREE(preftree), NULL, NULL, 1801 parent = gtk_ctree_insert_node(GTK_CTREE(preftree), NULL, NULL,
2047 text, 5, NULL, NULL, NULL, NULL, 0, 1); 1802 text, 5, NULL, NULL, NULL, NULL, 0, 1);
2048 gtk_ctree_node_set_row_data(GTK_CTREE(preftree), parent, buddy_page); 1803 gtk_ctree_node_set_row_data(GTK_CTREE(preftree), parent, buddy_page);
2049
2050 /* FIXME ! We should move this to a per-user configuration */
2051 text[0] = _("Permit/Deny");
2052 node = gtk_ctree_insert_node(GTK_CTREE(preftree), parent, NULL,
2053 text, 5, NULL, NULL, NULL, NULL, 0, 1);
2054 gtk_ctree_node_set_row_data(GTK_CTREE(preftree), node, deny_page);
2055 } 1804 }
2056 1805
2057 void prefs_build_convo(GtkWidget *preftree) 1806 void prefs_build_convo(GtkWidget *preftree)
2058 { 1807 {
2059 GtkCTreeNode *parent, *node, *node2; 1808 GtkCTreeNode *parent, *node, *node2;