+static void __on_low_memory(keynode_t *key, void *data)
+{
+ int val;
+
+ val = vconf_keynode_get_int(key);
+ if (val == VCONFKEY_SYSMAN_LOW_MEMORY_SOFT_WARNING) {
+ app_event_handler_h handler;
+ struct app_event_info event;
+
+ _I("widget_app_low_memory");
+
+ event.type = APP_EVENT_LOW_MEMORY;
+ event.value = (void *)&val;
+
+ GList *iter = g_list_first(handler_list[APP_EVENT_LOW_MEMORY]);
+
+ while (iter) {
+ handler = (app_event_handler_h) iter->data;
+ handler->cb(&event, handler->data);
+ iter = g_list_next(iter);
+ }
+ }
+}
+
+static void __on_low_battery(keynode_t *key, void *data)
+{
+ int val;
+
+ val = vconf_keynode_get_int(key);
+ if (val <= VCONFKEY_SYSMAN_BAT_CRITICAL_LOW) {
+ app_event_handler_h handler;
+ struct app_event_info event;
+
+ _I("widget_app_low_battery");
+
+ event.type = APP_EVENT_LOW_BATTERY;
+ event.value = (void *)&val;
+
+ GList *iter = g_list_first(handler_list[APP_EVENT_LOW_BATTERY]);
+
+ while (iter) {
+ handler = (app_event_handler_h) iter->data;
+ handler->cb(&event, handler->data);
+ iter = g_list_next(iter);
+ }
+ }
+}
+
+static void __on_lang_changed(keynode_t *key, void *data)
+{
+ char *val;
+
+ _update_lang();
+ val = vconf_keynode_get_str(key);
+
+ app_event_handler_h handler;
+ struct app_event_info event;
+
+ _I("widget_app_lang_changed");
+
+ event.type = APP_EVENT_LANGUAGE_CHANGED;
+ event.value = (void *)val;
+
+ GList *iter = g_list_first(handler_list[APP_EVENT_LANGUAGE_CHANGED]);
+
+ while (iter) {
+ handler = (app_event_handler_h) iter->data;
+ handler->cb(&event, handler->data);
+ iter = g_list_next(iter);
+ }
+}
+
+static void __on_region_changed(keynode_t *key, void *data)
+{
+ char *val;
+
+ _update_region();
+ val = vconf_keynode_get_str(key);
+
+ app_event_handler_h handler;
+ struct app_event_info event;
+
+ _I("widget_app_region_changed");
+
+ event.type = APP_EVENT_REGION_FORMAT_CHANGED;
+ event.value = (void *)val;
+
+ GList *iter = g_list_first(handler_list[APP_EVENT_REGION_FORMAT_CHANGED]);
+
+ while (iter) {
+ handler = (app_event_handler_h) iter->data;
+ handler->cb(&event, handler->data);
+ iter = g_list_next(iter);
+ }
+}
+
+static void __register_event(int event_type)
+{
+ switch (event_type) {
+ case APP_EVENT_LOW_MEMORY:
+ vconf_notify_key_changed(VCONFKEY_SYSMAN_LOW_MEMORY, __on_low_memory, NULL);
+ break;
+
+ case APP_EVENT_LOW_BATTERY:
+ vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, __on_low_battery, NULL);
+ break;
+
+ case APP_EVENT_LANGUAGE_CHANGED:
+ vconf_notify_key_changed(VCONFKEY_LANGSET, __on_lang_changed, NULL);
+ break;
+
+ case APP_EVENT_REGION_FORMAT_CHANGED:
+ vconf_notify_key_changed(VCONFKEY_REGIONFORMAT, __on_region_changed, NULL);
+ break;
+ }
+}
+
+static void __unregister_event(int event_type)
+{
+ switch (event_type) {
+ case APP_EVENT_LOW_MEMORY:
+ vconf_ignore_key_changed(VCONFKEY_SYSMAN_LOW_MEMORY, __on_low_memory);
+ break;
+
+ case APP_EVENT_LOW_BATTERY:
+ vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, __on_low_battery);
+ break;
+
+ case APP_EVENT_LANGUAGE_CHANGED:
+ vconf_ignore_key_changed(VCONFKEY_LANGSET, __on_lang_changed);
+ break;
+
+ case APP_EVENT_REGION_FORMAT_CHANGED:
+ vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT, __on_region_changed);
+ break;
+ }
+}
+
+static void _widget_core_set_appcore_event_cb(void)
+{
+ __register_event(APP_EVENT_LANGUAGE_CHANGED);
+ __register_event(APP_EVENT_REGION_FORMAT_CHANGED);
+}
+
+static void _widget_core_unset_appcore_event_cb(void)
+{
+ __unregister_event(APP_EVENT_LANGUAGE_CHANGED);
+ __unregister_event(APP_EVENT_REGION_FORMAT_CHANGED);
+}
+