netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=1d94dd94331874df12c9cda92b1405d5039497c5

commit 1d94dd94331874df12c9cda92b1405d5039497c5
Author: Alastair Poole <nets...@gmail.com>
Date:   Wed Dec 16 16:01:03 2020 +0000

    processlist: search thing.
---
 src/bin/ui/ui_process_list.c | 74 ++++++++++++++++++++++++++++++++++++++------
 1 file changed, 64 insertions(+), 10 deletions(-)

diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c
index d974125..d4cc0f6 100644
--- a/src/bin/ui/ui_process_list.c
+++ b/src/bin/ui/ui_process_list.c
@@ -27,9 +27,13 @@ typedef struct
    pid_t            selected_pid;
    char            *search_text;
 
+   Evas_Object     *win;
    Evas_Object     *menu;
 
+   Ecore_Timer     *timer_entry;
+   Evas_Object     *entry_pop;
    Evas_Object     *entry;
+
    Evas_Object     *scroller;
    Evas_Object     *genlist;
 
@@ -1161,12 +1165,31 @@ _evisum_process_filter(Ui_Data *pd, const char *text)
    pd->search_text = strdup(text);
 }
 
+static Eina_Bool
+_search_empty(void *data)
+{
+   const char *markup;
+   Ui_Data *pd = data;
+
+   markup = elm_object_part_text_get(pd->entry, NULL);
+
+   if (strlen(markup) == 0)
+     {
+        evas_object_lower(pd->entry_pop);
+        pd->timer_entry = NULL;
+        return EINA_FALSE;
+     }
+
+   return EINA_TRUE;
+}
+
 static void
 _evisum_search_keypress_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj,
                            void *event_info)
 {
    Ui *ui;
    const char *markup;
+   Evas_Coord w, h;
    char *text;
    Evas_Object *entry;
    Evas_Event_Key_Down *event;
@@ -1181,6 +1204,13 @@ _evisum_search_keypress_cb(void *data, Evas *e 
EINA_UNUSED, Evas_Object *obj,
 
    ui->state.skip_wait = EINA_TRUE;
 
+   evas_object_geometry_get(pd->win, NULL, NULL, &w, &h);
+   evas_object_move(pd->entry_pop, w / 2, h / 2);
+   evas_object_raise(pd->entry_pop);
+
+   if (!pd->timer_entry)
+     pd->timer_entry = ecore_timer_add(1.0, _search_empty, pd);
+
    markup = elm_object_part_text_get(entry, NULL);
    text = elm_entry_markup_to_utf8(markup);
    if (text)
@@ -1190,6 +1220,34 @@ _evisum_search_keypress_cb(void *data, Evas *e 
EINA_UNUSED, Evas_Object *obj,
      }
 }
 
+static void
+_evisum_search_add(Ui_Data *pd)
+{
+   Evas_Object *tbl, *rec, *box, *entry;
+
+   pd->entry_pop = tbl = elm_table_add(pd->win);
+   evas_object_lower(tbl);
+   evas_object_show(tbl);
+
+   pd->entry = entry = elm_entry_add(pd->win);
+   evas_object_size_hint_weight_set(entry, EXPAND, EXPAND);
+   evas_object_size_hint_align_set(entry, FILL, FILL);
+   elm_entry_single_line_set(entry, EINA_TRUE);
+   elm_entry_scrollable_set(entry, EINA_FALSE);
+   elm_entry_editable_set(entry, EINA_TRUE);
+   evas_object_event_callback_add(pd->entry, EVAS_CALLBACK_KEY_DOWN,
+                                  _evisum_search_keypress_cb, pd);
+   evas_object_show(entry);
+
+   rec = evas_object_rectangle_add(evas_object_evas_get(pd->win));
+   evas_object_color_set(rec, 0, 0, 0, 128);
+   evas_object_size_hint_min_set(rec, ELM_SCALE_SIZE(192), 
ELM_SCALE_SIZE(128));
+   evas_object_size_hint_max_set(rec, ELM_SCALE_SIZE(192), 
ELM_SCALE_SIZE(128));
+   evas_object_show(rec);
+   elm_table_pack(tbl, rec, 0, 0, 1, 1);
+   elm_table_pack(tbl, entry, 0, 0, 1, 1);
+}
+
 static Evas_Object *
 _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
 {
@@ -1316,15 +1374,7 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent)
    elm_table_pack(tbl, plist, 0, 2, i, 1);
 
 
-   pd->entry = entry = elm_entry_add(parent);
-   evas_object_size_hint_weight_set(entry, EXPAND, EXPAND);
-   evas_object_size_hint_align_set(entry, FILL, FILL);
-   elm_entry_single_line_set(entry, EINA_TRUE);
-   elm_entry_scrollable_set(entry, EINA_TRUE);
-   elm_entry_editable_set(entry, EINA_TRUE);
-   evas_object_event_callback_add(pd->entry, EVAS_CALLBACK_KEY_DOWN,
-                                  _evisum_search_keypress_cb, pd);
-   evas_object_show(entry);
+   _evisum_search_add(pd);
 
    evas_object_smart_callback_add(pd->genlist, "selected",
                    _item_pid_clicked_cb, pd);
@@ -1397,6 +1447,7 @@ _win_resize_cb(void *data, Evas *e, Evas_Object *obj, 
void *event_info)
         eina_lock_release(&_lock);
      }
 
+   evas_object_lower(pd->entry_pop);
    if (ui->main_menu)
      _main_menu_dismissed_cb(ui, NULL, NULL);
 
@@ -1435,6 +1486,9 @@ _win_del_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_U
 
    evas_object_del(obj);
 
+   if (pd->timer_entry)
+     ecore_timer_del(pd->timer_entry);
+
    if (pd->thread)
      ecore_thread_cancel(pd->thread);
 
@@ -1478,7 +1532,7 @@ ui_process_list_win_add(Ui *ui)
    pd->selected_pid = -1;
    pd->ui = ui;
 
-   ui->win = win = elm_win_util_standard_add("evisum", "evisum");
+   ui->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);

-- 


Reply via email to