if (ecore_ipc_client_server_get(e->client) != ipc) \
return ECORE_CALLBACK_PASS_ON
-void Tizen_ExecuteIndicatorProcess()
+void _tizen_quickpanel_on(SDL_WindowData *wind)
{
+ SDL_Log("[SDL]Quick panel on");
+ ecore_wl_window_indicator_state_set(wind->window, ECORE_WL_INDICATOR_STATE_ON);
+ ecore_wl_indicator_visible_type_set(wind->window, ECORE_WL_INDICATOR_VISIBLE_TYPE_SHOWN);
+}
+
+void _tizen_quickpanel_off(SDL_WindowData *wind)
+{
+ SDL_Log("[SDL]Quick panel off");
+ ecore_wl_window_indicator_state_set(wind->window, ECORE_WL_INDICATOR_STATE_OFF);
+ ecore_wl_indicator_visible_type_set(wind->window, ECORE_WL_INDICATOR_VISIBLE_TYPE_HIDDEN);
+}
+
+void Tizen_ExecuteIndicatorProcess(SDL_WindowData *wind)
+{
+ SDL_VideoData* videoData = SDL_GetVideoDevice()->driverdata;
+ if(!videoData) return;
+
+
_tizen_init_ecore_ipc();
unsigned int childPID = fork();
if(childPID == 0)
else if(childPID == -1)
{
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[SDL] Failed fork");
+ videoData->indicator_on = SDL_FALSE;
+ videoData->indicator_visible = SDL_FALSE;
}
else
{
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "[SDL] parent process : %d", getpid());
+ videoData->indicator_on = SDL_TRUE;
+ videoData->indicator_visible = SDL_TRUE;
+ videoData->indicator_parent_id = wind->id;
+ }
+}
+
+void
+Tizen_TerminateIndicatorProcess(SDL_WindowData *wind)
+{
+ if(!wind) return;
+
+ SDL_VideoData* videoData = SDL_GetVideoDevice()->driverdata;
+ if(videoData->indicator_on)
+ {
+ _tizen_ecore_ipc_client_send(OP_TERMINATE, 0, 0, 0);
+ _tizen_quickpanel_off(wind);
}
}
-void _tizen_ecore_ipc_client_send(int major, int minor, int ref, int ref_to)
+SDL_bool
+Tizen_SupportIndicator(SDL_Window *window)
+{
+ SDL_VideoData* videoData = SDL_GetVideoDevice()->driverdata;
+ return (!(window->flags & SDL_WINDOW_BORDERLESS) && !videoData->indicator_on);
+}
+
+void
+Tizen_chk_indicator(SDL_Window *window)
+{
+ SDL_WindowData *wind = window->driverdata;
+ int screen_w, screen_h;
+
+ int rotation = (wind->output_rotation + wind->rotation) % 360;
+ if(rotation==90 || rotation==270)
+ ecore_wl_screen_size_get(&screen_h, &screen_w);
+ else
+ ecore_wl_screen_size_get(&screen_w, &screen_h);
+
+ if(window->w == screen_w && window->h == screen_h && window->x ==0 && window->y == 0)
+ {
+ if(Tizen_SupportIndicator(window))
+ {
+ wind->support_indicator = SDL_TRUE;
+ Tizen_ExecuteIndicatorProcess(wind);
+ }
+ else
+ {
+ wind->support_indicator = SDL_FALSE;
+ Tizen_TerminateIndicatorProcess(wind);
+ }
+ }
+ else
+ {
+ wind->support_indicator = SDL_FALSE;
+ Tizen_TerminateIndicatorProcess(wind);
+ }
+}
+
+void
+_tizen_ecore_ipc_client_send(int major, int minor, int ref, int ref_to)
{
Eina_List *ipc_clients = ecore_ipc_server_clients_get(ipc);
Eina_List *l;
ecore_ipc_client_send(cl, major, minor, ref, ref_to, 0, NULL, 0);
}
-static Eina_Bool _cb_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
+static Eina_Bool
+_cb_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
IPC_HEAD(Add);
return ECORE_CALLBACK_DONE;
}
-static Eina_Bool _cb_client_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
+static Eina_Bool
+_cb_client_del(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{
IPC_HEAD(Del);
SDL_Log("[SDL]_cb_client_del");
return ECORE_CALLBACK_DONE;
}
-static Eina_Bool _cb_client_data(void *data, int type EINA_UNUSED, void *event)
+static Eina_Bool
+_cb_client_data(void *data, int type EINA_UNUSED, void *event)
{
IPC_HEAD(Data);
Ecore_Ipc_Event_Server_Data* epcEvent = (Ecore_Ipc_Event_Server_Data*)event;
SDL_Log("[SDL]_cb_client_data: %d -> %d", epcEvent->major, epcEvent->minor);
+
+ SDL_VideoData* videoData = SDL_GetVideoDevice()->driverdata;
+ SDL_Window * window = (SDL_Window*)eina_hash_find(videoData->windows, &videoData->indicator_parent_id);
+ switch(epcEvent->major)
+ {
+ case OP_INDICATOR_INIT:
+ videoData->indicator_height = epcEvent->minor;
+ _tizen_quickpanel_on(window->driverdata);
+ break;
+ case OP_INDICATOR_SHOW:
+ videoData->indicator_visible = SDL_TRUE;
+ break;
+ case OP_INDICATOR_HIDE:
+ if(epcEvent->minor == 1)
+ {
+ _tizen_quickpanel_off(window->driverdata);
+ }
+ else if(epcEvent->minor == 2)
+ {
+ videoData->indicator_visible = SDL_FALSE;
+ }
+ break;
+ case OP_TERMINATE:
+ videoData->indicator_on = SDL_FALSE;
+ videoData->indicator_visible = SDL_FALSE;
+ break;
+ }
+
return ECORE_CALLBACK_DONE;
}
-int _tizen_init_ecore_ipc()
+int
+_tizen_init_ecore_ipc()
{
if(!ipc)
void
Tizen_ShowWindow(_THIS, SDL_Window *window)
{
- SDL_VideoData* videoData = SDL_GetVideoDevice()->driverdata;
-
- if(!(window->flags & SDL_WINDOW_BORDERLESS) && !videoData->indicator_on)
- {
- Tizen_ExecuteIndicatorProcess();
- }
-
SDL_WindowData *wind = window->driverdata;
ecore_wl_window_show(wind->window);
+ Tizen_chk_indicator(window);
}
+
void
Tizen_HideWindow(_THIS, SDL_Window *window)
{
window->fullscreen_mode.w = screen_w;
window->fullscreen_mode.h = screen_h;
+ Tizen_chk_indicator(window);
}
void
_tizen_rotation_do(window, wind, rotation);
}
+SDL_Window*
+Tizen_FindWindow(_THIS, Ecore_Wl_Window *ewin)
+{
+ SDL_VideoData *data = _this->driverdata;
+ int id;
+
+ id = ecore_wl_window_id_get(ewin);
+ return (SDL_Window*)eina_hash_find(data->windows, &id);
+}
+
void
_tizen_window_orientaiton_hint_callback(void *userdata, const char *name, const char *oldValue, const char *newValue)
{
void
Tizen_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered)
{
- SDL_VideoData* videoData = SDL_GetVideoDevice()->driverdata;
- if(!videoData->indicator_on)
- Tizen_ExecuteIndicatorProcess();
+ if(!bordered)
+ {
+ SDL_WindowData *wind = window->driverdata;
+ wind->support_indicator = SDL_FALSE;
+ Tizen_TerminateIndicatorProcess(window->driverdata);
+ }
+ else
+ {
+ Tizen_chk_indicator(window);
+ }
}
void
}
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SIZE_CHANGED, window->w, window->h);
#endif
-
+ Tizen_chk_indicator(window);
}
void
}
// TODO : consider to rotation status.
- ecore_wl_window_position_set(wind->window, window->x, window->y);
+ ecore_wl_window_position_set(wind->window, window->x, window->y);
+ Tizen_chk_indicator(window);
}
void
window->driverdata = NULL;
}
-SDL_Window*
-Tizen_FindWindow(_THIS, Ecore_Wl_Window *ewin)
-{
- SDL_VideoData *data = _this->driverdata;
- int id;
-
- id = ecore_wl_window_id_get(ewin);
- return (SDL_Window*)eina_hash_find(data->windows, &id);
-}
-
Eina_Bool
_tizen_cb_event_window_visibility_change(void *data, int type, void *event)
{