netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=68403cf787c426df3466c903f72ab64bddf0a1dc

commit 68403cf787c426df3466c903f72ab64bddf0a1dc
Author: Alastair Poole <nets...@gmail.com>
Date:   Mon Dec 28 20:20:15 2020 +0000

    openbsd: amd64.
    
    Firstly, we don't need so many locks as we blocking the main loop.
    
    On amd64 OpenBSD 6.8. Static are stored in tbss, so I know TLS was
    releatively recently added properly, that's one issue.
    
    I can only speculate, it's thread related and how mutexes are
    handled on amd64? As well as having too many threads, also too
    much blocking of the main loop...
    
    Other changes, get rid of almost all sense of a "main" window...
    
    Lots of stuff learnt through hacking...My folks are downstairs and
    I can hear shaging on the TV...Christmas time...it's mean to be...
    Sheesh
---
 src/bin/evisum_config.c      |   6 +-
 src/bin/evisum_config.h      |  24 ++++---
 src/bin/main.c               |  14 +---
 src/bin/ui/ui.c              | 122 ++++++++++++++------------------
 src/bin/ui/ui.h              |  26 +++----
 src/bin/ui/ui_cpu.c          |   6 +-
 src/bin/ui/ui_cpu.h          |   2 +-
 src/bin/ui/ui_disk.c         |  73 ++++++++++---------
 src/bin/ui/ui_disk.h         |   2 +-
 src/bin/ui/ui_memory.c       |  26 ++++---
 src/bin/ui/ui_memory.h       |   2 +-
 src/bin/ui/ui_process_list.c | 165 +++++++++++++++++++------------------------
 src/bin/ui/ui_process_list.h |   2 +-
 src/bin/ui/ui_sensors.c      |  26 ++-----
 src/bin/ui/ui_sensors.h      |   2 +-
 src/bin/ui/ui_util.c         |  25 ++-----
 src/bin/ui/ui_util.h         |   3 -
 17 files changed, 233 insertions(+), 293 deletions(-)

diff --git a/src/bin/evisum_config.c b/src/bin/evisum_config.c
index f272fa4..c0fe291 100644
--- a/src/bin/evisum_config.c
+++ b/src/bin/evisum_config.c
@@ -42,7 +42,7 @@ _config_check(Evisum_Config *cfg)
    if (cfg->version > CONFIG_VERSION)
      _config_fail("version");
 
-   if (cfg->poll_delay <= 0)
+   if (cfg->proc.poll_delay <= 0)
      _config_fail("poll");
 }
 
@@ -51,8 +51,8 @@ _config_init()
 {
    Evisum_Config *cfg = calloc(1, sizeof(Evisum_Config));
    cfg->version = CONFIG_VERSION;
-   cfg->poll_delay = 3;
-   cfg->show_kthreads = 1;
+   cfg->proc.poll_delay = 3;
+   cfg->proc.show_kthreads = 1;
 
    return cfg;
 }
diff --git a/src/bin/evisum_config.h b/src/bin/evisum_config.h
index 6bad5f8..1c0bdf2 100644
--- a/src/bin/evisum_config.h
+++ b/src/bin/evisum_config.h
@@ -3,21 +3,27 @@
 
 #include "ui/ui.h"
 
-#define CONFIG_VERSION 0x000a
+#define CONFIG_VERSION 0x000b
 
 typedef struct _Evisum_Config
 {
    int       version;
-   int       sort_type;
-   Eina_Bool sort_reverse;
-   int       width;
-   int       height;
-   int       poll_delay;
+
    Eina_Bool effects;
    Eina_Bool backgrounds;
-   Eina_Bool show_kthreads;
-   Eina_Bool show_user;
-   Eina_Bool show_desktop;
+
+   struct
+   {
+      Evas_Object *win;
+      int          width;
+      int          height;
+
+      Eina_Bool    show_kthreads;
+      Eina_Bool    show_user;
+      int          sort_type;
+      Eina_Bool    sort_reverse;
+      int          poll_delay;
+   } proc;
 
    struct
    {
diff --git a/src/bin/main.c b/src/bin/main.c
index 88c2f6c..bb69496 100644
--- a/src/bin/main.c
+++ b/src/bin/main.c
@@ -18,7 +18,7 @@ _shutdown_cb(void *data, int type, void *event EINA_UNUSED)
    if (ui->mem.win) evas_object_del(ui->mem.win);
    if (ui->disk.win) evas_object_del(ui->disk.win);
    if (ui->sensors.win) evas_object_del(ui->sensors.win);
-   if (ui->win) evas_object_del(ui->win);
+   if (ui->proc.win) evas_object_del(ui->proc.win);
 
    return EINA_FALSE;
 }
@@ -30,7 +30,7 @@ _signals(Ui *ui)
 }
 
 int
-main(int argc, char **argv)
+elm_main(int argc, char **argv)
 {
    Ui *ui;
    int i, pid = -1;
@@ -60,10 +60,6 @@ main(int argc, char **argv)
           }
      }
 
-   eina_init();
-   ecore_init();
-   config_init();
-   elm_init(argc, argv);
    elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
 
 #if ENABLE_NLS
@@ -90,11 +86,7 @@ main(int argc, char **argv)
    evisum_ui_shutdown(ui);
    evisum_server_shutdown();
 
-   elm_shutdown();
-   config_shutdown();
-   ecore_shutdown();
-   eina_shutdown();
-
    return 0;
 }
 
+ELM_MAIN()
diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c
index 5dc33fc..f873276 100644
--- a/src/bin/ui/ui.c
+++ b/src/bin/ui/ui.c
@@ -29,24 +29,27 @@ evisum_ui_config_save(Ui *ui)
 
    if (!_evisum_config) return;
 
-   if (_evisum_config->poll_delay != ui->settings.poll_delay ||
-       _evisum_config->show_kthreads != ui->settings.show_kthreads)
-     notify = EINA_TRUE;
-
-   evas_object_geometry_get(ui->win, NULL, NULL, &w, &h);
-
-   _evisum_config->sort_type    = ui->settings.sort_type;
-   _evisum_config->sort_reverse = ui->settings.sort_reverse;
-   _evisum_config->width = w;
-   _evisum_config->height = h;
    _evisum_config->effects = 0;
    _evisum_config->backgrounds = evisum_ui_backgrounds_enabled_get();
-   _evisum_config->poll_delay = ui->settings.poll_delay;
-   _evisum_config->show_kthreads = ui->settings.show_kthreads;
-   _evisum_config->show_user = ui->settings.show_user;
-   _evisum_config->show_desktop = 0; //ui->settings.show_desktop;
 
