2 * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <sys/types.h>
23 #include <linux/limits.h>
25 #include <Ecore_Wayland.h>
26 #include <Elementary.h>
27 #include <glib-object.h>
34 #include <bundle_internal.h>
36 #include "appcore_base.h"
37 #include "appcore_multiwindow_base.h"
38 #include "appcore_multiwindow_base_private.h"
40 appcore_multiwindow_base_context _appcore_mw_context;
42 static Eina_Bool __stub_show_cb(void *data, int type, void *event)
44 if (_appcore_mw_context.ops.window.show)
45 _appcore_mw_context.ops.window.show(type, event, _appcore_mw_context.data);
47 return ECORE_CALLBACK_RENEW;
50 static Eina_Bool __stub_hide_cb(void *data, int type, void *event)
52 if (_appcore_mw_context.ops.window.hide)
53 _appcore_mw_context.ops.window.hide(type, event, _appcore_mw_context.data);
55 return ECORE_CALLBACK_RENEW;
58 static Eina_Bool __stub_visibility_cb(void *data, int type, void *event)
60 if (_appcore_mw_context.ops.window.visibility)
61 _appcore_mw_context.ops.window.visibility(type, event, _appcore_mw_context.data);
63 return ECORE_CALLBACK_RENEW;
66 static Eina_Bool __stub_lower_cb(void *data, int type, void *event)
68 if (_appcore_mw_context.ops.window.lower)
69 _appcore_mw_context.ops.window.lower(type, event, _appcore_mw_context.data);
71 return ECORE_CALLBACK_RENEW;
74 EXPORT_API int appcore_multiwindow_base_init(appcore_multiwindow_base_ops ops, int argc, char **argv, void *data)
76 _appcore_mw_context.ops = ops;
77 _appcore_mw_context.data = data;
78 _appcore_mw_context.argc = argc;
79 _appcore_mw_context.argv = argv;
81 _appcore_mw_context.hshow = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_SHOW, __stub_show_cb, NULL);
82 _appcore_mw_context.hhide = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_HIDE, __stub_hide_cb, NULL);
83 _appcore_mw_context.hvchange = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE,
84 __stub_visibility_cb, NULL);
85 _appcore_mw_context.hlower = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_LOWER, __stub_lower_cb, NULL);
87 return appcore_base_init(ops.base, argc, argv, data);
90 static void __destroy_iter(gpointer data, gpointer user_data)
92 appcore_multiwindow_base_instance *inst = data;
97 appcore_multiwindow_base_instance_exit(inst);
100 static void __destroy_all(void)
102 g_list_foreach(_appcore_mw_context.instances, __destroy_iter, NULL);
105 static void __free_class(gpointer data)
107 appcore_multiwindow_base_class *cls = data;
113 EXPORT_API void appcore_multiwindow_base_fini(void)
116 g_list_free_full(_appcore_mw_context.classes, __free_class);
117 _appcore_mw_context.classes = NULL;
119 if (_appcore_mw_context.hshow) {
120 ecore_event_handler_del(_appcore_mw_context.hshow);
121 _appcore_mw_context.hshow = NULL;
124 if (_appcore_mw_context.hhide) {
125 ecore_event_handler_del(_appcore_mw_context.hhide);
126 _appcore_mw_context.hhide = NULL;
129 if (_appcore_mw_context.hvchange) {
130 ecore_event_handler_del(_appcore_mw_context.hvchange);
131 _appcore_mw_context.hvchange = NULL;
134 if (_appcore_mw_context.hlower) {
135 ecore_event_handler_del(_appcore_mw_context.hlower);
136 _appcore_mw_context.hlower = NULL;
142 EXPORT_API void appcore_multiwindow_base_exit(void)
144 if (_appcore_mw_context.ops.base.exit)
145 _appcore_mw_context.ops.base.exit(_appcore_mw_context.data);
148 static int __on_receive(aul_type type, bundle *b, void *data)
150 return appcore_multiwindow_base_on_receive(type, b);
153 static int __on_create(void *data)
155 return appcore_multiwindow_base_on_create();
158 static int __on_terminate(void *data)
160 return appcore_multiwindow_base_on_terminate();
163 static void __window_on_show(int type, void *event, void *data)
165 appcore_multiwindow_base_window_on_show(type, event);
168 static void __window_on_hide(int type, void *event, void *data)
170 appcore_multiwindow_base_window_on_hide(type, event);
173 static void __window_on_lower(int type, void *event, void *data)
175 appcore_multiwindow_base_window_on_lower(type, event);
178 static void __window_on_visibility(int type, void *event, void *data)
180 appcore_multiwindow_base_window_on_visibility(type, event);
183 static void __run(void *data)
188 static void __exit(void *data)
193 static int __init(int argc, char **argv, void *data)
195 elm_init(argc, argv);
200 static void __finish(void)
204 /* Check loader case */
205 if (getenv("AUL_LOADER_INIT")) {
206 unsetenv("AUL_LOADER_INIT");
211 EXPORT_API appcore_multiwindow_base_ops appcore_multiwindow_base_get_default_ops(void)
213 appcore_multiwindow_base_ops ops;
215 ops.base = appcore_base_get_default_ops();
217 /* override methods */
218 ops.base.create = __on_create;
219 ops.base.terminate = __on_terminate;
220 ops.base.receive = __on_receive;
221 ops.base.init = __init;
222 ops.base.finish = __finish;
223 ops.base.run = __run;
224 ops.base.exit = __exit;
226 ops.window.show = __window_on_show;
227 ops.window.hide = __window_on_hide;
228 ops.window.lower = __window_on_lower;
229 ops.window.visibility = __window_on_visibility;
234 EXPORT_API int appcore_multiwindow_base_on_receive(aul_type type, bundle *b)
236 appcore_base_on_receive(type, b);
241 EXPORT_API int appcore_multiwindow_base_on_create(void)
243 appcore_base_on_create();
248 EXPORT_API int appcore_multiwindow_base_on_terminate(void)
250 appcore_base_on_terminate();
255 EXPORT_API int appcore_multiwindow_base_on_control(bundle *b)
257 appcore_base_on_control(b);