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