kwin/autotests/mock_workspace.cpp
Martin Gräßlin 2eb876743c [screens] Replace DesktopWidgetScreens by XRandRScreens
A new implementation of the Screens interface is added which uses XRandR
directly instead of relying on QDesktopWidget. The implementation is
provided in a new implementation file screens_xrandr.cpp.

XRandRScreens comes with a unit test. Unfortunately it's rather difficult
to provide a proper unit test against XRandR. Xvfb (which is obviously
used on the CI system) doesn't provide the XRandR extension. Also on a
"normal" developer system one would not want to just execute the test as
the results are not predictable (number of available outputs?) and the
test would mess up the setup resulting in nobody wanting to execute the
test.

As a solution to both problems the unit test starts Xephyr as a nested
X server. This allows to have at least some limited tests against XRandR.
Nevertheless there are a few things which I was not able to test:
* multiple outputs
* no output at all

The nested X Server approach makes the interaction rather complex. Qt
opens it's connection against the main X Server thus QX11Info provides
a wrong connection and also KWin::connection() which is heavily used by
xcbutils and thus all the RandR wrappers have the wrong connection. To
circumvent this problem the test is GUILESS. In case it would call into
any code using QX11Info, it would probably either runtime fail or crash.

REVIEW: 117614
2014-11-27 09:00:19 +01:00

90 lines
2 KiB
C++

/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2014 Martin Gräßlin <mgraesslin@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#include "mock_workspace.h"
#include "mock_client.h"
namespace KWin
{
Workspace *MockWorkspace::s_self = nullptr;
MockWorkspace::MockWorkspace(QObject *parent)
: QObject(parent)
, m_activeClient(nullptr)
, m_movingClient(nullptr)
, m_showingDesktop(false)
{
s_self = this;
}
MockWorkspace::~MockWorkspace()
{
s_self = nullptr;
}
Client *MockWorkspace::activeClient() const
{
return m_activeClient;
}
void MockWorkspace::setActiveClient(Client *c)
{
m_activeClient = c;
}
Client *MockWorkspace::getMovingClient() const
{
return m_movingClient;
}
void MockWorkspace::setMovingClient(Client *c)
{
m_movingClient = c;
}
void MockWorkspace::setShowingDesktop(bool showing)
{
m_showingDesktop = showing;
}
bool MockWorkspace::showingDesktop() const
{
return m_showingDesktop;
}
QRect MockWorkspace::clientArea(clientAreaOption, int screen, int desktop) const
{
Q_UNUSED(screen)
Q_UNUSED(desktop)
return QRect();
}
void MockWorkspace::registerEventFilter(X11EventFilter *filter)
{
Q_UNUSED(filter)
}
void MockWorkspace::unregisterEventFilter(X11EventFilter *filter)
{
Q_UNUSED(filter)
}
}