diff options
Diffstat (limited to 'src/fe-gtk/sexy-spell-entry.c')
-rw-r--r-- | src/fe-gtk/sexy-spell-entry.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/src/fe-gtk/sexy-spell-entry.c b/src/fe-gtk/sexy-spell-entry.c index bac1e2b5..f57c7f41 100644 --- a/src/fe-gtk/sexy-spell-entry.c +++ b/src/fe-gtk/sexy-spell-entry.c @@ -31,7 +31,12 @@ #include <sys/types.h> #include <sys/stat.h> #include "sexy-iso-codes.h" + +#ifdef WIN32 +#include "marshal.h" +#else #include "../common/marshal.h" +#endif #ifdef WIN32 #include "../common/typedef.h" @@ -136,6 +141,8 @@ enum }; static guint signals[LAST_SIGNAL] = {0}; +static PangoAttrList *empty_attrs_list = NULL; + static gboolean spell_accumulator(GSignalInvocationHint *hint, GValue *return_accu, const GValue *handler_return, gpointer data) { @@ -243,6 +250,11 @@ sexy_spell_entry_class_init(SexySpellEntryClass *klass) _hexchat_marshal_BOOLEAN__STRING, G_TYPE_BOOLEAN, 1, G_TYPE_STRING); + + if (empty_attrs_list == NULL) + { + empty_attrs_list = pango_attr_list_new (); + } } static void @@ -292,7 +304,7 @@ insert_hiddenchar (SexySpellEntry *entry, guint start, guint end) * is 'hidden' */ #if 0 PangoAttribute *hattr; - PangoRectangle *rect = g_malloc (sizeof (PangoRectangle)); + PangoRectangle *rect = g_new (PangoRectangle, 1); rect->x = 0; rect->y = 0; @@ -758,12 +770,9 @@ sexy_spell_entry_finalize(GObject *obj) pango_attr_list_unref(entry->priv->attr_list); if (entry->priv->dict_hash) g_hash_table_destroy(entry->priv->dict_hash); - if (entry->priv->words) - g_strfreev(entry->priv->words); - if (entry->priv->word_starts) - g_free(entry->priv->word_starts); - if (entry->priv->word_ends) - g_free(entry->priv->word_ends); + g_strfreev(entry->priv->words); + g_free(entry->priv->word_starts); + g_free(entry->priv->word_ends); if (have_enchant) { if (entry->priv->broker) { @@ -1038,7 +1047,7 @@ sexy_spell_entry_recheck_all(SexySpellEntry *entry) { /* Check for attributes */ text = gtk_entry_get_text (GTK_ENTRY (entry)); - text_len = gtk_entry_get_text_length (GTK_ENTRY (entry)); + text_len = strlen (text); check_attributes (entry, text, text_len); } @@ -1078,7 +1087,14 @@ sexy_spell_entry_expose(GtkWidget *widget, GdkEventExpose *event) layout = gtk_entry_get_layout(gtk_entry); - pango_layout_set_attributes(layout, entry->priv->attr_list); + if (gtk_entry->preedit_length == 0) + { + pango_layout_set_attributes(layout, entry->priv->attr_list); + } + else + { + pango_layout_set_attributes(layout, empty_attrs_list); + } return GTK_WIDGET_CLASS(parent_class)->expose_event (widget, event); } |