summaryrefslogtreecommitdiff
path: root/src/protocols/FocusGrab.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-05-10 18:27:57 +0100
committerVaxry <43317083+vaxerski@users.noreply.github.com>2024-05-14 23:02:24 +0100
commit121d3a72137d4780602cf245704615f63357ea22 (patch)
treeb25c8a3ee7b239006281f0e00110d1c324b8cedc /src/protocols/FocusGrab.cpp
parent4cdddcfe466cb21db81af0ac39e51cc15f574da9 (diff)
wl_seat: move to hyprland impl
Diffstat (limited to 'src/protocols/FocusGrab.cpp')
-rw-r--r--src/protocols/FocusGrab.cpp291
1 files changed, 146 insertions, 145 deletions
diff --git a/src/protocols/FocusGrab.cpp b/src/protocols/FocusGrab.cpp
index 1ab4d4a6..4189ed6e 100644
--- a/src/protocols/FocusGrab.cpp
+++ b/src/protocols/FocusGrab.cpp
@@ -1,124 +1,125 @@
#include "FocusGrab.hpp"
#include "Compositor.hpp"
#include <hyprland-focus-grab-v1.hpp>
-#include <managers/input/InputManager.hpp>
+#include "../managers/input/InputManager.hpp"
+#include "../managers/SeatManager.hpp"
#include <cstdint>
#include <memory>
#include <wayland-server.h>
-static void focus_grab_pointer_enter(wlr_seat_pointer_grab* grab, wlr_surface* surface, double sx, double sy) {
- if (static_cast<CFocusGrab*>(grab->data)->isSurfaceComitted(surface))
- wlr_seat_pointer_enter(grab->seat, surface, sx, sy);
- else
- wlr_seat_pointer_clear_focus(grab->seat);
-}
-
-static void focus_grab_pointer_clear_focus(wlr_seat_pointer_grab* grab) {
- wlr_seat_pointer_clear_focus(grab->seat);
-}
-
-static void focus_grab_pointer_motion(wlr_seat_pointer_grab* grab, uint32_t time, double sx, double sy) {
- wlr_seat_pointer_send_motion(grab->seat, time, sx, sy);
-}
-
-static uint32_t focus_grab_pointer_button(wlr_seat_pointer_grab* grab, uint32_t time, uint32_t button, wl_pointer_button_state state) {
- uint32_t serial = wlr_seat_pointer_send_button(grab->seat, time, button, state);
-
- if (serial)
- return serial;
- else {
- static_cast<CFocusGrab*>(grab->data)->finish(true);
- return 0;
- }
-}
-
-static void focus_grab_pointer_axis(wlr_seat_pointer_grab* grab, uint32_t time, enum wl_pointer_axis orientation, double value, int32_t value_discrete,
- enum wl_pointer_axis_source source, enum wl_pointer_axis_relative_direction relative_direction) {
- wlr_seat_pointer_send_axis(grab->seat, time, orientation, value, value_discrete, source, relative_direction);
-}
-
-static void focus_grab_pointer_frame(wlr_seat_pointer_grab* grab) {
- wlr_seat_pointer_send_frame(grab->seat);
-}
-
-static void focus_grab_pointer_cancel(wlr_seat_pointer_grab* grab) {
- static_cast<CFocusGrab*>(grab->data)->finish(true);
-}
-
-static const wlr_pointer_grab_interface focus_grab_pointer_impl = {
- .enter = focus_grab_pointer_enter,
- .clear_focus = focus_grab_pointer_clear_focus,
- .motion = focus_grab_pointer_motion,
- .button = focus_grab_pointer_button,
- .axis = focus_grab_pointer_axis,
- .frame = focus_grab_pointer_frame,
- .cancel = focus_grab_pointer_cancel,
-};
-
-static void focus_grab_keyboard_enter(wlr_seat_keyboard_grab* grab, wlr_surface* surface, const uint32_t keycodes[], size_t num_keycodes, const wlr_keyboard_modifiers* modifiers) {
- if (static_cast<CFocusGrab*>(grab->data)->isSurfaceComitted(surface))
- wlr_seat_keyboard_enter(grab->seat, surface, keycodes, num_keycodes, modifiers);
-
- // otherwise the last grabbed window should retain keyboard focus.
-}
-
-static void focus_grab_keyboard_clear_focus(wlr_seat_keyboard_grab* grab) {
- static_cast<CFocusGrab*>(grab->data)->finish(true);
-}
-
-static void focus_grab_keyboard_key(wlr_seat_keyboard_grab* grab, uint32_t time, uint32_t key, uint32_t state) {
- wlr_seat_keyboard_send_key(grab->seat, time, key, state);
-}
-
-static void focus_grab_keyboard_modifiers(wlr_seat_keyboard_grab* grab, const wlr_keyboard_modifiers* modifiers) {
- wlr_seat_keyboard_send_modifiers(grab->seat, modifiers);
-}
-
-static void focus_grab_keyboard_cancel(wlr_seat_keyboard_grab* grab) {
- static_cast<CFocusGrab*>(grab->data)->finish(true);
-}
-
-static const wlr_keyboard_grab_interface focus_grab_keyboard_impl = {
- .enter = focus_grab_keyboard_enter,
- .clear_focus = focus_grab_keyboard_clear_focus,
- .key = focus_grab_keyboard_key,
- .modifiers = focus_grab_keyboard_modifiers,
- .cancel = focus_grab_keyboard_cancel,
-};
-
-static uint32_t focus_grab_touch_down(wlr_seat_touch_grab* grab, uint32_t time, wlr_touch_point* point) {
- if (!static_cast<CFocusGrab*>(grab->data)->isSurfaceComitted(point->surface))
- return 0;
-
- return wlr_seat_touch_send_down(grab->seat, point->surface, time, point->touch_id, point->sx, point->sy);
-}
-
-static void focus_grab_touch_up(wlr_seat_touch_grab* grab, uint32_t time, wlr_touch_point* point) {
- wlr_seat_touch_send_up(grab->seat, time, point->touch_id);
-}
-
-static void focus_grab_touch_motion(wlr_seat_touch_grab* grab, uint32_t time, wlr_touch_point* point) {
- wlr_seat_touch_send_motion(grab->seat, time, point->touch_id, point->sx, point->sy);
-}
-
-static void focus_grab_touch_enter(wlr_seat_touch_grab* grab, uint32_t time, wlr_touch_point* point) {}
-
-static void focus_grab_touch_frame(wlr_seat_touch_grab* grab) {
- wlr_seat_touch_send_frame(grab->seat);
-}
-
-static void focus_grab_touch_cancel(wlr_seat_touch_grab* grab) {
- static_cast<CFocusGrab*>(grab->data)->finish(true);
-}
-
-static const wlr_touch_grab_interface focus_grab_touch_impl = {
- .down = focus_grab_touch_down,
- .up = focus_grab_touch_up,
- .motion = focus_grab_touch_motion,
- .enter = focus_grab_touch_enter,
- .frame = focus_grab_touch_frame,
- .cancel = focus_grab_touch_cancel,
-};
+// static void focus_grab_pointer_enter(wlr_seat_pointer_grab* grab, wlr_surface* surface, double sx, double sy) {
+// if (static_cast<CFocusGrab*>(grab->data)->isSurfaceComitted(surface))
+// wlr_seat_pointer_enter(grab->seat, surface, sx, sy);
+// else
+// wlr_seat_pointer_clear_focus(grab->seat);
+// }
+
+// static void focus_grab_pointer_clear_focus(wlr_seat_pointer_grab* grab) {
+// wlr_seat_pointer_clear_focus(grab->seat);
+// }
+
+// static void focus_grab_pointer_motion(wlr_seat_pointer_grab* grab, uint32_t time, double sx, double sy) {
+// wlr_seat_pointer_send_motion(grab->seat, time, sx, sy);
+// }
+
+// static uint32_t focus_grab_pointer_button(wlr_seat_pointer_grab* grab, uint32_t time, uint32_t button, wl_pointer_button_state state) {
+// uint32_t serial = wlr_seat_pointer_send_button(grab->seat, time, button, state);
+
+// if (serial)
+// return serial;
+// else {
+// static_cast<CFocusGrab*>(grab->data)->finish(true);
+// return 0;
+// }
+// }
+
+// static void focus_grab_pointer_axis(wlr_seat_pointer_grab* grab, uint32_t time, enum wl_pointer_axis orientation, double value, int32_t value_discrete,
+// enum wl_pointer_axis_source source, enum wl_pointer_axis_relative_direction relative_direction) {
+// wlr_seat_pointer_send_axis(grab->seat, time, orientation, value, value_discrete, source, relative_direction);
+// }
+
+// static void focus_grab_pointer_frame(wlr_seat_pointer_grab* grab) {
+// wlr_seat_pointer_send_frame(grab->seat);
+// }
+
+// static void focus_grab_pointer_cancel(wlr_seat_pointer_grab* grab) {
+// static_cast<CFocusGrab*>(grab->data)->finish(true);
+// }
+
+// static const wlr_pointer_grab_interface focus_grab_pointer_impl = {
+// .enter = focus_grab_pointer_enter,
+// .clear_focus = focus_grab_pointer_clear_focus,
+// .motion = focus_grab_pointer_motion,
+// .button = focus_grab_pointer_button,
+// .axis = focus_grab_pointer_axis,
+// .frame = focus_grab_pointer_frame,
+// .cancel = focus_grab_pointer_cancel,
+// };
+
+// static void focus_grab_keyboard_enter(wlr_seat_keyboard_grab* grab, wlr_surface* surface, const uint32_t keycodes[], size_t num_keycodes, const wlr_keyboard_modifiers* modifiers) {
+// if (static_cast<CFocusGrab*>(grab->data)->isSurfaceComitted(surface))
+// wlr_seat_keyboard_enter(grab->seat, surface, keycodes, num_keycodes, modifiers);
+
+// // otherwise the last grabbed window should retain keyboard focus.
+// }
+
+// static void focus_grab_keyboard_clear_focus(wlr_seat_keyboard_grab* grab) {
+// static_cast<CFocusGrab*>(grab->data)->finish(true);
+// }
+
+// static void focus_grab_keyboard_key(wlr_seat_keyboard_grab* grab, uint32_t time, uint32_t key, uint32_t state) {
+// wlr_seat_keyboard_send_key(grab->seat, time, key, state);
+// }
+
+// static void focus_grab_keyboard_modifiers(wlr_seat_keyboard_grab* grab, const wlr_keyboard_modifiers* modifiers) {
+// wlr_seat_keyboard_send_modifiers(grab->seat, modifiers);
+// }
+
+// static void focus_grab_keyboard_cancel(wlr_seat_keyboard_grab* grab) {
+// static_cast<CFocusGrab*>(grab->data)->finish(true);
+// }
+
+// static const wlr_keyboard_grab_interface focus_grab_keyboard_impl = {
+// .enter = focus_grab_keyboard_enter,
+// .clear_focus = focus_grab_keyboard_clear_focus,
+// .key = focus_grab_keyboard_key,
+// .modifiers = focus_grab_keyboard_modifiers,
+// .cancel = focus_grab_keyboard_cancel,
+// };
+
+// static uint32_t focus_grab_touch_down(wlr_seat_touch_grab* grab, uint32_t time, wlr_touch_point* point) {
+// if (!static_cast<CFocusGrab*>(grab->data)->isSurfaceComitted(point->surface))
+// return 0;
+
+// return wlr_seat_touch_send_down(grab->seat, point->surface, time, point->touch_id, point->sx, point->sy);
+// }
+
+// static void focus_grab_touch_up(wlr_seat_touch_grab* grab, uint32_t time, wlr_touch_point* point) {
+// wlr_seat_touch_send_up(grab->seat, time, point->touch_id);
+// }
+
+// static void focus_grab_touch_motion(wlr_seat_touch_grab* grab, uint32_t time, wlr_touch_point* point) {
+// wlr_seat_touch_send_motion(grab->seat, time, point->touch_id, point->sx, point->sy);
+// }
+
+// static void focus_grab_touch_enter(wlr_seat_touch_grab* grab, uint32_t time, wlr_touch_point* point) {}
+
+// static void focus_grab_touch_frame(wlr_seat_touch_grab* grab) {
+// wlr_seat_touch_send_frame(grab->seat);
+// }
+
+// static void focus_grab_touch_cancel(wlr_seat_touch_grab* grab) {
+// static_cast<CFocusGrab*>(grab->data)->finish(true);
+// }
+
+// static const wlr_touch_grab_interface focus_grab_touch_impl = {
+// .down = focus_grab_touch_down,
+// .up = focus_grab_touch_up,
+// .motion = focus_grab_touch_motion,
+// .enter = focus_grab_touch_enter,
+// .frame = focus_grab_touch_frame,
+// .cancel = focus_grab_touch_cancel,
+// };
CFocusGrabSurfaceState::CFocusGrabSurfaceState(CFocusGrab* grab, wlr_surface* surface) {
hyprListener_surfaceDestroy.initCallback(
@@ -133,14 +134,14 @@ CFocusGrab::CFocusGrab(SP<CHyprlandFocusGrabV1> resource_) : resource(resource_)
if (!resource->resource())
return;
- m_sPointerGrab.interface = &focus_grab_pointer_impl;
- m_sPointerGrab.data = this;
+ // m_sPointerGrab.interface = &focus_grab_pointer_impl;
+ // m_sPointerGrab.data = this;
- m_sKeyboardGrab.interface = &focus_grab_keyboard_impl;
- m_sKeyboardGrab.data = this;
+ // m_sKeyboardGrab.interface = &focus_grab_keyboard_impl;
+ // m_sKeyboardGrab.data = this;
- m_sTouchGrab.interface = &focus_grab_touch_impl;
- m_sTouchGrab.data = this;
+ // m_sTouchGrab.interface = &focus_grab_touch_impl;
+ // m_sTouchGrab.data = this;
resource->setDestroy([this](CHyprlandFocusGrabV1* pMgr) { PROTO::focusGrab->destroyGrab(this); });
resource->setOnDestroy([this](CHyprlandFocusGrabV1* pMgr) { PROTO::focusGrab->destroyGrab(this); });
@@ -167,21 +168,21 @@ bool CFocusGrab::isSurfaceComitted(wlr_surface* surface) {
void CFocusGrab::start() {
if (!m_bGrabActive) {
- wlr_seat_pointer_start_grab(g_pCompositor->m_sSeat.seat, &m_sPointerGrab);
- wlr_seat_keyboard_start_grab(g_pCompositor->m_sSeat.seat, &m_sKeyboardGrab);
- wlr_seat_touch_start_grab(g_pCompositor->m_sSeat.seat, &m_sTouchGrab);
+ // wlr_seat_pointer_start_grab(g_pCompositor->m_sSeat.seat, &m_sPointerGrab);
+ // wlr_seat_keyboard_start_grab(g_pCompositor->m_sSeat.seat, &m_sKeyboardGrab);
+ // wlr_seat_touch_start_grab(g_pCompositor->m_sSeat.seat, &m_sTouchGrab);
m_bGrabActive = true;
// Ensure the grab ends if another grab begins, including from xdg_popup::grab.
- hyprListener_pointerGrabStarted.initCallback(
- &g_pCompositor->m_sSeat.seat->events.pointer_grab_begin, [this](void*, void*) { finish(true); }, this, "CFocusGrab");
+ // hyprListener_pointerGrabStarted.initCallback(
+ // &g_pCompositor->m_sSeat.seat->events.pointer_grab_begin, [this](void*, void*) { finish(true); }, this, "CFocusGrab");
- hyprListener_keyboardGrabStarted.initCallback(
- &g_pCompositor->m_sSeat.seat->events.keyboard_grab_begin, [this](void*, void*) { finish(true); }, this, "CFocusGrab");
+ // hyprListener_keyboardGrabStarted.initCallback(
+ // &g_pCompositor->m_sSeat.seat->events.keyboard_grab_begin, [this](void*, void*) { finish(true); }, this, "CFocusGrab");
- hyprListener_touchGrabStarted.initCallback(
- &g_pCompositor->m_sSeat.seat->events.touch_grab_begin, [this](void*, void*) { finish(true); }, this, "CFocusGrab");
+ // hyprListener_touchGrabStarted.initCallback(
+ // &g_pCompositor->m_sSeat.seat->events.touch_grab_begin, [this](void*, void*) { finish(true); }, this, "CFocusGrab");
}
// Ensure new surfaces are focused if under the mouse when comitted.
@@ -192,28 +193,28 @@ void CFocusGrab::start() {
void CFocusGrab::finish(bool sendCleared) {
if (m_bGrabActive) {
m_bGrabActive = false;
- hyprListener_pointerGrabStarted.removeCallback();
- hyprListener_keyboardGrabStarted.removeCallback();
- hyprListener_touchGrabStarted.removeCallback();
+ // hyprListener_pointerGrabStarted.removeCallback();
+ // hyprListener_keyboardGrabStarted.removeCallback();
+ // hyprListener_touchGrabStarted.removeCallback();
// Only clear grabs that belong to this focus grab. When superseded by another grab
// or xdg_popup grab we might not own the current grab.
bool hadGrab = false;
- if (g_pCompositor->m_sSeat.seat->pointer_state.grab == &m_sPointerGrab) {
- wlr_seat_pointer_end_grab(g_pCompositor->m_sSeat.seat);
- hadGrab = true;
- }
+ // if (g_pCompositor->m_sSeat.seat->pointer_state.grab == &m_sPointerGrab) {
+ // wlr_seat_pointer_end_grab(g_pCompositor->m_sSeat.seat);
+ // hadGrab = true;
+ // }
- if (g_pCompositor->m_sSeat.seat->keyboard_state.grab == &m_sKeyboardGrab) {
- wlr_seat_keyboard_end_grab(g_pCompositor->m_sSeat.seat);
- hadGrab = true;
- }
+ // if (g_pCompositor->m_sSeat.seat->keyboard_state.grab == &m_sKeyboardGrab) {
+ // wlr_seat_keyboard_end_grab(g_pCompositor->m_sSeat.seat);
+ // hadGrab = true;
+ // }
- if (g_pCompositor->m_sSeat.seat->touch_state.grab == &m_sTouchGrab) {
- wlr_seat_touch_end_grab(g_pCompositor->m_sSeat.seat);
- hadGrab = true;
- }
+ // if (g_pCompositor->m_sSeat.seat->touch_state.grab == &m_sTouchGrab) {
+ // wlr_seat_touch_end_grab(g_pCompositor->m_sSeat.seat);
+ // hadGrab = true;
+ // }
m_mSurfaces.clear();
@@ -248,7 +249,7 @@ void CFocusGrab::eraseSurface(wlr_surface* surface) {
}
void CFocusGrab::refocusKeyboard() {
- auto keyboardSurface = g_pCompositor->m_sSeat.seat->keyboard_state.focused_surface;
+ auto keyboardSurface = g_pSeatManager->state.keyboardFocus;
if (keyboardSurface != nullptr && isSurfaceComitted(keyboardSurface))
return;