summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2010-11-29 10:17:09 +0100
committerSebastien Helleu <flashcode@flashtux.org>2010-11-29 10:17:09 +0100
commit528dc258cad61903569413a24c6492759a2ba69a (patch)
tree91364e90cadf4e074d3aff62ea46b89572e8c365 /src/gui
parentb6833392fe1ef10d3d27a7898914d7c4cb5f2ecb (diff)
downloadweechat-528dc258cad61903569413a24c6492759a2ba69a.zip
Replace buffer local variable "no_highlight_nicks" by "hotlist_max_level_nicks"
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/gui-buffer.c129
-rw-r--r--src/gui/gui-buffer.h9
-rw-r--r--src/gui/gui-line.c32
3 files changed, 104 insertions, 66 deletions
diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c
index 2ca98d253..1d326b874 100644
--- a/src/gui/gui-buffer.c
+++ b/src/gui/gui-buffer.c
@@ -84,7 +84,7 @@ char *gui_buffer_properties_get_integer[] =
};
char *gui_buffer_properties_get_string[] =
{ "plugin", "name", "short_name", "title", "input", "text_search_input",
- "highlight_words", "highlight_tags", "no_highlight_nicks",
+ "highlight_words", "highlight_tags", "hotlist_max_level_nicks",
NULL
};
char *gui_buffer_properties_get_pointer[] =
@@ -96,8 +96,9 @@ char *gui_buffer_properties_set[] =
"type", "notify", "title", "time_for_each_line", "nicklist",
"nicklist_case_sensitive", "nicklist_display_groups", "highlight_words",
"highlight_words_add", "highlight_words_del", "highlight_tags",
- "no_highlight_nicks", "no_highlight_nicks_add", "no_highlight_nicks_del",
- "input", "input_pos", "input_get_unknown_commands",
+ "hotlist_max_level_nicks", "hotlist_max_level_nicks_add",
+ "hotlist_max_level_nicks_del", "input", "input_pos",
+ "input_get_unknown_commands",
NULL
};
@@ -459,11 +460,13 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
new_buffer->highlight_tags = NULL;
new_buffer->highlight_tags_count = 0;
new_buffer->highlight_tags_array = NULL;
- new_buffer->no_highlight_nicks = hashtable_new (8,
- WEECHAT_HASHTABLE_STRING,
- WEECHAT_HASHTABLE_STRING,
- NULL,
- NULL);
+
+ /* hotlist */
+ new_buffer->hotlist_max_level_nicks = hashtable_new (8,
+ WEECHAT_HASHTABLE_STRING,
+ WEECHAT_HASHTABLE_INTEGER,
+ NULL,
+ NULL);
/* keys */
new_buffer->keys = NULL;
@@ -752,8 +755,8 @@ gui_buffer_get_string (struct t_gui_buffer *buffer, const char *property)
return buffer->highlight_words;
else if (string_strcasecmp (property, "highlight_tags") == 0)
return buffer->highlight_tags;
- else if (string_strcasecmp (property, "no_highlight_nicks") == 0)
- return hashtable_get_string (buffer->no_highlight_nicks, "keys");
+ else if (string_strcasecmp (property, "hotlist_max_level_nicks") == 0)
+ return hashtable_get_string (buffer->hotlist_max_level_nicks, "keys_values");
else if (string_strncasecmp (property, "localvar_", 9) == 0)
{
ptr_value = (const char *)hashtable_get (buffer->local_variables,
@@ -1103,26 +1106,41 @@ gui_buffer_set_highlight_tags (struct t_gui_buffer *buffer,
}
/*
- * gui_buffer_set_no_highlight_nicks: set no_highlight_nicks for a buffer
+ * gui_buffer_set_hotlist_max_level_nicks: set hotlist_max_level_nicks for a
+ * buffer
*/
void
-gui_buffer_set_no_highlight_nicks (struct t_gui_buffer *buffer,
- const char *new_no_highlight_nicks)
+gui_buffer_set_hotlist_max_level_nicks (struct t_gui_buffer *buffer,
+ const char *new_hotlist_max_level_nicks)
{
- char **nicks;
- int nicks_count, i;
+ char **nicks, *pos, *error;
+ int nicks_count, value, i;
+ long number;
- hashtable_remove_all (buffer->no_highlight_nicks);
+ hashtable_remove_all (buffer->hotlist_max_level_nicks);
- if (new_no_highlight_nicks && new_no_highlight_nicks[0])
+ if (new_hotlist_max_level_nicks && new_hotlist_max_level_nicks[0])
{
- nicks = string_split (new_no_highlight_nicks, ",", 0, 0, &nicks_count);
+ nicks = string_split (new_hotlist_max_level_nicks, ",", 0, 0,
+ &nicks_count);
if (nicks)
{
for (i = 0; i < nicks_count; i++)
{
- hashtable_set (buffer->no_highlight_nicks, nicks[i], NULL);
+ value = -1;
+ pos = strchr (nicks[i], ':');
+ if (pos)
+ {
+ pos[0] = '\0';
+ pos++;
+ error = NULL;
+ number = strtol (pos, &error, 10);
+ if (error && !error[0])
+ value = (int)number;
+ }
+ hashtable_set (buffer->hotlist_max_level_nicks, nicks[i],
+ &value);
}
string_free_split (nicks);
}
@@ -1130,54 +1148,69 @@ gui_buffer_set_no_highlight_nicks (struct t_gui_buffer *buffer,
}
/*
- * gui_buffer_add_no_highlight_nicks: add nicks to no_highlight_nicks for a
- * buffer
+ * gui_buffer_add_hotlist_max_level_nicks: add nicks to hotlist_max_level_nicks
+ * for a buffer
*/
void
-gui_buffer_add_no_highlight_nicks (struct t_gui_buffer *buffer,
- const char *nicks_to_add)
+gui_buffer_add_hotlist_max_level_nicks (struct t_gui_buffer *buffer,
+ const char *nicks_to_add)
{
- char **nicks;
- int nicks_count, i;
+ char **nicks, *pos, *error;
+ int nicks_count, value, i;
+ long number;
if (!nicks_to_add)
return;
- nicks = string_split (nicks_to_add, ",", 0, 0,
- &nicks_count);
+ nicks = string_split (nicks_to_add, ",", 0, 0, &nicks_count);
if (nicks)
{
for (i = 0; i < nicks_count; i++)
{
- hashtable_set (buffer->no_highlight_nicks, nicks[i], NULL);
+ value = -1;
+ pos = strchr (nicks[i], ':');
+ if (pos)
+ {
+ pos[0] = '\0';
+ pos++;
+ error = NULL;
+ number = strtol (pos, &error, 10);
+ if (error && !error[0])
+ value = (int)number;
+ }
+ hashtable_set (buffer->hotlist_max_level_nicks, nicks[i],
+ &value);
}
string_free_split (nicks);
}
}
/*
- * gui_buffer_remove_no_highlight_nicks: remove nicks from no_highlight_nicks
- * in a buffer
+ * gui_buffer_remove_hotlist_max_level_nicks: remove nicks from
+ * hotlist_max_level_nicks in a
+ * buffer
*/
void
-gui_buffer_remove_no_highlight_nicks (struct t_gui_buffer *buffer,
- const char *nicks_to_remove)
+gui_buffer_remove_hotlist_max_level_nicks (struct t_gui_buffer *buffer,
+ const char *nicks_to_remove)
{
- char **nicks;
+ char **nicks, *pos;
int nicks_count, i;
if (!nicks_to_remove)
return;
- nicks = string_split (nicks_to_remove, ",", 0, 0,
- &nicks_count);
+ nicks = string_split (nicks_to_remove, ",", 0, 0, &nicks_count);
if (nicks)
{
for (i = 0; i < nicks_count; i++)
{
- hashtable_remove (buffer->no_highlight_nicks, nicks[i]);
+ pos = strchr (nicks[i], ':');
+ if (pos)
+ pos[0] = '\0';
+ hashtable_remove (buffer->hotlist_max_level_nicks, nicks[i]);
}
string_free_split (nicks);
}
@@ -1356,17 +1389,17 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
{
gui_buffer_set_highlight_tags (buffer, value);
}
- else if (string_strcasecmp (property, "no_highlight_nicks") == 0)
+ else if (string_strcasecmp (property, "hotlist_max_level_nicks") == 0)
{
- gui_buffer_set_no_highlight_nicks (buffer, value);
+ gui_buffer_set_hotlist_max_level_nicks (buffer, value);
}
- else if (string_strcasecmp (property, "no_highlight_nicks_add") == 0)
+ else if (string_strcasecmp (property, "hotlist_max_level_nicks_add") == 0)
{
- gui_buffer_add_no_highlight_nicks (buffer, value);
+ gui_buffer_add_hotlist_max_level_nicks (buffer, value);
}
- else if (string_strcasecmp (property, "no_highlight_nicks_del") == 0)
+ else if (string_strcasecmp (property, "hotlist_max_level_nicks_del") == 0)
{
- gui_buffer_remove_no_highlight_nicks (buffer, value);
+ gui_buffer_remove_hotlist_max_level_nicks (buffer, value);
}
else if (string_strncasecmp (property, "key_bind_", 9) == 0)
{
@@ -1944,8 +1977,8 @@ gui_buffer_close (struct t_gui_buffer *buffer)
free (buffer->highlight_tags);
if (buffer->highlight_tags_array)
string_free_split (buffer->highlight_tags_array);
- if (buffer->no_highlight_nicks)
- hashtable_free (buffer->no_highlight_nicks);
+ if (buffer->hotlist_max_level_nicks)
+ hashtable_free (buffer->hotlist_max_level_nicks);
gui_keyboard_free_all (&buffer->keys, &buffer->last_key,
&buffer->keys_count);
gui_buffer_local_var_remove_all (buffer);
@@ -2848,7 +2881,7 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!infolist_new_var_string (ptr_item, "highlight_tags", buffer->highlight_tags))
return 0;
- if (!infolist_new_var_string (ptr_item, "no_highlight_nicks", hashtable_get_string (buffer->no_highlight_nicks, "keys")))
+ if (!infolist_new_var_string (ptr_item, "hotlist_max_level_nicks", hashtable_get_string (buffer->hotlist_max_level_nicks, "keys_values")))
return 0;
i = 0;
for (ptr_key = buffer->keys; ptr_key; ptr_key = ptr_key->next_key)
@@ -3030,10 +3063,10 @@ gui_buffer_print_log ()
log_printf (" prev_buffer. . . . . . : 0x%lx", ptr_buffer->prev_buffer);
log_printf (" next_buffer. . . . . . : 0x%lx", ptr_buffer->next_buffer);
- if (ptr_buffer->no_highlight_nicks)
+ if (ptr_buffer->hotlist_max_level_nicks)
{
- hashtable_print_log (ptr_buffer->no_highlight_nicks,
- "no_highlight_nicks");
+ hashtable_print_log (ptr_buffer->hotlist_max_level_nicks,
+ "hotlist_max_level_nicks");
}
if (ptr_buffer->keys)
diff --git a/src/gui/gui-buffer.h b/src/gui/gui-buffer.h
index b296d2d58..16cdf496c 100644
--- a/src/gui/gui-buffer.h
+++ b/src/gui/gui-buffer.h
@@ -162,7 +162,10 @@ struct t_gui_buffer
int highlight_tags_count; /* number of tags to highlight */
/* (if 0, any tag is highlighted) */
char **highlight_tags_array; /* tags to highlight */
- struct t_hashtable *no_highlight_nicks; /* nicks to NOT highlight */
+
+ /* hotlist settings for buffer */
+ struct t_hashtable *hotlist_max_level_nicks; /* max hotlist level for */
+ /* some nicks */
/* keys associated to buffer */
struct t_gui_key *keys; /* keys specific to buffer */
@@ -232,8 +235,8 @@ extern void gui_buffer_set_highlight_words (struct t_gui_buffer *buffer,
const char *new_highlight_words);
extern void gui_buffer_set_highlight_tags (struct t_gui_buffer *buffer,
const char *new_highlight_tags);
-extern void gui_buffer_set_no_highlight_nicks (struct t_gui_buffer *buffer,
- const char *new_no_highlight_nicks);
+extern void gui_buffer_set_hotlist_max_level_nicks (struct t_gui_buffer *buffer,
+ const char *new_hotlist_max_level_nicks);
extern void gui_buffer_set_unread (struct t_gui_buffer *buffer);
extern void gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
const char *value);
diff --git a/src/gui/gui-line.c b/src/gui/gui-line.c
index 102d5d7ac..dca583de1 100644
--- a/src/gui/gui-line.c
+++ b/src/gui/gui-line.c
@@ -406,7 +406,6 @@ gui_line_has_highlight (struct t_gui_line *line)
{
int rc, i;
char *msg_no_color, *highlight_words;
- const char *nick;
/*
* highlights are disabled on this buffer? (special value "-" means that
@@ -434,17 +433,6 @@ gui_line_has_highlight (struct t_gui_line *line)
line->data->buffer->highlight_tags_array))
return 0;
}
-
- /*
- * if a nick is defined in tags ("nick_xxx"), then check if highlight is
- * disabled for this nick (using hashtable buffer->no_highlight_nicks)
- */
- nick = gui_line_get_nick_tag (line);
- if (nick)
- {
- if (hashtable_has_key (line->data->buffer->no_highlight_nicks, nick))
- return 0;
- }
/* remove color codes from line message */
msg_no_color = gui_color_decode (line->data->message, NULL);
@@ -762,7 +750,8 @@ gui_line_add (struct t_gui_buffer *buffer, time_t date,
struct t_gui_line_data *new_line_data;
struct t_gui_window *ptr_win;
char *message_for_signal;
- int notify_level;
+ const char *nick;
+ int notify_level, *max_notify_level;
new_line = malloc (sizeof (*new_line));
if (!new_line)
@@ -803,11 +792,23 @@ gui_line_add (struct t_gui_buffer *buffer, time_t date,
new_line->data->prefix_length = (prefix) ?
gui_chat_strlen_screen (prefix) : 0;
new_line->data->message = (message) ? strdup (message) : strdup ("");
- new_line->data->highlight = gui_line_has_highlight (new_line);
+ /* get notify level and max notify level for nick in buffer */
notify_level = gui_line_get_notify_level (new_line);
+ nick = gui_line_get_nick_tag (new_line);
+ max_notify_level = NULL;
+ if (nick)
+ max_notify_level = hashtable_get (buffer->hotlist_max_level_nicks, nick);
+ if (max_notify_level
+ && (*max_notify_level < notify_level))
+ notify_level = *max_notify_level;
+
if (notify_level == GUI_HOTLIST_HIGHLIGHT)
new_line->data->highlight = 1;
+ else if (max_notify_level && (*max_notify_level < GUI_HOTLIST_HIGHLIGHT))
+ new_line->data->highlight = 0;
+ else
+ new_line->data->highlight = gui_line_has_highlight (new_line);
/* add line to lines list */
gui_line_add_to_list (buffer->own_lines, new_line);
@@ -844,7 +845,8 @@ gui_line_add (struct t_gui_buffer *buffer, time_t date,
free (message_for_signal);
}
}
- gui_hotlist_add (buffer, notify_level, NULL, 1);
+ if (notify_level >= GUI_HOTLIST_MIN)
+ gui_hotlist_add (buffer, notify_level, NULL, 1);
}
}
else