Merge lp:~alan-griffiths/mir/even-NullWindowManager-configures-surface into lp:mir
- even-NullWindowManager-configures-surface
- Merge into development-branch
Status: | Rejected |
---|---|
Rejected by: | Alan Griffiths |
Proposed branch: | lp:~alan-griffiths/mir/even-NullWindowManager-configures-surface |
Merge into: | lp:mir |
Diff against target: |
264 lines (+69/-68) 5 files modified
include/server/mir/shell/skeleton_window_manager.h (+4/-4) src/server/shell/CMakeLists.txt (+3/-3) src/server/shell/abstract_shell.cpp (+1/-1) src/server/shell/skeleton_window_manager.cpp (+39/-38) src/server/symbols.map (+22/-22) |
To merge this branch: | bzr merge lp:~alan-griffiths/mir/even-NullWindowManager-configures-surface |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Alexandros Frantzis (community) | Needs Information | ||
Daniel van Vugt | Needs Fixing | ||
PS Jenkins bot (community) | continuous-integration | Approve | |
Robert Carr (community) | Approve | ||
Review via email:
|
Commit message
shell: add surface-
Description of the change
shell: add surface-
back in -c2391 AbstractShell stopped configuring the surface to give the window manager more control. But that silently changed NullWindowManager from allowing everything to preventing everything. This reverts that unintended effect.
Yes, as downstreams can NullWindowManager there ought to be some tests about. I've added it to my list but wanted this fix to have a chance to land early.

PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:2424
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://

Daniel van Vugt (vanvugt) wrote : | # |
It's not the first time the difference between Null, Stub and Fake has become murky.
Although I suspect if this class is being used in libmirserver in production then a name other than "Null..." is called for.

Daniel van Vugt (vanvugt) wrote : | # |
In fact if "NullSomething" is in production use, the base class "Something" should become the null implementation. Instead of a pure virtual interface.

Alan Griffiths (alan-griffiths) wrote : | # |
Hopefully a name with raising fewer questions.

PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:2426
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://

Daniel van Vugt (vanvugt) : | # |

Daniel van Vugt (vanvugt) wrote : | # |
It's slightly better, but I think removing the words {Skelton,Null} (and avoiding the pure virtual base class) would be much better.

PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
- 2427. By Alan Griffiths
-
merge lp:mir

PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:2427
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://

Daniel van Vugt (vanvugt) wrote : | # |
Come to think of it, establishing new precedent is important. Because people often refer to precedent and consistency in their reasoning. Even as a reason to reject more simplistic and maintainable designs. So we need to break the mold ASAP.
In cases like this where a class used in production is kind of like Null, kind of like Stub, and very much useful in its bare form, I think this is where those prefixes (including Skeleton) should not be used. So rename SkeletonWindowM
This not only results in less typing, but fewer classes and less maintenance. As "Null" and "Stub" forms need never exist (they do implicitly). You can still add a Mock form later if required.

Alan Griffiths (alan-griffiths) wrote : | # |
> Come to think of it, establishing new precedent is important. Because people
> often refer to precedent and consistency in their reasoning. Even as a reason
> to reject more simplistic and maintainable designs.
I agree that precedents are important. However, "new precedents" should be avoided when they break consistency and introduce simplistic designs.
> So we need to break the
> mold ASAP.
I do not see any need (and certainly not an urgent one) to break from the well established industry practice of having pure virtual interfaces. (This has been widely followed for at least 20 years. See, for example, Barton & Nackman from 1994.)
> In cases like this where a class used in production is kind of like Null, kind
> of like Stub, and very much useful in its bare form, I think this is where
> those prefixes (including Skeleton) should not be used. So rename
> SkeletonWindowM
> one.
I can remember when I was naive enough to "know better" and entertained thought like this, but experience has taught me that what appear at first to be exceptions are often not as the system evolves over time.
> This not only results in less typing, but fewer classes and less maintenance.
> As "Null" and "Stub" forms need never exist (they do implicitly). You can
> still add a Mock form later if required.
Much more important than reducing typing is reducing reading. Avoiding the need to go look at the implementation of what looks like an interface to discover whether it actually has an implementation is going to save far more time over the life of a project than saving eight keystrokes.
Introducing a precedent like the one you propose will add that cost to every interface in the system - as the reader will never be certain which classes are exceptions to the general rule.

