91a98f55a6ae6fc2fdc81d78741c8a010430d1cb
[apps/core/preloaded/calendar.git] / common / lang-manager.c
1 /*
2   *
3   *  Copyright 2012  Samsung Electronics Co., Ltd
4   *
5   *  Licensed under the Flora License, Version 1.0 (the "License");
6   *  you may not use this file except in compliance with the License.
7   *  You may obtain a copy of the License at
8   *
9   *       http://floralicense.org/license/
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17
18 #include "cld.h"
19 #include "lang-manager.h"
20
21 typedef struct {
22         cal_lang_manager_callback callback;
23         void *callback_data;
24 } __cal_lang_manager_callback_data;
25
26 static Eina_List *__cal_lang_manager_callback_list;
27
28 void cal_lang_manager_apply()
29 {
30         CAL_FN_START;
31
32         if (!__cal_lang_manager_callback_list || !eina_list_count(__cal_lang_manager_callback_list))
33                 return;
34
35         Eina_List *cursor = NULL;
36         __cal_lang_manager_callback_data *data = NULL;
37
38         EINA_LIST_FOREACH(__cal_lang_manager_callback_list, cursor, data) {
39                 if (data && data->callback)
40                         data->callback(data->callback_data);
41         }
42 }
43
44 void cal_lang_manager_remove_all_callback()
45 {
46         CAL_FN_START;
47
48         if (!__cal_lang_manager_callback_list || !eina_list_count(__cal_lang_manager_callback_list))
49                 return;
50
51         Eina_List *cursor = NULL;
52         __cal_lang_manager_callback_data *data = NULL;
53
54         EINA_LIST_FOREACH(__cal_lang_manager_callback_list, cursor, data) {
55                 if (data) {
56                         __cal_lang_manager_callback_list = eina_list_remove(__cal_lang_manager_callback_list, data);
57
58                         free(data);
59                 }
60         }
61
62 }
63
64 void cal_lang_manager_add_callback(cal_lang_manager_callback callback, void *callback_data)
65 {
66         CAL_FN_START;
67
68         c_ret_if(!callback);
69
70         __cal_lang_manager_callback_data *data = NULL;
71
72         data = calloc(1, sizeof(__cal_lang_manager_callback_data));
73
74         data->callback = callback;
75         data->callback_data = callback_data;
76
77         __cal_lang_manager_callback_list = eina_list_append(__cal_lang_manager_callback_list, data);
78         c_warn_if(!__cal_lang_manager_callback_list, "eina_list_append() is failed.");
79 }
80
81 void cal_lang_manager_remove_callback(cal_lang_manager_callback callback, void *callback_data)
82 {
83         CAL_FN_START;
84
85         if (!__cal_lang_manager_callback_list || !eina_list_count(__cal_lang_manager_callback_list))
86                 return;
87
88         Eina_List *cursor = NULL;
89         __cal_lang_manager_callback_data *data = NULL;
90
91         EINA_LIST_FOREACH(__cal_lang_manager_callback_list, cursor, data) {
92                 if (data && data->callback == callback && data->callback_data == callback_data) {
93
94                         __cal_lang_manager_callback_list = eina_list_remove(__cal_lang_manager_callback_list, data);
95
96                         free(data);
97
98                         return;
99                 }
100         }
101 }