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