summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2007-03-21 20:29:13 +0000
committerSebastien Helleu <flashcode@flashtux.org>2007-03-21 20:29:13 +0000
commit6323e55ab4f398cc7e94aa363929d4d10acccaf2 (patch)
tree6b7528e415e93de205741a205ae56a3e9f94ed27
parentFixed bug with text search and previous/next highlight (sometimes search came back to end of buffer) (diff)
downloadweechat-6323e55ab4f398cc7e94aa363929d4d10acccaf2.tar.xz
weechat-6323e55ab4f398cc7e94aa363929d4d10acccaf2.zip
Added current buffer in hotlist when scrolling up in buffer (task #6664)
-rw-r--r--ChangeLog3
-rw-r--r--src/common/hotlist.c2
-rw-r--r--src/gui/gui-buffer.c35
-rw-r--r--src/gui/gui-common.c3
-rw-r--r--src/gui/gui.h1
-rw-r--r--src/irc/irc-recv.c6
-rw-r--r--weechat/ChangeLog3
-rw-r--r--weechat/src/common/hotlist.c2
-rw-r--r--weechat/src/gui/gui-buffer.c35
-rw-r--r--weechat/src/gui/gui-common.c3
-rw-r--r--weechat/src/gui/gui.h1
-rw-r--r--weechat/src/irc/irc-recv.c6
12 files changed, 90 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index c51df9dca..45a8ea283 100644
--- a/ChangeLog
+++ b/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/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);