-   proc_info_kthreads_show_set(ui->settings.show_kthreads);
+   if (ui->proc.win)
+     {
+        if (_evisum_config->proc.poll_delay != ui->proc.poll_delay ||
+            _evisum_config->proc.show_kthreads != ui->proc.show_kthreads)
+          {
+             notify = EINA_TRUE;
+          }
+
+        evas_object_geometry_get(ui->proc.win, NULL, NULL, &w, &h);
+        _evisum_config->proc.width = w;
+        _evisum_config->proc.height = h;
+        _evisum_config->proc.sort_type = ui->proc.sort_type;
+        _evisum_config->proc.sort_reverse = ui->proc.sort_reverse;
+        _evisum_config->proc.poll_delay = ui->proc.poll_delay;
+        _evisum_config->proc.show_kthreads = ui->proc.show_kthreads;
+        _evisum_config->proc.show_user = ui->proc.show_user;
+        proc_info_kthreads_show_set(ui->proc.show_kthreads);
+     }
 
    if (ui->cpu.win)
      {
@@ -89,16 +92,18 @@ evisum_ui_config_load(Ui *ui)
 
    _evisum_config = config_load();
 
-   ui->settings.sort_type    = _evisum_config->sort_type;
-   ui->settings.sort_reverse = _evisum_config->sort_reverse;
-   ui->settings.poll_delay   = _evisum_config->poll_delay;
+   ui->proc.sort_type    = _evisum_config->proc.sort_type;
+   ui->proc.sort_reverse = _evisum_config->proc.sort_reverse;
+   ui->proc.poll_delay   = _evisum_config->proc.poll_delay;
 
    evisum_ui_backgrounds_enabled_set(_evisum_config->backgrounds);
 
-   ui->settings.show_kthreads = _evisum_config->show_kthreads;
-   proc_info_kthreads_show_set(ui->settings.show_kthreads);
-   ui->settings.show_user = _evisum_config->show_user;
-   ui->settings.show_desktop = 0; // _evisum_config->show_desktop;
+   ui->proc.show_kthreads = _evisum_config->proc.show_kthreads;
+   proc_info_kthreads_show_set(ui->proc.show_kthreads);
+   ui->proc.show_user = _evisum_config->proc.show_user;
+
+   ui->proc.width = _evisum_config->proc.width;
+   ui->proc.height = _evisum_config->proc.height;
 
    ui->cpu.width = _evisum_config->cpu.width;
    ui->cpu.height = _evisum_config->cpu.height;
@@ -136,7 +141,7 @@ _menu_memory_activity_clicked_cb(void *data, Evas_Object 
*obj EINA_UNUSED,
 {
    Ui *ui = data;
 
-   ui_win_memory_add(ui);
+   ui_win_memory_add(ui, ui->menu_parent);
 }
 
 static void
@@ -145,7 +150,7 @@ _menu_disk_activity_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
 {
    Ui *ui = data;
 
-   ui_win_disk_add(ui);
+   ui_win_disk_add(ui, ui->menu_parent);
 }
 
 static void
@@ -154,7 +159,7 @@ _menu_sensors_activity_clicked_cb(void *data, Evas_Object 
*obj EINA_UNUSED,
 {
    Ui *ui = data;
 
-   ui_win_sensors_add(ui);
+   ui_win_sensors_add(ui, ui->menu_parent);
 }
 
 static void
@@ -163,7 +168,7 @@ _menu_cpu_activity_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
 {
    Ui *ui = data;
 
-   ui_win_cpu_add(ui);
+   ui_win_cpu_add(ui, ui->menu_parent);
 }
 
 static void
@@ -223,9 +228,9 @@ _main_menu_slider_changed_cb(void *data EINA_UNUSED, 
Evas_Object *obj,
 {
    Ui *ui = data;
 
-   ui->settings.poll_delay = elm_slider_value_get(obj) + 0.5;
+   ui->proc.poll_delay = elm_slider_value_get(obj) + 0.5;
 
-   if (ui->settings.poll_delay > 1)
+   if (ui->proc.poll_delay > 1)
      elm_slider_unit_format_set(obj, _("%1.0f secs"));
    else
      elm_slider_unit_format_set(obj, _("%1.0f sec"));
@@ -239,29 +244,17 @@ _main_menu_show_threads_changed_cb(void *data 
EINA_UNUSED, Evas_Object *obj,
 {
    Ui *ui = data;
 
-   ui->settings.show_kthreads = elm_check_state_get(obj);
+   ui->proc.show_kthreads = elm_check_state_get(obj);
    evisum_ui_config_save(ui);
 }
 
-/*
-static void
-_main_menu_show_desktop_changed_cb(void *data EINA_UNUSED, Evas_Object *obj,
-                                   void *event_info EINA_UNUSED)
-{
-   Ui *ui = data;
-
-   ui->settings.show_desktop = elm_check_state_get(obj);
-   evisum_ui_config_save(ui);
-}
-*/
-
 static void
 _main_menu_show_user_changed_cb(void *data EINA_UNUSED, Evas_Object *obj,
                                 void *event_info EINA_UNUSED)
 {
    Ui *ui = data;
 
-   ui->settings.show_user = elm_check_state_get(obj);
+   ui->proc.show_user = elm_check_state_get(obj);
    evisum_ui_config_save(ui);
 }
 
@@ -274,14 +267,14 @@ _menu_focus_cb(void *data)
 }
 
 void
-evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent)
+evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent, Evas_Object *obj)
 {
    Evas_Object *o, *bx, *bx2, *hbox, *sep, *fr, *sli;
    Evas_Object *it_focus, *btn, *chk;
    Evas_Coord ox, oy, ow, oh;
 
-   evas_object_geometry_get(parent, &ox, &oy, &ow, &oh);
-   o = elm_ctxpopup_add(ui->win);
+   evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
+   o = elm_ctxpopup_add(parent);
    evas_object_size_hint_weight_set(o, EXPAND, EXPAND);
    evas_object_size_hint_align_set(o, FILL, FILL);
    elm_object_style_set(o, "noblock");
@@ -301,6 +294,7 @@ evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent)
    elm_object_content_set(fr, bx);
    elm_object_content_set(o, fr);
 
+   ui->menu_parent = parent;
    hbox = elm_box_add(o);
    elm_box_horizontal_set(hbox, 1);
    evas_object_size_hint_align_set(hbox, FILL, FILL);
@@ -363,7 +357,7 @@ evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent)
    elm_slider_step_set(sli, 1 / 10.0);
    elm_slider_indicator_format_set(sli, "%1.0f");
    elm_slider_unit_format_set(sli, _("%1.0f secs"));
-   elm_slider_value_set(sli, ui->settings.poll_delay);
+   elm_slider_value_set(sli, ui->proc.poll_delay);
    evas_object_size_hint_align_set(sli, FILL, FILL);
    elm_object_tooltip_text_set(sli, _("Poll delay"));
    evas_object_smart_callback_add(sli, "slider,drag,stop",
@@ -385,7 +379,7 @@ evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent)
    evas_object_size_hint_weight_set(chk, EXPAND, EXPAND);
    evas_object_size_hint_align_set(chk, FILL, FILL);
    elm_object_text_set(chk, _("Show kernel threads?"));
-   elm_check_state_set(chk, _evisum_config->show_kthreads);
+   elm_check_state_set(chk, ui->proc.show_kthreads);
    evas_object_show(chk);
    evas_object_smart_callback_add(chk, "changed",
                                   _main_menu_show_threads_changed_cb, ui);
@@ -395,24 +389,12 @@ evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent)
    evas_object_size_hint_weight_set(chk, EXPAND, EXPAND);
    evas_object_size_hint_align_set(chk, FILL, FILL);
    elm_object_text_set(chk, _("User only?"));
-   elm_check_state_set(chk, _evisum_config->show_user);
+   elm_check_state_set(chk, ui->proc.show_user);
    evas_object_show(chk);
    evas_object_smart_callback_add(chk, "changed",
                                   _main_menu_show_user_changed_cb, ui);
    elm_box_pack_end(bx2, chk);
 
-   /*
-   chk = elm_check_add(bx2);
-   evas_object_size_hint_weight_set(chk, EXPAND, EXPAND);
-   evas_object_size_hint_align_set(chk, FILL, FILL);
-   elm_object_text_set(chk, _("Current desktop session only?"));
-   elm_check_state_set(chk, _evisum_config->show_desktop);
-   evas_object_show(chk);
-   evas_object_smart_callback_add(chk, "changed",
-                                  _main_menu_show_desktop_changed_cb, ui);
-   elm_box_pack_end(bx2, chk);
-   */
-
    elm_object_content_set(fr, bx2);
    elm_box_pack_end(bx, fr);
 
@@ -422,7 +404,7 @@ evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent)
                                        ELM_CTXPOPUP_DIRECTION_RIGHT);
    evas_object_move(o, ox + (ow / 2), oy + oh);
    evas_object_show(o);
