diff --git a/src/core/frame.c b/src/core/frame.c index 694a870d3..3d6e7ab78 100644 --- a/src/core/frame.c +++ b/src/core/frame.c @@ -440,6 +440,34 @@ meta_frame_get_xwindow (MetaFrame *frame) return frame->xwindow; } +static void +send_configure_notify (MetaFrame *frame) +{ + MetaX11Display *x11_display = frame->window->display->x11_display; + XEvent event = { 0 }; + + /* We never get told by the frames client, just reassert the + * current frame size. + */ + event.type = ConfigureNotify; + event.xconfigure.display = x11_display->xdisplay; + event.xconfigure.event = frame->xwindow; + event.xconfigure.window = frame->xwindow; + event.xconfigure.x = frame->rect.x; + event.xconfigure.y = frame->rect.y; + event.xconfigure.width = frame->rect.width; + event.xconfigure.height = frame->rect.height; + event.xconfigure.border_width = 0; + event.xconfigure.above = None; + event.xconfigure.override_redirect = False; + + meta_x11_error_trap_push (x11_display); + XSendEvent (x11_display->xdisplay, + frame->xwindow, + False, StructureNotifyMask, &event); + meta_x11_error_trap_pop (x11_display); +} + gboolean meta_frame_handle_xevent (MetaFrame *frame, XEvent *xevent) @@ -465,6 +493,12 @@ meta_frame_handle_xevent (MetaFrame *frame, xevent->xproperty.atom, FALSE); return TRUE; } + else if (xevent->xany.type == ConfigureRequest && + xevent->xconfigurerequest.window == frame->xwindow) + { + send_configure_notify (frame); + return TRUE; + } return FALSE; } diff --git a/src/x11/events.c b/src/x11/events.c index d65ea08a6..5e749deed 100644 --- a/src/x11/events.c +++ b/src/x11/events.c @@ -1601,6 +1601,10 @@ handle_other_xevent (MetaX11Display *x11_display, { meta_window_x11_configure_request (window, event); } + else if (frame_was_receiver && window->frame) + { + meta_frame_handle_xevent (window->frame, event); + } break; case GravityNotify: break;