summaryrefslogtreecommitdiff
path: root/src/events/Monitors.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2024-07-21 13:09:54 +0200
committerGitHub <noreply@github.com>2024-07-21 13:09:54 +0200
commit016da234d0e852de3ef20eb2e89ac58d2a85f6e7 (patch)
tree496085987176551b0794fffc069877d44943e2f1 /src/events/Monitors.cpp
parentf642fb97df5c69267a03452533de383ff8023570 (diff)
Core: Move to aquamarine (#6608)
Moves Hyprland from wlroots to aquamarine for the backend. --------- Signed-off-by: Vaxry <vaxry@vaxry.net> Co-authored-by: Mihai Fufezan <mihai@fufexan.net> Co-authored-by: Jan Beich <jbeich@FreeBSD.org> Co-authored-by: vaxerski <vaxerski@users.noreply.github.com> Co-authored-by: UjinT34 <41110182+UjinT34@users.noreply.github.com> Co-authored-by: Tom Englund <tomenglund26@gmail.com> Co-authored-by: Ikalco <73481042+ikalco@users.noreply.github.com> Co-authored-by: diniamo <diniamo53@gmail.com>
Diffstat (limited to 'src/events/Monitors.cpp')
-rw-r--r--src/events/Monitors.cpp135
1 files changed, 8 insertions, 127 deletions
diff --git a/src/events/Monitors.cpp b/src/events/Monitors.cpp
index 2536e1f7..40b6f17e 100644
--- a/src/events/Monitors.cpp
+++ b/src/events/Monitors.cpp
@@ -5,6 +5,7 @@
#include "Events.hpp"
#include "../debug/HyprCtl.hpp"
#include "../config/ConfigValue.hpp"
+#include <aquamarine/output/Output.hpp>
// --------------------------------------------------------- //
// __ __ ____ _ _ _____ _______ ____ _____ _____ //
@@ -16,99 +17,10 @@
// //
// --------------------------------------------------------- //
-static void checkDefaultCursorWarp(SP<CMonitor> PNEWMONITOR, std::string monitorName) {
-
- static auto PCURSORMONITOR = CConfigValue<std::string>("cursor:default_monitor");
- static auto firstMonitorAdded = std::chrono::steady_clock::now();
- static bool cursorDefaultDone = false;
- static bool firstLaunch = true;
-
- const auto POS = PNEWMONITOR->middle();
-
- // by default, cursor should be set to first monitor detected
- // this is needed as a default if the monitor given in config above doesn't exist
- if (firstLaunch) {
- firstLaunch = false;
- g_pCompositor->warpCursorTo(POS, true);
- g_pInputManager->refocus();
- }
-
- if (cursorDefaultDone || *PCURSORMONITOR == STRVAL_EMPTY)
- return;
-
- // after 10s, don't set cursor to default monitor
- auto timePassedSec = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::steady_clock::now() - firstMonitorAdded);
- if (timePassedSec.count() > 10) {
- cursorDefaultDone = true;
- return;
- }
-
- if (*PCURSORMONITOR == monitorName) {
- cursorDefaultDone = true;
- g_pCompositor->warpCursorTo(POS, true);
- g_pInputManager->refocus();
- }
-}
-
-void Events::listener_newOutput(wl_listener* listener, void* data) {
- // new monitor added, let's accommodate for that.
- const auto OUTPUT = (wlr_output*)data;
-
- if (!OUTPUT->name) {
- Debug::log(ERR, "New monitor has no name?? Ignoring");
- return;
- }
-
- // add it to real
- auto PNEWMONITOR = g_pCompositor->m_vRealMonitors.emplace_back(makeShared<CMonitor>());
- if (std::string("HEADLESS-1") == OUTPUT->name)
- g_pCompositor->m_pUnsafeOutput = PNEWMONITOR.get();
-
- PNEWMONITOR->output = OUTPUT;
- PNEWMONITOR->self = PNEWMONITOR;
- const bool FALLBACK = g_pCompositor->m_pUnsafeOutput ? OUTPUT == g_pCompositor->m_pUnsafeOutput->output : false;
- PNEWMONITOR->ID = FALLBACK ? -1 : g_pCompositor->getNextAvailableMonitorID(OUTPUT->name);
- PNEWMONITOR->isUnsafeFallback = FALLBACK;
-
- EMIT_HOOK_EVENT("newMonitor", PNEWMONITOR);
-
- if (!FALLBACK)
- PNEWMONITOR->onConnect(false);
-
- if (!PNEWMONITOR->m_bEnabled || FALLBACK)
- return;
-
- // ready to process if we have a real monitor
-
- if ((!g_pHyprRenderer->m_pMostHzMonitor || PNEWMONITOR->refreshRate > g_pHyprRenderer->m_pMostHzMonitor->refreshRate) && PNEWMONITOR->m_bEnabled)
- g_pHyprRenderer->m_pMostHzMonitor = PNEWMONITOR.get();
-
- g_pCompositor->m_bReadyToProcess = true;
-
- g_pConfigManager->m_bWantsMonitorReload = true;
- g_pCompositor->scheduleFrameForMonitor(PNEWMONITOR.get());
-
- checkDefaultCursorWarp(PNEWMONITOR, OUTPUT->name);
-
- for (auto& w : g_pCompositor->m_vWindows) {
- if (w->m_iMonitorID == PNEWMONITOR->ID) {
- w->m_iLastSurfaceMonitorID = -1;
- w->updateSurfaceScaleTransformDetails();
- }
- }
-}
-
void Events::listener_monitorFrame(void* owner, void* data) {
- if (g_pCompositor->m_bExitTriggered) {
- // Only signal cleanup once
- g_pCompositor->m_bExitTriggered = false;
- g_pCompositor->cleanup();
- return;
- }
-
CMonitor* const PMONITOR = (CMonitor*)owner;
- if ((g_pCompositor->m_sWLRSession && !g_pCompositor->m_sWLRSession->active) || !g_pCompositor->m_bSessionActive || g_pCompositor->m_bUnsafeState) {
+ if ((g_pCompositor->m_pAqBackend->hasSession() && !g_pCompositor->m_pAqBackend->session->active) || !g_pCompositor->m_bSessionActive || g_pCompositor->m_bUnsafeState) {
Debug::log(WARN, "Attempted to render frame on inactive session!");
if (g_pCompositor->m_bUnsafeState && std::ranges::any_of(g_pCompositor->m_vMonitors.begin(), g_pCompositor->m_vMonitors.end(), [&](auto& m) {
@@ -172,12 +84,10 @@ void Events::listener_monitorFrame(void* owner, void* data) {
}
void Events::listener_monitorDestroy(void* owner, void* data) {
- const auto OUTPUT = (wlr_output*)data;
-
- CMonitor* pMonitor = nullptr;
+ CMonitor* pMonitor = (CMonitor*)owner;
for (auto& m : g_pCompositor->m_vRealMonitors) {
- if (m->output == OUTPUT) {
+ if (m->output == pMonitor->output) {
pMonitor = m.get();
break;
}
@@ -188,9 +98,6 @@ void Events::listener_monitorDestroy(void* owner, void* data) {
Debug::log(LOG, "Destroy called for monitor {}", pMonitor->output->name);
- if (pMonitor->output->idle_frame)
- wl_event_source_remove(pMonitor->output->idle_frame);
-
pMonitor->onDisconnect(true);
pMonitor->output = nullptr;
@@ -201,44 +108,18 @@ void Events::listener_monitorDestroy(void* owner, void* data) {
std::erase_if(g_pCompositor->m_vRealMonitors, [&](SP<CMonitor>& el) { return el.get() == pMonitor; });
}
-void Events::listener_monitorStateRequest(void* owner, void* data) {
- const auto PMONITOR = (CMonitor*)owner;
- const auto E = (wlr_output_event_request_state*)data;
-
- if (!PMONITOR->createdByUser)
- return;
-
- const auto SIZE = E->state->mode ? Vector2D{E->state->mode->width, E->state->mode->height} : Vector2D{E->state->custom_mode.width, E->state->custom_mode.height};
-
- PMONITOR->forceSize = SIZE;
-
- SMonitorRule rule = PMONITOR->activeMonitorRule;
- rule.resolution = SIZE;
-
- g_pHyprRenderer->applyMonitorRule(PMONITOR, &rule);
-}
-
-void Events::listener_monitorDamage(void* owner, void* data) {
- const auto PMONITOR = (CMonitor*)owner;
- const auto E = (wlr_output_event_damage*)data;
-
- PMONITOR->addDamage(E->damage);
-}
-
void Events::listener_monitorNeedsFrame(void* owner, void* data) {
const auto PMONITOR = (CMonitor*)owner;
- g_pCompositor->scheduleFrameForMonitor(PMONITOR);
+ g_pCompositor->scheduleFrameForMonitor(PMONITOR, Aquamarine::IOutput::AQ_SCHEDULE_NEEDS_FRAME);
}
void Events::listener_monitorCommit(void* owner, void* data) {
const auto PMONITOR = (CMonitor*)owner;
- const auto E = (wlr_output_event_commit*)data;
-
- if (E->state->committed & WLR_OUTPUT_STATE_BUFFER) {
- g_pProtocolManager->m_pScreencopyProtocolManager->onOutputCommit(PMONITOR, E);
- g_pProtocolManager->m_pToplevelExportProtocolManager->onOutputCommit(PMONITOR, E);
+ if (true) { // FIXME: E->state->committed & WLR_OUTPUT_STATE_BUFFER
+ g_pProtocolManager->m_pScreencopyProtocolManager->onOutputCommit(PMONITOR);
+ g_pProtocolManager->m_pToplevelExportProtocolManager->onOutputCommit(PMONITOR);
}
}