mirror of
https://github.com/fltk/fltk.git
synced 2026-06-06 16:46:52 +08:00
src/screen_xywh.cxx: Fix STR #2637, part 1.
Fix array bounds error when Xinerama and Xlib disagree about number of screens. Fix setting vertical resolution (dpi) of different monitors. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8727 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
+8
-4
@@ -155,11 +155,15 @@ static void screen_init() {
|
||||
if (XineramaIsActive(fl_display)) {
|
||||
screens = XineramaQueryScreens(fl_display, &num_screens);
|
||||
int i;
|
||||
// Xlib and Xinerama may disagree on the screen count. Sigh...
|
||||
// Use the minimum of the reported counts.
|
||||
// Use the previous screen's info for non-existent ones.
|
||||
int sc = ScreenCount(fl_display); // Xlib screen count
|
||||
for (i=0; i<num_screens; i++) {
|
||||
int mm = DisplayWidthMM(fl_display, i);
|
||||
dpi[i][0] = mm ? screens[i].width*25.4f/mm : 0.0f;
|
||||
mm = DisplayHeightMM(fl_display, fl_screen);
|
||||
dpi[i][1] = mm ? screens[i].height*25.4f/mm : dpi[i][0];
|
||||
int mm = (i < sc) ? DisplayWidthMM(fl_display, i) : 0;
|
||||
dpi[i][0] = mm ? screens[i].width*25.4f/mm : (i > 0) ? dpi[i-1][0] : 0.0f;
|
||||
mm = (i < sc) ? DisplayHeightMM(fl_display, i) : 0;
|
||||
dpi[i][1] = mm ? screens[i].height*25.4f/mm : (i > 0) ? dpi[i-1][1] : 0.0f;
|
||||
}
|
||||
} else { // ! XineramaIsActive()
|
||||
num_screens = 1;
|
||||
|
||||
Reference in New Issue
Block a user