summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl_Window.cxx12
-rw-r--r--src/Fl_Window_fullscreen.cxx13
-rw-r--r--src/Fl_cocoa.mm7
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx2
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx3
5 files changed, 24 insertions, 13 deletions
diff --git a/src/Fl_Window.cxx b/src/Fl_Window.cxx
index 6ded79b01..c0dad7e37 100644
--- a/src/Fl_Window.cxx
+++ b/src/Fl_Window.cxx
@@ -954,13 +954,14 @@ fl_uintptr_t Fl_Window::os_id() { return pWindowDriver->os_id();}
This function is effective only with a show()'n, resizable, top-level window.
Bordered and borderless windows can be used.
+ Fullscreen windows can't be used.
\see Fl_Window::un_maximize(), Fl_Window::maximize_active()
*/
void Fl_Window::maximize() {
- if (!shown() || parent() || !is_resizable() || maximize_active()) return;
+ if (!shown() || parent() || !is_resizable() || maximize_active() || fullscreen_active())
+ return;
set_flag(MAXIMIZED);
- if (border()) pWindowDriver->maximize();
- else pWindowDriver->Fl_Window_Driver::maximize();
+ pWindowDriver->maximize();
}
/**
@@ -968,10 +969,9 @@ void Fl_Window::maximize() {
\see Fl_Window::maximize()
*/
void Fl_Window::un_maximize() {
- if (!shown() || parent() || !is_resizable() || !maximize_active()) return;
+ if (!shown() || parent() || !is_resizable() || !maximize_active() || fullscreen_active()) return;
clear_flag(MAXIMIZED);
- if (border()) pWindowDriver->un_maximize();
- else pWindowDriver->Fl_Window_Driver::un_maximize();
+ pWindowDriver->un_maximize();
}
void Fl_Window::is_maximized_(bool b) {
diff --git a/src/Fl_Window_fullscreen.cxx b/src/Fl_Window_fullscreen.cxx
index f6919f87c..e464a9fba 100644
--- a/src/Fl_Window_fullscreen.cxx
+++ b/src/Fl_Window_fullscreen.cxx
@@ -37,10 +37,12 @@ void Fl_Window::border(int b) {
*/
void Fl_Window::fullscreen() {
if (!is_resizable()) return;
- no_fullscreen_x = x();
- no_fullscreen_y = y();
- no_fullscreen_w = w();
- no_fullscreen_h = h();
+ if (!maximize_active()) {
+ no_fullscreen_x = x();
+ no_fullscreen_y = y();
+ no_fullscreen_w = w();
+ no_fullscreen_h = h();
+ }
if (shown() && !(flags() & Fl_Widget::FULLSCREEN)) {
pWindowDriver->fullscreen_on();
} else {
@@ -54,7 +56,8 @@ void Fl_Window::fullscreen_off(int X,int Y,int W,int H) {
} else {
clear_flag(FULLSCREEN);
}
- no_fullscreen_x = no_fullscreen_y = no_fullscreen_w = no_fullscreen_h = 0;
+ if (!maximize_active())
+ no_fullscreen_x = no_fullscreen_y = no_fullscreen_w = no_fullscreen_h = 0;
}
void Fl_Window::fullscreen_off() {
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm
index e7e3c8a50..285b3d469 100644
--- a/src/Fl_cocoa.mm
+++ b/src/Fl_cocoa.mm
@@ -3328,12 +3328,14 @@ void Fl_Cocoa_Window_Driver::fullscreen_on() {
void Fl_Cocoa_Window_Driver::maximize() {
- [fl_xid(pWindow) performZoom:nil];
+ if (border()) [fl_xid(pWindow) performZoom:nil];
+ else Fl_Window_Driver::maximize();
}
void Fl_Cocoa_Window_Driver::un_maximize() {
- [fl_xid(pWindow) performZoom:nil];
+ if (border()) [fl_xid(pWindow) performZoom:nil];
+ else Fl_Window_Driver::un_maximize();
}
@@ -3387,6 +3389,7 @@ void Fl_Cocoa_Window_Driver::fullscreen_off(int X, int Y, int W, int H) {
[nswin setStyleMask:calc_win_style(pWindow)]; //10.6
restore_window_title_and_icon(pWindow, icon_image);
pWindow->resize(X, Y, W, H);
+ if (pWindow->maximize_active()) Fl_Window_Driver::maximize();
if (has_focus) [nswin makeKeyAndOrderFront:nil];
else [nswin orderFront:nil];
} else
diff --git a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
index 46df38e6b..79d26a03b 100644
--- a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
@@ -2175,10 +2175,12 @@ Fl_Wayland_Plugin *Fl_Wayland_Window_Driver::gl_plugin() {
void Fl_Wayland_Window_Driver::maximize() {
struct wld_window *xid = (struct wld_window *)Fl_X::flx(pWindow)->xid;
if (xid->kind == DECORATED) libdecor_frame_set_maximized(xid->frame);
+ else Fl_Window_Driver::maximize();
}
void Fl_Wayland_Window_Driver::un_maximize() {
struct wld_window *xid = (struct wld_window *)Fl_X::flx(pWindow)->xid;
if (xid->kind == DECORATED) libdecor_frame_unset_maximized(xid->frame);
+ else Fl_Window_Driver::un_maximize();
}
diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
index f6ad0bcad..b930719a6 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
@@ -610,6 +610,7 @@ void Fl_WinAPI_Window_Driver::fullscreen_off(int X, int Y, int W, int H) {
scaledW += bx*2;
scaledH += by*2+bt;
SetWindowLong(fl_xid(pWindow), GWL_STYLE, style);
+ if (pWindow->maximize_active()) return this->maximize();
SetWindowPos(fl_xid(pWindow), 0, scaledX, scaledY, scaledW, scaledH,
SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED);
Fl::handle(FL_FULLSCREEN, pWindow);
@@ -617,10 +618,12 @@ void Fl_WinAPI_Window_Driver::fullscreen_off(int X, int Y, int W, int H) {
void Fl_WinAPI_Window_Driver::maximize() {
+ if (!border()) return Fl_Window_Driver::maximize();
ShowWindow(fl_xid(pWindow), SW_SHOWMAXIMIZED);
}
void Fl_WinAPI_Window_Driver::un_maximize() {
+ if (!border()) return Fl_Window_Driver::un_maximize();
ShowWindow(fl_xid(pWindow), SW_SHOWNORMAL);
}