Mir

Merge lp:~andreas-pokorny/mir/remove-input-region into lp:mir

Proposed by Andreas Pokorny
Status: Merged
Approved by: Daniel van Vugt
Approved revision: no longer in the source branch.
Merged at revision: 4068
Proposed branch: lp:~andreas-pokorny/mir/remove-input-region
Merge into: lp:mir
Prerequisite: lp:~andreas-pokorny/mir/map-touchscreen-to-output
Diff against target: 800 lines (+0/-510)
17 files modified
src/include/server/mir/default_server_configuration.h (+0/-3)
src/include/server/mir/input/input_region.h (+0/-65)
src/server/input/CMakeLists.txt (+0/-1)
src/server/input/basic_seat.h (+0/-1)
src/server/input/default_configuration.cpp (+0/-10)
src/server/input/display_input_region.cpp (+0/-51)
src/server/input/display_input_region.h (+0/-51)
src/server/input/seat_input_device_tracker.h (+0/-1)
src/server/scene/default_configuration.cpp (+0/-1)
src/server/scene/mediating_display_changer.cpp (+0/-15)
src/server/scene/mediating_display_changer.h (+0/-8)
src/server/symbols.map (+0/-1)
tests/include/mir/test/doubles/mock_input_region.h (+0/-49)
tests/unit-tests/input/CMakeLists.txt (+0/-1)
tests/unit-tests/input/test_default_input_device_hub.cpp (+0/-1)
tests/unit-tests/input/test_display_input_region.cpp (+0/-87)
tests/unit-tests/scene/test_mediating_display_changer.cpp (+0/-164)
To merge this branch: bzr merge lp:~andreas-pokorny/mir/remove-input-region
Reviewer Review Type Date Requested Status
Alan Griffiths Approve
Mir CI Bot continuous-integration Approve
Chris Halse Rogers Approve
Kevin DuBois (community) Approve
Review via email: mp+316713@code.launchpad.net

Commit message

mirserver: remove InputRegion

The functionality has been moved to the input platforms and BasicSeat.

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

FAILED: Continuous integration, rev:4010
https://mir-jenkins.ubuntu.com/job/mir-ci/2955/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/3916/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4002/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/3992/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/3992/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/3992/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/3943/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3943/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/3943/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3943/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3943/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3943/console

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

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

alright by me

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

FAILED: Continuous integration, rev:4014
https://mir-jenkins.ubuntu.com/job/mir-ci/2974/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/3952/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4038
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4028
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4028
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4028
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/3979
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/3979/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3979/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/3979/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3979
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3979/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3979
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3979/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3979
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3979/artifact/output/*zip*/output.zip

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

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

FAILED: Continuous integration, rev:4015
https://mir-jenkins.ubuntu.com/job/mir-ci/3021/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/4033/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4120
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4110
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4110
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4110
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4060
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4060/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4060/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4060
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4060/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4060
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4060/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4060
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4060/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4060
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4060/artifact/output/*zip*/output.zip

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

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

FAILED: Continuous integration, rev:4016
https://mir-jenkins.ubuntu.com/job/mir-ci/3034/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/4053/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4140
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4130
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4130
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4130
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4080/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4080
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4080/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4080
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4080/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4080
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4080/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4080
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4080/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4080
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4080/artifact/output/*zip*/output.zip

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

review: Needs Fixing (continuous-integration)
Revision history for this message
Chris Halse Rogers (raof) wrote :

That's a pleasing sea of red.

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

PASSED: Continuous integration, rev:4017
https://mir-jenkins.ubuntu.com/job/mir-ci/3036/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4058
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4145
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4135
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4135
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4135
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4085
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4085/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4085
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4085/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4085
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4085/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4085
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4085/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4085
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4085/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4085
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4085/artifact/output/*zip*/output.zip

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

review: Approve (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

LGTM

review: Approve
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

It seems the changeover already occurred, but please see bug 1669444 which might be related.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/include/server/mir/default_server_configuration.h'
--- src/include/server/mir/default_server_configuration.h 2017-02-16 05:44:15 +0000
+++ src/include/server/mir/default_server_configuration.h 2017-02-22 08:39:26 +0000
@@ -138,7 +138,6 @@
138class EventFilterChainDispatcher;138class EventFilterChainDispatcher;
139class CursorListener;139class CursorListener;
140class TouchVisualizer;140class TouchVisualizer;
141class InputRegion;
142class CursorImages;141class CursorImages;
143class Seat;142class Seat;
144class KeyMapper;143class KeyMapper;
@@ -324,7 +323,6 @@
324 virtual std::shared_ptr<input::Scene> the_input_scene();323 virtual std::shared_ptr<input::Scene> the_input_scene();
325 virtual std::shared_ptr<input::CursorListener> the_cursor_listener();324 virtual std::shared_ptr<input::CursorListener> the_cursor_listener();
326 virtual std::shared_ptr<input::TouchVisualizer> the_touch_visualizer();325 virtual std::shared_ptr<input::TouchVisualizer> the_touch_visualizer();
327 virtual std::shared_ptr<input::InputRegion> the_input_region();
328 virtual std::shared_ptr<input::Seat> the_seat();326 virtual std::shared_ptr<input::Seat> the_seat();
329 virtual std::shared_ptr<input::KeyMapper> the_key_mapper();327 virtual std::shared_ptr<input::KeyMapper> the_key_mapper();
330328
@@ -388,7 +386,6 @@
388 CachedPtr<input::DefaultInputDeviceHub> default_input_device_hub;386 CachedPtr<input::DefaultInputDeviceHub> default_input_device_hub;
389 CachedPtr<dispatch::MultiplexingDispatchable> input_reading_multiplexer;387 CachedPtr<dispatch::MultiplexingDispatchable> input_reading_multiplexer;
390 CachedPtr<input::InputDispatcher> input_dispatcher;388 CachedPtr<input::InputDispatcher> input_dispatcher;
391 CachedPtr<input::InputRegion> input_region;
392 CachedPtr<shell::InputTargeter> input_targeter;389 CachedPtr<shell::InputTargeter> input_targeter;
393 CachedPtr<input::CursorListener> cursor_listener;390 CachedPtr<input::CursorListener> cursor_listener;
394 CachedPtr<input::TouchVisualizer> touch_visualizer;391 CachedPtr<input::TouchVisualizer> touch_visualizer;
395392
=== removed file 'src/include/server/mir/input/input_region.h'
--- src/include/server/mir/input/input_region.h 2017-01-18 02:29:37 +0000
+++ src/include/server/mir/input/input_region.h 1970-01-01 00:00:00 +0000
@@ -1,65 +0,0 @@
1/*
2 * Copyright © 2013 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
17 */
18
19#ifndef MIR_INPUT_INPUT_REGION_H_
20#define MIR_INPUT_INPUT_REGION_H_
21
22namespace mir
23{
24namespace geometry
25{
26struct Rectangle;
27struct Rectangles;
28struct Point;
29}
30namespace input
31{
32
33/**
34 * Interface to the region of valid input coordinates.
35 */
36class InputRegion
37{
38public:
39 virtual ~InputRegion() = default;
40
41 /** The bounding rectangle of the input region */
42 virtual geometry::Rectangle bounding_rectangle() = 0;
43
44 /**
45 * Confines a point to the input region.
46 *
47 * If the point is within input region it remains unchanged,
48 * otherwise it is replaced by the region point that is closest to
49 * it.
50 *
51 * @param [in,out] point the point to confine
52 */
53 virtual void confine(geometry::Point& point) = 0;
54 virtual void set_input_rectangles(geometry::Rectangles const& rectangles) = 0;
55
56protected:
57 InputRegion() = default;
58 InputRegion(InputRegion const&) = delete;
59 InputRegion& operator=(InputRegion const&) = delete;
60};
61
62}
63}
64
65#endif /* MIR_INPUT_INPUT_REGION_H_ */
660
=== modified file 'src/server/input/CMakeLists.txt'
--- src/server/input/CMakeLists.txt 2017-02-15 14:45:41 +0000
+++ src/server/input/CMakeLists.txt 2017-02-22 08:39:26 +0000
@@ -12,7 +12,6 @@
12 default_event_builder.cpp12 default_event_builder.cpp
13 default_input_device_hub.cpp13 default_input_device_hub.cpp
14 default_input_manager.cpp14 default_input_manager.cpp
15 display_input_region.cpp
16 event_filter_chain_dispatcher.cpp15 event_filter_chain_dispatcher.cpp
17 input_modifier_utils.cpp16 input_modifier_utils.cpp
18 input_probe.cpp17 input_probe.cpp
1918
=== modified file 'src/server/input/basic_seat.h'
--- src/server/input/basic_seat.h 2017-02-22 08:39:25 +0000
+++ src/server/input/basic_seat.h 2017-02-22 08:39:26 +0000
@@ -41,7 +41,6 @@
41{41{
42class TouchVisualizer;42class TouchVisualizer;
43class CursorListener;43class CursorListener;
44class InputRegion;
45class InputDispatcher;44class InputDispatcher;
46class KeyMapper;45class KeyMapper;
47class SeatObserver;46class SeatObserver;
4847
=== modified file 'src/server/input/default_configuration.cpp'
--- src/server/input/default_configuration.cpp 2017-02-22 08:39:25 +0000
+++ src/server/input/default_configuration.cpp 2017-02-22 08:39:26 +0000
@@ -19,7 +19,6 @@
19#include "mir/default_server_configuration.h"19#include "mir/default_server_configuration.h"
2020
21#include "key_repeat_dispatcher.h"21#include "key_repeat_dispatcher.h"
22#include "display_input_region.h"
23#include "event_filter_chain_dispatcher.h"22#include "event_filter_chain_dispatcher.h"
24#include "config_changer.h"23#include "config_changer.h"
25#include "cursor_controller.h"24#include "cursor_controller.h"
@@ -96,15 +95,6 @@
9695
97}96}
9897
99std::shared_ptr<mi::InputRegion> mir::DefaultServerConfiguration::the_input_region()
100{
101 return input_region(
102 []()
103 {
104 return std::make_shared<mi::DisplayInputRegion>();
105 });
106}
107
108std::shared_ptr<mi::CompositeEventFilter>98std::shared_ptr<mi::CompositeEventFilter>
109mir::DefaultServerConfiguration::the_composite_event_filter()99mir::DefaultServerConfiguration::the_composite_event_filter()
110{100{
111101
=== removed file 'src/server/input/display_input_region.cpp'
--- src/server/input/display_input_region.cpp 2017-01-18 02:29:37 +0000
+++ src/server/input/display_input_region.cpp 1970-01-01 00:00:00 +0000
@@ -1,51 +0,0 @@
1/*
2 * Copyright © 2013 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
17 */
18
19#include "display_input_region.h"
20#include "mir/graphics/display_configuration.h"
21
22#include "mir/geometry/rectangle.h"
23#include "mir/geometry/rectangles.h"
24
25namespace mi = mir::input;
26namespace mg = mir::graphics;
27namespace geom = mir::geometry;
28
29void mi::DisplayInputRegion::set_input_rectangles(geometry::Rectangles const& config)
30{
31 std::unique_lock<std::mutex> lock(rectangle_guard);
32 rectangles = config;
33}
34
35geom::Rectangle mi::DisplayInputRegion::bounding_rectangle()
36{
37 //TODO: This region is mainly used for scaling touchscreen coordinates, so the caller
38 // probably wants the full list of rectangles. Additional work is needed
39 // to group a touchscreen with a display. So for now, just return the view area
40 // of the first display, as that matches the most common systems (laptops with touchscreens,
41 // phone/tablets with touchscreens).
42 if (rectangles.size() != 0)
43 return *rectangles.begin();
44 else
45 return geom::Rectangle{};
46}
47
48void mi::DisplayInputRegion::confine(geom::Point& point)
49{
50 rectangles.confine(point);
51}
520
=== removed file 'src/server/input/display_input_region.h'
--- src/server/input/display_input_region.h 2017-01-18 02:29:37 +0000
+++ src/server/input/display_input_region.h 1970-01-01 00:00:00 +0000
@@ -1,51 +0,0 @@
1/*
2 * Copyright © 2013 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
17 */
18
19#ifndef MIR_INPUT_DISPLAY_INPUT_REGION_H_
20#define MIR_INPUT_DISPLAY_INPUT_REGION_H_
21
22#include "mir/input/input_region.h"
23#include "mir/geometry/rectangles.h"
24
25#include <memory>
26#include <mutex>
27
28namespace mir
29{
30namespace input
31{
32
33class DisplayInputRegion : public InputRegion
34{
35public:
36 DisplayInputRegion() = default;
37
38 geometry::Rectangle bounding_rectangle() override;
39 void confine(geometry::Point& point) override;
40 void set_input_rectangles(geometry::Rectangles const& rectangles) override;
41
42private:
43 std::mutex rectangle_guard;
44 geometry::Rectangles rectangles;
45};
46
47}
48}
49
50#endif /* MIR_INPUT_DISPLAY_INPUT_REGION_H_ */
51
520
=== modified file 'src/server/input/seat_input_device_tracker.h'
--- src/server/input/seat_input_device_tracker.h 2017-02-22 08:39:25 +0000
+++ src/server/input/seat_input_device_tracker.h 2017-02-22 08:39:26 +0000
@@ -41,7 +41,6 @@
41namespace input41namespace input
42{42{
43class CursorListener;43class CursorListener;
44class InputRegion;
45class InputDispatcher;44class InputDispatcher;
46class KeyMapper;45class KeyMapper;
47class SeatObserver;46class SeatObserver;
4847
=== modified file 'src/server/scene/default_configuration.cpp'
--- src/server/scene/default_configuration.cpp 2017-02-15 14:45:41 +0000
+++ src/server/scene/default_configuration.cpp 2017-02-22 08:39:26 +0000
@@ -140,7 +140,6 @@
140 the_session_event_handler_register(),140 the_session_event_handler_register(),
141 the_server_action_queue(),141 the_server_action_queue(),
142 the_display_configuration_observer(),142 the_display_configuration_observer(),
143 the_input_region(),
144 the_main_loop());143 the_main_loop());
145 });144 });
146145
147146
=== modified file 'src/server/scene/mediating_display_changer.cpp'
--- src/server/scene/mediating_display_changer.cpp 2017-01-30 05:18:36 +0000
+++ src/server/scene/mediating_display_changer.cpp 2017-02-22 08:39:26 +0000
@@ -38,7 +38,6 @@
38namespace ms = mir::scene;38namespace ms = mir::scene;
39namespace mg = mir::graphics;39namespace mg = mir::graphics;
40namespace mc = mir::compositor;40namespace mc = mir::compositor;
41namespace mi = mir::input;
42namespace mt = mir::time;41namespace mt = mir::time;
4342
44namespace43namespace
@@ -132,7 +131,6 @@
132 std::shared_ptr<SessionEventHandlerRegister> const& session_event_handler_register,131 std::shared_ptr<SessionEventHandlerRegister> const& session_event_handler_register,
133 std::shared_ptr<ServerActionQueue> const& server_action_queue,132 std::shared_ptr<ServerActionQueue> const& server_action_queue,
134 std::shared_ptr<mg::DisplayConfigurationObserver> const& observer,133 std::shared_ptr<mg::DisplayConfigurationObserver> const& observer,
135 std::shared_ptr<mi::InputRegion> const& region,
136 std::shared_ptr<mt::AlarmFactory> const& alarm_factory)134 std::shared_ptr<mt::AlarmFactory> const& alarm_factory)
137 : display{display},135 : display{display},
138 compositor{compositor},136 compositor{compositor},
@@ -143,7 +141,6 @@
143 observer{observer},141 observer{observer},
144 base_configuration_{display->configuration()},142 base_configuration_{display->configuration()},
145 base_configuration_applied{true},143 base_configuration_applied{true},
146 region{region},
147 alarm_factory{alarm_factory}144 alarm_factory{alarm_factory}
148{145{
149 session_event_handler_register->register_focus_change_handler(146 session_event_handler_register->register_focus_change_handler(
@@ -181,7 +178,6 @@
181 });178 });
182179
183 observer->initial_configuration(base_configuration_);180 observer->initial_configuration(base_configuration_);
184 update_input_rectangles(*base_configuration_);
185}181}
186182
187void ms::MediatingDisplayChanger::configure(183void ms::MediatingDisplayChanger::configure(
@@ -461,7 +457,6 @@
461 }457 }
462458
463 observer->configuration_applied(conf);459 observer->configuration_applied(conf);
464 update_input_rectangles(*conf);
465 base_configuration_applied = false;460 base_configuration_applied = false;
466 }461 }
467 catch (std::exception const& e)462 catch (std::exception const& e)
@@ -573,13 +568,3 @@
573 });568 });
574}569}
575570
576void ms::MediatingDisplayChanger::update_input_rectangles(mg::DisplayConfiguration const& config)
577{
578 geometry::Rectangles rectangles;
579 config.for_each_output([&rectangles](mg::DisplayConfigurationOutput const& output) {
580 if (output.used && output.connected && output.power_mode == mir_power_mode_on &&
581 output.current_mode_index < output.modes.size())
582 rectangles.add(geometry::Rectangle(output.top_left, output.modes[output.current_mode_index].size));
583 });
584 region->set_input_rectangles(rectangles);
585}
586571
=== modified file 'src/server/scene/mediating_display_changer.h'
--- src/server/scene/mediating_display_changer.h 2017-01-18 02:29:37 +0000
+++ src/server/scene/mediating_display_changer.h 2017-02-22 08:39:26 +0000
@@ -22,7 +22,6 @@
22#include "mir/frontend/display_changer.h"22#include "mir/frontend/display_changer.h"
23#include "mir/display_changer.h"23#include "mir/display_changer.h"
24#include "mir/shell/display_configuration_controller.h"24#include "mir/shell/display_configuration_controller.h"
25#include "mir/input/input_region.h"
2625
27#include <mutex>26#include <mutex>
28#include <map>27#include <map>
@@ -45,10 +44,6 @@
45 class DisplayConfigurationObserver;44 class DisplayConfigurationObserver;
46}45}
47namespace compositor { class Compositor; }46namespace compositor { class Compositor; }
48namespace input
49{
50class InputRegion;
51}
52namespace scene47namespace scene
53{48{
54class SessionEventHandlerRegister;49class SessionEventHandlerRegister;
@@ -68,7 +63,6 @@
68 std::shared_ptr<SessionEventHandlerRegister> const& session_event_handler_register,63 std::shared_ptr<SessionEventHandlerRegister> const& session_event_handler_register,
69 std::shared_ptr<ServerActionQueue> const& server_action_queue,64 std::shared_ptr<ServerActionQueue> const& server_action_queue,
70 std::shared_ptr<graphics::DisplayConfigurationObserver> const& observer,65 std::shared_ptr<graphics::DisplayConfigurationObserver> const& observer,
71 std::shared_ptr<input::InputRegion> const& region,
72 std::shared_ptr<time::AlarmFactory> const& alarm_factory);66 std::shared_ptr<time::AlarmFactory> const& alarm_factory);
7367
74 /* From mir::frontend::DisplayChanger */68 /* From mir::frontend::DisplayChanger */
@@ -106,7 +100,6 @@
106 void apply_base_config();100 void apply_base_config();
107 void send_config_to_all_sessions(101 void send_config_to_all_sessions(
108 std::shared_ptr<graphics::DisplayConfiguration> const& conf);102 std::shared_ptr<graphics::DisplayConfiguration> const& conf);
109 void update_input_rectangles(graphics::DisplayConfiguration const& conf);
110103
111 std::shared_ptr<graphics::Display> const display;104 std::shared_ptr<graphics::Display> const display;
112 std::shared_ptr<compositor::Compositor> const compositor;105 std::shared_ptr<compositor::Compositor> const compositor;
@@ -122,7 +115,6 @@
122 std::weak_ptr<frontend::Session> focused_session;115 std::weak_ptr<frontend::Session> focused_session;
123 std::shared_ptr<graphics::DisplayConfiguration> base_configuration_;116 std::shared_ptr<graphics::DisplayConfiguration> base_configuration_;
124 bool base_configuration_applied;117 bool base_configuration_applied;
125 std::shared_ptr<input::InputRegion> const region;
126 std::shared_ptr<time::AlarmFactory> const alarm_factory;118 std::shared_ptr<time::AlarmFactory> const alarm_factory;
127 std::unique_ptr<time::Alarm> preview_configuration_timeout;119 std::unique_ptr<time::Alarm> preview_configuration_timeout;
128 std::weak_ptr<frontend::Session> currently_previewing_session;120 std::weak_ptr<frontend::Session> currently_previewing_session;
129121
=== modified file 'src/server/symbols.map'
--- src/server/symbols.map 2017-02-16 05:44:15 +0000
+++ src/server/symbols.map 2017-02-22 08:39:26 +0000
@@ -748,7 +748,6 @@
748 mir::DefaultServerConfiguration::the_new_input_dispatcher*;748 mir::DefaultServerConfiguration::the_new_input_dispatcher*;
749 mir::DefaultServerConfiguration::the_input_manager*;749 mir::DefaultServerConfiguration::the_input_manager*;
750 mir::DefaultServerConfiguration::the_input_reading_multiplexer*;750 mir::DefaultServerConfiguration::the_input_reading_multiplexer*;
751 mir::DefaultServerConfiguration::the_input_region*;
752 mir::DefaultServerConfiguration::the_input_registrar*;751 mir::DefaultServerConfiguration::the_input_registrar*;
753 mir::DefaultServerConfiguration::the_input_report*;752 mir::DefaultServerConfiguration::the_input_report*;
754 mir::DefaultServerConfiguration::the_input_scene*;753 mir::DefaultServerConfiguration::the_input_scene*;
755754
=== removed file 'tests/include/mir/test/doubles/mock_input_region.h'
--- tests/include/mir/test/doubles/mock_input_region.h 2017-01-18 02:29:37 +0000
+++ tests/include/mir/test/doubles/mock_input_region.h 1970-01-01 00:00:00 +0000
@@ -1,49 +0,0 @@
1/*
2 * Copyright © 2013 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
17 */
18
19#ifndef MIR_TEST_DOUBLES_MOCK_INPUT_REGION_H_
20#define MIR_TEST_DOUBLES_MOCK_INPUT_REGION_H_
21
22#include "mir/input/input_region.h"
23#include "mir/geometry/point.h"
24#include "mir/geometry/rectangle.h"
25
26#include <gmock/gmock.h>
27
28namespace mir
29{
30namespace test
31{
32namespace doubles
33{
34
35class MockInputRegion : public input::InputRegion
36{
37public:
38 MOCK_METHOD0(bounding_rectangle, geometry::Rectangle());
39 MOCK_METHOD1(set_input_rectangles, void(geometry::Rectangles const&));
40 MOCK_METHOD1(confine, void(geometry::Point&));
41};
42
43}
44}
45}
46
47#endif /* MIR_TEST_DOUBLES_MOCK_INPUT_REGION_H_ */
48
49
500
=== modified file 'tests/unit-tests/input/CMakeLists.txt'
--- tests/unit-tests/input/CMakeLists.txt 2017-02-15 14:45:41 +0000
+++ tests/unit-tests/input/CMakeLists.txt 2017-02-22 08:39:26 +0000
@@ -2,7 +2,6 @@
22
3list(APPEND UNIT_TEST_SOURCES3list(APPEND UNIT_TEST_SOURCES
4 ${CMAKE_CURRENT_SOURCE_DIR}/test_event_filter_chain_dispatcher.cpp4 ${CMAKE_CURRENT_SOURCE_DIR}/test_event_filter_chain_dispatcher.cpp
5 ${CMAKE_CURRENT_SOURCE_DIR}/test_display_input_region.cpp
6 ${CMAKE_CURRENT_SOURCE_DIR}/test_cursor_controller.cpp5 ${CMAKE_CURRENT_SOURCE_DIR}/test_cursor_controller.cpp
7 ${CMAKE_CURRENT_SOURCE_DIR}/test_xcursor_loader.cpp6 ${CMAKE_CURRENT_SOURCE_DIR}/test_xcursor_loader.cpp
8 ${CMAKE_CURRENT_SOURCE_DIR}/test_touchspot_controller.cpp7 ${CMAKE_CURRENT_SOURCE_DIR}/test_touchspot_controller.cpp
98
=== modified file 'tests/unit-tests/input/test_default_input_device_hub.cpp'
--- tests/unit-tests/input/test_default_input_device_hub.cpp 2017-02-15 07:38:33 +0000
+++ tests/unit-tests/input/test_default_input_device_hub.cpp 2017-02-22 08:39:26 +0000
@@ -21,7 +21,6 @@
21#include "mir/test/doubles/mock_input_device.h"21#include "mir/test/doubles/mock_input_device.h"
22#include "mir/test/doubles/mock_input_device_observer.h"22#include "mir/test/doubles/mock_input_device_observer.h"
23#include "mir/test/doubles/mock_input_dispatcher.h"23#include "mir/test/doubles/mock_input_dispatcher.h"
24#include "mir/test/doubles/mock_input_region.h"
25#include "mir/test/doubles/mock_input_seat.h"24#include "mir/test/doubles/mock_input_seat.h"
26#include "mir/test/doubles/mock_event_sink.h"25#include "mir/test/doubles/mock_event_sink.h"
27#include "mir/test/doubles/mock_key_mapper.h"26#include "mir/test/doubles/mock_key_mapper.h"
2827
=== removed file 'tests/unit-tests/input/test_display_input_region.cpp'
--- tests/unit-tests/input/test_display_input_region.cpp 2017-01-18 02:29:37 +0000
+++ tests/unit-tests/input/test_display_input_region.cpp 1970-01-01 00:00:00 +0000
@@ -1,87 +0,0 @@
1/*
2 * Copyright © 2013 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 3 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by: Alexandros Frantzis <alexandros.frantzis@canonical.com>
17 */
18
19#include "src/server/input/display_input_region.h"
20
21#include <tuple>
22
23#include <gtest/gtest.h>
24
25namespace mi = mir::input;
26namespace geom = mir::geometry;
27
28namespace
29{
30geom::Rectangles const rects{
31 geom::Rectangle{{0,0}, {800,600}},
32 geom::Rectangle{{0,600}, {100,100}},
33 geom::Rectangle{{800,0}, {100,100}}
34};
35}
36
37TEST(DisplayInputRegionTest, returns_correct_bounding_rectangle)
38{
39 geom::Rectangle const expected_bounding_rect{geom::Point{0,0}, geom::Size{800,600}};
40
41 mi::DisplayInputRegion input_region;
42 input_region.set_input_rectangles(rects);
43
44 auto rect = input_region.bounding_rectangle();
45 EXPECT_EQ(expected_bounding_rect, rect);
46}
47
48TEST(DisplayInputRegionTest, confines_point_to_closest_valid_position)
49{
50 mi::DisplayInputRegion input_region;
51 input_region.set_input_rectangles(rects);
52
53 std::vector<std::tuple<geom::Point,geom::Point>> point_tuples{
54 std::make_tuple(geom::Point{0,0}, geom::Point{0,0}),
55 std::make_tuple(geom::Point{900,50}, geom::Point{899,50}),
56 std::make_tuple(geom::Point{850,100}, geom::Point{850,99}),
57 std::make_tuple(geom::Point{801,100}, geom::Point{801,99}),
58 std::make_tuple(geom::Point{800,101}, geom::Point{799,101}),
59 std::make_tuple(geom::Point{800,600}, geom::Point{799,599}),
60 std::make_tuple(geom::Point{-1,700}, geom::Point{0,699}),
61 std::make_tuple(geom::Point{-1,-1}, geom::Point{0,0}),
62 std::make_tuple(geom::Point{-1,50}, geom::Point{0,50}),
63 std::make_tuple(geom::Point{799,-1}, geom::Point{799,0}),
64 std::make_tuple(geom::Point{800,-1}, geom::Point{800,0})
65 };
66
67 for (auto const& t : point_tuples)
68 {
69 geom::Point confined_point{std::get<0>(t)};
70 geom::Point const expected_point{std::get<1>(t)};
71 input_region.confine(confined_point);
72 EXPECT_EQ(expected_point, confined_point);
73 }
74
75}
76
77TEST(DisplayInputRegionTest, returns_empty_bounding_rectangle_when_there_are_no_outputs)
78{
79 geom::Rectangles const empty_rects{};
80 geom::Rectangle const empty_rect{};
81
82 mi::DisplayInputRegion input_region;
83 input_region.set_input_rectangles(empty_rects);
84
85 auto const bounding_rect = input_region.bounding_rectangle();
86 EXPECT_EQ(empty_rect, bounding_rect);
87}
880
=== modified file 'tests/unit-tests/scene/test_mediating_display_changer.cpp'
--- tests/unit-tests/scene/test_mediating_display_changer.cpp 2017-01-19 09:38:52 +0000
+++ tests/unit-tests/scene/test_mediating_display_changer.cpp 2017-02-22 08:39:26 +0000
@@ -29,7 +29,6 @@
29#include "mir/test/doubles/null_display_configuration.h"29#include "mir/test/doubles/null_display_configuration.h"
30#include "mir/test/doubles/stub_display_configuration.h"30#include "mir/test/doubles/stub_display_configuration.h"
31#include "mir/test/doubles/mock_scene_session.h"31#include "mir/test/doubles/mock_scene_session.h"
32#include "mir/test/doubles/mock_input_region.h"
33#include "mir/test/doubles/stub_session.h"32#include "mir/test/doubles/stub_session.h"
34#include "mir/test/doubles/stub_session_container.h"33#include "mir/test/doubles/stub_session_container.h"
35#include "mir/test/fake_shared.h"34#include "mir/test/fake_shared.h"
@@ -54,33 +53,6 @@
54namespace53namespace
55{54{
5655
57auto display_output(
58 mg::DisplayConfigurationOutputId id, geom::Point pos, geom::Size size, bool connected, bool used, MirPowerMode mode)
59 -> mg::DisplayConfigurationOutput
60{
61 return mg::DisplayConfigurationOutput{id,
62 mg::DisplayConfigurationCardId{0},
63 mg::DisplayConfigurationOutputType::lvds,
64 std::vector<MirPixelFormat>{mir_pixel_format_abgr_8888},
65 {mg::DisplayConfigurationMode{size, 60}},
66 0,
67 geom::Size{40, 40},
68 connected,
69 used,
70 pos,
71 0,
72 mir_pixel_format_abgr_8888,
73 mode,
74 mir_orientation_normal,
75 1.0f,
76 mir_form_factor_phone,
77 mir_subpixel_arrangement_unknown,
78 {},
79 mir_output_gamma_unsupported,
80 {}
81 };
82}
83
84struct TestDisplayConfiguration : mtd::NullDisplayConfiguration56struct TestDisplayConfiguration : mtd::NullDisplayConfiguration
85{57{
86 std::vector<mg::DisplayConfigurationOutput> const outputs;58 std::vector<mg::DisplayConfigurationOutput> const outputs;
@@ -176,7 +148,6 @@
176 mt::fake_shared(session_event_sink),148 mt::fake_shared(session_event_sink),
177 mt::fake_shared(server_action_queue),149 mt::fake_shared(server_action_queue),
178 mt::fake_shared(display_configuration_report),150 mt::fake_shared(display_configuration_report),
179 mt::fake_shared(mock_input_region),
180 mt::fake_shared(alarm_factory));151 mt::fake_shared(alarm_factory));
181 }152 }
182153
@@ -188,7 +159,6 @@
188 mtd::StubDisplayConfig base_config;159 mtd::StubDisplayConfig base_config;
189 StubServerActionQueue server_action_queue;160 StubServerActionQueue server_action_queue;
190 StubDisplayConfigurationObserver display_configuration_report;161 StubDisplayConfigurationObserver display_configuration_report;
191 testing::NiceMock<mtd::MockInputRegion> mock_input_region;
192 mtd::FakeAlarmFactory alarm_factory;162 mtd::FakeAlarmFactory alarm_factory;
193 std::shared_ptr<ms::MediatingDisplayChanger> changer;163 std::shared_ptr<ms::MediatingDisplayChanger> changer;
194};164};
@@ -726,7 +696,6 @@
726 mt::fake_shared(session_event_sink),696 mt::fake_shared(session_event_sink),
727 mt::fake_shared(mock_server_action_queue),697 mt::fake_shared(mock_server_action_queue),
728 mt::fake_shared(display_configuration_report),698 mt::fake_shared(display_configuration_report),
729 mt::fake_shared(mock_input_region),
730 mt::fake_shared(alarm_factory));699 mt::fake_shared(alarm_factory));
731700
732 void const* owner{nullptr};701 void const* owner{nullptr};
@@ -781,7 +750,6 @@
781 mt::fake_shared(session_event_sink),750 mt::fake_shared(session_event_sink),
782 mt::fake_shared(mock_server_action_queue),751 mt::fake_shared(mock_server_action_queue),
783 mt::fake_shared(display_configuration_report),752 mt::fake_shared(display_configuration_report),
784 mt::fake_shared(mock_input_region),
785 mt::fake_shared(alarm_factory));753 mt::fake_shared(alarm_factory));
786754
787 EXPECT_CALL(mock_server_action_queue, enqueue(_, _));755 EXPECT_CALL(mock_server_action_queue, enqueue(_, _));
@@ -911,7 +879,6 @@
911 mt::fake_shared(session_event_sink),879 mt::fake_shared(session_event_sink),
912 mt::fake_shared(server_action_queue),880 mt::fake_shared(server_action_queue),
913 mt::fake_shared(display_configuration_observer),881 mt::fake_shared(display_configuration_observer),
914 mt::fake_shared(mock_input_region),
915 mt::fake_shared(alarm_factory));882 mt::fake_shared(alarm_factory));
916883
917 mtd::NullDisplayConfiguration conf;884 mtd::NullDisplayConfiguration conf;
@@ -921,37 +888,6 @@
921 changer->set_base_configuration(mt::fake_shared(conf));888 changer->set_base_configuration(mt::fake_shared(conf));
922}889}
923890
924TEST_F(MediatingDisplayChangerTest, input_region_receives_display_configuration_on_start)
925{
926 using namespace testing;
927 EXPECT_CALL(mock_input_region, set_input_rectangles(_));
928
929 ms::MediatingDisplayChanger display_changer(
930 mt::fake_shared(mock_display),
931 mt::fake_shared(mock_compositor),
932 mt::fake_shared(mock_conf_policy),
933 mt::fake_shared(stub_session_container),
934 mt::fake_shared(session_event_sink),
935 mt::fake_shared(server_action_queue),
936 mt::fake_shared(display_configuration_report),
937 mt::fake_shared(mock_input_region),
938 mt::fake_shared(alarm_factory));
939}
940
941TEST_F(MediatingDisplayChangerTest, notifies_input_region_on_new_configuration)
942{
943 using namespace testing;
944 mtd::NullDisplayConfiguration conf;
945 mir::geometry::Rectangles expected_rectangles;
946 EXPECT_CALL(mock_input_region, set_input_rectangles(expected_rectangles));
947
948 auto session = std::make_shared<mtd::StubSession>();
949
950 session_event_sink.handle_focus_change(session);
951 changer->configure(session,
952 mt::fake_shared(conf));
953}
954
955TEST_F(MediatingDisplayChangerTest, notifies_session_on_preview_base_configuration)891TEST_F(MediatingDisplayChangerTest, notifies_session_on_preview_base_configuration)
956{892{
957 using namespace testing;893 using namespace testing;
@@ -1122,103 +1058,3 @@
1122 EXPECT_THAT(*received_configuration, mt::DisplayConfigMatches(std::cref(*new_config)));1058 EXPECT_THAT(*received_configuration, mt::DisplayConfigMatches(std::cref(*new_config)));
1123}1059}
11241060
1125TEST_F(MediatingDisplayChangerTest, input_region_skipps_not_connected_displays)
1126{
1127 using namespace testing;
1128
1129 auto const connected = true;
1130 auto const disconnected = false;
1131 auto const used = true;
1132 mir::geometry::Rectangles expected_rectangles;
1133 expected_rectangles.add(geom::Rectangle{geom::Point{0,0}, geom::Size{100,100}});
1134
1135 TestDisplayConfiguration conf{{display_output(mg::DisplayConfigurationOutputId{0},
1136 geom::Point{0, 0},
1137 geom::Size{100, 100},
1138 connected,
1139 used,
1140 mir_power_mode_on),
1141 display_output(mg::DisplayConfigurationOutputId{1},
1142 geom::Point{100, 0},
1143 geom::Size{100, 100},
1144 disconnected,
1145 used,
1146 mir_power_mode_on)}};
1147
1148 EXPECT_CALL(mock_input_region, set_input_rectangles(expected_rectangles));
1149
1150 auto session = std::make_shared<mtd::StubSession>();
1151
1152 session_event_sink.handle_focus_change(session);
1153 changer->configure(session,
1154 mt::fake_shared(conf));
1155}
1156
1157TEST_F(MediatingDisplayChangerTest, input_region_accumulates_powered_and_connected_displays)
1158{
1159 using namespace testing;
1160
1161 auto const connected = true;
1162 auto const first_monitor = geom::Rectangle{geom::Point{0, 0}, geom::Size{ 40, 40 }};
1163 auto const second_monitor = geom::Rectangle{geom::Point{40, 0}, geom::Size{ 10, 10}};
1164 auto const used = true;
1165 mir::geometry::Rectangles expected_rectangles;
1166 expected_rectangles.add(first_monitor);
1167 expected_rectangles.add(second_monitor);
1168
1169 TestDisplayConfiguration conf{{display_output(mg::DisplayConfigurationOutputId{0},
1170 first_monitor.top_left,
1171 first_monitor.size,
1172 connected,
1173 used,
1174 mir_power_mode_on),
1175 display_output(mg::DisplayConfigurationOutputId{1},
1176 second_monitor.top_left,
1177 second_monitor.size,
1178 connected,
1179 used,
1180 mir_power_mode_on)}};
1181
1182 EXPECT_CALL(mock_input_region, set_input_rectangles(expected_rectangles));
1183
1184 auto session = std::make_shared<mtd::StubSession>();
1185
1186 session_event_sink.handle_focus_change(session);
1187 changer->configure(session,
1188 mt::fake_shared(conf));
1189}
1190
1191
1192TEST_F(MediatingDisplayChangerTest, input_region_accumulates_powered_connected_skips_unused_displays)
1193{
1194 using namespace testing;
1195
1196 auto const connected = true;
1197 auto const first_monitor = geom::Rectangle{geom::Point{0, 0}, geom::Size{ 40, 40 }};
1198 auto const second_monitor = geom::Rectangle{geom::Point{40, 0}, geom::Size{ 10, 10}};
1199 auto const not_used = false;
1200 auto const used = true;
1201 mir::geometry::Rectangles expected_rectangles;
1202 expected_rectangles.add(second_monitor);
1203
1204 TestDisplayConfiguration conf{{display_output(mg::DisplayConfigurationOutputId{0},
1205 first_monitor.top_left,
1206 first_monitor.size,
1207 connected,
1208 not_used,
1209 mir_power_mode_on),
1210 display_output(mg::DisplayConfigurationOutputId{1},
1211 second_monitor.top_left,
1212 second_monitor.size,
1213 connected,
1214 used,
1215 mir_power_mode_on)}};
1216
1217 EXPECT_CALL(mock_input_region, set_input_rectangles(expected_rectangles));
1218
1219 auto session = std::make_shared<mtd::StubSession>();
1220
1221 session_event_sink.handle_focus_change(session);
1222 changer->configure(session,
1223 mt::fake_shared(conf));
1224}

Subscribers

People subscribed via source and target branches