Skip to content

Commit

Permalink
Ensure Workspace is only started once in Wayland-only mode
Browse files Browse the repository at this point in the history
The connect to Compositor::sceneCreated must be disconnected again,
otherwise a restart of the Compositor results in Workspace being created
again.

Thanks to our autotests for finding this problem!
  • Loading branch information
mgraesslin committed Oct 1, 2017
1 parent f0445b2 commit d75e5c6
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 12 deletions.
12 changes: 7 additions & 5 deletions autotests/integration/kwin_wayland_test.cpp
Expand Up @@ -119,17 +119,19 @@ void WaylandTestApplication::continueStartupWithScreens()

if (operationMode() == OperationModeWaylandOnly) {
createCompositor();
connect(Compositor::self(), &Compositor::sceneCreated, this,
[this] {
createWorkspace();
}
);
connect(Compositor::self(), &Compositor::sceneCreated, this, &WaylandTestApplication::continueStartupWithSceen);
return;
}
createCompositor();
connect(Compositor::self(), &Compositor::sceneCreated, this, &WaylandTestApplication::startXwaylandServer);
}

void WaylandTestApplication::continueStartupWithSceen()
{
disconnect(Compositor::self(), &Compositor::sceneCreated, this, &WaylandTestApplication::continueStartupWithSceen);
createWorkspace();
}

void WaylandTestApplication::continueStartupWithX()
{
createX11Connection();
Expand Down
1 change: 1 addition & 0 deletions autotests/integration/kwin_wayland_test.h
Expand Up @@ -64,6 +64,7 @@ class WaylandTestApplication : public Application
void createBackend();
void createX11Connection();
void continueStartupWithScreens();
void continueStartupWithSceen();
void continueStartupWithX();
void startXwaylandServer();

Expand Down
16 changes: 9 additions & 7 deletions main_wayland.cpp
Expand Up @@ -162,19 +162,21 @@ void ApplicationWayland::continueStartupWithScreens()

if (operationMode() == OperationModeWaylandOnly) {
createCompositor();
connect(Compositor::self(), &Compositor::sceneCreated, this,
[this] {
startSession();
createWorkspace();
notifyKSplash();
}
);
connect(Compositor::self(), &Compositor::sceneCreated, this, &ApplicationWayland::continueStartupWithSceen);
return;
}
createCompositor();
connect(Compositor::self(), &Compositor::sceneCreated, this, &ApplicationWayland::startXwaylandServer);
}

void ApplicationWayland::continueStartupWithSceen()
{
disconnect(Compositor::self(), &Compositor::sceneCreated, this, &ApplicationWayland::continueStartupWithSceen);
startSession();
createWorkspace();
notifyKSplash();
}

void ApplicationWayland::continueStartupWithX()
{
createX11Connection();
Expand Down
1 change: 1 addition & 0 deletions main_wayland.h
Expand Up @@ -61,6 +61,7 @@ class ApplicationWayland : public Application
void createBackend();
void createX11Connection();
void continueStartupWithScreens();
void continueStartupWithSceen();
void continueStartupWithX();
void startXwaylandServer();
void startSession();
Expand Down

0 comments on commit d75e5c6

Please sign in to comment.