examples: make tinyds-input-devicemgr files 77/283577/1
authorSooChan Lim <sc1.lim@samsung.com>
Sat, 29 Oct 2022 03:22:47 +0000 (12:22 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Mon, 31 Oct 2022 01:15:59 +0000 (10:15 +0900)
move the implementation of ds_tizen_input-devicemgr at tinyds-tdm.c to tinyds-input-devicemgr file.

Change-Id: Icc37023b56d556932d5013d321f23f53050c4a6d

examples/meson.build
examples/tinyds-input-devicemgr.c [new file with mode: 0644]
examples/tinyds-input-devicemgr.h [new file with mode: 0644]
examples/tinyds-tdm.c
examples/tinyds-tdm.h

index 9b12dd8..8de3845 100644 (file)
@@ -24,6 +24,7 @@ tinyds_tdm_files = [
   'tinyds-policy.c',
   'tinyds-dpms.c',
   'tinyds-launch.c',
+  'tinyds-input-devicemgr.c',
 ]
 
 executable('tinyds-tdm',
diff --git a/examples/tinyds-input-devicemgr.c b/examples/tinyds-input-devicemgr.c
new file mode 100644 (file)
index 0000000..c2e3b20
--- /dev/null
@@ -0,0 +1,169 @@
+#include <libds-tizen/input_devicemgr.h>
+
+#include "tinyds-common.h"
+#include "tinyds-input-devicemgr.h"
+#include "tinyds-tdm.h"
+
+struct tinyds_input_devicemgr
+{
+    input_devicemgr_free_cb free_cb;
+    void *data;
+
+    struct ds_tizen_input_devicemgr *devicemgr;
+    struct ds_seat *seat;
+
+    struct wl_listener destroy;
+    struct wl_listener pointer_warp;
+
+    struct tinyds_server *server;
+};
+
+static void
+devicemgr_add_keymap_data(struct wl_list *list, const char *name, int keycode)
+{
+    struct ds_tizen_input_devicemgr_keymap_data *data;
+
+    data = calloc(1, sizeof *data);
+    if (!data) {
+        ds_err("Failed to alloc memory");
+        return;
+    }
+
+    data->name = strdup(name);
+    data->keycode = keycode;
+
+    wl_list_insert(list, &data->link);
+}
+
+static void
+devicemgr_cleanup_keymap_list(struct wl_list *list)
+{
+    struct ds_tizen_input_devicemgr_keymap_data *data, *tmp;
+
+    wl_list_for_each_safe(data, tmp, list, link) {
+        wl_list_remove(&data->link);
+        free(data->name);
+        free(data);
+    }
+}
+
+static void
+devicemgr_set_keymap(struct ds_tizen_input_devicemgr *devicemgr)
+{
+    struct wl_list keymap_list;
+    bool res;
+
+    wl_list_init(&keymap_list);
+
+    devicemgr_add_keymap_data(&keymap_list, "XF86VolumeRaise", 455);
+    devicemgr_add_keymap_data(&keymap_list, "XF86VolumeLower", 456);
+    devicemgr_add_keymap_data(&keymap_list, "XF86LightOn", 457);
+    devicemgr_add_keymap_data(&keymap_list, "XF86LightOff", 458);
+
+    res = ds_tizen_input_devicemgr_set_keymap_list(devicemgr, &keymap_list);
+    if (!res)
+        ds_inf("Failed to set keymap");
+
+    devicemgr_cleanup_keymap_list(&keymap_list);
+}
+
+static void
+devicemgr_handle_pointer_warp(struct wl_listener *listener, void *data)
+{
+    struct ds_tizen_input_devicemgr_event_pointer_warp *event = data;
+    struct tinyds_input_devicemgr *input_devicemgr =
+        wl_container_of(listener, input_devicemgr, pointer_warp);
+    struct tinyds_server *server = input_devicemgr->server;
+    struct tinyds_view *view = NULL;
+    double sx = 0.f, sy = 0.f;
+    int output_w = 0, output_h = 0;
+
+    ds_inf("Pointer warp: surface(%p) x(%.2f) y(%.2f)", event->surface,
+            event->x, event->y);
+
+    view = tinyds_server_get_focused_view(server);
+    if (!view) return;
+
+    if (event->surface != ds_xdg_surface_get_surface(view->xdg_surface)) {
+        ds_inf("Pointer is not on the requested surface");
+        return;
+    }
+
+    tinyds_server_get_output_size(server, &output_w, &output_h);
+
+    server->output_x = view->x + (event->x * output_w);
+    server->output_y = view->y + (event->y * output_h);
+
+    tinyds_server_view_at(server, server->output_x, server->output_y, &sx, &sy);
+
+    ds_inf("notify motion: sx:%.2f sy:%.2f, output_x:%.1f, output_y:%.1f",
+            sx, sy, server->output_x, server->output_y);
+
+    ds_seat_pointer_notify_motion(input_devicemgr->seat, event->time_msec,
+        sx, sy);
+}
+
+static void
+devicemgr_handle_destroy(struct wl_listener *listener, void *data TINYDS_UNUSED)
+{
+    struct tinyds_input_devicemgr *input_devicemgr =
+        wl_container_of(listener, input_devicemgr, destroy);
+
+    ds_inf("input_devicemgr (%p) destroy", input_devicemgr);
+
+    input_devicemgr->free_cb(data);
+
+    wl_list_remove(&input_devicemgr->destroy.link);
+    wl_list_remove(&input_devicemgr->pointer_warp.link);
+
+    free(input_devicemgr);
+}
+
+struct tinyds_input_devicemgr *
+tinyds_input_devicemgr_init(struct ds_backend *input_backend,
+    struct ds_seat *seat, input_devicemgr_free_cb free_cb, void *data)
+{
+    struct tinyds_input_devicemgr *input_devicemgr;
+
+    input_devicemgr = calloc(1, sizeof *input_devicemgr);
+    if (!input_devicemgr)
+        return NULL;
+
+    input_devicemgr->free_cb = free_cb;
+    data = data;
+
+    input_devicemgr->devicemgr = ds_tizen_input_devicemgr_create(
+            input_backend, seat);
+    if (!input_devicemgr->devicemgr) {
+        free(input_devicemgr);
+        ds_err("Could not create ds_tizen_input_devicemgr");
+        return NULL;
+    }
+
+    input_devicemgr->seat = seat;
+
+    devicemgr_set_keymap(input_devicemgr->devicemgr);
+
+    input_devicemgr->destroy.notify = devicemgr_handle_destroy;
+    ds_tizen_input_devicemgr_add_destroy_listener(input_devicemgr->devicemgr,
+            &input_devicemgr->destroy);
+
+    input_devicemgr->pointer_warp.notify = devicemgr_handle_pointer_warp;
+    ds_tizen_input_devicemgr_add_pointer_warp_listener(input_devicemgr->devicemgr,
+            &input_devicemgr->pointer_warp);
+
+    input_devicemgr->server = (struct tinyds_server *)data;
+
+    ds_inf("Input Devicemgr (%p) created", input_devicemgr);
+
+    return input_devicemgr;
+}
+
+void
+tinyds_input_devicemgr_set_output_size(
+    struct tinyds_input_devicemgr *input_devicemgr,
+    uint32_t width, uint32_t height)
+{
+    ds_tizen_input_devicemgr_set_output_width_height(input_devicemgr->devicemgr,
+        width, height);
+}
diff --git a/examples/tinyds-input-devicemgr.h b/examples/tinyds-input-devicemgr.h
new file mode 100644 (file)
index 0000000..ea40e82
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef TINYDS_INPUT_DEVICEMGR_H
+#define TINYDS_INPUT_DEVICEMGR_H
+
+typedef void (*input_devicemgr_free_cb)(void *data);
+
+struct tinyds_input_devicemgr;
+
+struct tinyds_input_devicemgr *tinyds_input_devicemgr_init(
+    struct ds_backend *input_backend, struct ds_seat *seat,
+    input_devicemgr_free_cb free_cb, void *data);
+
+void tinyds_input_devicemgr_set_output_size(
+    struct tinyds_input_devicemgr *input_devicemgr,
+    uint32_t width, uint32_t height);
+
+#endif
index 08084e3..31c1e2d 100644 (file)
@@ -158,10 +158,6 @@ static void server_add_pointer(struct tinyds_server *server,
         struct ds_input_device *dev);
 static void server_add_touch(struct tinyds_server *server,
         struct ds_input_device *dev);
-static struct tinyds_view *
-server_view_at(struct tinyds_server *server, double lx, double ly,
-        double *sx, double *sy);
-
 static bool add_new_text_input(struct tinyds_server *server);
 static bool add_new_input_method(struct tinyds_server *server);
 static bool add_new_input_method_context(
@@ -428,7 +424,7 @@ backend_handle_new_output(struct wl_listener *listener, void *data)
     output->output_frame.notify = output_handle_frame;
     ds_output_add_frame_listener(ds_output, &output->output_frame);
 
-    ds_tizen_input_devicemgr_set_output_width_height(server->devicemgr, (uint32_t)output->width, (uint32_t)output->height);
+    tinyds_input_devicemgr_set_output_size(server->input_devicemgr, (uint32_t)output->width, (uint32_t)output->height);
 
     server->output = output;
     server->output_x = (double)(output->width) / 2;
@@ -470,105 +466,6 @@ backend_handle_new_input(struct wl_listener *listener, void *data)
 }
 
 static void
-devicemgr_add_keymap_data(struct wl_list *list, const char *name, int keycode)
-{
-    struct ds_tizen_input_devicemgr_keymap_data *data;
-
-    data = calloc(1, sizeof *data);
-    if (!data) {
-        ds_err("Failed to alloc memory");
-        return;
-    }
-
-    data->name = strdup(name);
-    data->keycode = keycode;
-
-    wl_list_insert(list, &data->link);
-}
-
-static void
-devicemgr_cleanup_keymap_list(struct wl_list *list)
-{
-    struct ds_tizen_input_devicemgr_keymap_data *data, *tmp;
-
-    wl_list_for_each_safe(data, tmp, list, link) {
-        wl_list_remove(&data->link);
-        free(data->name);
-        free(data);
-    }
-}
-
-static void
-devicemgr_set_keymap(struct ds_tizen_input_devicemgr *devicemgr)
-{
-    struct wl_list keymap_list;
-    bool res;
-
-    wl_list_init(&keymap_list);
-
-    devicemgr_add_keymap_data(&keymap_list, "XF86VolumeRaise", 455);
-    devicemgr_add_keymap_data(&keymap_list, "XF86VolumeLower", 456);
-    devicemgr_add_keymap_data(&keymap_list, "XF86LightOn", 457);
-    devicemgr_add_keymap_data(&keymap_list, "XF86LightOff", 458);
-
-    res = ds_tizen_input_devicemgr_set_keymap_list(devicemgr, &keymap_list);
-    if (!res)
-        ds_inf("Failed to set keymap");
-
-    devicemgr_cleanup_keymap_list(&keymap_list);
-}
-
-static void
-devicemgr_handle_pointer_warp(struct wl_listener *listener, void *data)
-{
-    struct tinyds_server *server;
-    struct tinyds_pointer *pointer;
-    struct ds_tizen_input_devicemgr_event_pointer_warp *event = data;
-    double sx = 0.f, sy = 0.f;
-    struct tinyds_view *view = NULL;
-
-    server = wl_container_of(listener, server, pointer_warp);
-
-    ds_inf("Pointer warp: surface(%p) x(%.2f) y(%.2f)", event->surface,
-            event->x, event->y);
-
-    wl_list_for_each(pointer, &server->pointers, link){
-        if (!pointer->focused_view) continue;
-        view = pointer->focused_view;
-    }
-    if (!view) return;
-
-    if (event->surface != ds_xdg_surface_get_surface(view->xdg_surface)) {
-        ds_inf("Pointer is not on the requested surface");
-        return;
-    }
-
-    server->output_x = view->x + (event->x * server->output->width);
-    server->output_y = view->y + (event->y * server->output->height);
-
-    server_view_at(server, server->output_x, server->output_y, &sx, &sy);
-
-    ds_inf("notify motion: sx:%.2f sy:%.2f, output_x:%.1f, output_y:%.1f",
-            sx, sy, server->output_x, server->output_y);
-
-    ds_seat_pointer_notify_motion(server->seat,
-            event->time_msec, sx, sy);
-}
-
-static void
-devicemgr_handle_destroy(struct wl_listener *listener, void *data TINYDS_UNUSED)
-{
-    struct tinyds_server *server =
-        wl_container_of(listener, server, devicemgr_destroy);
-
-    wl_list_remove(&server->devicemgr_destroy.link);
-    wl_list_remove(&server->pointer_warp.link);
-
-    server->devicemgr = NULL;
-}
-
-
-static void
 dpms_free_func(void *data)
 {
     struct tinyds_server *server = (struct tinyds_server *)data;
@@ -592,6 +489,14 @@ launch_free_func(void *data)
     server->launch = NULL;
 }
 
+static void
+input_devicemgr_free_func(void *data)
+{
+    struct tinyds_server *server = (struct tinyds_server *)data;
+
+    server->input_devicemgr = NULL;
+}
+
 static bool
 init_server(struct tinyds_server *server, struct wl_display *display)
 {
@@ -654,22 +559,10 @@ init_server(struct tinyds_server *server, struct wl_display *display)
         goto err;
     server->seat_caps = 0;
 
-    server->devicemgr = ds_tizen_input_devicemgr_create(
-            server->input_backend, server->seat);
-    if (!server->devicemgr) {
-        ds_err("Could not create ds_tizen_input_devicemgr");
+    server->input_devicemgr = tinyds_input_devicemgr_init(server->input_backend,
+             server->seat, input_devicemgr_free_func, (void *)server);
+    if (!server->input_devicemgr)
         goto err;
-    }
-
-    devicemgr_set_keymap(server->devicemgr);
-
-    server->devicemgr_destroy.notify = devicemgr_handle_destroy;
-    ds_tizen_input_devicemgr_add_destroy_listener(server->devicemgr,
-            &server->devicemgr_destroy);
-
-    server->pointer_warp.notify = devicemgr_handle_pointer_warp;
-    ds_tizen_input_devicemgr_add_pointer_warp_listener(server->devicemgr,
-            &server->pointer_warp);
 
     if (!add_new_text_input(server))
         goto err;
@@ -1286,8 +1179,8 @@ err:
     free(kbd);
 }
 
-static struct tinyds_view *
-server_view_at(struct tinyds_server *server, double lx, double ly,
+struct tinyds_view *
+tinyds_server_view_at(struct tinyds_server *server, double lx, double ly,
         double *sx, double *sy)
 {
     struct tinyds_view *view;
@@ -1349,7 +1242,7 @@ touch_handle_down(struct wl_listener *listener, void *data)
     ds_inf("Touch(%p) event down: id(%d) x %.3f y %.3f output_x %.1f output_y %.1f",
             touch->dev, event->id, event->x, event->y, server->output_x, server->output_y);
 
-    view = server_view_at(server, server->output_x, server->output_y, &sx, &sy);
+    view = tinyds_server_view_at(server, server->output_x, server->output_y, &sx, &sy);
 
     if (view) {
         ds_seat_touch_notify_down(touch->server->seat, ds_xdg_surface_get_surface(view->xdg_surface),
@@ -1396,7 +1289,7 @@ touch_handle_motion(struct wl_listener *listener, void *data)
     ds_inf("Touch(%p) event motion: id(%d) x %.3f y %.3f output_x %.1f output_y %.1f",
             touch->dev, event->id, event->x, event->y, server->output_x, server->output_y);
 
-    view = server_view_at(server, server->output_x, server->output_y, &sx, &sy);
+    view = tinyds_server_view_at(server, server->output_x, server->output_y, &sx, &sy);
 
     if (view) {
         ds_seat_touch_notify_motion(server->seat, event->time_msec,
@@ -1506,7 +1399,7 @@ pointer_handle_motion(struct wl_listener *listener, void *data)
     ds_inf("Pointer(%p) motion: (delta_x %.1f delta_y %.1f) output_x %.1f output_y %.1f",
             pointer, event->delta_x, event->delta_y, server->output_x, server->output_y);
 
-    view = server_view_at(pointer->server, server->output_x, server->output_y, &sx, &sy);
+    view = tinyds_server_view_at(pointer->server, server->output_x, server->output_y, &sx, &sy);
 
     if (pointer->focused_view != view) {
         if (pointer->focused_view) {
@@ -2277,3 +2170,26 @@ add_new_input_method_context(struct tinyds_input_method *input_method,
 
     return true;
 }
+
+struct tinyds_view *
+tinyds_server_get_focused_view(struct tinyds_server *server)
+{
+    struct tinyds_view *view = NULL;
+    struct tinyds_pointer *pointer;
+
+    wl_list_for_each(pointer, &server->pointers, link){
+        if (!pointer->focused_view) continue;
+
+        view = pointer->focused_view;
+    }
+
+    return view;
+}
+
+void
+tinyds_server_get_output_size(struct tinyds_server *server,
+    int *output_w, int *output_h)
+{
+    *output_w = server->output->width;
+    *output_h = server->output->height;
+}
\ No newline at end of file
index 0935b9b..95ff044 100644 (file)
@@ -15,6 +15,7 @@
 #include "tinyds-policy.h"
 #include "tinyds-dpms.h"
 #include "tinyds-launch.h"
+#include "tinyds-input-devicemgr.h"
 
 struct tinyds_keyboard;
 struct tinyds_pointer;
@@ -32,12 +33,12 @@ struct tinyds_server
     struct ds_seat *seat;
     uint32_t seat_caps;
     double output_x, output_y;
-    struct ds_tizen_input_devicemgr *devicemgr;
 
     struct tinyds_output *output;
     struct tinyds_dpms *dpms;
     struct tinyds_policy *policy;
     struct tinyds_launch *launch;
+    struct tinyds_input_devicemgr *input_devicemgr;
 
     struct wl_event_source *stdin_source;
 
@@ -46,9 +47,6 @@ struct tinyds_server
     struct wl_listener new_output;
     struct wl_listener new_input;
     struct wl_listener new_xdg_surface;
-    struct wl_listener devicemgr_destroy;
-    struct wl_listener pointer_warp;
-
 
     struct wl_list keyboards;
     struct wl_list pointers;
@@ -79,4 +77,10 @@ struct tinyds_view
     int effect_type;
 };
 
+struct tinyds_view *tinyds_server_view_at(struct tinyds_server *server,
+        double lx, double ly, double *sx, double *sy);
+struct tinyds_view *tinyds_server_get_focused_view(struct tinyds_server *server);
+void tinyds_server_get_output_size(struct tinyds_server *server,
+        int *output_w, int *output_h);
+
 #endif