Alexandros Frantzis (afrantzis) wrote : | # |
In addition to being consistent with our existing practices, implementing a pure abstract/interface is more straightforward for users since they can be sure it comes without any hidden baggage.
I do have some concerns about having a Null/SkeletonWi

Alan Griffiths (alan-griffiths) wrote : | # |
> I do have some concerns about having a Null/SkeletonWi
> place (at least as a public production interface), though. Allowing users to
> inherit from such a class, creates a coupling with the implementation, which I
> am not convinced is worth it for what this class has to offer (at the moment
> at least). Why, as things stand, do we want to offer SkeletonWindowM
> just offering the WindowManager interface?
As the window manager has to implement some minimal (as opposed to null) behavior I think we should provide this (as opposed to documenting it).
The use comes in two places:
1. the default window management logic is inconvenient for a number of our acceptance tests (e.g. they don't expect surfaces to be resized or placed). These use SkeletonWindowM
2. Unity8 also finds the default window management logic is inconvenient and, as it currently uses different (older) customization points[*]. NullWindowManager provides a simple way to disable the default.
[*] It is very plausible that, after 0.13, Unity8 will be able to migrate to using the WindowManager interface for customizing window management (and we will then remove the interfaces it currently employs).

Alexandros Frantzis (afrantzis) wrote : | # |
> As the window manager has to implement some minimal (as opposed to null) behavior I think we
> should provide this (as opposed to documenting it).
>
> The use comes in two places:
>
> 1. the default window management logic is inconvenient for a number of our acceptance tests
> (e.g. they don't expect surfaces to be resized or placed). These use SkeletonWindowM
> to disable the default.
>
> 2. Unity8 also finds the default window management logic is inconvenient and, as it currently
> uses different (older) customization points[*]. NullWindowManager provides a simple way to
> disable the default.
I am OK providing an (almost) null implementation for the use cases you mention. I would prefer it if it was not possible to inherit from this class, though.
To use the SkeletonWindowM
How about making SkeletonWindowM

Alan Griffiths (alan-griffiths) wrote : | # |
> I am OK providing an (almost) null implementation for the use cases you
> mention. I would prefer it if it was not possible to inherit from this class,
> though.
Why? It is entirely possible for a responsible user to specialize the class successfully.
> To use the SkeletonWindowM
> methods that have a non-null implementation, the user needs to know what that
> class method do and do not do, which may change between releases, and I think
> this is a bigger burden for the user than just having to know that, e.g.,
> set_surface_
I don't think that is true. If overriding from a concrete class one should (with rare exceptions) call the overridden function from the override. For the user to assume that it is null omitting the call is a mistake, but not one we should be protecting them from.
> How about making SkeletonWindowM
> "shared_
> internal)?
Personally, I'd only ever declare a class or method final if overriding were automatically an error (or, somehow, violates a design contract). But I could live with it.

Alexandros Frantzis (afrantzis) wrote : | # |
> Why? It is entirely possible for a responsible user to specialize the class successfully
It is entirely possible, and more straightforward (IMO, read below), for a responsible user to directly use the WindowManager interface directly, too :)
> I don't think that is true. If overriding from a concrete class one should (with rare exceptions)
> call the overridden function from the override. For the user to assume that it is null omitting the
> call is a mistake, but not one we should be protecting them from.
I am more concerned about the order of the call to the overriden function in the new code, rather than whether the function is called or not. In order to write correct code the user needs to know what the overriden function does (e.g. in the set_surface_
In addition, we are making the implementation details of SkeletonWindowM
All of the above are general issues with inheriting implementation, and present a trade-off that sometimes is worth it. I am leaning towards "not worth it" in this particular case.
Needs discussion

Alan Griffiths (alan-griffiths) wrote : | # |
I have to correct my earlier answer:
Although I had some tests using [Null|Skeleton]
OTOH unity-system-
The use in Unity8 is as described.
So, given the discussion this has provoked here I'm probably best just moving the code to the downstream projects.

Daniel van Vugt (vanvugt) wrote : | # |
Equally, my 20+ years of programming experience tells me to do the opposite. :) I can suggest, but not force change. Mir is a democracy.
Unmerged revisions
- 2427. By Alan Griffiths
-
merge lp:mir
- 2426. By Alan Griffiths
-
merge lp:mir
- 2425. By Alan Griffiths
-
NullWindowManager => SkeletonWindowM
anager - 2424. By Alan Griffiths
-
NullWindowManager should configure surface
Preview Diff
1 | === renamed file 'include/server/mir/shell/null_window_manager.h' => 'include/server/mir/shell/skeleton_window_manager.h' | |||
2 | --- include/server/mir/shell/null_window_manager.h 2015-03-25 02:48:40 +0000 | |||
3 | +++ include/server/mir/shell/skeleton_window_manager.h 2015-03-27 12:00:42 +0000 | |||
4 | @@ -16,8 +16,8 @@ | |||
5 | 16 | * Authored By: Alan Griffiths <alan@octopull.co.uk> | 16 | * Authored By: Alan Griffiths <alan@octopull.co.uk> |
6 | 17 | */ | 17 | */ |
7 | 18 | 18 | ||
10 | 19 | #ifndef MIR_SHELL_NULL_WINDOW_MANAGER_H_ | 19 | #ifndef MIR_SHELL_SKELETON_WINDOW_MANAGER_H_ |
11 | 20 | #define MIR_SHELL_NULL_WINDOW_MANAGER_H_ | 20 | #define MIR_SHELL_SKELETON_WINDOW_MANAGER_H_ |
12 | 21 | 21 | ||
13 | 22 | #include "mir/shell/window_manager.h" | 22 | #include "mir/shell/window_manager.h" |
14 | 23 | 23 | ||
15 | @@ -25,7 +25,7 @@ | |||
16 | 25 | { | 25 | { |
17 | 26 | namespace shell | 26 | namespace shell |
18 | 27 | { | 27 | { |
20 | 28 | class NullWindowManager : public WindowManager | 28 | class SkeletonWindowManager : public WindowManager |
21 | 29 | { | 29 | { |
22 | 30 | public: | 30 | public: |
23 | 31 | void add_session(std::shared_ptr<scene::Session> const& session) override; | 31 | void add_session(std::shared_ptr<scene::Session> const& session) override; |
24 | @@ -60,4 +60,4 @@ | |||
25 | 60 | } | 60 | } |
26 | 61 | } | 61 | } |
27 | 62 | 62 | ||
29 | 63 | #endif /* MIR_SHELL_NULL_WINDOW_MANAGER_H_ */ | 63 | #endif /* MIR_SHELL_SKELETON_WINDOW_MANAGER_H_ */ |
30 | 64 | 64 | ||
31 | === modified file 'src/server/shell/CMakeLists.txt' | |||
32 | --- src/server/shell/CMakeLists.txt 2015-03-25 02:48:40 +0000 | |||
33 | +++ src/server/shell/CMakeLists.txt 2015-03-27 12:00:42 +0000 | |||
34 | @@ -2,13 +2,13 @@ | |||
35 | 2 | SHELL_SOURCES | 2 | SHELL_SOURCES |
36 | 3 | 3 | ||
37 | 4 | abstract_shell.cpp | 4 | abstract_shell.cpp |
38 | 5 | default_configuration.cpp | ||
39 | 5 | default_placement_strategy.cpp | 6 | default_placement_strategy.cpp |
40 | 7 | default_window_manager.cpp | ||
41 | 6 | frontend_shell.cpp | 8 | frontend_shell.cpp |
42 | 7 | graphics_display_layout.cpp | 9 | graphics_display_layout.cpp |
43 | 8 | default_configuration.cpp | ||
44 | 9 | default_window_manager.cpp | ||
45 | 10 | null_window_manager.cpp | ||
46 | 11 | shell_wrapper.cpp | 10 | shell_wrapper.cpp |
47 | 11 | skeleton_window_manager.cpp | ||
48 | 12 | ) | 12 | ) |
49 | 13 | 13 | ||
50 | 14 | add_library( | 14 | add_library( |
51 | 15 | 15 | ||
52 | === modified file 'src/server/shell/abstract_shell.cpp' | |||
53 | --- src/server/shell/abstract_shell.cpp 2015-03-25 02:48:40 +0000 | |||
54 | +++ src/server/shell/abstract_shell.cpp 2015-03-27 12:00:42 +0000 | |||
55 | @@ -18,7 +18,7 @@ | |||
56 | 18 | 18 | ||
57 | 19 | #include "mir/shell/abstract_shell.h" | 19 | #include "mir/shell/abstract_shell.h" |
58 | 20 | #include "mir/shell/input_targeter.h" | 20 | #include "mir/shell/input_targeter.h" |
60 | 21 | #include "mir/shell/null_window_manager.h" | 21 | #include "mir/shell/window_manager.h" |
61 | 22 | #include "mir/scene/prompt_session.h" | 22 | #include "mir/scene/prompt_session.h" |
62 | 23 | #include "mir/scene/prompt_session_manager.h" | 23 | #include "mir/scene/prompt_session_manager.h" |
63 | 24 | #include "mir/scene/session_coordinator.h" | 24 | #include "mir/scene/session_coordinator.h" |
64 | 25 | 25 | ||
65 | === renamed file 'src/server/shell/null_window_manager.cpp' => 'src/server/shell/skeleton_window_manager.cpp' | |||
66 | --- src/server/shell/null_window_manager.cpp 2015-03-25 02:48:40 +0000 | |||
67 | +++ src/server/shell/skeleton_window_manager.cpp 2015-03-27 12:00:42 +0000 | |||
68 | @@ -16,22 +16,23 @@ | |||
69 | 16 | * Authored By: Alan Griffiths <alan@octopull.co.uk> | 16 | * Authored By: Alan Griffiths <alan@octopull.co.uk> |
70 | 17 | */ | 17 | */ |
71 | 18 | 18 | ||
73 | 19 | #include "mir/shell/null_window_manager.h" | 19 | #include "mir/shell/skeleton_window_manager.h" |
74 | 20 | #include "mir/scene/surface.h" | ||
75 | 20 | 21 | ||
76 | 21 | namespace mf = mir::frontend; | 22 | namespace mf = mir::frontend; |
77 | 22 | namespace ms = mir::scene; | 23 | namespace ms = mir::scene; |
78 | 23 | namespace msh = mir::shell; | 24 | namespace msh = mir::shell; |
79 | 24 | 25 | ||
80 | 25 | 26 | ||
90 | 26 | void msh::NullWindowManager::add_session(std::shared_ptr<scene::Session> const& /*session*/) | 27 | void msh::SkeletonWindowManager::add_session(std::shared_ptr<scene::Session> const& /*session*/) |
91 | 27 | { | 28 | { |
92 | 28 | } | 29 | } |
93 | 29 | 30 | ||
94 | 30 | void msh::NullWindowManager::remove_session(std::shared_ptr<scene::Session> const& /*session*/) | 31 | void msh::SkeletonWindowManager::remove_session(std::shared_ptr<scene::Session> const& /*session*/) |
95 | 31 | { | 32 | { |
96 | 32 | } | 33 | } |
97 | 33 | 34 | ||
98 | 34 | auto msh::NullWindowManager::add_surface( | 35 | auto msh::SkeletonWindowManager::add_surface( |
99 | 35 | std::shared_ptr<scene::Session> const& session, | 36 | std::shared_ptr<scene::Session> const& session, |
100 | 36 | scene::SurfaceCreationParameters const& params, | 37 | scene::SurfaceCreationParameters const& params, |
101 | 37 | std::function<frontend::SurfaceId(std::shared_ptr<scene::Session> const& session, scene::SurfaceCreationParameters const& params)> const& build) | 38 | std::function<frontend::SurfaceId(std::shared_ptr<scene::Session> const& session, scene::SurfaceCreationParameters const& params)> const& build) |
102 | @@ -40,40 +41,40 @@ | |||
103 | 40 | return build(session, params); | 41 | return build(session, params); |
104 | 41 | } | 42 | } |
105 | 42 | 43 | ||
107 | 43 | void msh::NullWindowManager::remove_surface( | 44 | void msh::SkeletonWindowManager::remove_surface( |
108 | 44 | std::shared_ptr<scene::Session> const& /*session*/, | 45 | std::shared_ptr<scene::Session> const& /*session*/, |
109 | 45 | std::weak_ptr<scene::Surface> const& /*surface*/) | 46 | std::weak_ptr<scene::Surface> const& /*surface*/) |
110 | 46 | { | 47 | { |
111 | 47 | } | 48 | } |
112 | 48 | 49 | ||
137 | 49 | void msh::NullWindowManager::add_display(geometry::Rectangle const& /*area*/) | 50 | void msh::SkeletonWindowManager::add_display(geometry::Rectangle const& /*area*/) |
138 | 50 | { | 51 | { |
139 | 51 | } | 52 | } |
140 | 52 | 53 | ||
141 | 53 | void msh::NullWindowManager::remove_display(geometry::Rectangle const& /*area*/) | 54 | void msh::SkeletonWindowManager::remove_display(geometry::Rectangle const& /*area*/) |
142 | 54 | { | 55 | { |
143 | 55 | } | 56 | } |
144 | 56 | 57 | ||
145 | 57 | bool msh::NullWindowManager::handle_key_event(MirKeyboardEvent const* /*event*/) | 58 | bool msh::SkeletonWindowManager::handle_key_event(MirKeyboardEvent const* /*event*/) |
146 | 58 | { | 59 | { |
147 | 59 | return false; | 60 | return false; |
148 | 60 | } | 61 | } |
149 | 61 | 62 | ||
150 | 62 | bool msh::NullWindowManager::handle_touch_event(MirTouchEvent const* /*event*/) | 63 | bool msh::SkeletonWindowManager::handle_touch_event(MirTouchEvent const* /*event*/) |
151 | 63 | { | 64 | { |
152 | 64 | return false; | 65 | return false; |
153 | 65 | } | 66 | } |
154 | 66 | 67 | ||
155 | 67 | bool msh::NullWindowManager::handle_pointer_event(MirPointerEvent const* /*event*/) | 68 | bool msh::SkeletonWindowManager::handle_pointer_event(MirPointerEvent const* /*event*/) |
156 | 68 | { | 69 | { |
157 | 69 | return false; | 70 | return false; |
158 | 70 | } | 71 | } |
159 | 71 | 72 | ||
160 | 72 | int msh::NullWindowManager::set_surface_attribute( | 73 | int msh::SkeletonWindowManager::set_surface_attribute( |
161 | 73 | std::shared_ptr<scene::Session> const& /*session*/, | 74 | std::shared_ptr<scene::Session> const& /*session*/, |
164 | 74 | std::shared_ptr<scene::Surface> const& /*surface*/, | 75 | std::shared_ptr<scene::Surface> const& surface, |
165 | 75 | MirSurfaceAttrib /*attrib*/, | 76 | MirSurfaceAttrib attrib, |
166 | 76 | int value) | 77 | int value) |
167 | 77 | { | 78 | { |
169 | 78 | return value; | 79 | return surface->configure(attrib, value); |
170 | 79 | } | 80 | } |
171 | 80 | 81 | ||
172 | === modified file 'src/server/symbols.map' | |||
173 | --- src/server/symbols.map 2015-03-27 06:58:51 +0000 | |||
174 | +++ src/server/symbols.map 2015-03-27 12:00:42 +0000 | |||
175 | @@ -222,16 +222,6 @@ | |||
176 | 222 | mir::shell::InputTargeter::?InputTargeter*; | 222 | mir::shell::InputTargeter::?InputTargeter*; |
177 | 223 | mir::shell::InputTargeter::InputTargeter*; | 223 | mir::shell::InputTargeter::InputTargeter*; |
178 | 224 | mir::shell::InputTargeter::operator*; | 224 | mir::shell::InputTargeter::operator*; |
179 | 225 | mir::shell::NullWindowManager::add_display*; | ||
180 | 226 | mir::shell::NullWindowManager::add_session*; | ||
181 | 227 | mir::shell::NullWindowManager::add_surface*; | ||
182 | 228 | mir::shell::NullWindowManager::handle_key_event*; | ||
183 | 229 | mir::shell::NullWindowManager::handle_pointer_event*; | ||
184 | 230 | mir::shell::NullWindowManager::handle_touch_event*; | ||
185 | 231 | mir::shell::NullWindowManager::remove_display*; | ||
186 | 232 | mir::shell::NullWindowManager::remove_session*; | ||
187 | 233 | mir::shell::NullWindowManager::remove_surface*; | ||
188 | 234 | mir::shell::NullWindowManager::set_surface_attribute*; | ||
189 | 235 | mir::shell::ShellWrapper::add_display*; | 225 | mir::shell::ShellWrapper::add_display*; |
190 | 236 | mir::shell::ShellWrapper::add_prompt_provider_for*; | 226 | mir::shell::ShellWrapper::add_prompt_provider_for*; |
191 | 237 | mir::shell::ShellWrapper::close_session*; | 227 | mir::shell::ShellWrapper::close_session*; |
192 | @@ -251,6 +241,16 @@ | |||
193 | 251 | mir::shell::ShellWrapper::start_prompt_session_for*; | 241 | mir::shell::ShellWrapper::start_prompt_session_for*; |
194 | 252 | mir::shell::ShellWrapper::stop_prompt_session*; | 242 | mir::shell::ShellWrapper::stop_prompt_session*; |
195 | 253 | mir::shell::ShellWrapper::surface_at*; | 243 | mir::shell::ShellWrapper::surface_at*; |
196 | 244 | mir::shell::SkeletonWindowManager::add_display*; | ||
197 | 245 | mir::shell::SkeletonWindowManager::add_session*; | ||
198 | 246 | mir::shell::SkeletonWindowManager::add_surface*; | ||
199 | 247 | mir::shell::SkeletonWindowManager::handle_key_event*; | ||
200 | 248 | mir::shell::SkeletonWindowManager::handle_pointer_event*; | ||
201 | 249 | mir::shell::SkeletonWindowManager::handle_touch_event*; | ||
202 | 250 | mir::shell::SkeletonWindowManager::remove_display*; | ||
203 | 251 | mir::shell::SkeletonWindowManager::remove_session*; | ||
204 | 252 | mir::shell::SkeletonWindowManager::remove_surface*; | ||
205 | 253 | mir::shell::SkeletonWindowManager::set_surface_attribute*; | ||
206 | 254 | mir::shell::WindowManager::operator*; | 254 | mir::shell::WindowManager::operator*; |
207 | 255 | mir::shell::WindowManager::?WindowManager*; | 255 | mir::shell::WindowManager::?WindowManager*; |
208 | 256 | mir::shell::WindowManager::WindowManager*; | 256 | mir::shell::WindowManager::WindowManager*; |
209 | @@ -324,16 +324,6 @@ | |||
210 | 324 | non-virtual?thunk?to?mir::shell::FocusController::?FocusController*; | 324 | non-virtual?thunk?to?mir::shell::FocusController::?FocusController*; |
211 | 325 | non-virtual?thunk?to?mir::shell::HostLifecycleEventListener::?HostLifecycleEventListener*; | 325 | non-virtual?thunk?to?mir::shell::HostLifecycleEventListener::?HostLifecycleEventListener*; |
212 | 326 | non-virtual?thunk?to?mir::shell::InputTargeter::?InputTargeter*; | 326 | non-virtual?thunk?to?mir::shell::InputTargeter::?InputTargeter*; |
213 | 327 | non-virtual?thunk?to?mir::shell::NullWindowManager::add_display*; | ||
214 | 328 | non-virtual?thunk?to?mir::shell::NullWindowManager::add_session*; | ||
215 | 329 | non-virtual?thunk?to?mir::shell::NullWindowManager::add_surface*; | ||
216 | 330 | non-virtual?thunk?to?mir::shell::NullWindowManager::handle_key_event*; | ||
217 | 331 | non-virtual?thunk?to?mir::shell::NullWindowManager::handle_pointer_event*; | ||
218 | 332 | non-virtual?thunk?to?mir::shell::NullWindowManager::handle_touch_event*; | ||
219 | 333 | non-virtual?thunk?to?mir::shell::NullWindowManager::remove_display*; | ||
220 | 334 | non-virtual?thunk?to?mir::shell::NullWindowManager::remove_session*; | ||
221 | 335 | non-virtual?thunk?to?mir::shell::NullWindowManager::remove_surface*; | ||
222 | 336 | non-virtual?thunk?to?mir::shell::NullWindowManager::set_surface_attribute*; | ||
223 | 337 | non-virtual?thunk?to?mir::shell::ShellWrapper::add_display*; | 327 | non-virtual?thunk?to?mir::shell::ShellWrapper::add_display*; |
224 | 338 | non-virtual?thunk?to?mir::shell::ShellWrapper::add_prompt_provider_for*; | 328 | non-virtual?thunk?to?mir::shell::ShellWrapper::add_prompt_provider_for*; |
225 | 339 | non-virtual?thunk?to?mir::shell::ShellWrapper::close_session*; | 329 | non-virtual?thunk?to?mir::shell::ShellWrapper::close_session*; |
226 | @@ -352,6 +342,16 @@ | |||
227 | 352 | non-virtual?thunk?to?mir::shell::ShellWrapper::start_prompt_session_for*; | 342 | non-virtual?thunk?to?mir::shell::ShellWrapper::start_prompt_session_for*; |
228 | 353 | non-virtual?thunk?to?mir::shell::ShellWrapper::stop_prompt_session*; | 343 | non-virtual?thunk?to?mir::shell::ShellWrapper::stop_prompt_session*; |
229 | 354 | non-virtual?thunk?to?mir::shell::ShellWrapper::surface_at*; | 344 | non-virtual?thunk?to?mir::shell::ShellWrapper::surface_at*; |
230 | 345 | non-virtual?thunk?to?mir::shell::SkeletonWindowManager::add_display*; | ||
231 | 346 | non-virtual?thunk?to?mir::shell::SkeletonWindowManager::add_session*; | ||
232 | 347 | non-virtual?thunk?to?mir::shell::SkeletonWindowManager::add_surface*; | ||
233 | 348 | non-virtual?thunk?to?mir::shell::SkeletonWindowManager::handle_key_event*; | ||
234 | 349 | non-virtual?thunk?to?mir::shell::SkeletonWindowManager::handle_pointer_event*; | ||
235 | 350 | non-virtual?thunk?to?mir::shell::SkeletonWindowManager::handle_touch_event*; | ||
236 | 351 | non-virtual?thunk?to?mir::shell::SkeletonWindowManager::remove_display*; | ||
237 | 352 | non-virtual?thunk?to?mir::shell::SkeletonWindowManager::remove_session*; | ||
238 | 353 | non-virtual?thunk?to?mir::shell::SkeletonWindowManager::remove_surface*; | ||
239 | 354 | non-virtual?thunk?to?mir::shell::SkeletonWindowManager::set_surface_attribute*; | ||
240 | 355 | non-virtual?thunk?to?mir::shell::WindowManager::?WindowManager*; | 355 | non-virtual?thunk?to?mir::shell::WindowManager::?WindowManager*; |
241 | 356 | non-virtual?thunk?to?mir::time::Alarm::?Alarm*; | 356 | non-virtual?thunk?to?mir::time::Alarm::?Alarm*; |
242 | 357 | non-virtual?thunk?to?mir::time::AlarmFactory::?AlarmFactory*; | 357 | non-virtual?thunk?to?mir::time::AlarmFactory::?AlarmFactory*; |
243 | @@ -405,9 +405,9 @@ | |||
244 | 405 | typeinfo?for?mir::shell::FocusController; | 405 | typeinfo?for?mir::shell::FocusController; |
245 | 406 | typeinfo?for?mir::shell::HostLifecycleEventListener; | 406 | typeinfo?for?mir::shell::HostLifecycleEventListener; |
246 | 407 | typeinfo?for?mir::shell::InputTargeter; | 407 | typeinfo?for?mir::shell::InputTargeter; |
247 | 408 | typeinfo?for?mir::shell::NullWindowManager; | ||
248 | 409 | typeinfo?for?mir::shell::Shell; | 408 | typeinfo?for?mir::shell::Shell; |
249 | 410 | typeinfo?for?mir::shell::ShellWrapper; | 409 | typeinfo?for?mir::shell::ShellWrapper; |
250 | 410 | typeinfo?for?mir::shell::SkeletonWindowManager; | ||
251 | 411 | typeinfo?for?mir::shell::WindowManager; | 411 | typeinfo?for?mir::shell::WindowManager; |
252 | 412 | typeinfo?for?mir::time::Alarm; | 412 | typeinfo?for?mir::time::Alarm; |
253 | 413 | typeinfo?for?mir::time::AlarmFactory; | 413 | typeinfo?for?mir::time::AlarmFactory; |
254 | @@ -461,9 +461,9 @@ | |||
255 | 461 | vtable?for?mir::shell::FocusController; | 461 | vtable?for?mir::shell::FocusController; |
256 | 462 | vtable?for?mir::shell::HostLifecycleEventListener; | 462 | vtable?for?mir::shell::HostLifecycleEventListener; |
257 | 463 | vtable?for?mir::shell::InputTargeter; | 463 | vtable?for?mir::shell::InputTargeter; |
258 | 464 | vtable?for?mir::shell::NullWindowManager; | ||
259 | 465 | vtable?for?mir::shell::Shell; | 464 | vtable?for?mir::shell::Shell; |
260 | 466 | vtable?for?mir::shell::ShellWrapper; | 465 | vtable?for?mir::shell::ShellWrapper; |
261 | 466 | vtable?for?mir::shell::SkeletonWindowManager; | ||
262 | 467 | vtable?for?mir::shell::WindowManager; | 467 | vtable?for?mir::shell::WindowManager; |
263 | 468 | vtable?for?mir::time::Alarm; | 468 | vtable?for?mir::time::Alarm; |
264 | 469 | vtable?for?mir::time::AlarmFactory; | 469 | vtable?for?mir::time::AlarmFactory; |
Raises some questions about the name ;) but ok.