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 "cursor.h"
|
||||||
#include "dnd.h"
|
#include "dnd.h"
|
||||||
#include "labwc.h" /* for struct seat */
|
#include "labwc.h" /* for struct seat */
|
||||||
|
#include "view.h"
|
||||||
|
|
||||||
/* Internal DnD icon handlers */
|
/* Internal DnD icon handlers */
|
||||||
static void
|
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);
|
wlr_scene_node_set_enabled(&seat->drag.icons->node, false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Keyboard focus is not changed during drag, so we need to refocus the
|
* The default focus behaviour at the end of a dnd operation is that the
|
||||||
* current surface under the cursor.
|
* 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);
|
struct cursor_context ctx = get_cursor_context(seat->server);
|
||||||
if (!ctx.surface) {
|
if (!ctx.surface) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
seat_focus_surface(seat, NULL);
|
seat_focus_surface(seat, NULL);
|
||||||
seat_focus_surface(seat, ctx.surface);
|
seat_focus_surface(seat, ctx.surface);
|
||||||
|
|
||||||
|
if (ctx.view && rc.raise_on_focus) {
|
||||||
|
view_move_to_front(ctx.view);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue