mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-24 20:48:24 +02:00
LCL-GTK2: Simplify and optimize function gtkRealizeAfterCB. Remove call to GetOrCreateWidgetInfo().
git-svn-id: trunk@61983 -
This commit is contained in:
parent
088d4e5c32
commit
d0b23f3c8c
@ -218,27 +218,24 @@ end;
|
|||||||
-------------------------------------------------------------------------------}
|
-------------------------------------------------------------------------------}
|
||||||
function gtkRealizeAfterCB(Widget: PGtkWidget; Data: Pointer): GBoolean; cdecl;
|
function gtkRealizeAfterCB(Widget: PGtkWidget; Data: Pointer): GBoolean; cdecl;
|
||||||
var
|
var
|
||||||
|
MainWidget, ClientWidget: PGtkWidget;
|
||||||
WinWidgetInfo: PWidgetInfo;
|
WinWidgetInfo: PWidgetInfo;
|
||||||
LCLObject: TObject;
|
GdkWidget, GdkClient: PGDKWindow;
|
||||||
NewEventMask: TGdkEventMask;
|
NewEventMask: TGdkEventMask;
|
||||||
|
LCLObject: TObject;
|
||||||
TheWinControl: TWinControl;
|
TheWinControl: TWinControl;
|
||||||
ClientWidget: PGtkWidget;
|
|
||||||
MainWidget: PGtkWidget;
|
|
||||||
begin
|
begin
|
||||||
Result:=CallBackDefaultReturn;
|
Result:=CallBackDefaultReturn;
|
||||||
//DebugLn(['gtkRealizeAfterCB ',GetWidgetDebugReport(Widget)]);
|
|
||||||
|
|
||||||
if Data=nil then ;
|
if Data=nil then ;
|
||||||
{$IFDEF EventTrace}
|
{$IFDEF EventTrace}
|
||||||
EventTrace('realizeafter', nil);
|
EventTrace('realizeafter', nil);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
MainWidget:=GetMainWidget(Widget);
|
MainWidget:=GetMainWidget(Widget);
|
||||||
WinWidgetInfo:=GetOrCreateWidgetInfo(MainWidget);
|
Assert(Assigned(MainWidget), 'gtkRealizeAfterCB: MainWidget not assigned.');
|
||||||
|
WinWidgetInfo:=g_object_get_data(PGObject(MainWidget), 'widgetinfo');
|
||||||
Assert(Assigned(WinWidgetInfo), 'gtkRealizeAfterCB: WinWidgetInfo not assigned.');
|
Assert(Assigned(WinWidgetInfo), 'gtkRealizeAfterCB: WinWidgetInfo not assigned.');
|
||||||
LCLObject:=GetLCLObject(MainWidget);
|
LCLObject:=GetLCLObject(MainWidget);
|
||||||
if LCLObject=nil then exit;
|
if LCLObject=nil then exit;
|
||||||
ClientWidget:=GetFixedWidget(Widget);
|
|
||||||
if (LCLObject is TWinControl) then
|
if (LCLObject is TWinControl) then
|
||||||
TheWinControl:=TWinControl(LCLObject)
|
TheWinControl:=TWinControl(LCLObject)
|
||||||
else
|
else
|
||||||
@ -246,25 +243,25 @@ begin
|
|||||||
|
|
||||||
// set extra signal masks after the widget window is created
|
// set extra signal masks after the widget window is created
|
||||||
// define extra events we're interrested in
|
// define extra events we're interrested in
|
||||||
//write('GTKRealizeAfterCB ');
|
|
||||||
//if TheWinControl<>nil then DbgOut(' ',TheWinControl.Name,':',TheWinControl.ClassName,' ',DbgS(TheWinControl.Handle));
|
//if TheWinControl<>nil then DbgOut(' ',TheWinControl.Name,':',TheWinControl.ClassName,' ',DbgS(TheWinControl.Handle));
|
||||||
//DebugLn(' Widget=',DbgS(Widget),' Fixed=',DbgS(GetFixedWidget(Widget)),' Main=',DbgS(GetMainWidget(Widget)));
|
//DebugLn(' Widget=',DbgS(Widget),' Fixed=',DbgS(GetFixedWidget(Widget)),' Main=',DbgS(GetMainWidget(Widget)));
|
||||||
if (TheWinControl<>nil) then begin
|
if (TheWinControl<>nil) then begin
|
||||||
//DebugLn(['gtkRealizeAfterCB ',GetWidgetDebugReport(Widget)]);
|
//DebugLn(['gtkRealizeAfterCB ',GetWidgetDebugReport(Widget)]);
|
||||||
{$IFDEF DebugGDK}BeginGDKErrorTrap;{$ENDIF}
|
{$IFDEF DebugGDK}BeginGDKErrorTrap;{$ENDIF}
|
||||||
|
|
||||||
NewEventMask:=gdk_window_get_events(GetControlWindow(Widget))
|
GdkWidget:=GetControlWindow(Widget);
|
||||||
or WinWidgetInfo^.EventMask;
|
NewEventMask:=gdk_window_get_events(GdkWidget) or WinWidgetInfo^.EventMask;
|
||||||
gtk_widget_add_events(Widget,NewEventMask);
|
gtk_widget_add_events(Widget,NewEventMask);
|
||||||
gdk_window_set_events(GetControlWindow(Widget),NewEventMask);
|
gdk_window_set_events(GdkWidget,NewEventMask);
|
||||||
|
|
||||||
if (ClientWidget<>nil) and (GetControlWindow(ClientWidget)<>nil)
|
ClientWidget:=GetFixedWidget(Widget);
|
||||||
and (GetControlWindow(ClientWidget)<>GetControlWindow(Widget)) then begin
|
GdkClient:=GetControlWindow(ClientWidget);
|
||||||
|
if (ClientWidget<>nil) and (GdkClient<>nil) and (GdkClient<>GdkWidget) then
|
||||||
|
begin
|
||||||
//DebugLn(['gtkRealizeAfterCB ClientWindow<>Window']);
|
//DebugLn(['gtkRealizeAfterCB ClientWindow<>Window']);
|
||||||
NewEventMask:=gdk_window_get_events(GetControlWindow(ClientWidget))
|
NewEventMask:=gdk_window_get_events(GdkClient) or WinWidgetInfo^.EventMask;
|
||||||
or WinWidgetInfo^.EventMask;
|
|
||||||
gtk_widget_add_events(ClientWidget,WinWidgetInfo^.EventMask);
|
gtk_widget_add_events(ClientWidget,WinWidgetInfo^.EventMask);
|
||||||
gdk_window_set_events(GetControlWindow(ClientWidget),NewEventMask);
|
gdk_window_set_events(GdkClient,NewEventMask);
|
||||||
end;
|
end;
|
||||||
//DebugLn('BBB1 ',DbgS(NewEventMask),8),' ',DbgS(Cardinal(gdk_window_get_events(Widget^.Window)));
|
//DebugLn('BBB1 ',DbgS(NewEventMask),8),' ',DbgS(Cardinal(gdk_window_get_events(Widget^.Window)));
|
||||||
{$IFDEF DebugGDK}EndGDKErrorTrap;{$ENDIF}
|
{$IFDEF DebugGDK}EndGDKErrorTrap;{$ENDIF}
|
||||||
|
@ -4167,7 +4167,6 @@ begin
|
|||||||
Result := g_object_get_data(PGObject(MainWidget), 'widgetinfo');
|
Result := g_object_get_data(PGObject(MainWidget), 'widgetinfo');
|
||||||
if Assigned(Result) then Exit;
|
if Assigned(Result) then Exit;
|
||||||
Result := CreateWidgetInfo(MainWidget);
|
Result := CreateWidgetInfo(MainWidget);
|
||||||
{$WARNING GetOrCreateWidgetInfo: MainWidget info was created causing a memory leak.}
|
|
||||||
//DebugLn('GetOrCreateWidgetInfo: MainWidget info was created causing a memory leak.');
|
//DebugLn('GetOrCreateWidgetInfo: MainWidget info was created causing a memory leak.');
|
||||||
// use the main widget as default
|
// use the main widget as default
|
||||||
Result^.CoreWidget := PGtkWidget(MainWidget);
|
Result^.CoreWidget := PGtkWidget(MainWidget);
|
||||||
|
Loading…
Reference in New Issue
Block a user