steamcompmgr: don't always warp cursor on mouse input focus change
This commit is contained in:
parent
3db90edd75
commit
66064b23cf
3 changed files with 15 additions and 7 deletions
|
@ -1782,7 +1782,7 @@ found:
|
||||||
wlserver_lock();
|
wlserver_lock();
|
||||||
|
|
||||||
if ( inputFocus->surface.wlr != nullptr )
|
if ( inputFocus->surface.wlr != nullptr )
|
||||||
wlserver_mousefocus( inputFocus->surface.wlr );
|
wlserver_mousefocus( inputFocus->surface.wlr, cursor->x(), cursor->y() );
|
||||||
|
|
||||||
if ( keyboardFocusWin->surface.wlr != nullptr )
|
if ( keyboardFocusWin->surface.wlr != nullptr )
|
||||||
wlserver_keyboardfocus( keyboardFocusWin->surface.wlr );
|
wlserver_keyboardfocus( keyboardFocusWin->surface.wlr );
|
||||||
|
@ -1796,8 +1796,7 @@ found:
|
||||||
currentInputFocusMode = inputFocus->inputFocusMode;
|
currentInputFocusMode = inputFocus->inputFocusMode;
|
||||||
currentKeyboardFocusWindow = keyboardFocusWin->id;
|
currentKeyboardFocusWindow = keyboardFocusWin->id;
|
||||||
|
|
||||||
// at some point make wlserver_mousefocus smarter with preserving pointer position
|
// cursor is likely not interactable anymore in its original context, hide
|
||||||
// for now hide the jarring warp and possible image change in case cursor was still on screen
|
|
||||||
cursor->hide();
|
cursor->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -790,11 +790,20 @@ void wlserver_key( uint32_t key, bool press, uint32_t time )
|
||||||
wlr_seat_keyboard_notify_key( wlserver.wlr.seat, time, key, press );
|
wlr_seat_keyboard_notify_key( wlserver.wlr.seat, time, key, press );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wlserver_mousefocus( struct wlr_surface *wlrsurface )
|
void wlserver_mousefocus( struct wlr_surface *wlrsurface, int x /* = 0 */, int y /* = 0 */ )
|
||||||
{
|
{
|
||||||
wlserver.mouse_focus_surface = wlrsurface;
|
wlserver.mouse_focus_surface = wlrsurface;
|
||||||
wlserver.mouse_surface_cursorx = wlrsurface->current.width / 2.0;
|
|
||||||
wlserver.mouse_surface_cursory = wlrsurface->current.height / 2.0;
|
if ( x < wlrsurface->current.width && y < wlrsurface->current.height )
|
||||||
|
{
|
||||||
|
wlserver.mouse_surface_cursorx = x;
|
||||||
|
wlserver.mouse_surface_cursory = y;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wlserver.mouse_surface_cursorx = wlrsurface->current.width / 2.0;
|
||||||
|
wlserver.mouse_surface_cursory = wlrsurface->current.height / 2.0;
|
||||||
|
}
|
||||||
wlr_seat_pointer_notify_enter( wlserver.wlr.seat, wlrsurface, wlserver.mouse_surface_cursorx, wlserver.mouse_surface_cursory );
|
wlr_seat_pointer_notify_enter( wlserver.wlr.seat, wlrsurface, wlserver.mouse_surface_cursorx, wlserver.mouse_surface_cursory );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ void wlserver_unlock(void);
|
||||||
void wlserver_keyboardfocus( struct wlr_surface *surface );
|
void wlserver_keyboardfocus( struct wlr_surface *surface );
|
||||||
void wlserver_key( uint32_t key, bool press, uint32_t time );
|
void wlserver_key( uint32_t key, bool press, uint32_t time );
|
||||||
|
|
||||||
void wlserver_mousefocus( struct wlr_surface *wlrsurface );
|
void wlserver_mousefocus( struct wlr_surface *wlrsurface, int x = 0, int y = 0 );
|
||||||
void wlserver_mousemotion( int x, int y, uint32_t time );
|
void wlserver_mousemotion( int x, int y, uint32_t time );
|
||||||
void wlserver_mousebutton( int button, bool press, uint32_t time );
|
void wlserver_mousebutton( int button, bool press, uint32_t time );
|
||||||
void wlserver_mousewheel( int x, int y, uint32_t time );
|
void wlserver_mousewheel( int x, int y, uint32_t time );
|
||||||
|
|
Loading…
Reference in a new issue