Merge lp:~alan-griffiths/miral/rework-handling-of-surface-state-changes into lp:miral

Proposed by Alan Griffiths
Status: Merged
Approved by: Gerry Boland
Approved revision: 384
Merged at revision: 375
Proposed branch: lp:~alan-griffiths/miral/rework-handling-of-surface-state-changes
Merge into: lp:miral
Diff against target: 425 lines (+137/-81)
11 files modified
debian/libmiral1.symbols (+1/-0)
include/miral/window_manager_tools.h (+2/-0)
miral-shell/titlebar_window_manager.cpp (+1/-1)
miral/basic_window_manager.cpp (+114/-78)
miral/basic_window_manager.h (+2/-1)
miral/set_window_managment_policy.cpp (+1/-1)
miral/symbols.map (+1/-0)
miral/window_management_trace.cpp (+8/-0)
miral/window_management_trace.h (+1/-0)
miral/window_manager_tools.cpp (+4/-0)
miral/window_manager_tools_implementation.h (+2/-0)
To merge this branch: bzr merge lp:~alan-griffiths/miral/rework-handling-of-surface-state-changes
Reviewer Review Type Date Requested Status
Gerry Boland (community) Approve
Daniel d'Andrada (community) test Approve
Review via email: mp+307163@code.launchpad.net

Commit message

Rework the handling of surface state changes:
1. shells now have the option of ignoring (or adjusting) the default placement.
2. fixes issues arising when the state of the active window changes.

Description of the change

Rework the handling of surface state changes:
1. shells now have the option of ignoring (or adjusting) the default placement.
2. fixes issues arising when the state of the active window changes.

It may seem odd to provide position_for_state() in tools, but the if the shell initiates a state change (as the Titlebar example does on [Ctrl|Shif|Alt]-F11) it may need the default placement.

To post a comment you must log in.
Revision history for this message
Daniel d'Andrada (dandrader) wrote :

Fixes those two bugs I reported, so I'm happy with it.
No opinion on the code itself, just stating that it fixed those bugs.

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

+ void position_for_state(WindowSpecification& modifications, WindowInfo const& window_info) const;
name doesn't quite match implementation, as it also impacts size, perhaps "geometry_for_state"?

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

+void miral::BasicWindowManager::validate_modification_request(WindowSpecification const& modifications, WindowInfo const& window_info) const

+ void position_for_state(WindowSpecification& modifications, WindowInfo const& window_info) const override;

Order of the arguments now do not match. Consistency would be nice. I'm unsure why you changed the first one here.

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

- policy->advise_state_change(window_info, value);
- window_info.state(value);
- mir_surface->hide();
- mir_surface->configure(mir_surface_attrib_state, value);
- if (window_info.window() == active_window())
- {
- mru_active_windows.erase(window_info.window());
-
- // Try to activate to recently active window of any application
- mru_active_windows.enumerate([&](Window& window)
- {
- auto const w = window;
- return !(select_active_window(w));
- });
- }
- return;

I wasn't expecting this to vanish in this MP. Is it dead code?

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

> +void
> miral::BasicWindowManager::validate_modification_request(WindowSpecification
> const& modifications, WindowInfo const& window_info) const
>
> + void position_for_state(WindowSpecification& modifications, WindowInfo
> const& window_info) const override;
>
> Order of the arguments now do not match. Consistency would be nice. I'm unsure
> why you changed the first one here.

Or the consistency you're developing is an (out, const in) design?

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

> - policy->advise_state_change(window_info, value);
> - window_info.state(value);
> - mir_surface->hide();
> - mir_surface->configure(mir_surface_attrib_state, value);
> - if (window_info.window() == active_window())
> - {
> - mru_active_windows.erase(window_info.window());
> -
> - // Try to activate to recently active window of any application
> - mru_active_windows.enumerate([&](Window& window)
> - {
> - auto const w = window;
> - return !(select_active_window(w));
> - });
> - }
> - return;
>
> I wasn't expecting this to vanish in this MP. Is it dead code?