-   ui->main_menu = o;
+   ui->menu = o;
    ecore_timer_add(0.5, _menu_focus_cb, it_focus);
 }
 
@@ -452,22 +434,22 @@ evisum_ui_activate(Ui *ui, Evisum_Action action, int pid)
    switch (action)
      {
        case EVISUM_ACTION_DEFAULT:
-         ui_process_list_win_add(ui);
+         ui_process_list_win_add(ui, NULL);
          break;
        case EVISUM_ACTION_PROCESS:
          _process_win_add(NULL, pid, 3);
          break;
        case EVISUM_ACTION_CPU:
-         ui_win_cpu_add(ui);
+         ui_win_cpu_add(ui, NULL);
          break;
        case EVISUM_ACTION_MEM:
-         ui_win_memory_add(ui);
+         ui_win_memory_add(ui, NULL);
          break;
        case EVISUM_ACTION_STORAGE:
-         ui_win_disk_add(ui);
+         ui_win_disk_add(ui, NULL);
          break;
        case EVISUM_ACTION_SENSORS:
-         ui_win_sensors_add(ui);
+         ui_win_sensors_add(ui, NULL);
          break;
      }
 }
@@ -486,13 +468,15 @@ evisum_ui_init(void)
    Ui *ui = calloc(1, sizeof(Ui));
    if (!ui) return NULL;
 
-   ui->settings.poll_delay = 3;
-   ui->settings.sort_reverse = EINA_FALSE;
-   ui->settings.sort_type = SORT_BY_PID;
+   ui->proc.poll_delay = 3;
+   ui->proc.sort_reverse = EINA_FALSE;
+   ui->proc.sort_type = SORT_BY_PID;
+
    ui->program_pid = getpid();
 
    EVISUM_EVENT_CONFIG_CHANGED = ecore_event_type_new();
 
+   evisum_ui_backgrounds_enabled_set(0);
    evisum_ui_config_load(ui);
 
    evisum_icon_cache_init();
diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h
index 2d3f134..5aed947 100644
--- a/src/bin/ui/ui.h
+++ b/src/bin/ui/ui.h
@@ -26,11 +26,18 @@ typedef struct Ui
       Evas_Object     *win;
       int              width;
       int              height;
-   } processes;
 
-   Evas_Object     *win;
+      int        poll_delay;
+      int        sort_type;
+      Eina_Bool  sort_reverse;
+      Eina_Bool  show_self;
+      Eina_Bool  show_kthreads;
+      Eina_Bool  show_user;
+   } proc;
+
    Evas_Object     *win_about;
-   Evas_Object     *main_menu;
+   Evas_Object     *menu;
+   Evas_Object     *menu_parent;
 
    struct
    {
@@ -64,17 +71,6 @@ typedef struct Ui
       Evas_Object  *box;
       Ecore_Thread *thread;
    } sensors;
-
-   struct
-   {
-      int        poll_delay;
-      int        sort_type;
-      Eina_Bool  sort_reverse;
-      Eina_Bool  show_self;
-      Eina_Bool  show_kthreads;
-      Eina_Bool  show_user;
-      Eina_Bool  show_desktop;
-   } settings;
 } Ui;
 
 Ui *
@@ -84,7 +80,7 @@ void
 evisum_ui_shutdown(Ui *ui);
 
 void
-evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent);
+evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent, Evas_Object *obj);
 
 void
 evisum_ui_activate(Ui *ui, Evisum_Action action, int pid);
diff --git a/src/bin/ui/ui_cpu.c b/src/bin/ui/ui_cpu.c
index c29586b..ec02eb7 100644
--- a/src/bin/ui/ui_cpu.c
+++ b/src/bin/ui/ui_cpu.c
@@ -695,7 +695,7 @@ _win_resize_cb(void *data, Evas *e, Evas_Object *obj, void 
*event_info)
 }
 
 void
-ui_win_cpu_add(Ui *ui)
+ui_win_cpu_add(Ui *ui, Evas_Object *parent)
 {
    Evas_Object *win, *box, *scroller;
    Evas_Coord x = 0, y = 0;
@@ -739,8 +739,8 @@ ui_win_cpu_add(Ui *ui)
    else
      evas_object_resize(win, UI_CHILD_WIN_WIDTH * 1.5, UI_CHILD_WIN_HEIGHT * 
1.1);
 
-   if (ui->win)
-     evas_object_geometry_get(ui->win, &x, &y, NULL, NULL);
+   if (parent)
+     evas_object_geometry_get(parent, &x, &y, NULL, NULL);
    if (x > 0 && y > 0)
      evas_object_move(win, x + 20, y + 20);
    else
diff --git a/src/bin/ui/ui_cpu.h b/src/bin/ui/ui_cpu.h
index df1bb9c..b4f6ea6 100644
--- a/src/bin/ui/ui_cpu.h
+++ b/src/bin/ui/ui_cpu.h
@@ -5,6 +5,6 @@
 #include "../system/machine.h"
 
 void
-ui_win_cpu_add(Ui *ui);
+ui_win_cpu_add(Ui *ui, Evas_Object *parent);
 
 #endif
diff --git a/src/bin/ui/ui_disk.c b/src/bin/ui/ui_disk.c
index 373db57..95357f2 100644
--- a/src/bin/ui/ui_disk.c
+++ b/src/bin/ui/ui_disk.c
@@ -13,15 +13,13 @@ typedef struct
    Evas_Object     *btn_free;
    Evas_Object     *genlist;
    Evisum_Ui_Cache *cache;
-   Ecore_Timer     *timer;
+   Ecore_Thread    *thread;
    int             (*sort_cb)(const void *, const void *);
    Eina_Bool        sort_reverse;
 
    Ui              *ui;
 } Ui_Data;
 
-static Eina_Lock _lock;
-
 static void
 _item_unrealized_cb(void *data, Evas_Object *obj EINA_UNUSED,
                     void *event_info EINA_UNUSED)
@@ -234,8 +232,18 @@ _item_disk_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED, void *event_info
    elm_panes_content_left_size_set(pd->panes, 0.5);
 }
 
