This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch master
in repository edi.
View the commit online.
commit 731ed7f9cc491b20f9dc3144012e1319addaf82d
Author: Alastair Poole <[email protected]>
AuthorDate: Wed Apr 15 22:21:36 2026 +0100
panels: follow content and scroll.
Fix our panels to follow the tail content and remain scrollable.
---
src/bin/edi_consolepanel.c | 33 +++++++++++++++++++++++++++++++--
src/bin/edi_logpanel.c | 19 ++++++++++++++++++-
src/bin/edi_searchpanel.c | 33 +++++++++++++++++++++++++++++++--
3 files changed, 80 insertions(+), 5 deletions(-)
diff --git a/src/bin/edi_consolepanel.c b/src/bin/edi_consolepanel.c
index 677d82c..04b5707 100644
--- a/src/bin/edi_consolepanel.c
+++ b/src/bin/edi_consolepanel.c
@@ -30,6 +30,7 @@ static int _edi_test_pass;
static int _edi_test_fail;
static Elm_Code *_edi_test_code, *_edi_console_code;
+static Evas_Object *_edi_console_widget, *_edi_test_widget;
static void _edi_test_line_callback(const char *content);
static void
@@ -58,6 +59,21 @@ _edi_code_file_placeholder_clear(Elm_Code_File *file)
elm_code_file_clear(file);
}
+static void
+_edi_code_widget_follow_tail(Evas_Object *widget, Elm_Code *code)
+{
+ unsigned int lines;
+
+ if (!widget || !code || !code->file)
+ return;
+
+ lines = elm_code_file_lines_get(code->file);
+ if (lines == 0)
+ return;
+
+ elm_code_widget_cursor_position_set(widget, lines, 1);
+}
+
static Eina_Bool
_edi_consolepanel_startswith_location(const char *line)
{
@@ -158,6 +174,7 @@ static void _edi_consolepanel_append_line_type(const char *line, Eina_Bool err)
elm_code_file_line_append(_edi_console_code->file, line, strlen(line),
err && _current_dir ? strdup(_current_dir) : NULL);
+ _edi_code_widget_follow_tail(_edi_console_widget, _edi_console_code);
_edi_test_line_callback(line);
}
@@ -178,6 +195,8 @@ void edi_consolepanel_clear()
elm_code_file_clear(_edi_test_code->file);
_edi_code_file_placeholder_set(_edi_console_code->file);
_edi_code_file_placeholder_set(_edi_test_code->file);
+ _edi_code_widget_follow_tail(_edi_console_widget, _edi_console_code);
+ _edi_code_widget_follow_tail(_edi_test_widget, _edi_test_code);
_edi_test_count = _edi_test_pass = _edi_test_fail = 0;
}
@@ -199,6 +218,7 @@ _edi_test_output_suite(int count, int pass, int fail)
snprintf(line, linemax, format, pass, percent, fail);
_edi_code_file_placeholder_clear(_edi_test_code->file);
elm_code_file_line_append(_edi_test_code->file, line, strlen(line), (fail > 0) ? _EDI_SUITE_FAILED : _EDI_SUITE_PASSED);
+ _edi_code_widget_follow_tail(_edi_test_widget, _edi_test_code);
free(line);
}
@@ -297,6 +317,7 @@ _edi_test_line_parse_suite(const char *path)
_edi_test_fail++;
_edi_code_file_placeholder_clear(_edi_test_code->file);
elm_code_file_line_append(_edi_test_code->file, line->start, line->length, strdup(_current_test_dir));
+ _edi_code_widget_follow_tail(_edi_test_widget, _edi_test_code);
}
else if (_edi_test_line_contains(line->start, line->length, ":E:"))
{
@@ -304,12 +325,14 @@ _edi_test_line_parse_suite(const char *path)
_edi_test_fail++;
_edi_code_file_placeholder_clear(_edi_test_code->file);
elm_code_file_line_append(_edi_test_code->file, line->start, line->length, strdup(_current_test_dir));
+ _edi_code_widget_follow_tail(_edi_test_widget, _edi_test_code);
}
else if (_edi_test_line_contains(line->start, line->length, "Running"))
{
_edi_test_count = _edi_test_pass = _edi_test_fail = 0;
_edi_code_file_placeholder_clear(_edi_test_code->file);
elm_code_file_line_append(_edi_test_code->file, line->start, line->length, NULL);
+ _edi_code_widget_follow_tail(_edi_test_widget, _edi_test_code);
}
}
eina_iterator_free(it);
@@ -366,6 +389,7 @@ static void _edi_test_line_callback(const char *content)
_edi_code_file_placeholder_clear(_edi_test_code->file);
elm_code_file_line_append(_edi_test_code->file, content + 10, strlen(content) - 10, _EDI_SUITE_PASSED);
+ _edi_code_widget_follow_tail(_edi_test_widget, _edi_test_code);
}
else if (!strncmp(content, "--- FAIL:", 9))
{
@@ -373,6 +397,7 @@ static void _edi_test_line_callback(const char *content)
_edi_code_file_placeholder_clear(_edi_test_code->file);
elm_code_file_line_append(_edi_test_code->file, content + 10, strlen(content) - 10, _EDI_SUITE_FAILED);
+ _edi_code_widget_follow_tail(_edi_test_widget, _edi_test_code);
}
}
@@ -418,13 +443,15 @@ void edi_consolepanel_add(Evas_Object *parent)
widget = elm_code_widget_add(parent, code);
elm_code_widget_font_set(widget, _edi_project_config->font.name, _edi_project_config->font.size);
edi_theme_elm_code_set(widget, _edi_project_config->gui.theme);
- elm_code_widget_gravity_set(widget, 0.0, 1.0);
+ elm_code_widget_gravity_set(widget, 0.0, 0.0);
efl_event_callback_add(widget, &ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_consolepanel_line_cb, NULL);
efl_event_callback_add(widget, EFL_UI_CODE_WIDGET_EVENT_LINE_CLICKED, _edi_consolepanel_clicked_cb, code);
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(widget);
+ _edi_console_widget = widget;
+ _edi_code_widget_follow_tail(_edi_console_widget, _edi_console_code);
elm_object_content_set(frame, widget);
elm_box_pack_end(parent, frame);
@@ -454,13 +481,15 @@ void edi_testpanel_add(Evas_Object *parent)
widget = elm_code_widget_add(parent, code);
elm_code_widget_font_set(widget, _edi_project_config->font.name, _edi_project_config->font.size);
edi_theme_elm_code_set(widget, _edi_project_config->gui.theme);
- elm_code_widget_gravity_set(widget, 0.0, 1.0);
+ elm_code_widget_gravity_set(widget, 0.0, 0.0);
efl_event_callback_add(widget, &ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_testpanel_line_cb, NULL);
efl_event_callback_add(widget, EFL_UI_CODE_WIDGET_EVENT_LINE_CLICKED, _edi_consolepanel_clicked_cb, code);
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(widget);
+ _edi_test_widget = widget;
+ _edi_code_widget_follow_tail(_edi_test_widget, _edi_test_code);
elm_object_content_set(frame, widget);
elm_box_pack_end(parent, frame);
diff --git a/src/bin/edi_logpanel.c b/src/bin/edi_logpanel.c
index f4e9e82..240a410 100644
--- a/src/bin/edi_logpanel.c
+++ b/src/bin/edi_logpanel.c
@@ -43,6 +43,21 @@ _edi_logpanel_placeholder_clear(void)
elm_code_file_clear(_elm_code->file);
}
+static void
+_edi_logpanel_follow_tail(void)
+{
+ unsigned int lines;
+
+ if (!_info_widget || !_elm_code || !_elm_code->file)
+ return;
+
+ lines = elm_code_file_lines_get(_elm_code->file);
+ if (lines == 0)
+ return;
+
+ elm_code_widget_cursor_position_set(_info_widget, lines, 1);
+}
+
static Eina_Bool
_edi_logpanel_ignore(Eina_Log_Level level, const char *domain, const char *fnc)
{
@@ -82,6 +97,7 @@ _edi_logpanel_print_cb(const Eina_Log_Domain *domain, Eina_Log_Level level,
elm_code_file_line_append(_elm_code->file, buffer, strlen(buffer),
(level <= EINA_LOG_LEVEL_ERR) ? _EDI_LOG_ERROR : NULL);
+ _edi_logpanel_follow_tail();
ecore_thread_main_loop_end();
}
@@ -122,7 +138,7 @@ void edi_logpanel_add(Evas_Object *parent)
widget = elm_code_widget_add(parent, code);
edi_theme_elm_code_set(widget, _edi_project_config->gui.theme);
elm_code_widget_font_set(widget, _edi_project_config->font.name, _edi_project_config->font.size);
- elm_code_widget_gravity_set(widget, 0.0, 1.0);
+ elm_code_widget_gravity_set(widget, 0.0, 0.0);
efl_event_callback_add(widget, &ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_logpanel_line_cb, NULL);
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -131,6 +147,7 @@ void edi_logpanel_add(Evas_Object *parent)
_elm_code = code;
_info_widget = widget;
_edi_logpanel_placeholder_set();
+ _edi_logpanel_follow_tail();
eina_log_print_cb_set(_edi_logpanel_print_cb, NULL);
eina_log_color_disable_set(EINA_TRUE);
diff --git a/src/bin/edi_searchpanel.c b/src/bin/edi_searchpanel.c
index 4debc62..9f6a668 100644
--- a/src/bin/edi_searchpanel.c
+++ b/src/bin/edi_searchpanel.c
@@ -49,6 +49,30 @@ _edi_searchpanel_placeholder_clear(Elm_Code *code)
elm_code_file_clear(code->file);
}
+static void
+_edi_searchpanel_follow_tail(Elm_Code *code)
+{
+ Evas_Object *widget = NULL;
+ unsigned int lines;
+
+ if (!code || !code->file)
+ return;
+
+ if (code == _elm_code)
+ widget = _info_widget;
+ else if (code == _tasks_code)
+ widget = _tasks_widget;
+
+ if (!widget)
+ return;
+
+ lines = elm_code_file_lines_get(code->file);
+ if (lines == 0)
+ return;
+
+ elm_code_widget_cursor_position_set(widget, lines, 1);
+}
+
static Eina_Bool
_edi_searchpanel_config_changed_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
{
@@ -461,6 +485,7 @@ main_loop_line_append_async(void *data)
free(item->text);
item->text = NULL;
}
+ _edi_searchpanel_follow_tail(log->logger);
eina_file_close(log->f);
log->f = NULL;
@@ -660,6 +685,7 @@ edi_searchpanel_find(const char *text)
elm_code_file_clear(_elm_code->file);
_edi_searchpanel_placeholder_set(_elm_code);
+ _edi_searchpanel_follow_tail(_elm_code);
elm_object_text_set(_button_search, _("Cancel"));
_searching = EINA_TRUE;
@@ -713,7 +739,7 @@ edi_searchpanel_add(Evas_Object *parent)
widget = elm_code_widget_add(parent, code);
edi_theme_elm_code_set(widget, _edi_project_config->gui.theme);
elm_code_widget_font_set(widget, _edi_project_config->font.name, _edi_project_config->font.size);
- elm_code_widget_gravity_set(widget, 0.0, 1.0);
+ elm_code_widget_gravity_set(widget, 0.0, 0.0);
efl_event_callback_add(widget, EFL_UI_CODE_WIDGET_EVENT_LINE_CLICKED, _edi_searchpanel_line_clicked_cb, NULL);
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -722,6 +748,7 @@ edi_searchpanel_add(Evas_Object *parent)
_elm_code = code;
_info_widget = widget;
_edi_searchpanel_placeholder_set(_elm_code);
+ _edi_searchpanel_follow_tail(_elm_code);
eina_spinlock_new(&logs_lock);
elm_box_pack_end(hbox, entry);
@@ -784,6 +811,7 @@ edi_taskspanel_find(void)
elm_code_file_clear(_tasks_code->file);
_edi_searchpanel_placeholder_set(_tasks_code);
+ _edi_searchpanel_follow_tail(_tasks_code);
path = edi_project_get();
@@ -815,7 +843,7 @@ edi_taskspanel_add(Evas_Object *parent)
widget = elm_code_widget_add(parent, code);
edi_theme_elm_code_set(widget, _edi_project_config->gui.theme);
elm_code_widget_font_set(widget, _edi_project_config->font.name, _edi_project_config->font.size);
- elm_code_widget_gravity_set(widget, 0.0, 1.0);
+ elm_code_widget_gravity_set(widget, 0.0, 0.0);
efl_event_callback_add(widget, &ELM_CODE_EVENT_LINE_LOAD_DONE, _edi_taskspanel_line_cb, NULL);
efl_event_callback_add(widget, EFL_UI_CODE_WIDGET_EVENT_LINE_CLICKED, _edi_taskspanel_line_clicked_cb, NULL);
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -825,6 +853,7 @@ edi_taskspanel_add(Evas_Object *parent)
_tasks_code = code;
_tasks_widget = widget;
_edi_searchpanel_placeholder_set(_tasks_code);
+ _edi_searchpanel_follow_tail(_tasks_code);
elm_object_content_set(frame, widget);
elm_box_pack_end(parent, frame);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.