Mercurial > pidgin.yaz
diff 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 |
line wrap: on
line diff
--- a/src/gtkimhtml.c Tue Mar 09 19:52:17 2004 +0000 +++ b/src/gtkimhtml.c Wed Mar 10 06:10:00 2004 +0000 @@ -84,6 +84,14 @@ DRAG_URL }; +enum { + URL_CLICKED, + BUTTONS_UPDATE, + TOGGLE_FORMAT, + LAST_SIGNAL +}; +static guint signals [LAST_SIGNAL] = { 0 }; + GtkTargetEntry selection_targets[] = { { "text/html", 0, TARGET_HTML }, { "UTF8_STRING", 0, TARGET_UTF8_STRING }, @@ -360,6 +368,7 @@ { char buf[7]; buf[0] = '\0'; + GObject *object; if (event->state & GDK_CONTROL_MASK) switch (event->keyval) { @@ -377,7 +386,12 @@ case 'b': /* ctrl-b is GDK_Left, which moves backwards. */ case 'B': - gtk_imhtml_toggle_bold(imhtml); + if (imhtml->format_functions & GTK_IMHTML_BOLD) { + gtk_imhtml_toggle_bold(imhtml); + object = g_object_ref(G_OBJECT(imhtml)); + g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_BOLD); + g_object_unref(object); + } return TRUE; break; @@ -392,36 +406,28 @@ case 'i': case 'I': - /*set_toggle(gtkconv->toolbar.italic, - !gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(gtkconv->toolbar.italic)));*/ - gtk_imhtml_toggle_italic(imhtml); + if (imhtml->format_functions & GTK_IMHTML_ITALIC) + gtk_imhtml_toggle_italic(imhtml); return TRUE; break; case 'u': /* ctrl-u is GDK_Clear, which clears the line. */ case 'U': - /*set_toggle(gtkconv->toolbar.underline, - !gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(gtkconv->toolbar.underline)));*/ - gtk_imhtml_toggle_underline(imhtml); + if (imhtml->format_functions & GTK_IMHTML_UNDERLINE) + gtk_imhtml_toggle_underline(imhtml); return TRUE; break; case '-': - /*set_toggle(gtkconv->toolbar.smaller_size, - !gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(gtkconv->toolbar.smaller_size)));*/ - gtk_imhtml_font_shrink(imhtml); + if (imhtml->format_functions & GTK_IMHTML_SHRINK) + gtk_imhtml_font_shrink(imhtml); return TRUE; break; case '=': case '+': - /*set_toggle(gtkconv->toolbar.larger_size, - !gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(gtkconv->toolbar.larger_size)));*/ - gtk_imhtml_font_grow(imhtml); + if (imhtml->format_functions & GTK_IMHTML_GROW) + gtk_imhtml_font_grow(imhtml); return TRUE; break; @@ -566,13 +572,6 @@ static GtkTextViewClass *parent_class = NULL; -/* GtkIMHtml has one signal--URL_CLICKED */ -enum { - URL_CLICKED, - LAST_SIGNAL -}; -static guint signals [LAST_SIGNAL] = { 0 }; - static void gtk_imhtml_finalize (GObject *object) { @@ -616,6 +615,24 @@ g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); + signals[BUTTONS_UPDATE] = g_signal_new("format_functions_update", + G_TYPE_FROM_CLASS(gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(GtkIMHtmlClass, buttons_update), + NULL, + 0, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, + G_TYPE_INT); + signals[TOGGLE_FORMAT] = g_signal_new("format_function_toggle", + G_TYPE_FROM_CLASS(gobject_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(GtkIMHtmlClass, toggle_format), + NULL, + 0, + g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, + G_TYPE_INT); gobject_class->finalize = gtk_imhtml_finalize; } @@ -690,7 +707,6 @@ imhtml->scalables = NULL; gtk_imhtml_set_editable(imhtml, FALSE); - } GtkWidget *gtk_imhtml_new(void *a, void *b) @@ -1373,6 +1389,7 @@ GtkIMHtmlScalable *scalable = NULL; int y, height; + printf("Appending: %s\n", text); g_return_val_if_fail (imhtml != NULL, NULL); g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL); @@ -2462,6 +2479,15 @@ */ /* gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(imhtml), editable); */ imhtml->editable = editable; + imhtml->format_functions = !editable ? 0 : -1; +} + +void gtk_imhtml_set_format_functions(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons) +{ + GObject *object = g_object_ref(G_OBJECT(imhtml)); + g_signal_emit(object, signals[BUTTONS_UPDATE], 0, buttons); + imhtml->format_functions = buttons; + g_object_unref(object); } gboolean gtk_imhtml_get_editable(GtkIMHtml *imhtml)