summaryrefslogtreecommitdiffstats
path: root/platform/linuxbsd/wayland/wayland_thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linuxbsd/wayland/wayland_thread.h')
-rw-r--r--platform/linuxbsd/wayland/wayland_thread.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/platform/linuxbsd/wayland/wayland_thread.h b/platform/linuxbsd/wayland/wayland_thread.h
index 0756b6b0ea..75d03181e2 100644
--- a/platform/linuxbsd/wayland/wayland_thread.h
+++ b/platform/linuxbsd/wayland/wayland_thread.h
@@ -62,6 +62,7 @@
#undef pointer
#include "wayland/protocol/fractional_scale.gen.h"
#include "wayland/protocol/tablet.gen.h"
+#include "wayland/protocol/text_input.gen.h"
#include "wayland/protocol/viewporter.gen.h"
#include "wayland/protocol/wayland.gen.h"
#include "wayland/protocol/xdg_activation.gen.h"
@@ -112,6 +113,17 @@ public:
Vector<String> files;
};
+ class IMEUpdateEventMessage : public Message {
+ public:
+ String text;
+ Vector2i selection;
+ };
+
+ class IMECommitEventMessage : public Message {
+ public:
+ String text;
+ };
+
struct RegistryState {
WaylandThread *wayland_thread;
@@ -170,6 +182,9 @@ public:
struct zwp_tablet_manager_v2 *wp_tablet_manager = nullptr;
uint32_t wp_tablet_manager_name = 0;
+
+ struct zwp_text_input_manager_v3 *wp_text_input_manager = nullptr;
+ uint32_t wp_text_input_manager_name = 0;
};
// General Wayland-specific states. Shouldn't be accessed directly.
@@ -438,6 +453,15 @@ public:
struct zwp_tablet_seat_v2 *wp_tablet_seat = nullptr;
List<struct zwp_tablet_tool_v2 *> tablet_tools;
+
+ // IME.
+ struct zwp_text_input_v3 *wp_text_input = nullptr;
+ bool ime_enabled = false;
+ bool ime_active = false;
+ String ime_text;
+ String ime_text_commit;
+ Vector2i ime_cursor;
+ Rect2i ime_rect;
};
struct CustomCursor {
@@ -618,6 +642,13 @@ private:
static void _wp_tablet_tool_on_button(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, uint32_t serial, uint32_t button, uint32_t state);
static void _wp_tablet_tool_on_frame(void *data, struct zwp_tablet_tool_v2 *wp_tablet_tool_v2, uint32_t time);
+ static void _wp_text_input_on_enter(void *data, struct zwp_text_input_v3 *wp_text_input_v3, struct wl_surface *surface);
+ static void _wp_text_input_on_leave(void *data, struct zwp_text_input_v3 *wp_text_input_v3, struct wl_surface *surface);
+ static void _wp_text_input_on_preedit_string(void *data, struct zwp_text_input_v3 *wp_text_input_v3, const char *text, int32_t cursor_begin, int32_t cursor_end);
+ static void _wp_text_input_on_commit_string(void *data, struct zwp_text_input_v3 *wp_text_input_v3, const char *text);
+ static void _wp_text_input_on_delete_surrounding_text(void *data, struct zwp_text_input_v3 *wp_text_input_v3, uint32_t before_length, uint32_t after_length);
+ static void _wp_text_input_on_done(void *data, struct zwp_text_input_v3 *wp_text_input_v3, uint32_t serial);
+
static void _xdg_toplevel_decoration_on_configure(void *data, struct zxdg_toplevel_decoration_v1 *xdg_toplevel_decoration, uint32_t mode);
static void _xdg_exported_on_exported(void *data, zxdg_exported_v1 *exported, const char *handle);
@@ -779,6 +810,15 @@ private:
.frame = _wp_tablet_tool_on_frame,
};
+ static constexpr struct zwp_text_input_v3_listener wp_text_input_listener = {
+ .enter = _wp_text_input_on_enter,
+ .leave = _wp_text_input_on_leave,
+ .preedit_string = _wp_text_input_on_preedit_string,
+ .commit_string = _wp_text_input_on_commit_string,
+ .delete_surrounding_text = _wp_text_input_on_delete_surrounding_text,
+ .done = _wp_text_input_on_done,
+ };
+
static constexpr struct zxdg_exported_v1_listener xdg_exported_listener = {
.handle = _xdg_exported_on_exported
};
@@ -929,6 +969,9 @@ public:
void cursor_shape_set_custom_image(DisplayServer::CursorShape p_cursor_shape, Ref<Image> p_image, const Point2i &p_hotspot);
void cursor_shape_clear_custom_image(DisplayServer::CursorShape p_cursor_shape);
+ void window_set_ime_active(const bool p_active, DisplayServer::WindowID p_window_id);
+ void window_set_ime_position(const Point2i &p_pos, DisplayServer::WindowID p_window_id);
+
int keyboard_get_layout_count() const;
int keyboard_get_current_layout_index() const;
void keyboard_set_current_layout_index(int p_index);