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 <glib-object.h>
28 #include "appcore_base.h"
29 #include "appcore_multiwindow_base.h"
30 #include "appcore_multiwindow_base_private.h"
32 extern appcore_multiwindow_base_context _appcore_mw_context;
34 static gint __comp(gconstpointer a, gconstpointer b)
36 const appcore_multiwindow_base_class *cls = a;
38 return strcmp(cls->id, b);
41 EXPORT_API appcore_multiwindow_base_instance_h appcore_multiwindow_base_instance_run(const char *class_id, const char *id, void *extra)
43 appcore_multiwindow_base_instance *inst;
44 GList * class_node = g_list_find_custom(_appcore_mw_context.classes, class_id, __comp);
48 inst = malloc(sizeof(appcore_multiwindow_base_instance));
52 inst->shell = class_node->data;
54 inst->id = strdup(id);
56 inst->is_resumed = false;
58 _appcore_mw_context.instances = g_list_append(_appcore_mw_context.instances, inst);
59 if (inst->shell->create)
60 inst->shell->create(inst, inst->shell->data);
65 EXPORT_API void appcore_multiwindow_base_instance_exit(appcore_multiwindow_base_instance_h context)
67 appcore_multiwindow_base_instance *inst = context;
69 appcore_multiwindow_base_instance_pause(inst);
70 if (inst->shell->terminate)
71 inst->shell->terminate(inst, inst->shell->data);
73 _appcore_mw_context.instances = g_list_remove(_appcore_mw_context.instances, inst);
78 EXPORT_API void appcore_multiwindow_base_instance_drop(appcore_multiwindow_base_instance_h context)
80 appcore_multiwindow_base_instance *inst = context;
82 inst->shell->terminate(inst, inst->shell->data);
84 _appcore_mw_context.instances = g_list_remove(_appcore_mw_context.instances, inst);
89 EXPORT_API void *appcore_multiwindow_base_instance_get_extra(appcore_multiwindow_base_instance_h context)
91 appcore_multiwindow_base_instance *inst = context;
96 EXPORT_API void appcore_multiwindow_base_instance_set_extra(appcore_multiwindow_base_instance_h context, void *extra)
98 appcore_multiwindow_base_instance *inst = context;
103 EXPORT_API bool appcore_multiwindow_base_instance_is_resumed(appcore_multiwindow_base_instance_h context)
105 appcore_multiwindow_base_instance *inst = context;
107 return inst->is_resumed;
110 EXPORT_API void appcore_multiwindow_base_instance_pause(appcore_multiwindow_base_instance_h context)
112 appcore_multiwindow_base_instance *inst = context;
114 if (!inst->is_resumed)
117 if (inst->shell->pause)
118 inst->shell->pause(inst, inst->shell->data);
119 inst->is_resumed = false;
122 EXPORT_API void appcore_multiwindow_base_instance_resume(appcore_multiwindow_base_instance_h context)
124 appcore_multiwindow_base_instance *inst = context;
126 if (inst->is_resumed)
129 if (inst->shell->resume)
130 inst->shell->resume(inst, inst->shell->data);
131 inst->is_resumed = true;
134 EXPORT_API const char *appcore_multiwindow_base_instance_get_id(appcore_multiwindow_base_instance_h context)
136 appcore_multiwindow_base_instance *inst = context;
141 EXPORT_API const char *appcore_multiwindow_base_instance_get_class_id(appcore_multiwindow_base_instance_h context)
143 appcore_multiwindow_base_instance *inst = context;
145 return inst->shell->id;
148 EXPORT_API const appcore_multiwindow_base_class *appcore_multiwindow_base_instance_get_class(appcore_multiwindow_base_instance_h context)
150 appcore_multiwindow_base_instance *inst = context;
155 static gint __comp_id(gconstpointer a, gconstpointer b)
157 const appcore_multiwindow_base_instance *inst = a;
159 return strcmp(inst->id, b);
162 EXPORT_API appcore_multiwindow_base_instance_h appcore_multiwindow_base_instance_find(const char *id)
164 GList * inst_node = g_list_find_custom(_appcore_mw_context.instances, id, __comp_id);
169 return inst_node->data;
172 EXPORT_API void appcore_multiwindow_base_instance_foreach(const char *class_id,
173 appcore_multiwindow_base_instance_cb cb, void *data)
175 GList * inst_node = _appcore_mw_context.instances;
176 appcore_multiwindow_base_instance *inst;
178 if (!class_id || !cb)
182 inst = inst_node->data;
184 if (!strcmp(class_id, inst->shell->id))
185 cb(class_id, inst->id, inst, data);
187 inst_node = g_list_next(inst_node);
191 EXPORT_API void appcore_multiwindow_base_instance_foreach_full(appcore_multiwindow_base_instance_cb cb,
194 GList * inst_node = _appcore_mw_context.instances;
195 appcore_multiwindow_base_instance *inst;
201 inst = inst_node->data;
202 cb(inst->shell->id, inst->id, inst, data);
203 inst_node = g_list_next(inst_node);
207 EXPORT_API int appcore_multiwindow_base_instance_get_cnt(void)
209 return g_list_length(_appcore_mw_context.instances);