gtk2: trial to fix gtk2 clipboard crash

git-svn-id: trunk@17272 -
This commit is contained in:
paul 2008-11-08 09:30:12 +00:00
parent dba66d3a1e
commit 2e48fd922a
4 changed files with 30 additions and 2 deletions

View File

@ -54,4 +54,11 @@ implementation
{$I gtk2extra.inc}
{$endif}
{$ifdef gtk2}
initialization
Initialize;
finalization
Finalize;
{$endif}
end.

View File

@ -5055,11 +5055,16 @@ const
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}

View File

@ -53,3 +53,16 @@ begin
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;

View File

@ -23,7 +23,7 @@ uses
{$ifdef HasGdk2X}
gdk2x,
{$endif}
Pango;
Pango, dynlibs;
const
gdkdll = gdklib;
@ -190,3 +190,6 @@ procedure gtk_file_chooser_set_do_overwrite_confirmation(chooser:PGtkFileChooser
{$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;