rpms/gtk+extra/devel gtk+extra-2.1.1-gtk2.18.patch, NONE, 1.1 gtk+extra.spec, 1.15, 1.16

Roy Rankin rrankin at fedoraproject.org
Sat Dec 19 23:03:23 UTC 2009


Author: rrankin

Update of /cvs/pkgs/rpms/gtk+extra/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv18870

Modified Files:
	gtk+extra.spec 
Added Files:
	gtk+extra-2.1.1-gtk2.18.patch 
Log Message:
Patch to stop crashes with gtk+ 2.18


gtk+extra-2.1.1-gtk2.18.patch:
 gtkitementry.c |   58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 gtksheet.c     |    2 -
 2 files changed, 57 insertions(+), 3 deletions(-)

--- NEW FILE gtk+extra-2.1.1-gtk2.18.patch ---
diff --git a/gtkextra/gtkitementry.c b/gtkextra/gtkitementry.c
index 6a42880..377c4ea 100644
--- a/gtkextra/gtkitementry.c
+++ b/gtkextra/gtkitementry.c
@@ -170,6 +170,26 @@ static void         get_widget_window_size             (GtkEntry       *entry,
 
 static GtkEntryClass *parent_class = NULL;
 
+#ifdef GTK_TYPE_ENTRY_BUFFER
+// In GTK+ 2.18, changes were made to GtkEntry. This caused gtk+extra
+// to crash. So from 2.18 call the appropriate buffer routines in GTK+
+// gtk/gtkentrybuffer.c. 
+//
+// rrankin AT ihug DOT com DOT au 21/12/09
+//
+typedef struct _GtkEntryPrivate GtkEntryPrivate;
+
+struct _GtkEntryPrivate
+{
+  GtkEntryBuffer* buffer;
+  // The remainder of this structure has been truncated 
+
+};
+
+#define GTK_ENTRY_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_ENTRY, GtkEntryPrivate))
+
+#endif
+
 GtkType
 gtk_item_entry_get_type (void)
 {
@@ -670,6 +690,27 @@ gtk_entry_get_position (GtkEditable *editable)
   return GTK_ENTRY (editable)->current_pos;
 }
 
+#ifdef GTK_TYPE_ENTRY_BUFFER
+//
+// Get_buffer copied from gtk/gtkentry.c
+//
+static GtkEntryBuffer*
+get_buffer (GtkEntry *entry)
+{
+  GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (entry);
+
+  if (priv->buffer == NULL)
+    {
+      GtkEntryBuffer *buffer;
+      buffer = gtk_entry_buffer_new (NULL, 0);
+      gtk_entry_set_buffer (entry, buffer);
+      g_object_unref (buffer);
+    }
+
+  return priv->buffer;
+}
+
+#endif //GTK_TYPE_ENTRY_BUFFER
 
 /* Default signal handlers
  */
@@ -679,7 +720,6 @@ gtk_entry_real_insert_text (GtkEditable *editable,
 			    gint         new_text_length,
 			    gint        *position)
 {
-  gint index;
   gint n_chars;
 
   GtkItemEntry *ientry = GTK_ITEM_ENTRY (editable);
@@ -696,6 +736,11 @@ gtk_entry_real_insert_text (GtkEditable *editable,
       new_text_length = g_utf8_offset_to_pointer (new_text, n_chars) - new_text;
     }
 
+#ifdef GTK_TYPE_ENTRY_BUFFER
+   GtkEntryBuffer *buffer = get_buffer(entry);
+   n_chars  = gtk_entry_buffer_insert_text(buffer, *position, new_text, new_text_length);
+#else
+
   if (new_text_length + ientry->item_n_bytes + 1 > ientry->item_text_size)
     {
       while (new_text_length + ientry->item_n_bytes + 1 > ientry->item_text_size)
@@ -724,10 +769,12 @@ gtk_entry_real_insert_text (GtkEditable *editable,
       entry->text = g_realloc (entry->text, ientry->item_text_size);
     }
 
+  gint index;
   index = g_utf8_offset_to_pointer (entry->text, *position) - entry->text;
 
   g_memmove (entry->text + index + new_text_length, entry->text + index, ientry->item_n_bytes - index);
   memcpy (entry->text + index, new_text, new_text_length);
+#endif //GTK_TYPE_ENTRY_BUFFER
 
   ientry->item_n_bytes += new_text_length;
   entry->text_length += n_chars;
@@ -755,7 +802,6 @@ gtk_entry_real_delete_text (GtkEditable *editable,
 			    gint         end_pos)
 {
   GtkEntry *entry = GTK_ENTRY (editable);
-  GtkItemEntry *ientry = GTK_ITEM_ENTRY (editable);
 
   if (start_pos < 0)
     start_pos = 0;
@@ -764,6 +810,11 @@ gtk_entry_real_delete_text (GtkEditable *editable,
   
   if (start_pos < end_pos)
     {
+#ifdef GTK_TYPE_ENTRY_BUFFER
+      GtkEntryBuffer *buffer = get_buffer(entry);
+      gtk_entry_buffer_delete_text (buffer, start_pos, end_pos-start_pos);
+#else
+      GtkItemEntry *ientry = GTK_ITEM_ENTRY (editable);
       gint start_index = g_utf8_offset_to_pointer (entry->text, start_pos) - entry->text;
       gint end_index = g_utf8_offset_to_pointer (entry->text, end_pos) - entry->text;
 
@@ -776,6 +827,7 @@ gtk_entry_real_delete_text (GtkEditable *editable,
 
       if (entry->selection_bound > start_pos)
 	entry->selection_bound -= MIN (entry->selection_bound, end_pos) - start_pos;
+#endif // GTK_TYPE_ENTRY_BUFFER
       /* We might have deleted the selection
        */
       gtk_entry_update_primary_selection (entry);
@@ -863,6 +915,7 @@ gtk_entry_move_cursor (GtkEntry       *entry,
 	case GTK_MOVEMENT_DISPLAY_LINES:
 	case GTK_MOVEMENT_PARAGRAPHS:
 	case GTK_MOVEMENT_PAGES:
+	case GTK_MOVEMENT_HORIZONTAL_PAGES:
 	  break;
 	}
     }
@@ -896,6 +949,7 @@ gtk_entry_move_cursor (GtkEntry       *entry,
 	case GTK_MOVEMENT_DISPLAY_LINES:
 	case GTK_MOVEMENT_PARAGRAPHS:
 	case GTK_MOVEMENT_PAGES:
+	case GTK_MOVEMENT_HORIZONTAL_PAGES:
 	  break;
 	}
     }
diff --git a/gtkextra/gtksheet.c b/gtkextra/gtksheet.c
index 10ab5f0..d3d96e3 100644
--- a/gtkextra/gtksheet.c
+++ b/gtkextra/gtksheet.c
@@ -6951,7 +6951,7 @@ draw_xor_rectangle(GtkSheet *sheet, GtkSheetRange range)
 
    gdk_gc_set_clip_rectangle(sheet->xor_gc, &clip_area);
 
-   for(i=-1;i<=1;i=++i)
+   for(i=-1;i<=1;i++)
      gdk_draw_rectangle(sheet->sheet_window,
                         sheet->xor_gc,
 		        FALSE,


Index: gtk+extra.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gtk+extra/devel/gtk+extra.spec,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -p -r1.15 -r1.16
--- gtk+extra.spec	1 Aug 2009 00:13:30 -0000	1.15
+++ gtk+extra.spec	19 Dec 2009 23:03:23 -0000	1.16
@@ -1,6 +1,6 @@
 Name:		gtk+extra
 Version:	2.1.1
-Release:	12%{?dist}
+Release:	13%{?dist}
 Summary:	A library of gtk+ widgets
 Summary(fr):	Une bibliothèque de widgets gtk+
 
@@ -11,6 +11,7 @@ Source:		http://dl.sf.net/scigraphica/gt
 Patch:		%{name}-%{version}.g_free.diff
 Patch1:		%{name}-%{version}-deleterow.patch
 Patch2:		%{name}-%{version}-item.patch
+Patch3:		%{name}-%{version}-gtk2.18.patch
 BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 BuildRequires:	gtk2-devel
@@ -49,6 +50,7 @@ qui utilisent les widgets gtk+extra.
 %patch -p0
 %patch1 -p1
 %patch2 -p1
+%patch3 -p1
 
 %build
 %configure
@@ -83,6 +85,9 @@ rm -rf $RPM_BUILD_ROOT
 
 
 %changelog
+* Sun Dec 20 2009 Roy Rankin <rrankin[AT]ihug[DOT]com[DOT]au> - 2.1.1-13
+- Fix crash issue with gtk2-2.18 BZ 546648
+
 * Sat Aug 01 2009 Roy Rankin <rrankin[AT]ihug[DOT]com[DOT]au> - 2.1.1-12
 - Patch to compile with gtk2-2.17.5
 




More information about the scm-commits mailing list