@@ -606,6 +606,7 @@ static BOOL freerdp_settings_client_monitors_check_primary_and_origin(const rdpS
606
606
const UINT32 count = freerdp_settings_get_uint32 (settings , FreeRDP_MonitorCount );
607
607
BOOL havePrimary = FALSE;
608
608
BOOL foundOrigin = FALSE;
609
+ BOOL primaryIsOrigin = FALSE;
609
610
BOOL rc = TRUE;
610
611
611
612
struct bounds_t bounds = { 0 };
@@ -644,6 +645,7 @@ static BOOL freerdp_settings_client_monitors_check_primary_and_origin(const rdpS
644
645
rc = FALSE;
645
646
}
646
647
foundOrigin = TRUE;
648
+ primaryIsOrigin = monitor -> is_primary != 0 ;
647
649
}
648
650
}
649
651
@@ -672,6 +674,11 @@ static BOOL freerdp_settings_client_monitors_check_primary_and_origin(const rdpS
672
674
WLog_ERR (TAG , "Monitor configuration must start at 0/0 for first monitor!" );
673
675
rc = FALSE;
674
676
}
677
+ if (!primaryIsOrigin )
678
+ {
679
+ WLog_ERR (TAG , "Monitor configuration must start at 0/0 for primary monitor!" );
680
+ rc = FALSE;
681
+ }
675
682
676
683
return rc ;
677
684
}
@@ -970,10 +977,10 @@ rdpSettings* freerdp_settings_new(DWORD flags)
970
977
if (!freerdp_settings_set_pointer_len (settings , FreeRDP_MonitorDefArray , NULL , 32 ))
971
978
goto out_fail ;
972
979
973
- if (!freerdp_settings_set_uint32 (settings , FreeRDP_MonitorLocalShiftX , 0 ))
980
+ if (!freerdp_settings_set_int32 (settings , FreeRDP_MonitorLocalShiftX , 0 ))
974
981
goto out_fail ;
975
982
976
- if (!freerdp_settings_set_uint32 (settings , FreeRDP_MonitorLocalShiftY , 0 ))
983
+ if (!freerdp_settings_set_int32 (settings , FreeRDP_MonitorLocalShiftY , 0 ))
977
984
goto out_fail ;
978
985
979
986
if (!freerdp_settings_set_pointer_len (settings , FreeRDP_MonitorIds , NULL , 0 ))
@@ -1737,35 +1744,20 @@ BOOL freerdp_settings_enforce_monitor_exists(rdpSettings* settings)
1737
1744
if (!freerdp_settings_set_uint32 (settings , FreeRDP_MonitorCount , 1 ))
1738
1745
return FALSE;
1739
1746
1740
- rdpMonitor * monitor =
1741
- freerdp_settings_get_pointer_array_writable (settings , FreeRDP_MonitorDefArray , 0 );
1742
- if (!monitor )
1743
- return FALSE;
1744
- monitor -> x = 0 ;
1745
- monitor -> y = 0 ;
1746
- WINPR_ASSERT (width <= INT32_MAX );
1747
- monitor -> width = (INT32 )width ;
1748
- WINPR_ASSERT (height <= INT32_MAX );
1749
- monitor -> height = (INT32 )height ;
1750
- monitor -> is_primary = TRUE;
1751
- monitor -> orig_screen = 0 ;
1752
- monitor -> attributes .physicalWidth = pwidth ;
1753
- monitor -> attributes .physicalHeight = pheight ;
1754
- monitor -> attributes .orientation = orientation ;
1755
- monitor -> attributes .desktopScaleFactor = desktopScaleFactor ;
1756
- monitor -> attributes .deviceScaleFactor = deviceScaleFactor ;
1757
- }
1758
- else if (fullscreen || (multimon && (count == 1 )))
1759
- {
1760
- /* not all platforms start primary monitor at 0/0, so enforce this to avoid issues with
1761
- * fullscreen mode */
1762
- rdpMonitor * monitor =
1763
- freerdp_settings_get_pointer_array_writable (settings , FreeRDP_MonitorDefArray , 0 );
1764
- if (!monitor )
1747
+ rdpMonitor monitor = { 0 };
1748
+ monitor .x = 0 ;
1749
+ monitor .y = 0 ;
1750
+ monitor .width = WINPR_ASSERTING_INT_CAST (int32_t , width );
1751
+ monitor .height = WINPR_ASSERTING_INT_CAST (int32_t , height );
1752
+ monitor .is_primary = TRUE;
1753
+ monitor .orig_screen = 0 ;
1754
+ monitor .attributes .physicalWidth = pwidth ;
1755
+ monitor .attributes .physicalHeight = pheight ;
1756
+ monitor .attributes .orientation = orientation ;
1757
+ monitor .attributes .desktopScaleFactor = desktopScaleFactor ;
1758
+ monitor .attributes .deviceScaleFactor = deviceScaleFactor ;
1759
+ if (!freerdp_settings_set_monitor_def_array_sorted (settings , & monitor , 1 ))
1765
1760
return FALSE;
1766
- monitor -> x = 0 ;
1767
- monitor -> y = 0 ;
1768
- monitor -> is_primary = TRUE;
1769
1761
}
1770
1762
1771
1763
return TRUE;
0 commit comments