mirror of
https://github.com/labwc/labwc.git
synced 2025-11-04 13:30:07 -05:00
dnd: fix focus at end of dnd operation
By default, leave keyboard-focus with the surface that originally had it at the end of a dnd operation. This is consistent with the default behaviour of openbox and mutter. If the 'focus/followMouse' option is enabled, then focus on the surface under the cursor at the end of the dnd operation. Fixes: issue #976
This commit is contained in:
parent
40aba9e542
commit
598044aa6b
1 changed files with 16 additions and 2 deletions
18
src/dnd.c
18
src/dnd.c
|
|
@ -7,6 +7,7 @@
|
|||
#include "cursor.h"
|
||||
#include "dnd.h"
|
||||
#include "labwc.h" /* for struct seat */
|
||||
#include "view.h"
|
||||
|
||||
/* Internal DnD icon handlers */
|
||||
static void
|
||||
|
|
@ -138,15 +139,28 @@ handle_drag_destroy(struct wl_listener *listener, void *data)
|
|||
wlr_scene_node_set_enabled(&seat->drag.icons->node, false);
|
||||
|
||||
/*
|
||||
* Keyboard focus is not changed during drag, so we need to refocus the
|
||||
* current surface under the cursor.
|
||||
* The default focus behaviour at the end of a dnd operation is that the
|
||||
* window that originally had keyboard-focus retains that focus. This is
|
||||
* consistent with the default behaviour of openbox and mutter.
|
||||
*
|
||||
* However, if the 'focus/followMouse' option is enabled we need to
|
||||
* refocus the current surface under the cursor because keyboard focus
|
||||
* is not changed during drag.
|
||||
*/
|
||||
if (!rc.focus_follow_mouse) {
|
||||
return;
|
||||
}
|
||||
|
||||
struct cursor_context ctx = get_cursor_context(seat->server);
|
||||
if (!ctx.surface) {
|
||||
return;
|
||||
}
|
||||
seat_focus_surface(seat, NULL);
|
||||
seat_focus_surface(seat, ctx.surface);
|
||||
|
||||
if (ctx.view && rc.raise_on_focus) {
|
||||
view_move_to_front(ctx.view);
|
||||
}
|
||||
}
|
||||
|
||||
/* Public API */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue