Details
-
Bug
-
Resolution: Fixed
-
P2: Important
-
6.5.2
-
None
-
-
695948fad (dev), bd4ab9c23 (6.6), 4b119f48f (6.5)
Description
The move by Qt to use friendlyMonitor names extracted from the monitor EDID cause bug reports where only one of two identical screens was detected, resulting in very broken behaviour.
See: QTBUG-112829
The fix for that bug introduces monitor edid serial numbers to determine the model index.
Unfortunately, multiple monitors can have identical edid serial numbers as serial numbers in the edid are not properly changed by many manufacturers. This is true for identical monitors having identical edid blocks from a single manufacturer (LG, Acer, etc), and even true across multiple manufacturers.
Repeating what I added to that issue which so far has been ignored:
The fix for QTBUG-112829 here
https://github.com/qt/qtbase/commit/b7053fc2bc69bdb08f10fe41c373aa519852adbb
has caused multiple bug reports on Sigil. It seems for many users who purchased 2 identical monitors often end up with both monitors having exactly identical EDID blocks leading to identical serialNumbers.
The two identical EDID blocks with identical serial numbers can not be changed by the end user.
Perhaps a combination of deviceName and serial number would make things safer for everyone and possibly provide a way to work around the problem monitor manufacturers created by reusing edid blocks with identical serial numbers (resulting in identical monitorFriendlyDeviceNames as well).
FWIW, This could be done with a one line change in the qwindowsscreen.cpp routine that uses the parsed edid info by making the deviceName become part of the serialnumber by appending it at the end.
Perhaps something as simple as:
--- qwindowsscreen.cpp.orig 2023-08-24 10:26:41
+++ qwindowsscreen.cpp 2023-08-24 10:30:17
@@ -244,7 +244,7 @@
names << QString::fromWCharArray(deviceName.monitorFriendlyDeviceName);
manufacturers << edid.manufacturer;
models << edid.model;
- serialNumbers << edid.serialNumber;
+ serialNumbers << edid.serialNumber + data.deviceName;
}
data.name = names.join(u"|"_s);
might work better.
We now have this bug reported for a identical pair of LG monitors having identical EDID blocks, and the same for a pair of Acer monitors having identical EDID blocks.
When some manufacturers reuse the exact same EDID block, using the EDID serial number as a unique identifier will just not work.
There is also the possibility that one manufacturer's edid serial number could match that of a different manufacturer.
The original move away from data.deviceName to EDID monitor friendly names caused the bug in 112829. Then the move to EDID serial numbers has simply moved that bug.
Please fix this.
It gets even worse. It seems many manufacturers do not use real serial numbers in the edid block at all. Bytes 12-15 in the EDID 1.4 block seem in many cases to be hard coded to the 01 01 01 01.
This results in things like the following serial number "16843009" being re-used ACROSS different manufacturers.
Debug: Screen: 1 "E221-A1" "VIZIO, Inc" "16843009"
Debug: geo : QRect(1920,0 1536x864)
Debug: avail geo: QRect(1920,0 1536x824)
Debug: devideRatio: 1.25
Debug: logical dpi: 96 96
Debug: physic dpi: 81.963 133.004
Debug: Screen: 1 "LG FHD" "LG Electronics" "16843009"
Debug: geo : QRect(1920,0 1920x1080)
Debug: avail geo: QRect(1920,0 1920x1040)
Debug: devideRatio: 1
Debug: logical dpi: 96 96
Debug: physic dpi: 81.28 80.6824
Attachments
Issue Links
- is duplicated by
-
QTBUG-117441 QGuiApplication::screens() returns incomplete list of Screens
- Closed
-
QTBUG-115494 [Regression 6.5.1->6.5.2] context menu of QTextEdit appears on the secondary monitor in Windows Remote Desktop environment
- Closed
- relates to
-
QTBUG-116549 Recent QT6 applications share similar multi-monitor issues
- Closed