Mercurial > pidgin.yaz
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; |