diff options
author | Mathieu OTHACEHE <m.othacehe@gmail.com> | 2016-11-29 20:00:53 +0100 |
---|---|---|
committer | Jérémie Courrèges-Anglas <jca@wxcvbn.org> | 2016-12-01 22:07:14 +0100 |
commit | 97ffa32dbeec660aae323aacf2a19b2ad7d144e0 (patch) | |
tree | a0614cd0af85595fabd7effc84663b5ca9940257 /src/screen.c | |
parent | 565a004a183992418e6b64900044055dcd210d3a (diff) | |
download | ratpoison-97ffa32dbeec660aae323aacf2a19b2ad7d144e0.zip |
Add height dimension to screen sorting
Screen are only sorted according to their width offset from
origin ("left" in screen struct).
Also sort screen that share a same width offset according to their
height offset ("top" in screen struct).
Diffstat (limited to 'src/screen.c')
-rw-r--r-- | src/screen.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/screen.c b/src/screen.c index 3c49409..ddc03cb 100644 --- a/src/screen.c +++ b/src/screen.c @@ -198,15 +198,26 @@ screen_number (int number) } static int -screen_cmp_left (void *priv, struct list_head *a, struct list_head *b) +screen_cmp (void *priv, struct list_head *a, struct list_head *b) { rp_screen *sc_a = container_of (a, typeof(*sc_a), node); rp_screen *sc_b = container_of (b, typeof(*sc_b), node); if (sc_a->left < sc_b->left) - return -1; + { + return -1; + } else if (sc_a->left > sc_b->left) - return 1; + { + return 1; + } + else if (sc_a->left == sc_b->left) + { + if (sc_a->top < sc_b->top) + return -1; + else + return 1; + } return 0; } @@ -214,7 +225,7 @@ screen_cmp_left (void *priv, struct list_head *a, struct list_head *b) void screen_sort (void) { - return list_sort (NULL, &rp_screens, screen_cmp_left); + return list_sort (NULL, &rp_screens, screen_cmp); } static void |