diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am index ab574ba46..ab668acbc 100644 --- a/hw/dmx/Makefile.am +++ b/hw/dmx/Makefile.am @@ -100,6 +100,8 @@ Xdmx_SOURCES = dmx.c \ dmxxv.h \ dmxgrab.c \ dmxgrab.h \ + dmxselection.c \ + dmxselection.h \ $(top_srcdir)/mi/miinitext.c \ $(top_srcdir)/fb/fbcmap_mi.c \ $(GLX_SRCS) \ diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c index dabe11429..f17fb4ff4 100644 --- a/hw/dmx/dmxinit.c +++ b/hw/dmx/dmxinit.c @@ -55,6 +55,7 @@ #include "dmxstat.h" #include "dmxlaunch.h" #include "dmxgrab.h" +#include "dmxselection.h" #include "dmxshm.h" #ifdef RENDER #include "dmxpict.h" @@ -926,6 +927,7 @@ void InitOutput(ScreenInfo *pScreenInfo, int argc, char *argv[]) dmxInitFonts(); dmxInitProps(); dmxInitGrabs(); + dmxInitSelections(); #ifdef MITSHM dmxInitShm(); diff --git a/hw/dmx/dmxscrinit.c b/hw/dmx/dmxscrinit.c index 98c1a4f90..330ab4fb2 100644 --- a/hw/dmx/dmxscrinit.c +++ b/hw/dmx/dmxscrinit.c @@ -57,6 +57,7 @@ #include "dmxcb.h" #include "dmxinit.h" #include "dmxgrab.h" +#include "dmxselection.h" #include "dmxatom.h" #include "dmxshm.h" @@ -1261,6 +1262,7 @@ Bool dmxCloseScreen(int idx, ScreenPtr pScreen) #ifdef MITSHM dmxResetShm(); #endif + dmxResetSelections(); dmxResetGrabs(); dmxResetProps(); dmxResetFonts(); diff --git a/hw/dmx/dmxselection.c b/hw/dmx/dmxselection.c new file mode 100644 index 000000000..0280e93bf --- /dev/null +++ b/hw/dmx/dmxselection.c @@ -0,0 +1,141 @@ +/* + * Copyright © 2008 Novell, 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 + * Novell, Inc. not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior permission. + * Novell, Inc. makes no representations about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN + * NO EVENT SHALL NOVELL, INC. 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. + * + * Author: David Reveman + */ + +#ifdef HAVE_DMX_CONFIG_H +#include +#endif + +#include "dmx.h" +#include "dmxlog.h" +#include "dmxselection.h" + +#include "selection.h" + +#ifdef PANORAMIX +#include "panoramiX.h" +#include "panoramiXsrv.h" +#endif + +static void +dmxBESetSelectionOwner (WindowPtr pWin, + Selection *pSel) +{ +} + +static int (*dmxSaveProcVector[256]) (ClientPtr); + +static int +dmxProcSetSelectionOwner (ClientPtr client) +{ + WindowPtr pWin; + Selection *pSel; + int err; + REQUEST(xSetSelectionOwnerReq); + + err = (*dmxSaveProcVector[X_SetSelectionOwner]) (client); + if (err != Success) + return err; + + if (dixLookupWindow (&pWin, + stuff->window, + serverClient, + DixReadAccess) != Success || + dixLookupSelection (&pSel, + stuff->selection, + serverClient, + DixReadAccess) != Success) + return Success; + +#ifdef PANORAMIX + if (!noPanoramiXExtension) + { + PanoramiXRes *win; + int j; + + if ((win = (PanoramiXRes *) SecurityLookupIDByType (serverClient, + stuff->window, + XRT_WINDOW, + DixReadAccess))) + { + FOR_NSCREENS_FORWARD(j) { + if (dixLookupWindow (&pWin, + win->info[j].id, + serverClient, + DixReadAccess) == Success) + dmxBESetSelectionOwner (pWin, pSel); + } + } + + return Success; + } +#endif + + dmxBESetSelectionOwner (pWin, pSel); + + return Success; +} + +static int +dmxProcGetSelectionOwner (ClientPtr client) +{ + int err; + + err = (*dmxSaveProcVector[X_GetSelectionOwner]) (client); + if (err != Success) + return err; + + return Success; +} + +static int +dmxProcConvertSelection (ClientPtr client) +{ + int err; + + err = (*dmxSaveProcVector[X_ConvertSelection]) (client); + if (err != Success) + return err; + + return Success; +} + +void dmxInitSelections (void) +{ + int i; + + for (i = 0; i < 256; i++) + dmxSaveProcVector[i] = ProcVector[i]; + + ProcVector[X_SetSelectionOwner] = dmxProcSetSelectionOwner; + ProcVector[X_ConvertSelection] = dmxProcConvertSelection; +} + +void dmxResetSelections (void) +{ + int i; + + for (i = 0; i < 256; i++) + ProcVector[i] = dmxSaveProcVector[i]; +} diff --git a/hw/dmx/dmxselection.h b/hw/dmx/dmxselection.h new file mode 100644 index 000000000..a75c575be --- /dev/null +++ b/hw/dmx/dmxselection.h @@ -0,0 +1,34 @@ +/* + * Copyright © 2008 Novell, 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 + * Novell, Inc. not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior permission. + * Novell, Inc. makes no representations about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN + * NO EVENT SHALL NOVELL, INC. 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. + * + * Author: David Reveman + */ + +#ifndef DMXSELECTION_H +#define DMXSELECTION_H + +#include "dmx.h" + +extern void dmxInitSelections (void); +extern void dmxResetSelections (void); + +#endif /* DMXSELECTION_H */