mirror of
https://git.jabber.space/devs/cproof.git
synced 2026-07-25 20:36:22 +00:00
Clarify and improve win_page_up() scrolling offset adjustment for smoother paging
This commit refines the existing logic in win_page_up() by: - Improving comments to clearly explain the rationale behind adjusting the scroll offset relative to the first buffer entry’s visual position, helping future maintainers understand why this is necessary. - Fixing offset recalculation to better handle cases where older messages with variable heights are loaded from the DB, improving scroll smoothness. - Changing the logging of negative *page_start values from warning to debug, recognizing that this can be a normal scenario when insufficient history is loaded. - Simplifying some conditionals and renaming variables for clearer intent. No changes yet applied to win_page_down(), but similar improvements could be considered in the future. Overall, this enhances the robustness and user experience of scrolling up in chat windows, while preserving existing functional logic.
This commit is contained in:
@@ -561,7 +561,8 @@ static void
|
||||
_chatwin_history(ProfChatWin* chatwin, const char* const contact_barejid)
|
||||
{
|
||||
if (!chatwin->history_shown) {
|
||||
GSList* history = log_database_get_previous_chat(contact_barejid, NULL, NULL, FALSE, FALSE);
|
||||
GSList* history = NULL;
|
||||
log_database_get_previous_chat(contact_barejid, NULL, NULL, FALSE, FALSE, &history);
|
||||
GSList* curr = history;
|
||||
|
||||
while (curr) {
|
||||
@@ -583,15 +584,15 @@ _chatwin_history(ProfChatWin* chatwin, const char* const contact_barejid)
|
||||
// Print history starting from start_time to end_time if end_time is null the
|
||||
// first entry's timestamp in the buffer is used. Flip true to prepend to buffer.
|
||||
// Timestamps should be in iso8601
|
||||
gboolean
|
||||
db_history_result_t
|
||||
chatwin_db_history(ProfChatWin* chatwin, const char* start_time, char* end_time, gboolean flip)
|
||||
{
|
||||
if (!end_time) {
|
||||
end_time = buffer_size(((ProfWin*)chatwin)->layout->buffer) == 0 ? NULL : g_date_time_format_iso8601(buffer_get_entry(((ProfWin*)chatwin)->layout->buffer, 0)->time);
|
||||
}
|
||||
|
||||
GSList* history = log_database_get_previous_chat(chatwin->barejid, start_time, end_time, !flip, flip);
|
||||
gboolean has_items = g_slist_length(history) != 0;
|
||||
GSList* history = NULL;
|
||||
db_history_result_t result = log_database_get_previous_chat(chatwin->barejid, start_time, end_time, !flip, flip, &history);
|
||||
GSList* curr = history;
|
||||
|
||||
while (curr) {
|
||||
@@ -610,9 +611,12 @@ chatwin_db_history(ProfChatWin* chatwin, const char* start_time, char* end_time,
|
||||
}
|
||||
|
||||
g_slist_free_full(history, (GDestroyNotify)message_free);
|
||||
// TODO: Potential optimization
|
||||
// if (flip)
|
||||
// since adding messages to history without overflowing buffer does not require a win_redraw
|
||||
win_redraw((ProfWin*)chatwin);
|
||||
|
||||
return has_items;
|
||||
return result;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user