diff options
Diffstat (limited to 'dwl.c')
| -rw-r--r-- | dwl.c | 22 | 
1 files changed, 6 insertions, 16 deletions
| @@ -1540,9 +1540,8 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy,  	struct timespec now;  	int internal_call = !time; -	/* Use top level surface if nothing more specific given */ -	if (c && !surface) -		surface = client_surface(c); +	if (sloppyfocus && !internal_call && c && !client_is_unmanaged(c)) +		focusclient(c, 0);  	/* If surface is NULL, clear pointer focus */  	if (!surface) { @@ -1555,21 +1554,12 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy,  		time = now.tv_sec * 1000 + now.tv_nsec / 1000000;  	} -	/* If surface is already focused, only notify of motion */ -	if (surface == seat->pointer_state.focused_surface) { -		wlr_seat_pointer_notify_motion(seat, time, sx, sy); -		return; -	} - -	/* Otherwise, let the client know that the mouse cursor has entered one -	 * of its surfaces, and make keyboard focus follow if desired. */ +	/* Let the client know that the mouse cursor has entered one +	 * of its surfaces, and make keyboard focus follow if desired. +	 * wlroots makes this a no-op if surface is already focused */  	wlr_seat_pointer_notify_enter(seat, surface, sx, sy); +	wlr_seat_pointer_notify_motion(seat, time, sx, sy); -	if (!c || client_is_unmanaged(c)) -		return; - -	if (sloppyfocus && !internal_call) -		focusclient(c, 0);  }  void | 
