/*
* Copyright © 2016 Canonical Ltd.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* Authored by: Alan Griffiths
*/
#ifndef MIRAL_WINDOW_MANAGEMENT_TRACE_H
#define MIRAL_WINDOW_MANAGEMENT_TRACE_H
#include "window_manager_tools_implementation.h"
#include "miral/window_manager_tools.h"
#include "miral/window_management_options.h"
#include "miral/window_management_policy.h"
#include
namespace miral
{
class WindowManagementTrace : public WindowManagementPolicy, WindowManagerToolsImplementation
{
public:
WindowManagementTrace(WindowManagerTools const& wrapped, WindowManagementPolicyBuilder const& builder);
private:
virtual auto count_applications() const -> unsigned int override;
virtual void for_each_application(std::function const& functor) override;
virtual auto find_application(std::function const& predicate)
-> Application override;
virtual auto info_for(std::weak_ptr const& session) const -> ApplicationInfo& override;
virtual auto info_for(std::weak_ptr const& surface) const -> WindowInfo& override;
virtual auto info_for(Window const& window) const -> WindowInfo& override;
virtual void ask_client_to_close(Window const& window) override;
virtual void force_close(Window const& window) override;
virtual auto active_window() const -> Window override;
virtual auto select_active_window(Window const& hint) -> Window override;
virtual auto window_at(mir::geometry::Point cursor) const -> Window override;
virtual auto active_display() -> mir::geometry::Rectangle const override;
virtual auto info_for_window_id(std::string const& id) const -> WindowInfo& override;
virtual auto id_for_window(Window const& window) const -> std::string override;
virtual void place_and_size_for_state(WindowSpecification& modifications, WindowInfo const& window_info) const override;
virtual void drag_active_window(mir::geometry::Displacement movement) override;
virtual void focus_next_application() override;
virtual void focus_next_within_application() override;
virtual void raise_tree(Window const& root) override;
virtual void modify_window(WindowInfo& window_info, WindowSpecification const& modifications) override;
virtual void invoke_under_lock(std::function const& callback) override;
virtual auto place_new_window(
ApplicationInfo const& app_info,
WindowSpecification const& requested_specification) -> WindowSpecification override;
virtual void handle_window_ready(WindowInfo& window_info) override;
virtual void handle_modify_window(WindowInfo& window_info, WindowSpecification const& modifications) override;
virtual void handle_raise_window(WindowInfo& window_info) override;
virtual bool handle_keyboard_event(MirKeyboardEvent const* event) override;
virtual bool handle_touch_event(MirTouchEvent const* event) override;
virtual bool handle_pointer_event(MirPointerEvent const* event) override;
auto confirm_inherited_move(WindowInfo const& window_info, Displacement movement) -> Rectangle override;
public:
virtual void advise_begin() override;
virtual void advise_end() override;
virtual void advise_new_app(ApplicationInfo& application) override;
virtual void advise_delete_app(ApplicationInfo const& application) override;
virtual void advise_new_window(WindowInfo const& window_info) override;
virtual void advise_focus_lost(WindowInfo const& info) override;
virtual void advise_focus_gained(WindowInfo const& window_info) override;
virtual void advise_state_change(WindowInfo const& window_info, MirWindowState state) override;
virtual void advise_move_to(WindowInfo const& window_info, Point top_left) override;
virtual void advise_resize(WindowInfo const& window_info, Size const& new_size) override;
virtual void advise_delete_window(WindowInfo const& window_info) override;
virtual void advise_raise(std::vector const& windows) override;
private:
WindowManagerTools wrapped;
std::unique_ptr const policy;
std::atomic mutable trace_count;
std::function log_input;
};
}
#endif //MIRAL_WINDOW_MANAGEMENT_TRACE_H