summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl_Menu.cxx2
-rw-r--r--src/Fl_Window_Driver.cxx8
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) {