diff options
author | 2007-03-21 20:29:13 +0000 | |
---|---|---|
committer | 2007-03-21 20:29:13 +0000 | |
commit | 6323e55ab4f398cc7e94aa363929d4d10acccaf2 (patch) | |
tree | 6b7528e415e93de205741a205ae56a3e9f94ed27 | |
parent | Fixed bug with text search and previous/next highlight (sometimes search came back to end of buffer) (diff) | |
download | weechat-6323e55ab4f398cc7e94aa363929d4d10acccaf2.tar.xz weechat-6323e55ab4f398cc7e94aa363929d4d10acccaf2.zip |
Added current buffer in hotlist when scrolling up in buffer (task #6664)
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | src/common/hotlist.c | 2 | ||||
-rw-r--r-- | src/gui/gui-buffer.c | 35 | ||||
-rw-r--r-- | src/gui/gui-common.c | 3 | ||||
-rw-r--r-- | src/gui/gui.h | 1 | ||||
-rw-r--r-- | src/irc/irc-recv.c | 6 | ||||
-rw-r--r-- | weechat/ChangeLog | 3 | ||||
-rw-r--r-- | weechat/src/common/hotlist.c | 2 | ||||
-rw-r--r-- | weechat/src/gui/gui-buffer.c | 35 | ||||
-rw-r--r-- | weechat/src/gui/gui-common.c | 3 | ||||
-rw-r--r-- | weechat/src/gui/gui.h | 1 | ||||
-rw-r--r-- | weechat/src/irc/irc-recv.c | 6 |
12 files changed, 90 insertions, 10 deletions
@@ -1,10 +1,11 @@ WeeChat - Wee Enhanced Environment for Chat =========================================== -ChangeLog - 2007-03-20 +ChangeLog - 2007-03-21 Version 0.2.4 (under dev!): + * added current buffer in hotlist when scrolling up in buffer (task #6664) * fixed bug with explode_string / free_exploded_string when max_items > 0 * added new key (ctrl-R) for interactive and incremental search in buffer history (task #6628) diff --git a/src/common/hotlist.c b/src/common/hotlist.c index ebf42a435..370216c64 100644 --- a/src/common/hotlist.c +++ b/src/common/hotlist.c @@ -86,7 +86,7 @@ hotlist_add (int priority, t_irc_server *server, t_gui_buffer *buffer, /* do not highlight current buffer */ if ((buffer == gui_current_window->buffer) - && (!allow_current_buffer)) + && (!allow_current_buffer) && (!gui_buffer_is_scrolled (buffer))) return; if ((pos_hotlist = hotlist_search (buffer))) diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c index 5970e3a3b..4b78ab2bb 100644 --- a/src/gui/gui-buffer.c +++ b/src/gui/gui-buffer.c @@ -367,6 +367,41 @@ gui_buffer_find_window (t_gui_buffer *buffer) } /* + * gui_buffer_is_scrolled: return 1 if all windows displaying buffer are scrolled + * (user doesn't see end of buffer) + * return 0 if at least one window is NOT scrolled + */ + +int +gui_buffer_is_scrolled (t_gui_buffer *buffer) +{ + t_gui_window *ptr_win; + int buffer_found; + + if (!buffer) + return 0; + + buffer_found = 0; + for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) + { + if (ptr_win->buffer == buffer) + { + buffer_found = 1; + /* buffer found and not scrolled, exit immediately */ + if (!ptr_win->scroll) + return 0; + } + } + + /* buffer found, and all windows were scrolled */ + if (buffer_found) + return 1; + + /* buffer not found */ + return 0; +} + +/* * gui_buffer_get_dcc: get pointer to DCC buffer (DCC buffer created if not existing) */ diff --git a/src/gui/gui-common.c b/src/gui/gui-common.c index 5708d7ba9..f7b6cba80 100644 --- a/src/gui/gui-common.c +++ b/src/gui/gui-common.c @@ -178,7 +178,8 @@ gui_add_to_line (t_gui_buffer *buffer, int type, time_t date, char *nick, char * gui_chat_draw_line (buffer, buffer->last_line); gui_chat_draw (buffer, 0); } - if (gui_add_hotlist && (buffer->num_displayed == 0)) + if (gui_add_hotlist + && ((buffer->num_displayed == 0) || (gui_buffer_is_scrolled (buffer)))) { if (3 - buffer->last_line->line_with_message - buffer->last_line->line_with_highlight <= diff --git a/src/gui/gui.h b/src/gui/gui.h index f9a0c74c4..c3e56e08e 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -85,6 +85,7 @@ extern t_gui_buffer *gui_buffer_new (t_gui_window *, void *, void *, int, int); extern t_gui_buffer *gui_buffer_search (char *, char *); extern t_gui_buffer *gui_buffer_search_by_number (int); extern t_gui_window *gui_buffer_find_window (t_gui_buffer *); +extern int gui_buffer_is_scrolled (t_gui_buffer *); extern t_gui_buffer *gui_buffer_get_dcc (t_gui_window *); extern void gui_buffer_clear (t_gui_buffer *); extern void gui_buffer_clear_all (); diff --git a/src/irc/irc-recv.c b/src/irc/irc-recv.c index 245d39895..3b1057d43 100644 --- a/src/irc/irc-recv.c +++ b/src/irc/irc-recv.c @@ -425,7 +425,8 @@ irc_cmd_recv_invite (t_irc_server *server, char *host, char *nick, char *argumen GUI_COLOR(COLOR_WIN_CHAT), GUI_COLOR(COLOR_WIN_CHAT_NICK), nick); - if (gui_add_hotlist && (server->buffer->num_displayed == 0)) + if (gui_add_hotlist + && ((server->buffer->num_displayed == 0) || (gui_buffer_is_scrolled (server->buffer)))) { hotlist_add (HOTLIST_HIGHLIGHT, server, server->buffer, 0); gui_status_draw (gui_current_window->buffer, 1); @@ -1042,7 +1043,8 @@ irc_cmd_recv_notice (t_irc_server *server, char *host, char *nick, char *argumen (ascii_strcasecmp (nick, "chanserv") != 0) && (ascii_strcasecmp (nick, "memoserv") != 0)) { - if (gui_add_hotlist && (server->buffer->num_displayed == 0)) + if (gui_add_hotlist + && ((server->buffer->num_displayed == 0) || (gui_buffer_is_scrolled (server->buffer)))) { hotlist_add (HOTLIST_PRIVATE, server, server->buffer, 0); gui_status_draw (gui_current_window->buffer, 1); diff --git a/weechat/ChangeLog b/weechat/ChangeLog index c51df9dca..45a8ea283 100644 --- a/weechat/ChangeLog +++ b/weechat/ChangeLog @@ -1,10 +1,11 @@ WeeChat - Wee Enhanced Environment for Chat =========================================== -ChangeLog - 2007-03-20 +ChangeLog - 2007-03-21 Version 0.2.4 (under dev!): + * added current buffer in hotlist when scrolling up in buffer (task #6664) * fixed bug with explode_string / free_exploded_string when max_items > 0 * added new key (ctrl-R) for interactive and incremental search in buffer history (task #6628) diff --git a/weechat/src/common/hotlist.c b/weechat/src/common/hotlist.c index ebf42a435..370216c64 100644 --- a/weechat/src/common/hotlist.c +++ b/weechat/src/common/hotlist.c @@ -86,7 +86,7 @@ hotlist_add (int priority, t_irc_server *server, t_gui_buffer *buffer, /* do not highlight current buffer */ if ((buffer == gui_current_window->buffer) - && (!allow_current_buffer)) + && (!allow_current_buffer) && (!gui_buffer_is_scrolled (buffer))) return; if ((pos_hotlist = hotlist_search (buffer))) diff --git a/weechat/src/gui/gui-buffer.c b/weechat/src/gui/gui-buffer.c index 5970e3a3b..4b78ab2bb 100644 --- a/weechat/src/gui/gui-buffer.c +++ b/weechat/src/gui/gui-buffer.c @@ -367,6 +367,41 @@ gui_buffer_find_window (t_gui_buffer *buffer) } /* + * gui_buffer_is_scrolled: return 1 if all windows displaying buffer are scrolled + * (user doesn't see end of buffer) + * return 0 if at least one window is NOT scrolled + */ + +int +gui_buffer_is_scrolled (t_gui_buffer *buffer) +{ + t_gui_window *ptr_win; + int buffer_found; + + if (!buffer) + return 0; + + buffer_found = 0; + for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) + { + if (ptr_win->buffer == buffer) + { + buffer_found = 1; + /* buffer found and not scrolled, exit immediately */ + if (!ptr_win->scroll) + return 0; + } + } + + /* buffer found, and all windows were scrolled */ + if (buffer_found) + return 1; + + /* buffer not found */ + return 0; +} + +/* * gui_buffer_get_dcc: get pointer to DCC buffer (DCC buffer created if not existing) */ diff --git a/weechat/src/gui/gui-common.c b/weechat/src/gui/gui-common.c index 5708d7ba9..f7b6cba80 100644 --- a/weechat/src/gui/gui-common.c +++ b/weechat/src/gui/gui-common.c @@ -178,7 +178,8 @@ gui_add_to_line (t_gui_buffer *buffer, int type, time_t date, char *nick, char * gui_chat_draw_line (buffer, buffer->last_line); gui_chat_draw (buffer, 0); } - if (gui_add_hotlist && (buffer->num_displayed == 0)) + if (gui_add_hotlist + && ((buffer->num_displayed == 0) || (gui_buffer_is_scrolled (buffer)))) { if (3 - buffer->last_line->line_with_message - buffer->last_line->line_with_highlight <= diff --git a/weechat/src/gui/gui.h b/weechat/src/gui/gui.h index f9a0c74c4..c3e56e08e 100644 --- a/weechat/src/gui/gui.h +++ b/weechat/src/gui/gui.h @@ -85,6 +85,7 @@ extern t_gui_buffer *gui_buffer_new (t_gui_window *, void *, void *, int, int); extern t_gui_buffer *gui_buffer_search (char *, char *); extern t_gui_buffer *gui_buffer_search_by_number (int); extern t_gui_window *gui_buffer_find_window (t_gui_buffer *); +extern int gui_buffer_is_scrolled (t_gui_buffer *); extern t_gui_buffer *gui_buffer_get_dcc (t_gui_window *); extern void gui_buffer_clear (t_gui_buffer *); extern void gui_buffer_clear_all (); diff --git a/weechat/src/irc/irc-recv.c b/weechat/src/irc/irc-recv.c index 245d39895..3b1057d43 100644 --- a/weechat/src/irc/irc-recv.c +++ b/weechat/src/irc/irc-recv.c @@ -425,7 +425,8 @@ irc_cmd_recv_invite (t_irc_server *server, char *host, char *nick, char *argumen GUI_COLOR(COLOR_WIN_CHAT), GUI_COLOR(COLOR_WIN_CHAT_NICK), nick); - if (gui_add_hotlist && (server->buffer->num_displayed == 0)) + if (gui_add_hotlist + && ((server->buffer->num_displayed == 0) || (gui_buffer_is_scrolled (server->buffer)))) { hotlist_add (HOTLIST_HIGHLIGHT, server, server->buffer, 0); gui_status_draw (gui_current_window->buffer, 1); @@ -1042,7 +1043,8 @@ irc_cmd_recv_notice (t_irc_server *server, char *host, char *nick, char *argumen (ascii_strcasecmp (nick, "chanserv") != 0) && (ascii_strcasecmp (nick, "memoserv") != 0)) { - if (gui_add_hotlist && (server->buffer->num_displayed == 0)) + if (gui_add_hotlist + && ((server->buffer->num_displayed == 0) || (gui_buffer_is_scrolled (server->buffer)))) { hotlist_add (HOTLIST_PRIVATE, server, server->buffer, 0); gui_status_draw (gui_current_window->buffer, 1); |