diff options
-rw-r--r-- | include/X11/extensions/Xfixes.h | 12 | ||||
-rw-r--r-- | src/Disconnect.c | 100 | ||||
-rw-r--r-- | src/Makefile.am | 1 |
3 files changed, 112 insertions, 1 deletions
diff --git a/include/X11/extensions/Xfixes.h b/include/X11/extensions/Xfixes.h index 8995d14..b62b95b 100644 --- a/include/X11/extensions/Xfixes.h +++ b/include/X11/extensions/Xfixes.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. - * Copyright 2011 Red Hat, Inc. + * Copyright 2011, 2021 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -264,6 +264,16 @@ XFixesDestroyPointerBarrier(Display *dpy, PointerBarrier b); #endif /* XFIXES_MAJOR >= 5 */ +#if XFIXES_MAJOR >= 6 + +void +XFixesSetClientDisconnectMode(Display *dpy, int disconnect_mode); + +int +XFixesGetClientDisconnectMode(Display *dpy); + +#endif /* XFIXES_MAJOR >= 6 */ + _XFUNCPROTOEND #endif /* _XFIXES_H_ */ diff --git a/src/Disconnect.c b/src/Disconnect.c new file mode 100644 index 0000000..047cd69 --- /dev/null +++ b/src/Disconnect.c @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright 2021 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +/* + * Copyright © 2002 Keith Packard, member of The XFree86 Project, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Keith Packard makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include "Xfixesint.h" +#include <limits.h> + +void +XFixesSetClientDisconnectMode(Display *dpy, int disconnect_mode) +{ + XFixesExtDisplayInfo *info = XFixesFindDisplay(dpy); + xXFixesSetClientDisconnectModeReq *req; + + XFixesSimpleCheckExtension(dpy, info); + if (info->major_version < 6) + return; + + LockDisplay(dpy); + GetReq(XFixesSetClientDisconnectMode, req); + req->reqType = info->codes->major_opcode; + req->xfixesReqType = X_XFixesSetClientDisconnectMode; + req->disconnect_mode = disconnect_mode; + UnlockDisplay(dpy); + SyncHandle(); +} + +int +XFixesGetClientDisconnectMode(Display *dpy) +{ + XFixesExtDisplayInfo *info = XFixesFindDisplay(dpy); + xXFixesGetClientDisconnectModeReq *req; + xXFixesGetClientDisconnectModeReply rep; + int disconnect_mode; + + XFixesCheckExtension(dpy, info, 0); + if (info->major_version < 6) + return XFixesClientDisconnectFlagDefault; + + LockDisplay(dpy); + GetReq(XFixesGetClientDisconnectMode, req); + req->reqType = info->codes->major_opcode; + req->xfixesReqType = X_XFixesGetClientDisconnectMode; + + if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) + { + UnlockDisplay(dpy); + SyncHandle(); + return XFixesClientDisconnectFlagDefault; + } + + disconnect_mode = rep.disconnect_mode; + UnlockDisplay(dpy); + SyncHandle(); + + return disconnect_mode; +} diff --git a/src/Makefile.am b/src/Makefile.am index 4e3f542..7aed410 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,6 +2,7 @@ lib_LTLIBRARIES = libXfixes.la libXfixes_la_SOURCES = \ Cursor.c \ + Disconnect.c \ Region.c \ SaveSet.c \ Selection.c \ |