Bypass Mutter bug for menubar in fullscreen window (see #1061)

This commit is contained in:
ManoloFLTK 2024-09-14 15:08:03 +02:00
parent e7f1247552
commit 382d6b2fbd

View File

@ -1351,12 +1351,19 @@ bool Fl_Wayland_Window_Driver::process_menu_or_tooltip(struct wld_window *new_wi
xdg_positioner_set_anchor(positioner, XDG_POSITIONER_ANCHOR_BOTTOM_LEFT); xdg_positioner_set_anchor(positioner, XDG_POSITIONER_ANCHOR_BOTTOM_LEFT);
xdg_positioner_set_gravity(positioner, XDG_POSITIONER_GRAVITY_BOTTOM_RIGHT); xdg_positioner_set_gravity(positioner, XDG_POSITIONER_GRAVITY_BOTTOM_RIGHT);
// prevent menuwindow from expanding beyond display limits // prevent menuwindow from expanding beyond display limits
int constraint = XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_X | int constraint = 0;
XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_Y; if ( !(parent_win->fullscreen_active() &&
if (Fl_Window_Driver::menu_bartitle(pWindow) && !Fl_Window_Driver::menu_leftorigin(pWindow)) { Fl_Wayland_Screen_Driver::compositor == Fl_Wayland_Screen_Driver::MUTTER &&
constraint |= XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_Y; ((!Fl_Window_Driver::menu_title(pWindow) && !Fl_Window_Driver::menu_leftorigin(pWindow)) ||
Fl_Window_Driver::menu_bartitle(pWindow)))
) {
// Condition above is only to bypass Mutter bug for fullscreen windows (see #1061)
constraint |= (XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_X | XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_Y);
if (Fl_Window_Driver::menu_bartitle(pWindow) && !Fl_Window_Driver::menu_leftorigin(pWindow)) {
constraint |= XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_Y;
}
xdg_positioner_set_constraint_adjustment(positioner, constraint);
} }
xdg_positioner_set_constraint_adjustment(positioner, constraint);
if (!(Fl_Window_Driver::menu_title(pWindow) && Fl_Window_Driver::menu_bartitle(pWindow))) { if (!(Fl_Window_Driver::menu_title(pWindow) && Fl_Window_Driver::menu_bartitle(pWindow))) {
xdg_positioner_set_offset(positioner, 0, popup_y); xdg_positioner_set_offset(positioner, 0, popup_y);
} }