Mir

Merge lp:~alan-griffiths/mir/fix-1717561 into lp:mir

Proposed by Alan Griffiths
Status: Merged
Approved by: Gerry Boland
Approved revision: no longer in the source branch.
Merged at revision: 4263
Proposed branch: lp:~alan-griffiths/mir/fix-1717561
Merge into: lp:mir
Diff against target: 143 lines (+54/-8)
2 files modified
include/server/mir/frontend/buffer_stream.h (+1/-0)
src/server/frontend/wayland/wayland_connector.cpp (+53/-8)
To merge this branch: bzr merge lp:~alan-griffiths/mir/fix-1717561
Reviewer Review Type Date Requested Status
Mir CI Bot continuous-integration Approve
Gerry Boland (community) Approve
Review via email: mp+330992@code.launchpad.net

Commit message

A first pass at getting fullscreen wayland windows fullscreen

Description of the change

A first pass at getting fullscreen wayland windows fullscreen

This still seems a little racy on surface creation: e.g. kiosk doesn't always end up with a maximized window.

But other resizing (including client initiated fullscreen) seems to work.

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

FAILED: Continuous integration, rev:4255
https://mir-jenkins.ubuntu.com/job/mir-ci/3671/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/5026/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/5259
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=artful/5247
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/5247
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/5247
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/5069
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/5069/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/5069
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/5069/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/5069/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/5069
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/5069/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/5069
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/5069/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/5069
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/5069/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/5069
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/5069/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/5069
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/5069/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3671/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

FAILED: Continuous integration, rev:4257
https://mir-jenkins.ubuntu.com/job/mir-ci/3677/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/5040/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/5276
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=artful/5264
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/5264
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/5264
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/5083
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/5083/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/5083/console
    ABORTED: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/5083/console
    ABORTED: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/5083/console
    ABORTED: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/5083/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/5083
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/5083/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/5083
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/5083/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/5083
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/5083/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3677/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Gerry Boland (gerboland) wrote :

Works, and code looks correct

review: Approve
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:4259
https://mir-jenkins.ubuntu.com/job/mir-ci/3678/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/5041
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/5277
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=artful/5265
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/5265
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/5265
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/5084
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/5084/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/5084
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/5084/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/5084
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/5084/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/5084
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/5084/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/5084
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/5084/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/5084
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/5084/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/5084
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/5084/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/5084
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/5084/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3678/rebuild

review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'include/server/mir/frontend/buffer_stream.h'
--- include/server/mir/frontend/buffer_stream.h 2017-09-01 05:03:55 +0000
+++ include/server/mir/frontend/buffer_stream.h 2017-09-22 11:48:21 +0000
@@ -21,6 +21,7 @@
2121
22#include <mir_toolkit/common.h>22#include <mir_toolkit/common.h>
23#include "mir/graphics/buffer_id.h"23#include "mir/graphics/buffer_id.h"
24#include "mir/geometry/size.h"
24#include <functional>25#include <functional>
25#include <memory>26#include <memory>
2627
2728
=== modified file 'src/server/frontend/wayland/wayland_connector.cpp'
--- src/server/frontend/wayland/wayland_connector.cpp 2017-09-21 11:30:51 +0000
+++ src/server/frontend/wayland/wayland_connector.cpp 2017-09-22 11:48:21 +0000
@@ -21,6 +21,7 @@
21#include "core_generated_interfaces.h"21#include "core_generated_interfaces.h"
2222
23#include "mir/frontend/shell.h"23#include "mir/frontend/shell.h"
24#include "mir/frontend/surface.h"
2425
25#include "mir/compositor/buffer_stream.h"26#include "mir/compositor/buffer_stream.h"
2627
@@ -1028,6 +1029,11 @@
1028 InputCtx<WlKeyboard> const& acquire_keyboard_reference(wl_client* client) const;1029 InputCtx<WlKeyboard> const& acquire_keyboard_reference(wl_client* client) const;
1029 InputCtx<WlTouch> const& acquire_touch_reference(wl_client* client) const;1030 InputCtx<WlTouch> const& acquire_touch_reference(wl_client* client) const;
10301031
1032 void spawn(std::function<void()>&& work)
1033 {
1034 executor->spawn(std::move(work));
1035 }
1036
1031private:1037private:
1032 std::unordered_map<wl_client*, InputCtx<WlPointer>> mutable pointer;1038 std::unordered_map<wl_client*, InputCtx<WlPointer>> mutable pointer;
1033 std::unordered_map<wl_client*, InputCtx<WlKeyboard>> mutable keyboard;1039 std::unordered_map<wl_client*, InputCtx<WlKeyboard>> mutable keyboard;
@@ -1146,13 +1152,14 @@
1146{1152{
1147}1153}
11481154
1149class SurfaceInputSink : public mf::EventSink1155class SurfaceEventSink : public mf::EventSink
1150{1156{
1151public:1157public:
1152 SurfaceInputSink(WlSeat* seat, wl_client* client, wl_resource* target)1158 SurfaceEventSink(WlSeat* seat, wl_client* client, wl_resource* target, wl_resource* event_sink)
1153 : seat{seat},1159 : seat{seat},
1154 client{client},1160 client{client},
1155 target{target}1161 target{target},
1162 event_sink{event_sink}
1156 {1163 {
1157 }1164 }
11581165
@@ -1172,12 +1179,24 @@
1172 WlSeat* const seat;1179 WlSeat* const seat;
1173 wl_client* const client;1180 wl_client* const client;
1174 wl_resource* const target;1181 wl_resource* const target;
1182 wl_resource* const event_sink;
1175};1183};
11761184
1177void SurfaceInputSink::handle_event(MirEvent const& event)1185void SurfaceEventSink::handle_event(MirEvent const& event)
1178{1186{
1179 switch (mir_event_get_type(&event))1187 switch (mir_event_get_type(&event))
1180 {1188 {
1189 case mir_event_type_resize:
1190 {
1191 auto resize = mir_event_get_resize_event(&event);
1192 seat->spawn([event_sink=event_sink,
1193 width = mir_resize_event_get_width(resize),
1194 height = mir_resize_event_get_height(resize)]()
1195 {
1196 wl_shell_surface_send_configure(event_sink, WL_SHELL_SURFACE_RESIZE_NONE, width, height);
1197 });
1198 break;
1199 }
1181 case mir_event_type_input:1200 case mir_event_type_input:
1182 {1201 {
1183 auto input_event = mir_event_get_input_event(&event);1202 auto input_event = mir_event_get_input_event(&event);
@@ -1362,7 +1381,7 @@
1362 shell{shell}1381 shell{shell}
1363 {1382 {
1364 auto* tmp = wl_resource_get_user_data(surface);1383 auto* tmp = wl_resource_get_user_data(surface);
1365 auto& mir_surface = *static_cast<WlSurface*>(reinterpret_cast<wayland::Surface*>(tmp));1384 auto& mir_surface = *static_cast<WlSurface*>(tmp);
13661385
1367 auto const session = session_for_client(client);1386 auto const session = session_for_client(client);
13681387
@@ -1374,7 +1393,15 @@
1374 surface_id = shell->create_surface(1393 surface_id = shell->create_surface(
1375 session,1394 session,
1376 params,1395 params,
1377 std::make_shared<SurfaceInputSink>(&seat, client, surface));1396 std::make_shared<SurfaceEventSink>(&seat, client, surface, resource));
1397
1398 {
1399 // The shell isn't guaranteed to respect the requested size
1400 auto const window = session->get_surface(surface_id);
1401 auto const size = window->client_size();
1402 seat.spawn([resource=resource, height = size.height.as_int(), width = size.width.as_int()]()
1403 { wl_shell_surface_send_configure(resource, WL_SHELL_SURFACE_RESIZE_NONE, width, height); });
1404 }
13781405
1379 mir_surface.set_resize_handler(1406 mir_surface.set_resize_handler(
1380 [shell, session, id = surface_id](geom::Size new_size)1407 [shell, session, id = surface_id](geom::Size new_size)
@@ -1429,8 +1456,18 @@
1429 void set_fullscreen(1456 void set_fullscreen(
1430 uint32_t /*method*/,1457 uint32_t /*method*/,
1431 uint32_t /*framerate*/,1458 uint32_t /*framerate*/,
1432 std::experimental::optional<struct wl_resource*> const& /*output*/) override1459 std::experimental::optional<struct wl_resource*> const& output) override
1433 {1460 {
1461 mir::shell::SurfaceSpecification mods;
1462 mods.state = mir_window_state_fullscreen;
1463 if (output)
1464 {
1465 // TODO{alan_g} mods.output_id = DisplayConfigurationOutputId_from(output)
1466 }
1467
1468 auto const session = session_for_client(client);
1469 shell->modify_surface(session, surface_id, mods);
1470
1434 }1471 }
14351472
1436 void set_popup(1473 void set_popup(
@@ -1443,8 +1480,16 @@
1443 {1480 {
1444 }1481 }
14451482
1446 void set_maximized(std::experimental::optional<struct wl_resource*> const& /*output*/) override1483 void set_maximized(std::experimental::optional<struct wl_resource*> const& output) override
1447 {1484 {
1485 mir::shell::SurfaceSpecification mods;
1486 mods.state = mir_window_state_maximized;
1487 if (output)
1488 {
1489 // TODO{alan_g} mods.output_id = DisplayConfigurationOutputId_from(output)
1490 }
1491 auto const session = session_for_client(client);
1492 shell->modify_surface(session, surface_id, mods);
1448 }1493 }
14491494
1450 void set_title(std::string const& /*title*/) override1495 void set_title(std::string const& /*title*/) override

Subscribers

People subscribed via source and target branches