Mercurial > pidgin
comparison src/prpl.c @ 3730:a20bf3d247ff
[gaim-migrate @ 3868]
Pretty do_ask_dialog. I also "fixed" the "hitting yes calls the 'no' function
anyway" behavior.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Thu, 17 Oct 2002 21:29:53 +0000 |
parents | e941bfbacf7c |
children | 6767b4b1ce31 |
comparison
equal
deleted
inserted
replaced
3729:a8f0c169e529 | 3730:a20bf3d247ff |
---|---|
135 if (d) | 135 if (d) |
136 gtk_signal_disconnect_by_data(GTK_OBJECT(b), d); | 136 gtk_signal_disconnect_by_data(GTK_OBJECT(b), d); |
137 gtk_widget_destroy(b); | 137 gtk_widget_destroy(b); |
138 } | 138 } |
139 | 139 |
140 void do_ask_dialog(const char *text, void *data, void *doit, void *dont) | 140 struct doaskstruct { |
141 void (*yesfunc)(gpointer); | |
142 void (*nofunc)(gpointer); | |
143 gpointer data; | |
144 }; | |
145 | |
146 static void do_ask_callback(GtkDialog *d, gint resp, struct doaskstruct *doask) | |
147 { | |
148 switch (resp) | |
149 { | |
150 case GTK_RESPONSE_YES: | |
151 if (doask->yesfunc) | |
152 doask->yesfunc(doask->data); | |
153 break; | |
154 case GTK_RESPONSE_NO: | |
155 case GTK_RESPONSE_DELETE_EVENT: | |
156 if (doask->nofunc) | |
157 doask->nofunc(doask->data); | |
158 break; | |
159 } | |
160 g_free(doask); | |
161 } | |
162 | |
163 | |
164 void do_ask_dialog(const char *prim, const char *sec, void *data, char *yestext, void *doit, char *notext, void *dont) | |
141 { | 165 { |
142 GtkWidget *window; | 166 GtkWidget *window; |
143 GtkWidget *vbox; | 167 GtkWidget *hbox; |
144 GtkWidget *label; | 168 GtkWidget *label; |
145 GtkWidget *hbox; | 169 char labeltext[1024 * 2]; |
146 GtkWidget *button; | 170 char filename = g_build_filename(DATADIR, "pixmaps", "gaim", "dialogs", "gaim_question.png", NULL); |
147 | 171 GtkWidget *img = gtk_image_new_from_file(filename); |
148 GAIM_DIALOG(window); | 172 struct doaskstruct *doask = g_new0(struct doaskstruct, 1); |
149 gtk_window_set_wmclass(GTK_WINDOW(window), "accept", "Gaim"); | 173 |
150 gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE); | 174 doask->yesfunc = doit; |
151 gtk_window_set_title(GTK_WINDOW(window), _("Accept?")); | 175 doask->nofunc = dont; |
152 gtk_widget_realize(window); | 176 doask->data = data; |
153 if (dont) | 177 |
154 gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(dont), data); | 178 g_free(filename); |
155 | 179 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
156 vbox = gtk_vbox_new(FALSE, 5); | 180 |
157 gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); | 181 window = gtk_dialog_new_with_buttons("", NULL, GTK_DIALOG_MODAL, yestext, GTK_RESPONSE_YES, notext, GTK_RESPONSE_NO, NULL); |
158 gtk_container_add(GTK_CONTAINER(window), vbox); | 182 gtk_dialog_set_default_response (GTK_DIALOG(window), GTK_RESPONSE_YES); |
159 | 183 g_signal_connect(G_OBJECT(window), "response", G_CALLBACK(do_ask_callback), doask); |
160 label = gtk_label_new(text); | 184 |
161 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | 185 gtk_container_set_border_width (GTK_CONTAINER(window), 6); |
186 gtk_window_set_resizable(GTK_WINDOW(window), FALSE); | |
187 gtk_dialog_set_has_separator(GTK_DIALOG(window), FALSE); | |
188 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(window)->vbox), 12); | |
189 gtk_container_set_border_width (GTK_CONTAINER(GTK_DIALOG(window)->vbox), 6); | |
190 | |
191 hbox = gtk_hbox_new(FALSE, 12); | |
192 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(window)->vbox), hbox); | |
193 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
194 | |
195 g_snprintf(labeltext, sizeof(labeltext), "<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s", prim, sec ? sec : ""); | |
196 label = gtk_label_new(NULL); | |
197 gtk_label_set_markup(GTK_LABEL(label), labeltext); | |
162 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | 198 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
163 | 199 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
164 hbox = gtk_hbox_new(FALSE, 5); | 200 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
165 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | 201 |
166 | |
167 button = picture_button(window, _("Cancel"), cancel_xpm); | |
168 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
169 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(des_win), window); | |
170 | |
171 button = picture_button(window, _("Accept"), ok_xpm); | |
172 gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); | |
173 if (dont) | |
174 gtk_object_set_user_data(GTK_OBJECT(button), data); | |
175 if (doit) | |
176 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(doit), data); | |
177 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(rem_win), window); | |
178 | |
179 gtk_widget_show_all(window); | 202 gtk_widget_show_all(window); |
180 } | 203 } |
181 | 204 |
182 static void des_prompt(GtkWidget *w, struct _prompt *p) | 205 static void des_prompt(GtkWidget *w, struct _prompt *p) |
183 { | 206 { |
560 struct gaim_connection *gc; | 583 struct gaim_connection *gc; |
561 char *who; | 584 char *who; |
562 char *alias; | 585 char *alias; |
563 }; | 586 }; |
564 | 587 |
565 static void dont_add(gpointer x, struct got_add *ga) | 588 static void dont_add(struct got_add *ga) |
566 { | 589 { |
567 g_free(ga->who); | 590 g_free(ga->who); |
568 if (ga->alias) | 591 if (ga->alias) |
569 g_free(ga->alias); | 592 g_free(ga->alias); |
570 g_free(ga); | 593 g_free(ga); |
571 } | 594 } |
572 | 595 |
573 static void do_add(gpointer x, struct got_add *ga) | 596 static void do_add(struct got_add *ga) |
574 { | 597 { |
575 if (g_slist_find(connections, ga->gc)) | 598 if (g_slist_find(connections, ga->gc)) |
576 show_add_buddy(ga->gc, ga->who, NULL, ga->alias); | 599 show_add_buddy(ga->gc, ga->who, NULL, ga->alias); |
600 dont_add(ga); | |
577 } | 601 } |
578 | 602 |
579 void show_got_added(struct gaim_connection *gc, const char *id, | 603 void show_got_added(struct gaim_connection *gc, const char *id, |
580 const char *who, const char *alias, const char *msg) | 604 const char *who, const char *alias, const char *msg) |
581 { | 605 { |
596 msg ? msg : "", | 620 msg ? msg : "", |
597 find_buddy(gc, ga->who) ? "" : _("\n\nDo you wish to add him or her to your buddy list?")); | 621 find_buddy(gc, ga->who) ? "" : _("\n\nDo you wish to add him or her to your buddy list?")); |
598 if (find_buddy(gc, ga->who)) | 622 if (find_buddy(gc, ga->who)) |
599 do_error_dialog(buf, NULL, GAIM_INFO); | 623 do_error_dialog(buf, NULL, GAIM_INFO); |
600 else | 624 else |
601 do_ask_dialog(buf, ga, do_add, dont_add); | 625 do_ask_dialog(buf, NULL, ga, _("Add"), do_add, _("Cancel"), dont_add); |
602 } | 626 } |
603 | 627 |
604 static GtkWidget *regdlg = NULL; | 628 static GtkWidget *regdlg = NULL; |
605 static GtkWidget *reg_list = NULL; | 629 static GtkWidget *reg_list = NULL; |
606 static GtkWidget *reg_area = NULL; | 630 static GtkWidget *reg_area = NULL; |