elementary: rely on main loop terminate event to execute ELM_POLICY_EXIT_WINDOWS_DEL.
authorCedric Bail <cedric@osg.samsung.com>
Fri, 27 Oct 2017 23:20:56 +0000 (16:20 -0700)
committerCedric Bail <cedric@osg.samsung.com>
Fri, 27 Oct 2017 23:20:56 +0000 (16:20 -0700)
src/lib/elementary/elm_main.c

index 9ce1423..ddcddd9 100644 (file)
@@ -1344,6 +1344,16 @@ elm_run(void)
    ecore_main_loop_begin();
 }
 
+static void
+_on_terminate(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED)
+{
+   Eina_List *l, *l_next;
+   Evas_Object *win;
+
+   EINA_LIST_FOREACH_SAFE(_elm_win_list, l, l_next, win)
+     evas_object_del(win);
+}
+
 EAPI void
 efl_exit(int exit_code)
 {
@@ -1352,15 +1362,6 @@ efl_exit(int exit_code)
    eina_value_setup(&v, EINA_VALUE_TYPE_INT);
    eina_value_set(&v, &exit_code);
    efl_loop_quit(ecore_main_loop_get(), v);
-
-   if (elm_policy_get(ELM_POLICY_EXIT) == ELM_POLICY_EXIT_WINDOWS_DEL)
-     {
-        Eina_List *l, *l_next;
-        Evas_Object *win;
-
-        EINA_LIST_FOREACH_SAFE(_elm_win_list, l, l_next, win)
-          evas_object_del(win);
-     }
 }
 
 EAPI void
@@ -1382,6 +1383,20 @@ elm_policy_set(unsigned int policy,
    if (value == _elm_policies[policy])
      return EINA_TRUE;
 
+   if (policy == ELM_POLICY_EXIT)
+     {
+        if (value == ELM_POLICY_EXIT_WINDOWS_DEL)
+          {
+             efl_event_callback_add(ecore_main_loop_get(), EFL_LOOP_EVENT_TERMINATE,
+                                    _on_terminate, NULL);
+          }
+        else
+          {
+             efl_event_callback_del(ecore_main_loop_get(), EFL_LOOP_EVENT_TERMINATE,
+                                    _on_terminate, NULL);
+          }
+     }
+
    /* TODO: validate policy? */
 
    ev = malloc(sizeof(*ev));