comparison src/gtkimhtml.c @ 8420:c25c697525b7

[gaim-migrate @ 9150] Phase II. If anyone finds anything problematic here that can't be attributed to GtkIMHtml itself, please let me know (I'll probably tell you it can be attributed to GtkIMHtml itself ;)). Love, Sean. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Wed, 10 Mar 2004 06:10:00 +0000
parents 4a5b36510665
children 2e18099ded93
comparison
equal deleted inserted replaced
8419:5c6124e9a3a7 8420:c25c697525b7
82 82
83 enum { 83 enum {
84 DRAG_URL 84 DRAG_URL
85 }; 85 };
86 86
87 enum {
88 URL_CLICKED,
89 BUTTONS_UPDATE,
90 TOGGLE_FORMAT,
91 LAST_SIGNAL
92 };
93 static guint signals [LAST_SIGNAL] = { 0 };
94
87 GtkTargetEntry selection_targets[] = { 95 GtkTargetEntry selection_targets[] = {
88 { "text/html", 0, TARGET_HTML }, 96 { "text/html", 0, TARGET_HTML },
89 { "UTF8_STRING", 0, TARGET_UTF8_STRING }, 97 { "UTF8_STRING", 0, TARGET_UTF8_STRING },
90 { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT }, 98 { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT },
91 { "STRING", 0, TARGET_STRING }, 99 { "STRING", 0, TARGET_STRING },
358 366
359 gboolean gtk_key_pressed_cb(GtkIMHtml *imhtml, GdkEventKey *event, gpointer data) 367 gboolean gtk_key_pressed_cb(GtkIMHtml *imhtml, GdkEventKey *event, gpointer data)
360 { 368 {
361 char buf[7]; 369 char buf[7];
362 buf[0] = '\0'; 370 buf[0] = '\0';
371 GObject *object;
363 372
364 if (event->state & GDK_CONTROL_MASK) 373 if (event->state & GDK_CONTROL_MASK)
365 switch (event->keyval) { 374 switch (event->keyval) {
366 case 'a': 375 case 'a':
367 return TRUE; 376 return TRUE;
375 return TRUE; 384 return TRUE;
376 break; 385 break;
377 386
378 case 'b': /* ctrl-b is GDK_Left, which moves backwards. */ 387 case 'b': /* ctrl-b is GDK_Left, which moves backwards. */
379 case 'B': 388 case 'B':
380 gtk_imhtml_toggle_bold(imhtml); 389 if (imhtml->format_functions & GTK_IMHTML_BOLD) {
390 gtk_imhtml_toggle_bold(imhtml);
391 object = g_object_ref(G_OBJECT(imhtml));
392 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_BOLD);
393 g_object_unref(object);
394 }
381 return TRUE; 395 return TRUE;
382 break; 396 break;
383 397
384 case 'f': 398 case 'f':
385 case 'F': 399 case 'F':
390 return TRUE; 404 return TRUE;
391 break; 405 break;
392 406
393 case 'i': 407 case 'i':
394 case 'I': 408 case 'I':
395 /*set_toggle(gtkconv->toolbar.italic, 409 if (imhtml->format_functions & GTK_IMHTML_ITALIC)
396 !gtk_toggle_button_get_active( 410 gtk_imhtml_toggle_italic(imhtml);
397 GTK_TOGGLE_BUTTON(gtkconv->toolbar.italic)));*/
398 gtk_imhtml_toggle_italic(imhtml);
399 return TRUE; 411 return TRUE;
400 break; 412 break;
401 413
402 case 'u': /* ctrl-u is GDK_Clear, which clears the line. */ 414 case 'u': /* ctrl-u is GDK_Clear, which clears the line. */
403 case 'U': 415 case 'U':
404 /*set_toggle(gtkconv->toolbar.underline, 416 if (imhtml->format_functions & GTK_IMHTML_UNDERLINE)
405 !gtk_toggle_button_get_active( 417 gtk_imhtml_toggle_underline(imhtml);
406 GTK_TOGGLE_BUTTON(gtkconv->toolbar.underline)));*/
407 gtk_imhtml_toggle_underline(imhtml);
408 return TRUE; 418 return TRUE;
409 break; 419 break;
410 420
411 case '-': 421 case '-':
412 /*set_toggle(gtkconv->toolbar.smaller_size, 422 if (imhtml->format_functions & GTK_IMHTML_SHRINK)
413 !gtk_toggle_button_get_active( 423 gtk_imhtml_font_shrink(imhtml);
414 GTK_TOGGLE_BUTTON(gtkconv->toolbar.smaller_size)));*/
415 gtk_imhtml_font_shrink(imhtml);
416 return TRUE; 424 return TRUE;
417 break; 425 break;
418 426
419 case '=': 427 case '=':
420 case '+': 428 case '+':
421 /*set_toggle(gtkconv->toolbar.larger_size, 429 if (imhtml->format_functions & GTK_IMHTML_GROW)
422 !gtk_toggle_button_get_active( 430 gtk_imhtml_font_grow(imhtml);
423 GTK_TOGGLE_BUTTON(gtkconv->toolbar.larger_size)));*/
424 gtk_imhtml_font_grow(imhtml);
425 return TRUE; 431 return TRUE;
426 break; 432 break;
427 433
428 case '1': strcpy(buf, ":-)"); break; 434 case '1': strcpy(buf, ":-)"); break;
429 case '2': strcpy(buf, ":-("); break; 435 case '2': strcpy(buf, ":-("); break;
564 #endif 570 #endif
565 571
566 572
567 static GtkTextViewClass *parent_class = NULL; 573 static GtkTextViewClass *parent_class = NULL;
568 574
569 /* GtkIMHtml has one signal--URL_CLICKED */
570 enum {
571 URL_CLICKED,
572 LAST_SIGNAL
573 };
574 static guint signals [LAST_SIGNAL] = { 0 };
575
576 static void 575 static void
577 gtk_imhtml_finalize (GObject *object) 576 gtk_imhtml_finalize (GObject *object)
578 { 577 {
579 GtkIMHtml *imhtml = GTK_IMHTML(object); 578 GtkIMHtml *imhtml = GTK_IMHTML(object);
580 GList *scalables; 579 GList *scalables;
614 NULL, 613 NULL,
615 0, 614 0,
616 g_cclosure_marshal_VOID__POINTER, 615 g_cclosure_marshal_VOID__POINTER,
617 G_TYPE_NONE, 1, 616 G_TYPE_NONE, 1,
618 G_TYPE_POINTER); 617 G_TYPE_POINTER);
618 signals[BUTTONS_UPDATE] = g_signal_new("format_functions_update",
619 G_TYPE_FROM_CLASS(gobject_class),
620 G_SIGNAL_RUN_FIRST,
621 G_STRUCT_OFFSET(GtkIMHtmlClass, buttons_update),
622 NULL,
623 0,
624 g_cclosure_marshal_VOID__POINTER,
625 G_TYPE_NONE, 1,
626 G_TYPE_INT);
627 signals[TOGGLE_FORMAT] = g_signal_new("format_function_toggle",
628 G_TYPE_FROM_CLASS(gobject_class),
629 G_SIGNAL_RUN_FIRST,
630 G_STRUCT_OFFSET(GtkIMHtmlClass, toggle_format),
631 NULL,
632 0,
633 g_cclosure_marshal_VOID__POINTER,
634 G_TYPE_NONE, 1,
635 G_TYPE_INT);
619 gobject_class->finalize = gtk_imhtml_finalize; 636 gobject_class->finalize = gtk_imhtml_finalize;
620 } 637 }
621 638
622 static void gtk_imhtml_init (GtkIMHtml *imhtml) 639 static void gtk_imhtml_init (GtkIMHtml *imhtml)
623 { 640 {
688 imhtml->format_spans = NULL; 705 imhtml->format_spans = NULL;
689 706
690 imhtml->scalables = NULL; 707 imhtml->scalables = NULL;
691 708
692 gtk_imhtml_set_editable(imhtml, FALSE); 709 gtk_imhtml_set_editable(imhtml, FALSE);
693
694 } 710 }
695 711
696 GtkWidget *gtk_imhtml_new(void *a, void *b) 712 GtkWidget *gtk_imhtml_new(void *a, void *b)
697 { 713 {
698 return GTK_WIDGET(g_object_new(gtk_imhtml_get_type(), NULL)); 714 return GTK_WIDGET(g_object_new(gtk_imhtml_get_type(), NULL));
1371 1387
1372 GSList *fonts = NULL; 1388 GSList *fonts = NULL;
1373 GtkIMHtmlScalable *scalable = NULL; 1389 GtkIMHtmlScalable *scalable = NULL;
1374 int y, height; 1390 int y, height;
1375 1391
1392 printf("Appending: %s\n", text);
1376 1393
1377 g_return_val_if_fail (imhtml != NULL, NULL); 1394 g_return_val_if_fail (imhtml != NULL, NULL);
1378 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL); 1395 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL);
1379 g_return_val_if_fail (text != NULL, NULL); 1396 g_return_val_if_fail (text != NULL, NULL);
1380 c = text; 1397 c = text;
2460 * We need a visible caret for accessibility, so mouseless 2477 * We need a visible caret for accessibility, so mouseless
2461 * people can highlight stuff. 2478 * people can highlight stuff.
2462 */ 2479 */
2463 /* gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(imhtml), editable); */ 2480 /* gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(imhtml), editable); */
2464 imhtml->editable = editable; 2481 imhtml->editable = editable;
2482 imhtml->format_functions = !editable ? 0 : -1;
2483 }
2484
2485 void gtk_imhtml_set_format_functions(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons)
2486 {
2487 GObject *object = g_object_ref(G_OBJECT(imhtml));
2488 g_signal_emit(object, signals[BUTTONS_UPDATE], 0, buttons);
2489 imhtml->format_functions = buttons;
2490 g_object_unref(object);
2465 } 2491 }
2466 2492
2467 gboolean gtk_imhtml_get_editable(GtkIMHtml *imhtml) 2493 gboolean gtk_imhtml_get_editable(GtkIMHtml *imhtml)
2468 { 2494 {
2469 return imhtml->editable; 2495 return imhtml->editable;