]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktext.c
Fix #56586
[~andy/gtk] / gtk / gtktext.c
index f573091977ff44a5bccd5b360282a425ae07e3f8..d5b5987abec2d5ea405c5bf6a6808fb7eb4e08ad 100644 (file)
@@ -204,6 +204,7 @@ static void  gtk_text_get_property   (GObject         *object,
                                      guint            prop_id,
                                      GValue          *value,
                                      GParamSpec      *pspec);
+static void  gtk_text_editable_init  (GtkEditableClass *iface);
 static void  gtk_text_init           (GtkText        *text);
 static void  gtk_text_destroy        (GtkObject      *object);
 static void  gtk_text_finalize       (GObject        *object);
@@ -220,11 +221,11 @@ static void  gtk_text_size_allocate  (GtkWidget      *widget,
                                      GtkAllocation  *allocation);
 static void  gtk_text_adjustment     (GtkAdjustment  *adjustment,
                                      GtkText        *text);
-static void   gtk_text_insert_text       (GtkOldEditable *old_editable,
+static void   gtk_text_insert_text       (GtkEditable    *editable,
                                          const gchar    *new_text,
                                          gint            new_text_length,
                                          gint           *position);
-static void   gtk_text_delete_text       (GtkOldEditable *old_editable,
+static void   gtk_text_delete_text       (GtkEditable    *editable,
                                          gint            start_pos,
                                          gint            end_pos);
 static void   gtk_text_update_text       (GtkOldEditable *old_editable,
@@ -526,8 +527,18 @@ gtk_text_get_type (void)
         /* reserved_2 */ NULL,
         (GtkClassInitFunc) NULL,
       };
+
+      static const GInterfaceInfo editable_info =
+      {
+       (GInterfaceInitFunc) gtk_text_editable_init, /* interface_init */
+       NULL, /* interface_finalize */
+       NULL  /* interface_data */
+      };
       
       text_type = gtk_type_unique (GTK_TYPE_OLD_EDITABLE, &text_info);
+      g_type_add_interface_static (text_type,
+                                  GTK_TYPE_EDITABLE,
+                                  &editable_info);
     }
   
   return text_type;
@@ -568,8 +579,6 @@ gtk_text_class_init (GtkTextClass *class)
   widget_class->focus_out_event = gtk_text_focus_out;
 
   old_editable_class->set_editable = gtk_text_real_set_editable;
-  old_editable_class->insert_text = gtk_text_insert_text;
-  old_editable_class->delete_text = gtk_text_delete_text;
   
   old_editable_class->move_cursor = gtk_text_move_cursor;
   old_editable_class->move_word = gtk_text_move_word;
@@ -693,6 +702,13 @@ gtk_text_get_property (GObject         *object,
     }
 }
 
+static void
+gtk_text_editable_init (GtkEditableClass *iface)
+{
+  iface->insert_text = gtk_text_insert_text;
+  iface->delete_text = gtk_text_delete_text;
+}
+
 static void
 gtk_text_init (GtkText *text)
 {
@@ -1861,12 +1877,12 @@ gtk_text_motion_notify (GtkWidget      *widget,
 }
 
 static void 
-gtk_text_insert_text    (GtkOldEditable    *old_editable,
+gtk_text_insert_text    (GtkEditable       *editable,
                         const gchar       *new_text,
                         gint               new_text_length,
                         gint              *position)
 {
-  GtkText *text = GTK_TEXT (old_editable);
+  GtkText *text = GTK_TEXT (editable);
   GdkFont *font;
   GdkColor *fore, *back;
 
@@ -1885,7 +1901,7 @@ gtk_text_insert_text    (GtkOldEditable    *old_editable,
 }
 
 static void 
-gtk_text_delete_text    (GtkOldEditable    *old_editable,
+gtk_text_delete_text    (GtkEditable       *editable,
                         gint               start_pos,
                         gint               end_pos)
 {
@@ -1893,7 +1909,7 @@ gtk_text_delete_text    (GtkOldEditable    *old_editable,
   
   g_return_if_fail (start_pos >= 0);
   
-  text = GTK_TEXT (old_editable);
+  text = GTK_TEXT (editable);
   
   gtk_text_set_point (text, start_pos);
   if (end_pos < 0)