diff --git a/modules/juce_gui_basics/desktop/juce_Displays.cpp b/modules/juce_gui_basics/desktop/juce_Displays.cpp index 7ef4a32ce8..f9c4c4c2a4 100644 --- a/modules/juce_gui_basics/desktop/juce_Displays.cpp +++ b/modules/juce_gui_basics/desktop/juce_Displays.cpp @@ -326,19 +326,36 @@ void Displays::updateToLogical() DisplayNode node; node.display = &d; + + if (d.totalArea.getTopLeft() == Point()) + node.isRoot = true; + displayNodes.add (node); } - DisplayNode* root = nullptr; - for (auto& node : displayNodes) + auto* root = [&displayNodes]() -> DisplayNode* { - if (node.display->totalArea.getTopLeft() == Point()) + for (auto& node : displayNodes) + if (node.isRoot) + return &node; + + auto minDistance = std::numeric_limits::max(); + DisplayNode* retVal = nullptr; + + for (auto& node : displayNodes) { - root = &node; - root->isRoot = true; - break; + auto distance = node.display->totalArea.getTopLeft().getDistanceFrom ({}); + + if (distance < minDistance) + { + minDistance = distance; + retVal = &node; + } } - } + + retVal->isRoot = true; + return retVal; + }(); // Must have a root node! jassert (root != nullptr);