ui_process: make this more responsive.

This commit is contained in:
Alastair Poole 2020-05-14 17:35:57 +01:00
parent d80d7154d8
commit 263245eea7
2 changed files with 32 additions and 23 deletions

View File

@ -14,9 +14,12 @@ _exe_response(const char *command)
lines = NULL;
int n = 1;
while ((fgets(buf, sizeof(buf), p)) != NULL)
{
lines = eina_list_append(lines, elm_entry_markup_to_utf8(buf));
if (n > 1)
lines = eina_list_append(lines, elm_entry_markup_to_utf8(buf));
n++;
}
pclose(p);
@ -460,7 +463,7 @@ _threads_tab_add(Evas_Object *parent)
static Evas_Object *
_info_tab_add(Evas_Object *parent, const char *cmd)
_info_tab_add(Evas_Object *parent, Ui_Process *ui)
{
Evas_Object *box, *entry;
@ -468,7 +471,7 @@ _info_tab_add(Evas_Object *parent, const char *cmd)
evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
entry = elm_entry_add(box);
ui->entry_info = entry = elm_entry_add(box);
evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_entry_single_line_set(entry, EINA_FALSE);
@ -476,25 +479,6 @@ _info_tab_add(Evas_Object *parent, const char *cmd)
elm_entry_editable_set(entry, EINA_FALSE);
elm_entry_scrollable_set(entry, EINA_TRUE);
evas_object_show(entry);
Eina_List *lines = _exe_response(eina_slstr_printf("man %s | col -b", cmd));
if (lines)
{
Eina_Strbuf *buf = eina_strbuf_new();
eina_strbuf_append(buf, "<code>");
char *line;
EINA_LIST_FREE(lines, line)
{
eina_strbuf_append_printf(buf, "%s<br>", line);
free(line);
}
eina_list_free(lines);
eina_strbuf_append(buf, "</code>");
elm_object_text_set(entry, eina_strbuf_string_get(buf));
eina_strbuf_free(buf);
}
elm_box_pack_end(box, entry);
return box;
@ -543,6 +527,28 @@ _btn_info_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info
_hide_all(ui, obj);
evas_object_show(ui->info_view);
if (ui->info_init) return;
Eina_List *lines = _exe_response(eina_slstr_printf("man %s | col -b", ui->selected_cmd));
if (lines)
{
Eina_Strbuf *buf = eina_strbuf_new();
eina_strbuf_append(buf, "<code>");
char *line;
EINA_LIST_FREE(lines, line)
{
eina_strbuf_append_printf(buf, "%s<br>", line);
free(line);
}
eina_list_free(lines);
eina_strbuf_append(buf, "</code>");
elm_object_text_set(ui->entry_info, eina_strbuf_string_get(buf));
eina_strbuf_free(buf);
}
ui->info_init = EINA_TRUE;
}
static Evas_Object *
@ -634,7 +640,7 @@ ui_process_win_add(int pid, const char *cmd)
ui->main_view = _process_tab_add(win, ui);
ui->thread_view = _threads_tab_add(win);
ui->info_view = _info_tab_add(win, cmd);
ui->info_view = _info_tab_add(win, ui);
elm_table_pack(ui->content, ui->info_view, 0, 0, 1, 1);
elm_table_pack(ui->content, ui->main_view, 0, 0, 1, 1);

View File

@ -15,6 +15,8 @@ typedef struct _Ui_Process {
Evas_Object *btn_info;
Evas_Object *btn_thread;
Evas_Object *entry_info;
Evas_Object *entry_pid_cmd;
Evas_Object *entry_pid_cmd_args;
Evas_Object *entry_pid_user;
@ -35,6 +37,7 @@ typedef struct _Ui_Process {
char *selected_cmd;
int selected_pid;
int64_t pid_cpu_time;
Eina_Bool info_init;
Ecore_Timer *timer_pid;
} Ui_Process;