mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-12-02 01:05:58 +01:00
Add focus change event for seats
This commit is contained in:
parent
50a8758313
commit
252bcce2f3
4 changed files with 44 additions and 1 deletions
|
@ -146,6 +146,10 @@ struct wlr_seat_pointer_state {
|
||||||
uint32_t grab_time;
|
uint32_t grab_time;
|
||||||
|
|
||||||
struct wl_listener surface_destroy;
|
struct wl_listener surface_destroy;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
struct wl_signal focus_change;
|
||||||
|
} events;
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: May be useful to be able to simulate keyboard input events
|
// TODO: May be useful to be able to simulate keyboard input events
|
||||||
|
@ -164,6 +168,10 @@ struct wlr_seat_keyboard_state {
|
||||||
|
|
||||||
struct wlr_seat_keyboard_grab *grab;
|
struct wlr_seat_keyboard_grab *grab;
|
||||||
struct wlr_seat_keyboard_grab *default_grab;
|
struct wlr_seat_keyboard_grab *default_grab;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
struct wl_signal focus_change;
|
||||||
|
} events;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct wlr_seat_touch_state {
|
struct wlr_seat_touch_state {
|
||||||
|
@ -238,6 +246,20 @@ struct wlr_seat_pointer_request_set_cursor_event {
|
||||||
int32_t hotspot_x, hotspot_y;
|
int32_t hotspot_x, hotspot_y;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct wlr_seat_pointer_focus_change_event {
|
||||||
|
struct wlr_seat *seat;
|
||||||
|
struct wlr_surface *old_surface, *new_surface;
|
||||||
|
double sx, sy;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct wlr_seat_keyboard_focus_change_event {
|
||||||
|
struct wlr_seat *seat;
|
||||||
|
struct wlr_surface *old_surface, *new_surface;
|
||||||
|
size_t num_keycodes;
|
||||||
|
uint32_t *keycodes;
|
||||||
|
struct wlr_keyboard_modifiers *modifiers;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocates a new wlr_seat and adds a wl_seat global to the display.
|
* Allocates a new wlr_seat and adds a wl_seat global to the display.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -225,6 +225,8 @@ struct wlr_seat *wlr_seat_create(struct wl_display *display, const char *name) {
|
||||||
seat->pointer_state.default_grab = pointer_grab;
|
seat->pointer_state.default_grab = pointer_grab;
|
||||||
seat->pointer_state.grab = pointer_grab;
|
seat->pointer_state.grab = pointer_grab;
|
||||||
|
|
||||||
|
wl_signal_init(&seat->pointer_state.events.focus_change);
|
||||||
|
|
||||||
// keyboard state
|
// keyboard state
|
||||||
struct wlr_seat_keyboard_grab *keyboard_grab =
|
struct wlr_seat_keyboard_grab *keyboard_grab =
|
||||||
calloc(1, sizeof(struct wlr_seat_keyboard_grab));
|
calloc(1, sizeof(struct wlr_seat_keyboard_grab));
|
||||||
|
@ -241,6 +243,8 @@ struct wlr_seat *wlr_seat_create(struct wl_display *display, const char *name) {
|
||||||
seat->keyboard_state.seat = seat;
|
seat->keyboard_state.seat = seat;
|
||||||
wl_list_init(&seat->keyboard_state.surface_destroy.link);
|
wl_list_init(&seat->keyboard_state.surface_destroy.link);
|
||||||
|
|
||||||
|
wl_signal_init(&seat->keyboard_state.events.focus_change);
|
||||||
|
|
||||||
// touch state
|
// touch state
|
||||||
struct wlr_seat_touch_grab *touch_grab =
|
struct wlr_seat_touch_grab *touch_grab =
|
||||||
calloc(1, sizeof(struct wlr_seat_touch_grab));
|
calloc(1, sizeof(struct wlr_seat_touch_grab));
|
||||||
|
|
|
@ -291,6 +291,16 @@ void wlr_seat_keyboard_enter(struct wlr_seat *seat,
|
||||||
// as it targets seat->keyboard_state.focused_client
|
// as it targets seat->keyboard_state.focused_client
|
||||||
wlr_seat_keyboard_send_modifiers(seat, modifiers);
|
wlr_seat_keyboard_send_modifiers(seat, modifiers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct wlr_seat_keyboard_focus_change_event event = {
|
||||||
|
.seat = seat,
|
||||||
|
.new_surface = surface,
|
||||||
|
.old_surface = focused_surface,
|
||||||
|
.num_keycodes = num_keycodes,
|
||||||
|
.keycodes = keycodes,
|
||||||
|
.modifiers = modifiers,
|
||||||
|
};
|
||||||
|
wlr_signal_emit_safe(&seat->keyboard_state.events.focus_change, &event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wlr_seat_keyboard_notify_enter(struct wlr_seat *seat,
|
void wlr_seat_keyboard_notify_enter(struct wlr_seat *seat,
|
||||||
|
|
|
@ -183,7 +183,14 @@ void wlr_seat_pointer_enter(struct wlr_seat *wlr_seat,
|
||||||
wlr_seat->pointer_state.focused_client = client;
|
wlr_seat->pointer_state.focused_client = client;
|
||||||
wlr_seat->pointer_state.focused_surface = surface;
|
wlr_seat->pointer_state.focused_surface = surface;
|
||||||
|
|
||||||
// TODO: send focus change event
|
struct wlr_seat_pointer_focus_change_event event = {
|
||||||
|
.seat = wlr_seat,
|
||||||
|
.new_surface = surface,
|
||||||
|
.old_surface = focused_surface,
|
||||||
|
.sx = sx,
|
||||||
|
.sy = sy,
|
||||||
|
};
|
||||||
|
wlr_signal_emit_safe(&wlr_seat->pointer_state.events.focus_change, &event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wlr_seat_pointer_clear_focus(struct wlr_seat *wlr_seat) {
|
void wlr_seat_pointer_clear_focus(struct wlr_seat *wlr_seat) {
|
||||||
|
|
Loading…
Reference in a new issue