mirror of
https://codeberg.org/dwl/dwl.git
synced 2026-11-03 20:02:23 +00:00
refactor focusclient()
This commit is contained in:
@@ -1517,7 +1517,7 @@ dirtomon(enum wlr_direction dir)
|
||||
void
|
||||
focusclient(Client *c, LayerSurface *l, int lift)
|
||||
{
|
||||
struct wlr_surface *old = seat->keyboard_state.focused_surface;
|
||||
struct wlr_surface *surface, *old = seat->keyboard_state.focused_surface;
|
||||
int unused_lx, unused_ly, old_client_type;
|
||||
Client *old_c = NULL;
|
||||
LayerSurface *old_l = NULL;
|
||||
@@ -1573,31 +1573,23 @@ focusclient(Client *c, LayerSurface *l, int lift)
|
||||
}
|
||||
printstatus();
|
||||
|
||||
if (l) {
|
||||
/* Focus a layer surface and let the input method follow it */
|
||||
input_method_relay_set_focus(input_method_relay, l->layer_surface->surface);
|
||||
client_notify_enter(l->layer_surface->surface, wlr_seat_get_keyboard(seat));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!c) {
|
||||
if (!c && !l) {
|
||||
/* With no client, all we have left is to clear focus */
|
||||
input_method_relay_set_focus(input_method_relay, NULL);
|
||||
wlr_seat_keyboard_notify_clear_focus(seat);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Change cursor surface */
|
||||
surface = c ? client_surface(c) : l->layer_surface->surface;
|
||||
input_method_relay_set_focus(input_method_relay, surface);
|
||||
client_notify_enter(surface, wlr_seat_get_keyboard(seat));
|
||||
|
||||
if (l)
|
||||
return;
|
||||
|
||||
client_activate_surface(surface, 1);
|
||||
motionnotify(0, NULL, 0, 0, 0, 0);
|
||||
|
||||
input_method_relay_set_focus(input_method_relay, client_surface(c));
|
||||
|
||||
/* Have a client, so focus its top-level wlr_surface */
|
||||
client_notify_enter(client_surface(c), wlr_seat_get_keyboard(seat));
|
||||
|
||||
/* Activate the new client */
|
||||
client_activate_surface(client_surface(c), 1);
|
||||
|
||||
if (!client_is_unmanaged(c))
|
||||
focused_client = c;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user