Merge lp:~gerboland/qtmir/initial-surface-expose into lp:qtmir

Proposed by Gerry Boland
Status: Merged
Approved by: Nick Dedekind
Approved revision: 584
Merged at revision: 587
Proposed branch: lp:~gerboland/qtmir/initial-surface-expose
Merge into: lp:qtmir
Diff against target: 59 lines (+31/-0)
2 files modified
src/modules/Unity/Application/mirsurface.cpp (+1/-0)
tests/modules/WindowManager/mirsurface_test.cpp (+30/-0)
To merge this branch: bzr merge lp:~gerboland/qtmir/initial-surface-expose
Reviewer Review Type Date Requested Status
Nick Dedekind (community) Approve
Unity8 CI Bot (community) continuous-integration Approve
Review via email: mp+314458@code.launchpad.net

Commit message

Recalculate MirSurface.visible after first frame swap by client

Fixes issue where OSK would be invisible at startup

To post a comment you must log in.
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote :

PASSED: Continuous integration, rev:584
https://unity8-jenkins.ubuntu.com/job/lp-qtmir-ci/442/
Executed test runs:
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build/3751
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-0-fetch/3779
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=xenial+overlay/3623
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=xenial+overlay/3623/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=zesty/3623
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=zesty/3623/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=xenial+overlay/3623
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=xenial+overlay/3623/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=zesty/3623
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=zesty/3623/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=xenial+overlay/3623
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=xenial+overlay/3623/artifact/output/*zip*/output.zip
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=zesty/3623
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=zesty/3623/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-qtmir-ci/442/rebuild

review: Approve (continuous-integration)
Revision history for this message
Nick Dedekind (nick-dedekind) wrote :

All good here.
Test fails before, passes after.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/modules/Unity/Application/mirsurface.cpp'
2--- src/modules/Unity/Application/mirsurface.cpp 2016-11-25 15:23:36 +0000
3+++ src/modules/Unity/Application/mirsurface.cpp 2017-01-10 18:01:14 +0000
4@@ -845,6 +845,7 @@
5 if (!m_ready) {
6 DEBUG_MSG << "()";
7 m_ready = true;
8+ updateVisible(); // as Mir can change m_surface->visible() to true after first frame swap
9 Q_EMIT ready();
10 updateExposure();
11 }
12
13=== modified file 'tests/modules/WindowManager/mirsurface_test.cpp'
14--- tests/modules/WindowManager/mirsurface_test.cpp 2016-11-03 20:17:46 +0000
15+++ tests/modules/WindowManager/mirsurface_test.cpp 2017-01-10 18:01:14 +0000
16@@ -61,6 +61,8 @@
17 struct MockSurface : public StubSurface
18 {
19 MOCK_CONST_METHOD1(buffers_ready_for_compositor, int(void const*));
20+ MOCK_CONST_METHOD0(visible, bool());
21+ MOCK_CONST_METHOD0(state, MirSurfaceState());
22 };
23
24 class MirSurfaceTest : public ::testing::Test
25@@ -159,6 +161,34 @@
26 }
27
28 /*
29+ * Test that MirSurface.visible is recalculated after the client swaps the first frame.
30+ * A surface is not considered visible unless it has a non-hidden & non-minimized state, and
31+ * it has drawn at least one frame.
32+ */
33+TEST_F(MirSurfaceTest, EnsureVisiblePropertyRecalculatedAfterFrameSwap)
34+{
35+ auto mockSurface = std::make_shared<NiceMock<MockSurface>>();
36+ miral::Window mockWindow(stubSession, mockSurface);
37+ ms::SurfaceCreationParameters spec;
38+ miral::WindowInfo mockWindowInfo(mockWindow, spec);
39+
40+ EXPECT_CALL(*mockSurface.get(),state())
41+ .WillRepeatedly(Return(mir_surface_state_maximized));
42+ EXPECT_CALL(*mockSurface.get(),visible())
43+ .WillOnce(Return(false));
44+
45+ MirSurface surface(mockWindowInfo, nullptr);
46+
47+ EXPECT_FALSE(surface.visible());
48+
49+ EXPECT_CALL(*mockSurface.get(),visible())
50+ .WillOnce(Return(true));
51+
52+ surface.setReady();
53+ EXPECT_TRUE(surface.visible());
54+}
55+
56+/*
57 * Test that a surface whose client fails to comply with a close request will eventually comply.
58 */
59 struct MockWindowModelController : public StubWindowModelController

Subscribers

People subscribed via source and target branches