netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=6a16a9d4141ac37e3833352212b52535d9f93825

commit 6a16a9d4141ac37e3833352212b52535d9f93825
Author: Alastair Poole <[email protected]>
Date:   Fri Jul 3 13:20:24 2020 +0100

    about: Don't use static global in animator thread.
    
    A global would work, or just a pointer as here.
    IDK why Linux and FreeBSD didn't have any issues here.
---
 src/bin/ui/ui_util.c | 52 +++++++++++++++++++++++++++-------------------------
 1 file changed, 27 insertions(+), 25 deletions(-)

diff --git a/src/bin/ui/ui_util.c b/src/bin/ui/ui_util.c
index 8270deb..5b262e6 100644
--- a/src/bin/ui/ui_util.c
+++ b/src/bin/ui/ui_util.c
@@ -206,32 +206,31 @@ evisum_child_window_show(Evas_Object *parent, Evas_Object 
*win)
    evas_object_show(win);
 }
 
-static Ecore_Animator *_animator = NULL;
-
 typedef struct {
-   int pos;
-   Evas_Object *label;
-   Evas_Object *version;
-   Evas_Object *bg;
+   Ui             *ui;
+   Evas_Object    *label;
+   Evas_Object    *version;
+   Evas_Object    *bg;
+   Ecore_Animator *animator;
+   int             pos;
 } Animate_Data;
 
-static Animate_Data about_data;
-
 static void
 _win_del_cb(void *data, Evas_Object *obj,
             void *event_info EINA_UNUSED)
 {
-   Evas_Object *win;
+   Animate_Data *ad;
    Ui *ui;
 
-   win = data;
+   ad = data;
+   ui = ad->ui;
+
+   if (ad->animator)
+     ecore_animator_del(ad->animator);
+
+   free(ad);
 
-   if (_animator)
-     ecore_animator_del(_animator);
-   _animator = NULL;
-   ui = evas_object_data_get(win, "ui");
-   if (!ui) return;
-   evas_object_del(win);
+   evas_object_del(ui->win_about);
    ui->win_about = NULL;
 }
 
@@ -257,6 +256,7 @@ void
 evisum_about_window_show(void *data)
 {
    Ui *ui;
+   Animate_Data *about;
    Evas_Object *win, *bg, *box, *version, *label, *btn;
    const char *copyright =
       "<font color=#ffffff>"
@@ -287,8 +287,6 @@ evisum_about_window_show(void *data)
 
    ui->win_about = win = elm_win_add(ui->win, "evisum", ELM_WIN_DIALOG_BASIC);
    elm_win_title_set(win, "About Evisum");
-   evas_object_smart_callback_add(win, "delete,request", _win_del_cb, win);
-   evas_object_data_set(win, "ui", ui);
 
    bg = elm_bg_add(win);
    evas_object_size_hint_weight_set(bg, EXPAND, EXPAND);
@@ -316,23 +314,27 @@ evisum_about_window_show(void *data)
                    eina_slstr_printf("<font color=#ffffff><b>%s</b>",
                    PACKAGE_VERSION));
 
+   about = malloc(sizeof(Animate_Data));
+   about->bg = bg;
+   about->label = label;
+   about->version = version;
+   about->pos = elm_config_scale_get() * 320;
+   about->ui = ui;
+   about->animator = ecore_animator_add(about_anim, about);
+
    btn = elm_button_add(win);
    evas_object_size_hint_align_set(btn, 0.5, 0.9);
    evas_object_size_hint_weight_set(btn, EXPAND, EXPAND);
    elm_object_text_set(btn, _("Okay!"));
    evas_object_show(btn);
-   evas_object_smart_callback_add(btn, "clicked", _win_del_cb, win);
 
-   memset(&about_data, 0, sizeof(Animate_Data));
-   about_data.bg = bg;
-   about_data.label = label;
-   about_data.version = version;
-   about_data.pos = elm_config_scale_get() * 320;
-   _animator = ecore_animator_add(about_anim, &about_data);
+   evas_object_smart_callback_add(btn, "clicked", _win_del_cb, about);
+   evas_object_smart_callback_add(win, "delete,request", _win_del_cb, about);
 
    elm_box_pack_end(box, version);
    elm_box_pack_end(box, label);
    elm_box_pack_end(box, btn);
    elm_object_content_set(win, box);
+
    evas_object_show(win);
 }

-- 


Reply via email to