mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-23 03:45:58 +01:00
Simulate mouse movement on unmap of popups and subsurfaces
This commit is contained in:
parent
f90ff8303b
commit
11234529db
4 changed files with 18 additions and 2 deletions
|
@ -178,6 +178,8 @@ void Events::listener_unmapPopupXDG(void* owner, void* data) {
|
||||||
g_pHyprRenderer->damageBox(lx - extents.x, ly - extents.y, extents.width + 2, extents.height + 2);
|
g_pHyprRenderer->damageBox(lx - extents.x, ly - extents.y, extents.width + 2, extents.height + 2);
|
||||||
|
|
||||||
PPOPUP->pSurfaceTree = nullptr;
|
PPOPUP->pSurfaceTree = nullptr;
|
||||||
|
|
||||||
|
g_pInputManager->simulateMouseMovement(); // to focus and return back to an appropriate surface
|
||||||
}
|
}
|
||||||
|
|
||||||
void Events::listener_commitPopupXDG(void* owner, void* data) {
|
void Events::listener_commitPopupXDG(void* owner, void* data) {
|
||||||
|
|
|
@ -197,6 +197,8 @@ void Events::listener_unmapSubsurface(void* owner, void* data) {
|
||||||
// subsurface->pChild = nullptr;
|
// subsurface->pChild = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_pInputManager->simulateMouseMovement(); // to focus and return back to an appropriate surface
|
||||||
}
|
}
|
||||||
|
|
||||||
void Events::listener_commitSubsurface(void* owner, void* data) {
|
void Events::listener_commitSubsurface(void* owner, void* data) {
|
||||||
|
|
|
@ -35,6 +35,15 @@ void CInputManager::onMouseWarp(wlr_pointer_motion_absolute_event* e) {
|
||||||
m_bLastInputTouch = false;
|
m_bLastInputTouch = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CInputManager::simulateMouseMovement() {
|
||||||
|
timespec now;
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||||
|
m_vLastCursorPosFloored = m_vLastCursorPosFloored - Vector2D(1, 1); // hack: force the mouseMoveUnified to report without making this a refocus.
|
||||||
|
mouseMoveUnified(now.tv_sec * 1000 + now.tv_nsec / 10000000);
|
||||||
|
|
||||||
|
m_tmrLastCursorMovement.reset();
|
||||||
|
}
|
||||||
|
|
||||||
void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
void CInputManager::mouseMoveUnified(uint32_t time, bool refocus) {
|
||||||
static auto* const PFOLLOWMOUSE = &g_pConfigManager->getConfigValuePtr("input:follow_mouse")->intValue;
|
static auto* const PFOLLOWMOUSE = &g_pConfigManager->getConfigValuePtr("input:follow_mouse")->intValue;
|
||||||
static auto* const PMOUSEDPMS = &g_pConfigManager->getConfigValuePtr("misc:mouse_move_enables_dpms")->intValue;
|
static auto* const PMOUSEDPMS = &g_pConfigManager->getConfigValuePtr("misc:mouse_move_enables_dpms")->intValue;
|
||||||
|
|
|
@ -7,12 +7,14 @@
|
||||||
#include "../../helpers/Timer.hpp"
|
#include "../../helpers/Timer.hpp"
|
||||||
#include "InputMethodRelay.hpp"
|
#include "InputMethodRelay.hpp"
|
||||||
|
|
||||||
enum eClickBehaviorMode {
|
enum eClickBehaviorMode
|
||||||
|
{
|
||||||
CLICKMODE_DEFAULT = 0,
|
CLICKMODE_DEFAULT = 0,
|
||||||
CLICKMODE_KILL
|
CLICKMODE_KILL
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eMouseBindMode {
|
enum eMouseBindMode
|
||||||
|
{
|
||||||
MBIND_INVALID = -1,
|
MBIND_INVALID = -1,
|
||||||
MBIND_MOVE = 0,
|
MBIND_MOVE = 0,
|
||||||
MBIND_RESIZE
|
MBIND_RESIZE
|
||||||
|
@ -72,6 +74,7 @@ class CInputManager {
|
||||||
|
|
||||||
Vector2D getMouseCoordsInternal();
|
Vector2D getMouseCoordsInternal();
|
||||||
void refocus();
|
void refocus();
|
||||||
|
void simulateMouseMovement();
|
||||||
|
|
||||||
void setKeyboardLayout();
|
void setKeyboardLayout();
|
||||||
void setPointerConfigs();
|
void setPointerConfigs();
|
||||||
|
|
Loading…
Reference in a new issue