summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2011-04-17 11:02:45 +0200
committerSebastien Helleu <flashcode@flashtux.org>2011-04-17 11:02:45 +0200
commit7c6723f255ceea7a33e1b3421ce2b4af7583e12b (patch)
tree1d4c8296bb70ca31f45baf483396d1085bb6f2e1 /src/gui
parentdd8d789fec1668c0cf50e44eeb13b1d1b0cf6ffe (diff)
downloadweechat-7c6723f255ceea7a33e1b3421ce2b4af7583e12b.zip
core: add automatic reset of color pairs, new option weechat.look.color_pairs_auto_reset
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/curses/gui-curses-color.c23
-rw-r--r--src/gui/curses/gui-curses-main.c14
-rw-r--r--src/gui/curses/gui-curses.h5
3 files changed, 39 insertions, 3 deletions
diff --git a/src/gui/curses/gui-curses-color.c b/src/gui/curses/gui-curses-color.c
index 00c8e7133..c85961bfc 100644
--- a/src/gui/curses/gui-curses-color.c
+++ b/src/gui/curses/gui-curses-color.c
@@ -28,6 +28,7 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
+#include <time.h>
#include "../../core/weechat.h"
#include "../../core/wee-config.h"
@@ -80,6 +81,9 @@ int gui_color_num_pairs = 63; /* number of pairs used by WeeChat */
short *gui_color_pairs = NULL; /* table with pair for each fg+bg */
int gui_color_pairs_used = 0; /* number of pairs currently used */
int gui_color_warning_pairs_full = 0; /* warning displayed? */
+int gui_color_pairs_auto_reset = 0; /* auto reset of pairs needed */
+int gui_color_pairs_auto_reset_pending = 0; /* auto reset is pending */
+time_t gui_color_pairs_auto_reset_last = 0; /* time of last auto reset */
/* color buffer */
struct t_gui_buffer *gui_color_buffer = NULL; /* buffer with colors */
@@ -343,8 +347,10 @@ gui_color_get_pair (int fg, int bg)
if (gui_color_pairs_used >= gui_color_num_pairs)
{
/* oh no, no more pair available! */
- if (!gui_color_warning_pairs_full)
+ if (!gui_color_warning_pairs_full
+ && (CONFIG_INTEGER(config_look_color_pairs_auto_reset) < 0))
{
+ /* display warning if auto reset of pairs is disabled */
hook_timer (NULL, 1, 0, 1,
&gui_color_timer_warning_pairs_full, NULL);
gui_color_warning_pairs_full = 1;
@@ -356,6 +362,12 @@ gui_color_get_pair (int fg, int bg)
gui_color_pairs_used++;
gui_color_pairs[index] = gui_color_pairs_used;
init_pair (gui_color_pairs_used, fg, bg);
+ if ((gui_color_num_pairs > 1) && !gui_color_pairs_auto_reset_pending
+ && (CONFIG_INTEGER(config_look_color_pairs_auto_reset) >= 0)
+ && (gui_color_num_pairs - gui_color_pairs_used <= CONFIG_INTEGER(config_look_color_pairs_auto_reset)))
+ {
+ gui_color_pairs_auto_reset = 1;
+ }
gui_color_buffer_refresh_needed = 1;
}
@@ -812,6 +824,13 @@ gui_color_buffer_display ()
if (gui_color_buffer_extra_info)
{
+ /* display time of last auto reset of color pairs */
+ y++;
+ gui_chat_printf_y (gui_color_buffer, y++,
+ _("Last auto reset of pairs: %s"),
+ (gui_color_pairs_auto_reset_last == 0) ?
+ "-" : ctime (&gui_color_pairs_auto_reset_last));
+
/* display WeeChat basic colors */
y++;
gui_chat_printf_y (gui_color_buffer, y++,
@@ -1074,7 +1093,7 @@ gui_color_buffer_input_cb (void *data, struct t_gui_buffer *buffer,
}
else if (string_strcasecmp (input_data, "z") == 0)
{
- gui_color_reset_pairs (buffer);
+ gui_color_reset_pairs ();
}
return WEECHAT_RC_OK;
diff --git a/src/gui/curses/gui-curses-main.c b/src/gui/curses/gui-curses-main.c
index e1626decd..550449f8c 100644
--- a/src/gui/curses/gui-curses-main.c
+++ b/src/gui/curses/gui-curses-main.c
@@ -30,6 +30,7 @@
#include <unistd.h>
#include <string.h>
#include <signal.h>
+#include <time.h>
#include "../../core/weechat.h"
#include "../../core/wee-command.h"
@@ -224,7 +225,7 @@ gui_main_refreshs ()
struct t_gui_window *ptr_win;
struct t_gui_buffer *ptr_buffer;
struct t_gui_bar *ptr_bar;
-
+
/* refresh color buffer if needed */
if (gui_color_buffer_refresh_needed)
{
@@ -325,11 +326,22 @@ gui_main_loop ()
/* execute hook timers */
hook_timer_exec ();
+
+ /* auto reset of color pairs */
+ if (gui_color_pairs_auto_reset)
+ {
+ gui_color_reset_pairs ();
+ gui_color_pairs_auto_reset_last = time (NULL);
+ gui_color_pairs_auto_reset = 0;
+ gui_color_pairs_auto_reset_pending = 1;
+ }
gui_main_refreshs ();
if (gui_window_refresh_needed)
gui_main_refreshs ();
+ gui_color_pairs_auto_reset_pending = 0;
+
/* wait for keyboard or network activity */
FD_ZERO (&read_fds);
FD_ZERO (&write_fds);
diff --git a/src/gui/curses/gui-curses.h b/src/gui/curses/gui-curses.h
index 47ac40e97..7c5033912 100644
--- a/src/gui/curses/gui-curses.h
+++ b/src/gui/curses/gui-curses.h
@@ -20,6 +20,8 @@
#ifndef __WEECHAT_GUI_CURSES_H
#define __WEECHAT_GUI_CURSES_H 1
+#include <time.h>
+
#ifdef HAVE_NCURSESW_CURSES_H
#include <ncursesw/ncurses.h>
#elif HAVE_NCURSES_H
@@ -59,6 +61,9 @@ extern int gui_term_cols, gui_term_lines;
extern struct t_gui_color gui_weechat_colors[];
extern int gui_color_term_colors;
extern int gui_color_num_pairs;
+extern int gui_color_pairs_auto_reset;
+extern int gui_color_pairs_auto_reset_pending;
+extern time_t gui_color_pairs_auto_reset_last;
extern int gui_color_buffer_refresh_needed;
/* color functions */