Neither.

+ if (window == active_window())
+ {
+ // Try to activate to recently active window of any application
+ mru_active_windows.enumerate([&](Window& candidate)
+ {
+ if (candidate == window)
+ return true;
+ auto const w = candidate;
+ return !(select_active_window(w));
+ });
+ }

Plus some duplicated code consolidated.

384. By Alan Griffiths

position_for_state() => place_and_size_for_state()

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

> > +void
> > miral::BasicWindowManager::validate_modification_request(WindowSpecification
> > const& modifications, WindowInfo const& window_info) const
> >
> > + void position_for_state(WindowSpecification& modifications, WindowInfo
> > const& window_info) const override;
> >
> > Order of the arguments now do not match. Consistency would be nice. I'm
> unsure
> > why you changed the first one here.
>
> Or the consistency you're developing is an (out, const in) design?

Partly that, but also both functions are /about/ the first parameter, with the second parameter being secondary.

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

> + void position_for_state(WindowSpecification& modifications, WindowInfo
> const& window_info) const;
> name doesn't quite match implementation, as it also impacts size, perhaps
> "geometry_for_state"?

place_and_size_for_state()?

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

> > + void position_for_state(WindowSpecification& modifications, WindowInfo
> > const& window_info) const;
> > name doesn't quite match implementation, as it also impacts size, perhaps
> > "geometry_for_state"?
>
> place_and_size_for_state()?

You use similar elsewhere, so yeah.