-static Eina_Bool
-_disks_poll_timer_cb(void *data)
+static void
+_disks_poll(void *data, Ecore_Thread *thread)
+{
+   while (!ecore_thread_check(thread))
+     {
+        ecore_thread_feedback(thread, file_system_info_all_get());
+        usleep(1000000);
+     }
+}
+
+static void
+_disks_poll_feedback_cb(void *data, Ecore_Thread *thread, void *msgdata)
 {
    Elm_Object_Item *it;
    File_System *fs;
@@ -243,10 +251,7 @@ _disks_poll_timer_cb(void *data)
    Eina_List *mounted;
 
    pd = data;
-
-   eina_lock_take(&_lock);
-
-   mounted = file_system_info_all_get();
+   mounted = msgdata;
 
    if (pd->sort_cb)
      mounted = eina_list_sort(mounted, eina_list_count(mounted), pd->sort_cb);
@@ -263,10 +268,14 @@ _disks_poll_timer_cb(void *data)
         elm_genlist_item_update(it);
         it = elm_genlist_item_next_get(it);
      }
+}
 
-   eina_lock_release(&_lock);
+static void
+_disks_poll_update(Ui_Data *pd)
+{
+   Eina_List *mounted = file_system_info_all_get();
 
-   return EINA_TRUE;
+   _disks_poll_feedback_cb(pd, NULL, mounted);
 }
 
 static void
@@ -281,14 +290,12 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
 
    evas_object_del(obj);
 
-   if (pd)
-     {
-        ecore_timer_del(pd->timer);
-        evisum_ui_item_cache_free(pd->cache);
-        free(pd);
-     }
+   ecore_thread_cancel(pd->thread);
+   ecore_thread_wait(pd->thread, 0.5);
+
+   evisum_ui_item_cache_free(pd->cache);
+   free(pd);
 
-   eina_lock_free(&_lock);
    ui->disk.win = NULL;
 }
 
@@ -399,7 +406,7 @@ _btn_device_clicked_cb(void *data EINA_UNUSED, Evas_Object 
*obj,
 
    pd->sort_cb = _sort_by_device;
    _btn_icon_state_set(obj, pd->sort_reverse);
-   _disks_poll_timer_cb(pd);
+   _disks_poll_update(pd);
 }
 
 static void
@@ -413,7 +420,7 @@ _btn_mount_clicked_cb(void *data EINA_UNUSED, Evas_Object 
*obj,
 
    pd->sort_cb = _sort_by_mount;
    _btn_icon_state_set(obj, pd->sort_reverse);
-   _disks_poll_timer_cb(pd);
+   _disks_poll_update(pd);
 }
 
 static void
@@ -427,7 +434,7 @@ _btn_fs_clicked_cb(void *data EINA_UNUSED, Evas_Object *obj,
 
    pd->sort_cb = _sort_by_type;
    _btn_icon_state_set(obj, pd->sort_reverse);
-   _disks_poll_timer_cb(pd);
+   _disks_poll_update(pd);
 }
 
 static void
@@ -441,7 +448,7 @@ _btn_used_clicked_cb(void *data EINA_UNUSED, Evas_Object 
*obj,
 
    pd->sort_cb = _sort_by_used;
    _btn_icon_state_set(obj, pd->sort_reverse);
-   _disks_poll_timer_cb(pd);
+   _disks_poll_update(pd);
 }
 
 static void
@@ -455,7 +462,7 @@ _btn_free_clicked_cb(void *data EINA_UNUSED, Evas_Object 
*obj,
 
    pd->sort_cb = _sort_by_free;
    _btn_icon_state_set(obj, pd->sort_reverse);
-   _disks_poll_timer_cb(pd);
+   _disks_poll_update(pd);
 }
 
 static void
@@ -469,7 +476,7 @@ _btn_total_clicked_cb(void *data EINA_UNUSED, Evas_Object 
*obj,
 
    pd->sort_cb = _sort_by_total;
    _btn_icon_state_set(obj, pd->sort_reverse);
-   _disks_poll_timer_cb(pd);
+   _disks_poll_update(pd);
 }
 
 static void
@@ -483,7 +490,7 @@ _btn_usage_clicked_cb(void *data EINA_UNUSED, Evas_Object 
*obj,
 
    pd->sort_cb = _sort_by_total;
    _btn_icon_state_set(obj, pd->sort_reverse);
-   _disks_poll_timer_cb(pd);
+   _disks_poll_update(pd);
 }
 
 static void
@@ -491,12 +498,12 @@ _win_resize_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info)
 {
    Ui_Data *pd = data;
 
-   _disks_poll_timer_cb(pd);
+   _disks_poll_update(pd);
    evisum_ui_config_save(pd->ui);
 }
 
 void
-ui_win_disk_add(Ui *ui)
+ui_win_disk_add(Ui *ui, Evas_Object *parent)
 {
    Evas_Object *win, *panes, *fr,  *bx, *tbl, *scr;
    Evas_Object *genlist, *btn;
@@ -509,8 +516,6 @@ ui_win_disk_add(Ui *ui)
         return;
      }
 
-   eina_lock_new(&_lock);
-
    ui->disk.win = win = elm_win_util_standard_add("evisum", _("Storage"));
    elm_win_autodel_set(win, EINA_TRUE);
    evas_object_size_hint_weight_set(win, EXPAND, EXPAND);
@@ -637,8 +642,8 @@ ui_win_disk_add(Ui *ui)
    else
      evas_object_resize(win, UI_CHILD_WIN_WIDTH * 1.5, UI_CHILD_WIN_HEIGHT * 
1.1);
 
-   if (ui->win)
-     evas_object_geometry_get(ui->win, &x, &y, NULL, NULL);
+   if (parent)
+     evas_object_geometry_get(parent, &x, &y, NULL, NULL);
    if (x > 0 && y > 0)
      evas_object_move(win, x + 20, y + 20);
    else
@@ -648,8 +653,8 @@ ui_win_disk_add(Ui *ui)
    evas_object_event_callback_add(win, EVAS_CALLBACK_RESIZE, _win_resize_cb, 
pd);
    evas_object_show(win);
 
-   pd->timer = ecore_timer_add(3.0, _disks_poll_timer_cb, pd);
-
-   _disks_poll_timer_cb(pd);
+   pd->thread = ecore_thread_feedback_run(_disks_poll,
+                                          _disks_poll_feedback_cb,
+                                          NULL, NULL, pd, EINA_TRUE);
 }
 
diff --git a/src/bin/ui/ui_disk.h b/src/bin/ui/ui_disk.h
index b2c3665..8a33a45 100644
--- a/src/bin/ui/ui_disk.h
+++ b/src/bin/ui/ui_disk.h
@@ -4,6 +4,6 @@
 #include "ui.h"
 
 void
-ui_win_disk_add(Ui *ui);
+ui_win_disk_add(Ui *ui, Evas_Object *parent);
 
 #endif
diff --git a/src/bin/ui/ui_memory.c b/src/bin/ui/ui_memory.c
index 1b901bf..02a4d73 100644
--- a/src/bin/ui/ui_memory.c
+++ b/src/bin/ui/ui_memory.c
@@ -36,7 +36,10 @@ static Eina_Bool starting = 1;
 #define COLOR_SHARED 225, 107, 62, 255
 #define COLOR_NONE   0, 0, 0, 0
 
