Skip to content

Commit

Permalink
Merge pull request #76040 from MightiestGoat/fix-sliding-window-linux…
Browse files Browse the repository at this point in the history
…-via-tracking-parent

Fix the sliding window problem in linux occur due to reparenting of the window due to decoration.
  • Loading branch information
YuriSizov authored Apr 14, 2023
2 parents 4dcf2c5 + 932afc3 commit f5f796b
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
10 changes: 10 additions & 0 deletions platform/linuxbsd/x11/display_server_x11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3505,6 +3505,15 @@ void DisplayServerX11::_window_changed(XEvent *event) {
wd.minimized = _window_minimize_check(window_id);
wd.maximized = _window_maximize_check(window_id, "_NET_WM_STATE");

// Readjusting the window position if the window is being reparented by the window manager for decoration
Window root, parent, *children;
unsigned int nchildren;
if (XQueryTree(x11_display, wd.x11_window, &root, &parent, &children, &nchildren) && wd.parent != parent) {
wd.parent = parent;
window_set_position(wd.position, window_id);
}
XFree(children);

{
//the position in xconfigure is not useful here, obtain it manually
int x = 0, y = 0;
Expand Down Expand Up @@ -4989,6 +4998,7 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, V
{
wd.x11_window = XCreateWindow(x11_display, RootWindow(x11_display, visualInfo.screen), win_rect.position.x, win_rect.position.y, win_rect.size.width > 0 ? win_rect.size.width : 1, win_rect.size.height > 0 ? win_rect.size.height : 1, 0, visualInfo.depth, InputOutput, visualInfo.visual, valuemask, &windowAttributes);

wd.parent = RootWindow(x11_display, visualInfo.screen);
XSetWindowAttributes window_attributes_ime = {};
window_attributes_ime.event_mask = KeyPressMask | KeyReleaseMask | StructureNotifyMask | ExposureMask;

Expand Down
1 change: 1 addition & 0 deletions platform/linuxbsd/x11/display_server_x11.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ class DisplayServerX11 : public DisplayServer {
struct WindowData {
Window x11_window;
Window x11_xim_window;
Window parent;
::XIC xic;
bool ime_active = false;
bool ime_in_progress = false;
Expand Down

0 comments on commit f5f796b

Please sign in to comment.