gtk2: get correct primary monitor if we are using gtk2 >= 2.20. issue #32464

git-svn-id: trunk@55913 -
This commit is contained in:
zeljko 2017-09-24 16:07:20 +00:00
parent 1644bea3b3
commit 63e24c7ffa
3 changed files with 22 additions and 7 deletions

View File

@ -77,8 +77,11 @@ initialization
end;
end;
gdklibhandle := LoadLibrary(gdklib);
if gdklibhandle <> 0
then pointer(gdk_window_get_cursor):=GetProcAddress(gdklibhandle,'gdk_window_get_cursor');
if gdklibhandle <> 0 then
begin
pointer(gdk_window_get_cursor) := GetProcAddress(gdklibhandle,'gdk_window_get_cursor');
pointer(gdk_screen_get_primary_monitor) := GetProcAddress(gdklibhandle,'gdk_screen_get_primary_monitor');
end;
finalization
if gtkhandle <> 0 then

View File

@ -341,6 +341,8 @@ var
gtk_window_set_opacity: procedure(window: PGtkWindow; opacity: gdouble); cdecl;
g_object_ref_sink: function(anObject: PGObject): gpointer; cdecl;
gdk_window_get_cursor: function(window: PGdkWindow): PGdkCursor; cdecl;
// since 2.20
gdk_screen_get_primary_monitor: function(screen: PGdkScreen): gint; cdecl;
// since 2.10
gtk_tree_view_set_grid_lines: procedure(tree_view: PGtkTreeView; grid_lines: TGtkTreeViewGridLines); cdecl;

View File

@ -4998,11 +4998,21 @@ begin
else
{$ENDIF}
lpmi^.rcWork := lpmi^.rcMonitor;
// gtk uses zero position for primary monitor
if Monitor = 0 then
lpmi^.dwFlags := MONITORINFOF_PRIMARY
else
lpmi^.dwFlags := 0;
// since gtk-2.20 we have correct api to get primary monitor. issue #32464
if Assigned(gdk_screen_get_primary_monitor) then
begin
if (Monitor = gdk_screen_get_primary_monitor(gdk_screen_get_default)) then
lpmi^.dwFlags := MONITORINFOF_PRIMARY
else
lpmi^.dwFlags := 0;
end else
begin
// gtk2 below 2.20
if Monitor = 0 then
lpmi^.dwFlags := MONITORINFOF_PRIMARY
else
lpmi^.dwFlags := 0;
end;
end;
{------------------------------------------------------------------------------