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;