Mercurial > pidgin
comparison src/dialogs.c @ 6327:493eed80869c
[gaim-migrate @ 6826]
I like what KingAnt did earlier. I didn't think about using the core
request API for our normal, tiny little input dialogs and such. Now the
Alias Buddy dialog uses our multi-field request API.
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Tue, 29 Jul 2003 05:56:15 +0000 |
| parents | dd2be7cd66df |
| children | cbe2f320c214 |
comparison
equal
deleted
inserted
replaced
| 6326:f6480d79cb89 | 6327:493eed80869c |
|---|---|
| 46 static GtkWidget *imdialog = NULL; /*I only want ONE of these :) */ | 46 static GtkWidget *imdialog = NULL; /*I only want ONE of these :) */ |
| 47 static GList *dialogwindows = NULL; | 47 static GList *dialogwindows = NULL; |
| 48 static GtkWidget *importdialog; | 48 static GtkWidget *importdialog; |
| 49 static GaimConnection *importgc; | 49 static GaimConnection *importgc; |
| 50 static GtkWidget *icondlg; | 50 static GtkWidget *icondlg; |
| 51 static GtkWidget *alias_dialog = NULL; | |
| 52 static GtkWidget *rename_dialog = NULL; | 51 static GtkWidget *rename_dialog = NULL; |
| 53 static GtkWidget *fontseld = NULL; | 52 static GtkWidget *fontseld = NULL; |
| 54 | 53 |
| 55 | 54 |
| 56 struct confirm_del { | 55 struct confirm_del { |
| 120 struct getuserinfo { | 119 struct getuserinfo { |
| 121 GtkWidget *window; | 120 GtkWidget *window; |
| 122 GtkWidget *entry; | 121 GtkWidget *entry; |
| 123 GtkWidget *account; | 122 GtkWidget *account; |
| 124 GaimConnection *gc; | 123 GaimConnection *gc; |
| 125 }; | |
| 126 | |
| 127 struct alias_dialog_info | |
| 128 { | |
| 129 GtkWidget *window; | |
| 130 GtkWidget *name_entry; | |
| 131 GtkWidget *alias_entry; | |
| 132 struct buddy *buddy; | |
| 133 }; | 124 }; |
| 134 | 125 |
| 135 static GSList *info_dlgs = NULL; | 126 static GSList *info_dlgs = NULL; |
| 136 | 127 |
| 137 static struct info_dlg *find_info_dlg(GaimConnection *gc, const char *who) | 128 static struct info_dlg *find_info_dlg(GaimConnection *gc, const char *who) |
| 3606 gaim_blist_save(); | 3597 gaim_blist_save(); |
| 3607 } | 3598 } |
| 3608 gtk_widget_destroy(w); | 3599 gtk_widget_destroy(w); |
| 3609 } | 3600 } |
| 3610 | 3601 |
| 3611 static void | |
| 3612 do_alias_buddy(GtkWidget *w, int resp, struct alias_dialog_info *info) | |
| 3613 { | |
| 3614 if (resp == GTK_RESPONSE_OK) { | |
| 3615 const char *alias; | |
| 3616 | |
| 3617 alias = gtk_entry_get_text(GTK_ENTRY(info->alias_entry)); | |
| 3618 | |
| 3619 gaim_blist_alias_buddy(info->buddy, (alias && *alias) ? alias : NULL); | |
| 3620 serv_alias_buddy(info->buddy); | |
| 3621 gaim_blist_save(); | |
| 3622 } | |
| 3623 | |
| 3624 destroy_dialog(NULL, alias_dialog); | |
| 3625 alias_dialog = NULL; | |
| 3626 | |
| 3627 g_free(info); | |
| 3628 } | |
| 3629 | |
| 3630 void alias_dialog_chat(struct chat *chat) { | 3602 void alias_dialog_chat(struct chat *chat) { |
| 3631 GtkWidget *dialog; | 3603 GtkWidget *dialog; |
| 3632 GtkWidget *hbox; | 3604 GtkWidget *hbox; |
| 3633 GtkWidget *img; | 3605 GtkWidget *img; |
| 3634 GtkWidget *vbox; | 3606 GtkWidget *vbox; |
| 3694 G_CALLBACK(do_alias_chat), chat); | 3666 G_CALLBACK(do_alias_chat), chat); |
| 3695 | 3667 |
| 3696 gtk_widget_show_all(dialog); | 3668 gtk_widget_show_all(dialog); |
| 3697 } | 3669 } |
| 3698 | 3670 |
| 3671 static void | |
| 3672 alias_buddy_cb(struct buddy *buddy, GaimRequestFields *fields) | |
| 3673 { | |
| 3674 const char *alias; | |
| 3675 | |
| 3676 alias = gaim_request_fields_get_string(fields, "alias"); | |
| 3677 | |
| 3678 gaim_blist_alias_buddy(buddy, | |
| 3679 (alias != NULL && *alias != '\0') ? alias : NULL); | |
| 3680 serv_alias_buddy(buddy); | |
| 3681 gaim_blist_save(); | |
| 3682 } | |
| 3683 | |
| 3699 void | 3684 void |
| 3700 alias_dialog_bud(struct buddy *b) | 3685 alias_dialog_bud(struct buddy *b) |
| 3701 { | 3686 { |
| 3702 struct alias_dialog_info *info = NULL; | 3687 GaimRequestFields *fields; |
| 3703 struct gaim_gtk_buddy_list *gtkblist; | 3688 GaimRequestFieldGroup *group; |
| 3704 GtkWidget *hbox; | 3689 GaimRequestField *field; |
| 3705 GtkWidget *vbox; | 3690 |
| 3706 GtkWidget *label; | 3691 fields = gaim_request_fields_new(); |
| 3707 GtkWidget *table; | 3692 |
| 3708 GtkWidget *img; | 3693 group = gaim_request_field_group_new(NULL); |
| 3709 | 3694 gaim_request_fields_add_group(fields, group); |
| 3710 gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); | 3695 |
| 3711 | 3696 field = gaim_request_field_string_new("screenname", _("_Screenname"), |
| 3712 if (!alias_dialog) { | 3697 b->name, FALSE); |
| 3713 info = g_new0(struct alias_dialog_info, 1); | 3698 gaim_request_field_group_add_field(group, field); |
| 3714 info->buddy = b; | 3699 |
| 3715 | 3700 field = gaim_request_field_string_new("alias", _("_Alias"), |
| 3716 alias_dialog = gtk_dialog_new_with_buttons(_("Alias Buddy"), | 3701 b->alias, FALSE); |
| 3717 (gtkblist ? GTK_WINDOW(gtkblist->window) : NULL), | 3702 gaim_request_field_group_add_field(group, field); |
| 3718 GTK_DIALOG_NO_SEPARATOR, | 3703 |
| 3719 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | 3704 gaim_request_fields(NULL, _("Alias Buddy"), |
| 3720 GTK_STOCK_OK, GTK_RESPONSE_OK, | 3705 _("Alias buddy"), |
| 3721 NULL); | 3706 _("Please enter an aliased name for the person " |
| 3722 | 3707 "below, or rename this contact in your buddy list."), |
| 3723 gtk_dialog_set_default_response(GTK_DIALOG(alias_dialog), | 3708 fields, |
| 3724 GTK_RESPONSE_OK); | 3709 _("OK"), G_CALLBACK(alias_buddy_cb), |
| 3725 gtk_container_set_border_width(GTK_CONTAINER(alias_dialog), 6); | 3710 _("Cancel"), NULL, |
| 3726 gtk_window_set_resizable(GTK_WINDOW(alias_dialog), FALSE); | 3711 b); |
| 3727 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(alias_dialog)->vbox), 12); | 3712 } |
| 3728 gtk_container_set_border_width( | |
| 3729 GTK_CONTAINER(GTK_DIALOG(alias_dialog)->vbox), 6); | |
| 3730 | |
| 3731 /* The main hbox container. */ | |
| 3732 hbox = gtk_hbox_new(FALSE, 12); | |
| 3733 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(alias_dialog)->vbox), hbox); | |
| 3734 | |
| 3735 /* The dialog image. */ | |
| 3736 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, | |
| 3737 GTK_ICON_SIZE_DIALOG); | |
| 3738 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
| 3739 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
| 3740 | |
| 3741 /* The main vbox container. */ | |
| 3742 vbox = gtk_vbox_new(FALSE, 0); | |
| 3743 gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
| 3744 | |
| 3745 /* Setup the label containing the description. */ | |
| 3746 label = gtk_label_new(_("Please enter an aliased name for the " | |
| 3747 "person below, or rename this contact " | |
| 3748 "in your buddy list.\n")); | |
| 3749 gtk_widget_set_size_request(GTK_WIDGET(label), 350, -1); | |
| 3750 | |
| 3751 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
| 3752 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
| 3753 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
| 3754 | |
| 3755 hbox = gtk_hbox_new(FALSE, 6); | |
| 3756 gtk_container_add(GTK_CONTAINER(vbox), hbox); | |
| 3757 | |
| 3758 /* The table containing the entry widgets and labels. */ | |
| 3759 table = gtk_table_new(2, 2, FALSE); | |
| 3760 gtk_table_set_row_spacings(GTK_TABLE(table), 6); | |
| 3761 gtk_table_set_col_spacings(GTK_TABLE(table), 6); | |
| 3762 gtk_container_set_border_width(GTK_CONTAINER(table), 12); | |
| 3763 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); | |
| 3764 | |
| 3765 /* The "Screenname:" label. */ | |
| 3766 label = gtk_label_new(NULL); | |
| 3767 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Screenname:")); | |
| 3768 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
| 3769 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); | |
| 3770 | |
| 3771 /* The Screen name entry field. */ | |
| 3772 info->name_entry = gtk_entry_new(); | |
| 3773 gtk_table_attach_defaults(GTK_TABLE(table), info->name_entry, | |
| 3774 1, 2, 0, 1); | |
| 3775 gtk_entry_set_activates_default(GTK_ENTRY(info->name_entry), TRUE); | |
| 3776 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->name_entry); | |
| 3777 gtk_entry_set_text(GTK_ENTRY(info->name_entry), info->buddy->name); | |
| 3778 gtk_editable_set_editable(GTK_EDITABLE(info->name_entry), FALSE); | |
| 3779 | |
| 3780 /* The "Alias:" label. */ | |
| 3781 label = gtk_label_new(NULL); | |
| 3782 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Alias:")); | |
| 3783 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
| 3784 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); | |
| 3785 | |
| 3786 /* The alias entry field. */ | |
| 3787 info->alias_entry = gtk_entry_new(); | |
| 3788 gtk_table_attach_defaults(GTK_TABLE(table), info->alias_entry, | |
| 3789 1, 2, 1, 2); | |
| 3790 gtk_entry_set_activates_default(GTK_ENTRY(info->alias_entry), TRUE); | |
| 3791 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->alias_entry); | |
| 3792 | |
| 3793 if (info->buddy->alias != NULL) | |
| 3794 gtk_entry_set_text(GTK_ENTRY(info->alias_entry), | |
| 3795 info->buddy->alias); | |
| 3796 | |
| 3797 g_signal_connect(G_OBJECT(alias_dialog), "response", | |
| 3798 G_CALLBACK(do_alias_buddy), info); | |
| 3799 } | |
| 3800 | |
| 3801 gtk_widget_show_all(alias_dialog); | |
| 3802 | |
| 3803 if (info) | |
| 3804 gtk_widget_grab_focus(info->alias_entry); | |
| 3805 } | |
| 3806 | |
| 3807 | 3713 |
| 3808 static gboolean dont_destroy(gpointer a, gpointer b, gpointer c) | 3714 static gboolean dont_destroy(gpointer a, gpointer b, gpointer c) |
| 3809 { | 3715 { |
| 3810 return TRUE; | 3716 return TRUE; |
| 3811 } | 3717 } |
