Gtk2: fixed wrong result from ScreenToClient for child controls. issue #21366

git-svn-id: trunk@35574 -
This commit is contained in:
zeljko 2012-02-24 09:39:05 +00:00
parent eadeec3933
commit a31497d03b

View File

@ -7595,16 +7595,14 @@ function TGtk2WidgetSet.ScreenToClient(Handle : HWND; var P : TPoint) : Integer;
var var
X, Y: Integer; X, Y: Integer;
Widget: PGTKWidget; Widget: PGTKWidget;
Window: PgdkWindow; Window: PGdkWindow;
Begin Begin
if Handle = 0 then
if Handle = 0 begin
then begin
X := 0; X := 0;
Y := 0; Y := 0;
end end else
else begin
begin
Widget := GetFixedWidget(pgtkwidget(Handle)); Widget := GetFixedWidget(pgtkwidget(Handle));
if Widget = nil then if Widget = nil then
Widget := pgtkwidget(Handle); Widget := pgtkwidget(Handle);
@ -7612,13 +7610,24 @@ Begin
begin begin
X := 0; X := 0;
Y := 0; Y := 0;
end end else
else begin begin
Window:=GetControlWindow(Widget); Window := GetControlWindow(Widget);
{$IFDEF DebugGDK}BeginGDKErrorTrap;{$ENDIF} {$IFDEF DebugGDK}BeginGDKErrorTrap;{$ENDIF}
if Window<>nil then if Window <> nil then
gdk_window_get_origin(Window, @X, @Y) begin
else begin gdk_window_get_origin(Window, @X, @Y);
// set pos to client coords. issue #21366
if GTK_WIDGET_NO_WINDOW(Widget) and (gtk_widget_get_parent(Widget) <> nil) then
begin
P.X := P.X - X - Widget^.allocation.x;
P.Y := P.Y - Y - Widget^.allocation.y;
Result := -1;
exit;
end;
end else
begin
X:=0; X:=0;
Y:=0; Y:=0;
end; end;