diff --git a/modules/juce_gui_basics/native/juce_linux_Windowing.cpp b/modules/juce_gui_basics/native/juce_linux_Windowing.cpp index 7573f8a639..4e22c8ff92 100644 --- a/modules/juce_gui_basics/native/juce_linux_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_linux_Windowing.cpp @@ -1189,7 +1189,7 @@ private: ScopedPointer screens; const int numMonitors = ScreenCount (dpy); - RROutput mainDisplay = xrandr.getOutputPrimary (dpy, RootWindow (dpy, 0)); + RROutput mainDisplay = xrandr.getOutputPrimary (dpy, RootWindow (dpy, 0)) + 1; for (int i = 0; i < numMonitors; ++i) { @@ -3722,12 +3722,45 @@ void Desktop::Displays::findDisplays (float masterScale) { DisplayGeometry& geometry = DisplayGeometry::getOrCreateInstance (display, masterScale); + // add the main display first + int mainDisplayIdx; + for (mainDisplayIdx = 0; mainDisplayIdx < geometry.infos.size(); ++mainDisplayIdx) + { + const DisplayGeometry::ExtendedInfo& info = geometry.infos.getReference (mainDisplayIdx); + if (info.isMain) + break; + } + + // no main display found then use the first + if (mainDisplayIdx >= geometry.infos.size()) + mainDisplayIdx = 0; + + // add the main display + { + const DisplayGeometry::ExtendedInfo& info = + geometry.infos.getReference (mainDisplayIdx); + Desktop::Displays::Display d; + + d.isMain = true; + d.scale = masterScale * info.scale; + d.dpi = info.dpi; + + d.totalArea = DisplayGeometry::physicalToScaled (info.totalBounds); + d.userArea = (info.usableBounds / d.scale) + info.topLeftScaled; + + displays.add (d); + } + for (int i = 0; i < geometry.infos.size(); ++i) { + // don't add the main display a second time + if (i == mainDisplayIdx) + continue; + const DisplayGeometry::ExtendedInfo& info = geometry.infos.getReference (i); Desktop::Displays::Display d; - d.isMain = info.isMain; + d.isMain = false; d.scale = masterScale * info.scale; d.dpi = info.dpi;