xwayland: Move wm_fd and listen_fds out of xwl_screen

There are logically server state not screen state. Not that multiple
screens works, at the moment, but that's no excuse to be sloppy.

Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Adam Jackson 2018-10-23 14:33:24 -04:00
parent 2118e4471b
commit 08843efc59
2 changed files with 25 additions and 31 deletions

View File

@ -93,6 +93,10 @@ ddxUseMsg(void)
ErrorF("-eglstream use eglstream backend for nvidia GPUs\n");
}
static int wm_fd = -1;
static int listen_fds[5] = { -1, -1, -1, -1, -1 };
static int listen_fd_count;
int
ddxProcessArgument(int argc, char *argv[], int i)
{
@ -100,10 +104,19 @@ ddxProcessArgument(int argc, char *argv[], int i)
return 1;
}
else if (strcmp(argv[i], "-listen") == 0) {
CHECK_FOR_REQUIRED_ARGUMENTS(1);
NoListenAll = TRUE;
if (listen_fd_count == ARRAY_SIZE(listen_fds))
FatalError("Too many -listen arguments given, max is %zu\n",
ARRAY_SIZE(listen_fds));
listen_fds[listen_fd_count++] = atoi(argv[i + 1]);
return 2;
}
else if (strcmp(argv[i], "-wm") == 0) {
CHECK_FOR_REQUIRED_ARGUMENTS(1);
wm_fd = atoi(argv[i + 1]);
return 2;
}
else if (strcmp(argv[i], "-shm") == 0) {
@ -880,9 +893,7 @@ xwl_sync_events (struct xwl_screen *xwl_screen)
static CARD32
add_client_fd(OsTimerPtr timer, CARD32 time, void *arg)
{
struct xwl_screen *xwl_screen = arg;
if (!AddClientOnOpenFD(xwl_screen->wm_fd))
if (!AddClientOnOpenFD(wm_fd))
FatalError("Failed to add wm client\n");
TimerFree(timer);
@ -891,12 +902,12 @@ add_client_fd(OsTimerPtr timer, CARD32 time, void *arg)
}
static void
listen_on_fds(struct xwl_screen *xwl_screen)
listen_on_fds(void)
{
int i;
for (i = 0; i < xwl_screen->listen_fd_count; i++)
ListenOnOpenFD(xwl_screen->listen_fds[i], FALSE);
for (i = 0; i < listen_fd_count; i++)
ListenOnOpenFD(listen_fds[i], FALSE);
}
static void
@ -913,7 +924,7 @@ wm_selection_callback(CallbackListPtr *p, void *data, void *arg)
info->kind != SelectionSetOwner)
return;
listen_on_fds(xwl_screen);
listen_on_fds();
DeleteCallback(&SelectionCallback, wm_selection_callback, xwl_screen);
}
@ -930,7 +941,6 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
xwl_screen = calloc(1, sizeof *xwl_screen);
if (xwl_screen == NULL)
return FALSE;
xwl_screen->wm_fd = -1;
if (!dixRegisterPrivateKey(&xwl_screen_private_key, PRIVATE_SCREEN, 0))
return FALSE;
@ -950,21 +960,6 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
if (strcmp(argv[i], "-rootless") == 0) {
xwl_screen->rootless = 1;
}
else if (strcmp(argv[i], "-wm") == 0) {
xwl_screen->wm_fd = atoi(argv[i + 1]);
i++;
TimerSet(NULL, 0, 1, add_client_fd, xwl_screen);
}
else if (strcmp(argv[i], "-listen") == 0) {
if (xwl_screen->listen_fd_count ==
ARRAY_SIZE(xwl_screen->listen_fds))
FatalError("Too many -listen arguments given, max is %zu\n",
ARRAY_SIZE(xwl_screen->listen_fds));
xwl_screen->listen_fds[xwl_screen->listen_fd_count++] =
atoi(argv[i + 1]);
i++;
}
else if (strcmp(argv[i], "-shm") == 0) {
xwl_screen->glamor = 0;
}
@ -989,11 +984,13 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
else
xwl_screen->root_clip_mode = ROOT_CLIP_FULL;
if (xwl_screen->listen_fd_count > 0) {
if (xwl_screen->wm_fd >= 0)
AddCallback(&SelectionCallback, wm_selection_callback, xwl_screen);
else
listen_on_fds(xwl_screen);
if (listen_fd_count > 0) {
if (wm_fd >= 0) {
TimerSet(NULL, 0, 1, add_client_fd, NULL);
AddCallback(&SelectionCallback, wm_selection_callback, NULL);
} else {
listen_on_fds();
}
}
xorg_list_init(&xwl_screen->output_list);

View File

@ -120,9 +120,6 @@ struct xwl_screen {
int expecting_event;
enum RootClipMode root_clip_mode;
int wm_fd;
int listen_fds[5];
int listen_fd_count;
int rootless;
int glamor;
int present;