mirror of
https://github.com/edubart/otclient.git
synced 2025-12-18 06:37:12 +01:00
save window position and size
This commit is contained in:
@@ -31,3 +31,11 @@ X11Window window;
|
||||
#endif
|
||||
|
||||
PlatformWindow& g_window = window;
|
||||
|
||||
void PlatformWindow::updateUnmaximizedCoords()
|
||||
{
|
||||
if(!isMaximized()) {
|
||||
m_unmaximizedPos = m_pos;
|
||||
m_unmaximizedSize = m_size;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,9 +59,11 @@ public:
|
||||
int getDisplayWidth() { return getDisplaySize().width(); }
|
||||
int getDisplayHeight() { return getDisplaySize().width(); }
|
||||
|
||||
Size getUnmaximizedSize() { return m_unmaximizedSize; }
|
||||
Size getSize() { return m_size; }
|
||||
int getWidth() { return m_size.width(); }
|
||||
int getHeight() { return m_size.height(); }
|
||||
Point getUnmaximizedPos() { return m_unmaximizedPos; }
|
||||
Point getPos() { return m_pos; }
|
||||
int getX() { return m_pos.x; }
|
||||
int getY() { return m_pos.y; }
|
||||
@@ -70,6 +72,7 @@ public:
|
||||
|
||||
bool isVisible() { return m_visible; }
|
||||
bool isFullscreen() { return m_fullscreen; }
|
||||
virtual bool isMaximized() = 0;
|
||||
bool hasFocus() { return m_focused; }
|
||||
|
||||
void setOnClose(const SimpleCallback& onClose) { m_onClose = onClose; }
|
||||
@@ -77,8 +80,12 @@ public:
|
||||
void setOnInputEvent(const OnInputEventCallback& onInputEvent) { m_onInputEvent = onInputEvent; }
|
||||
|
||||
protected:
|
||||
void updateUnmaximizedCoords();
|
||||
|
||||
Size m_size;
|
||||
Point m_pos;
|
||||
Size m_unmaximizedSize;
|
||||
Point m_unmaximizedPos;
|
||||
InputEvent m_inputEvent;
|
||||
|
||||
Boolean<false> m_created;
|
||||
|
||||
@@ -354,6 +354,7 @@ void WIN32Window::resize(const Size& size)
|
||||
|
||||
void WIN32Window::show()
|
||||
{
|
||||
updateUnmaximizedCoords();
|
||||
if(m_maximized)
|
||||
ShowWindow(m_window, SW_MAXIMIZE);
|
||||
else
|
||||
@@ -472,6 +473,7 @@ LRESULT WIN32Window::windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||
case WM_MOVE: {
|
||||
m_pos.x = LOWORD(lParam);
|
||||
m_pos.y = HIWORD(lParam);
|
||||
updateUnmaximizedCoords();
|
||||
break;
|
||||
}
|
||||
case WM_SIZE: {
|
||||
@@ -487,6 +489,7 @@ LRESULT WIN32Window::windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||
m_visible = !(wParam == SIZE_MINIMIZED);
|
||||
m_size.setWidth(LOWORD(lParam));
|
||||
m_size.setHeight(HIWORD(lParam));
|
||||
updateUnmaximizedCoords();
|
||||
m_onResize(m_size);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -278,6 +278,7 @@ void X11Window::internalCreateWindow()
|
||||
vis = CopyFromParent;
|
||||
}
|
||||
|
||||
updateUnmaximizedCoords();
|
||||
m_window = XCreateWindow(m_display, m_rootWindow,
|
||||
m_pos.x, m_pos.y, m_size.width(), m_size.height(),
|
||||
0,
|
||||
@@ -494,6 +495,8 @@ void X11Window::hide()
|
||||
|
||||
void X11Window::maximize()
|
||||
{
|
||||
updateUnmaximizedCoords();
|
||||
|
||||
Atom wmState = XInternAtom(m_display, "_NET_WM_STATE", False);
|
||||
Atom wmStateMaximizedVert = XInternAtom(m_display, "_NET_WM_STATE_MAXIMIZED_VERT", False);
|
||||
Atom wmStateMaximizedHorz = XInternAtom(m_display, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
|
||||
@@ -561,6 +564,7 @@ void X11Window::poll()
|
||||
|
||||
// updates window pos
|
||||
m_pos = newPos;
|
||||
updateUnmaximizedCoords();
|
||||
break;
|
||||
}
|
||||
case SelectionRequest: {
|
||||
@@ -916,6 +920,9 @@ std::string X11Window::getPlatformType()
|
||||
|
||||
bool X11Window::isMaximized()
|
||||
{
|
||||
if(!m_display || !m_window)
|
||||
return false;
|
||||
|
||||
Atom wmState = XInternAtom(m_display, "_NET_WM_STATE", False);
|
||||
Atom wmStateMaximizedVert = XInternAtom(m_display, "_NET_WM_STATE_MAXIMIZED_VERT", False);
|
||||
Atom wmStateMaximizedHorz = XInternAtom(m_display, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
|
||||
@@ -940,7 +947,7 @@ bool X11Window::isMaximized()
|
||||
}
|
||||
|
||||
if(maximizedMask == 3)
|
||||
maximizedMask = true;
|
||||
maximized = true;
|
||||
|
||||
XFree(propertyValue);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user