-static Eina_Lock _lock;
+#if !defined(__OpenBSD__)
+static
+#endif
+Eina_Lock _mlock;
 
 typedef struct
 {
@@ -46,7 +49,10 @@ typedef struct
    int        r, g, b, a;
 } Graph;
 
-static Graph graphs[4];
+#if !defined(__OpenBSD__)
+static
+#endif
+Graph graphs[4];
 
 static Evas_Object *
 _label_mem(Evas_Object *parent, const char *text)
@@ -305,7 +311,7 @@ _mem_usage_feedback_cb(void *data, Ecore_Thread *thread 
EINA_UNUSED, void *msgda
 
    evas_object_geometry_get(pd->bg, NULL, NULL, &w, &h);
 
-   eina_lock_take(&_lock);
+   eina_lock_take(&_mlock);
 
    _update_graph(&graphs[GR_USED], memory->used / ratio, pd, w, h);
    _update_graph(&graphs[GR_CACHED], memory->cached / ratio, pd, w, h);
@@ -313,7 +319,7 @@ _mem_usage_feedback_cb(void *data, Ecore_Thread *thread 
EINA_UNUSED, void *msgda
    _update_graph(&graphs[GR_SHARED], memory->shared / ratio, pd, w, h);
 
    if (starting) starting = 0;
-   eina_lock_release(&_lock);
+   eina_lock_release(&_mlock);
 }
 
 static void
@@ -354,7 +360,7 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj,
    evas_object_del(obj);
    ui->mem.win = NULL;
    free(pd);
-   eina_lock_free(&_lock);
+   eina_lock_free(&_mlock);
 }
 
 static void
@@ -363,20 +369,20 @@ _win_resize_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info)
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
-   eina_lock_take(&_lock);
+   eina_lock_take(&_mlock);
 
    position_shrink_list((&graphs[GR_USED])->blocks);
    position_shrink_list((&graphs[GR_CACHED])->blocks);
    position_shrink_list((&graphs[GR_BUFFER])->blocks);
    position_shrink_list((&graphs[GR_SHARED])->blocks);
 
-   eina_lock_release(&_lock);
+   eina_lock_release(&_mlock);
 
    evisum_ui_config_save(ui);
 }
 
 void
-ui_win_memory_add(Ui *ui)
+ui_win_memory_add(Ui *ui, Evas_Object *parent)
 {
    Evas_Object *win, *lb, *bx, *tbl, *rec, *pb;
    Evas_Object *fr;
@@ -394,7 +400,7 @@ ui_win_memory_add(Ui *ui)
    if (!pd) return;
    pd->ui = ui;
 
-   eina_lock_new(&_lock);
+   eina_lock_new(&_mlock);
 
    memset(&memory, 0, sizeof(memory));
    system_memory_usage_get(&memory);
@@ -489,7 +495,7 @@ ui_win_memory_add(Ui *ui)
    else
      evas_object_resize(win, UI_CHILD_WIN_WIDTH , UI_CHILD_WIN_HEIGHT);
 
-   if (ui->win) evas_object_geometry_get(ui->win, &x, &y, NULL, NULL);
+   if (parent) evas_object_geometry_get(parent, &x, &y, NULL, NULL);
    if (x > 0 && y > 0)
      evas_object_move(win, x + 20, y + 20);
    else
diff --git a/src/bin/ui/ui_memory.h b/src/bin/ui/ui_memory.h
index 0cbe90c..d5a7610 100644
--- a/src/bin/ui/ui_memory.h
+++ b/src/bin/ui/ui_memory.h
@@ -5,7 +5,7 @@
 #include "../system/machine.h"
 
 void
-ui_win_memory_add(Ui *ui);
+ui_win_memory_add(Ui *ui, Evas_Object *parent);
 
 
 #endif
diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c
index b385d29..a084d35 100644
--- a/src/bin/ui/ui_process_list.c
+++ b/src/bin/ui/ui_process_list.c
@@ -10,11 +10,8 @@
 #include <sys/resource.h>
 #include <pwd.h>
 
-extern Evisum_Config *_evisum_config;
 extern int EVISUM_EVENT_CONFIG_CHANGED;
 
-static Eina_Lock _lock;
-
 typedef struct
 {
    Ecore_Thread        *thread;
@@ -514,7 +511,7 @@ _process_list_cancel_cb(void *data, Ecore_Thread *thread)
 static Eina_List *
 _process_list_sort(Ui *ui, Eina_List *list)
 {
-   switch (ui->settings.sort_type)
+   switch (ui->proc.sort_type)
      {
       case SORT_BY_NONE:
       case SORT_BY_PID:
@@ -562,7 +559,7 @@ _process_list_sort(Ui *ui, Eina_List *list)
         break;
      }
 
-   if (ui->settings.sort_reverse)
+   if (ui->proc.sort_reverse)
      list = eina_list_reverse(list);
 
    return list;
@@ -625,7 +622,7 @@ _process_list_search_trim(Eina_List *list, Ui_Data *pd)
               {
                   if (*cpu_time)
                     proc->cpu_usage = (double) (proc->cpu_time - *cpu_time) /
-                                                pd->ui->settings.poll_delay;
+                                                pd->ui->proc.poll_delay;
                  *cpu_time = proc->cpu_time;
               }
          }
@@ -644,7 +641,7 @@ _process_list_get(Ui_Data *pd)
 
    list = proc_info_all_get();
 
-   if (ui->settings.show_user)
+   if (ui->proc.show_user)
      list = _process_list_uid_trim(list, getuid());
 
    list = _process_list_search_trim(list, pd);
@@ -689,7 +686,7 @@ _process_list(void *data, Ecore_Thread *thread)
              usleep(250000);
           }
         pd->ready = 1;
-        delay = ui->settings.poll_delay;
+        delay = ui->proc.poll_delay;
      }
 }
 
@@ -705,8 +702,6 @@ _process_list_feedback_cb(void *data, Ecore_Thread *thread 
EINA_UNUSED,
    pd = data;
    list = msg;
 
-   eina_lock_take(&_lock);
-
    _genlist_ensure_n_items(pd->genlist, eina_list_count(list));
 
    it = elm_genlist_first_item_get(pd->genlist);
@@ -728,15 +723,12 @@ _process_list_feedback_cb(void *data, Ecore_Thread 
*thread EINA_UNUSED,
      }
 
    elm_genlist_realized_items_update(pd->genlist);
-
-   eina_lock_release(&_lock);
 }
 
 static void
 _process_list_update(Ui_Data *pd)
 {
-   Eina_List *list = _process_list_get(pd);
-   _process_list_feedback_cb(pd, NULL, list);
+   pd->skip_wait = 1;
 }
 
 static void