Revision history for this message
Gerry Boland (gerboland) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/libmiral1.symbols'
--- debian/libmiral1.symbols 2016-09-28 10:38:36 +0000
+++ debian/libmiral1.symbols 2016-09-29 14:41:47 +0000
@@ -180,6 +180,7 @@
180 (c++)"miral::WindowManagerTools::invoke_under_lock(std::function<void ()> const&)@MIRAL_0.1" 0.1.0180 (c++)"miral::WindowManagerTools::invoke_under_lock(std::function<void ()> const&)@MIRAL_0.1" 0.1.0
181 (c++)"miral::WindowManagerTools::modify_window(miral::WindowInfo&, miral::WindowSpecification const&)@MIRAL_0.1" 0.1.0181 (c++)"miral::WindowManagerTools::modify_window(miral::WindowInfo&, miral::WindowSpecification const&)@MIRAL_0.1" 0.1.0
182 (c++)"miral::WindowManagerTools::operator=(miral::WindowManagerTools const&)@MIRAL_0.1" 0.1.0182 (c++)"miral::WindowManagerTools::operator=(miral::WindowManagerTools const&)@MIRAL_0.1" 0.1.0
183 (c++)"miral::WindowManagerTools::place_and_size_for_state(miral::WindowSpecification&, miral::WindowInfo const&) const@MIRAL_0.2" 0.2.0
183 (c++)"miral::WindowManagerTools::raise_tree(miral::Window const&)@MIRAL_0.1" 0.1.0184 (c++)"miral::WindowManagerTools::raise_tree(miral::Window const&)@MIRAL_0.1" 0.1.0
184 (c++)"miral::WindowManagerTools::select_active_window(miral::Window const&)@MIRAL_0.1" 0.1.0185 (c++)"miral::WindowManagerTools::select_active_window(miral::Window const&)@MIRAL_0.1" 0.1.0
185 (c++)"miral::WindowManagerTools::window_at(mir::geometry::Point) const@MIRAL_0.1" 0.1.0186 (c++)"miral::WindowManagerTools::window_at(mir::geometry::Point) const@MIRAL_0.1" 0.1.0
186187
=== modified file 'include/miral/window_manager_tools.h'
--- include/miral/window_manager_tools.h 2016-09-07 20:23:20 +0000
+++ include/miral/window_manager_tools.h 2016-09-29 14:41:47 +0000
@@ -146,6 +146,8 @@
146 /// Apply modifications to a window146 /// Apply modifications to a window
147 void modify_window(WindowInfo& window_info, WindowSpecification const& modifications);147 void modify_window(WindowInfo& window_info, WindowSpecification const& modifications);
148148
149 /// Set a default size and position to reflect state change
150 void place_and_size_for_state(WindowSpecification& modifications, WindowInfo const& window_info) const;
149/** @} */151/** @} */
150152
151 /** Multi-thread support153 /** Multi-thread support
152154
=== modified file 'miral-shell/titlebar_window_manager.cpp'
--- miral-shell/titlebar_window_manager.cpp 2016-09-28 11:42:35 +0000
+++ miral-shell/titlebar_window_manager.cpp 2016-09-29 14:41:47 +0000
@@ -455,7 +455,7 @@
455 WindowSpecification modifications;455 WindowSpecification modifications;
456456
457 modifications.state() = (info.state() == state) ? mir_surface_state_restored : state;457 modifications.state() = (info.state() == state) ? mir_surface_state_restored : state;
458458 tools.place_and_size_for_state(modifications, info);
459 tools.modify_window(info, modifications);459 tools.modify_window(info, modifications);
460 }460 }
461}461}
462462
=== modified file 'miral/basic_window_manager.cpp'
--- miral/basic_window_manager.cpp 2016-09-23 16:55:46 +0000
+++ miral/basic_window_manager.cpp 2016-09-29 14:41:47 +0000
@@ -143,8 +143,10 @@
143{143{
144 Locker lock{mutex, policy};144 Locker lock{mutex, policy};
145 auto& info = info_for(surface);145 auto& info = info_for(surface);
146 validate_modification_request(info, modifications);146 WindowSpecification mods{modifications};
147 policy->handle_modify_window(info, modifications);147 validate_modification_request(mods, info);
148 place_and_size_for_state(mods, info);
149 policy->handle_modify_window(info, mods);
148}150}
149151
150void miral::BasicWindowManager::remove_surface(152void miral::BasicWindowManager::remove_surface(
@@ -321,7 +323,8 @@
321 Locker lock{mutex, policy};323 Locker lock{mutex, policy};
322 auto& info = info_for(surface);324 auto& info = info_for(surface);
323325
324 validate_modification_request(info, modification);326 validate_modification_request(modification, info);
327 place_and_size_for_state(modification, info);
325 policy->handle_modify_window(info, modification);328 policy->handle_modify_window(info, modification);
326329
327 switch (attrib)330 switch (attrib)
@@ -601,6 +604,38 @@
601 if (modifications.input_shape().is_set())604 if (modifications.input_shape().is_set())
602 std::shared_ptr<scene::Surface>(window)->set_input_region(modifications.input_shape().value());605 std::shared_ptr<scene::Surface>(window)->set_input_region(modifications.input_shape().value());
603606
607 if (modifications.state().is_set() && window_info.state() != modifications.state().value())
608 {
609 switch (window_info.state())
610 {
611 case mir_surface_state_restored:
612 case mir_surface_state_hidden:
613 window_info.restore_rect({window.top_left(), window.size()});
614 break;
615
616 case mir_surface_state_vertmaximized:
617 {
618 auto restore_rect = window_info.restore_rect();
619 restore_rect.top_left.x = window.top_left().x;
620 restore_rect.size.width = window.size().width;
621 window_info.restore_rect(restore_rect);
622 break;
623 }
624
625 case mir_surface_state_horizmaximized:
626 {
627 auto restore_rect = window_info.restore_rect();
628 restore_rect.top_left.y = window.top_left().y;
629 restore_rect.size.height= window.size().height;
630 window_info.restore_rect(restore_rect);
631 break;
632 }
633
634 default:
635 break;
636 }
637 }
638
604 Point new_pos = modifications.top_left().is_set() ? modifications.top_left().value() : window.top_left();639 Point new_pos = modifications.top_left().is_set() ? modifications.top_left().value() : window.top_left();
605640
606 if (modifications.size().is_set())641 if (modifications.size().is_set())
@@ -687,48 +722,36 @@
687 move_tree(root, new_pos - root.window().top_left());722 move_tree(root, new_pos - root.window().top_left());
688}723}
689724
690void miral::BasicWindowManager::set_state(miral::WindowInfo& window_info, MirSurfaceState value)725void miral::BasicWindowManager::place_and_size_for_state(
726 WindowSpecification& modifications, WindowInfo const& window_info) const
691{727{
692 auto const mir_surface = std::shared_ptr<scene::Surface>(window_info.window());728 if (!modifications.state().is_set() || modifications.state().value() == window_info.state())
693
694 switch (value)
695 {
696 case mir_surface_state_restored:
697 case mir_surface_state_maximized:
698 case mir_surface_state_vertmaximized:
699 case mir_surface_state_horizmaximized:
700 case mir_surface_state_fullscreen:
701 case mir_surface_state_hidden:
702 case mir_surface_state_minimized:
703 break;
704
705 default:
706 mir_surface->configure(mir_surface_attrib_state, window_info.state());
707 return;729 return;
708 }730
709731 auto const display_area = displays.bounding_rectangle();
732 auto const window = window_info.window();
733
734 auto restore_rect = window_info.restore_rect();
735
736 // window_info.restore_rect() was cached on last state change, update to reflect current window position
710 switch (window_info.state())737 switch (window_info.state())
711 {738 {
712 case mir_surface_state_restored:739 case mir_surface_state_restored:
713 case mir_surface_state_hidden:740 case mir_surface_state_hidden:
714 window_info.restore_rect({window_info.window().top_left(), window_info.window().size()});741 restore_rect = {window.top_left(), window.size()};
715 break;742 break;
716743
717 case mir_surface_state_vertmaximized:744 case mir_surface_state_vertmaximized:
718 {745 {
719 auto restore_rect = window_info.restore_rect();746 restore_rect.top_left.x = window.top_left().x;
720 restore_rect.top_left.x = window_info.window().top_left().x;747 restore_rect.size.width = window.size().width;
721 restore_rect.size.width = window_info.window().size().width;
722 window_info.restore_rect(restore_rect);
723 break;748 break;
724 }749 }
725750
726 case mir_surface_state_horizmaximized:751 case mir_surface_state_horizmaximized:
727 {752 {
728 auto restore_rect = window_info.restore_rect();753 restore_rect.top_left.y = window.top_left().y;
729 restore_rect.top_left.y = window_info.window().top_left().y;754 restore_rect.size.height= window.size().height;
730 restore_rect.size.height= window_info.window().size().height;
731 window_info.restore_rect(restore_rect);
732 break;755 break;
733 }756 }
734757
@@ -736,29 +759,20 @@
736 break;759 break;
737 }760 }
738761
739 if (value != mir_surface_state_fullscreen)762 // If the shell has also set position, that overrides restore_rect default
740 {763 if (modifications.top_left().is_set())
741 window_info.output_id({});764 restore_rect.top_left = modifications.top_left().value();
742 fullscreen_surfaces.erase(window_info.window());
743 }
744 else
745 {
746 fullscreen_surfaces.insert(window_info.window());
747 }
748765
749 if (window_info.state() == value)766 // If the client or shell has also set size, that overrides restore_rect default
750 {767 if (modifications.size().is_set())
751 return;768 restore_rect.size = modifications.size().value();
752 }
753769
754 Rectangle rect;770 Rectangle rect;
755771
756 auto const display_area = displays.bounding_rectangle();772 switch (modifications.state().value())
757
758 switch (value)
759 {773 {
760 case mir_surface_state_restored:774 case mir_surface_state_restored:
761 rect = window_info.restore_rect();775 rect = restore_rect;
762 break;776 break;
763777
764 case mir_surface_state_maximized:778 case mir_surface_state_maximized:
@@ -766,18 +780,18 @@
766 break;780 break;
767781
768 case mir_surface_state_horizmaximized:782 case mir_surface_state_horizmaximized:
769 rect.top_left = {display_area.top_left.x, window_info.restore_rect().top_left.y};783 rect.top_left = {display_area.top_left.x, restore_rect.top_left.y};
770 rect.size = {display_area.size.width, window_info.restore_rect().size.height};784 rect.size = {display_area.size.width, restore_rect.size.height};
771 break;785 break;
772786
773 case mir_surface_state_vertmaximized:787 case mir_surface_state_vertmaximized:
774 rect.top_left = {window_info.restore_rect().top_left.x, display_area.top_left.y};788 rect.top_left = {restore_rect.top_left.x, display_area.top_left.y};
775 rect.size = {window_info.restore_rect().size.width, display_area.size.height};789 rect.size = {restore_rect.size.width, display_area.size.height};
776 break;790 break;
777791
778 case mir_surface_state_fullscreen:792 case mir_surface_state_fullscreen:
779 {793 {
780 rect = {(window_info.window().top_left()), window_info.window().size()};794 rect = {(window.top_left()), window.size()};
781795
782 if (window_info.has_output_id())796 if (window_info.has_output_id())
783 {797 {
@@ -794,35 +808,59 @@
794808
795 case mir_surface_state_hidden:809 case mir_surface_state_hidden:
796 case mir_surface_state_minimized:810 case mir_surface_state_minimized:
797 policy->advise_state_change(window_info, value);
798 window_info.state(value);
799 mir_surface->hide();
800 mir_surface->configure(mir_surface_attrib_state, value);
801 if (window_info.window() == active_window())
802 {
803 mru_active_windows.erase(window_info.window());
804
805 // Try to activate to recently active window of any application
806 mru_active_windows.enumerate([&](Window& window)
807 {
808 auto const w = window;
809 return !(select_active_window(w));
810 });
811 }
812 return;
813
814 default:811 default:
815 break;812 return;
816 }813 }
817814
818 place_and_size(window_info, rect.top_left, rect.size);815 modifications.top_left() = rect.top_left;
816 modifications.size() = rect.size;
817}
818
819void miral::BasicWindowManager::set_state(miral::WindowInfo& window_info, MirSurfaceState value)
820{
821 auto const window = window_info.window();
822 auto const mir_surface = std::shared_ptr<scene::Surface>(window);
823
824 if (value != mir_surface_state_fullscreen)
825 {
826 window_info.output_id({});
827 fullscreen_surfaces.erase(window);
828 }
829 else
830 {
831 fullscreen_surfaces.insert(window);
832 }
833
834 if (window_info.state() == value)
835 {
836 return;
837 }
838
819 policy->advise_state_change(window_info, value);839 policy->advise_state_change(window_info, value);
820 window_info.state(value);840 window_info.state(value);
821841
822 if (window_info.is_visible())842 if (window_info.is_visible())
843 {
823 mir_surface->show();844 mir_surface->show();
824845 }
825 mir_surface->configure(mir_surface_attrib_state, window_info.state());846 else
847 {
848 mir_surface->hide();
849
850 if (window == active_window())
851 {
852 // Try to activate to recently active window of any application
853 mru_active_windows.enumerate([&](Window& candidate)
854 {
855 if (candidate == window)
856 return true;
857 auto const w = candidate;
858 return !(select_active_window(w));
859 });
860 }
861 }
862
863 mir_surface->configure(mir_surface_attrib_state, value);
826}864}
827865
828866
@@ -1434,9 +1472,7 @@
1434 return default_result;1472 return default_result;
1435}1473}
14361474
1437void miral::BasicWindowManager::validate_modification_request(1475void miral::BasicWindowManager::validate_modification_request(WindowSpecification const& modifications, WindowInfo const& window_info) const
1438 WindowInfo const& window_info,
1439 WindowSpecification const& modifications) const
1440{1476{
1441 auto target_type = window_info.type();1477 auto target_type = window_info.type();
14421478
14431479
=== modified file 'miral/basic_window_manager.h'
--- miral/basic_window_manager.h 2016-09-21 13:37:35 +0000
+++ miral/basic_window_manager.h 2016-09-29 14:41:47 +0000
@@ -133,6 +133,7 @@
133 auto info_for_window_id(std::string const& id) const -> WindowInfo& override;133 auto info_for_window_id(std::string const& id) const -> WindowInfo& override;
134134
135 auto id_for_window(Window const& window) const -> std::string override;135 auto id_for_window(Window const& window) const -> std::string override;
136 void place_and_size_for_state(WindowSpecification& modifications, WindowInfo const& window_info) const override;
136137
137 void invoke_under_lock(std::function<void()> const& callback) override;138 void invoke_under_lock(std::function<void()> const& callback) override;
138139
@@ -167,7 +168,7 @@
167168
168 void move_tree(miral::WindowInfo& root, mir::geometry::Displacement movement);169 void move_tree(miral::WindowInfo& root, mir::geometry::Displacement movement);
169 void erase(miral::WindowInfo const& info);170 void erase(miral::WindowInfo const& info);
170 void validate_modification_request(WindowInfo const& window_info, WindowSpecification const& modifications) const;171 void validate_modification_request(WindowSpecification const& modifications, WindowInfo const& window_info) const;
171 void place_and_size(WindowInfo& root, Point const& new_pos, Size const& new_size);172 void place_and_size(WindowInfo& root, Point const& new_pos, Size const& new_size);
172 void set_state(miral::WindowInfo& window_info, MirSurfaceState value);173 void set_state(miral::WindowInfo& window_info, MirSurfaceState value);
173};174};
174175
=== modified file 'miral/set_window_managment_policy.cpp'
--- miral/set_window_managment_policy.cpp 2016-09-21 14:43:46 +0000
+++ miral/set_window_managment_policy.cpp 2016-09-29 14:41:47 +0000
@@ -57,7 +57,7 @@
57 {57 {
58 auto trace_builder = [this](WindowManagerTools const& tools) -> std::unique_ptr<miral::WindowManagementPolicy>58 auto trace_builder = [this](WindowManagerTools const& tools) -> std::unique_ptr<miral::WindowManagementPolicy>
59 {59 {
60 return std::make_unique<WindowManagementTrace>(tools, builder);60 return std::make_unique<WindowManagementTrace>(tools, builder);
61 };61 };
6262
63 return std::make_shared<BasicWindowManager>(focus_controller, display_layout, persistent_surface_store, trace_builder);63 return std::make_shared<BasicWindowManager>(focus_controller, display_layout, persistent_surface_store, trace_builder);
6464
=== modified file 'miral/symbols.map'
--- miral/symbols.map 2016-09-28 10:38:36 +0000
+++ miral/symbols.map 2016-09-29 14:41:47 +0000
@@ -289,6 +289,7 @@
289 miral::CursorTheme::CursorTheme*;289 miral::CursorTheme::CursorTheme*;
290 miral::CursorTheme::operator*;290 miral::CursorTheme::operator*;
291 miral::WindowInfo::confine_pointer*;291 miral::WindowInfo::confine_pointer*;
292 miral::WindowManagerTools::place_and_size_for_state*;
292 miral::WindowSpecification::confine_pointer*;293 miral::WindowSpecification::confine_pointer*;
293 typeinfo?for?miral::CursorTheme;294 typeinfo?for?miral::CursorTheme;
294 vtable?for?miral::CursorTheme;295 vtable?for?miral::CursorTheme;
295296
=== modified file 'miral/window_management_trace.cpp'
--- miral/window_management_trace.cpp 2016-09-23 16:54:30 +0000
+++ miral/window_management_trace.cpp 2016-09-29 14:41:47 +0000
@@ -401,6 +401,14 @@
401 return result;401 return result;
402}402}
403403
404void miral::WindowManagementTrace::place_and_size_for_state(
405 WindowSpecification& modifications, WindowInfo const& window_info) const
406{
407 log_input();
408 mir::log_info("%s modifications=%s window_info=%s", __func__, dump_of(modifications).c_str(), dump_of(window_info).c_str());
409 wrapped.place_and_size_for_state(modifications, window_info);
410}
411
404void miral::WindowManagementTrace::drag_active_window(mir::geometry::Displacement movement)412void miral::WindowManagementTrace::drag_active_window(mir::geometry::Displacement movement)
405{413{
406 log_input();414 log_input();
407415
=== modified file 'miral/window_management_trace.h'
--- miral/window_management_trace.h 2016-09-23 10:28:25 +0000
+++ miral/window_management_trace.h 2016-09-29 14:41:47 +0000
@@ -56,6 +56,7 @@
56 virtual auto active_display() -> mir::geometry::Rectangle const override;56 virtual auto active_display() -> mir::geometry::Rectangle const override;
57 virtual auto info_for_window_id(std::string const& id) const -> WindowInfo& override;57 virtual auto info_for_window_id(std::string const& id) const -> WindowInfo& override;
58 virtual auto id_for_window(Window const& window) const -> std::string override;58 virtual auto id_for_window(Window const& window) const -> std::string override;
59 virtual void place_and_size_for_state(WindowSpecification& modifications, WindowInfo const& window_info) const override;
5960
60 virtual void drag_active_window(mir::geometry::Displacement movement) override;61 virtual void drag_active_window(mir::geometry::Displacement movement) override;
6162
6263
=== modified file 'miral/window_manager_tools.cpp'
--- miral/window_manager_tools.cpp 2016-09-07 20:23:20 +0000
+++ miral/window_manager_tools.cpp 2016-09-29 14:41:47 +0000
@@ -85,3 +85,7 @@
8585
86void miral::WindowManagerTools::invoke_under_lock(std::function<void()> const& callback)86void miral::WindowManagerTools::invoke_under_lock(std::function<void()> const& callback)
87{ tools->invoke_under_lock(callback); }87{ tools->invoke_under_lock(callback); }
88
89void miral::WindowManagerTools::place_and_size_for_state(
90 WindowSpecification& modifications, WindowInfo const& window_info) const
91{ tools->place_and_size_for_state(modifications, window_info); }
8892
=== modified file 'miral/window_manager_tools_implementation.h'
--- miral/window_manager_tools_implementation.h 2016-09-21 13:37:35 +0000
+++ miral/window_manager_tools_implementation.h 2016-09-29 14:41:47 +0000
@@ -65,6 +65,8 @@
65 virtual void modify_window(WindowInfo& window_info, WindowSpecification const& modifications) = 0;65 virtual void modify_window(WindowInfo& window_info, WindowSpecification const& modifications) = 0;
66 virtual auto info_for_window_id(std::string const& id) const -> WindowInfo& = 0;66 virtual auto info_for_window_id(std::string const& id) const -> WindowInfo& = 0;
67 virtual auto id_for_window(Window const& window) const -> std::string = 0;67 virtual auto id_for_window(Window const& window) const -> std::string = 0;
68 virtual void place_and_size_for_state(WindowSpecification& modifications, WindowInfo const& window_info) const= 0;
69
68/** @} */70/** @} */
6971
70/** @name Multi-thread support72/** @name Multi-thread support

Subscribers

People subscribed via source and target branches