Skip to content

Commit

Permalink
Advisor is hooked up, time to implement funtionality
Browse files Browse the repository at this point in the history
  • Loading branch information
mattkae committed Jul 7, 2023
1 parent 9d57936 commit 42a0989
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 8 deletions.
7 changes: 4 additions & 3 deletions src/miral/runner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,10 @@ try
server->override_the_window_manager_builder([&server](mir::shell::FocusController* focus_controller) -> std::shared_ptr<mir::shell::WindowManager>
{
return std::make_shared<SystemCompositorWindowManager>(
focus_controller,
server->the_shell_display_layout(),
server->the_session_coordinator()
focus_controller,
server->the_shell_display_layout(),
server->the_session_coordinator(),
*server->the_display_configuration_observer_registrar()
);
});

Expand Down
27 changes: 24 additions & 3 deletions src/miral/system_compositor_window_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/

#include "system_compositor_window_manager.h"
#include "display_configuration_listeners.h"
#include <miral/output.h>

#include <mir/shell/display_layout.h>
Expand All @@ -39,11 +40,19 @@ namespace geom = mir::geometry;
miral::SystemCompositorWindowManager::SystemCompositorWindowManager(
msh::FocusController* focus_controller,
std::shared_ptr<msh::DisplayLayout> const& display_layout,
std::shared_ptr<ms::SessionCoordinator> const& session_coordinator) :
std::shared_ptr<ms::SessionCoordinator> const& session_coordinator,
mir::ObserverRegistrar<mir::graphics::DisplayConfigurationObserver>& display_configuration_observers) :
focus_controller{focus_controller},
display_layout{display_layout},
session_coordinator{session_coordinator}
session_coordinator{session_coordinator},
display_config_monitor{std::make_shared<DisplayConfigurationListeners>()}
{
display_config_monitor->add_listener(this);
display_configuration_observers.register_interest(display_config_monitor);
}

miral::SystemCompositorWindowManager::~SystemCompositorWindowManager() noexcept {
display_config_monitor->delete_listener(this);
}

void miral::SystemCompositorWindowManager::add_session(std::shared_ptr<ms::Session> const& session)
Expand Down Expand Up @@ -272,4 +281,16 @@ void miral::SystemCompositorWindowManager::handle_request_resize(
MirInputEvent const* /*event*/,
MirResizeEdge /*edge*/)
{
}
}

void miral::SystemCompositorWindowManager::advise_output_create(const miral::Output &output) {
ActiveOutputsListener::advise_output_create(output);
}

void miral::SystemCompositorWindowManager::advise_output_update(const miral::Output &updated, const miral::Output &original) {
ActiveOutputsListener::advise_output_update(updated, original);
}

void miral::SystemCompositorWindowManager::advise_output_delete(const miral::Output &output) {
ActiveOutputsListener::advise_output_delete(output);
}
19 changes: 17 additions & 2 deletions src/miral/system_compositor_window_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@
#ifndef MIRAL_SYSTEM_COMPOSITOR_WINDOW_MANAGER_H
#define MIRAL_SYSTEM_COMPOSITOR_WINDOW_MANAGER_H

#include "active_outputs.h"

#include <mir/shell/window_manager.h>
#include <mir/graphics/display_configuration.h>
#include <mir/observer_registrar.h>

#include <map>
#include <mutex>
Expand All @@ -27,23 +30,30 @@ namespace mir
{
namespace shell { class DisplayLayout; class FocusController; }
namespace scene { class SessionCoordinator; }
namespace graphics { class DisplayConfigurationObserver; }
}

namespace miral {

class DisplayConfigurationListeners;

/// A newer iteration of the SystemCompositorWindowManager which provides much of
/// the same functionality as its predecessor, but relies upon newer concepts
/// introduced by mirAL. This is the default WindowManager used by miral if no
/// other is specified.
///
/// (TODO: It will be a good idea to deprecate: src/include/server/mir/shell/system_compositor_window_manager.h
class SystemCompositorWindowManager: public mir::shell::WindowManager
class SystemCompositorWindowManager: public mir::shell::WindowManager,
private ActiveOutputsListener
{
public:
SystemCompositorWindowManager(
mir::shell::FocusController* focus_controller,
std::shared_ptr<mir::shell::DisplayLayout> const& display_layout,
std::shared_ptr<mir::scene::SessionCoordinator> const& session_coordinator);
std::shared_ptr<mir::scene::SessionCoordinator> const& session_coordinator,
mir::ObserverRegistrar<mir::graphics::DisplayConfigurationObserver>& display_configuration_observers);

~SystemCompositorWindowManager();

/** @name Customization points
* These are the likely events that a system compositor will care about
Expand All @@ -69,6 +79,7 @@ class SystemCompositorWindowManager: public mir::shell::WindowManager

std::mutex mutable mutex;
OutputMap output_map;
std::shared_ptr<DisplayConfigurationListeners> const display_config_monitor;

void add_session(std::shared_ptr<mir::scene::Session> const& session) override;

Expand Down Expand Up @@ -121,6 +132,10 @@ class SystemCompositorWindowManager: public mir::shell::WindowManager
std::shared_ptr<mir::scene::Surface> const& surface,
MirWindowAttrib attrib,
int value) override;

void advise_output_create(Output const& output) override;
void advise_output_update(Output const& updated, Output const& original) override;
void advise_output_delete(Output const& output) override;
};
}

Expand Down

0 comments on commit 42a0989

Please sign in to comment.