summaryrefslogtreecommitdiff
path: root/gtk/gtktextbuffer.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-09-06 15:38:14 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-09-06 17:13:34 -0400
commit8ee711bbc90afa3104dc0154cd76db9914bd5021 (patch)
tree65b99baad611d575ab2dca2746b85f113cb89991 /gtk/gtktextbuffer.c
parent65be0f5be92df2d7ee486fc10f758b06a1fded97 (diff)
downloadgtk+-8ee711bbc90afa3104dc0154cd76db9914bd5021.tar.gz
text buffer: Convert to g_object_notify_by_pspec
This avoids pspec lookup overhead in g_object_notify.
Diffstat (limited to 'gtk/gtktextbuffer.c')
-rw-r--r--gtk/gtktextbuffer.c107
1 files changed, 53 insertions, 54 deletions
diff --git a/gtk/gtktextbuffer.c b/gtk/gtktextbuffer.c
index 9f5f04d4d0..7b557b34f1 100644
--- a/gtk/gtktextbuffer.c
+++ b/gtk/gtktextbuffer.c
@@ -117,7 +117,8 @@ enum {
PROP_HAS_SELECTION,
PROP_CURSOR_POSITION,
PROP_COPY_TARGET_LIST,
- PROP_PASTE_TARGET_LIST
+ PROP_PASTE_TARGET_LIST,
+ LAST_PROP
};
static void gtk_text_buffer_finalize (GObject *object);
@@ -170,6 +171,7 @@ static void gtk_text_buffer_notify (GObject *object,
GParamSpec *pspec);
static guint signals[LAST_SIGNAL] = { 0 };
+static GParamSpec *text_buffer_props[LAST_PROP];
G_DEFINE_TYPE_WITH_PRIVATE (GtkTextBuffer, gtk_text_buffer, G_TYPE_OBJECT)
@@ -193,16 +195,15 @@ gtk_text_buffer_class_init (GtkTextBufferClass *klass)
klass->mark_set = gtk_text_buffer_real_mark_set;
/* Construct */
- g_object_class_install_property (object_class,
- PROP_TAG_TABLE,
- g_param_spec_object ("tag-table",
- P_("Tag Table"),
- P_("Text Tag Table"),
- GTK_TYPE_TEXT_TAG_TABLE,
- GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- /* Normal properties*/
-
+ text_buffer_props[PROP_TAG_TABLE] =
+ g_param_spec_object ("tag-table",
+ P_("Tag Table"),
+ P_("Text Tag Table"),
+ GTK_TYPE_TEXT_TAG_TABLE,
+ GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+
+ /* Normal properties */
+
/**
* GtkTextBuffer:text:
*
@@ -211,13 +212,12 @@ gtk_text_buffer_class_init (GtkTextBufferClass *klass)
*
* Since: 2.8
*/
- g_object_class_install_property (object_class,
- PROP_TEXT,
- g_param_spec_string ("text",
- P_("Text"),
- P_("Current text of the buffer"),
- "",
- GTK_PARAM_READWRITE));
+ text_buffer_props[PROP_TEXT] =
+ g_param_spec_string ("text",
+ P_("Text"),
+ P_("Current text of the buffer"),
+ "",
+ GTK_PARAM_READWRITE);
/**
* GtkTextBuffer:has-selection:
@@ -226,30 +226,29 @@ gtk_text_buffer_class_init (GtkTextBufferClass *klass)
*
* Since: 2.10
*/
- g_object_class_install_property (object_class,
- PROP_HAS_SELECTION,
- g_param_spec_boolean ("has-selection",
- P_("Has selection"),
- P_("Whether the buffer has some text currently selected"),
- FALSE,
- GTK_PARAM_READABLE));
+ text_buffer_props[PROP_HAS_SELECTION] =
+ g_param_spec_boolean ("has-selection",
+ P_("Has selection"),
+ P_("Whether the buffer has some text currently selected"),
+ FALSE,
+ GTK_PARAM_READABLE);
/**
* GtkTextBuffer:cursor-position:
*
- * The position of the insert mark (as offset from the beginning
- * of the buffer). It is useful for getting notified when the
+ * The position of the insert mark (as offset from the beginning
+ * of the buffer). It is useful for getting notified when the
* cursor moves.
*
* Since: 2.10
*/
- g_object_class_install_property (object_class,
- PROP_CURSOR_POSITION,
- g_param_spec_int ("cursor-position",
- P_("Cursor position"),
- P_("The position of the insert mark (as offset from the beginning of the buffer)"),
- 0, G_MAXINT, 0,
- GTK_PARAM_READABLE));
+ text_buffer_props[PROP_CURSOR_POSITION] =
+ g_param_spec_int ("cursor-position",
+ P_("Cursor position"),
+ P_("The position of the insert mark (as offset from the beginning of the buffer)"),
+ 0, G_MAXINT,
+ 0,
+ GTK_PARAM_READABLE);
/**
* GtkTextBuffer:copy-target-list:
@@ -259,13 +258,12 @@ gtk_text_buffer_class_init (GtkTextBufferClass *klass)
*
* Since: 2.10
*/
- g_object_class_install_property (object_class,
- PROP_COPY_TARGET_LIST,
- g_param_spec_boxed ("copy-target-list",
- P_("Copy target list"),
- P_("The list of targets this buffer supports for clipboard copying and DND source"),
- GTK_TYPE_TARGET_LIST,
- GTK_PARAM_READABLE));
+ text_buffer_props[PROP_COPY_TARGET_LIST] =
+ g_param_spec_boxed ("copy-target-list",
+ P_("Copy target list"),
+ P_("The list of targets this buffer supports for clipboard copying and DND source"),
+ GTK_TYPE_TARGET_LIST,
+ GTK_PARAM_READABLE);
/**
* GtkTextBuffer:paste-target-list:
@@ -275,13 +273,14 @@ gtk_text_buffer_class_init (GtkTextBufferClass *klass)
*
* Since: 2.10
*/
- g_object_class_install_property (object_class,
- PROP_PASTE_TARGET_LIST,
- g_param_spec_boxed ("paste-target-list",
- P_("Paste target list"),
- P_("The list of targets this buffer supports for clipboard pasting and DND destination"),
- GTK_TYPE_TARGET_LIST,
- GTK_PARAM_READABLE));
+ text_buffer_props[PROP_PASTE_TARGET_LIST] =
+ g_param_spec_boxed ("paste-target-list",
+ P_("Paste target list"),
+ P_("The list of targets this buffer supports for clipboard pasting and DND destination"),
+ GTK_TYPE_TARGET_LIST,
+ GTK_PARAM_READABLE);
+
+ g_object_class_install_properties (object_class, LAST_PROP, text_buffer_props);
/**
* GtkTextBuffer::insert-text:
@@ -895,7 +894,7 @@ gtk_text_buffer_real_insert_text (GtkTextBuffer *buffer,
_gtk_text_btree_insert (iter, text, len);
g_signal_emit (buffer, signals[CHANGED], 0);
- g_object_notify (G_OBJECT (buffer), "cursor-position");
+ g_object_notify_by_pspec (G_OBJECT (buffer), text_buffer_props[PROP_CURSOR_POSITION]);
}
static void
@@ -1616,11 +1615,11 @@ gtk_text_buffer_real_delete_range (GtkTextBuffer *buffer,
if (has_selection != buffer->priv->has_selection)
{
buffer->priv->has_selection = has_selection;
- g_object_notify (G_OBJECT (buffer), "has-selection");
+ g_object_notify_by_pspec (G_OBJECT (buffer), text_buffer_props[PROP_HAS_SELECTION]);
}
g_signal_emit (buffer, signals[CHANGED], 0);
- g_object_notify (G_OBJECT (buffer), "cursor-position");
+ g_object_notify_by_pspec (G_OBJECT (buffer), text_buffer_props[PROP_CURSOR_POSITION]);
}
static void
@@ -2541,7 +2540,7 @@ gtk_text_buffer_real_changed (GtkTextBuffer *buffer)
{
gtk_text_buffer_set_modified (buffer, TRUE);
- g_object_notify (G_OBJECT (buffer), "text");
+ g_object_notify_by_pspec (G_OBJECT (buffer), text_buffer_props[PROP_TEXT]);
}
static void
@@ -2566,12 +2565,12 @@ gtk_text_buffer_real_mark_set (GtkTextBuffer *buffer,
if (has_selection != buffer->priv->has_selection)
{
buffer->priv->has_selection = has_selection;
- g_object_notify (G_OBJECT (buffer), "has-selection");
+ g_object_notify_by_pspec (G_OBJECT (buffer), text_buffer_props[PROP_HAS_SELECTION]);
}
}
if (mark == insert)
- g_object_notify (G_OBJECT (buffer), "cursor-position");
+ g_object_notify_by_pspec (G_OBJECT (buffer), text_buffer_props[PROP_CURSOR_POSITION]);
}
static void