@@ -773,7 +765,7 @@ _btn_clicked_state_save(Ui_Data *pd, Evas_Object *btn)
 {
    Ui *ui = pd->ui;
 
-   _btn_icon_state_update(btn, ui->settings.sort_reverse);
+   _btn_icon_state_update(btn, ui->proc.sort_reverse);
 
    evisum_ui_config_save(ui);
 
@@ -789,9 +781,9 @@ _btn_pid_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
-   if (ui->settings.sort_type == SORT_BY_PID)
-     ui->settings.sort_reverse = !ui->settings.sort_reverse;
-   ui->settings.sort_type = SORT_BY_PID;
+   if (ui->proc.sort_type == SORT_BY_PID)
+     ui->proc.sort_reverse = !ui->proc.sort_reverse;
+   ui->proc.sort_type = SORT_BY_PID;
 
    _btn_clicked_state_save(pd, pd->btn_pid);
 }
@@ -803,9 +795,9 @@ _btn_uid_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
-   if (ui->settings.sort_type == SORT_BY_UID)
-     ui->settings.sort_reverse = !ui->settings.sort_reverse;
-   ui->settings.sort_type = SORT_BY_UID;
+   if (ui->proc.sort_type == SORT_BY_UID)
+     ui->proc.sort_reverse = !ui->proc.sort_reverse;
+   ui->proc.sort_type = SORT_BY_UID;
 
    _btn_clicked_state_save(pd, pd->btn_uid);
 }
@@ -817,9 +809,9 @@ _btn_cpu_usage_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
-   if (ui->settings.sort_type == SORT_BY_CPU_USAGE)
-     ui->settings.sort_reverse = !ui->settings.sort_reverse;
-   ui->settings.sort_type = SORT_BY_CPU_USAGE;
+   if (ui->proc.sort_type == SORT_BY_CPU_USAGE)
+     ui->proc.sort_reverse = !ui->proc.sort_reverse;
+   ui->proc.sort_type = SORT_BY_CPU_USAGE;
 
    _btn_clicked_state_save(pd, pd->btn_cpu_usage);
 }
@@ -831,9 +823,9 @@ _btn_size_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
-   if (ui->settings.sort_type == SORT_BY_SIZE)
-     ui->settings.sort_reverse = !ui->settings.sort_reverse;
-   ui->settings.sort_type = SORT_BY_SIZE;
+   if (ui->proc.sort_type == SORT_BY_SIZE)
+     ui->proc.sort_reverse = !ui->proc.sort_reverse;
+   ui->proc.sort_type = SORT_BY_SIZE;
 
    _btn_clicked_state_save(pd, pd->btn_size);
 }
@@ -845,9 +837,9 @@ _btn_rss_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
-   if (ui->settings.sort_type == SORT_BY_RSS)
-     ui->settings.sort_reverse = !ui->settings.sort_reverse;
-   ui->settings.sort_type = SORT_BY_RSS;
+   if (ui->proc.sort_type == SORT_BY_RSS)
+     ui->proc.sort_reverse = !ui->proc.sort_reverse;
+   ui->proc.sort_type = SORT_BY_RSS;
 
    _btn_clicked_state_save(pd, pd->btn_rss);
 }
@@ -859,9 +851,9 @@ _btn_cmd_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
-   if (ui->settings.sort_type == SORT_BY_CMD)
-     ui->settings.sort_reverse = !ui->settings.sort_reverse;
-   ui->settings.sort_type = SORT_BY_CMD;
+   if (ui->proc.sort_type == SORT_BY_CMD)
+     ui->proc.sort_reverse = !ui->proc.sort_reverse;
+   ui->proc.sort_type = SORT_BY_CMD;
 
    _btn_clicked_state_save(pd, pd->btn_cmd);
 }
@@ -873,9 +865,9 @@ _btn_state_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
-   if (ui->settings.sort_type == SORT_BY_STATE)
-     ui->settings.sort_reverse = !ui->settings.sort_reverse;
-   ui->settings.sort_type = SORT_BY_STATE;
+   if (ui->proc.sort_type == SORT_BY_STATE)
+     ui->proc.sort_reverse = !ui->proc.sort_reverse;
+   ui->proc.sort_type = SORT_BY_STATE;
 
    _btn_clicked_state_save(pd, pd->btn_state);
 }
@@ -977,7 +969,7 @@ _item_menu_properties_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
 
    _item_menu_cancel_cb(pd, NULL, NULL);
 
-   _process_win_add(pd->win, pd->selected_pid, ui->settings.poll_delay);
+   _process_win_add(pd->win, pd->selected_pid, ui->proc.poll_delay);
 }
 
 static Evas_Object *
@@ -1075,7 +1067,7 @@ _item_pid_clicked_cb(void *data, Evas_Object *obj 
EINA_UNUSED, void *event_info)
 
    pd->selected_pid = proc->pid;
    ui_process_win_add(pd->win, proc->pid, proc->command,
-                      ui->settings.poll_delay);
+                      ui->proc.poll_delay);
 }
 
 static void
@@ -1084,10 +1076,10 @@ _main_menu_dismissed_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
 {
    Ui *ui = data;
 
-   elm_ctxpopup_dismiss(ui->main_menu);
-   evas_object_del(ui->main_menu);
+   elm_ctxpopup_dismiss(ui->menu);
+   evas_object_del(ui->menu);
 
-   ui->main_menu = NULL;
+   ui->menu = NULL;
 }
 
 static Evas_Object *
@@ -1119,8 +1111,8 @@ _btn_menu_clicked_cb(void *data, Evas_Object *obj,
 {
    Ui *ui = data;
 
-   if (!ui->main_menu)
-     evisum_ui_main_menu_create(ui, obj);
+   if (!ui->menu)
+     evisum_ui_main_menu_create(ui, ui->proc.win, obj);
    else
      _main_menu_dismissed_cb(ui, NULL, NULL);
 }
@@ -1171,9 +1163,9 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
 
    pd->btn_cmd = btn = elm_button_add(parent);
    _btn_icon_state_init(btn,
-            (ui->settings.sort_type == SORT_BY_CMD ?
-            ui->settings.sort_reverse : EINA_FALSE),
-            ui->settings.sort_type == SORT_BY_CMD);
+            (ui->proc.sort_type == SORT_BY_CMD ?
+            ui->proc.sort_reverse : EINA_FALSE),
+            ui->proc.sort_type == SORT_BY_CMD);
    evas_object_size_hint_weight_set(btn, 1.0, 0);
    evas_object_size_hint_align_set(btn, FILL, FILL);
    elm_object_text_set(btn, _("Command"));
@@ -1184,9 +1176,9 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
 
    pd->btn_uid = btn = elm_button_add(parent);
    _btn_icon_state_init(btn,
-            (ui->settings.sort_type == SORT_BY_UID ?
-            ui->settings.sort_reverse : EINA_FALSE),
-            ui->settings.sort_type == SORT_BY_UID);
+            (ui->proc.sort_type == SORT_BY_UID ?
+            ui->proc.sort_reverse : EINA_FALSE),
+            ui->proc.sort_type == SORT_BY_UID);
    evas_object_size_hint_weight_set(btn, 1.0, 0);
    evas_object_size_hint_align_set(btn, FILL, FILL);
    elm_object_text_set(btn, _("User"));
