all repos — openbox @ 00f6dea058927ce2045676cd3bd85de3c0533a87

openbox fork - make it a bit more like ryudo

keep menus taller than the screen from jittering. also keep the half of the menu you're in visible. more precision would be nicer but meh for now (ever) i guess.
Dana Jansens danakj@orodu.net
commit

00f6dea058927ce2045676cd3bd85de3c0533a87

parent

32c3e07fed42e040591640dbb611d9cbb37feeed

1 files changed, 18 insertions(+), 4 deletions(-)

jump to
M openbox/menuframe.copenbox/menuframe.c

@@ -169,6 +169,7 @@ {

Rect *a; guint i; gint dx = 0, dy = 0; + gint pos, half; for (i = 0; i < screen_num_monitors; ++i) { a = screen_physical_area_monitor(i);

@@ -177,10 +178,23 @@ break;

} if (!a) a = screen_physical_area_monitor(0); - dx = MIN(0, (a->x + a->width) - (self->area.x + self->area.width)); - dy = MIN(0, (a->y + a->height) - (self->area.y + self->area.height)); - if (!dx) dx = MAX(0, a->x - self->area.x); - if (!dy) dy = MAX(0, a->y - self->area.y); + half = g_list_length(self->entries) / 2; + pos = g_list_index(self->entries, self->selected); + + /* if in the bottom half then check this shit first, will keep the bottom + edge of the menu visible */ + if (pos > half) { + dx = MAX(dx, a->x - self->area.x); + dy = MAX(dy, a->y - self->area.y); + } + dx = MIN(dx, (a->x + a->width) - (self->area.x + self->area.width)); + dy = MIN(dy, (a->y + a->height) - (self->area.y + self->area.height)); + /* if in the top half then check this shit last, will keep the top + edge of the menu visible */ + if (pos <= half) { + dx = MAX(dx, a->x - self->area.x); + dy = MAX(dy, a->y - self->area.y); + } if (dx || dy) { ObMenuFrame *f;