aboutsummaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2011-06-23 19:21:26 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2011-06-23 19:21:26 +0000
commitfa0f10d77aa9506285ced61f4ae93728b2f8cb0e (patch)
tree7a543309ba353fd64a10a580dee9768632f8f0ef /window.c
parentddade84e0a405c8013473e0b1fc18da795f5cc99 (diff)
downloadrtmux-fa0f10d77aa9506285ced61f4ae93728b2f8cb0e.tar.gz
rtmux-fa0f10d77aa9506285ced61f4ae93728b2f8cb0e.tar.bz2
rtmux-fa0f10d77aa9506285ced61f4ae93728b2f8cb0e.zip
PatchSet 923
Date: 2011/06/05 11:53:05 Author: nicm Branch: HEAD Tag: (none) Log: Get rid of the layout string code which tries to walk through the layout hierarchy and instead just look at what panes are actually in the window.
Diffstat (limited to 'window.c')
-rw-r--r--window.c60
1 files changed, 52 insertions, 8 deletions
diff --git a/window.c b/window.c
index e1e30741..4b5f9016 100644
--- a/window.c
+++ b/window.c
@@ -1,4 +1,4 @@
-/* $Id: window.c,v 1.147 2011-04-18 22:03:55 nicm Exp $ */
+/* $Id$ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -353,21 +353,65 @@ window_set_active_pane(struct window *w, struct window_pane *wp)
}
}
-void
-window_set_active_at(struct window *w, u_int x, u_int y)
+struct window_pane *
+window_get_active_at(struct window *w, u_int x, u_int y)
{
struct window_pane *wp;
TAILQ_FOREACH(wp, &w->panes, entry) {
- if (wp == w->active || !window_pane_visible(wp))
+ if (!window_pane_visible(wp))
continue;
- if (x < wp->xoff || x >= wp->xoff + wp->sx)
+ if (x < wp->xoff || x > wp->xoff + wp->sx)
continue;
- if (y < wp->yoff || y >= wp->yoff + wp->sy)
+ if (y < wp->yoff || y > wp->yoff + wp->sy)
continue;
- window_set_active_pane(w, wp);
- break;
+ return (wp);
}
+ return (NULL);
+}
+
+void
+window_set_active_at(struct window *w, u_int x, u_int y)
+{
+ struct window_pane *wp;
+
+ wp = window_get_active_at(w, x, y);
+ if (wp != NULL && wp != w->active)
+ window_set_active_pane(w, wp);
+}
+
+struct window_pane *
+window_find_string(struct window *w, const char *s)
+{
+ u_int x, y;
+
+ x = w->sx / 2;
+ y = w->sy / 2;
+
+ if (strcasecmp(s, "top") == 0)
+ y = 0;
+ else if (strcasecmp(s, "bottom") == 0)
+ y = w->sy - 1;
+ else if (strcasecmp(s, "left") == 0)
+ x = 0;
+ else if (strcasecmp(s, "right") == 0)
+ x = w->sx - 1;
+ else if (strcasecmp(s, "top-left") == 0) {
+ x = 0;
+ y = 0;
+ } else if (strcasecmp(s, "top-right") == 0) {
+ x = w->sx - 1;
+ y = 0;
+ } else if (strcasecmp(s, "bottom-left") == 0) {
+ x = 0;
+ y = w->sy - 1;
+ } else if (strcasecmp(s, "bottom-right") == 0) {
+ x = w->sx - 1;
+ y = w->sy - 1;
+ } else
+ return (NULL);
+
+ return (window_get_active_at(w, x, y));
}
struct window_pane *