From 0a48c5dbe466dcb95ac2330806b6c563b8c10de3 Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Thu, 5 Apr 2012 08:49:20 +0000 Subject: [PATCH] LCL-CustomDrawn-X11: Implements GetCursorPos git-svn-id: trunk@36571 - --- .../customdrawn/customdrawnwinapi_x11.inc | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/lcl/interfaces/customdrawn/customdrawnwinapi_x11.inc b/lcl/interfaces/customdrawn/customdrawnwinapi_x11.inc index 6e8d9a0cee..d8b9c8b107 100644 --- a/lcl/interfaces/customdrawn/customdrawnwinapi_x11.inc +++ b/lcl/interfaces/customdrawn/customdrawnwinapi_x11.inc @@ -2714,15 +2714,35 @@ end;*) Returns: True if succesful ------------------------------------------------------------------------------} function TCDWidgetSet.GetCursorPos(var lpPoint: TPoint ): Boolean; -{var - vPoint: TQtPoint;} +var + number_of_screens, i: cint; + root_windows: PWindow; + window_returned: TWindow; + root_x, root_y, win_x, win_y: cint; + mask_return: cuint; + olderrorhandler: TXErrorHandler; + lScreen: XLib.TScreen; begin -// QCursor_pos(@vPoint); + root_x := 0; + root_y := 0; - lpPoint.x := 1; - lpPoint.y := 1; + //olderrorhandler := XSetErrorHandler(_XlibErrorHandler); + number_of_screens := XScreenCount(FDisplay); + //lScreen := XLib.DefaultScreen(FDisplay); + root_windows := GetMem(sizeof(TWindow) * number_of_screens); - Result := True; + for i := 0 to number_of_screens-1 do + begin + root_windows[i] := XRootWindow(FDisplay, i); + Result := XQueryPointer(FDisplay, root_windows[i], @window_returned, + @window_returned, @root_x, @root_y, @win_x, @win_y, @mask_return); + if Result then Break; + end; + + lpPoint.x := root_x; + lpPoint.y := root_y; + + FreeMem(root_windows); end; (*{------------------------------------------------------------------------------