comparison src/gtkrequest.c @ 5490:421020171808

[gaim-migrate @ 5886] Added multiline input requests. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Thu, 22 May 2003 19:44:59 +0000
parents c103ba09c62a
children b7c0be69c749
comparison
equal deleted inserted replaced
5489:5b5aa701d46b 5490:421020171808
32 { 32 {
33 GaimRequestType type; 33 GaimRequestType type;
34 34
35 void *user_data; 35 void *user_data;
36 GtkWidget *dialog; 36 GtkWidget *dialog;
37 GtkWidget *entry;
38 37
39 size_t cb_count; 38 size_t cb_count;
40 GCallback *cbs; 39 GCallback *cbs;
41 40
41 union
42 {
43 struct
44 {
45 GtkWidget *entry;
46
47 gboolean multiline;
48
49 } input;
50
51 } u;
52
42 } GaimRequestData; 53 } GaimRequestData;
43 54
44 static void 55 static void
45 __input_response_cb(GtkDialog *dialog, gint id, GaimRequestData *data) 56 __input_response_cb(GtkDialog *dialog, gint id, GaimRequestData *data)
46 { 57 {
47 if (id < data->cb_count && data->cbs[id] != NULL) { 58 const char *value;
48 ((GaimRequestInputCb)data->cbs[id])( 59
49 gtk_entry_get_text(GTK_ENTRY(data->entry)), data->user_data); 60 if (data->u.input.multiline) {
61 GtkTextIter start_iter, end_iter;
62 GtkTextBuffer *buffer =
63 gtk_text_view_get_buffer(GTK_TEXT_VIEW(data->u.input.entry));
64
65 gtk_text_buffer_get_start_iter(buffer, &start_iter);
66 gtk_text_buffer_get_end_iter(buffer, &end_iter);
67
68 value = gtk_text_buffer_get_text(buffer, &start_iter, &end_iter,
69 FALSE);
50 } 70 }
71 else
72 value = gtk_entry_get_text(GTK_ENTRY(data->u.input.entry));
73
74 if (id < data->cb_count && data->cbs[id] != NULL)
75 ((GaimRequestInputCb)data->cbs[id])(value, data->user_data);
51 76
52 gaim_request_close(GAIM_REQUEST_INPUT, data); 77 gaim_request_close(GAIM_REQUEST_INPUT, data);
53 } 78 }
54 79
55 #define STOCK_ITEMIZE(r, l) \ 80 #define STOCK_ITEMIZE(r, l) \
67 STOCK_ITEMIZE(_("Close"), GTK_STOCK_CLOSE); 92 STOCK_ITEMIZE(_("Close"), GTK_STOCK_CLOSE);
68 STOCK_ITEMIZE(_("Delete"), GTK_STOCK_DELETE); 93 STOCK_ITEMIZE(_("Delete"), GTK_STOCK_DELETE);
69 STOCK_ITEMIZE(_("Add"), GTK_STOCK_ADD); 94 STOCK_ITEMIZE(_("Add"), GTK_STOCK_ADD);
70 STOCK_ITEMIZE(_("Remove"), GTK_STOCK_REMOVE); 95 STOCK_ITEMIZE(_("Remove"), GTK_STOCK_REMOVE);
71 96
72 return NULL; 97 return text;
73 } 98 }
74 99
75 void * 100 void *
76 gaim_gtk_request_input(const char *title, const char *primary, 101 gaim_gtk_request_input(const char *title, const char *primary,
77 const char *secondary, const char *default_value, 102 const char *secondary, const char *default_value,
151 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); 176 gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0);
152 177
153 g_free(label_text); 178 g_free(label_text);
154 179
155 /* Entry field. */ 180 /* Entry field. */
156 data->entry = entry = gtk_entry_new(); 181 data->u.input.multiline = multiline;
157 gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0); 182
158 183 if (multiline) {
159 if (default_value != NULL) 184 GtkWidget *sw;
160 gtk_entry_set_text(GTK_ENTRY(entry), default_value); 185
186 sw = gtk_scrolled_window_new(NULL, NULL);
187 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
188 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
189 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw),
190 GTK_SHADOW_IN);
191
192 gtk_widget_set_size_request(sw, 300, 75);
193
194 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
195
196 entry = gtk_text_view_new();
197 gtk_text_view_set_editable(GTK_TEXT_VIEW(entry), TRUE);
198
199 gtk_container_add(GTK_CONTAINER(sw), entry);
200
201 if (default_value != NULL) {
202 GtkTextBuffer *buffer;
203
204 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry));
205 gtk_text_buffer_set_text(buffer, default_value, -1);
206 }
207 }
208 else {
209 entry = gtk_entry_new();
210
211 gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0);
212
213 if (default_value != NULL)
214 gtk_entry_set_text(GTK_ENTRY(entry), default_value);
215 }
216
217 data->u.input.entry = entry;
161 218
162 /* Show everything. */ 219 /* Show everything. */
163 gtk_widget_show_all(dialog); 220 gtk_widget_show_all(dialog);
164 221
165 return data; 222 return data;