+static void
+gtk_editable_base_init (gpointer g_class)
+{
+ static gboolean initialized = FALSE;
+
+ if (! initialized)
+ {
+ /**
+ * GtkEditable::insert-text:
+ * @editable: the object which received the signal
+ * @new_text: the new text to insert
+ * @new_text_length: the length of the new text, in bytes,
+ * or -1 if new_text is nul-terminated
+ * @position: (inout) (type int): the position, in characters,
+ * at which to insert the new text. this is an in-out
+ * parameter. After the signal emission is finished, it
+ * should point after the newly inserted text.
+ *
+ * This signal is emitted when text is inserted into
+ * the widget by the user. The default handler for
+ * this signal will normally be responsible for inserting
+ * the text, so by connecting to this signal and then
+ * stopping the signal with g_signal_stop_emission(), it
+ * is possible to modify the inserted text, or prevent
+ * it from being inserted entirely.
+ */
+ g_signal_new (I_("insert-text"),
+ GTK_TYPE_EDITABLE,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GtkEditableInterface, insert_text),
+ NULL, NULL,
+ _gtk_marshal_VOID__STRING_INT_POINTER,
+ G_TYPE_NONE, 3,
+ G_TYPE_STRING,
+ G_TYPE_INT,
+ G_TYPE_POINTER);
+
+ /**
+ * GtkEditable::delete-text:
+ * @editable: the object which received the signal
+ * @start_pos: the starting position
+ * @end_pos: the end position
+ *
+ * This signal is emitted when text is deleted from
+ * the widget by the user. The default handler for
+ * this signal will normally be responsible for deleting
+ * the text, so by connecting to this signal and then
+ * stopping the signal with g_signal_stop_emission(), it
+ * is possible to modify the range of deleted text, or
+ * prevent it from being deleted entirely. The @start_pos
+ * and @end_pos parameters are interpreted as for
+ * gtk_editable_delete_text().
+ */
+ g_signal_new (I_("delete-text"),
+ GTK_TYPE_EDITABLE,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GtkEditableInterface, delete_text),
+ NULL, NULL,
+ _gtk_marshal_VOID__INT_INT,
+ G_TYPE_NONE, 2,
+ G_TYPE_INT,
+ G_TYPE_INT);
+ /**
+ * GtkEditable::changed:
+ * @editable: the object which received the signal
+ *
+ * The ::changed signal is emitted at the end of a single
+ * user-visible operation on the contents of the #GtkEditable.
+ *
+ * E.g., a paste operation that replaces the contents of the
+ * selection will cause only one signal emission (even though it
+ * is implemented by first deleting the selection, then inserting
+ * the new content, and may cause multiple ::notify::text signals
+ * to be emitted).
+ */
+ g_signal_new (I_("changed"),
+ GTK_TYPE_EDITABLE,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GtkEditableInterface, changed),
+ NULL, NULL,
+ _gtk_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ initialized = TRUE;
+ }
+}
+
+/**
+ * gtk_editable_insert_text:
+ * @editable: a #GtkEditable
+ * @new_text: the text to append
+ * @new_text_length: the length of the text in bytes, or -1
+ * @position: (inout): location of the position text will be inserted at
+ *
+ * Inserts @new_text_length bytes of @new_text into the contents of the
+ * widget, at position @position.
+ *
+ * Note that the position is in characters, not in bytes.
+ * The function updates @position to point after the newly inserted text.
+ *
+ * Virtual: do_insert_text
+ */