aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-04-07 17:54:12 +0200
committerMarc André Tanner <mat@brain-dump.org>2016-04-08 12:28:59 +0200
commitdf84a1c16844c0eaebe12dd0e606d5b2c478c478 (patch)
tree63b46b172a8d1153a559b232db49d03f5eb132b4
parenta2abb7d9c8df32f65f907452f292784d569e8e88 (diff)
downloadvis-df84a1c16844c0eaebe12dd0e606d5b2c478c478.tar.gz
vis-df84a1c16844c0eaebe12dd0e606d5b2c478c478.tar.xz
vis: cleanup window focusing code
-rw-r--r--vis.c21
-rw-r--r--vis.h2
2 files changed, 15 insertions, 8 deletions
diff --git a/vis.c b/vis.c
index d2d0c2f..e1f14ff 100644
--- a/vis.c
+++ b/vis.c
@@ -226,24 +226,29 @@ bool vis_window_split(Win *original) {
return true;
}
+void vis_window_focus(Win *win) {
+ if (!win)
+ return;
+ Vis *vis = win->vis;
+ vis->win = win;
+ vis->ui->window_focus(win->ui);
+}
+
void vis_window_next(Vis *vis) {
Win *sel = vis->win;
if (!sel)
return;
- vis->win = vis->win->next;
- if (!vis->win)
- vis->win = vis->windows;
- vis->ui->window_focus(vis->win->ui);
+ vis_window_focus(sel->next ? sel->next : vis->windows);
}
void vis_window_prev(Vis *vis) {
Win *sel = vis->win;
if (!sel)
return;
- vis->win = vis->win->prev;
- if (!vis->win)
- for (vis->win = vis->windows; vis->win->next; vis->win = vis->win->next);
- vis->ui->window_focus(vis->win->ui);
+ sel = sel->prev;
+ if (!sel)
+ for (sel = vis->windows; sel->next; sel = sel->next);
+ vis_window_focus(sel);
}
void vis_draw(Vis *vis) {
diff --git a/vis.h b/vis.h
index c038de1..d0486cc 100644
--- a/vis.h
+++ b/vis.h
@@ -81,6 +81,8 @@ void vis_window_name(Win*, const char *filename);
/* focus the next / previous window */
void vis_window_next(Vis*);
void vis_window_prev(Vis*);
+/* change currently focused window, receiving user input */
+void vis_window_focus(Win*);
/* display a user prompt with a certain title and default text */
void vis_prompt_show(Vis*, const char *title);