forked from pool/xorg-x11-server
Stefan Dirsch
6ff43929b0
- Added xorg-xserver-e89edec497ba.patch to fix incompatible pointer type error with GCC 14. If the request is OK, please forward it to Factory soon too so that we can switch the default compiler. Thanks! OBS-URL: https://build.opensuse.org/request/show/1189636 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=891
63 lines
2.4 KiB
Diff
63 lines
2.4 KiB
Diff
From: Egbert Eich <eich@suse.de>
|
|
|
|
Fix calculation of DPI using mode data if present.
|
|
|
|
Index: hw/xfree86/common/xf86Helper.c
|
|
===================================================================
|
|
--- hw/xfree86/common/xf86Helper.c.orig
|
|
+++ hw/xfree86/common/xf86Helper.c
|
|
@@ -875,12 +875,22 @@ xf86SetDpi(ScrnInfoPtr pScrn, int x, int
|
|
else if (pScrn->widthmm > 0 || pScrn->heightmm > 0) {
|
|
from = X_CONFIG;
|
|
if (pScrn->widthmm > 0) {
|
|
- pScrn->xDpi =
|
|
- (int) ((double) pScrn->virtualX * MMPERINCH / pScrn->widthmm);
|
|
+ if (pScrn->modes && pScrn->modes->HDisplay > 0) {
|
|
+ pScrn->xDpi =
|
|
+ (int)((double) pScrn->modes->HDisplay * MMPERINCH / pScrn->widthmm);
|
|
+ } else {
|
|
+ pScrn->xDpi =
|
|
+ (int)((double)pScrn->virtualX * MMPERINCH / pScrn->widthmm);
|
|
+ }
|
|
}
|
|
if (pScrn->heightmm > 0) {
|
|
- pScrn->yDpi =
|
|
- (int) ((double) pScrn->virtualY * MMPERINCH / pScrn->heightmm);
|
|
+ if (pScrn->modes && pScrn->modes->VDisplay > 0) {
|
|
+ pScrn->yDpi =
|
|
+ (int)((double)pScrn->modes->VDisplay * MMPERINCH / pScrn->heightmm);
|
|
+ } else {
|
|
+ pScrn->yDpi =
|
|
+ (int)((double)pScrn->virtualY * MMPERINCH / pScrn->heightmm);
|
|
+ }
|
|
}
|
|
if (pScrn->xDpi > 0 && pScrn->yDpi <= 0)
|
|
pScrn->yDpi = pScrn->xDpi;
|
|
@@ -919,12 +929,22 @@ xf86SetDpi(ScrnInfoPtr pScrn, int x, int
|
|
pScrn->widthmm = ddcWidthmm;
|
|
pScrn->heightmm = ddcHeightmm;
|
|
if (pScrn->widthmm > 0) {
|
|
- pScrn->xDpi =
|
|
- (int) ((double) pScrn->virtualX * MMPERINCH / pScrn->widthmm);
|
|
+ if (pScrn->modes && pScrn->modes->HDisplay > 0) {
|
|
+ pScrn->xDpi =
|
|
+ (int)((double) pScrn->modes->HDisplay * MMPERINCH / pScrn->widthmm);
|
|
+ } else {
|
|
+ pScrn->xDpi =
|
|
+ (int)((double)pScrn->virtualX * MMPERINCH / pScrn->widthmm);
|
|
+ }
|
|
}
|
|
if (pScrn->heightmm > 0) {
|
|
- pScrn->yDpi =
|
|
- (int) ((double) pScrn->virtualY * MMPERINCH / pScrn->heightmm);
|
|
+ if (pScrn->modes && pScrn->modes->VDisplay > 0) {
|
|
+ pScrn->yDpi =
|
|
+ (int)((double)pScrn->modes->VDisplay * MMPERINCH / pScrn->heightmm);
|
|
+ } else {
|
|
+ pScrn->yDpi =
|
|
+ (int)((double)pScrn->virtualY * MMPERINCH / pScrn->heightmm);
|
|
+ }
|
|
}
|
|
if (pScrn->xDpi > 0 && pScrn->yDpi <= 0)
|
|
pScrn->yDpi = pScrn->xDpi;
|