make submenus open in the same direction as the top level menu
This commit is contained in:
parent
10df03b957
commit
cb030c6f3a
1 changed files with 8 additions and 0 deletions
|
@ -221,15 +221,18 @@ static void menu_frame_place_topmenu(ObMenuFrame *self, gint *x, gint *y)
|
||||||
|
|
||||||
/* try to the right of the cursor */
|
/* try to the right of the cursor */
|
||||||
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
|
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
|
||||||
|
self->direction_right = TRUE;
|
||||||
if (dx != 0) {
|
if (dx != 0) {
|
||||||
/* try to the left of the cursor */
|
/* try to the left of the cursor */
|
||||||
myx = *x - self->area.width;
|
myx = *x - self->area.width;
|
||||||
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
|
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
|
||||||
|
self->direction_right = FALSE;
|
||||||
}
|
}
|
||||||
if (dx != 0) {
|
if (dx != 0) {
|
||||||
/* if didnt fit on either side so just use what it says */
|
/* if didnt fit on either side so just use what it says */
|
||||||
myx = *x;
|
myx = *x;
|
||||||
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
|
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
|
||||||
|
self->direction_right = TRUE;
|
||||||
}
|
}
|
||||||
*x = myx + dx;
|
*x = myx + dx;
|
||||||
*y += dy;
|
*y += dy;
|
||||||
|
@ -241,29 +244,34 @@ static void menu_frame_place_topmenu(ObMenuFrame *self, gint *x, gint *y)
|
||||||
|
|
||||||
/* try to the bottom right of the cursor */
|
/* try to the bottom right of the cursor */
|
||||||
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
|
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
|
||||||
|
self->direction_right = TRUE;
|
||||||
if (dx != 0 || dy != 0) {
|
if (dx != 0 || dy != 0) {
|
||||||
/* try to the bottom left of the cursor */
|
/* try to the bottom left of the cursor */
|
||||||
myx = *x - self->area.width;
|
myx = *x - self->area.width;
|
||||||
myy = *y;
|
myy = *y;
|
||||||
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
|
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
|
||||||
|
self->direction_right = FALSE;
|
||||||
}
|
}
|
||||||
if (dx != 0 || dy != 0) {
|
if (dx != 0 || dy != 0) {
|
||||||
/* try to the top right of the cursor */
|
/* try to the top right of the cursor */
|
||||||
myx = *x;
|
myx = *x;
|
||||||
myy = *y - self->area.height;
|
myy = *y - self->area.height;
|
||||||
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
|
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
|
||||||
|
self->direction_right = TRUE;
|
||||||
}
|
}
|
||||||
if (dx != 0 || dy != 0) {
|
if (dx != 0 || dy != 0) {
|
||||||
/* try to the top left of the cursor */
|
/* try to the top left of the cursor */
|
||||||
myx = *x - self->area.width;
|
myx = *x - self->area.width;
|
||||||
myy = *y - self->area.height;
|
myy = *y - self->area.height;
|
||||||
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
|
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
|
||||||
|
self->direction_right = FALSE;
|
||||||
}
|
}
|
||||||
if (dx != 0 || dy != 0) {
|
if (dx != 0 || dy != 0) {
|
||||||
/* if didnt fit on either side so just use what it says */
|
/* if didnt fit on either side so just use what it says */
|
||||||
myx = *x;
|
myx = *x;
|
||||||
myy = *y;
|
myy = *y;
|
||||||
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
|
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
|
||||||
|
self->direction_right = TRUE;
|
||||||
}
|
}
|
||||||
*x = myx + dx;
|
*x = myx + dx;
|
||||||
*y = myy + dy;
|
*y = myy + dy;
|
||||||
|
|
Loading…
Reference in a new issue