Merge lp:~alan-griffiths/miral/more-kiosk-options into lp:miral

Proposed by Alan Griffiths
Status: Merged
Approved by: Gerry Boland
Approved revision: 440
Merged at revision: 440
Proposed branch: lp:~alan-griffiths/miral/more-kiosk-options
Merge into: lp:miral
Diff against target: 128 lines (+51/-3)
3 files modified
miral-kiosk/kiosk_main.cpp (+22/-3)
miral-kiosk/kiosk_window_manager.cpp (+23/-0)
miral-kiosk/kiosk_window_manager.h (+6/-0)
To merge this branch: bzr merge lp:~alan-griffiths/miral/more-kiosk-options
Reviewer Review Type Date Requested Status
Gerry Boland (community) Approve
Review via email: mp+310270@code.launchpad.net

Commit message

Provide configuration options for kiosk: --keymap --kiosk-maximize-root-windows & --kiosk-startup-apps-only

To post a comment you must log in.
440. By Alan Griffiths

Only apply maximize_root_windows to restored windows

Revision history for this message
Gerry Boland (gerboland) wrote :

Why would a kiosk not have a fullscreen root client window? It's how I understood the "kiosk" idea - has a single fullscreen client window

review: Needs Information
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> Why would a kiosk not have a fullscreen root client window? It's how I
> understood the "kiosk" idea - has a single fullscreen client window

We don't have a real "usecase" for kiosk yet. So, pending feedback from kg I'm allowing the current behaviour (but changing the default).

Revision history for this message
Gerry Boland (gerboland) wrote :

Ok, looks fine to me

+ // We do this here, not in place_new_surface() so that clients get a resize event.
+ // This shouldn't be necessary, but works better with the gtk-mir backend.
You consider this a gtk-mir bug? It smells like one to me

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

> + // This shouldn't be necessary, but works better with the gtk-mir backend.
> You consider this a gtk-mir bug? It smells like one to me

