From f4f93fda159abf83937eece89ac574eff772a507 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Mon, 10 Mar 2025 10:14:58 +0100 Subject: Fix handling of menu widnows taller than their screen A problem was visible with the menubar test app and a 2-screen system where screens are one above the other. When moving down the huge menu, it became positioned on the wrong screen. --- src/Fl_Menu.cxx | 2 +- src/Fl_Window_Driver.cxx | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Fl_Menu.cxx b/src/Fl_Menu.cxx index b85323ed2..500b20a5c 100644 --- a/src/Fl_Menu.cxx +++ b/src/Fl_Menu.cxx @@ -492,7 +492,7 @@ void menuwindow::autoscroll(int n) { int Y = y()+Fl::box_dx(box())+2+n*itemheight; int xx, ww; - Fl_Window_Driver::driver(this)->menu_window_area(xx, scr_y, ww, scr_h); + Fl_Window_Driver::driver(this)->menu_window_area(xx, scr_y, ww, scr_h, this->screen_num()); if (n==0 && Y <= scr_y + itemheight) { Y = scr_y - Y + 10; } else if (Y <= scr_y + itemheight) { diff --git a/src/Fl_Window_Driver.cxx b/src/Fl_Window_Driver.cxx index f0fc76a89..ccf5f1a07 100644 --- a/src/Fl_Window_Driver.cxx +++ b/src/Fl_Window_Driver.cxx @@ -239,7 +239,13 @@ void Fl_Window_Driver::resize_after_scale_change(int ns, float old_f, float new_ } void Fl_Window_Driver::reposition_menu_window(int x, int y) { - if (y != pWindow->y() || x != pWindow->x()) pWindow->Fl_Widget::position(x, y); + if (y != pWindow->y() || x != pWindow->x()) { + int ns = pWindow->screen_num(); + pWindow->Fl_Widget::position(x, y); + Fl::check(); + // the window move may erroneously change the window's screen number; reset it + if (pWindow->screen_num() != ns) screen_num(ns); + } } void Fl_Window_Driver::menu_window_area(int &X, int &Y, int &W, int &H, int nscreen) { -- cgit v1.2.3