Mercurial > pidgin.yaz
comparison src/gtkrequest.c @ 8697:725413cc9fb9
[gaim-migrate @ 9450]
WYSIWYG info editing from Jon Oberheide
We need separate gc flags for conversation HTML and
user info HTML, or something. It seems like there
should be a better way to do that...
Hint hint wink wink nudge nudge
I kick your foot, under the table
You kick me back, I can't say I'm able
To stand for you, or fall for you
Ever again
I wish for, a perfect setting
Wishing that I'm letting you take me
Where you want me, all over again
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 18 Apr 2004 06:22:42 +0000 |
parents | 253eb32e344c |
children | 5a2b5e4abf3a |
comparison
equal
deleted
inserted
replaced
8696:aebfa2b6af6b | 8697:725413cc9fb9 |
---|---|
28 | 28 |
29 #include "gtkrequest.h" | 29 #include "gtkrequest.h" |
30 #include "gtkutils.h" | 30 #include "gtkutils.h" |
31 #include "stock.h" | 31 #include "stock.h" |
32 #include "ui.h" | 32 #include "ui.h" |
33 #include "gtkimhtml.h" | |
34 #include "gtkimhtmltoolbar.h" | |
33 | 35 |
34 #include <gdk/gdkkeysyms.h> | 36 #include <gdk/gdkkeysyms.h> |
35 | 37 |
36 #if GTK_CHECK_VERSION(2,3,0) | 38 #if GTK_CHECK_VERSION(2,3,0) |
37 # define NEW_STYLE_COMPLETION | 39 # define NEW_STYLE_COMPLETION |
54 struct | 56 struct |
55 { | 57 { |
56 GtkWidget *entry; | 58 GtkWidget *entry; |
57 | 59 |
58 gboolean multiline; | 60 gboolean multiline; |
61 gchar *hint; | |
59 | 62 |
60 } input; | 63 } input; |
61 | 64 |
62 struct | 65 struct |
63 { | 66 { |
91 gtk_text_view_get_buffer(GTK_TEXT_VIEW(data->u.input.entry)); | 94 gtk_text_view_get_buffer(GTK_TEXT_VIEW(data->u.input.entry)); |
92 | 95 |
93 gtk_text_buffer_get_start_iter(buffer, &start_iter); | 96 gtk_text_buffer_get_start_iter(buffer, &start_iter); |
94 gtk_text_buffer_get_end_iter(buffer, &end_iter); | 97 gtk_text_buffer_get_end_iter(buffer, &end_iter); |
95 | 98 |
96 multiline_value = gtk_text_buffer_get_text(buffer, &start_iter, &end_iter, | 99 if ((data->u.input.hint != NULL) && (!strcmp(data->u.input.hint, "html"))) |
100 multiline_value = gtk_imhtml_get_markup(GTK_IMHTML(data->u.input.entry)); | |
101 else | |
102 multiline_value = gtk_text_buffer_get_text(buffer, &start_iter, &end_iter, | |
97 FALSE); | 103 FALSE); |
104 | |
98 value = multiline_value; | 105 value = multiline_value; |
99 } | 106 } |
100 else | 107 else |
101 value = gtk_entry_get_text(GTK_ENTRY(data->u.input.entry)); | 108 value = gtk_entry_get_text(GTK_ENTRY(data->u.input.entry)); |
102 | 109 |
239 } | 246 } |
240 | 247 |
241 static void * | 248 static void * |
242 gaim_gtk_request_input(const char *title, const char *primary, | 249 gaim_gtk_request_input(const char *title, const char *primary, |
243 const char *secondary, const char *default_value, | 250 const char *secondary, const char *default_value, |
244 gboolean multiline, gboolean masked, | 251 gboolean multiline, gboolean masked, gchar *hint, |
245 const char *ok_text, GCallback ok_cb, | 252 const char *ok_text, GCallback ok_cb, |
246 const char *cancel_text, GCallback cancel_cb, | 253 const char *cancel_text, GCallback cancel_cb, |
247 void *user_data) | 254 void *user_data) |
248 { | 255 { |
249 GaimGtkRequestData *data; | 256 GaimGtkRequestData *data; |
315 | 322 |
316 g_free(label_text); | 323 g_free(label_text); |
317 | 324 |
318 /* Entry field. */ | 325 /* Entry field. */ |
319 data->u.input.multiline = multiline; | 326 data->u.input.multiline = multiline; |
320 | 327 data->u.input.hint = (hint == NULL ? NULL : g_strdup(hint)); |
321 if (multiline) { | 328 |
329 if ((data->u.input.hint != NULL) && (!strcmp(data->u.input.hint, "html"))) { | |
322 GtkWidget *sw; | 330 GtkWidget *sw; |
323 | 331 |
324 sw = gtk_scrolled_window_new(NULL, NULL); | 332 sw = gtk_scrolled_window_new(NULL, NULL); |
325 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), | 333 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), |
326 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); | 334 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); |
327 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), | 335 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), |
328 GTK_SHADOW_IN); | 336 GTK_SHADOW_IN); |
329 | 337 |
330 gtk_widget_set_size_request(sw, 320, 130); | 338 gtk_widget_set_size_request(sw, 320, 130); |
331 | 339 |
340 /* Toolbar */ | |
341 GtkWidget *toolbar; | |
342 toolbar = gtk_imhtmltoolbar_new(); | |
343 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); | |
344 | |
345 /* GtkIMHtml */ | |
346 entry = gtk_imhtml_new(NULL, NULL); | |
347 gtk_imhtml_set_editable(GTK_IMHTML(entry), TRUE); | |
348 | |
349 gtk_imhtml_smiley_shortcuts(GTK_IMHTML(entry), gaim_prefs_get_bool("/gaim/gtk/conversations/smiley_shortcuts")); | |
350 gtk_imhtml_html_shortcuts(GTK_IMHTML(entry), gaim_prefs_get_bool("/gaim/gtk/conversations/html_shortcuts")); | |
351 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(toolbar), entry); | |
352 | |
353 if (default_value != NULL) | |
354 gtk_imhtml_append_text(GTK_IMHTML(entry), default_value, GTK_IMHTML_NO_SCROLL); | |
355 | |
356 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(entry), GTK_WRAP_WORD_CHAR); | |
357 | |
332 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); | 358 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); |
333 | |
334 entry = gtk_text_view_new(); | |
335 gtk_text_view_set_editable(GTK_TEXT_VIEW(entry), TRUE); | |
336 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(entry), GTK_WRAP_WORD_CHAR); | |
337 | 359 |
338 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck")) | 360 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck")) |
339 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(entry)); | 361 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(entry)); |
340 | 362 |
341 gtk_container_add(GTK_CONTAINER(sw), entry); | 363 gtk_container_add(GTK_CONTAINER(sw), entry); |
342 | |
343 if (default_value != NULL) { | |
344 GtkTextBuffer *buffer; | |
345 | |
346 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry)); | |
347 gtk_text_buffer_set_text(buffer, default_value, -1); | |
348 } | |
349 } | 364 } |
350 else { | 365 else { |
351 entry = gtk_entry_new(); | 366 if (multiline) { |
352 | 367 GtkWidget *sw; |
353 gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); | 368 |
354 | 369 sw = gtk_scrolled_window_new(NULL, NULL); |
355 gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0); | 370 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), |
356 | 371 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); |
357 if (default_value != NULL) | 372 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), |
358 gtk_entry_set_text(GTK_ENTRY(entry), default_value); | 373 GTK_SHADOW_IN); |
359 | 374 |
360 if (masked) | 375 gtk_widget_set_size_request(sw, 320, 130); |
361 gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); | 376 |
377 /* GtkTextView */ | |
378 entry = gtk_text_view_new(); | |
379 gtk_text_view_set_editable(GTK_TEXT_VIEW(entry), TRUE); | |
380 | |
381 if (default_value != NULL) { | |
382 GtkTextBuffer *buffer; | |
383 | |
384 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(entry)); | |
385 gtk_text_buffer_set_text(buffer, default_value, -1); | |
386 } | |
387 | |
388 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(entry), GTK_WRAP_WORD_CHAR); | |
389 | |
390 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); | |
391 | |
392 if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck")) | |
393 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(entry)); | |
394 | |
395 gtk_container_add(GTK_CONTAINER(sw), entry); | |
396 } | |
397 else { | |
398 entry = gtk_entry_new(); | |
399 | |
400 gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE); | |
401 | |
402 gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0); | |
403 | |
404 if (default_value != NULL) | |
405 gtk_entry_set_text(GTK_ENTRY(entry), default_value); | |
406 | |
407 if (masked) | |
408 gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); | |
409 } | |
362 } | 410 } |
363 | 411 |
364 gaim_set_accessible_label (entry, label); | 412 gaim_set_accessible_label (entry, label); |
365 data->u.input.entry = entry; | 413 data->u.input.entry = entry; |
366 | 414 |