diff --git a/src/core/window-private.h b/src/core/window-private.h index 4a9f8ff5f..723be33b6 100644 --- a/src/core/window-private.h +++ b/src/core/window-private.h @@ -432,8 +432,6 @@ struct _MetaWindow /* Cached net_wm_icon_geometry */ MetaRectangle icon_geometry; - /* Requested geometry */ - int border_width; /* x/y/w/h here get filled with ConfigureRequest values */ XSizeHints size_hints; diff --git a/src/core/window.c b/src/core/window.c index 79853f5cb..bac4f0355 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -828,8 +828,7 @@ _meta_window_shared_new (MetaDisplay *display, window->rect.width = attrs->width; window->rect.height = attrs->height; - /* And border width, size_hints are the "request" */ - window->border_width = attrs->border_width; + /* size_hints are the "request" */ window->size_hints.x = attrs->x; window->size_hints.y = attrs->y; window->size_hints.width = attrs->width; diff --git a/src/x11/window-x11-private.h b/src/x11/window-x11-private.h index 9afbe8cf9..906231221 100644 --- a/src/x11/window-x11-private.h +++ b/src/x11/window-x11-private.h @@ -51,6 +51,9 @@ struct _MetaWindowX11Private Atom type_atom; + /* Requested geometry */ + int border_width; + MetaResizePopup *grab_resize_popup; }; diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c index 1fb93f624..c24e26e8c 100644 --- a/src/x11/window-x11.c +++ b/src/x11/window-x11.c @@ -200,6 +200,8 @@ update_sm_hints (MetaWindow *window) static void send_configure_notify (MetaWindow *window) { + MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); + MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); XEvent event; /* from twm */ @@ -208,8 +210,8 @@ send_configure_notify (MetaWindow *window) event.xconfigure.display = window->display->xdisplay; event.xconfigure.event = window->xwindow; event.xconfigure.window = window->xwindow; - event.xconfigure.x = window->rect.x - window->border_width; - event.xconfigure.y = window->rect.y - window->border_width; + event.xconfigure.x = window->rect.x - priv->border_width; + event.xconfigure.y = window->rect.y - priv->border_width; if (window->frame) { if (window->withdrawn) @@ -233,7 +235,7 @@ send_configure_notify (MetaWindow *window) } event.xconfigure.width = window->rect.width; event.xconfigure.height = window->rect.height; - event.xconfigure.border_width = window->border_width; /* requested not actual */ + event.xconfigure.border_width = priv->border_width; /* requested not actual */ event.xconfigure.above = None; /* FIXME */ event.xconfigure.override_redirect = False; @@ -256,6 +258,8 @@ adjust_for_gravity (MetaWindow *window, int gravity, MetaRectangle *rect) { + MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); + MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); int ref_x, ref_y; int bw; int child_x, child_y; @@ -263,7 +267,7 @@ adjust_for_gravity (MetaWindow *window, MetaFrameBorders borders; if (coords_assume_border) - bw = window->border_width; + bw = priv->border_width; else bw = 0; @@ -550,6 +554,9 @@ meta_window_x11_manage (MetaWindow *window) static void meta_window_x11_unmanage (MetaWindow *window) { + MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); + MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); + meta_error_trap_push (window->display); meta_window_x11_destroy_sync_request_alarm (window); @@ -593,10 +600,10 @@ meta_window_x11_unmanage (MetaWindow *window) meta_display_unregister_x_window (window->display, window->xwindow); /* Put back anything we messed up */ - if (window->border_width != 0) + if (priv->border_width != 0) XSetWindowBorderWidth (window->display->xdisplay, window->xwindow, - window->border_width); + priv->border_width); /* No save set */ XRemoveFromSaveSet (window->display->xdisplay, @@ -1157,7 +1164,7 @@ meta_window_x11_move_resize_internal (MetaWindow *window, if (is_configure_request && !(need_move_client || need_move_frame || need_resize_client || need_resize_frame || - window->border_width != 0)) + priv->border_width != 0)) need_configure_notify = TRUE; /* We must send configure notify if we move but don't resize, since @@ -1218,7 +1225,7 @@ meta_window_x11_move_resize_internal (MetaWindow *window, values.height = window->rect.height; mask = 0; - if (is_configure_request && window->border_width != 0) + if (is_configure_request && priv->border_width != 0) mask |= CWBorderWidth; /* must force to 0 */ if (need_move_client) mask |= (CWX | CWY); @@ -2126,6 +2133,9 @@ gboolean meta_window_x11_configure_request (MetaWindow *window, XEvent *event) { + MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); + MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); + /* Note that x, y is the corner of the window border, * and width, height is the size of the window inside * its border, but that we always deny border requests @@ -2133,7 +2143,7 @@ meta_window_x11_configure_request (MetaWindow *window, * requested border here. */ if (event->xconfigurerequest.value_mask & CWBorderWidth) - window->border_width = event->xconfigurerequest.border_width; + priv->border_width = event->xconfigurerequest.border_width; meta_window_move_resize_request(window, event->xconfigurerequest.value_mask, @@ -3069,6 +3079,11 @@ meta_window_x11_new (MetaDisplay *display, effect, &attrs); + MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); + MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); + + priv->border_width = attrs.border_width; + meta_window_grab_keys (window); if (window->type != META_WINDOW_DOCK && !window->override_redirect) {