Rémi Bernon : winex11.drv: Use DM_POSITION field bit to mark placed displays.
Alexandre Julliard
julliard at winehq.org
Tue Aug 2 14:54:39 CDT 2022
Module: wine
Branch: master
Commit: d621a7a3e3fddc7528e3a0c95be4aba66a3b133a
URL: https://gitlab.winehq.org/wine/wine/-/commit/d621a7a3e3fddc7528e3a0c95be4aba66a3b133a
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Fri Jul 29 11:13:16 2022 +0200
winex11.drv: Use DM_POSITION field bit to mark placed displays.
---
dlls/winex11.drv/display.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/dlls/winex11.drv/display.c b/dlls/winex11.drv/display.c
index db1628b2c85..3319697e51f 100644
--- a/dlls/winex11.drv/display.c
+++ b/dlls/winex11.drv/display.c
@@ -35,7 +35,6 @@ static struct x11drv_settings_handler settings_handler;
struct x11drv_display_setting
{
ULONG_PTR id;
- BOOL placed;
RECT new_rect;
DEVMODEW desired_mode;
};
@@ -548,7 +547,7 @@ static BOOL overlap_placed_displays(const RECT *rect, const struct x11drv_displa
for (display_idx = 0; display_idx < display_count; ++display_idx)
{
- if (displays[display_idx].placed &&
+ if ((displays[display_idx].desired_mode.dmFields & DM_POSITION) &&
intersect_rect(&intersect, &displays[display_idx].new_rect, rect))
return TRUE;
}
@@ -573,7 +572,7 @@ static POINT get_placement_offset(const struct x11drv_display_setting *displays,
/* If there is no placed and attached display, place this display as it is */
for (display_idx = 0; display_idx < display_count; ++display_idx)
{
- if (displays[display_idx].placed && !IsRectEmpty(&displays[display_idx].new_rect))
+ if ((displays[display_idx].desired_mode.dmFields & DM_POSITION) && !IsRectEmpty(&displays[display_idx].new_rect))
{
has_placed = TRUE;
break;
@@ -590,7 +589,7 @@ static POINT get_placement_offset(const struct x11drv_display_setting *displays,
for (display_idx = 0; display_idx < display_count; ++display_idx)
{
- if (!displays[display_idx].placed || IsRectEmpty(&displays[display_idx].new_rect))
+ if (!(displays[display_idx].desired_mode.dmFields & DM_POSITION) || IsRectEmpty(&displays[display_idx].new_rect))
continue;
/* Get four vertices of the placed display rectangle */
@@ -681,6 +680,9 @@ static void place_all_displays(struct x11drv_display_setting *displays, INT disp
INT placing_idx, display_idx;
POINT min_offset, offset;
+ for (display_idx = 0; display_idx < display_count; ++display_idx)
+ displays[display_idx].desired_mode.dmFields &= ~DM_POSITION;
+
/* Place all displays with no extra space between them and no overlapping */
while (1)
{
@@ -688,7 +690,7 @@ static void place_all_displays(struct x11drv_display_setting *displays, INT disp
placing_idx = -1;
for (display_idx = 0; display_idx < display_count; ++display_idx)
{
- if (displays[display_idx].placed)
+ if (displays[display_idx].desired_mode.dmFields & DM_POSITION)
continue;
offset = get_placement_offset(displays, display_count, display_idx);
@@ -705,7 +707,7 @@ static void place_all_displays(struct x11drv_display_setting *displays, INT disp
set_rect_from_devmode(&displays[placing_idx].new_rect, &displays[placing_idx].desired_mode);
OffsetRect(&displays[placing_idx].new_rect, min_offset.x, min_offset.y);
- displays[placing_idx].placed = TRUE;
+ displays[placing_idx].desired_mode.dmFields |= DM_POSITION;
}
for (display_idx = 0; display_idx < display_count; ++display_idx)
More information about the wine-cvs
mailing list