[Commits] [SCM] claws branch, master, updated. 3.17.0-128-g9166f8a

ticho at claws-mail.org ticho at claws-mail.org
Tue Oct 23 20:48:44 CEST 2018


The branch, master has been updated
       via  9166f8a580b95095229975d2d33332d4ea921df8 (commit)
      from  730f6e21f42b49c6bd6e33bc36787b77d4ba96d3 (commit)

Summary of changes:
 src/gtk/spell_entry.c |  142 ++++++++++++++++++++++++-------------------------
 src/gtk/spell_entry.h |    2 -
 2 files changed, 71 insertions(+), 73 deletions(-)


- Log -----------------------------------------------------------------
commit 9166f8a580b95095229975d2d33332d4ea921df8
Author: Andrej Kacian <ticho at claws-mail.org>
Date:   Tue Oct 23 20:46:32 2018 +0200

    Use GTK private struct feature correctly in ClawsSpellEntry.
    
    g_type_class_add_private() takes care of adding,
    initializing and cleaning it up, there is no need
    to add another copy of it and manage it manually.

diff --git a/src/gtk/spell_entry.c b/src/gtk/spell_entry.c
index 07d4be6..b17f6c9 100644
--- a/src/gtk/spell_entry.c
+++ b/src/gtk/spell_entry.c
@@ -44,7 +44,6 @@
 #include "gtkutils.h"
 
 static void claws_spell_entry_init		(ClawsSpellEntry *entry);
-static void claws_spell_entry_finalize		(GObject *object);
 #if !GTK_CHECK_VERSION(3, 0, 0)
 static void claws_spell_entry_destroy		(GtkObject *object);
 static gint claws_spell_entry_expose		(GtkWidget *widget,
@@ -67,7 +66,7 @@ static void claws_spell_entry_preedit_changed		(GtkEntry *entry,
 						 gchar *preedit,
 						 gpointer data);
 
-struct _ClawsSpellEntryPriv
+typedef struct
 {
 	PangoAttrList        *attr_list;
 	gint                  mark_character;
@@ -75,7 +74,11 @@ struct _ClawsSpellEntryPriv
 	gint                 *word_starts;
 	gint                 *word_ends;
 	gint                  preedit_length;
-};
+} ClawsSpellEntryPrivate;
+
+#define CLAWS_SPELL_ENTRY_GET_PRIVATE(entry) \
+	G_TYPE_INSTANCE_GET_PRIVATE (entry, CLAWS_TYPE_SPELL_ENTRY, \
+			ClawsSpellEntryPrivate)
 
 static GtkEntryClass *parent_class = NULL;
 
@@ -93,9 +96,6 @@ static void claws_spell_entry_class_init(ClawsSpellEntryClass *klass)
 	
 	parent_class = g_type_class_peek_parent(klass);
 	
-	g_object_class = G_OBJECT_CLASS(klass);
-	g_object_class->finalize = claws_spell_entry_finalize;
-	
 #if !GTK_CHECK_VERSION(3, 0, 0)
 	gtk_object_class = GTK_OBJECT_CLASS(klass);
 	gtk_object_class->destroy = claws_spell_entry_destroy;
@@ -109,18 +109,20 @@ static void claws_spell_entry_class_init(ClawsSpellEntryClass *klass)
 	widget_class->draw = claws_spell_entry_expose;
 	widget_class->destroy = claws_spell_entry_destroy;
 #endif
-	
+
+	g_object_class = G_OBJECT_CLASS(klass);
 	g_type_class_add_private(g_object_class,
-			sizeof(struct _ClawsSpellEntryPriv));
+			sizeof(ClawsSpellEntryPrivate));
 }
 
 static void claws_spell_entry_init(ClawsSpellEntry *entry)
 {
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
+
 	entry->gtkaspell = NULL;
 	
-	entry->priv = g_new0(ClawsSpellEntryPriv, 1);
-	entry->priv->attr_list = pango_attr_list_new();
-	entry->priv->preedit_length = 0;
+	priv->attr_list = pango_attr_list_new();
+	priv->preedit_length = 0;
                                         
 	g_signal_connect(G_OBJECT(entry), "popup-menu",
 			G_CALLBACK(claws_spell_entry_popup_menu), entry);
@@ -132,23 +134,6 @@ static void claws_spell_entry_init(ClawsSpellEntry *entry)
 			G_CALLBACK(claws_spell_entry_preedit_changed), NULL);
 }
 
