/* try to the right of the cursor */
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
+ self->direction_right = TRUE;
if (dx != 0) {
/* try to the left of the cursor */
myx = *x - self->area.width;
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
+ self->direction_right = FALSE;
}
if (dx != 0) {
/* if didnt fit on either side so just use what it says */
myx = *x;
menu_frame_move_on_screen(self, myx, *y, &dx, &dy);
+ self->direction_right = TRUE;
}
*x = myx + dx;
*y += dy;
/* try to the bottom right of the cursor */
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
+ self->direction_right = TRUE;
if (dx != 0 || dy != 0) {
/* try to the bottom left of the cursor */
myx = *x - self->area.width;
myy = *y;
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
+ self->direction_right = FALSE;
}
if (dx != 0 || dy != 0) {
/* try to the top right of the cursor */
myx = *x;
myy = *y - self->area.height;
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
+ self->direction_right = TRUE;
}
if (dx != 0 || dy != 0) {
/* try to the top left of the cursor */
myx = *x - self->area.width;
myy = *y - self->area.height;
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
+ self->direction_right = FALSE;
}
if (dx != 0 || dy != 0) {
/* if didnt fit on either side so just use what it says */
myx = *x;
myy = *y;
menu_frame_move_on_screen(self, myx, myy, &dx, &dy);
+ self->direction_right = TRUE;
}
*x = myx + dx;
*y = myy + dy;
{
GList *it;
- if (menu_frame_visible == NULL) {
- /* no menus shown yet */
- if (!grab_pointer(TRUE, TRUE, OB_CURSOR_POINTER))
- return FALSE;
- if (!grab_keyboard(TRUE)) {
- grab_pointer(FALSE, TRUE, OB_CURSOR_POINTER);
- return FALSE;
- }
- }
-
/* determine if the underlying menu is already visible */
for (it = menu_frame_visible; it; it = g_list_next(it)) {
ObMenuFrame *f = it->data;
}
if (!it) {
if (self->menu->update_func)
- self->menu->update_func(self, self->menu->data);
+ if (!self->menu->update_func(self, self->menu->data))
+ return FALSE;
+ }
+
+ if (menu_frame_visible == NULL) {
+ /* no menus shown yet */
+ if (!grab_pointer(TRUE, TRUE, OB_CURSOR_POINTER))
+ return FALSE;
+ if (!grab_keyboard(TRUE)) {
+ grab_pointer(FALSE, TRUE, OB_CURSOR_POINTER);
+ return FALSE;
+ }
}
menu_frame_update(self);