#pragma once #include "../../defines.hpp" #include #include "../../helpers/WLClasses.hpp" #include "../../Window.hpp" #include "../../helpers/Timer.hpp" enum eClickBehaviorMode { CLICKMODE_DEFAULT = 0, CLICKMODE_KILL }; class CInputManager { public: void onMouseMoved(wlr_pointer_motion_event*); void onMouseWarp(wlr_pointer_motion_absolute_event*); void onMouseButton(wlr_pointer_button_event*); void onKeyboardKey(wlr_keyboard_key_event*, SKeyboard*); void onKeyboardMod(void*, SKeyboard*); void newKeyboard(wlr_input_device*); void newMouse(wlr_input_device*, bool virt = false); void destroyKeyboard(SKeyboard*); void destroyMouse(wlr_input_device*); void constrainMouse(SMouse*, wlr_pointer_constraint_v1*); void recheckConstraint(SMouse*); Vector2D getMouseCoordsInternal(); void refocus(); void setKeyboardLayout(); void updateDragIcon(); void updateCapabilities(wlr_input_device*); void setClickMode(eClickBehaviorMode); eClickBehaviorMode getClickMode(); void processMouseRequest(wlr_seat_pointer_request_set_cursor_event*); // for dragging floating windows CWindow* currentlyDraggedWindow = nullptr; int dragButton = -1; SDrag m_sDrag; std::list m_lConstraints; std::list m_lKeyboards; std::list m_lMice; // tablets std::list m_lTablets; std::list m_lTabletTools; std::list m_lTabletPads; // idle inhibitors std::list m_lIdleInhibitors; void newTabletTool(wlr_input_device*); void newTabletPad(wlr_input_device*); void focusTablet(STablet*, wlr_tablet_tool*, bool motion = false); void newIdleInhibitor(wlr_idle_inhibitor_v1*); void recheckIdleInhibitorStatus(); void onSwipeBegin(wlr_pointer_swipe_begin_event*); void onSwipeEnd(wlr_pointer_swipe_end_event*); void onSwipeUpdate(wlr_pointer_swipe_update_event*); SSwipeGesture m_sActiveSwipe; SKeyboard* m_pActiveKeyboard = nullptr; CTimer m_tmrLastCursorMovement; private: // for click behavior override eClickBehaviorMode m_ecbClickBehavior = CLICKMODE_DEFAULT; Vector2D m_vLastCursorPosFloored = Vector2D(); void processMouseDownNormal(wlr_pointer_button_event* e); void processMouseDownKill(wlr_pointer_button_event* e); uint32_t m_uiCapabilities = 0; void mouseMoveUnified(uint32_t, bool refocus = false); STabletTool* ensureTabletToolPresent(wlr_tablet_tool*); void applyConfigToKeyboard(SKeyboard*); // for shared mods uint32_t accumulateModsFromAllKBs(); }; inline std::unique_ptr g_pInputManager;