* fixed obscure bug #12695 where gtk2 listview caused a crash

git-svn-id: trunk@17554 -
This commit is contained in:
andrew 2008-11-23 22:32:28 +00:00
parent 332817a926
commit f05a37586c
2 changed files with 12 additions and 0 deletions

View File

@ -60,6 +60,7 @@ type
cell_area: PGdkRectangle; cell_area: PGdkRectangle;
expose_area:PGdkRectangle; expose_area:PGdkRectangle;
flags: TGtkCellRendererState); cdecl; flags: TGtkCellRendererState); cdecl;
DefaultFinalize: procedure(aObject: PGObject); cdecl;
end; end;
function LCLIntfCellRenderer_GetType: TGtkType; function LCLIntfCellRenderer_GetType: TGtkType;
@ -295,6 +296,12 @@ begin
//DebugLn(['LCLIntfCellRenderer_Render END ',DbgSName(LCLObject)]); //DebugLn(['LCLIntfCellRenderer_Render END ',DbgSName(LCLObject)]);
end; end;
procedure LCLIntfCellRenderer_ClassFinalize(aObject: PGObject); cdecl;
begin
PGtkCellRendererText(aObject)^.text := nil;
PLCLIntfCellRendererClass(G_OBJECT_GET_CLASS(aObject))^.DefaultFinalize(aObject);
end;
procedure LCLIntfCellRenderer_ClassInit(aClass: Pointer); cdecl; procedure LCLIntfCellRenderer_ClassInit(aClass: Pointer); cdecl;
//aClass: PLCLIntfCellRendererClass //aClass: PLCLIntfCellRendererClass
var var
@ -306,6 +313,8 @@ begin
RendererClass := GTK_CELL_RENDERER_CLASS(aClass); RendererClass := GTK_CELL_RENDERER_CLASS(aClass);
LCLClass^.DefaultGtkGetSize := RendererClass^.get_size; LCLClass^.DefaultGtkGetSize := RendererClass^.get_size;
LCLClass^.DefaultGtkRender := RendererClass^.render; LCLClass^.DefaultGtkRender := RendererClass^.render;
LCLClass^.DefaultFinalize := PGObjectClass(RendererClass)^.finalize;
PGObjectClass(RendererClass)^.finalize := @LCLIntfCellRenderer_ClassFinalize;
RendererClass^.get_size := @LCLIntfCellRenderer_GetSize; RendererClass^.get_size := @LCLIntfCellRenderer_GetSize;
RendererClass^.render := @LCLIntfCellRenderer_Render; RendererClass^.render := @LCLIntfCellRenderer_Render;
end; end;
@ -316,6 +325,7 @@ procedure LCLIntfCellRenderer_Init(Instance:PGTypeInstance;
// theClass: PLCLIntfCellRendererClass // theClass: PLCLIntfCellRendererClass
begin begin
//DebugLn(['LCLIntfCellRenderer_Init ']); //DebugLn(['LCLIntfCellRenderer_Init ']);
PGtkCellRendererText(Instance)^.text := nil;
end; end;
function LCLIntfCellRenderer_GetType: TGtkType; function LCLIntfCellRenderer_GetType: TGtkType;

View File

@ -1004,6 +1004,8 @@ begin
GetCommonTreeViewWidgets(PGtkWidget(ALV.Handle), Widgets); GetCommonTreeViewWidgets(PGtkWidget(ALV.Handle), Widgets);
with Widgets^ do with Widgets^ do
begin begin
if gtk_widget_realized(MainView) = False then
exit;
Path := gtk_tree_path_new_from_indices(AIndex, -1); Path := gtk_tree_path_new_from_indices(AIndex, -1);
gtk_tree_view_get_cell_area(PGtkTreeView(MainView), Path, nil, @ItemRect); gtk_tree_view_get_cell_area(PGtkTreeView(MainView), Path, nil, @ItemRect);
gtk_tree_path_free(Path); gtk_tree_path_free(Path);