window: Remove the concept of surface_mapped
The implementation was just wrong. We now consider it an error to attach a NULL buffer to an xdg_surface. Users should destroy the surface properly.
This commit is contained in:
parent
941d202938
commit
7159d3bc35
@ -347,10 +347,6 @@ struct _MetaWindow
|
|||||||
/* whether or not the window is from a program running on another machine */
|
/* whether or not the window is from a program running on another machine */
|
||||||
guint is_remote : 1;
|
guint is_remote : 1;
|
||||||
|
|
||||||
/* Used for Wayland -- surfaces can behave as if they were unmapped if
|
|
||||||
* they have a NULL buffer attached... */
|
|
||||||
guint surface_mapped;
|
|
||||||
|
|
||||||
/* if non-NULL, the bounds of the window frame */
|
/* if non-NULL, the bounds of the window frame */
|
||||||
cairo_region_t *frame_bounds;
|
cairo_region_t *frame_bounds;
|
||||||
|
|
||||||
@ -672,9 +668,6 @@ void meta_window_handle_leave (MetaWindow *window);
|
|||||||
gboolean meta_window_handle_ungrabbed_event (MetaWindow *window,
|
gboolean meta_window_handle_ungrabbed_event (MetaWindow *window,
|
||||||
const ClutterEvent *event);
|
const ClutterEvent *event);
|
||||||
|
|
||||||
void meta_window_set_surface_mapped (MetaWindow *window,
|
|
||||||
gboolean surface_mapped);
|
|
||||||
|
|
||||||
void meta_window_get_client_area_rect (const MetaWindow *window,
|
void meta_window_get_client_area_rect (const MetaWindow *window,
|
||||||
cairo_rectangle_int_t *rect);
|
cairo_rectangle_int_t *rect);
|
||||||
void meta_window_get_titlebar_rect (MetaWindow *window,
|
void meta_window_get_titlebar_rect (MetaWindow *window,
|
||||||
|
@ -785,7 +785,6 @@ _meta_window_shared_new (MetaDisplay *display,
|
|||||||
window->client_type = client_type;
|
window->client_type = client_type;
|
||||||
window->surface = surface;
|
window->surface = surface;
|
||||||
window->xwindow = xwindow;
|
window->xwindow = xwindow;
|
||||||
window->surface_mapped = FALSE;
|
|
||||||
|
|
||||||
/* this is in window->screen->display, but that's too annoying to
|
/* this is in window->screen->display, but that's too annoying to
|
||||||
* type
|
* type
|
||||||
@ -1568,9 +1567,6 @@ meta_window_should_be_showing (MetaWindow *window)
|
|||||||
{
|
{
|
||||||
gboolean on_workspace;
|
gboolean on_workspace;
|
||||||
|
|
||||||
if (!window->surface_mapped)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
meta_verbose ("Should be showing for window %s\n", window->desc);
|
meta_verbose ("Should be showing for window %s\n", window->desc);
|
||||||
|
|
||||||
/* See if we're on the workspace */
|
/* See if we're on the workspace */
|
||||||
@ -7998,17 +7994,6 @@ meta_window_handle_ungrabbed_event (MetaWindow *window,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
meta_window_set_surface_mapped (MetaWindow *window,
|
|
||||||
gboolean surface_mapped)
|
|
||||||
{
|
|
||||||
if (window->surface_mapped == (guint) surface_mapped)
|
|
||||||
return;
|
|
||||||
|
|
||||||
window->surface_mapped = surface_mapped;
|
|
||||||
meta_window_queue (window, META_QUEUE_CALC_SHOWING);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_window_set_custom_frame_extents (MetaWindow *window,
|
meta_window_set_custom_frame_extents (MetaWindow *window,
|
||||||
GtkBorder *extents)
|
GtkBorder *extents)
|
||||||
|
@ -163,7 +163,7 @@ cursor_surface_commit (MetaWaylandSurface *surface,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
toplevel_surface_commit (MetaWaylandSurface *surface,
|
toplevel_surface_commit (MetaWaylandSurface *surface,
|
||||||
MetaWaylandPendingState *pending)
|
MetaWaylandPendingState *pending)
|
||||||
{
|
{
|
||||||
if (pending->frame_extents_changed)
|
if (pending->frame_extents_changed)
|
||||||
@ -174,9 +174,16 @@ toplevel_surface_commit (MetaWaylandSurface *surface,
|
|||||||
MetaWindow *window = surface->window;
|
MetaWindow *window = surface->window;
|
||||||
MetaWaylandBuffer *buffer = pending->buffer;
|
MetaWaylandBuffer *buffer = pending->buffer;
|
||||||
|
|
||||||
meta_window_set_surface_mapped (window, buffer != NULL);
|
if (buffer == NULL)
|
||||||
|
{
|
||||||
|
wl_resource_post_error (surface->resource,
|
||||||
|
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||||
|
"Cannot commit a NULL buffer to an xdg_surface");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* We resize X based surfaces according to X events */
|
/* We resize X based surfaces according to X events */
|
||||||
if (buffer != NULL && window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
|
if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
|
||||||
{
|
{
|
||||||
int new_width, new_height;
|
int new_width, new_height;
|
||||||
|
|
||||||
|
@ -2985,8 +2985,6 @@ meta_window_x11_new (MetaDisplay *display,
|
|||||||
meta_display_grab_focus_window_button (window->display, window);
|
meta_display_grab_focus_window_button (window->display, window);
|
||||||
}
|
}
|
||||||
|
|
||||||
meta_window_set_surface_mapped (window, TRUE);
|
|
||||||
|
|
||||||
meta_error_trap_pop (display); /* pop the XSync()-reducing trap */
|
meta_error_trap_pop (display); /* pop the XSync()-reducing trap */
|
||||||
return window;
|
return window;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user