1 /* 2 SPDX-FileCopyrightText: 2021 Roman Glig <subdiff@gmail.com> 3 4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only 5 */ 6 #include "input_method_v2.h" 7 8 #include "display.h" 9 #include "keyboard_p.h" 10 #include "seat_p.h" 11 #include "surface_p.h" 12 #include "text_input_v3_p.h" 13 14 #include <wayland-input-method-unstable-v2-server-protocol.h> 15 16 namespace Wrapland::Server 17 { 18 19 constexpr uint32_t input_method_manager_v2_version = 1; 20 using input_method_manager_v2_global 21 = Wayland::Global<input_method_manager_v2, input_method_manager_v2_version>; 22 using input_method_manager_v2_bind = Wayland::Bind<input_method_manager_v2_global>; 23 24 class input_method_manager_v2::Private : public input_method_manager_v2_global 25 { 26 private: 27 static void 28 get_input_method_callback(input_method_manager_v2_bind* bind, wl_resource* wlSeat, uint32_t id); 29 30 static struct zwp_input_method_manager_v2_interface const s_interface; 31 32 public: 33 Private(Display* display, input_method_manager_v2* q); 34 }; 35 36 class input_method_v2::Private : public Wayland::Resource<input_method_v2> 37 { 38 private: 39 static struct zwp_input_method_v2_interface const s_interface; 40 41 public: 42 Private(Client* client, uint32_t version, uint32_t id, input_method_v2* q); 43 44 Seat* seat{nullptr}; 45 uint32_t serial{0}; 46 47 input_method_v2_state current; 48 input_method_v2_state pending; 49 50 input_method_v2* q_ptr; 51 52 private: 53 static void commit_string_callback([[maybe_unused]] wl_client* wlClient, 54 wl_resource* wlResource, 55 char const* text); 56 static void preedit_string_callback([[maybe_unused]] wl_client* wlClient, 57 wl_resource* wlResource, 58 char const* text, 59 int32_t cursor_begin, 60 int32_t cursor_end); 61 static void delete_surrounding_text_callback([[maybe_unused]] wl_client* wlClient, 62 wl_resource* wlResource, 63 uint32_t beforeBytes, 64 uint32_t afterBytes); 65 static void 66 commit_callback([[maybe_unused]] wl_client* wlClient, wl_resource* wlResource, uint32_t serial); 67 static void get_input_popup_surface_callback([[maybe_unused]] wl_client* wlClient, 68 wl_resource* wlResource, 69 uint32_t id, 70 wl_resource* wlSurface); 71 static void grab_keyboard_callback([[maybe_unused]] wl_client* wlClient, 72 wl_resource* wlResource, 73 uint32_t id); 74 }; 75 76 class input_method_keyboard_grab_v2::Private 77 : public Wayland::Resource<input_method_keyboard_grab_v2> 78 { 79 private: 80 static struct zwp_input_method_keyboard_grab_v2_interface const s_interface; 81 82 public: 83 Private(Client* client, 84 uint32_t version, 85 uint32_t id, 86 Seat* seat, 87 input_method_keyboard_grab_v2* q); 88 89 Seat* seat; 90 file_wrap keymap; 91 }; 92 93 class input_method_popup_surface_v2::Private 94 : public Wayland::Resource<input_method_popup_surface_v2> 95 { 96 private: 97 static struct zwp_input_popup_surface_v2_interface const s_interface; 98 99 public: 100 Private(Client* client, 101 uint32_t version, 102 uint32_t id, 103 Surface* surface, 104 input_method_popup_surface_v2* q); 105 106 Surface* surface; 107 }; 108 109 } 110