summaryrefslogtreecommitdiff
path: root/gtk/gtktextbuffer.c
diff options
context:
space:
mode:
authorIgnacio Casal Quinteiro <icq@gnome.org>2010-07-13 11:23:57 +0200
committerIgnacio Casal Quinteiro <icq@gnome.org>2010-07-17 10:39:37 +0200
commita1be4eccb0cf3174860d9fc23f75aad3421f1886 (patch)
treee7a7d4fd3a5f0e7fea5d6c5a7685fb8c0abae0b1 /gtk/gtktextbuffer.c
parente42c29ca98c9a6316d5fe9158514ec0d0db52f9b (diff)
downloadgtk+-a1be4eccb0cf3174860d9fc23f75aad3421f1886.tar.gz
Move GtkTextBuffer sealed attributes to private struct.
Diffstat (limited to 'gtk/gtktextbuffer.c')
-rw-r--r--gtk/gtktextbuffer.c167
1 files changed, 99 insertions, 68 deletions
diff --git a/gtk/gtktextbuffer.c b/gtk/gtktextbuffer.c
index 2fec1e50fa..63d19c30af 100644
--- a/gtk/gtktextbuffer.c
+++ b/gtk/gtktextbuffer.c
@@ -44,7 +44,7 @@
#define GTK_TEXT_BUFFER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_TEXT_BUFFER, GtkTextBufferPrivate))
-typedef struct _GtkTextBufferPrivate GtkTextBufferPrivate;
+typedef struct _GtkTextLogAttrCache GtkTextLogAttrCache;
struct _GtkTextBufferPrivate
{
@@ -55,6 +55,21 @@ struct _GtkTextBufferPrivate
GtkTargetList *paste_target_list;
GtkTargetEntry *paste_target_entries;
gint n_paste_target_entries;
+
+ GtkTextTagTable *tag_table;
+ GtkTextBTree *btree;
+
+ GSList *clipboard_contents_buffers;
+ GSList *selection_clipboards;
+
+ GtkTextLogAttrCache *log_attr_cache;
+
+ guint user_action_count;
+
+ /* Whether the buffer has been modified since last save */
+ guint modified : 1;
+
+ guint has_selection : 1;
};
@@ -608,8 +623,10 @@ gtk_text_buffer_class_init (GtkTextBufferClass *klass)
static void
gtk_text_buffer_init (GtkTextBuffer *buffer)
{
- buffer->clipboard_contents_buffers = NULL;
- buffer->tag_table = NULL;
+ buffer->priv = GTK_TEXT_BUFFER_GET_PRIVATE (buffer);
+
+ buffer->priv->clipboard_contents_buffers = NULL;
+ buffer->priv->tag_table = NULL;
/* allow copying of arbiatray stuff in the internal rich text format */
gtk_text_buffer_register_serialize_tagset (buffer, NULL);
@@ -618,12 +635,14 @@ gtk_text_buffer_init (GtkTextBuffer *buffer)
static void
set_table (GtkTextBuffer *buffer, GtkTextTagTable *table)
{
- g_return_if_fail (buffer->tag_table == NULL);
+ GtkTextBufferPrivate *priv = buffer->priv;
+
+ g_return_if_fail (priv->tag_table == NULL);
if (table)
{
- buffer->tag_table = table;
- g_object_ref (buffer->tag_table);
+ priv->tag_table = table;
+ g_object_ref (priv->tag_table);
_gtk_text_tag_table_add_buffer (table, buffer);
}
}
@@ -631,13 +650,15 @@ set_table (GtkTextBuffer *buffer, GtkTextTagTable *table)
static GtkTextTagTable*
get_table (GtkTextBuffer *buffer)
{
- if (buffer->tag_table == NULL)
+ GtkTextBufferPrivate *priv = buffer->priv;
+
+ if (priv->tag_table == NULL)
{
- buffer->tag_table = gtk_text_tag_table_new ();
- _gtk_text_tag_table_add_buffer (buffer->tag_table, buffer);
+ priv->tag_table = gtk_text_tag_table_new ();
+ _gtk_text_tag_table_add_buffer (priv->tag_table, buffer);
}
- return buffer->tag_table;
+ return priv->tag_table;
}
static void
@@ -698,7 +719,7 @@ gtk_text_buffer_get_property (GObject *object,
}
case PROP_HAS_SELECTION:
- g_value_set_boolean (value, text_buffer->has_selection);
+ g_value_set_boolean (value, text_buffer->priv->has_selection);
break;
case PROP_CURSOR_POSITION:
@@ -754,28 +775,30 @@ static void
gtk_text_buffer_finalize (GObject *object)
{
GtkTextBuffer *buffer;
+ GtkTextBufferPrivate *priv;
buffer = GTK_TEXT_BUFFER (object);
+ priv = buffer->priv;
remove_all_selection_clipboards (buffer);
- if (buffer->tag_table)
+ if (priv->tag_table)
{
- _gtk_text_tag_table_remove_buffer (buffer->tag_table, buffer);
- g_object_unref (buffer->tag_table);
- buffer->tag_table = NULL;
+ _gtk_text_tag_table_remove_buffer (priv->tag_table, buffer);
+ g_object_unref (priv->tag_table);
+ priv->tag_table = NULL;
}
- if (buffer->btree)
+ if (priv->btree)
{
- _gtk_text_btree_unref (buffer->btree);
- buffer->btree = NULL;
+ _gtk_text_btree_unref (priv->btree);
+ priv->btree = NULL;
}
- if (buffer->log_attr_cache)
- free_log_attr_cache (buffer->log_attr_cache);
+ if (priv->log_attr_cache)
+ free_log_attr_cache (priv->log_attr_cache);
- buffer->log_attr_cache = NULL;
+ priv->log_attr_cache = NULL;
gtk_text_buffer_free_target_lists (buffer);
@@ -785,11 +808,13 @@ gtk_text_buffer_finalize (GObject *object)
static GtkTextBTree*
get_btree (GtkTextBuffer *buffer)
{
- if (buffer->btree == NULL)
- buffer->btree = _gtk_text_btree_new (gtk_text_buffer_get_tag_table (buffer),
- buffer);
+ GtkTextBufferPrivate *priv = buffer->priv;
+
+ if (priv->btree == NULL)
+ priv->btree = _gtk_text_btree_new (gtk_text_buffer_get_tag_table (buffer),
+ buffer);
- return buffer->btree;
+ return priv->btree;
}
GtkTextBTree*
@@ -1398,8 +1423,8 @@ gtk_text_buffer_insert_range (GtkTextBuffer *buffer,
g_return_if_fail (end != NULL);
g_return_if_fail (gtk_text_iter_get_buffer (start) ==
gtk_text_iter_get_buffer (end));
- g_return_if_fail (gtk_text_iter_get_buffer (start)->tag_table ==
- buffer->tag_table);
+ g_return_if_fail (gtk_text_iter_get_buffer (start)->priv->tag_table ==
+ buffer->priv->tag_table);
g_return_if_fail (gtk_text_iter_get_buffer (iter) == buffer);
gtk_text_buffer_real_insert_range (buffer, iter, start, end, FALSE);
@@ -1434,8 +1459,8 @@ gtk_text_buffer_insert_range_interactive (GtkTextBuffer *buffer,
g_return_val_if_fail (end != NULL, FALSE);
g_return_val_if_fail (gtk_text_iter_get_buffer (start) ==
gtk_text_iter_get_buffer (end), FALSE);
- g_return_val_if_fail (gtk_text_iter_get_buffer (start)->tag_table ==
- buffer->tag_table, FALSE);
+ g_return_val_if_fail (gtk_text_iter_get_buffer (start)->priv->tag_table ==
+ buffer->priv->tag_table, FALSE);
if (gtk_text_iter_can_insert (iter, default_editable))
{
@@ -1545,7 +1570,7 @@ gtk_text_buffer_insert_with_tags_by_name (GtkTextBuffer *buffer,
{
GtkTextTag *tag;
- tag = gtk_text_tag_table_lookup (buffer->tag_table,
+ tag = gtk_text_tag_table_lookup (buffer->priv->tag_table,
tag_name);
if (tag == NULL)
@@ -1585,9 +1610,9 @@ gtk_text_buffer_real_delete_range (GtkTextBuffer *buffer,
update_selection_clipboards (buffer);
has_selection = gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL);
- if (has_selection != buffer->has_selection)
+ if (has_selection != buffer->priv->has_selection)
{
- buffer->has_selection = has_selection;
+ buffer->priv->has_selection = has_selection;
g_object_notify (G_OBJECT (buffer), "has-selection");
}
@@ -2481,7 +2506,7 @@ gtk_text_buffer_real_apply_tag (GtkTextBuffer *buffer,
const GtkTextIter *start,
const GtkTextIter *end)
{
- if (tag->table != buffer->tag_table)
+ if (tag->table != buffer->priv->tag_table)
{
g_warning ("Can only apply tags that are in the tag table for the buffer");
return;
@@ -2496,7 +2521,7 @@ gtk_text_buffer_real_remove_tag (GtkTextBuffer *buffer,
const GtkTextIter *start,
const GtkTextIter *end)
{
- if (tag->table != buffer->tag_table)
+ if (tag->table != buffer->priv->tag_table)
{
g_warning ("Can only remove tags that are in the tag table for the buffer");
return;
@@ -2530,9 +2555,9 @@ gtk_text_buffer_real_mark_set (GtkTextBuffer *buffer,
NULL,
NULL);
- if (has_selection != buffer->has_selection)
+ if (has_selection != buffer->priv->has_selection)
{
- buffer->has_selection = has_selection;
+ buffer->priv->has_selection = has_selection;
g_object_notify (G_OBJECT (buffer), "has-selection");
}
}
@@ -2588,7 +2613,7 @@ gtk_text_buffer_apply_tag (GtkTextBuffer *buffer,
g_return_if_fail (end != NULL);
g_return_if_fail (gtk_text_iter_get_buffer (start) == buffer);
g_return_if_fail (gtk_text_iter_get_buffer (end) == buffer);
- g_return_if_fail (tag->table == buffer->tag_table);
+ g_return_if_fail (tag->table == buffer->priv->tag_table);
gtk_text_buffer_emit_tag (buffer, tag, TRUE, start, end);
}
@@ -2617,7 +2642,7 @@ gtk_text_buffer_remove_tag (GtkTextBuffer *buffer,
g_return_if_fail (end != NULL);
g_return_if_fail (gtk_text_iter_get_buffer (start) == buffer);
g_return_if_fail (gtk_text_iter_get_buffer (end) == buffer);
- g_return_if_fail (tag->table == buffer->tag_table);
+ g_return_if_fail (tag->table == buffer->priv->tag_table);
gtk_text_buffer_emit_tag (buffer, tag, FALSE, start, end);
}
@@ -2999,7 +3024,7 @@ gtk_text_buffer_get_modified (GtkTextBuffer *buffer)
{
g_return_val_if_fail (GTK_IS_TEXT_BUFFER (buffer), FALSE);
- return buffer->modified;
+ return buffer->priv->modified;
}
/**
@@ -3023,11 +3048,11 @@ gtk_text_buffer_set_modified (GtkTextBuffer *buffer,
fixed_setting = setting != FALSE;
- if (buffer->modified == fixed_setting)
+ if (buffer->priv->modified == fixed_setting)
return;
else
{
- buffer->modified = fixed_setting;
+ buffer->priv->modified = fixed_setting;
g_signal_emit (buffer, signals[MODIFIED_CHANGED], 0);
}
}
@@ -3047,7 +3072,7 @@ gtk_text_buffer_get_has_selection (GtkTextBuffer *buffer)
{
g_return_val_if_fail (GTK_IS_TEXT_BUFFER (buffer), FALSE);
- return buffer->has_selection;
+ return buffer->priv->has_selection;
}
@@ -3594,9 +3619,9 @@ static void
update_selection_clipboards (GtkTextBuffer *buffer)
{
GtkTextBufferPrivate *priv;
- GSList *tmp_list = buffer->selection_clipboards;
+ GSList *tmp_list = buffer->priv->selection_clipboards;
- priv = GTK_TEXT_BUFFER_GET_PRIVATE (buffer);
+ priv = buffer->priv;
gtk_text_buffer_get_copy_target_list (buffer);
@@ -3638,7 +3663,7 @@ static SelectionClipboard *
find_selection_clipboard (GtkTextBuffer *buffer,
GtkClipboard *clipboard)
{
- GSList *tmp_list = buffer->selection_clipboards;
+ GSList *tmp_list = buffer->priv->selection_clipboards;
while (tmp_list)
{
SelectionClipboard *selection_clipboard = tmp_list->data;
@@ -3681,7 +3706,8 @@ gtk_text_buffer_add_selection_clipboard (GtkTextBuffer *buffer,
selection_clipboard->clipboard = clipboard;
selection_clipboard->ref_count = 1;
- buffer->selection_clipboards = g_slist_prepend (buffer->selection_clipboards, selection_clipboard);
+ buffer->priv->selection_clipboards = g_slist_prepend (buffer->priv->selection_clipboards,
+ selection_clipboard);
}
}
@@ -3712,8 +3738,8 @@ gtk_text_buffer_remove_selection_clipboard (GtkTextBuffer *buffer,
if (gtk_clipboard_get_owner (selection_clipboard->clipboard) == G_OBJECT (buffer))
gtk_clipboard_clear (selection_clipboard->clipboard);
- buffer->selection_clipboards = g_slist_remove (buffer->selection_clipboards,
- selection_clipboard);
+ buffer->priv->selection_clipboards = g_slist_remove (buffer->priv->selection_clipboards,
+ selection_clipboard);
g_free (selection_clipboard);
}
@@ -3722,9 +3748,11 @@ gtk_text_buffer_remove_selection_clipboard (GtkTextBuffer *buffer,
static void
remove_all_selection_clipboards (GtkTextBuffer *buffer)
{
- g_slist_foreach (buffer->selection_clipboards, (GFunc)g_free, NULL);
- g_slist_free (buffer->selection_clipboards);
- buffer->selection_clipboards = NULL;
+ GtkTextBufferPrivate *priv = buffer->priv;
+
+ g_slist_foreach (priv->selection_clipboards, (GFunc)g_free, NULL);
+ g_slist_free (priv->selection_clipboards);
+ priv->selection_clipboards = NULL;
}
/**
@@ -3933,7 +3961,7 @@ cut_or_copy (GtkTextBuffer *buffer,
GtkTextIter start;
GtkTextIter end;
- priv = GTK_TEXT_BUFFER_GET_PRIVATE (buffer);
+ priv = buffer->priv;
gtk_text_buffer_get_copy_target_list (buffer);
@@ -4070,9 +4098,9 @@ gtk_text_buffer_begin_user_action (GtkTextBuffer *buffer)
{
g_return_if_fail (GTK_IS_TEXT_BUFFER (buffer));
- buffer->user_action_count += 1;
+ buffer->priv->user_action_count += 1;
- if (buffer->user_action_count == 1)
+ if (buffer->priv->user_action_count == 1)
{
/* Outermost nested user action begin emits the signal */
g_signal_emit (buffer, signals[BEGIN_USER_ACTION], 0);
@@ -4090,11 +4118,11 @@ void
gtk_text_buffer_end_user_action (GtkTextBuffer *buffer)
{
g_return_if_fail (GTK_IS_TEXT_BUFFER (buffer));
- g_return_if_fail (buffer->user_action_count > 0);
+ g_return_if_fail (buffer->priv->user_action_count > 0);
- buffer->user_action_count -= 1;
+ buffer->priv->user_action_count -= 1;
- if (buffer->user_action_count == 0)
+ if (buffer->priv->user_action_count == 0)
{
/* Ended the outermost-nested user action end, so emit the signal */
g_signal_emit (buffer, signals[END_USER_ACTION], 0);
@@ -4104,7 +4132,7 @@ gtk_text_buffer_end_user_action (GtkTextBuffer *buffer)
static void
gtk_text_buffer_free_target_lists (GtkTextBuffer *buffer)
{
- GtkTextBufferPrivate *priv = GTK_TEXT_BUFFER_GET_PRIVATE (buffer);
+ GtkTextBufferPrivate *priv = buffer->priv;
if (priv->copy_target_list)
{
@@ -4178,7 +4206,7 @@ gtk_text_buffer_get_copy_target_list (GtkTextBuffer *buffer)
g_return_val_if_fail (GTK_IS_TEXT_BUFFER (buffer), NULL);
- priv = GTK_TEXT_BUFFER_GET_PRIVATE (buffer);
+ priv = buffer->priv;
if (! priv->copy_target_list)
priv->copy_target_list =
@@ -4210,7 +4238,7 @@ gtk_text_buffer_get_paste_target_list (GtkTextBuffer *buffer)
g_return_val_if_fail (GTK_IS_TEXT_BUFFER (buffer), NULL);
- priv = GTK_TEXT_BUFFER_GET_PRIVATE (buffer);
+ priv = buffer->priv;
if (! priv->paste_target_list)
priv->paste_target_list =
@@ -4312,6 +4340,7 @@ _gtk_text_buffer_get_line_log_attrs (GtkTextBuffer *buffer,
const GtkTextIter *anywhere_in_line,
gint *char_len)
{
+ GtkTextBufferPrivate *priv;
gint line;
GtkTextLogAttrCache *cache;
gint i;
@@ -4319,6 +4348,8 @@ _gtk_text_buffer_get_line_log_attrs (GtkTextBuffer *buffer,
g_return_val_if_fail (GTK_IS_TEXT_BUFFER (buffer), NULL);
g_return_val_if_fail (anywhere_in_line != NULL, NULL);
+ priv = buffer->priv;
+
/* special-case for empty last line in buffer */
if (gtk_text_iter_is_end (anywhere_in_line) &&
gtk_text_iter_get_line_offset (anywhere_in_line) == 0)
@@ -4332,19 +4363,19 @@ _gtk_text_buffer_get_line_log_attrs (GtkTextBuffer *buffer,
* the start of a paragraph changes
*/
- if (buffer->log_attr_cache == NULL)
+ if (priv->log_attr_cache == NULL)
{
- buffer->log_attr_cache = g_new0 (GtkTextLogAttrCache, 1);
- buffer->log_attr_cache->chars_changed_stamp =
+ priv->log_attr_cache = g_new0 (GtkTextLogAttrCache, 1);
+ priv->log_attr_cache->chars_changed_stamp =
_gtk_text_btree_get_chars_changed_stamp (get_btree (buffer));
}
- else if (buffer->log_attr_cache->chars_changed_stamp !=
+ else if (priv->log_attr_cache->chars_changed_stamp !=
_gtk_text_btree_get_chars_changed_stamp (get_btree (buffer)))
{
- clear_log_attr_cache (buffer->log_attr_cache);
+ clear_log_attr_cache (priv->log_attr_cache);
}
- cache = buffer->log_attr_cache;
+ cache = priv->log_attr_cache;
line = gtk_text_iter_get_line (anywhere_in_line);
i = 0;
@@ -4385,8 +4416,8 @@ _gtk_text_buffer_notify_will_remove_tag (GtkTextBuffer *buffer,
* code messing things up at this point; the tag MUST be removed
* entirely.
*/
- if (buffer->btree)
- _gtk_text_btree_notify_will_remove_tag (buffer->btree, tag);
+ if (buffer->priv->btree)
+ _gtk_text_btree_notify_will_remove_tag (buffer->priv->btree, tag);
}
/*