summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2018-10-23 14:33:24 -0400
committerAdam Jackson <ajax@redhat.com>2018-11-13 10:06:03 -0500
commit08843efc5940563a2275c654804c999cfc772987 (patch)
tree5f4d5a90a015dd2aa03e9f5b9b0927454916369d
parent2118e4471be037f2e642f35ff0494aa09177c9ee (diff)
downloadxserver-08843efc5940563a2275c654804c999cfc772987.tar.gz
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>
-rw-r--r--hw/xwayland/xwayland.c53
-rw-r--r--hw/xwayland/xwayland.h3
2 files changed, 25 insertions, 31 deletions
diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
index 605c9f56b..4b7e2b0d3 100644
--- a/hw/xwayland/xwayland.c
+++ b/hw/xwayland/xwayland.c
@@ -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);
diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
index 3f4a601fe..3c240c1b0 100644
--- a/hw/xwayland/xwayland.h
+++ b/hw/xwayland/xwayland.h
@@ -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;