This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository enlightenment.

View the commit online.

commit aa5fbfb1d34dc042c6964e24ed4d375b24596204
Author: Carsten Haitzler <ras...@rasterman.com>
AuthorDate: Wed Dec 27 13:57:34 2023 +0000

    systray - fix re-fill on gadcon re-create e.g. when changing shelf cfg
    
    change shelf config like orientation and systray goes blank. this
    fixes it - delays re-fill to after main loop return with 0 sec timer
    
    fixes #53
    
    @fix
---
 src/modules/systray/e_mod_main.c          | 15 +++++++++++++++
 src/modules/systray/e_mod_main.h          |  2 ++
 src/modules/systray/e_mod_notifier_host.c | 20 +++++++++++++++-----
 3 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/src/modules/systray/e_mod_main.c b/src/modules/systray/e_mod_main.c
index 1cc229378..c8bcc7bed 100644
--- a/src/modules/systray/e_mod_main.c
+++ b/src/modules/systray/e_mod_main.c
@@ -128,8 +128,10 @@ _redo_sizing(Instance *inst)
    evas_object_geometry_get(inst->ui.gadget, NULL, NULL, &w, &h);
    EINA_LIST_FOREACH(inst->icons, l, o)
      {
+        edje_object_part_box_remove(inst->ui.gadget, "box", o);
         if (_is_horiz(inst)) evas_object_size_hint_min_set(o, h, 0);
         else evas_object_size_hint_min_set(o, 0, w);
+        edje_object_part_box_append(inst->ui.gadget, "box", o);
      }
 }
 
@@ -203,6 +205,15 @@ _systray_theme(Evas_Object *o, const char *shelf_style, const char *gc_style)
    e_theme_edje_object_set(o, NULL, _group_gadget);
 }
 
+static Eina_Bool
+_systray_delay_fill_timer_cb(void *data)
+{
+  Instance *inst = data;
+  systray_notifier_host_fill(inst->notifier);
+  inst->fill_timer = NULL;
+  return EINA_FALSE;
+}
+
 static E_Gadcon_Client *
 _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
 {
@@ -245,6 +256,8 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
 
    inst->notifier = systray_notifier_host_new(inst, inst->gcc->gadcon);
 
+   inst->fill_timer = ecore_timer_add(0.0, _systray_delay_fill_timer_cb, inst);
+
    return inst->gcc;
 }
 
@@ -265,6 +278,8 @@ _gc_shutdown(E_Gadcon_Client *gcc)
 
    if (inst->job.size_apply)
      ecore_job_del(inst->job.size_apply);
+   if (inst->fill_timer)
+     ecore_timer_del(inst->fill_timer);
 
    inst->icons = eina_list_free(inst->icons);
    E_FREE(inst);
diff --git a/src/modules/systray/e_mod_main.h b/src/modules/systray/e_mod_main.h
index f23ea3da4..727b05e4a 100644
--- a/src/modules/systray/e_mod_main.h
+++ b/src/modules/systray/e_mod_main.h
@@ -33,6 +33,7 @@ struct _Instance
    Evas                   *evas;
    Instance_Notifier_Host *notifier;
    Eina_List              *icons;
+   Ecore_Timer            *fill_timer;
    struct {
       Evas_Object         *gadget;
    } ui;
@@ -60,6 +61,7 @@ void systray_edje_box_remove(Instance *inst, Evas_Object *child);
 void systray_edje_box_prepend(Instance *inst, Evas_Object *child);
 
 Instance_Notifier_Host *systray_notifier_host_new(Instance *inst, E_Gadcon *gadcon);
+void systray_notifier_host_fill(Instance_Notifier_Host *host_inst);
 void systray_notifier_host_free(Instance_Notifier_Host *notifier);
 void systray_notifier_host_init(void);
 void systray_notifier_host_shutdown(void);
diff --git a/src/modules/systray/e_mod_notifier_host.c b/src/modules/systray/e_mod_notifier_host.c
index 76b56ee5a..de6a670b1 100644
--- a/src/modules/systray/e_mod_notifier_host.c
+++ b/src/modules/systray/e_mod_notifier_host.c
@@ -420,20 +420,30 @@ systray_notifier_item_update(Notifier_Item *item)
      _systray_notifier_inst_item_update(inst, item, EINA_TRUE);
 }
 
+void
+systray_notifier_host_fill(Instance_Notifier_Host *host_inst)
+{
+  Notifier_Item *item;
+
+  EINA_INLIST_FOREACH(ctx->item_list, item)
+    {
+      _systray_notifier_inst_item_update(host_inst, item, EINA_FALSE);
+    }
+}
+
 Instance_Notifier_Host *
 systray_notifier_host_new(Instance *inst, E_Gadcon *gadcon)
 {
-   Instance_Notifier_Host *host_inst = NULL;
-   Notifier_Item *item;
-   host_inst = calloc(1, sizeof(Instance_Notifier_Host));
+   Instance_Notifier_Host *host_inst = calloc(1, sizeof(Instance_Notifier_Host));
+
    EINA_SAFETY_ON_NULL_RETURN_VAL(host_inst, NULL);
+
    host_inst->inst = inst;
    host_inst->edje = systray_edje_get(inst);
    host_inst->gadcon = gadcon;
    ctx->instances = eina_inlist_append(ctx->instances, EINA_INLIST_GET(host_inst));
 
-   EINA_INLIST_FOREACH(ctx->item_list, item)
-     _systray_notifier_inst_item_update(host_inst, item, EINA_FALSE);
+//   systray_notifier_host_fill(host_inst);
 
    return host_inst;
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to