diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c index 8e416fd9d..e9677fcf1 100644 --- a/hw/xwayland/xwayland.c +++ b/hw/xwayland/xwayland.c @@ -165,11 +165,18 @@ ddxProcessArgument(int argc, char *argv[], int i) return 0; } +static DevPrivateKeyRec xwl_client_private_key; static DevPrivateKeyRec xwl_window_private_key; static DevPrivateKeyRec xwl_screen_private_key; static DevPrivateKeyRec xwl_pixmap_private_key; static DevPrivateKeyRec xwl_damage_private_key; +struct xwl_client * +xwl_client_get(ClientPtr client) +{ + return dixLookupPrivate(&client->devPrivates, &xwl_client_private_key); +} + static struct xwl_window * xwl_window_get(WindowPtr window) { @@ -1121,6 +1128,13 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) return FALSE; if (!dixRegisterPrivateKey(&xwl_damage_private_key, PRIVATE_WINDOW, 0)) return FALSE; + /* There are no easy to use new / delete client hooks, we could use a + * ClientStateCallback, but it is easier to let the dix code manage the + * memory for us. This will zero fill the initial xwl_client data. + */ + if (!dixRegisterPrivateKey(&xwl_client_private_key, PRIVATE_CLIENT, + sizeof(struct xwl_client))) + return FALSE; dixSetPrivate(&pScreen->devPrivates, &xwl_screen_private_key, xwl_screen); xwl_screen->screen = pScreen; diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h index b0a1cf36a..9c7fb6691 100644 --- a/hw/xwayland/xwayland.h +++ b/hw/xwayland/xwayland.h @@ -377,6 +377,11 @@ struct xwl_output { Bool xdg_output_done; }; +struct xwl_client { +}; + +struct xwl_client *xwl_client_get(ClientPtr client); + void xwl_sync_events (struct xwl_screen *xwl_screen); void xwl_surface_damage(struct xwl_screen *xwl_screen, struct wl_surface *surface,