Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Plasma
KWin
Commits
b7539d06
Commit
b7539d06
authored
Jan 15, 2021
by
Méven Car
Committed by
Méven Car
Jan 27, 2021
Browse files
Add TestOutputManagement::testOutputDeviceRemoved
Test the mock VirtualBackend
parent
9f4a1433
Changes
3
Hide whitespace changes
Inline
Side-by-side
autotests/integration/outputmanagement_test.cpp
View file @
b7539d06
...
...
@@ -43,6 +43,7 @@ private Q_SLOTS:
void
cleanup
();
void
testOutputDeviceDisabled
();
void
testOutputDeviceRemoved
();
};
void
TestOutputManagement
::
initTestCase
()
...
...
@@ -50,6 +51,7 @@ void TestOutputManagement::initTestCase()
qRegisterMetaType
<
KWin
::
Deleted
*>
();
qRegisterMetaType
<
KWin
::
AbstractClient
*>
();
qRegisterMetaType
<
KWin
::
AbstractOutput
*>
();
qRegisterMetaType
<
AbstractOutput
*>
();
qRegisterMetaType
<
KWin
::
AbstractOutput
*>
(
"AbstractOutput *"
);
qRegisterMetaType
<
KWayland
::
Client
::
Output
*>
();
qRegisterMetaType
<
KWayland
::
Client
::
OutputDevice
::
Enablement
>
();
...
...
@@ -172,5 +174,68 @@ void TestOutputManagement::testOutputDeviceDisabled()
QCOMPARE
(
outputDisabledSpy
.
count
(),
0
);
}
void
TestOutputManagement
::
testOutputDeviceRemoved
()
{
// This tests checks that OutputConfiguration::apply aka Platform::requestOutputsChange works as expected
// when removing a virtual OutputDevice
QScopedPointer
<
Surface
>
surface
(
Test
::
createSurface
());
QScopedPointer
<
XdgShellSurface
>
shellSurface
(
Test
::
createXdgShellStableSurface
(
surface
.
data
()));
auto
size
=
QSize
(
200
,
200
);
QSignalSpy
outputEnteredSpy
(
surface
.
data
(),
&
Surface
::
outputEntered
);
QSignalSpy
outputLeftSpy
(
surface
.
data
(),
&
Surface
::
outputLeft
);
QSignalSpy
outputEnabledSpy
(
kwinApp
()
->
platform
(),
&
Platform
::
outputEnabled
);
QSignalSpy
outputDisabledSpy
(
kwinApp
()
->
platform
(),
&
Platform
::
outputDisabled
);
QSignalSpy
outputRemovedSpy
(
kwinApp
()
->
platform
(),
&
Platform
::
outputRemoved
);
auto
c
=
Test
::
renderAndWaitForShown
(
surface
.
data
(),
size
,
Qt
::
blue
);
//move to be in the first screen
c
->
move
(
QPoint
(
100
,
100
));
//we don't don't know where the compositor first placed this window,
//this might fire, it might not
outputEnteredSpy
.
wait
(
5
);
outputEnteredSpy
.
clear
();
QCOMPARE
(
waylandServer
()
->
display
()
->
outputs
().
count
(),
2
);
QCOMPARE
(
surface
->
outputs
().
count
(),
1
);
Output
*
firstOutput
=
surface
->
outputs
().
first
();
QCOMPARE
(
firstOutput
->
globalPosition
(),
QPoint
(
0
,
0
));
QSignalSpy
modesChangedSpy
(
firstOutput
,
&
Output
::
modeChanged
);
QSignalSpy
screenChangedSpy
(
screens
(),
&
KWin
::
Screens
::
changed
);
QCOMPARE
(
Test
::
waylandOutputDevices
().
count
(),
2
);
OutputDevice
*
device
=
Test
::
waylandOutputDevices
().
first
();
QCOMPARE
(
device
->
enabled
(),
OutputDevice
::
Enablement
::
Enabled
);
QSignalSpy
outputDeviceEnabledChangedSpy
(
device
,
&
OutputDevice
::
enabledChanged
);
AbstractOutput
*
output
=
kwinApp
()
->
platform
()
->
outputs
().
first
();
// Removes an output
QMetaObject
::
invokeMethod
(
kwinApp
()
->
platform
(),
"removeOutput"
,
Qt
::
DirectConnection
,
Q_ARG
(
AbstractOutput
*
,
output
));
// Let the new state propagate
QVERIFY
(
outputEnteredSpy
.
wait
());
QCOMPARE
(
waylandServer
()
->
display
()
->
outputs
().
count
(),
1
);
QCOMPARE
(
waylandServer
()
->
display
()
->
outputDevices
().
count
(),
1
);
QCOMPARE
(
Test
::
waylandOutputDevices
().
count
(),
1
);
QCOMPARE
(
outputDeviceEnabledChangedSpy
.
count
(),
1
);
QCOMPARE
(
device
->
enabled
(),
OutputDevice
::
Enablement
::
Disabled
);
QCOMPARE
(
outputLeftSpy
.
count
(),
1
);
QCOMPARE
(
outputEnteredSpy
.
count
(),
1
);
// surface moved to the other screen
QCOMPARE
(
surface
->
outputs
().
count
(),
1
);
QCOMPARE
(
screens
()
->
count
(),
1
);
QCOMPARE
(
screenChangedSpy
.
count
(),
3
);
QCOMPARE
(
modesChangedSpy
.
count
(),
0
);
QCOMPARE
(
outputEnabledSpy
.
count
(),
0
);
QCOMPARE
(
outputDisabledSpy
.
count
(),
1
);
QCOMPARE
(
outputRemovedSpy
.
count
(),
1
);
}
WAYLANDTEST_MAIN
(
TestOutputManagement
)
#include "outputmanagement_test.moc"
plugins/platforms/virtual/virtual_backend.cpp
View file @
b7539d06
...
...
@@ -159,12 +159,10 @@ void VirtualBackend::enableOutput(VirtualOutput *output, bool enable)
void
VirtualBackend
::
removeOutput
(
AbstractOutput
*
output
)
{
VirtualOutput
*
virtualOutput
=
static_cast
<
VirtualOutput
*>
(
output
);
if
(
m_outputsEnabled
.
removeOne
(
virtualOutput
))
{
emit
outputDisabled
(
virtualOutput
);
}
virtualOutput
->
setEnabled
(
false
);
m_outputs
.
removeOne
(
virtualOutput
);
emit
outputRemoved
(
virtualOutput
);
m_outputsEnabled
.
removeOne
(
virtualOutput
);
delete
virtualOutput
;
...
...
plugins/platforms/virtual/virtual_backend.h
View file @
b7539d06
...
...
@@ -54,7 +54,7 @@ public:
void
enableOutput
(
VirtualOutput
*
output
,
bool
enable
);
void
removeOutput
(
AbstractOutput
*
output
);
Q_INVOKABLE
void
removeOutput
(
AbstractOutput
*
output
);
Q_SIGNALS:
void
virtualOutputsSet
(
bool
countChanged
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment