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.
24 #include <Ecore_Wayland.h>
25 #include <glib-object.h>
29 #include "appcore_base.h"
30 #include "appcore_multiwindow_base.h"
31 #include "appcore_multiwindow_base_private.h"
33 extern appcore_multiwindow_base_context _appcore_mw_context;
35 static gint __comp(gconstpointer a, gconstpointer b)
37 const appcore_multiwindow_base_class *cls = a;
39 return strcmp(cls->id, b);
42 EXPORT_API appcore_multiwindow_base_instance_h appcore_multiwindow_base_instance_run(const char *class_id, const char *id, void *extra)
44 appcore_multiwindow_base_instance *inst;
45 GList * class_node = g_list_find_custom(_appcore_mw_context.classes, class_id, __comp);
49 inst = malloc(sizeof(appcore_multiwindow_base_instance));
53 inst->shell = class_node->data;
55 inst->id = strdup(id);
57 inst->is_resumed = false;
59 _appcore_mw_context.instances = g_list_append(_appcore_mw_context.instances, inst);
60 if (inst->shell->create)
61 inst->shell->create(inst, inst->shell->data);
66 EXPORT_API void appcore_multiwindow_base_instance_exit(appcore_multiwindow_base_instance_h context)
68 appcore_multiwindow_base_instance *inst = context;
70 appcore_multiwindow_base_instance_pause(inst);
71 if (inst->shell->terminate)
72 inst->shell->terminate(inst, inst->shell->data);
74 _appcore_mw_context.instances = g_list_remove(_appcore_mw_context.instances, inst);
79 EXPORT_API void appcore_multiwindow_base_instance_drop(appcore_multiwindow_base_instance_h context)
81 appcore_multiwindow_base_instance *inst = context;
83 inst->shell->terminate(inst, inst->shell->data);
85 _appcore_mw_context.instances = g_list_remove(_appcore_mw_context.instances, inst);
90 EXPORT_API void *appcore_multiwindow_base_instance_get_extra(appcore_multiwindow_base_instance_h context)
92 appcore_multiwindow_base_instance *inst = context;
97 EXPORT_API void appcore_multiwindow_base_instance_set_extra(appcore_multiwindow_base_instance_h context, void *extra)
99 appcore_multiwindow_base_instance *inst = context;
104 EXPORT_API bool appcore_multiwindow_base_instance_is_resumed(appcore_multiwindow_base_instance_h context)
106 appcore_multiwindow_base_instance *inst = context;
108 return inst->is_resumed;
111 EXPORT_API void appcore_multiwindow_base_instance_pause(appcore_multiwindow_base_instance_h context)
113 appcore_multiwindow_base_instance *inst = context;
115 if (!inst->is_resumed)
118 if (inst->shell->pause)
119 inst->shell->pause(inst, inst->shell->data);
120 inst->is_resumed = false;
123 EXPORT_API void appcore_multiwindow_base_instance_resume(appcore_multiwindow_base_instance_h context)
125 appcore_multiwindow_base_instance *inst = context;
127 if (inst->is_resumed)
130 if (inst->shell->resume)
131 inst->shell->resume(inst, inst->shell->data);
132 inst->is_resumed = true;
135 EXPORT_API const char *appcore_multiwindow_base_instance_get_id(appcore_multiwindow_base_instance_h context)
137 appcore_multiwindow_base_instance *inst = context;
142 EXPORT_API const char *appcore_multiwindow_base_instance_get_class_id(appcore_multiwindow_base_instance_h context)
144 appcore_multiwindow_base_instance *inst = context;
146 return inst->shell->id;
149 EXPORT_API const appcore_multiwindow_base_class *appcore_multiwindow_base_instance_get_class(appcore_multiwindow_base_instance_h context)
151 appcore_multiwindow_base_instance *inst = context;
156 static gint __comp_id(gconstpointer a, gconstpointer b)
158 const appcore_multiwindow_base_instance *inst = a;
160 return strcmp(inst->id, b);
163 EXPORT_API appcore_multiwindow_base_instance_h appcore_multiwindow_base_instance_find(const char *id)
165 GList * inst_node = g_list_find_custom(_appcore_mw_context.instances, id, __comp_id);
170 return inst_node->data;
173 EXPORT_API void appcore_multiwindow_base_instance_foreach(const char *class_id,
174 appcore_multiwindow_base_instance_cb cb, void *data)
176 GList * inst_node = _appcore_mw_context.instances;
177 appcore_multiwindow_base_instance *inst;
179 if (!class_id || !cb)
183 inst = inst_node->data;
185 if (!strcmp(class_id, inst->shell->id))
186 cb(class_id, inst->id, inst, data);
188 inst_node = g_list_next(inst_node);
192 EXPORT_API void appcore_multiwindow_base_instance_foreach_full(appcore_multiwindow_base_instance_cb cb,
195 GList * inst_node = _appcore_mw_context.instances;
196 appcore_multiwindow_base_instance *inst;
202 inst = inst_node->data;
203 cb(inst->shell->id, inst->id, inst, data);
204 inst_node = g_list_next(inst_node);
208 EXPORT_API int appcore_multiwindow_base_instance_get_cnt(void)
210 return g_list_length(_appcore_mw_context.instances);