summaryrefslogtreecommitdiffstats
path: root/window-tree.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2022-07-04 12:01:10 +0100
committerThomas Adam <thomas@xteddy.org>2022-07-04 12:01:10 +0100
commit57fec74966e39d8594fec9766609309879cb4f03 (patch)
tree260c39fe1cd8165fa5bf64238e48be78fc5397de /window-tree.c
parentf08c019d419d7deefce2e8ab699aad404895355a (diff)
parent9360e0ef329c12931bb97f42197a56776bb3d2f0 (diff)
Merge branch 'obsd-master'
Diffstat (limited to 'window-tree.c')
-rw-r--r--window-tree.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/window-tree.c b/window-tree.c
index d90bf817..1be47017 100644
--- a/window-tree.c
+++ b/window-tree.c
@@ -272,9 +272,10 @@ window_tree_cmp_window(const void *a0, const void *b0)
static int
window_tree_cmp_pane(const void *a0, const void *b0)
{
- const struct window_pane *const *a = a0;
- const struct window_pane *const *b = b0;
- int result;
+ struct window_pane **a = (struct window_pane **)a0;
+ struct window_pane **b = (struct window_pane **)b0;
+ int result;
+ u_int ai, bi;
if (window_tree_sort->field == WINDOW_TREE_BY_TIME)
result = (*a)->active_point - (*b)->active_point;
@@ -283,7 +284,9 @@ window_tree_cmp_pane(const void *a0, const void *b0)
* Panes don't have names, so use number order for any other
* sort field.
*/
- result = (*a)->id - (*b)->id;
+ window_pane_index(*a, &ai);
+ window_pane_index(*b, &bi);
+ result = ai - bi;
}
if (window_tree_sort->reversed)
result = -result;
@@ -1243,12 +1246,17 @@ window_tree_key(struct window_mode_entry *wme, struct client *c,
item = mode_tree_get_current(data->data);
finished = mode_tree_key(data->data, c, &key, m, &x, &y);
+
+again:
if (item != (new_item = mode_tree_get_current(data->data))) {
item = new_item;
data->offset = 0;
}
- if (KEYC_IS_MOUSE(key) && m != NULL)
+ if (KEYC_IS_MOUSE(key) && m != NULL) {
key = window_tree_mouse(data, key, x, item);
+ goto again;
+ }
+
switch (key) {
case '<':
data->offset--;