window: Move surface property to it subclasses

As we have specific window types per display server,
having it in the parent class makes building without wayland
harder to achieve

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2418>
This commit is contained in:
Bilal Elmoussaoui
2022-05-18 13:51:44 +02:00
committed by Marge Bot
parent c3a01e4e18
commit 6b77532a23
13 changed files with 193 additions and 45 deletions

View File

@ -1437,8 +1437,11 @@ meta_display_sync_wayland_input_focus (MetaDisplay *display)
focus_window = NULL;
else if (clutter_stage_get_grab_actor (CLUTTER_STAGE (stage)))
focus_window = NULL;
else if (display->focus_window && display->focus_window->surface)
#ifdef HAVE_WAYLAND
else if (display->focus_window &&
meta_window_get_wayland_surface (display->focus_window))
focus_window = display->focus_window;
#endif
else
meta_topic (META_DEBUG_FOCUS, "Focus change has no effect, because there is no matching wayland surface");

View File

@ -170,7 +170,6 @@ struct _MetaWindow
MetaLogicalMonitor *monitor;
MetaWorkspace *workspace;
MetaWindowClientType client_type;
MetaWaylandSurface *surface;
Window xwindow;
/* may be NULL! not all windows get decorated */
MetaFrame *frame;
@ -619,6 +618,10 @@ struct _MetaWindowClass
MetaStackLayer (*calculate_layer) (MetaWindow *window);
#ifdef HAVE_WAYLAND
MetaWaylandSurface * (*get_wayland_surface) (MetaWindow *window);
#endif
void (* map) (MetaWindow *window);
void (* unmap) (MetaWindow *window);
};
@ -722,6 +725,11 @@ gboolean meta_window_can_ping (MetaWindow *window);
MetaStackLayer meta_window_calculate_layer (MetaWindow *window);
#ifdef HAVE_WAYLAND
META_EXPORT_TEST
MetaWaylandSurface * meta_window_get_wayland_surface (MetaWindow *window);
#endif
void meta_window_current_workspace_changed (MetaWindow *window);
void meta_window_show_menu (MetaWindow *window,

View File

@ -197,7 +197,6 @@ enum
PROP_IS_ALIVE,
PROP_DISPLAY,
PROP_EFFECT,
PROP_SURFACE,
PROP_XWINDOW,
PROP_LAST,
@ -418,9 +417,6 @@ meta_window_get_property(GObject *object,
case PROP_EFFECT:
g_value_set_int (value, win->pending_compositor_effect);
break;
case PROP_SURFACE:
g_value_set_pointer (value, win->surface);
break;
case PROP_XWINDOW:
g_value_set_ulong (value, win->xwindow);
break;
@ -446,9 +442,6 @@ meta_window_set_property(GObject *object,
case PROP_EFFECT:
win->pending_compositor_effect = g_value_get_int (value);
break;
case PROP_SURFACE:
win->surface = g_value_get_pointer (value);
break;
case PROP_XWINDOW:
win->xwindow = g_value_get_ulong (value);
break;
@ -834,9 +827,12 @@ static gboolean
client_window_should_be_mapped (MetaWindow *window)
{
#ifdef HAVE_WAYLAND
if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND &&
!meta_wayland_surface_get_buffer (window->surface))
return FALSE;
if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
{
MetaWaylandSurface *surface = meta_window_get_wayland_surface (window);
if (!meta_wayland_surface_get_buffer (surface))
return FALSE;
}
#endif
return !window->shaded;
@ -1683,9 +1679,12 @@ meta_window_should_be_showing (MetaWindow *window)
MetaWorkspaceManager *workspace_manager = window->display->workspace_manager;
#ifdef HAVE_WAYLAND
if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND &&
!meta_wayland_surface_get_buffer (window->surface))
return FALSE;
if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
{
MetaWaylandSurface *surface = meta_window_get_wayland_surface (window);
if (!meta_wayland_surface_get_buffer (surface))
return FALSE;
}
#endif
/* Windows should be showing if they're located on the
@ -4503,7 +4502,10 @@ meta_window_transient_can_focus (MetaWindow *window)
{
#ifdef HAVE_WAYLAND
if (window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
return meta_wayland_surface_get_buffer (window->surface) != NULL;
{
MetaWaylandSurface *surface = meta_window_get_wayland_surface (window);
return meta_wayland_surface_get_buffer (surface) != NULL;
}
#endif
return TRUE;
@ -8526,6 +8528,17 @@ meta_window_calculate_layer (MetaWindow *window)
return META_WINDOW_GET_CLASS (window)->calculate_layer (window);
}
#ifdef HAVE_WAYLAND
MetaWaylandSurface *
meta_window_get_wayland_surface (MetaWindow *window)
{
MetaWindowClass *klass = META_WINDOW_GET_CLASS (window);
g_return_val_if_fail (klass->get_wayland_surface != NULL, NULL);
return klass->get_wayland_surface (window);
}
#endif
/**
* meta_window_get_id:
* @window: a #MetaWindow