Mercurial > pidgin
comparison src/prpl.c @ 5498:cce2d7868c78
[gaim-migrate @ 5894]
Bye bye do_ask_dialog()! Mwahahahahhaha!
And wit -> with. What wit with the witty with wit comment, wit you jutht
thaw.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Fri, 23 May 2003 02:42:52 +0000 |
parents | b7c0be69c749 |
children | f7dc3f656f03 |
comparison
equal
deleted
inserted
replaced
5497:3c7748b24410 | 5498:cce2d7868c78 |
---|---|
62 return plugin; | 62 return plugin; |
63 } | 63 } |
64 } | 64 } |
65 | 65 |
66 return NULL; | 66 return NULL; |
67 } | |
68 | |
69 static GSList *do_ask_dialogs = NULL; | |
70 | |
71 struct doaskstruct { | |
72 GtkWidget *dialog; | |
73 GModule *handle; | |
74 void (*yesfunc)(gpointer); | |
75 void (*nofunc)(gpointer); | |
76 gpointer data; | |
77 }; | |
78 | |
79 void do_ask_cancel_by_handle(void *handle) | |
80 { | |
81 GSList *d = do_ask_dialogs; | |
82 | |
83 gaim_debug(GAIM_DEBUG_MISC, "prpl", | |
84 "%d dialogs to search\n", g_slist_length(d)); | |
85 | |
86 while (d) { | |
87 struct doaskstruct *doask = d->data; | |
88 | |
89 d = d->next; | |
90 | |
91 if (doask->handle == handle) { | |
92 gaim_debug(GAIM_DEBUG_MISC, "prpl", | |
93 "Removing dialog, %d remain\n", g_slist_length(d)); | |
94 gtk_dialog_response(GTK_DIALOG(doask->dialog), GTK_RESPONSE_NONE); | |
95 } | |
96 } | |
97 } | |
98 | |
99 static void do_ask_callback(GtkDialog *d, gint resp, struct doaskstruct *doask) | |
100 { | |
101 switch (resp) | |
102 { | |
103 case GTK_RESPONSE_YES: | |
104 if (doask->yesfunc) | |
105 doask->yesfunc(doask->data); | |
106 break; | |
107 default: | |
108 if (doask->nofunc) | |
109 doask->nofunc(doask->data); | |
110 break; | |
111 } | |
112 do_ask_dialogs = g_slist_remove(do_ask_dialogs, doask); | |
113 g_free(doask); | |
114 gtk_widget_destroy(GTK_WIDGET(d)); | |
115 } | |
116 | |
117 #define STOCK_ITEMIZE(r, l) if (!strcmp(r,yestext)) \ | |
118 yestext = l; \ | |
119 if (!strcmp(r,notext)) \ | |
120 notext = l; | |
121 | |
122 void do_ask_dialog(const char *prim, const char *sec, void *data, char *yestext, void *doit, char *notext, void *dont, GModule *handle, gboolean modal) | |
123 { | |
124 GtkWidget *window; | |
125 GtkWidget *hbox; | |
126 GtkWidget *label; | |
127 char labeltext[1024 * 2]; | |
128 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); | |
129 struct doaskstruct *doask = g_new0(struct doaskstruct, 1); | |
130 | |
131 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
132 | |
133 /* This is ugly. GTK Stock items will take a button with a label "gtk-cancel" and turn it into a | |
134 * Cancel button with a Cancel icon and whatnot. We want to avoid using anything gtk in the prpls | |
135 * so we replace "Cancel" with "gtk-cancel" right here. */ | |
136 STOCK_ITEMIZE("Add", GTK_STOCK_ADD); | |
137 STOCK_ITEMIZE("Apply", GTK_STOCK_APPLY); | |
138 STOCK_ITEMIZE("Cancel", GTK_STOCK_CANCEL); | |
139 STOCK_ITEMIZE("Close", GTK_STOCK_CLOSE); | |
140 STOCK_ITEMIZE("Delete", GTK_STOCK_DELETE); | |
141 STOCK_ITEMIZE("Remove", GTK_STOCK_REMOVE); | |
142 STOCK_ITEMIZE("Yes", GTK_STOCK_YES); | |
143 STOCK_ITEMIZE("No", GTK_STOCK_NO); | |
144 | |
145 window = gtk_dialog_new_with_buttons("", NULL, 0, notext, GTK_RESPONSE_NO, yestext, GTK_RESPONSE_YES, NULL); | |
146 | |
147 if (modal) { | |
148 gtk_window_set_modal(GTK_WINDOW(window), TRUE); | |
149 } | |
150 | |
151 gtk_dialog_set_default_response (GTK_DIALOG(window), GTK_RESPONSE_YES); | |
152 g_signal_connect(G_OBJECT(window), "response", G_CALLBACK(do_ask_callback), doask); | |
153 | |
154 gtk_container_set_border_width (GTK_CONTAINER(window), 6); | |
155 gtk_window_set_resizable(GTK_WINDOW(window), FALSE); | |
156 gtk_dialog_set_has_separator(GTK_DIALOG(window), FALSE); | |
157 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(window)->vbox), 12); | |
158 gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(window)->vbox), 6); | |
159 | |
160 hbox = gtk_hbox_new(FALSE, 12); | |
161 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(window)->vbox), hbox); | |
162 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
163 | |
164 g_snprintf(labeltext, sizeof(labeltext), "<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s", prim, sec ? sec : ""); | |
165 label = gtk_label_new(NULL); | |
166 gtk_label_set_markup(GTK_LABEL(label), labeltext); | |
167 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
168 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
169 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | |
170 | |
171 doask->dialog = window; | |
172 doask->handle = handle; | |
173 doask->yesfunc = doit; | |
174 doask->nofunc = dont; | |
175 doask->data = data; | |
176 do_ask_dialogs = g_slist_append(do_ask_dialogs, doask); | |
177 | |
178 gtk_widget_show_all(window); | |
179 } | 67 } |
180 | 68 |
181 static void proto_act(GtkObject *obj, struct proto_actions_menu *pam) | 69 static void proto_act(GtkObject *obj, struct proto_actions_menu *pam) |
182 { | 70 { |
183 if (pam->callback && pam->gc) | 71 if (pam->callback && pam->gc) |
626 | 514 |
627 if (b) { | 515 if (b) { |
628 gaim_notify_info(NULL, NULL, _("Gaim - Information"), buf); | 516 gaim_notify_info(NULL, NULL, _("Gaim - Information"), buf); |
629 } | 517 } |
630 else | 518 else |
631 do_ask_dialog(_("Gaim - Confirm"), buf, ga, | 519 gaim_request_action(NULL, NULL, _("Add buddy to your list?"), buf, |
632 _("Add"), do_add, _("Cancel"), dont_add, NULL, FALSE); | 520 0, ga, 2, |
521 _("Add"), G_CALLBACK(do_add), | |
522 _("Cancel"), G_CALLBACK(dont_add)); | |
633 } | 523 } |
634 | 524 |
635 static GtkWidget *regdlg = NULL; | 525 static GtkWidget *regdlg = NULL; |
636 static GtkWidget *reg_list = NULL; | 526 static GtkWidget *reg_list = NULL; |
637 static GtkWidget *reg_area = NULL; | 527 static GtkWidget *reg_area = NULL; |