@@ -1197,9 +1189,9 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
 
    pd->btn_pid = btn = elm_button_add(parent);
    _btn_icon_state_init(btn,
-            (ui->settings.sort_type == SORT_BY_PID ?
-            ui->settings.sort_reverse : EINA_FALSE),
-            ui->settings.sort_type == SORT_BY_PID);
+            (ui->proc.sort_type == SORT_BY_PID ?
+            ui->proc.sort_reverse : EINA_FALSE),
+            ui->proc.sort_type == SORT_BY_PID);
    evas_object_size_hint_weight_set(btn, 1.0, 0);
    evas_object_size_hint_align_set(btn, FILL, FILL);
    elm_object_text_set(btn, _("PID"));
@@ -1210,9 +1202,9 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
 
    pd->btn_size = btn = elm_button_add(parent);
    _btn_icon_state_init(btn,
-            (ui->settings.sort_type == SORT_BY_SIZE ?
-            ui->settings.sort_reverse : EINA_FALSE),
-            ui->settings.sort_type == SORT_BY_SIZE);
+            (ui->proc.sort_type == SORT_BY_SIZE ?
+            ui->proc.sort_reverse : EINA_FALSE),
+            ui->proc.sort_type == SORT_BY_SIZE);
    evas_object_size_hint_weight_set(btn, 1.0, 0);
    evas_object_size_hint_align_set(btn, FILL, FILL);
    elm_object_text_set(btn, _("Size"));
@@ -1223,9 +1215,9 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
 
    pd->btn_rss = btn = elm_button_add(parent);
    _btn_icon_state_init(btn,
-            (ui->settings.sort_type == SORT_BY_RSS ?
-            ui->settings.sort_reverse : EINA_FALSE),
-            ui->settings.sort_type == SORT_BY_RSS);
+            (ui->proc.sort_type == SORT_BY_RSS ?
+            ui->proc.sort_reverse : EINA_FALSE),
+            ui->proc.sort_type == SORT_BY_RSS);
    evas_object_size_hint_weight_set(btn, 1.0, 0);
    evas_object_size_hint_align_set(btn, FILL, FILL);
    elm_object_text_set(btn, _("Res"));
@@ -1236,9 +1228,9 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
 
    pd->btn_state = btn = elm_button_add(parent);
    _btn_icon_state_init(btn,
-            (ui->settings.sort_type == SORT_BY_STATE ?
-            ui->settings.sort_reverse : EINA_FALSE),
-            ui->settings.sort_type == SORT_BY_STATE);
+            (ui->proc.sort_type == SORT_BY_STATE ?
+            ui->proc.sort_reverse : EINA_FALSE),
+            ui->proc.sort_type == SORT_BY_STATE);
    evas_object_size_hint_weight_set(btn, 0, 0);
    evas_object_size_hint_align_set(btn, FILL, FILL);
    elm_object_text_set(btn, _("State"));
@@ -1249,9 +1241,9 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
 
    pd->btn_cpu_usage = btn = elm_button_add(parent);
    _btn_icon_state_init(btn,
-            (ui->settings.sort_type == SORT_BY_CPU_USAGE ?
-            ui->settings.sort_reverse : EINA_FALSE),
-            ui->settings.sort_type == SORT_BY_CPU_USAGE);
+            (ui->proc.sort_type == SORT_BY_CPU_USAGE ?
+            ui->proc.sort_reverse : EINA_FALSE),
+            ui->proc.sort_type == SORT_BY_CPU_USAGE);
    evas_object_size_hint_weight_set(btn, EXPAND, 0);
    evas_object_size_hint_align_set(btn, FILL, FILL);
    elm_object_text_set(btn, _("CPU %"));
@@ -1364,18 +1356,13 @@ _win_key_down_search(Ui_Data *pd, Evas_Event_Key_Down 
*ev)
 
    if (!strcmp(ev->keyname, "Escape"))
      {
-        if (!pd->entry_visible)
-          ecore_main_loop_quit();
-        else
-          {
-             elm_object_text_set(entry, "");
-             pd->skip_wait = 0;
-             evas_object_lower(pd->entry_pop);
-             pd->search_len = 0;
-             for (int i = 0; i < sizeof(pd->search); i++)
-               pd->search[i] = '\0';
-             pd->entry_visible = 0;
-          }
+        elm_object_text_set(entry, "");
+        pd->skip_wait = 0;
+        evas_object_lower(pd->entry_pop);
+        pd->search_len = 0;
+        for (int i = 0; i < sizeof(pd->search); i++)
+          pd->search[i] = '\0';
+        pd->entry_visible = 0;
      }
    else if (!strcmp(ev->keyname, "BackSpace"))
      {
@@ -1429,14 +1416,10 @@ _win_resize_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info)
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
-   if (eina_lock_take_try(&_lock))
-     {
-        elm_genlist_realized_items_update(pd->genlist);
-        eina_lock_release(&_lock);
-     }
+   elm_genlist_realized_items_update(pd->genlist);
 
    evas_object_lower(pd->entry_pop);
-   if (ui->main_menu)
+   if (ui->menu)
      _main_menu_dismissed_cb(ui, NULL, NULL);
 
    evisum_ui_config_save(ui);
@@ -1496,32 +1479,28 @@ _win_del_cb(void *data EINA_UNUSED, Evas *e 
EINA_UNUSED, Evas_Object *obj EINA_U
    ecore_event_handler_del(pd->handler[1]);
 
    pd->thread = NULL;
-   ui->win = NULL;
+   ui->proc.win = NULL;
 
    if (pd->cache)
      evisum_ui_item_cache_free(pd->cache);
 
    eina_hash_free(pd->cpu_times);
 
-   eina_lock_free(&_lock);
-
    free(pd);
 }
 
 void
-ui_process_list_win_add(Ui *ui)
+ui_process_list_win_add(Ui *ui, Evas_Object *parent EINA_UNUSED)
 {
    Evas_Object *win, *icon;
    Evas_Object *obj;
 
-   if (ui->win)
+   if (ui->proc.win)
      {
-        elm_win_raise(ui->win);
+        elm_win_raise(ui->proc.win);
         return;
      }
 
-   eina_lock_new(&_lock);
-
    Ui_Data *pd = _pd = calloc(1, sizeof(Ui_Data));
    if (!pd) return;
 
@@ -1532,7 +1511,7 @@ ui_process_list_win_add(Ui *ui)
    pd->handler[1] = ecore_event_handler_add(EVISUM_EVENT_CONFIG_CHANGED,
                                             _evisum_config_changed_cb, pd);
 
-   ui->win = pd->win = win = elm_win_util_standard_add("evisum", "evisum");
+   ui->proc.win = pd->win = win = elm_win_util_standard_add("evisum", 
"evisum");
    elm_win_autodel_set(win, EINA_TRUE);
    elm_win_title_set(win, _("EFL System Monitor"));
    icon = elm_icon_add(win);
@@ -1540,8 +1519,8 @@ ui_process_list_win_add(Ui *ui)
    elm_win_icon_object_set(win, icon);
    evisum_ui_background_add(win, evisum_ui_backgrounds_enabled_get());
 
-   if (_evisum_config->width > 1 && _evisum_config->height > 1)
-     evas_object_resize(win, _evisum_config->width, _evisum_config->height);
+   if (ui->proc.width > 1 && ui->proc.height > 1)
+     evas_object_resize(win, ui->proc.width, ui->proc.height);
    else
      evas_object_resize(win, EVISUM_WIN_WIDTH * elm_config_scale_get(),
                         EVISUM_WIN_HEIGHT * elm_config_scale_get());
diff --git a/src/bin/ui/ui_process_list.h b/src/bin/ui/ui_process_list.h
index 8b54f6d..67c4df3 100644
--- a/src/bin/ui/ui_process_list.h
+++ b/src/bin/ui/ui_process_list.h
@@ -20,6 +20,6 @@ typedef enum
 } Sort_Type;
 
 void
