Skip to content

Commit

Permalink
src/screen_xywh.cxx: Fix STR #2637, part 1.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Albrecht Schlosser committed May 23, 2011
1 parent 0c8f264 commit 4bea46c
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/screen_xywh.cxx
Expand Up @@ -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;
Expand Down

0 comments on commit 4bea46c

Please sign in to comment.