summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald van Dijk <truedfx@gentoo.org>2009-05-12 18:24:27 +0000
committerHarald van Dijk <truedfx@gentoo.org>2009-05-12 18:24:27 +0000
commit59a4ecc3aa543fe52be29e940689b9c024b7687a (patch)
tree3ff1c90c6acbd08593babee389c624be5a9d4bd5 /dev-lang/lazarus/files
parentFix from friendly administrator, use -2 instead of -w in SOX parameters wrt #... (diff)
downloadgentoo-2-59a4ecc3aa543fe52be29e940689b9c024b7687a.tar.gz
gentoo-2-59a4ecc3aa543fe52be29e940689b9c024b7687a.tar.bz2
gentoo-2-59a4ecc3aa543fe52be29e940689b9c024b7687a.zip
Fix crashes on clipboard operations, bug #269221
(Portage version: 2.2_rc33/cvs/Linux i686)
Diffstat (limited to 'dev-lang/lazarus/files')
-rw-r--r--dev-lang/lazarus/files/lazarus-0.9.26-clipboard-crash.patch76
1 files changed, 76 insertions, 0 deletions
diff --git a/dev-lang/lazarus/files/lazarus-0.9.26-clipboard-crash.patch b/dev-lang/lazarus/files/lazarus-0.9.26-clipboard-crash.patch
new file mode 100644
index 000000000000..9e25042c5c77
--- /dev/null
+++ b/dev-lang/lazarus/files/lazarus-0.9.26-clipboard-crash.patch
@@ -0,0 +1,76 @@
+
+ Crashes on clipboard operations
+
+ http://mantis.freepascal.org/view.php?id=12396
+
+--- lcl/interfaces/gtk/gtkwidgetset.inc
++++ lcl/interfaces/gtk/gtkwidgetset.inc
+@@ -5055,11 +5055,16 @@
+ while (CurSelList<>nil) do begin
+ TargetSelList := CurSelList^.Data;
+ gtk_target_list_unref(TargetSelList^.List);
++ {$ifndef gtk1}
++ if (gtk_major_version = 2) and (gtk_minor_version > 12) and (@g_slice_free1 <> nil) then
++ g_slice_free1(SizeOf(TGtkTargetSelectionList), TargetSelList)
++ else
++ {$endif}
+ g_free(TargetSelList);
+ CurSelList := CurSelList^.Next;
+ end;
+ g_list_free(SelectionLists);
+- gtk_object_set_data (PGtkObject(Widget),gtk_selection_handler_key,GtkNil);
++ gtk_object_set_data (PGtkObject(Widget), gtk_selection_handler_key, GtkNil);
+ {$IFDEF DEBUG_CLIPBOARD}
+ DebugLn(' ClearTargetLists WWW END');
+ {$ENDIF}
+--- lcl/interfaces/gtk/gtkextra.pp
++++ lcl/interfaces/gtk/gtkextra.pp
+@@ -54,4 +54,11 @@
+ {$I gtk2extra.inc}
+ {$endif}
+
++{$ifdef gtk2}
++initialization
++ Initialize;
++finalization
++ Finalize;
++{$endif}
++
+ end.
+--- lcl/interfaces/gtk2/gtk2extra.inc
++++ lcl/interfaces/gtk2/gtk2extra.inc
+@@ -53,3 +53,16 @@
+ end;
+ {$endif}
+
++procedure Initialize;
++begin
++ Pointer(g_slice_free1) := nil;
++ glibhandle := LoadLibrary(gliblib);
++ if glibhandle <> 0 then
++ Pointer(g_slice_free1) := GetProcAddress(glibhandle, 'g_slice_free1');
++end;
++
++procedure Finalize;
++begin
++ if glibhandle <> 0 then
++ FreeLibrary(glibhandle);
++end;
+--- lcl/interfaces/gtk2/gtk2extrah.inc
++++ lcl/interfaces/gtk2/gtk2extrah.inc
+@@ -23,7 +23,7 @@
+ {$ifdef HasGdk2X}
+ gdk2x,
+ {$endif}
+- Pango;
++ Pango, dynlibs;
+
+ const
+ gdkdll = gdklib;
+@@ -190,3 +190,6 @@
+ {$ifdef GTK_2_10}
+ function gdk_screen_is_composited(screen: PGdkScreen): gboolean; cdecl; external gdklib;
+ {$endif}
++var
++ glibhandle: PtrUInt = 0;
++ g_slice_free1: procedure(block_size:gsize; mem_block:gpointer); cdecl;