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 <glib-object.h>
33 #include <bundle_internal.h>
35 #include "appcore_base.h"
36 #include "appcore_multiwindow_base.h"
37 #include "appcore_multiwindow_base_private.h"
39 appcore_multiwindow_base_context _appcore_mw_context;
41 static Eina_Bool __stub_show_cb(void *data, int type, void *event)
43 if (_appcore_mw_context.ops.window.show)
44 _appcore_mw_context.ops.window.show(type, event, _appcore_mw_context.data);
46 return ECORE_CALLBACK_RENEW;
49 static Eina_Bool __stub_hide_cb(void *data, int type, void *event)
51 if (_appcore_mw_context.ops.window.hide)
52 _appcore_mw_context.ops.window.hide(type, event, _appcore_mw_context.data);
54 return ECORE_CALLBACK_RENEW;
57 static Eina_Bool __stub_visibility_cb(void *data, int type, void *event)
59 if (_appcore_mw_context.ops.window.visibility)
60 _appcore_mw_context.ops.window.visibility(type, event, _appcore_mw_context.data);
62 return ECORE_CALLBACK_RENEW;
65 static Eina_Bool __stub_lower_cb(void *data, int type, void *event)
67 if (_appcore_mw_context.ops.window.lower)
68 _appcore_mw_context.ops.window.lower(type, event, _appcore_mw_context.data);
70 return ECORE_CALLBACK_RENEW;
73 static Eina_Bool __stub_pre_visibility_cb(void *data, int type, void *event)
75 if (_appcore_mw_context.ops.window.pre_visibility)
76 _appcore_mw_context.ops.window.pre_visibility(type, event, _appcore_mw_context.data);
78 return ECORE_CALLBACK_RENEW;
81 EXPORT_API int appcore_multiwindow_base_init(appcore_multiwindow_base_ops ops, int argc, char **argv, void *data)
83 _appcore_mw_context.ops = ops;
84 _appcore_mw_context.data = data;
85 _appcore_mw_context.argc = argc;
86 _appcore_mw_context.argv = argv;
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)
117 g_list_free_full(_appcore_mw_context.classes, __free_class);
118 _appcore_mw_context.classes = NULL;
120 if (_appcore_mw_context.hshow) {
121 ecore_event_handler_del(_appcore_mw_context.hshow);
122 _appcore_mw_context.hshow = NULL;
125 if (_appcore_mw_context.hhide) {
126 ecore_event_handler_del(_appcore_mw_context.hhide);
127 _appcore_mw_context.hhide = NULL;
130 if (_appcore_mw_context.hvchange) {
131 ecore_event_handler_del(_appcore_mw_context.hvchange);
132 _appcore_mw_context.hvchange = NULL;
135 if (_appcore_mw_context.hlower) {
136 ecore_event_handler_del(_appcore_mw_context.hlower);
137 _appcore_mw_context.hlower = NULL;
140 if (_appcore_mw_context.hpvchange) {
141 ecore_event_handler_del(_appcore_mw_context.hpvchange);
142 _appcore_mw_context.hpvchange = NULL;
148 EXPORT_API void appcore_multiwindow_base_exit(void)
150 if (_appcore_mw_context.ops.base.exit)
151 _appcore_mw_context.ops.base.exit(_appcore_mw_context.data);
154 static int __on_receive(aul_type type, bundle *b, void *data)
156 return appcore_multiwindow_base_on_receive(type, b);
159 static int __on_create(void *data)
161 return appcore_multiwindow_base_on_create();
164 static int __on_terminate(void *data)
166 return appcore_multiwindow_base_on_terminate();
169 static void __window_on_show(int type, void *event, void *data)
171 appcore_multiwindow_base_window_on_show(type, event);
174 static void __window_on_hide(int type, void *event, void *data)
176 appcore_multiwindow_base_window_on_hide(type, event);
179 static void __window_on_lower(int type, void *event, void *data)
181 appcore_multiwindow_base_window_on_lower(type, event);
184 static void __window_on_visibility(int type, void *event, void *data)
186 appcore_multiwindow_base_window_on_visibility(type, event);
189 static void __window_on_pre_visibility(int type, void *event, void *data)
191 appcore_multiwindow_base_window_on_pre_visibility(type, event);
194 EXPORT_API appcore_multiwindow_base_ops appcore_multiwindow_base_get_default_ops(void)
196 appcore_multiwindow_base_ops ops;
198 ops.base = appcore_base_get_default_ops();
200 /* override methods */
201 ops.base.create = __on_create;
202 ops.base.terminate = __on_terminate;
203 ops.base.receive = __on_receive;
204 ops.base.init = NULL;
205 ops.base.finish = NULL;
207 ops.base.exit = NULL;
209 ops.window.show = __window_on_show;
210 ops.window.hide = __window_on_hide;
211 ops.window.lower = __window_on_lower;
212 ops.window.visibility = __window_on_visibility;
213 ops.window.pre_visibility = __window_on_pre_visibility;
218 EXPORT_API int appcore_multiwindow_base_on_receive(aul_type type, bundle *b)
220 appcore_base_on_receive(type, b);
225 EXPORT_API int appcore_multiwindow_base_on_create(void)
227 appcore_base_on_create();
229 _appcore_mw_context.hshow = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_SHOW, __stub_show_cb, NULL);
230 _appcore_mw_context.hhide = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_HIDE, __stub_hide_cb, NULL);
231 _appcore_mw_context.hvchange = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_VISIBILITY_CHANGE,
232 __stub_visibility_cb, NULL);
233 _appcore_mw_context.hlower = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_LOWER, __stub_lower_cb, NULL);
234 _appcore_mw_context.hpvchange = ecore_event_handler_add(ECORE_WL_EVENT_WINDOW_PRE_VISIBILITY_CHANGE,
235 __stub_pre_visibility_cb, NULL);
240 EXPORT_API int appcore_multiwindow_base_on_terminate(void)
242 appcore_base_on_terminate();
247 EXPORT_API int appcore_multiwindow_base_on_control(bundle *b)
249 appcore_base_on_control(b);