2 Simple DirectMedia Layer
3 Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
4 Copyright 2015 Samsung Electronics co., Ltd. All Rights Reserved.
6 This software is provided 'as-is', without any express or implied
7 warranty. In no event will the authors be held liable for any damages
8 arising from the use of this software.
10 Permission is granted to anyone to use this software for any purpose,
11 including commercial applications, and to alter it and redistribute it
12 freely, subject to the following restrictions:
14 1. The origin of this software must not be misrepresented; you must not
15 claim that you wrote the original software. If you use this software
16 in a product, an acknowledgment in the product documentation would be
17 appreciated but is not required.
18 2. Altered source versions must be plainly marked as such, and must not be
19 misrepresented as being the original software.
20 3. This notice may not be removed or altered from any source distribution.
23 #include "../../SDL_internal.h"
25 #if SDL_VIDEO_DRIVER_TIZEN
28 #include "SDL_hints.h"
29 #include "SDL_loadso.h"
31 #include "SDL_tizenvideo.h"
32 #include "SDL_tizentouch.h"
33 #include "SDL_tizenkeyboard.h"
34 #include "SDL_tizenmouse.h"
35 #include "SDL_tizenevents_c.h"
37 #include "SDL_tizenwindow.h"
38 #include "SDL_tizenopengles.h"
40 #include "../../events/SDL_mouse_c.h"
41 #include "../../joystick/tizen/SDL_sysjoystick_c.h"
43 #include "../SDL_egl_c.h"
44 #include "../SDL_vulkan_c.h"
45 #include "../SDL_sysvideo.h"
46 #include "../../events/SDL_windowevents_c.h"
48 #include <Ecore_Ipc.h>
53 ROTATION_TYPE_NORMAL_ROTATION = 0,
54 ROTATION_TYPE_PRE_ROTATION, /* use pre-rotation */
57 #define LOAD_FUNC(NAME) \
58 _this->tizen_pre_rotation_data->NAME = SDL_LoadFunction(_this->tizen_pre_rotation_data->prerotation_dll_handle, #NAME); \
59 if (!_this->tizen_pre_rotation_data->NAME) \
61 SDL_LogError(SDL_LOG_CATEGORY_ASSERT, "Could not retrieve pre-rotation function " #NAME); \
69 Ecore_Ipc_Server *ipc = NULL;
71 #define IPC_HEAD(_type) \
72 Ecore_Ipc_Event_Client_##_type *e = event; \
73 if (ecore_ipc_client_server_get(e->client) != ipc) \
74 return ECORE_CALLBACK_PASS_ON
76 void SDL_ExecuteIndicatorProcess()
78 _tizen_init_ecore_ipc();
79 unsigned int childPID = fork();
82 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[SDL] child process : %d", getpid());
83 int ret = execl("/usr/apps/org.tizen.sdl_indicator/bin/sdl_indicator", "/usr/apps/org.tizen.sdl_indicator/bin/sdl_indicator", NULL);
86 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[SDL] Failed indicator process error:%s", strerror(errno));
87 kill(getpid(), SIGKILL);
92 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[SDL] Failed fork");
96 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[SDL] parent process : %d", getpid());
100 void _tizen_ecore_ipc_client_send(int major, int minor, int ref, int ref_to)
102 Eina_List *ipc_clients = ecore_ipc_server_clients_get(ipc);
104 Ecore_Ipc_Client *cl;
105 EINA_LIST_FOREACH(ipc_clients, l, cl)
106 ecore_ipc_client_send(cl, major, minor, ref, ref_to, 0, NULL, 0);
109 static Eina_Bool _cb_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
113 SDL_Log("[SDL]_cb_client_add");
114 SDL_Window * window = SDL_GetVideoDevice()->windows;
115 SDL_WindowData *wind = window->driverdata;
116 wind->indicator = SDL_TRUE;
118 int window_w, window_h;
119 ecore_wl_screen_size_get(&window_w, &window_h);
120 _tizen_ecore_ipc_client_send(OP_RESIZE, wind->rotation, window_w, window_h);
122 return ECORE_CALLBACK_DONE;
125 static Eina_Bool _cb_client_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
128 SDL_Log("[SDL]_cb_client_del");
129 Eina_List *ipc_clients = ecore_ipc_server_clients_get(ipc);
131 Ecore_Ipc_Client *cl;
132 EINA_LIST_FOREACH(ipc_clients, l, cl)
134 ecore_ipc_client_del(cl);
137 SDL_Window * window = SDL_GetVideoDevice()->windows;
138 SDL_WindowData *wind = window->driverdata;
139 wind->indicator = SDL_FALSE;
140 return ECORE_CALLBACK_DONE;
143 static Eina_Bool _cb_client_data(void *data, int type EINA_UNUSED, void *event)
147 Ecore_Ipc_Event_Server_Data* epcEvent = (Ecore_Ipc_Event_Server_Data*)event;
148 SDL_Log("[SDL]_cb_client_data: %d -> %d", epcEvent->major, epcEvent->minor);
149 return ECORE_CALLBACK_DONE;
152 int _tizen_init_ecore_ipc()
157 if(!ecore_ipc_init())
158 SDL_Log("[SDL]Fail ecore_ipc");
160 ipc = ecore_ipc_server_add(ECORE_IPC_LOCAL_USER, "sdl_indicator", 0, NULL);
163 ecore_ipc_shutdown();
165 ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD, _cb_client_add, NULL);
166 ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL, _cb_client_del, NULL);
167 ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA, _cb_client_data, NULL);
173 _tizen_rotation_type_get()
175 static int type = ROTATION_TYPE_PRE_ROTATION;
176 static int checked = 0;
179 if (checked) return type;
181 engine = getenv("SDL_ROTATION");
185 if ((!strcasecmp(engine, "normal")))
186 type = ROTATION_TYPE_NORMAL_ROTATION;
187 else if ((!strcasecmp(engine, "pre_rotation")))
188 type = ROTATION_TYPE_PRE_ROTATION;
190 type = ROTATION_TYPE_PRE_ROTATION;
197 _tizen_PreRotatotion_LoadLibrary(SDL_WindowData *_this, const char *lib_path)
199 void *lib_dll_handle = NULL;
202 if (_this->isLoaded_pre_rotation)
205 _this->tizen_pre_rotation_data = (Tizen_Prerotation_Data *) SDL_calloc(1, sizeof(Tizen_Prerotation_Data));
206 if (!_this->tizen_pre_rotation_data) {
207 return SDL_OutOfMemory();
211 lib_dll_handle = SDL_LoadObject(lib_path);
213 if (!lib_dll_handle) {
214 path = "libwayland-egl.so";
215 lib_dll_handle = SDL_LoadObject(path);
218 _this->tizen_pre_rotation_data->prerotation_dll_handle = lib_dll_handle;
220 if (lib_dll_handle == NULL)
223 LOAD_FUNC(wl_egl_window_set_rotation);
224 LOAD_FUNC(wl_egl_window_get_capabilities);
225 _this->isLoaded_pre_rotation = 1;
231 Tizen_GetWindowWMInfo(_THIS, SDL_Window *window, SDL_SysWMinfo *info)
233 SDL_WindowData *wmdata = (SDL_WindowData *)window->driverdata;
234 info->info.tizen.egl_display = NULL;
235 info->info.tizen.egl_surface = NULL;
236 #if SDL_VIDEO_OPENGL_EGL
239 info->info.tizen.egl_display = (void*)_this->egl_data->egl_display;
241 info->info.tizen.egl_surface = (void*)wmdata->egl_surface;
243 info->subsystem = SDL_SYSWM_TIZEN;
248 Tizen_SetWindowHitTest(SDL_Window *window, SDL_bool enabled)
250 return 0; /* just succeed, the real work is done elsewhere. */
254 Tizen_SetWindowTitle(_THIS, SDL_Window * window)
256 SDL_WindowData *wind = window->driverdata;
257 ecore_wl_window_title_set(wind->window, window->title);
261 Tizen_ShowWindow(_THIS, SDL_Window *window)
263 SDL_WindowData *wind = window->driverdata;
265 if(!(window->flags & SDL_WINDOW_FULLSCREEN) && !(window->flags & SDL_WINDOW_BORDERLESS) && !wind->indicator)
267 SDL_ExecuteIndicatorProcess();
269 ecore_wl_window_show(wind->window);
273 Tizen_HideWindow(_THIS, SDL_Window *window)
275 SDL_WindowData *wind = window->driverdata;
276 ecore_wl_window_hide(wind->window);
280 Tizen_RaiseWindow(_THIS, SDL_Window *window)
282 SDL_WindowData *wind = window->driverdata;
283 ecore_wl_window_raise(wind->window);
287 Tizen_SetWindowFullscreen(_THIS, SDL_Window *window,
288 SDL_VideoDisplay *_display, SDL_bool fullscreen)
294 Tizen_pre_rotation_set(SDL_WindowData *_this, int rotation)
296 tizen_wl_egl_window_rotation rot;
297 if (!_this->egl_window) return;
301 rot = TIZEN_ROTATION_270;
304 rot = TIZEN_ROTATION_180;
307 rot = TIZEN_ROTATION_90;
310 rot = TIZEN_ROTATION_0;
313 rot = TIZEN_ROTATION_0;
317 _this->tizen_pre_rotation_data->wl_egl_window_set_rotation(_this->egl_window, rot);
321 _tizen_window_orientaiton_hint_callback(void *userdata, const char *name, const char *oldValue, const char *newValue)
324 char orientation_type[4][20] = {"Portrait","LandscapeLeft","PortraitUpsideDown","LandscapeRight"};
325 int checked[4] = {0,};
328 SDL_WindowData *wind = (SDL_WindowData*)userdata;
329 Ecore_Wl_Window *window = wind->window;
331 if (wind->rotation_supported == 0) {
335 SDL_assert(SDL_strncmp(name, SDL_HINT_ORIENTATIONS, SDL_strlen(SDL_HINT_ORIENTATIONS)) == 0);
337 if ((oldValue == NULL) && (newValue == NULL)) {
342 p_str = SDL_strstr(newValue, orientation_type[i]);
344 if (p_str == newValue) {
347 else if (i == 1) rot = 90;
348 else if (i == 2) rot = 180;
349 else if (i == 3) rot = 270;
350 wind->rotation = rot;
371 ecore_wl_window_rotation_preferred_rotation_set(window,wind->rotation);
373 ecore_wl_window_rotation_available_rotations_set(window, (const int*)checked, j);
379 _tizen_window_orientation_add_hint(void *data)
381 SDL_WindowData *wind = (SDL_WindowData*)data;
382 if (wind->rotation_supported == 0) {
386 SDL_AddHintCallback(SDL_HINT_ORIENTATIONS, _tizen_window_orientaiton_hint_callback, data);
390 _tizen_cb_output_transform(void *data, int type EINA_UNUSED, void *event)
392 SDL_Window * window = SDL_GetVideoDevice()->windows;
393 SDL_WindowData *wind = window->driverdata;
395 if(!wind) return ECORE_CALLBACK_PASS_ON;
397 Ecore_Wl_Event_Output_Transform *ev = event;
398 Ecore_Wl_Output *output;
400 output = ecore_wl_window_output_find(wind->window);
401 if (output != ev->output) return ECORE_CALLBACK_PASS_ON;
403 wind->received_rotation = 1;
406 return ECORE_CALLBACK_PASS_ON;
410 _tizen_cb_ignore_output_transform(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
412 SDL_Window * window = SDL_GetVideoDevice()->windows;
413 SDL_WindowData *wind = window->driverdata;
415 if(!wind) return ECORE_CALLBACK_PASS_ON;
417 wind->received_rotation = 1;
419 return ECORE_CALLBACK_PASS_ON;
423 _tizen_output_transform_register(SDL_WindowData *wind)
427 Ecore_Wl_Output *output = ecore_wl_window_output_find(wind->window);
428 wind->output_rotation = ecore_wl_output_transform_get(output) * 90;
430 ecore_event_handler_add(ECORE_WL_EVENT_OUTPUT_TRANSFORM,
431 _tizen_cb_output_transform, NULL);
432 ecore_event_handler_add(ECORE_WL_EVENT_IGNORE_OUTPUT_TRANSFORM,
433 _tizen_cb_ignore_output_transform, NULL);
438 _tizen_send_rotation_event(SDL_Window *window, unsigned int angle)
441 SDL_WindowData *wind;
442 wind = window->driverdata;
444 SDL_memset(&event, 0, sizeof(event));
445 event.type = SDL_ROTATEEVENT;
447 if (wind->support_pre_rotation)
448 event.user.data1 = (void*)0;
450 event.user.data1 = (void*)angle;
451 event.user.data2 = (void*)-1;
453 SDL_PushEvent(&event);
458 _tizen_set_window_size(SDL_Window * window, int w, int h)
462 SDL_SetError("Invalid window");
466 SDL_VideoDevice *_this = SDL_GetVideoDevice();
468 SDL_SetError("Video subsystem has not been initialized");
472 if (window->magic != &_this->window_magic) {
477 SDL_InvalidParamError("w");
481 SDL_InvalidParamError("h");
485 /* Make sure we don't exceed any window size limits */
486 if (window->min_w && w < window->min_w)
490 if (window->max_w && w > window->max_w)
494 if (window->min_h && h < window->min_h)
498 if (window->max_h && h > window->max_h)
503 window->windowed.w = w;
504 window->windowed.h = h;
511 _tizen_rotation_do(SDL_WindowData *wind, int rotation)
515 SDL_Window *window = SDL_GetVideoDevice()->windows;
518 int window_w, window_h;
519 if(wind->rotation == 0 || wind->rotation == 180)
520 ecore_wl_window_geometry_get(wind->window, 0, 0, &window_w, &window_h);
522 ecore_wl_window_geometry_get(wind->window, 0, 0, &window_h, &window_w);
524 _tizen_set_window_size(window, window_w, window_h);
526 if(wind->support_pre_rotation)
527 Tizen_pre_rotation_set(wind, rotation);
529 _tizen_send_rotation_event(window, wind->rotation);
530 SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SIZE_CHANGED, window->w, window->h);
535 _tizen_rotate_update(SDL_WindowData *wind)
540 if (ecore_wl_window_ignore_output_transform_get(wind->window))
546 Ecore_Wl_Output *output = ecore_wl_window_output_find(wind->window);
547 screen_rotation = ecore_wl_output_transform_get(output) * 90;
550 //Set Screen Rotation
551 wind->output_rotation = screen_rotation;
552 if(wind->support_pre_rotation)
553 ecore_wl_window_buffer_transform_set(wind->window, wind->output_rotation / 90);
555 ecore_wl_window_rotation_set(wind->window, wind->rotation);
557 int rotation = (wind->output_rotation + wind->rotation) % 360;
558 _tizen_rotation_do(wind, rotation);
562 Tizen_CreateWindow(_THIS, SDL_Window *window)
564 SDL_VideoData *data = _this->driverdata;
565 SDL_WindowData *wind;
566 Ecore_Wl_Global *global;
567 Eina_Inlist *globals;
569 wind = calloc(1, sizeof * wind);
571 return SDL_OutOfMemory();
574 window->driverdata = wind;
575 window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */
577 #if SDL_VIDEO_OPENGL_EGL
578 if (window->flags & SDL_WINDOW_OPENGL) {
579 SDL_GL_LoadLibrary(NULL);
584 if (window->flags & SDL_WINDOW_VULKAN) {
585 if (!_this->vulkan_GetInstanceExtensions) {
586 SDL_SetError("No Vulkan support in video driver");
589 if (_this->vulkan_LoadLibrary(_this, NULL) < 0) {
590 SDL_SetError("Fail to load Vulkan Library");
595 if (window->x == SDL_WINDOWPOS_UNDEFINED) {
598 if (window->y == SDL_WINDOWPOS_UNDEFINED) {
602 if (!(globals = ecore_wl_globals_get()))
604 SDL_LogError(SDL_LOG_CATEGORY_ASSERT, "Failed to get wayland globals");
608 wind->window = ecore_wl_window_new(NULL,
609 window->x, window->y, window->w, window->h,
610 ECORE_WL_WINDOW_BUFFER_TYPE_SHM);
612 SDL_LogError(SDL_LOG_CATEGORY_ASSERT, "Failed to create wayland window");
615 _tizen_output_transform_register(wind);
617 wind->surface = ecore_wl_window_surface_create(wind->window);
618 if (!wind->surface) {
619 SDL_LogError(SDL_LOG_CATEGORY_ASSERT, "Failed to create wayland window surface");
622 ecore_wl_window_type_set(wind->window, ECORE_WL_WINDOW_TYPE_UTILITY);
625 wind->rotation_supported = 0;
626 wind->received_rotation = 0;
628 #if SDL_VIDEO_OPENGL_EGL
629 if (window->flags & SDL_WINDOW_OPENGL) {
631 if(wind->output_rotation == 90 || wind->output_rotation == 270)
632 wind->egl_window = wl_egl_window_create(wind->surface, window->h, window->w);
634 wind->egl_window = wl_egl_window_create(wind->surface, window->w, window->h);
636 /* Create the GLES window surface */
637 wind->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) wind->egl_window);
638 if (wind->egl_surface == EGL_NO_SURFACE) {
639 SDL_LogError(SDL_LOG_CATEGORY_ASSERT, "failed to create a window surface");
643 if (!_this->gl_config.alpha_size) {
644 ecore_wl_window_opaque_region_set(wind->window, window->x, window->y, window->w, window->h);
647 wl_surface_set_opaque_region(wind->surface, NULL);
650 //Support PreRotation
651 wind->support_pre_rotation = 0;
652 if (_tizen_rotation_type_get() && _tizen_PreRotatotion_LoadLibrary(wind, "libwayland-egl.so")) {
653 if (wind->tizen_pre_rotation_data->wl_egl_window_get_capabilities(wind->egl_window) == TIZEN_WL_EGL_WINDOW_CAPABILITY_ROTATION_SUPPORTED ) {
654 wind->support_pre_rotation = 1;
659 wl_egl_window_resize(wind->egl_window, window->w, window->h, 0, 0);
665 wind->id = ecore_wl_window_id_get(wind->window);
666 eina_hash_add(data->windows, &wind->id, window);
668 Tizen_InitKeyboard(_this);
669 SDL_SetMouseFocus(window);
671 if (window->flags & 0x00008000) {
672 ecore_wl_window_input_region_set(wind->window, -1, -1, 1, 1);
673 ecore_wl_window_focus_skip_set(wind->window, EINA_TRUE);
676 EINA_INLIST_FOREACH(globals, global) {
677 if (!strcmp(global->interface, "tizen_policy_ext")) {
678 wind->rotation_supported = 1;
682 // Add orientaiton hint cb
683 _tizen_window_orientation_add_hint((void*)wind);
685 _tizen_rotate_update(wind);
691 Tizen_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered)
693 SDL_WindowData *wind = window->driverdata;
696 SDL_ExecuteIndicatorProcess();
701 _tizen_window_resize(SDL_Window *window)
703 SDL_WindowData *wind = window->driverdata;
704 if (!wind->egl_window) {
708 if(wind->support_pre_rotation && (wind->rotation==90 || wind->rotation==270))
709 ecore_wl_window_update_size(wind->window, window->h, window->w);
711 ecore_wl_window_update_size(wind->window, window->w, window->h);
713 // TODO : consider to rotation status.
714 #if SDL_VIDEO_OPENGL_EGL
715 if (window->flags & SDL_WINDOW_OPENGL) {
716 if(wind->output_rotation==90 || wind->output_rotation==270)
717 wl_egl_window_resize(wind->egl_window, window->h, window->w, 0, 0);
719 wl_egl_window_resize(wind->egl_window, window->w, window->h, 0, 0);
725 _tizen_setwindowsize(SDL_Window *window)
727 SDL_WindowData *wind = window->driverdata;
734 Tizen_SetWindowSize(_THIS, SDL_Window *window)
736 _tizen_window_resize(window);
740 Tizen_GetWindowSize(_THIS, SDL_Window *window, int *w, int *h)
742 SDL_WindowData *wind = window->driverdata;
747 if (w) *w = window->w;
748 if (h) *h = window->h;
752 Tizen_SetWindowPosition(_THIS, SDL_Window * window)
754 SDL_WindowData *wind = window->driverdata;
759 // TODO : consider to rotation status.
760 ecore_wl_window_position_set(wind->window, window->x, window->y);
764 Tizen_DestroyWindow(_THIS, SDL_Window *window)
766 SDL_VideoData *data = _this->driverdata;
767 SDL_WindowData *wind = window->driverdata;
770 eina_hash_del(data->windows, &wind->id, window);
771 #if SDL_VIDEO_OPENGL_EGL
772 if (window->flags & SDL_WINDOW_OPENGL) {
773 SDL_EGL_DestroySurface(_this, wind->egl_surface);
774 wl_egl_window_destroy(wind->egl_window);
777 ecore_wl_window_free(wind->window);
781 window->driverdata = NULL;
785 Tizen_FindWindow(_THIS, Ecore_Wl_Window *ewin)
787 SDL_VideoData *data = _this->driverdata;
790 id = ecore_wl_window_id_get(ewin);
791 return (SDL_Window*)eina_hash_find(data->windows, &id);
795 _tizen_cb_event_window_visibility_change(void *data, int type, void *event)
798 Ecore_Wl_Event_Window_Visibility_Change *ev;
803 ew = ecore_wl_window_find(ev->win);
804 window = Tizen_FindWindow(_this, ew);
806 SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SHOWN, 0, 0);
807 SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESTORED, 0, 0);
808 return ECORE_CALLBACK_PASS_ON;
812 _tizen_cb_window_configure(void *data, int type EINA_UNUSED, void *event)
817 SDL_WindowData *wind;
818 Ecore_Wl_Event_Window_Configure *ev;
820 ew = ecore_wl_window_find(ev->win);
821 window = Tizen_FindWindow(_this, ew);
822 wind = window->driverdata;
824 if (wind->rotation_supported == 0){
825 return ECORE_CALLBACK_PASS_ON;
828 int nx = 0, ny = 0, nw = 0, nh = 0;
829 SDL_Log( "configure notify window: %p, ecore_wl_window: %p\n", window, ew);
831 ecore_wl_window_geometry_get(ew, &nx, &ny, &nw, &nh);
835 SDL_Log("[SDL_Size] * _tizen_cb_window_configure :: w->w:%d, w->h:%d, nw:%d, nh:%d", window->w, window->h, nw, nh);
836 if ((window->x != nx) || (window->y != ny))
837 ecore_wl_window_position_set(ew, nx, ny);
839 if ((window->w != nw) || (window->h != nh)) {
840 _tizen_setwindowsize(window);
843 return ECORE_CALLBACK_PASS_ON;
848 _tizen_cb_event_window_rotate(void *data, int type EINA_UNUSED, void *event)
851 Ecore_Wl_Event_Window_Rotate *ev;
854 SDL_WindowData *wind;
858 return ECORE_CALLBACK_PASS_ON;
861 ew = ecore_wl_window_find(ev->win);
862 window = Tizen_FindWindow(_this, ew);
863 wind = window->driverdata;
865 if (wind->rotation != ev->angle) {
866 /* set ecore_wayland window rotation */
867 wind->rotation = ev->angle;
868 wind->received_rotation = 1;
871 return ECORE_CALLBACK_PASS_ON;
875 Tizen_InitWindow(_THIS)
877 SDL_VideoData *data = _this->driverdata;
879 data->windows = eina_hash_int32_new(NULL);
881 ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE,
882 _tizen_cb_event_window_visibility_change,_this);
883 ecore_event_handler_add(ECORE_EVENT_KEY_UP,
884 _tizen_cb_event_keyup_change,_this);
885 ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
886 _tizen_cb_event_keydown_change,_this);
887 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
888 _tizen_cb_event_mousedown_change,_this);
889 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
890 _tizen_cb_event_mouseup_change,_this);
891 ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
892 _tizen_cb_event_mousemove_change,_this);
893 ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_ROTATE,
894 _tizen_cb_event_window_rotate,_this);
895 ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_CONFIGURE,
896 _tizen_cb_window_configure,_this);
897 ecore_event_handler_add(ECORE_EVENT_JOYSTICK,
898 _tizen_cb_event_joystick_change,_this);
899 ecore_event_handler_add(ECORE_WL_EVENT_FOCUS_IN,
900 _tizen_cb_event_focus_in,_this);
901 ecore_event_handler_add(ECORE_WL_EVENT_FOCUS_OUT,
902 _tizen_cb_event_focus_out,_this);
903 ecore_event_handler_add(ECORE_WL_EVENT_MOUSE_IN,
904 _tizen_cb_event_mouse_in,_this);
905 ecore_event_handler_add(ECORE_WL_EVENT_MOUSE_OUT,
906 _tizen_cb_event_mouse_out,_this);
912 Tizen_DeinitWindow(_THIS)
914 SDL_VideoData *data = _this->driverdata;
916 eina_hash_free(data->windows);
918 #endif /* SDL_VIDEO_DRIVER_TIZEN */
920 /* vi: set ts=4 sw=4 expandtab: */