Commit fc58fbaa authored by Vlad Zahorodnii's avatar Vlad Zahorodnii
Browse files

Add conversion helpers between xinerama indices and output objects

Currently, we implicitly assume that enabled outputs are stored in the
xinerama order, but with ongoing refactorings, it's easy to break that
assumption. Also, we are not going to change the DRM backend so it
stores enabled outputs in the xinerama order.

This change adds xinerama index conversion helpers in order to reduce
the number of potential regressions with output refactorings.
parent 4790916f
......@@ -768,7 +768,7 @@ void X11Window::startupIdChanged()
workspace()->sendWindowToDesktop(this, desktop, true);
}
if (asn_data.xinerama() != -1) {
Output *output = kwinApp()->platform()->findOutput(asn_data.xinerama());
Output *output = workspace()->xineramaIndexToOutput(asn_data.xinerama());
if (output) {
workspace()->sendWindowToOutput(this, output);
}
......
......@@ -2248,7 +2248,7 @@ QRectF Workspace::clientArea(clientAreaOption opt, const Output *output, const V
const Output *effectiveOutput = output;
if (is_multihead) {
effectiveOutput = kwinApp()->platform()->findOutput(screen_number);
effectiveOutput = xineramaIndexToOutput(screen_number);
}
if (auto desktopIt = m_screenAreas.constFind(desktop); desktopIt != m_screenAreas.constEnd()) {
......@@ -2352,6 +2352,11 @@ int Workspace::oldDisplayHeight() const
return olddisplaysize.height();
}
Output *Workspace::xineramaIndexToOutput(int index) const
{
return kwinApp()->platform()->enabledOutputs().value(index);
}
Output *Workspace::activeOutput() const
{
if (options->activeMouseScreen()) {
......
......@@ -151,6 +151,8 @@ public:
bool initializing() const;
Output *xineramaIndexToOutput(int index) const;
Output *activeOutput() const;
void setActiveOutput(Output *output);
void setActiveOutput(const QPointF &pos);
......
......@@ -619,7 +619,7 @@ bool X11Window::manage(xcb_window_t w, bool isMapped)
} else {
Output *output = nullptr;
if (asn_data.xinerama() != -1) {
output = kwinApp()->platform()->findOutput(asn_data.xinerama());
output = workspace()->xineramaIndexToOutput(asn_data.xinerama());
}
if (!output) {
output = workspace()->activeOutput();
......@@ -4649,16 +4649,16 @@ QRect X11Window::fullscreenMonitorsArea(NETFullscreenMonitors requestedTopology)
{
QRect total;
if (auto output = kwinApp()->platform()->findOutput(requestedTopology.top)) {
if (auto output = workspace()->xineramaIndexToOutput(requestedTopology.top)) {
total = total.united(output->geometry());
}
if (auto output = kwinApp()->platform()->findOutput(requestedTopology.bottom)) {
if (auto output = workspace()->xineramaIndexToOutput(requestedTopology.bottom)) {
total = total.united(output->geometry());
}
if (auto output = kwinApp()->platform()->findOutput(requestedTopology.left)) {
if (auto output = workspace()->xineramaIndexToOutput(requestedTopology.left)) {
total = total.united(output->geometry());
}
if (auto output = kwinApp()->platform()->findOutput(requestedTopology.right)) {
if (auto output = workspace()->xineramaIndexToOutput(requestedTopology.right)) {
total = total.united(output->geometry());
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment