summaryrefslogtreecommitdiff
path: root/src/bar.c
diff options
context:
space:
mode:
authorsabetts <sabetts>2006-09-26 23:44:36 +0000
committersabetts <sabetts>2006-09-26 23:44:36 +0000
commitad859c2d9b0f19ff55ea016d23a97853ef99b89e (patch)
treefdd75d9d29e23a21ba6b44cc0af1af257ad234e6 /src/bar.c
parent7977c0c3508e1437f50a900d827e9259f0b962bf (diff)
downloadratpoison-ad859c2d9b0f19ff55ea016d23a97853ef99b89e.zip
* src/manage.c (update_window_name): return 1 if anything changed. 0 otherwise.
* src/events.c (property_notify): only update the window names if the window name actually changed. * src/bar.h (redraw_last_message): new prototype * src/bar.c (update_bar): update the window list if that's what's displayed. call redraw_last_message. (update_window_names): call marked_message_internal. (marked_message): call marked_message_internal. (marked_message_internal): ripped body from old marked_message minus alarm reset. (redraw_last_message): new function (show_last_message): call redraw_last_message * src/actions.c: include ctype.h (cmd_license): use redraw_last_message (cmd_help): likewise
Diffstat (limited to 'src/bar.c')
-rw-r--r--src/bar.c39
1 files changed, 31 insertions, 8 deletions
diff --git a/src/bar.c b/src/bar.c
index b459a5e..769b3b7 100644
--- a/src/bar.c
+++ b/src/bar.c
@@ -44,6 +44,8 @@ static char *last_msg = NULL;
static int last_mark_start = 0;
static int last_mark_end = 0;
+static void marked_message_internal (char *msg, int mark_start, int mark_end);
+
/* Reset the alarm to auto-hide the bar in BAR_TIMEOUT seconds. */
static void
reset_alarm (void)
@@ -145,12 +147,19 @@ bar_y (rp_screen *s, int height)
void
update_bar (rp_screen *s)
{
+ if (s->bar_is_raised == BAR_IS_WINDOW_LIST) {
+ update_window_names (s, defaults.window_fmt);
+ return;
+ }
+
if (s->bar_is_raised == BAR_IS_HIDDEN)
return;
- show_last_message();
+ redraw_last_message();
}
+/* Note that we use marked_message_internal to avoid resetting the
+ alarm. */
void
update_window_names (rp_screen *s, char *fmt)
{
@@ -165,12 +174,12 @@ update_window_names (rp_screen *s, char *fmt)
if(defaults.window_list_style == STYLE_ROW)
{
get_window_list (fmt, NULL, bar_buffer, &mark_start, &mark_end);
- marked_message (sbuf_get (bar_buffer), mark_start, mark_end);
+ marked_message_internal (sbuf_get (bar_buffer), mark_start, mark_end);
}
else
{
get_window_list (fmt, "\n", bar_buffer, &mark_start, &mark_end);
- marked_message (sbuf_get (bar_buffer), mark_start, mark_end);
+ marked_message_internal (sbuf_get (bar_buffer), mark_start, mark_end);
}
@@ -492,6 +501,14 @@ update_last_message (char *msg, int mark_start, int mark_end)
void
marked_message (char *msg, int mark_start, int mark_end)
{
+ /* Schedule the bar to be hidden after some amount of time. */
+ reset_alarm ();
+ marked_message_internal (msg, mark_start, mark_end);
+}
+
+static void
+marked_message_internal (char *msg, int mark_start, int mark_end)
+{
rp_screen *s = current_screen ();
int num_lines;
int width;
@@ -500,9 +517,6 @@ marked_message (char *msg, int mark_start, int mark_end)
PRINT_DEBUG (("msg = %s\n", msg?msg:"NULL"));
PRINT_DEBUG (("mark_start = %d, mark_end = %d\n", mark_start, mark_end));
- /* Schedule the bar to be hidden after some amount of time. */
- reset_alarm ();
-
/* Calculate the width and height of the window. */
num_lines = count_lines (msg, strlen(msg));
width = defaults.bar_x_padding * 2 + max_line_length(msg);
@@ -520,8 +534,10 @@ marked_message (char *msg, int mark_start, int mark_end)
update_last_message (msg, mark_start, mark_end);
}
+/* Use this just to update the bar. show_last_message will draw it and
+ leave it up for a period of time. */
void
-show_last_message (void)
+redraw_last_message (void)
{
char *msg;
@@ -532,10 +548,17 @@ show_last_message (void)
marked_message's msg arg would have been the same as
last_msg. */
msg = xstrdup (last_msg);
- marked_message (msg, last_mark_start, last_mark_end);
+ marked_message_internal (msg, last_mark_start, last_mark_end);
free (msg);
}
+void
+show_last_message (void)
+{
+ redraw_last_message();
+ reset_alarm();
+}
+
/* Free any memory associated with the bar. */
void
free_bar (void)