Compare commits
5 Commits
master
...
fix/scroll
| Author | SHA1 | Date | |
|---|---|---|---|
|
ac7d6c31f0
|
|||
|
0f24910685
|
|||
|
506794474a
|
|||
|
ef0dd74dc1
|
|||
|
c12a1bc355
|
@@ -61,6 +61,22 @@ integrity_issue_free(integrity_issue_t* issue)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
log_database_can_recover_messages(void)
|
||||||
|
{
|
||||||
|
if (!active_db_backend) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
auto_gchar gchar* pref_dblog = prefs_get_string(PREF_DBLOG);
|
||||||
|
if (g_strcmp0(pref_dblog, "off") == 0) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (g_strcmp0(pref_dblog, "redact") == 0) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
log_database_init(ProfAccount* account)
|
log_database_init(ProfAccount* account)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -109,6 +109,9 @@ ProfMessage* log_database_get_limits_info(const gchar* const contact_barejid, gb
|
|||||||
void log_database_close(void);
|
void log_database_close(void);
|
||||||
GSList* log_database_verify_integrity(const gchar* const contact_barejid);
|
GSList* log_database_verify_integrity(const gchar* const contact_barejid);
|
||||||
|
|
||||||
|
// FALSE if no backend, or PREF_DBLOG is "off" / "redact".
|
||||||
|
gboolean log_database_can_recover_messages(void);
|
||||||
|
|
||||||
// Cross-backend export/import (requires HAVE_SQLITE)
|
// Cross-backend export/import (requires HAVE_SQLITE)
|
||||||
#ifdef HAVE_SQLITE
|
#ifdef HAVE_SQLITE
|
||||||
int log_database_export_to_flatfile(const gchar* const contact_jid);
|
int log_database_export_to_flatfile(const gchar* const contact_jid);
|
||||||
|
|||||||
@@ -301,12 +301,6 @@ cl_ev_send_ai_msg(ProfAiWin* aiwin, const char* const message, const char* const
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset paged flag before printing user message.
|
|
||||||
* If the user scrolled up to view history, paged=1 would suppress
|
|
||||||
* the message in _win_printf(). Reset it here so the message displays. */
|
|
||||||
aiwin->window.layout->paged = 0;
|
|
||||||
aiwin->window.layout->unread_msg = 0;
|
|
||||||
|
|
||||||
// Display user message in AI window.
|
// Display user message in AI window.
|
||||||
win_print_outgoing(&aiwin->window, ">>", id, NULL, message);
|
win_print_outgoing(&aiwin->window, ">>", id, NULL, message);
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
#include "ui/titlebar.h"
|
#include "ui/titlebar.h"
|
||||||
#include "ui/inputwin.h"
|
#include "ui/inputwin.h"
|
||||||
|
#include "ui/win_types.h"
|
||||||
#include "ui/window_list.h"
|
#include "ui/window_list.h"
|
||||||
#include "ui/window.h"
|
#include "ui/window.h"
|
||||||
#include "ui/screen.h"
|
#include "ui/screen.h"
|
||||||
@@ -252,6 +253,10 @@ _title_bar_draw(void)
|
|||||||
_show_muc_privacy(mucwin);
|
_show_muc_privacy(mucwin);
|
||||||
_show_attention(current, mucwin->has_attention);
|
_show_attention(current, mucwin->has_attention);
|
||||||
_show_scrolled(current);
|
_show_scrolled(current);
|
||||||
|
} else if (current && current->type == WIN_AI) {
|
||||||
|
ProfAiWin* aiwin = (ProfAiWin*)current;
|
||||||
|
assert(aiwin->memcheck == PROFAIWIN_MEMCHECK);
|
||||||
|
_show_scrolled(current);
|
||||||
}
|
}
|
||||||
|
|
||||||
_show_self_presence();
|
_show_self_presence();
|
||||||
|
|||||||
@@ -848,6 +848,14 @@ win_page_down(ProfWin* window, int scroll_size)
|
|||||||
window->layout->paged = 0;
|
window->layout->paged = 0;
|
||||||
window->layout->unread_msg = 0;
|
window->layout->unread_msg = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Non-chat windows have no DB to fetch from, so WIN_SCROLL_REACHED_BOTTOM
|
||||||
|
// never fires; reset paged once the buffer's last line is on screen.
|
||||||
|
if (window->type != WIN_CHAT
|
||||||
|
&& (total_rows - *page_start) <= page_space + 1) {
|
||||||
|
window->layout->paged = 0;
|
||||||
|
window->layout->unread_msg = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1801,10 +1809,12 @@ static void
|
|||||||
_win_printf(ProfWin* window, const char* show_char, int pad_indent, GDateTime* timestamp, int flags, theme_item_t theme_item, const char* const display_from, const char* const from_jid, const char* const message_id, const char* const message, ...)
|
_win_printf(ProfWin* window, const char* show_char, int pad_indent, GDateTime* timestamp, int flags, theme_item_t theme_item, const char* const display_from, const char* const from_jid, const char* const message_id, const char* const message, ...)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* Prevent printing and buffer update when user is viewing message history [SCROLLING]*/
|
|
||||||
if (window->layout->paged && wins_is_current(window)) {
|
if (window->layout->paged && wins_is_current(window)) {
|
||||||
window->layout->unread_msg++;
|
window->layout->unread_msg++;
|
||||||
return;
|
// Skip buffer only when DB can replay the message on scroll-down.
|
||||||
|
if (window->type == WIN_CHAT && log_database_can_recover_messages()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timestamp == NULL) {
|
if (timestamp == NULL) {
|
||||||
|
|||||||
Reference in New Issue
Block a user