2
* Copyright © 2016 Canonical Ltd.
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 2 or 3 as
6
* published by the Free Software Foundation.
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.
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/>.
16
* Authored by: Alan Griffiths <alan@octopull.co.uk>
19
#ifndef MIRAL_WINDOW_MANAGEMENT_TRACE_H
20
#define MIRAL_WINDOW_MANAGEMENT_TRACE_H
22
#include "window_manager_tools_implementation.h"
24
#include "miral/window_manager_tools.h"
25
#include "miral/window_management_options.h"
26
#include "miral/window_management_policy.h"
32
class WindowManagementTrace : public WindowManagementPolicy, WindowManagerToolsImplementation
35
WindowManagementTrace(WindowManagerTools const& wrapped, WindowManagementPolicyBuilder const& builder);
38
virtual auto count_applications() const -> unsigned int override;
40
virtual void for_each_application(std::function<void(ApplicationInfo&)> const& functor) override;
42
virtual auto find_application(std::function<bool(ApplicationInfo const& info)> const& predicate)
43
-> Application override;
45
virtual auto info_for(std::weak_ptr<mir::scene::Session> const& session) const -> ApplicationInfo& override;
47
virtual auto info_for(std::weak_ptr<mir::scene::Surface> const& surface) const -> WindowInfo& override;
49
virtual auto info_for(Window const& window) const -> WindowInfo& override;
51
virtual void ask_client_to_close(Window const& window) override;
52
virtual void force_close(Window const& window) override;
54
virtual auto active_window() const -> Window override;
55
virtual auto select_active_window(Window const& hint) -> Window override;
56
virtual auto window_at(mir::geometry::Point cursor) const -> Window override;
57
virtual auto active_output() -> mir::geometry::Rectangle const override;
58
virtual auto info_for_window_id(std::string const& id) const -> WindowInfo& override;
59
virtual auto id_for_window(Window const& window) const -> std::string override;
60
virtual void place_and_size_for_state(WindowSpecification& modifications, WindowInfo const& window_info) const override;
62
virtual void drag_active_window(mir::geometry::Displacement movement) override;
64
void drag_window(Window const& window, mir::geometry::Displacement& movement) override;
66
virtual void focus_next_application() override;
68
virtual void focus_next_within_application() override;
69
virtual void focus_prev_within_application() override;
71
virtual void raise_tree(Window const& root) override;
72
virtual void start_drag_and_drop(WindowInfo& window_info, std::vector<uint8_t> const& handle) override;
73
virtual void end_drag_and_drop() override;
75
virtual void modify_window(WindowInfo& window_info, WindowSpecification const& modifications) override;
77
virtual void invoke_under_lock(std::function<void()> const& callback) override;
79
virtual auto place_new_window(
80
ApplicationInfo const& app_info,
81
WindowSpecification const& requested_specification) -> WindowSpecification override;
82
virtual void handle_window_ready(WindowInfo& window_info) override;
84
virtual void handle_modify_window(WindowInfo& window_info, WindowSpecification const& modifications) override;
86
virtual void handle_raise_window(WindowInfo& window_info) override;
88
virtual bool handle_keyboard_event(MirKeyboardEvent const* event) override;
90
virtual bool handle_touch_event(MirTouchEvent const* event) override;
92
virtual bool handle_pointer_event(MirPointerEvent const* event) override;
94
auto confirm_inherited_move(WindowInfo const& window_info, Displacement movement) -> Rectangle override;
96
auto create_workspace() -> std::shared_ptr<Workspace> override;
98
void add_tree_to_workspace(Window const& window, std::shared_ptr<Workspace> const& workspace) override;
100
void remove_tree_from_workspace(Window const& window, std::shared_ptr<Workspace> const& workspace) override;
102
void move_workspace_content_to_workspace(
103
std::shared_ptr<Workspace> const& to_workspace,
104
std::shared_ptr<Workspace> const& from_workspace) override;
106
void for_each_workspace_containing(
107
Window const& window,
108
std::function<void(std::shared_ptr<Workspace> const& workspace)> const& callback) override;
110
void for_each_window_in_workspace(
111
std::shared_ptr<Workspace> const& workspace, std::function<void(Window const&)> const& callback) override;
114
virtual void advise_begin() override;
116
virtual void advise_end() override;
118
virtual void advise_new_app(ApplicationInfo& application) override;
120
virtual void advise_delete_app(ApplicationInfo const& application) override;
122
virtual void advise_new_window(WindowInfo const& window_info) override;
124
virtual void advise_focus_lost(WindowInfo const& info) override;
126
virtual void advise_focus_gained(WindowInfo const& window_info) override;
128
virtual void advise_state_change(WindowInfo const& window_info, MirWindowState state) override;
130
virtual void advise_move_to(WindowInfo const& window_info, Point top_left) override;
132
virtual void advise_resize(WindowInfo const& window_info, Size const& new_size) override;
134
virtual void advise_delete_window(WindowInfo const& window_info) override;
136
virtual void advise_raise(std::vector<Window> const& windows) override;
139
WindowManagerTools wrapped;
140
std::unique_ptr<miral::WindowManagementPolicy> const policy;
141
std::atomic<unsigned> mutable trace_count;
142
std::function<void()> log_input;
146
#endif //MIRAL_WINDOW_MANAGEMENT_TRACE_H