-ui_process_list_win_add(Ui *ui);
+ui_process_list_win_add(Ui *ui, Evas_Object *parent);
 
 #endif
diff --git a/src/bin/ui/ui_sensors.c b/src/bin/ui/ui_sensors.c
index edd36aa..f2d1a3c 100644
--- a/src/bin/ui/ui_sensors.c
+++ b/src/bin/ui/ui_sensors.c
@@ -1,8 +1,6 @@
 #include "ui_sensors.h"
 #include "system/machine.h"
 
-static Eina_Lock _lock;
-
 typedef struct
 {
    Eina_List              *sensors;
@@ -82,6 +80,8 @@ _sensors_update(void *data, Ecore_Thread *thread)
 
    while (!ecore_thread_check(thread))
      {
+        system_power_state_get(&msg->power);
+
         if (pd->sensor)
           {
              if (!system_sensor_thermal_get(pd->sensor))
@@ -93,13 +93,7 @@ _sensors_update(void *data, Ecore_Thread *thread)
                }
           }
 
-        system_power_state_get(&msg->power);
-
-        if (eina_lock_take_try(&_lock))
-          {
-             ecore_thread_feedback(thread, msg);
-             eina_lock_release(&_lock);
-          }
+        ecore_thread_feedback(thread, msg);
 
         if (ecore_thread_check(thread)) break;
 
@@ -152,7 +146,6 @@ _sensors_update_feedback_cb(void *data, Ecore_Thread 
*thread, void *msgdata)
         l = eina_list_next(l);
         i++;
      }
-
    system_power_state_free(&msg->power);
 }
 
@@ -216,8 +209,6 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
 
-   eina_lock_take(&_lock);
-
    ecore_thread_cancel(ui->sensors.thread);
    ecore_thread_wait(ui->sensors.thread, 0.5);
    ui->sensors.thread = NULL;
@@ -230,9 +221,6 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
 
    elm_genlist_item_class_free(pd->itc);
    free(pd);
-
-   eina_lock_release(&_lock);
-   eina_lock_free(&_lock);
 }
 
 static void
@@ -244,7 +232,7 @@ _win_resize_cb(void *data, Evas *e, Evas_Object *obj, void 
*event_info)
 }
 
 void
-ui_win_sensors_add(Ui *ui)
+ui_win_sensors_add(Ui *ui, Evas_Object *parent)
 {
    Evas_Object *win, *content, *bx, *tbl, *fr;
    Evas_Object *genlist, *pb, *pad;
@@ -263,8 +251,6 @@ ui_win_sensors_add(Ui *ui)
    if (!pd) return;
    pd->ui = ui;
 
-   eina_lock_new(&_lock);
-
    ui->sensors.win = win = elm_win_util_standard_add("evisum", _("Sensors"));
    elm_win_autodel_set(win, EINA_TRUE);
    evas_object_size_hint_weight_set(win, EXPAND, EXPAND);
@@ -374,8 +360,8 @@ ui_win_sensors_add(Ui *ui)
    else
      evas_object_resize(win, UI_CHILD_WIN_WIDTH, UI_CHILD_WIN_HEIGHT);
 
-   if (ui->win)
-     evas_object_geometry_get(ui->win, &x, &y, NULL, NULL);
+   if (parent)
+     evas_object_geometry_get(parent, &x, &y, NULL, NULL);
    if (x > 0 && y > 0)
      evas_object_move(win, x + 20, y + 20);
    else
diff --git a/src/bin/ui/ui_sensors.h b/src/bin/ui/ui_sensors.h
index de5634e..d70f2b1 100644
--- a/src/bin/ui/ui_sensors.h
+++ b/src/bin/ui/ui_sensors.h
@@ -5,6 +5,6 @@
 #include "../system/machine.h"
 
 void
-ui_win_sensors_add(Ui *ui);
+ui_win_sensors_add(Ui *ui, Evas_Object *parent);
 
 #endif
diff --git a/src/bin/ui/ui_util.c b/src/bin/ui/ui_util.c
index a8116a3..4c19560 100644
--- a/src/bin/ui/ui_util.c
+++ b/src/bin/ui/ui_util.c
@@ -5,8 +5,11 @@
 
 #define ARRAY_SIZE(n) sizeof(n) / sizeof(n[0])
 
-static Eina_Bool _backgrounds_enabled = EINA_FALSE;
-static Eina_Hash *_icon_cache = NULL;
+Eina_Bool _backgrounds_enabled = EINA_FALSE;
+#if !defined(__OpenBSD__)
+static
+#endif
+Eina_Hash *_icon_cache;
 
 Evas_Object *
 evisum_ui_tab_add(Evas_Object *parent, Evas_Object **alias, const char *text,
@@ -160,6 +163,7 @@ _icon_cache_free_cb(void *data)
 void
 evisum_icon_cache_init(void)
 {
+   _icon_cache = NULL;
    _icon_cache = eina_hash_string_superfast_new(_icon_cache_free_cb);
 }
 
@@ -270,21 +274,6 @@ evisum_ui_textblock_font_size_get(Evas_Object *tb)
    return size;
 }
 
-void
-evisum_child_window_show(Evas_Object *parent, Evas_Object *win)
-{
-   Evas_Coord x, y, w, h;
-
-   evas_object_resize(win, UI_CHILD_WIN_WIDTH, UI_CHILD_WIN_HEIGHT);
-   evas_object_geometry_get(parent, &x, &y, &w, &h);
-   if (x > 0 && y > 0)
-     evas_object_move(win, x + 20, y + 10);
-   else
-     elm_win_center(win, EINA_TRUE, EINA_TRUE);
-
-   evas_object_show(win);
-}
-
 typedef struct {
    Ui             *ui;
    Evas_Object    *lb;
@@ -424,7 +413,7 @@ evisum_about_window_show(void *data)
 
    if (ui->win_about) return;
 
-   ui->win_about = win = elm_win_add(ui->win, "evisum", ELM_WIN_DIALOG_BASIC);
+   ui->win_about = win = elm_win_add(ui->menu_parent, "evisum", 
ELM_WIN_DIALOG_BASIC);
    elm_win_autodel_set(win, EINA_TRUE);
    elm_win_title_set(win, _("About"));
 
diff --git a/src/bin/ui/ui_util.h b/src/bin/ui/ui_util.h
index 8211de4..cd983b7 100644
--- a/src/bin/ui/ui_util.h
+++ b/src/bin/ui/ui_util.h
@@ -61,9 +61,6 @@ evisum_ui_textblock_font_size_get(Evas_Object *tb);
 void
 evisum_ui_textblock_font_size_set(Evas_Object *tb, int new_size);
 
-void
-evisum_child_window_show(Evas_Object *parent, Evas_Object *win);
-
 void
 evisum_about_window_show(void *data);
 

-- 


Reply via email to