1 /* 2 SPDX-FileCopyrightText: 2020 Bhushan Shah <bshah@kde.org> 3 SPDX-FileCopyrightText: 2021 dcz <gihuac.dcz@porcupinefactory.org> 4 SPDX-FileCopyrightText: 2021 Roman Glig <subdiff@gmail.com> 5 6 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only 7 */ 8 #pragma once 9 10 #include "text_input_v3.h" 11 12 #include "wayland/global.h" 13 14 #include <wayland-text-input-unstable-v3-server-protocol.h> 15 16 namespace Wrapland::Server 17 { 18 19 uint32_t convert_content_hints(text_input_v3_content_hints hints); 20 uint32_t convert_content_purpose(text_input_v3_content_purpose purpose); 21 uint32_t convert_change_cause(text_input_v3_change_cause cause); 22 23 constexpr uint32_t text_input_manager_v3_version = 1; 24 using text_input_manager_v3_global 25 = Wayland::Global<text_input_manager_v3, text_input_manager_v3_version>; 26 using text_input_manager_v3_bind = Wayland::Bind<text_input_manager_v3_global>; 27 28 class text_input_manager_v3::Private : public text_input_manager_v3_global 29 { 30 public: 31 Private(Display* display, text_input_manager_v3* q); 32 33 private: 34 static void 35 get_text_input_callback(text_input_manager_v3_bind* bind, uint32_t id, wl_resource* wlSeat); 36 37 static struct zwp_text_input_manager_v3_interface const s_interface; 38 }; 39 40 class text_input_v3::Private : public Wayland::Resource<text_input_v3> 41 { 42 public: 43 Private(Client* client, uint32_t version, uint32_t id, text_input_v3* q); 44 45 void send_enter(Surface* surface); 46 void send_leave(Surface* surface); 47 48 Seat* seat{nullptr}; 49 Surface* entered_surface{nullptr}; 50 uint32_t serial{0}; 51 52 text_input_v3_state current; 53 text_input_v3_state pending; 54 55 text_input_v3* q; 56 57 private: 58 static void enable_callback(wl_client* wlClient, wl_resource* wlResource); 59 static void disable_callback(wl_client* wlClient, wl_resource* wlResource); 60 61 static void set_surrounding_text_callback(wl_client* wlClient, 62 wl_resource* wlResource, 63 const char* text, 64 int32_t cursor, 65 int32_t anchor); 66 static void set_content_type_callback(wl_client* wlClient, 67 wl_resource* wlResource, 68 uint32_t hint, 69 uint32_t purpose); 70 static void set_cursor_rectangle_callback(wl_client* wlClient, 71 wl_resource* wlResource, 72 int32_t x, 73 int32_t y, 74 int32_t width, 75 int32_t height); 76 static void set_text_change_cause_callback(wl_client* wlClient, 77 wl_resource* wlResource, 78 uint32_t change_cause); 79 static void set_commit_callback(wl_client* wlClient, wl_resource* wlResource); 80 81 static struct zwp_text_input_v3_interface const s_interface; 82 }; 83 } 84