From: Brendan Shanks bshanks@codeweavers.com
--- dlls/winemac.drv/cocoa_display.m | 5 ++++- dlls/winemac.drv/display.c | 14 ++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_display.m b/dlls/winemac.drv/cocoa_display.m index 9b9c01dc9e1..2cb6a8f1ce5 100644 --- a/dlls/winemac.drv/cocoa_display.m +++ b/dlls/winemac.drv/cocoa_display.m @@ -650,6 +650,7 @@ void macdrv_free_adapters(struct macdrv_adapter* adapters) * * Get a list of monitors under adapter_id. The first monitor is primary if adapter is primary. * Call macdrv_free_monitors() when you are done using the data. + * An adapter_id of kCGNullDirectDisplay will return monitors for all adapters. * * Returns non-zero value on failure with parameters unchanged and zero on success. */ @@ -687,7 +688,9 @@ int macdrv_get_monitors(CGDirectDisplayID adapter_id, struct macdrv_monitor** ne
for (i = 0; i < display_id_count; i++) { - if (display_ids[i] != adapter_id && CGDisplayMirrorsDisplay(display_ids[i]) != adapter_id) + if (adapter_id != kCGNullDirectDisplay && + display_ids[i] != adapter_id && + CGDisplayMirrorsDisplay(display_ids[i]) != adapter_id) continue;
/* Find and fill in monitor info */ diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c index 3100dc3dc9b..8b012379b2e 100644 --- a/dlls/winemac.drv/display.c +++ b/dlls/winemac.drv/display.c @@ -212,8 +212,8 @@ static void init_original_display_mode(void) BOOL success = FALSE; HKEY mac_driver_hkey, parent_hkey; DWORD disposition; - struct macdrv_display *displays = NULL; - int num_displays, i; + struct macdrv_monitor *monitors = NULL; + int num_monitors, i;
if (inited_original_display_mode) return; @@ -237,12 +237,14 @@ static void init_original_display_mode(void) if (disposition != REG_CREATED_NEW_KEY) goto done;
- if (macdrv_get_displays(&displays, &num_displays)) + if (macdrv_get_monitors(kCGNullDirectDisplay, &monitors, &num_monitors)) goto fail;
- for (i = 0; i < num_displays; i++) + for (i = 0; i < num_monitors; i++) { - if (!write_display_settings(parent_hkey, displays[i].displayID)) + if (CGDisplayMirrorsDisplay(monitors[i].id) != kCGNullDirectDisplay) + continue; + if (!write_display_settings(parent_hkey, monitors[i].id)) goto fail; }
@@ -250,7 +252,7 @@ done: success = TRUE;
fail: - macdrv_free_displays(displays); + macdrv_free_monitors(monitors); NtClose(parent_hkey); if (!success && parent_hkey) reg_delete_tree(mac_driver_hkey, initial_mode_keyW, sizeof(initial_mode_keyW));