mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-12-23 02:19:49 +01:00
text_input_v3: Note features supported by the text field
With this information, consumers can realize they will never retrieve some state, and adjust their strategy.
This commit is contained in:
parent
68820d6c3d
commit
37adcac5d1
2 changed files with 17 additions and 1 deletions
|
@ -13,6 +13,12 @@
|
|||
#include <wlr/types/wlr_seat.h>
|
||||
#include <wlr/types/wlr_surface.h>
|
||||
|
||||
enum wlr_text_input_v3_features {
|
||||
WLR_TEXT_INPUT_V3_FEATURE_SURROUNDING_TEXT = 1 << 0,
|
||||
WLR_TEXT_INPUT_v3_FEATURE_CONTENT_TYPE = 1 << 1,
|
||||
WLR_TEXT_INPUT_V3_FEATURE_CURSOR_RECTANGLE = 1 << 2,
|
||||
};
|
||||
|
||||
struct wlr_text_input_v3_state {
|
||||
struct {
|
||||
char *text; // NULL is allowed and equivalent to empty string
|
||||
|
@ -33,6 +39,10 @@ struct wlr_text_input_v3_state {
|
|||
int32_t width;
|
||||
int32_t height;
|
||||
} cursor_rectangle;
|
||||
|
||||
// Tracks which features were used in the current commit.
|
||||
// Useful in the enabling commit, where usage means support.
|
||||
uint32_t features; // OR'ed wlr_text_input_v3_features
|
||||
};
|
||||
|
||||
struct wlr_text_input_v3 {
|
||||
|
@ -44,6 +54,8 @@ struct wlr_text_input_v3 {
|
|||
uint32_t current_serial; // next in line to send
|
||||
bool pending_enabled;
|
||||
bool current_enabled;
|
||||
// supported in the current text input, more granular than surface
|
||||
uint32_t active_features; // OR'ed wlr_text_input_v3_features
|
||||
|
||||
struct wl_list link;
|
||||
|
||||
|
|
|
@ -121,7 +121,7 @@ static void text_input_set_surrounding_text(struct wl_client *client,
|
|||
if (!text_input->pending.surrounding.text) {
|
||||
wl_client_post_no_memory(client);
|
||||
}
|
||||
|
||||
text_input->pending.features |= WLR_TEXT_INPUT_V3_FEATURE_SURROUNDING_TEXT;
|
||||
text_input->pending.surrounding.cursor = cursor;
|
||||
text_input->pending.surrounding.anchor = anchor;
|
||||
}
|
||||
|
@ -141,6 +141,7 @@ static void text_input_set_content_type(struct wl_client *client,
|
|||
if (!text_input) {
|
||||
return;
|
||||
}
|
||||
text_input->pending.features |= WLR_TEXT_INPUT_v3_FEATURE_CONTENT_TYPE;
|
||||
text_input->pending.content_type.hint = hint;
|
||||
text_input->pending.content_type.purpose = purpose;
|
||||
}
|
||||
|
@ -152,6 +153,7 @@ static void text_input_set_cursor_rectangle(struct wl_client *client,
|
|||
if (!text_input) {
|
||||
return;
|
||||
}
|
||||
text_input->pending.features |= WLR_TEXT_INPUT_V3_FEATURE_CURSOR_RECTANGLE;
|
||||
text_input->pending.cursor_rectangle.x = x;
|
||||
text_input->pending.cursor_rectangle.y = y;
|
||||
text_input->pending.cursor_rectangle.width = width;
|
||||
|
@ -180,8 +182,10 @@ static void text_input_commit(struct wl_client *client,
|
|||
}
|
||||
|
||||
if (!old_enabled && text_input->current_enabled) {
|
||||
text_input->active_features = text_input->current.features;
|
||||
wlr_signal_emit_safe(&text_input->events.enable, text_input);
|
||||
} else if (old_enabled && !text_input->current_enabled) {
|
||||
text_input->active_features = 0;
|
||||
wlr_signal_emit_safe(&text_input->events.disable, text_input);
|
||||
} else { // including never enabled
|
||||
wlr_signal_emit_safe(&text_input->events.commit, text_input);
|
||||
|
|
Loading…
Reference in a new issue