LCL-GTK3: Make Screen.WorkArea work. Issue #36946, patch from Anton Kavalenka.

git-svn-id: trunk@63837 -
This commit is contained in:
juha 2020-08-26 19:33:47 +00:00
parent 8b307ca09c
commit 3f80506401
2 changed files with 32 additions and 5 deletions

View File

@ -2891,6 +2891,10 @@ type
function intern_static_string(atom_name: Pgchar): PGdkAtom; cdecl; inline; static;
end;
{ TGdkDisplay }
PGdkMonitor = ^TGdkMonitor;
TGdkDisplay = object(TGObject)
function get_default: PGdkDisplay; cdecl; inline; static;
function open(display_name: Pgchar): PGdkDisplay; cdecl; inline; static;
@ -2905,6 +2909,7 @@ type
function get_default_screen: PGdkScreen; cdecl; inline;
function get_device_manager: PGdkDeviceManager; cdecl; inline;
function get_event: PGdkEvent; cdecl; inline;
function get_primary_monitor: PGdkMonitor; cdecl;inline;
procedure get_maximal_cursor_size(width: Pguint; height: Pguint); cdecl; inline;
function get_n_screens: gint; cdecl; inline;
function get_name: Pgchar; cdecl; inline;
@ -3901,7 +3906,6 @@ type
);
{ TGdkMonitor available since 3.22 }
PGdkMonitor = ^TGdkMonitor;
TGdkMonitor = object(TGObject)
public
function get_display ():PGdkDisplay;cdecl;inline;
@ -3974,6 +3978,7 @@ function gdk_display_get_event(display: PGdkDisplay): PGdkEvent; cdecl; external
function gdk_display_get_n_screens(display: PGdkDisplay): gint; cdecl; external;
function gdk_display_get_name(display: PGdkDisplay): Pgchar; cdecl; external;
function gdk_display_get_screen(display: PGdkDisplay; screen_num: gint): PGdkScreen; cdecl; external;
function gdk_display_get_primary_monitor(display: PGdkDisplay): PGdkMonitor; cdecl; external;
function gdk_display_get_type: TGType; cdecl; external;
function gdk_display_has_pending(display: PGdkDisplay): gboolean; cdecl; external;
function gdk_display_is_closed(display: PGdkDisplay): gboolean; cdecl; external;
@ -4552,6 +4557,11 @@ begin
Result := LazGdk3.gdk_display_get_event(@self);
end;
function TGdkDisplay.get_primary_monitor: PGdkMonitor; cdecl;
begin
Result:=LazGdk3.gdk_display_get_primary_monitor(@Self);
end;
procedure TGdkDisplay.get_maximal_cursor_size(width: Pguint; height: Pguint); cdecl;
begin
LazGdk3.gdk_display_get_maximal_cursor_size(@self, width, height);

View File

@ -3955,11 +3955,28 @@ end;
function TGtk3WidgetSet.SystemParametersInfo(uiAction: DWord; uiParam: DWord;
pvParam: Pointer; fWinIni: DWord): LongBool;
var
wa:TGdkRectangle;
pdisp:PGdkDisplay;
pmon:PgdkMonitor;
pr:PRect;
begin
{$IFDEF GTK3DEBUGNOTIMPLEMENTED}
DebugLn('WARNING: TGtk3WidgetSet.SystemParametersInfo not implemented ...');
{$ENDIF}
Result:=inherited SystemParametersInfo(uiAction, uiParam, pvParam, fWinIni);
Result:=True;
Case uiAction of
SPI_GETWHEELSCROLLLINES: PDword(pvParam)^ := 3;
SPI_GETWORKAREA: begin
pdisp:=TGdkDisplay.get_default;
pmon:=pdisp^.get_primary_monitor();
pmon^.get_workarea(@wa);
pr:=PRect(pvParam);
pr^.Left:=wa.x;
pr^.Top:=wa.y;
pr^.Width:=wa.width;
pr^.Height:=wa.height;
end;
else
Result:=False;
end;
end;
function TGtk3WidgetSet.TextOut(DC: HDC; X, Y: Integer; Str: PChar; Count: Integer): Boolean;