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;
82 _appcore_mw_context.hshow = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_SHOW, __stub_show_cb, NULL);
83 _appcore_mw_context.hhide = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_HIDE, __stub_hide_cb, NULL);
84 _appcore_mw_context.hvchange = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE,
85 __stub_visibility_cb, NULL);
86 _appcore_mw_context.hlower = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_LOWER, __stub_lower_cb, NULL);
88 return appcore_base_init(ops.base, argc, argv, data);
91 static void __destroy_iter(gpointer data, gpointer user_data)
93 appcore_multiwindow_base_instance *inst = data;
98 appcore_multiwindow_base_instance_exit(inst);
101 static void __destroy_all(void)
103 g_list_foreach(_appcore_mw_context.instances, __destroy_iter, NULL);
106 static void __free_class(gpointer data)
108 appcore_multiwindow_base_class *cls = data;
114 EXPORT_API void appcore_multiwindow_base_fini(void)
119 g_list_free_full(_appcore_mw_context.classes, __free_class);
120 _appcore_mw_context.classes = NULL;
122 if (_appcore_mw_context.hshow) {
123 ecore_event_handler_del(_appcore_mw_context.hshow);
124 _appcore_mw_context.hshow = NULL;
127 if (_appcore_mw_context.hhide) {
128 ecore_event_handler_del(_appcore_mw_context.hhide);
129 _appcore_mw_context.hhide = NULL;
132 if (_appcore_mw_context.hvchange) {
133 ecore_event_handler_del(_appcore_mw_context.hvchange);
134 _appcore_mw_context.hvchange = NULL;
137 if (_appcore_mw_context.hlower) {
138 ecore_event_handler_del(_appcore_mw_context.hlower);
139 _appcore_mw_context.hlower = NULL;
144 /* Check loader case */
145 if (getenv("AUL_LOADER_INIT")) {
146 unsetenv("AUL_LOADER_INIT");
151 EXPORT_API void appcore_multiwindow_base_exit(void)
153 if (_appcore_mw_context.ops.base.exit)
154 _appcore_mw_context.ops.base.exit(_appcore_mw_context.data);
157 static int __on_receive(aul_type type, bundle *b, void *data)
159 return appcore_multiwindow_base_on_receive(type, b);
162 static int __on_create(void *data)
164 return appcore_multiwindow_base_on_create();
167 static int __on_terminate(void *data)
169 return appcore_multiwindow_base_on_terminate();
172 static void __window_on_show(int type, void *event, void *data)
174 appcore_multiwindow_base_window_on_show(type, event);
177 static void __window_on_hide(int type, void *event, void *data)
179 appcore_multiwindow_base_window_on_hide(type, event);
182 static void __window_on_lower(int type, void *event, void *data)
184 appcore_multiwindow_base_window_on_lower(type, event);
187 static void __window_on_visibility(int type, void *event, void *data)
189 appcore_multiwindow_base_window_on_visibility(type, event);
192 static void __run(void *data)
197 static void __exit(void *data)
202 EXPORT_API appcore_multiwindow_base_ops appcore_multiwindow_base_get_default_ops(void)
204 appcore_multiwindow_base_ops ops;
206 ops.base = appcore_base_get_default_ops();
208 /* override methods */
209 ops.base.create = __on_create;
210 ops.base.terminate = __on_terminate;
211 ops.base.receive = __on_receive;
212 ops.base.run = __run;
213 ops.base.exit = __exit;
215 ops.window.show = __window_on_show;
216 ops.window.hide = __window_on_hide;
217 ops.window.lower = __window_on_lower;
218 ops.window.visibility = __window_on_visibility;
223 EXPORT_API int appcore_multiwindow_base_on_receive(aul_type type, bundle *b)
225 appcore_base_on_receive(type, b);
230 EXPORT_API int appcore_multiwindow_base_on_create(void)
232 appcore_base_on_create();
237 EXPORT_API int appcore_multiwindow_base_on_terminate(void)
239 appcore_base_on_terminate();
244 EXPORT_API int appcore_multiwindow_base_on_control(bundle *b)
246 appcore_base_on_control(b);