I do, but the workaround gets immediate results.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'miral-kiosk/kiosk_main.cpp'
--- miral-kiosk/kiosk_main.cpp 2016-06-10 19:23:40 +0000
+++ miral-kiosk/kiosk_main.cpp 2016-11-08 11:18:13 +0000
@@ -20,16 +20,16 @@
2020
21#include <miral/runner.h>21#include <miral/runner.h>
22#include <miral/application_authorizer.h>22#include <miral/application_authorizer.h>
23#include <miral/command_line_option.h>
24#include <miral/keymap.h>
23#include <miral/set_window_managment_policy.h>25#include <miral/set_window_managment_policy.h>
24#include <miral/internal_client.h>26#include <miral/internal_client.h>
2527
26#include <unistd.h>28#include <unistd.h>
27#include <cstdlib>29#include <atomic>
2830
29namespace31namespace
30{32{
31bool const startup_only = getenv("MIRAL_KIOSK_STARTUP_ONLY");
32
33struct KioskAuthorizer : miral::ApplicationAuthorizer33struct KioskAuthorizer : miral::ApplicationAuthorizer
34{34{
35 KioskAuthorizer(SwSplash const& splash) : splash{splash}{}35 KioskAuthorizer(SwSplash const& splash) : splash{splash}{}
@@ -61,8 +61,12 @@
61 return false;61 return false;
62 }62 }
6363
64 static std::atomic<bool> startup_only;
65
64 SwSplash splash;66 SwSplash splash;
65};67};
68
69std::atomic<bool> KioskAuthorizer::startup_only{false};
66}70}
6771
68int main(int argc, char const* argv[])72int main(int argc, char const* argv[])
@@ -71,10 +75,25 @@
7175
72 SwSplash splash;76 SwSplash splash;
7377
78 CommandLineOption maximise_roots{
79 [&](bool maximize_root_windows) {KioskWindowManagerPolicy::maximize_root_windows = maximize_root_windows; },
80 "kiosk-maximize-root-windows",
81 "Force root windows to maximized",
82 KioskWindowManagerPolicy::maximize_root_windows};
83
84 CommandLineOption startup_only{
85 [&](bool startup_only) {KioskAuthorizer::startup_only = startup_only; },
86 "kiosk-startup-apps-only",
87 "Only allow applications to connect during startup",
88 KioskAuthorizer::startup_only};
89
74 return MirRunner{argc, argv}.run_with(90 return MirRunner{argc, argv}.run_with(
75 {91 {
76 set_window_managment_policy<KioskWindowManagerPolicy>(splash),92 set_window_managment_policy<KioskWindowManagerPolicy>(splash),
77 SetApplicationAuthorizer<KioskAuthorizer>{splash},93 SetApplicationAuthorizer<KioskAuthorizer>{splash},
94 Keymap{},
95 maximise_roots,
96 startup_only,
78 StartupInternalClient{"Intro", splash}97 StartupInternalClient{"Intro", splash}
79 });98 });
80}99}
81100
=== modified file 'miral-kiosk/kiosk_window_manager.cpp'
--- miral-kiosk/kiosk_window_manager.cpp 2016-08-04 16:05:00 +0000
+++ miral-kiosk/kiosk_window_manager.cpp 2016-11-08 11:18:13 +0000
@@ -27,6 +27,9 @@
27namespace ms = mir::scene;27namespace ms = mir::scene;
28using namespace miral;28using namespace miral;
2929
30std::atomic<bool> KioskWindowManagerPolicy::maximize_root_windows{true};
31
32
30KioskWindowManagerPolicy::KioskWindowManagerPolicy(WindowManagerTools const& tools, SwSplash const& splash) :33KioskWindowManagerPolicy::KioskWindowManagerPolicy(WindowManagerTools const& tools, SwSplash const& splash) :
31 CanonicalWindowManagerPolicy{tools},34 CanonicalWindowManagerPolicy{tools},
32 splash{splash}35 splash{splash}
@@ -119,3 +122,23 @@
119 tools.raise_tree(s);122 tools.raise_tree(s);
120 }123 }
121}124}
125
126void KioskWindowManagerPolicy::advise_new_window(WindowInfo const& window_info)
127{
128 // We do this here, not in place_new_surface() so that clients get a resize event.
129 // This shouldn't be necessary, but works better with the gtk-mir backend.
130 if (maximize_root_windows &&
131 window_info.type() == mir_surface_type_normal &&
132 !window_info.parent() &&
133 window_info.state() == mir_surface_state_restored)
134 {
135 WindowSpecification specification;
136
137 specification.state() = mir_surface_state_maximized;
138
139 tools.place_and_size_for_state(specification, window_info);
140 tools.modify_window(window_info.window(), specification);
141 }
142
143 CanonicalWindowManagerPolicy::advise_new_window(window_info);
144}
122145
=== modified file 'miral-kiosk/kiosk_window_manager.h'
--- miral-kiosk/kiosk_window_manager.h 2016-07-27 15:43:19 +0000
+++ miral-kiosk/kiosk_window_manager.h 2016-11-08 11:18:13 +0000
@@ -23,6 +23,8 @@
2323
24#include <miral/canonical_window_manager.h>24#include <miral/canonical_window_manager.h>
2525
26#include <atomic>
27
26using namespace mir::geometry;28using namespace mir::geometry;
2729
28class KioskWindowManagerPolicy : public miral::CanonicalWindowManagerPolicy30class KioskWindowManagerPolicy : public miral::CanonicalWindowManagerPolicy
@@ -32,10 +34,14 @@
3234
33 void advise_focus_gained(miral::WindowInfo const& info) override;35 void advise_focus_gained(miral::WindowInfo const& info) override;
3436
37 virtual void advise_new_window(miral::WindowInfo const& window_info) override;
38
35 bool handle_keyboard_event(MirKeyboardEvent const* event) override;39 bool handle_keyboard_event(MirKeyboardEvent const* event) override;
36 bool handle_touch_event(MirTouchEvent const* event) override;40 bool handle_touch_event(MirTouchEvent const* event) override;
37 bool handle_pointer_event(MirPointerEvent const* event) override;41 bool handle_pointer_event(MirPointerEvent const* event) override;
3842
43 static std::atomic<bool> maximize_root_windows;
44
39private:45private:
40 static const int modifier_mask =46 static const int modifier_mask =
41 mir_input_event_modifier_alt |47 mir_input_event_modifier_alt |

Subscribers

People subscribed via source and target branches