Commit e4ff578b authored by Rémi Bernon's avatar Rémi Bernon Committed by Alexandre Julliard

win32u: Deduce monitor device flags from their adapter.

parent e628eb2c
...@@ -143,14 +143,6 @@ static const WCHAR devpropkey_monitor_output_idW[] = ...@@ -143,14 +143,6 @@ static const WCHAR devpropkey_monitor_output_idW[] =
'\\','0','0','0','2' '\\','0','0','0','2'
}; };
static const WCHAR wine_devpropkey_monitor_stateflagsW[] =
{
'P','r','o','p','e','r','t','i','e','s','\\',
'{','2','3','3','a','9','e','f','3','-','a','f','c','4','-','4','a','b','d',
'-','b','5','6','4','-','c','3','2','f','2','1','f','1','5','3','5','b','}',
'\\','0','0','0','2'
};
static const WCHAR wine_devpropkey_monitor_rcmonitorW[] = static const WCHAR wine_devpropkey_monitor_rcmonitorW[] =
{ {
'P','r','o','p','e','r','t','i','e','s','\\', 'P','r','o','p','e','r','t','i','e','s','\\',
...@@ -817,12 +809,13 @@ static BOOL read_display_adapter_settings( unsigned int index, struct adapter *i ...@@ -817,12 +809,13 @@ static BOOL read_display_adapter_settings( unsigned int index, struct adapter *i
static BOOL read_monitor_settings( struct adapter *adapter, UINT index, struct monitor *monitor ) static BOOL read_monitor_settings( struct adapter *adapter, UINT index, struct monitor *monitor )
{ {
char buffer[4096]; char buffer[4096];
BOOL is_primary = !!(adapter->dev.state_flags & DISPLAY_DEVICE_PRIMARY_DEVICE);
KEY_VALUE_PARTIAL_INFORMATION *value = (void *)buffer; KEY_VALUE_PARTIAL_INFORMATION *value = (void *)buffer;
WCHAR *device_name, *value_str = (WCHAR *)value->Data, *ptr; WCHAR *device_name, *value_str = (WCHAR *)value->Data, *ptr;
HKEY hkey, subkey; HKEY hkey, subkey;
DWORD size, len; DWORD size, len;
monitor->flags = adapter->id ? 0 : MONITORINFOF_PRIMARY; monitor->flags = is_primary ? MONITORINFOF_PRIMARY : 0;
/* DeviceName */ /* DeviceName */
sprintf( buffer, "\\\\.\\DISPLAY%d\\Monitor%d", adapter->id + 1, index ); sprintf( buffer, "\\\\.\\DISPLAY%d\\Monitor%d", adapter->id + 1, index );
...@@ -851,17 +844,6 @@ static BOOL read_monitor_settings( struct adapter *adapter, UINT index, struct m ...@@ -851,17 +844,6 @@ static BOOL read_monitor_settings( struct adapter *adapter, UINT index, struct m
if (!(hkey = reg_open_key( enum_key, value_str, value->DataLength - sizeof(WCHAR) ))) if (!(hkey = reg_open_key( enum_key, value_str, value->DataLength - sizeof(WCHAR) )))
return FALSE; return FALSE;
/* StateFlags, WINE_DEVPROPKEY_MONITOR_STATEFLAGS */
size = query_reg_subkey_value( hkey, wine_devpropkey_monitor_stateflagsW,
sizeof(wine_devpropkey_monitor_stateflagsW),
value, sizeof(buffer) );
if (size != sizeof(monitor->dev.state_flags))
{
NtClose( hkey );
return FALSE;
}
monitor->dev.state_flags = *(const DWORD *)value->Data;
/* Output ID */ /* Output ID */
size = query_reg_subkey_value( hkey, devpropkey_monitor_output_idW, size = query_reg_subkey_value( hkey, devpropkey_monitor_output_idW,
sizeof(devpropkey_monitor_output_idW), sizeof(devpropkey_monitor_output_idW),
...@@ -1545,15 +1527,6 @@ static void add_monitor( const struct gdi_monitor *monitor, void *param ) ...@@ -1545,15 +1527,6 @@ static void add_monitor( const struct gdi_monitor *monitor, void *param )
NtClose( subkey ); NtClose( subkey );
} }
/* StateFlags */
if ((subkey = reg_create_key( hkey, wine_devpropkey_monitor_stateflagsW,
sizeof(wine_devpropkey_monitor_stateflagsW), 0, NULL )))
{
set_reg_value( subkey, NULL, 0xffff0000 | DEVPROP_TYPE_UINT32, &monitor->state_flags,
sizeof(monitor->state_flags) );
NtClose( subkey );
}
/* WINE_DEVPROPKEY_MONITOR_RCMONITOR */ /* WINE_DEVPROPKEY_MONITOR_RCMONITOR */
if ((subkey = reg_create_key( hkey, wine_devpropkey_monitor_rcmonitorW, if ((subkey = reg_create_key( hkey, wine_devpropkey_monitor_rcmonitorW,
sizeof(wine_devpropkey_monitor_rcmonitorW), 0, NULL ))) sizeof(wine_devpropkey_monitor_rcmonitorW), 0, NULL )))
...@@ -1769,6 +1742,12 @@ static BOOL update_display_cache_from_registry(void) ...@@ -1769,6 +1742,12 @@ static BOOL update_display_cache_from_registry(void)
monitor->id = monitor_id; monitor->id = monitor_id;
monitor->adapter = adapter_acquire( adapter ); monitor->adapter = adapter_acquire( adapter );
monitor->dev.state_flags |= DISPLAY_DEVICE_ATTACHED;
if (adapter->dev.state_flags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
{
if (!IsRectEmpty(&monitor->rc_monitor)) monitor->dev.state_flags |= DISPLAY_DEVICE_ACTIVE;
}
LIST_FOR_EACH_ENTRY(monitor2, &monitors, struct monitor, entry) LIST_FOR_EACH_ENTRY(monitor2, &monitors, struct monitor, entry)
{ {
if (EqualRect(&monitor2->rc_monitor, &monitor->rc_monitor)) if (EqualRect(&monitor2->rc_monitor, &monitor->rc_monitor))
...@@ -1878,10 +1857,7 @@ static BOOL default_update_display_devices( const struct gdi_device_manager *man ...@@ -1878,10 +1857,7 @@ static BOOL default_update_display_devices( const struct gdi_device_manager *man
{ {
.state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE, .state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE,
}; };
struct gdi_monitor monitor = struct gdi_monitor monitor = {0};
{
.state_flags = DISPLAY_DEVICE_ACTIVE | DISPLAY_DEVICE_ATTACHED,
};
DEVMODEW mode = {{0}}; DEVMODEW mode = {{0}};
UINT i; UINT i;
...@@ -1990,10 +1966,7 @@ static BOOL desktop_update_display_devices( BOOL force, struct device_manager_ct ...@@ -1990,10 +1966,7 @@ static BOOL desktop_update_display_devices( BOOL force, struct device_manager_ct
{ {
.state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE, .state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE,
}; };
struct gdi_monitor monitor = struct gdi_monitor monitor = {0};
{
.state_flags = DISPLAY_DEVICE_ACTIVE | DISPLAY_DEVICE_ATTACHED,
};
static struct screen_size static struct screen_size
{ {
unsigned int width; unsigned int width;
......
...@@ -282,7 +282,6 @@ BOOL ANDROID_UpdateDisplayDevices( const struct gdi_device_manager *device_manag ...@@ -282,7 +282,6 @@ BOOL ANDROID_UpdateDisplayDevices( const struct gdi_device_manager *device_manag
{ {
.rc_monitor = virtual_screen_rect, .rc_monitor = virtual_screen_rect,
.rc_work = monitor_rc_work, .rc_work = monitor_rc_work,
.state_flags = DISPLAY_DEVICE_ACTIVE | DISPLAY_DEVICE_ATTACHED,
}; };
const DEVMODEW mode = const DEVMODEW mode =
{ {
......
...@@ -707,7 +707,6 @@ int macdrv_get_monitors(uint32_t adapter_id, struct macdrv_monitor** new_monitor ...@@ -707,7 +707,6 @@ int macdrv_get_monitors(uint32_t adapter_id, struct macdrv_monitor** new_monitor
if (j == 0) if (j == 0)
primary_index = monitor_count; primary_index = monitor_count;
monitors[monitor_count].state_flags = DISPLAY_DEVICE_ATTACHED | DISPLAY_DEVICE_ACTIVE;
monitors[monitor_count].rc_monitor = displays[j].frame; monitors[monitor_count].rc_monitor = displays[j].frame;
monitors[monitor_count].rc_work = displays[j].work_frame; monitors[monitor_count].rc_work = displays[j].work_frame;
monitor_count++; monitor_count++;
......
...@@ -1195,7 +1195,6 @@ BOOL macdrv_UpdateDisplayDevices( const struct gdi_device_manager *device_manage ...@@ -1195,7 +1195,6 @@ BOOL macdrv_UpdateDisplayDevices( const struct gdi_device_manager *device_manage
{ {
.rc_monitor = rect_from_cgrect(monitor->rc_monitor), .rc_monitor = rect_from_cgrect(monitor->rc_monitor),
.rc_work = rect_from_cgrect(monitor->rc_work), .rc_work = rect_from_cgrect(monitor->rc_work),
.state_flags = monitor->state_flags,
}; };
device_manager->add_monitor( &gdi_monitor, param ); device_manager->add_monitor( &gdi_monitor, param );
} }
......
...@@ -251,9 +251,6 @@ extern int macdrv_clip_cursor(CGRect rect); ...@@ -251,9 +251,6 @@ extern int macdrv_clip_cursor(CGRect rect);
/* Used DISPLAY_DEVICE.StateFlags for adapters */ /* Used DISPLAY_DEVICE.StateFlags for adapters */
#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001 #define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001
#define DISPLAY_DEVICE_PRIMARY_DEVICE 0x00000004 #define DISPLAY_DEVICE_PRIMARY_DEVICE 0x00000004
/* Used DISPLAY_DEVICE.StateFlags for monitors */
#define DISPLAY_DEVICE_ACTIVE 0x00000001
#define DISPLAY_DEVICE_ATTACHED 0x00000002
/* Represent a physical GPU in the PCI slots */ /* Represent a physical GPU in the PCI slots */
struct macdrv_gpu struct macdrv_gpu
...@@ -285,8 +282,6 @@ struct macdrv_monitor ...@@ -285,8 +282,6 @@ struct macdrv_monitor
CGRect rc_monitor; CGRect rc_monitor;
/* as RcWork in MONITORINFO struct after conversion by rect_from_cgrect */ /* as RcWork in MONITORINFO struct after conversion by rect_from_cgrect */
CGRect rc_work; CGRect rc_work;
/* StateFlags in DISPLAY_DEVICE struct */
uint32_t state_flags;
}; };
extern int macdrv_get_displays(struct macdrv_display** displays, int* count); extern int macdrv_get_displays(struct macdrv_display** displays, int* count);
......
...@@ -237,11 +237,8 @@ static void wayland_add_device_monitor(const struct gdi_device_manager *device_m ...@@ -237,11 +237,8 @@ static void wayland_add_device_monitor(const struct gdi_device_manager *device_m
/* We don't have a direct way to get the work area in Wayland. */ /* We don't have a direct way to get the work area in Wayland. */
monitor.rc_work = monitor.rc_monitor; monitor.rc_work = monitor.rc_monitor;
monitor.state_flags = DISPLAY_DEVICE_ATTACHED | DISPLAY_DEVICE_ACTIVE; TRACE("name=%s rc_monitor=rc_work=%s\n",
output_info->output->name, wine_dbgstr_rect(&monitor.rc_monitor));
TRACE("name=%s rc_monitor=rc_work=%s state_flags=0x%x\n",
output_info->output->name, wine_dbgstr_rect(&monitor.rc_monitor),
(UINT)monitor.state_flags);
device_manager->add_monitor(&monitor, param); device_manager->add_monitor(&monitor, param);
} }
......
...@@ -319,11 +319,8 @@ static BOOL xinerama_get_monitors( ULONG_PTR adapter_id, struct gdi_monitor **ne ...@@ -319,11 +319,8 @@ static BOOL xinerama_get_monitors( ULONG_PTR adapter_id, struct gdi_monitor **ne
monitor[index].rc_monitor = monitors[i].rcMonitor; monitor[index].rc_monitor = monitors[i].rcMonitor;
monitor[index].rc_work = monitors[i].rcWork; monitor[index].rc_work = monitors[i].rcWork;
/* Xinerama only reports monitors already attached */ /* Xinerama only reports monitors already attached */
monitor[index].state_flags = DISPLAY_DEVICE_ATTACHED;
monitor[index].edid_len = 0; monitor[index].edid_len = 0;
monitor[index].edid = NULL; monitor[index].edid = NULL;
if (!IsRectEmpty( &monitors[i].rcMonitor ))
monitor[index].state_flags |= DISPLAY_DEVICE_ACTIVE;
index++; index++;
} }
......
...@@ -1066,7 +1066,6 @@ static BOOL xrandr14_get_monitors( ULONG_PTR adapter_id, struct gdi_monitor **ne ...@@ -1066,7 +1066,6 @@ static BOOL xrandr14_get_monitors( ULONG_PTR adapter_id, struct gdi_monitor **ne
/* Inactive but attached monitor, no need to check for mirrored/replica monitors */ /* Inactive but attached monitor, no need to check for mirrored/replica monitors */
if (!output_info->crtc || !crtc_info->mode) if (!output_info->crtc || !crtc_info->mode)
{ {
monitors[monitor_count].state_flags = DISPLAY_DEVICE_ATTACHED;
monitors[monitor_count].edid_len = get_edid( adapter_id, &monitors[monitor_count].edid ); monitors[monitor_count].edid_len = get_edid( adapter_id, &monitors[monitor_count].edid );
monitor_count = 1; monitor_count = 1;
} }
...@@ -1114,10 +1113,6 @@ static BOOL xrandr14_get_monitors( ULONG_PTR adapter_id, struct gdi_monitor **ne ...@@ -1114,10 +1113,6 @@ static BOOL xrandr14_get_monitors( ULONG_PTR adapter_id, struct gdi_monitor **ne
crtc_info->x + crtc_info->width, crtc_info->y + crtc_info->height ); crtc_info->x + crtc_info->width, crtc_info->y + crtc_info->height );
monitors[monitor_count].rc_work = get_work_area( &monitors[monitor_count].rc_monitor ); monitors[monitor_count].rc_work = get_work_area( &monitors[monitor_count].rc_monitor );
monitors[monitor_count].state_flags = DISPLAY_DEVICE_ATTACHED;
if (!IsRectEmpty( &monitors[monitor_count].rc_monitor ))
monitors[monitor_count].state_flags |= DISPLAY_DEVICE_ACTIVE;
if (is_crtc_primary( primary_rect, crtc_info )) if (is_crtc_primary( primary_rect, crtc_info ))
primary_index = monitor_count; primary_index = monitor_count;
......
...@@ -264,7 +264,6 @@ struct gdi_monitor ...@@ -264,7 +264,6 @@ struct gdi_monitor
{ {
RECT rc_monitor; /* RcMonitor in MONITORINFO struct */ RECT rc_monitor; /* RcMonitor in MONITORINFO struct */
RECT rc_work; /* RcWork in MONITORINFO struct */ RECT rc_work; /* RcWork in MONITORINFO struct */
DWORD state_flags; /* StateFlags in DISPLAY_DEVICE struct */
unsigned char *edid; /* Extended Device Identification Data */ unsigned char *edid; /* Extended Device Identification Data */
UINT edid_len; UINT edid_len;
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment