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); \
66 Ecore_Ipc_Server *ipc = NULL;
68 #define IPC_HEAD(_type) \
69 Ecore_Ipc_Event_Client_##_type *e = event; \
70 if (ecore_ipc_client_server_get(e->client) != ipc) \
71 return ECORE_CALLBACK_PASS_ON
73 void Tizen_ExecuteIndicatorProcess()
75 _tizen_init_ecore_ipc();
76 unsigned int childPID = fork();
79 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[SDL] child process : %d", getpid());
80 int ret = execl("/usr/apps/org.tizen.sdl_indicator/bin/sdl_indicator", "/usr/apps/org.tizen.sdl_indicator/bin/sdl_indicator", NULL);
83 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[SDL] Failed indicator process error:%s", strerror(errno));
84 kill(getpid(), SIGKILL);
87 else if(childPID == -1)
89 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[SDL] Failed fork");
93 SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[SDL] parent process : %d", getpid());
97 void _tizen_ecore_ipc_client_send(int major, int minor, int ref, int ref_to)
99 Eina_List *ipc_clients = ecore_ipc_server_clients_get(ipc);
101 Ecore_Ipc_Client *cl;
102 EINA_LIST_FOREACH(ipc_clients, l, cl)
103 ecore_ipc_client_send(cl, major, minor, ref, ref_to, 0, NULL, 0);
106 static Eina_Bool _cb_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
110 SDL_Log("[SDL]_cb_client_add");
112 SDL_VideoData* videoData = SDL_GetVideoDevice()->driverdata;
113 videoData->indicator_on = SDL_TRUE;
115 SDL_Window * window = SDL_GetVideoDevice()->windows;
116 SDL_WindowData *wind = window->driverdata;
118 int window_w, window_h;
119 ecore_wl_screen_size_get(&window_w, &window_h);
121 _tizen_ecore_ipc_client_send(OP_INDICATOR_SHOW, wind->rotation, 0, videoData->indicator_mode);
123 return ECORE_CALLBACK_DONE;
126 static Eina_Bool _cb_client_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
129 SDL_Log("[SDL]_cb_client_del");
130 Eina_List *ipc_clients = ecore_ipc_server_clients_get(ipc);
132 Ecore_Ipc_Client *cl;
133 EINA_LIST_FOREACH(ipc_clients, l, cl)
135 ecore_ipc_client_del(cl);
138 SDL_VideoData* videoData = SDL_GetVideoDevice()->driverdata;
139 videoData->indicator_on = SDL_FALSE;
141 return ECORE_CALLBACK_DONE;
144 static Eina_Bool _cb_client_data(void *data, int type EINA_UNUSED, void *event)
148 Ecore_Ipc_Event_Server_Data* epcEvent = (Ecore_Ipc_Event_Server_Data*)event;
149 SDL_Log("[SDL]_cb_client_data: %d -> %d", epcEvent->major, epcEvent->minor);
150 return ECORE_CALLBACK_DONE;
153 int _tizen_init_ecore_ipc()
158 if(!ecore_ipc_init())
159 SDL_Log("[SDL]Fail ecore_ipc");
161 ipc = ecore_ipc_server_add(ECORE_IPC_LOCAL_USER, "sdl_indicator", 0, NULL);
164 ecore_ipc_shutdown();
166 ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD, _cb_client_add, NULL);
167 ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL, _cb_client_del, NULL);
168 ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA, _cb_client_data, NULL);
174 _tizen_rotation_type_get()
176 static int type = ROTATION_TYPE_PRE_ROTATION;
177 static int checked = 0;
180 if (checked) return type;
182 engine = getenv("SDL_ROTATION");
186 if ((!strcasecmp(engine, "normal")))
187 type = ROTATION_TYPE_NORMAL_ROTATION;
188 else if ((!strcasecmp(engine, "pre_rotation")))
189 type = ROTATION_TYPE_PRE_ROTATION;
191 type = ROTATION_TYPE_PRE_ROTATION;
198 _tizen_PreRotatotion_LoadLibrary(SDL_VideoData *_this, const char *lib_path)
200 void *lib_dll_handle = NULL;
203 if (_this->tizen_pre_rotation_data.prerotation_dll_handle
204 && _this->tizen_pre_rotation_data.wl_egl_window_set_rotation
205 && _this->tizen_pre_rotation_data.wl_egl_window_get_capabilities)
208 _this->tizen_pre_rotation_data.prerotation_dll_handle = NULL;
209 _this->tizen_pre_rotation_data.wl_egl_window_set_rotation = NULL;
210 _this->tizen_pre_rotation_data.wl_egl_window_get_capabilities = NULL;
213 lib_dll_handle = SDL_LoadObject(lib_path);
215 if (!lib_dll_handle) {
216 path = "libwayland-egl.so";
217 lib_dll_handle = SDL_LoadObject(path);
220 _this->tizen_pre_rotation_data.prerotation_dll_handle = lib_dll_handle;
222 if (lib_dll_handle == NULL)
225 LOAD_FUNC(wl_egl_window_set_rotation);
226 LOAD_FUNC(wl_egl_window_get_capabilities);
232 Tizen_GetWindowWMInfo(_THIS, SDL_Window *window, SDL_SysWMinfo *info)
234 SDL_WindowData *wmdata = (SDL_WindowData *)window->driverdata;
235 info->info.tizen.egl_display = NULL;
236 info->info.tizen.egl_surface = NULL;
237 #if SDL_VIDEO_OPENGL_EGL
240 info->info.tizen.egl_display = (void*)_this->egl_data->egl_display;
242 info->info.tizen.egl_surface = (void*)wmdata->egl_surface;
244 info->subsystem = SDL_SYSWM_TIZEN;
249 Tizen_SetWindowHitTest(SDL_Window *window, SDL_bool enabled)
251 return 0; /* just succeed, the real work is done elsewhere. */
255 Tizen_SetWindowTitle(_THIS, SDL_Window * window)
257 SDL_WindowData *wind = window->driverdata;
258 ecore_wl_window_title_set(wind->window, window->title);
262 Tizen_ShowWindow(_THIS, SDL_Window *window)
264 SDL_VideoData* videoData = SDL_GetVideoDevice()->driverdata;
266 if(!(window->flags & SDL_WINDOW_FULLSCREEN) && !(window->flags & SDL_WINDOW_BORDERLESS) && !videoData->indicator_on)
268 Tizen_ExecuteIndicatorProcess();
271 SDL_WindowData *wind = window->driverdata;
272 ecore_wl_window_show(wind->window);
276 Tizen_HideWindow(_THIS, SDL_Window *window)
278 SDL_WindowData *wind = window->driverdata;
279 ecore_wl_window_hide(wind->window);
283 Tizen_RaiseWindow(_THIS, SDL_Window *window)
285 SDL_WindowData *wind = window->driverdata;
286 ecore_wl_window_raise(wind->window);
290 Tizen_SetWindowFullscreen(_THIS, SDL_Window *window,
291 SDL_VideoDisplay *_display, SDL_bool fullscreen)
297 Tizen_pre_rotation_set(SDL_WindowData *wind, int rotation)
299 tizen_wl_egl_window_rotation rot;
300 if (!wind->egl_window) return;
304 rot = TIZEN_ROTATION_270;
307 rot = TIZEN_ROTATION_180;
310 rot = TIZEN_ROTATION_90;
313 rot = TIZEN_ROTATION_0;
316 rot = TIZEN_ROTATION_0;
320 SDL_VideoData* _this = SDL_GetVideoDevice()->driverdata;
321 _this->tizen_pre_rotation_data.wl_egl_window_set_rotation(wind->egl_window, rot);
325 _tizen_set_window_size(SDL_Window * window, int w, int h)
329 SDL_SetError("Invalid window");
333 SDL_VideoDevice *_this = SDL_GetVideoDevice();
335 SDL_SetError("Video subsystem has not been initialized");
339 if (window->magic != &_this->window_magic) {
344 SDL_InvalidParamError("w");
348 SDL_InvalidParamError("h");
352 /* Make sure we don't exceed any window size limits */
353 if (window->min_w && w < window->min_w)
357 if (window->max_w && w > window->max_w)
361 if (window->min_h && h < window->min_h)
365 if (window->max_h && h > window->max_h)
370 window->windowed.w = w;
371 window->windowed.h = h;
378 _tizen_send_rotation_event(SDL_Window *window, unsigned int angle)
381 SDL_WindowData *wind;
382 wind = window->driverdata;
384 SDL_memset(&event, 0, sizeof(event));
385 event.type = SDL_ROTATEEVENT;
387 if (wind->support_pre_rotation)
388 event.user.data1 = (void*)0;
390 event.user.data1 = (void*)angle;
391 event.user.data2 = (void*)-1;
393 SDL_PushEvent(&event);
398 _tizen_rotation_do(SDL_Window *window, SDL_WindowData* wind, int rotation)
400 int window_w, window_h;
401 if(wind->rotation == 0 || wind->rotation == 180)
402 ecore_wl_window_geometry_get(wind->window, 0, 0, &window_w, &window_h);
404 ecore_wl_window_geometry_get(wind->window, 0, 0, &window_h, &window_w);
406 _tizen_set_window_size(window, window_w, window_h);
408 if(wind->support_pre_rotation)
409 Tizen_pre_rotation_set(wind, rotation);
411 _tizen_send_rotation_event(window, wind->rotation);
412 SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SIZE_CHANGED, window->w, window->h);
417 Tizen_rotate_update(SDL_Window *window)
419 SDL_WindowData *wind = window->driverdata;
423 if (ecore_wl_window_ignore_output_transform_get(wind->window))
429 Ecore_Wl_Output *output = ecore_wl_window_output_find(wind->window);
430 screen_rotation = ecore_wl_output_transform_get(output) * 90;
433 //Set Screen Rotation
434 wind->output_rotation = screen_rotation;
435 if(wind->support_pre_rotation)
436 ecore_wl_window_buffer_transform_set(wind->window, wind->output_rotation / 90);
438 ecore_wl_window_rotation_set(wind->window, wind->rotation);
440 int rotation = (wind->output_rotation + wind->rotation) % 360;
441 _tizen_rotation_do(window, wind, rotation);
445 _tizen_window_orientaiton_hint_callback(void *userdata, const char *name, const char *oldValue, const char *newValue)
448 char orientation_type[4][20] = {"Portrait","LandscapeLeft","PortraitUpsideDown","LandscapeRight"};
449 int checked[4] = {0,};
452 SDL_WindowData *wind = (SDL_WindowData*)userdata;
453 Ecore_Wl_Window *window = wind->window;
455 if (wind->rotation_supported == 0)
458 SDL_assert(SDL_strncmp(name, SDL_HINT_ORIENTATIONS, SDL_strlen(SDL_HINT_ORIENTATIONS)) == 0);
460 if ((oldValue == NULL) && (newValue == NULL))
464 p_str = SDL_strstr(newValue, orientation_type[i]);
466 if (p_str == newValue) {
469 else if (i == 1) rot = 90;
470 else if (i == 2) rot = 180;
471 else if (i == 3) rot = 270;
472 wind->rotation = rot;
493 ecore_wl_window_rotation_preferred_rotation_set(window, wind->rotation);
495 ecore_wl_window_rotation_available_rotations_set(window, (const int*)checked, j);
499 Tizen_rotate_update(Tizen_FindWindow(SDL_GetVideoDevice(), window));
503 _tizen_window_orientation_add_hint(void *data)
505 SDL_WindowData *wind = (SDL_WindowData*)data;
506 if (wind->rotation_supported == 0)
509 SDL_AddHintCallback(SDL_HINT_ORIENTATIONS, _tizen_window_orientaiton_hint_callback, data);
513 _tizen_cb_output_transform(void *data, int type EINA_UNUSED, void *event)
515 SDL_Window * window = SDL_GetVideoDevice()->windows;
516 SDL_WindowData *wind = window->driverdata;
518 if(!wind) return ECORE_CALLBACK_PASS_ON;
520 Ecore_Wl_Event_Output_Transform *ev = event;
521 Ecore_Wl_Output *output;
523 output = ecore_wl_window_output_find(wind->window);
524 if (output != ev->output) return ECORE_CALLBACK_PASS_ON;
526 wind->received_rotation = 1;
529 return ECORE_CALLBACK_PASS_ON;
533 _tizen_cb_ignore_output_transform(void *data, int type EINA_UNUSED, void *event EINA_UNUSED)
535 SDL_Window * window = SDL_GetVideoDevice()->windows;
536 SDL_WindowData *wind = window->driverdata;
538 if(!wind) return ECORE_CALLBACK_PASS_ON;
540 wind->received_rotation = 1;
542 return ECORE_CALLBACK_PASS_ON;
546 _tizen_output_transform_register(SDL_WindowData *wind)
550 Ecore_Wl_Output *output = ecore_wl_window_output_find(wind->window);
551 wind->output_rotation = ecore_wl_output_transform_get(output) * 90;
553 ecore_event_handler_add(ECORE_WL_EVENT_OUTPUT_TRANSFORM,
554 _tizen_cb_output_transform, NULL);
555 ecore_event_handler_add(ECORE_WL_EVENT_IGNORE_OUTPUT_TRANSFORM,
556 _tizen_cb_ignore_output_transform, NULL);
560 _tizen_indicator_opacity_hint_callback(void *userdata, const char *name, const char *oldValue, const char *newValue)
562 SDL_VideoData *data = (SDL_VideoData *)userdata;
564 if ((oldValue == NULL) && (newValue == NULL))
567 SDL_assert(SDL_strncmp(name, SDL_HINT_TIZEN_INDICATOR_OPACITY, SDL_strlen(SDL_HINT_TIZEN_INDICATOR_OPACITY)) == 0);
568 char indicator_type[4][20] = {"opaque","translucent","transparent","bg_transparent"};
569 for (int i=0;i<4;i++) {
570 if(SDL_strncmp(newValue, indicator_type[i], SDL_strlen(indicator_type[i])) == 0)
572 data->indicator_mode = i+1;
579 Tizen_CreateWindow(_THIS, SDL_Window *window)
581 SDL_VideoData *data = _this->driverdata;
582 SDL_WindowData *wind;
583 Ecore_Wl_Global *global;
584 Eina_Inlist *globals;
586 wind = calloc(1, sizeof * wind);
588 return SDL_OutOfMemory();
591 window->driverdata = wind;
592 window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */
594 #if SDL_VIDEO_OPENGL_EGL
595 if (window->flags & SDL_WINDOW_OPENGL) {
596 SDL_GL_LoadLibrary(NULL);
601 if (window->flags & SDL_WINDOW_VULKAN) {
602 if (!_this->vulkan_GetInstanceExtensions) {
603 SDL_SetError("No Vulkan support in video driver");
606 if (_this->vulkan_LoadLibrary(_this, NULL) < 0) {
607 SDL_SetError("Fail to load Vulkan Library");
612 if (window->x == SDL_WINDOWPOS_UNDEFINED) {
615 if (window->y == SDL_WINDOWPOS_UNDEFINED) {
619 if (!(globals = ecore_wl_globals_get()))
621 SDL_LogError(SDL_LOG_CATEGORY_ASSERT, "Failed to get wayland globals");
625 wind->window = ecore_wl_window_new(NULL,
626 window->x, window->y, window->w, window->h,
627 ECORE_WL_WINDOW_BUFFER_TYPE_SHM);
629 SDL_LogError(SDL_LOG_CATEGORY_ASSERT, "Failed to create wayland window");
632 _tizen_output_transform_register(wind);
634 wind->surface = ecore_wl_window_surface_create(wind->window);
635 if (!wind->surface) {
636 SDL_LogError(SDL_LOG_CATEGORY_ASSERT, "Failed to create wayland window surface");
639 ecore_wl_window_type_set(wind->window, ECORE_WL_WINDOW_TYPE_UTILITY);
642 wind->rotation_supported = 0;
643 wind->received_rotation = 0;
645 #if SDL_VIDEO_OPENGL_EGL
646 if (window->flags & SDL_WINDOW_OPENGL) {
648 if(wind->output_rotation == 90 || wind->output_rotation == 270)
649 wind->egl_window = wl_egl_window_create(wind->surface, window->h, window->w);
651 wind->egl_window = wl_egl_window_create(wind->surface, window->w, window->h);
653 /* Create the GLES window surface */
654 wind->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) wind->egl_window);
655 if (wind->egl_surface == EGL_NO_SURFACE) {
656 SDL_LogError(SDL_LOG_CATEGORY_ASSERT, "failed to create a window surface");
660 if (!_this->gl_config.alpha_size) {
661 ecore_wl_window_opaque_region_set(wind->window, window->x, window->y, window->w, window->h);
664 wl_surface_set_opaque_region(wind->surface, NULL);
667 //Support PreRotation
668 wind->support_pre_rotation = 0;
669 if (_tizen_rotation_type_get() && _tizen_PreRotatotion_LoadLibrary(data, "libwayland-egl.so")) {
670 if (data->tizen_pre_rotation_data.wl_egl_window_get_capabilities(wind->egl_window) == TIZEN_WL_EGL_WINDOW_CAPABILITY_ROTATION_SUPPORTED ) {
671 wind->support_pre_rotation = 1;
676 wl_egl_window_resize(wind->egl_window, window->w, window->h, 0, 0);
682 wind->id = ecore_wl_window_id_get(wind->window);
683 eina_hash_add(data->windows, &wind->id, window);
685 Tizen_InitKeyboard(_this);
686 SDL_SetMouseFocus(window);
688 if (window->flags & 0x00008000) {
689 ecore_wl_window_input_region_set(wind->window, -1, -1, 1, 1);
690 ecore_wl_window_focus_skip_set(wind->window, EINA_TRUE);
693 EINA_INLIST_FOREACH(globals, global) {
694 if (!strcmp(global->interface, "tizen_policy_ext")) {
695 wind->rotation_supported = 1;
699 // Add orientaiton hint cb
700 _tizen_window_orientation_add_hint((void*)wind);
701 SDL_AddHintCallback(SDL_HINT_TIZEN_INDICATOR_OPACITY, _tizen_indicator_opacity_hint_callback, data);
703 Tizen_rotate_update(window);
709 Tizen_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered)
711 SDL_VideoData* videoData = SDL_GetVideoDevice()->driverdata;
712 if(!videoData->indicator_on)
713 Tizen_ExecuteIndicatorProcess();
717 Tizen_SetWindowSize(_THIS, SDL_Window *window)
719 SDL_WindowData *wind = window->driverdata;
720 if (!wind->egl_window)
723 if(wind->support_pre_rotation && (wind->rotation==90 || wind->rotation==270))
724 ecore_wl_window_update_size(wind->window, window->h, window->w);
726 ecore_wl_window_update_size(wind->window, window->w, window->h);
728 // TODO : consider to rotation status.
729 #if SDL_VIDEO_OPENGL_EGL
730 if (window->flags & SDL_WINDOW_OPENGL) {
731 if(wind->output_rotation==90 || wind->output_rotation==270)
732 wl_egl_window_resize(wind->egl_window, window->h, window->w, 0, 0);
734 wl_egl_window_resize(wind->egl_window, window->w, window->h, 0, 0);
741 Tizen_GetWindowSize(_THIS, SDL_Window *window, int *w, int *h)
743 SDL_WindowData *wind = window->driverdata;
748 if (w) *w = window->w;
749 if (h) *h = window->h;
753 Tizen_SetWindowPosition(_THIS, SDL_Window * window)
755 SDL_WindowData *wind = window->driverdata;
760 // TODO : consider to rotation status.
761 ecore_wl_window_position_set(wind->window, window->x, window->y);
765 Tizen_DestroyWindow(_THIS, SDL_Window *window)
767 SDL_VideoData *data = _this->driverdata;
768 SDL_WindowData *wind = window->driverdata;
771 eina_hash_del(data->windows, &wind->id, window);
772 #if SDL_VIDEO_OPENGL_EGL
773 if (window->flags & SDL_WINDOW_OPENGL) {
774 SDL_EGL_DestroySurface(_this, wind->egl_surface);
775 wl_egl_window_destroy(wind->egl_window);
778 ecore_wl_window_free(wind->window);
782 window->driverdata = NULL;
786 Tizen_FindWindow(_THIS, Ecore_Wl_Window *ewin)
788 SDL_VideoData *data = _this->driverdata;
791 id = ecore_wl_window_id_get(ewin);
792 return (SDL_Window*)eina_hash_find(data->windows, &id);
796 _tizen_cb_event_window_visibility_change(void *data, int type, void *event)
799 Ecore_Wl_Event_Window_Visibility_Change *ev;
804 ew = ecore_wl_window_find(ev->win);
805 window = Tizen_FindWindow(_this, ew);
807 SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SHOWN, 0, 0);
808 SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESTORED, 0, 0);
809 return ECORE_CALLBACK_PASS_ON;
813 _tizen_cb_window_configure(void *data, int type EINA_UNUSED, void *event)
818 SDL_WindowData *wind;
819 Ecore_Wl_Event_Window_Configure *ev;
821 ew = ecore_wl_window_find(ev->win);
822 window = Tizen_FindWindow(_this, ew);
823 wind = window->driverdata;
825 if (wind->rotation_supported == 0){
826 return ECORE_CALLBACK_PASS_ON;
829 return ECORE_CALLBACK_PASS_ON;
833 _tizen_cb_event_window_rotate(void *data, int type EINA_UNUSED, void *event)
836 Ecore_Wl_Event_Window_Rotate *ev;
839 SDL_WindowData *wind;
843 return ECORE_CALLBACK_PASS_ON;
846 ew = ecore_wl_window_find(ev->win);
847 window = Tizen_FindWindow(_this, ew);
848 wind = window->driverdata;
850 if (wind->rotation != ev->angle) {
851 /* set ecore_wayland window rotation */
852 wind->rotation = ev->angle;
853 wind->received_rotation = 1;
856 return ECORE_CALLBACK_PASS_ON;
860 Tizen_InitWindow(_THIS)
862 SDL_VideoData *data = _this->driverdata;
864 data->windows = eina_hash_int32_new(NULL);
866 ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE,
867 _tizen_cb_event_window_visibility_change,_this);
868 ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_ROTATE,
869 _tizen_cb_event_window_rotate,_this);
870 ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_CONFIGURE,
871 _tizen_cb_window_configure,_this);
873 ecore_event_handler_add(ECORE_EVENT_KEY_UP,
874 _tizen_cb_event_keyup_change,_this);
875 ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
876 _tizen_cb_event_keydown_change,_this);
878 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
879 _tizen_cb_event_mousedown_change,_this);
880 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
881 _tizen_cb_event_mouseup_change,_this);
882 ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
883 _tizen_cb_event_mousemove_change,_this);
884 ecore_event_handler_add(ECORE_WL_EVENT_MOUSE_IN,
885 _tizen_cb_event_mouse_in,_this);
886 ecore_event_handler_add(ECORE_WL_EVENT_MOUSE_OUT,
887 _tizen_cb_event_mouse_out,_this);
889 ecore_event_handler_add(ECORE_WL_EVENT_FOCUS_IN,
890 _tizen_cb_event_focus_in,_this);
891 ecore_event_handler_add(ECORE_WL_EVENT_FOCUS_OUT,
892 _tizen_cb_event_focus_out,_this);
894 ecore_event_handler_add(ECORE_EVENT_JOYSTICK,
895 _tizen_cb_event_joystick_change,_this);
901 Tizen_DeinitWindow(_THIS)
903 SDL_VideoData *data = _this->driverdata;
905 eina_hash_free(data->windows);
907 #endif /* SDL_VIDEO_DRIVER_TIZEN */
909 /* vi: set ts=4 sw=4 expandtab: */