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 static Eina_Bool __stub_pre_visibility_cb(void *data, int type, void *event)
76 if (_appcore_mw_context.ops.window.pre_visibility)
77 _appcore_mw_context.ops.window.pre_visibility(type, event, _appcore_mw_context.data);
79 return ECORE_CALLBACK_RENEW;
82 EXPORT_API int appcore_multiwindow_base_init(appcore_multiwindow_base_ops ops, int argc, char **argv, void *data)
84 _appcore_mw_context.ops = ops;
85 _appcore_mw_context.data = data;
86 _appcore_mw_context.argc = argc;
87 _appcore_mw_context.argv = argv;
89 return appcore_base_init(ops.base, argc, argv, data);
92 static void __destroy_iter(gpointer data, gpointer user_data)
94 appcore_multiwindow_base_instance *inst = data;
99 appcore_multiwindow_base_instance_exit(inst);
102 static void __destroy_all(void)
104 g_list_foreach(_appcore_mw_context.instances, __destroy_iter, NULL);
107 static void __free_class(gpointer data)
109 appcore_multiwindow_base_class *cls = data;
115 EXPORT_API void appcore_multiwindow_base_fini(void)
118 g_list_free_full(_appcore_mw_context.classes, __free_class);
119 _appcore_mw_context.classes = NULL;
121 if (_appcore_mw_context.hshow) {
122 ecore_event_handler_del(_appcore_mw_context.hshow);
123 _appcore_mw_context.hshow = NULL;
126 if (_appcore_mw_context.hhide) {
127 ecore_event_handler_del(_appcore_mw_context.hhide);
128 _appcore_mw_context.hhide = NULL;
131 if (_appcore_mw_context.hvchange) {
132 ecore_event_handler_del(_appcore_mw_context.hvchange);
133 _appcore_mw_context.hvchange = NULL;
136 if (_appcore_mw_context.hlower) {
137 ecore_event_handler_del(_appcore_mw_context.hlower);
138 _appcore_mw_context.hlower = NULL;
141 if (_appcore_mw_context.hpvchange) {
142 ecore_event_handler_del(_appcore_mw_context.hpvchange);
143 _appcore_mw_context.hpvchange = NULL;
149 EXPORT_API void appcore_multiwindow_base_exit(void)
151 if (_appcore_mw_context.ops.base.exit)
152 _appcore_mw_context.ops.base.exit(_appcore_mw_context.data);
155 static int __on_receive(aul_type type, bundle *b, void *data)
157 return appcore_multiwindow_base_on_receive(type, b);
160 static int __on_create(void *data)
162 return appcore_multiwindow_base_on_create();
165 static int __on_terminate(void *data)
167 return appcore_multiwindow_base_on_terminate();
170 static void __window_on_show(int type, void *event, void *data)
172 appcore_multiwindow_base_window_on_show(type, event);
175 static void __window_on_hide(int type, void *event, void *data)
177 appcore_multiwindow_base_window_on_hide(type, event);
180 static void __window_on_lower(int type, void *event, void *data)
182 appcore_multiwindow_base_window_on_lower(type, event);
185 static void __window_on_visibility(int type, void *event, void *data)
187 appcore_multiwindow_base_window_on_visibility(type, event);
190 static void __window_on_pre_visibility(int type, void *event, void *data)
192 appcore_multiwindow_base_window_on_pre_visibility(type, event);
195 static void __run(void *data)
200 static void __exit(void *data)
205 static int __init(int argc, char **argv, void *data)
207 elm_init(argc, argv);
212 static void __finish(void)
216 /* Check loader case */
217 if (getenv("AUL_LOADER_INIT")) {
218 unsetenv("AUL_LOADER_INIT");
223 EXPORT_API appcore_multiwindow_base_ops appcore_multiwindow_base_get_default_ops(void)
225 appcore_multiwindow_base_ops ops;
227 ops.base = appcore_base_get_default_ops();
229 /* override methods */
230 ops.base.create = __on_create;
231 ops.base.terminate = __on_terminate;
232 ops.base.receive = __on_receive;
233 ops.base.init = __init;
234 ops.base.finish = __finish;
235 ops.base.run = __run;
236 ops.base.exit = __exit;
238 ops.window.show = __window_on_show;
239 ops.window.hide = __window_on_hide;
240 ops.window.lower = __window_on_lower;
241 ops.window.visibility = __window_on_visibility;
242 ops.window.pre_visibility = __window_on_pre_visibility;
247 EXPORT_API int appcore_multiwindow_base_on_receive(aul_type type, bundle *b)
249 appcore_base_on_receive(type, b);
254 EXPORT_API int appcore_multiwindow_base_on_create(void)
256 appcore_base_on_create();
258 _appcore_mw_context.hshow = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_SHOW, __stub_show_cb, NULL);
259 _appcore_mw_context.hhide = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_HIDE, __stub_hide_cb, NULL);
260 _appcore_mw_context.hvchange = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE,
261 __stub_visibility_cb, NULL);
262 _appcore_mw_context.hlower = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_LOWER, __stub_lower_cb, NULL);
263 _appcore_mw_context.hpvchange = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_PRE_VISIBILITY_CHANGE,
264 __stub_pre_visibility_cb, NULL);
269 EXPORT_API int appcore_multiwindow_base_on_terminate(void)
271 appcore_base_on_terminate();
276 EXPORT_API int appcore_multiwindow_base_on_control(bundle *b)
278 appcore_base_on_control(b);