Mercurial > pidgin
comparison src/dialogs.c @ 8290:84ec38c3efcc
[gaim-migrate @ 9014]
Moved the Get User Info and Insert Link dialogs to the request API.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Thu, 19 Feb 2004 08:06:23 +0000 |
parents | 89d9d004e3f3 |
children | a1b7c7f3d9a7 |
comparison
equal
deleted
inserted
replaced
8289:e39ea2b4f6cd | 8290:84ec38c3efcc |
---|---|
72 struct getuserinfo { | 72 struct getuserinfo { |
73 GtkWidget *window; | 73 GtkWidget *window; |
74 GtkWidget *entry; | 74 GtkWidget *entry; |
75 GtkWidget *account; | 75 GtkWidget *account; |
76 GaimConnection *gc; | 76 GaimConnection *gc; |
77 }; | |
78 | |
79 struct linkdlg { | |
80 GtkWidget *ok; | |
81 GtkWidget *cancel; | |
82 GtkWidget *window; | |
83 GtkWidget *url; | |
84 GtkWidget *text; | |
85 GtkWidget *entry; | |
86 GaimConversation *c; | |
87 }; | 77 }; |
88 | 78 |
89 struct view_log { | 79 struct view_log { |
90 long offset; | 80 long offset; |
91 int options; | 81 int options; |
466 | 456 |
467 gtk_widget_show_all(window); | 457 gtk_widget_show_all(window); |
468 return TRUE; | 458 return TRUE; |
469 } | 459 } |
470 | 460 |
471 static void do_info(GtkWidget *dialog, int id, struct getuserinfo *info) | |
472 { | |
473 char *who; | |
474 gboolean found = FALSE; | |
475 | |
476 switch(id) { | |
477 case GTK_RESPONSE_OK: | |
478 who = g_strdup(gaim_normalize(info->gc->account, gtk_entry_get_text(GTK_ENTRY(info->entry)))); | |
479 | |
480 if (who && gaim_str_has_suffix(who, "rocksmyworld")) { | |
481 found = show_ee_dialog(who); | |
482 } | |
483 | |
484 if (!found && who && *who && info->gc) | |
485 serv_get_info(info->gc, who); | |
486 | |
487 g_free(who); | |
488 break; | |
489 } | |
490 | |
491 gtk_widget_destroy(GTK_WIDGET(dialog)); | |
492 g_free(info); | |
493 } | |
494 | |
495 static void | |
496 show_info_select_account(GObject *w, GaimAccount *account, | |
497 struct getuserinfo *info) | |
498 { | |
499 info->gc = gaim_account_get_connection(account); | |
500 } | |
501 | |
502 static void | 461 static void |
503 new_im_cb(gpointer data, GaimRequestFields *fields) | 462 new_im_cb(gpointer data, GaimRequestFields *fields) |
504 { | 463 { |
505 const char *username; | 464 const char *username; |
506 GaimAccount *account; | 465 GaimAccount *account; |
549 _("OK"), G_CALLBACK(new_im_cb), | 508 _("OK"), G_CALLBACK(new_im_cb), |
550 _("Cancel"), NULL, | 509 _("Cancel"), NULL, |
551 NULL); | 510 NULL); |
552 } | 511 } |
553 | 512 |
554 void show_info_dialog() | 513 static void |
555 { | 514 get_info_cb(gpointer data, GaimRequestFields *fields) |
556 GtkWidget *window, *hbox, *vbox; | 515 { |
557 GtkWidget *label; | 516 char *username; |
558 GtkWidget *table; | 517 gboolean found = FALSE; |
559 GaimGtkBuddyList *gtkblist; | 518 GaimAccount *account; |
560 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); | 519 |
561 struct getuserinfo *info = g_new0(struct getuserinfo, 1); | 520 account = gaim_request_fields_get_account(fields, "account"); |
562 | 521 |
563 gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); | 522 username = g_strdup(gaim_normalize(account, |
564 | 523 gaim_request_fields_get_string(fields, "screenname"))); |
565 info->gc = gaim_connections_get_all()->data; | 524 |
566 | 525 if (username != NULL && gaim_str_has_suffix(username, "rocksmyworld")) |
567 window = gtk_dialog_new_with_buttons(_("Get User Info"), gtkblist->window ? GTK_WINDOW(gtkblist->window) : NULL, 0, | 526 found = show_ee_dialog(username); |
568 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); | 527 |
569 gtk_dialog_set_default_response (GTK_DIALOG(window), GTK_RESPONSE_OK); | 528 if (!found && username != NULL && *username != '\0' && account != NULL) |
570 gtk_container_set_border_width (GTK_CONTAINER(window), 6); | 529 serv_get_info(gaim_account_get_connection(account), username); |
571 gtk_window_set_resizable(GTK_WINDOW(window), FALSE); | 530 |
572 gtk_dialog_set_has_separator(GTK_DIALOG(window), FALSE); | 531 g_free(username); |
573 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(window)->vbox), 12); | 532 } |
574 gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(window)->vbox), 6); | 533 |
575 gtk_dialog_set_response_sensitive(GTK_DIALOG(window), GTK_RESPONSE_OK, FALSE); | 534 void |
576 | 535 show_info_dialog(void) |
577 hbox = gtk_hbox_new(FALSE, 12); | 536 { |
578 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(window)->vbox), hbox); | 537 GaimRequestFields *fields; |
579 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | 538 GaimRequestFieldGroup *group; |
580 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | 539 GaimRequestField *field; |
581 | 540 |
582 vbox = gtk_vbox_new(FALSE, 0); | 541 fields = gaim_request_fields_new(); |
583 gtk_container_add(GTK_CONTAINER(hbox), vbox); | 542 |
584 | 543 group = gaim_request_field_group_new(NULL); |
585 label = gtk_label_new(_("Please enter the screen name of the person whose info you would like to view.\n")); | 544 gaim_request_fields_add_group(fields, group); |
586 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | 545 |
587 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | 546 field = gaim_request_field_string_new("screenname", _("_Screen name"), |
588 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | 547 NULL, FALSE); |
589 | 548 gaim_request_field_set_required(field, TRUE); |
590 table = gtk_table_new(2, 2, FALSE); | 549 gaim_request_field_group_add_field(group, field); |
591 gtk_table_set_row_spacings(GTK_TABLE(table), 6); | 550 |
592 gtk_table_set_col_spacings(GTK_TABLE(table), 6); | 551 field = gaim_request_field_account_new("account", _("_Account"), NULL); |
593 gtk_container_set_border_width(GTK_CONTAINER(table), 12); | 552 gaim_request_field_set_visible(field, |
594 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); | 553 (gaim_connections_get_all() != NULL && |
595 | 554 gaim_connections_get_all()->next != NULL)); |
596 label = gtk_label_new(NULL); | 555 gaim_request_field_set_required(field, TRUE); |
597 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Screen Name:")); | 556 gaim_request_field_group_add_field(group, field); |
598 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | 557 |
599 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); | 558 gaim_request_fields(gaim_get_blist(), _("Get User Info"), |
600 | 559 NULL, |
601 info->entry = gtk_entry_new(); | 560 _("Please enter the screen name of the person whose " |
602 gtk_table_attach_defaults(GTK_TABLE(table), info->entry, 1, 2, 0, 1); | 561 "info you would like to view."), |
603 gtk_entry_set_activates_default (GTK_ENTRY(info->entry), TRUE); | 562 fields, |
604 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(info->entry)); | 563 _("OK"), G_CALLBACK(get_info_cb), |
605 gaim_set_accessible_label (info->entry, label); | 564 _("Cancel"), NULL, |
606 | 565 NULL); |
607 g_signal_connect(G_OBJECT(info->entry), "changed", | |
608 G_CALLBACK(gaim_gtk_set_sensitive_if_input), window); | |
609 | |
610 if (gaim_connections_get_all()->next) { | |
611 | |
612 label = gtk_label_new(NULL); | |
613 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); | |
614 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Account:")); | |
615 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
616 | |
617 info->account = gaim_gtk_account_option_menu_new(NULL, FALSE, | |
618 G_CALLBACK(show_info_select_account), NULL, info); | |
619 | |
620 gtk_table_attach_defaults(GTK_TABLE(table), info->account, 1, 2, 1, 2); | |
621 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(info->account)); | |
622 gaim_set_accessible_label (info->account, label); | |
623 } | |
624 | |
625 g_signal_connect(G_OBJECT(window), "response", G_CALLBACK(do_info), info); | |
626 | |
627 gtk_widget_show_all(window); | |
628 gtk_widget_grab_focus(GTK_WIDGET(info->entry)); | |
629 } | |
630 | |
631 | |
632 /*------------------------------------------------------*/ | |
633 /* Link Dialog */ | |
634 /*------------------------------------------------------*/ | |
635 | |
636 void dialog_link_destroy(GaimConversation *c) | |
637 { | |
638 GaimGtkConversation *gtkconv; | |
639 | |
640 gtkconv = GAIM_GTK_CONVERSATION(c); | |
641 | |
642 gtk_widget_destroy(gtkconv->dialogs.link); | |
643 gtkconv->dialogs.link = NULL; | |
644 } | |
645 | |
646 static void do_insert_link(GtkWidget *w, int resp, struct linkdlg *a) | |
647 { | |
648 GaimGtkConversation *gtkconv; | |
649 const char *urltext, *showtext; | |
650 | |
651 gtkconv = GAIM_GTK_CONVERSATION(a->c); | |
652 | |
653 if (resp == GTK_RESPONSE_OK) { | |
654 urltext = gtk_entry_get_text(GTK_ENTRY(a->url)); | |
655 showtext = gtk_entry_get_text(GTK_ENTRY(a->text)); | |
656 | |
657 if (!strlen(showtext)) | |
658 showtext = urltext; | |
659 | |
660 gtk_imhtml_insert_link(GTK_IMHTML(gtkconv->entry), urltext, showtext); | |
661 gaim_gtk_advance_past(gtkconv, "<A HREF>", "</A>"); | |
662 } | |
663 | |
664 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link), FALSE); | |
665 } | |
666 | |
667 static void dialog_link_freedata(GtkWidget *w, gpointer user_data) | |
668 { | |
669 struct linkdlg *a = user_data; | |
670 | |
671 g_free(a); | |
672 } | |
673 | |
674 void dialog_link_show(GaimConversation *c) | |
675 { | |
676 GaimGtkConversation *gtkconv; | |
677 GaimGtkWindow *gtkwin; | |
678 GtkWidget *table; | |
679 GtkWidget *label; | |
680 GtkWidget *hbox; | |
681 GtkWidget *vbox; | |
682 struct linkdlg *a; | |
683 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); | |
684 | |
685 gtkconv = GAIM_GTK_CONVERSATION(c); | |
686 gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(c)); | |
687 | |
688 a = g_new0(struct linkdlg, 1); | |
689 | |
690 a->c = c; | |
691 a->window = gtk_dialog_new_with_buttons(_("Insert Link"), | |
692 GTK_WINDOW(gtkwin->window), 0, GTK_STOCK_CANCEL, | |
693 GTK_RESPONSE_CANCEL, _("_Insert"), GTK_RESPONSE_OK, NULL); | |
694 gtk_dialog_set_default_response(GTK_DIALOG(a->window), GTK_RESPONSE_OK); | |
695 g_signal_connect(G_OBJECT(a->window), "response", | |
696 G_CALLBACK(do_insert_link), a); | |
697 g_signal_connect(G_OBJECT(a->window), "destroy", | |
698 G_CALLBACK(dialog_link_freedata), a); | |
699 | |
700 gtk_dialog_set_default_response(GTK_DIALOG(a->window), GTK_RESPONSE_OK); | |
701 gtk_container_set_border_width(GTK_CONTAINER(a->window), 6); | |
702 gtk_window_set_resizable(GTK_WINDOW(a->window), FALSE); | |
703 gtk_dialog_set_has_separator(GTK_DIALOG(a->window), FALSE); | |
704 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(a->window)->vbox), 12); | |
705 gtk_container_set_border_width( | |
706 GTK_CONTAINER(GTK_DIALOG(a->window)->vbox), 6); | |
707 gtk_window_set_role(GTK_WINDOW(a->window), "insert_link"); | |
708 gtk_dialog_set_response_sensitive(GTK_DIALOG(a->window), GTK_RESPONSE_OK, FALSE); | |
709 | |
710 hbox = gtk_hbox_new(FALSE, 12); | |
711 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(a->window)->vbox), hbox); | |
712 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
713 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
714 | |
715 vbox = gtk_vbox_new(FALSE, 0); | |
716 gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
717 | |
718 label = gtk_label_new(_("Please enter the URL and description of " | |
719 "the link that you want to insert. The " | |
720 "description is optional.\n")); | |
721 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
722 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
723 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
724 | |
725 table = gtk_table_new(2, 2, FALSE); | |
726 gtk_table_set_row_spacings(GTK_TABLE(table), 6); | |
727 gtk_table_set_col_spacings(GTK_TABLE(table), 6); | |
728 gtk_container_set_border_width(GTK_CONTAINER(table), 0); | |
729 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); | |
730 | |
731 label = gtk_label_new_with_mnemonic(_("_URL:")); | |
732 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | |
733 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); | |
734 | |
735 a->url = gtk_entry_new(); | |
736 gtk_table_attach_defaults(GTK_TABLE(table), a->url, 1, 2, 0, 1); | |
737 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(a->url)); | |
738 gaim_set_accessible_label (a->url, label); | |
739 gtk_widget_grab_focus(a->url); | |
740 | |
741 gtk_entry_set_activates_default (GTK_ENTRY(a->url), TRUE); | |
742 g_signal_connect(G_OBJECT(a->url), "changed", | |
743 G_CALLBACK(gaim_gtk_set_sensitive_if_input), a->window); | |
744 | |
745 label = gtk_label_new_with_mnemonic(_("_Description:")); | |
746 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | |
747 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); | |
748 | |
749 a->text = gtk_entry_new(); | |
750 gtk_table_attach_defaults(GTK_TABLE(table), a->text, 1, 2, 1, 2); | |
751 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(a->text)); | |
752 gaim_set_accessible_label (a->text, label); | |
753 gtk_entry_set_activates_default (GTK_ENTRY(a->text), TRUE); | |
754 | |
755 gtkconv->dialogs.link = a->window; | |
756 | |
757 gtk_widget_show_all(gtkconv->dialogs.link); | |
758 gdk_window_raise(gtkconv->dialogs.link->window); | |
759 } | 566 } |
760 | 567 |
761 /*------------------------------------------------------*/ | 568 /*------------------------------------------------------*/ |
762 /* Color Selection Dialog */ | 569 /* Color Selection Dialog */ |
763 /*------------------------------------------------------*/ | 570 /*------------------------------------------------------*/ |