-static void claws_spell_entry_finalize(GObject *object)
-{
-	ClawsSpellEntry *entry = CLAWS_SPELL_ENTRY(object);
-
-	if (entry->priv->attr_list)
-		pango_attr_list_unref(entry->priv->attr_list);
-	if (entry->priv->words)
-		g_strfreev(entry->priv->words);
-
-	g_free(entry->priv->word_starts);
-	g_free(entry->priv->word_ends);
-	g_free(entry->priv);
-	entry->priv = NULL;
-	
-	G_OBJECT_CLASS(parent_class)->finalize(object);
-}
-
 #if !GTK_CHECK_VERSION(3, 0, 0)
 static void claws_spell_entry_destroy(GtkObject *object)
 {
@@ -184,6 +169,7 @@ static gint claws_spell_entry_find_position (ClawsSpellEntry *_entry, gint x)
 	gint scroll_offset;
 	gboolean trailing;
 	GtkEntry *entry = GTK_ENTRY(_entry);
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 
 	g_object_get(entry, "scroll-offset", &scroll_offset, NULL);
 	x = x + scroll_offset;
@@ -196,9 +182,9 @@ static gint claws_spell_entry_find_position (ClawsSpellEntry *_entry, gint x)
 	line = pango_layout_get_lines(layout)->data;
 	pango_layout_line_x_to_index(line, x * PANGO_SCALE, &index, &trailing);
 
-	if (index >= cursor_index && _entry->priv->preedit_length) {
-		if (index >= cursor_index + _entry->priv->preedit_length) {
-			index -= _entry->priv->preedit_length;
+	if (index >= cursor_index && priv->preedit_length) {
+		if (index >= cursor_index + priv->preedit_length) {
+			index -= priv->preedit_length;
 		} else {
 			index = cursor_index;
 			trailing = FALSE;
@@ -216,21 +202,22 @@ static void get_word_extents_from_position(ClawsSpellEntry *entry, gint *start,
 {
 	const gchar *text;
 	gint i, bytes_pos;
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 
 	*start = -1;
 	*end = -1;
 
-	if (entry->priv->words == NULL)
+	if (priv->words == NULL)
 		return;
 
 	text = gtk_entry_get_text(GTK_ENTRY(entry));
 	bytes_pos = (gint) (g_utf8_offset_to_pointer(text, position) - text);
 
-	for (i = 0; entry->priv->words[i]; i++) {
-		if (bytes_pos >= entry->priv->word_starts[i] &&
-		    bytes_pos <= entry->priv->word_ends[i]) {
-			*start = entry->priv->word_starts[i];
-			*end   = entry->priv->word_ends[i];
+	for (i = 0; priv->words[i]; i++) {
+		if (bytes_pos >= priv->word_starts[i] &&
+		    bytes_pos <= priv->word_ends[i]) {
+			*start = priv->word_starts[i];
+			*end   = priv->word_ends[i];
 			return;
 		}
 	}
@@ -255,6 +242,7 @@ static void replace_word(ClawsSpellEntry *entry, const gchar *newword)
 {
 	gint cursor, start_pos, end_pos;
 	const gchar *text = gtk_entry_get_text(GTK_ENTRY(entry));
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 
 	start_pos = entry->gtkaspell->start_pos;
 	end_pos = entry->gtkaspell->end_pos;
@@ -263,9 +251,9 @@ static void replace_word(ClawsSpellEntry *entry, const gchar *newword)
 	/* is the cursor at the end? If so, restore it there */
 	if (g_utf8_strlen(text, -1) == cursor)
 		cursor = -1;
-	else if(cursor < entry->priv->mark_character ||
-		cursor > entry->priv->mark_character)
-			cursor = entry->priv->mark_character;
+	else if(cursor < priv->mark_character ||
+		cursor > priv->mark_character)
+			cursor = priv->mark_character;
 
 	gtk_editable_delete_text(GTK_EDITABLE(entry), start_pos, end_pos);
 	gtk_editable_insert_text(GTK_EDITABLE(entry), newword, strlen(newword),
@@ -362,6 +350,7 @@ static void entry_strsplit_utf8(GtkEntry *entry, gchar ***set, gint **starts, gi
 
 static void insert_misspelled_marker(ClawsSpellEntry *entry, guint start, guint end)
 {
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 	guint16 red   = (guint16) (((gdouble)((prefs_common.color[COL_MISSPELLED] &
 					0xff0000) >> 16) / 255.0) * 65535.0);
 	guint16 green = (guint16) (((gdouble)((prefs_common.color[COL_MISSPELLED] &
@@ -375,7 +364,7 @@ static void insert_misspelled_marker(ClawsSpellEntry *entry, guint start, guint
 		fcolor->start_index = start;
 		fcolor->end_index = end;
 		
-		pango_attr_list_insert(entry->priv->attr_list, fcolor);
+		pango_attr_list_insert(priv->attr_list, fcolor);
 	} else {
 		ucolor = pango_attr_underline_color_new (65535, 0, 0);
 		unline = pango_attr_underline_new (PANGO_UNDERLINE_ERROR);
@@ -386,14 +375,15 @@ static void insert_misspelled_marker(ClawsSpellEntry *entry, guint start, guint
 		ucolor->end_index = end;
 		unline->end_index = end;
 
-		pango_attr_list_insert (entry->priv->attr_list, ucolor);
-		pango_attr_list_insert (entry->priv->attr_list, unline);
+		pango_attr_list_insert (priv->attr_list, ucolor);
+		pango_attr_list_insert (priv->attr_list, unline);
 	}
 }
 
 static gboolean check_word(ClawsSpellEntry *entry, int start, int end)
 {
 	GtkAspell *gtkaspell = entry->gtkaspell;
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 	PangoAttrIterator *it;
 	gint s, e;
 	gboolean misspelled;
@@ -402,7 +392,7 @@ static gboolean check_word(ClawsSpellEntry *entry, int start, int end)
 
 	/* Check to see if we've got any attributes at this position.
 	 * If so, free them, since we'll readd it if the word is misspelled */
-	it = pango_attr_list_get_iterator(entry->priv->attr_list);
+	it = pango_attr_list_get_iterator(priv->attr_list);
 	if (it == NULL)
 		return FALSE;
 	do {
@@ -437,28 +427,29 @@ void claws_spell_entry_recheck_all(ClawsSpellEntry *entry)
 	GtkAllocation allocation;
 	GdkRectangle rect;
 	PangoLayout *layout;
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 	int length, i;
 
 	cm_return_if_fail(CLAWS_IS_SPELL_ENTRY(entry));
 	cm_return_if_fail(entry->gtkaspell != NULL);
 
-	if (entry->priv->words == NULL)
+	if (priv->words == NULL)
 		return;
 
 	/* Remove all existing pango attributes.  These will get readded as we check */
-	pango_attr_list_unref(entry->priv->attr_list);
-	entry->priv->attr_list = pango_attr_list_new();
+	pango_attr_list_unref(priv->attr_list);
+	priv->attr_list = pango_attr_list_new();
 
 	/* Loop through words */
-	for (i = 0; entry->priv->words[i]; i++) {
-		length = strlen(entry->priv->words[i]);
+	for (i = 0; priv->words[i]; i++) {
+		length = strlen(priv->words[i]);
 		if (length == 0)
 			continue;
-		check_word(entry, entry->priv->word_starts[i], entry->priv->word_ends[i]);
+		check_word(entry, priv->word_starts[i], priv->word_ends[i]);
 	}
 
 	layout = gtk_entry_get_layout(GTK_ENTRY(entry));
-	pango_layout_set_attributes(layout, entry->priv->attr_list);
+	pango_layout_set_attributes(layout, priv->attr_list);
 
 	if (gtk_widget_get_realized(GTK_WIDGET(entry))) {
 		rect.x = 0; rect.y = 0;
@@ -477,12 +468,13 @@ static gint claws_spell_entry_expose(GtkWidget *widget, cairo_t *cr)
 #endif
 {
 	ClawsSpellEntry *entry = CLAWS_SPELL_ENTRY(widget);
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 	GtkEntry *gtk_entry = GTK_ENTRY(widget);
 	PangoLayout *layout;
 
 	if (entry->gtkaspell != NULL) {
 		layout = gtk_entry_get_layout(gtk_entry);
-		pango_layout_set_attributes(layout, entry->priv->attr_list);
+		pango_layout_set_attributes(layout, priv->attr_list);
 	}
 
 #if !GTK_CHECK_VERSION(3, 0, 0)
@@ -495,17 +487,20 @@ static gint claws_spell_entry_expose(GtkWidget *widget, cairo_t *cr)
 static gint claws_spell_entry_button_press(GtkWidget *widget, GdkEventButton *event)
 {
 	ClawsSpellEntry *entry = CLAWS_SPELL_ENTRY(widget);
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 	gint pos;
 
 	pos = claws_spell_entry_find_position(entry, event->x);
-	entry->priv->mark_character = pos;
+	priv->mark_character = pos;
 
 	return GTK_WIDGET_CLASS(parent_class)->button_press_event (widget, event);
 }
 
 static gboolean claws_spell_entry_popup_menu(GtkWidget *widget, ClawsSpellEntry *entry)
 {
-	entry->priv->mark_character = gtk_editable_get_position (GTK_EDITABLE (entry));
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
+
+	priv->mark_character = gtk_editable_get_position (GTK_EDITABLE (entry));
 	return FALSE;
 }
 
@@ -517,13 +512,14 @@ static void set_position(gpointer data, gint pos)
 static gboolean find_misspelled_cb(gpointer data, gboolean forward)
 {
 	ClawsSpellEntry *entry = (ClawsSpellEntry *)data;
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 	GtkAspell *gtkaspell = entry->gtkaspell;
 	gboolean misspelled = FALSE;
 	gint cursor, minpos, maxpos, i, words_len = 0;
 	gint start, end;
 	gchar *text;
 	
-	if (entry->priv->words == NULL)
+	if (priv->words == NULL)
 		return FALSE;
 
 	gtkaspell->orig_pos = gtk_editable_get_position(GTK_EDITABLE(entry));
@@ -539,22 +535,22 @@ static gboolean find_misspelled_cb(gpointer data, gboolean forward)
 	}
 	g_free(text);
 
-	while(entry->priv->words[words_len])
+	while(priv->words[words_len])
 		words_len++;
 
 	if (forward) {
 		for(i=0; i < words_len; i++)
-			if (entry->priv->word_ends[i] > minpos &&
+			if (priv->word_ends[i] > minpos &&
 			    (misspelled = check_word(entry,
-			    		entry->priv->word_starts[i],
-					entry->priv->word_ends[i])))
+			    		priv->word_starts[i],
+					priv->word_ends[i])))
 				break;
 	} else {
 		for(i=words_len-1; i >= 0; i--)
-			if (entry->priv->word_starts[i] < maxpos &&
+			if (priv->word_starts[i] < maxpos &&
 			    (misspelled = check_word(entry,
-			    		entry->priv->word_starts[i],
-					entry->priv->word_ends[i])))
+			    		priv->word_starts[i],
+					priv->word_ends[i])))
 				break;
 	}
 	
@@ -564,9 +560,10 @@ static gboolean find_misspelled_cb(gpointer data, gboolean forward)
 static gboolean check_word_cb(gpointer data)
 {
 	ClawsSpellEntry *entry = (ClawsSpellEntry *)data;
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 	gint start, end;
 	
-	get_word_extents_from_position(entry, &start, &end, entry->priv->mark_character);
+	get_word_extents_from_position(entry, &start, &end, priv->mark_character);
 	return check_word(entry, start, end);
 }
 
@@ -625,13 +622,14 @@ static void claws_spell_entry_populate_popup(ClawsSpellEntry *entry, GtkMenu *me
 						gpointer data)
 {
 	GtkAspell *gtkaspell = entry->gtkaspell;
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 	gint start, end;
 	gchar *word, *text;
 	
 	if (gtkaspell == NULL)
         	return;
 	
-        get_word_extents_from_position(entry, &start, &end, entry->priv->mark_character);
+        get_word_extents_from_position(entry, &start, &end, priv->mark_character);
 
         if ((word = get_word(entry, start, end)) != NULL) {
 		strncpy(gtkaspell->theword, word, GTKASPELLWORDSIZE - 1);
@@ -652,17 +650,18 @@ static void claws_spell_entry_populate_popup(ClawsSpellEntry *entry, GtkMenu *me
 static void claws_spell_entry_changed(GtkEditable *editable, gpointer data)
 {
 	ClawsSpellEntry *entry = CLAWS_SPELL_ENTRY(editable);
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 
 	if (entry->gtkaspell == NULL)
 		return;
 
-	if (entry->priv->words) {
-		g_strfreev(entry->priv->words);
-		g_free(entry->priv->word_starts);
-		g_free(entry->priv->word_ends);
+	if (priv->words) {
+		g_strfreev(priv->words);
+		g_free(priv->word_starts);
+		g_free(priv->word_ends);
 	}
-	entry_strsplit_utf8(GTK_ENTRY(entry), &entry->priv->words, 
-			&entry->priv->word_starts, &entry->priv->word_ends);
+	entry_strsplit_utf8(GTK_ENTRY(entry), &priv->words, 
+			&priv->word_starts, &priv->word_ends);
 	if(entry->gtkaspell->check_while_typing == TRUE)
         	claws_spell_entry_recheck_all(entry);
 }
@@ -672,8 +671,9 @@ static void claws_spell_entry_preedit_changed		(GtkEntry *_entry,
 						 gpointer data)
 {
 	ClawsSpellEntry *entry = CLAWS_SPELL_ENTRY(_entry);
+	ClawsSpellEntryPrivate *priv = CLAWS_SPELL_ENTRY_GET_PRIVATE(entry);
 
-	entry->priv->preedit_length = preedit != NULL ? strlen(preedit) : 0;
+	priv->preedit_length = preedit != NULL ? strlen(preedit) : 0;
 }
 
 static void continue_check(gpointer *data)
diff --git a/src/gtk/spell_entry.h b/src/gtk/spell_entry.h
index aaa49da..d2a99fc 100644
--- a/src/gtk/spell_entry.h
+++ b/src/gtk/spell_entry.h
@@ -33,7 +33,6 @@ G_BEGIN_DECLS
 
 typedef struct _ClawsSpellEntry ClawsSpellEntry;
 typedef struct _ClawsSpellEntryClass ClawsSpellEntryClass;
-typedef struct _ClawsSpellEntryPriv ClawsSpellEntryPriv;
 
 #include <gtk/gtk.h>
 #include "gtkaspell.h"
@@ -47,7 +46,6 @@ struct _ClawsSpellEntry
 {
 	GtkEntry parent_object;
 	
-	ClawsSpellEntryPriv *priv;
 	GtkAspell *gtkaspell;
        
 	void (*gtk_reserved1)(void);

-----------------------------------------------------------------------


hooks/post-receive
-- 
Claws Mail


More information about the Commits mailing list