summaryrefslogtreecommitdiff
path: root/src/bar.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bar.c')
-rw-r--r--src/bar.c60
1 files changed, 59 insertions, 1 deletions
diff --git a/src/bar.c b/src/bar.c
index 25d9a46..d9982c2 100644
--- a/src/bar.c
+++ b/src/bar.c
@@ -40,7 +40,8 @@
/* Possible values for bar_is_raised status. */
#define BAR_IS_HIDDEN 0
#define BAR_IS_WINDOW_LIST 1
-#define BAR_IS_MESSAGE 2
+#define BAR_IS_GROUP_LIST 2
+#define BAR_IS_MESSAGE 3
/* A copy of the last message displayed in the message bar. */
static char *last_msg = NULL;
@@ -104,6 +105,31 @@ show_bar (rp_screen *s, char *fmt)
return 0;
}
+/* Show group listing in bar. */
+int
+show_group_bar (rp_screen *s)
+{
+ if (!s->bar_is_raised)
+ {
+ s->bar_is_raised = BAR_IS_GROUP_LIST;
+ XMapRaised (dpy, s->bar_window);
+ update_group_names (s);
+
+ /* Switch to the default colormap */
+ if (current_window())
+ XUninstallColormap (dpy, current_window()->colormap);
+ XInstallColormap (dpy, s->def_cmap);
+
+ reset_alarm();
+ return 1;
+ }
+
+ /* If the bar is raised we still need to display the window
+ names. */
+ update_group_names (s);
+ return 0;
+}
+
int
bar_x (rp_screen *s, int width)
{
@@ -172,6 +198,11 @@ update_bar (rp_screen *s)
return;
}
+ if (s->bar_is_raised == BAR_IS_GROUP_LIST) {
+ update_group_names (s);
+ return;
+ }
+
if (s->bar_is_raised == BAR_IS_HIDDEN)
return;
@@ -207,6 +238,33 @@ update_window_names (rp_screen *s, char *fmt)
sbuf_free (bar_buffer);
}
+/* Note that we use marked_message_internal to avoid resetting the
+ alarm. */
+void
+update_group_names (rp_screen *s)
+{
+ struct sbuf *bar_buffer;
+ int mark_start = 0;
+ int mark_end = 0;
+
+ if (s->bar_is_raised != BAR_IS_GROUP_LIST) return;
+
+ bar_buffer = sbuf_new (0);
+
+ if (defaults.window_list_style == STYLE_ROW)
+ {
+ get_group_list (NULL, bar_buffer, &mark_start, &mark_end);
+ marked_message_internal (sbuf_get (bar_buffer), mark_start, mark_end);
+ }
+ else
+ {
+ get_group_list ("\n", bar_buffer, &mark_start, &mark_end);
+ marked_message_internal (sbuf_get (bar_buffer), mark_start, mark_end);
+ }
+
+ sbuf_free (bar_buffer);
+}
+
void
message (char *s)
{