From 96322ebffcde40b8fc8aaee50eebc5fb7af162c3 Mon Sep 17 00:00:00 2001 From: David Reveman Date: Sun, 20 Jul 2008 23:14:26 -0400 Subject: [PATCH] Add dmxCloseDisplay and make dmxOpenDisplay properly initilize syncCookie and use AddEnableDevice. --- hw/dmx/dmxextension.c | 13 ++++--------- hw/dmx/dmxinit.c | 13 +++++++++++++ hw/dmx/dmxinit.h | 1 + hw/dmx/dmxscrinit.c | 5 ++--- 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/hw/dmx/dmxextension.c b/hw/dmx/dmxextension.c index 1a233140d..bd0fa274d 100644 --- a/hw/dmx/dmxextension.c +++ b/hw/dmx/dmxextension.c @@ -1847,6 +1847,7 @@ dmxAttachScreen (int idx, "WM running. cannot use back-end server " "root window\n"); + dmxCloseDisplay (dmxScreen); /* Restore the old screen */ *dmxScreen = oldDMXScreen; return 1; @@ -1918,9 +1919,7 @@ dmxAttachScreen (int idx, dmxLogErrorSet (dmxWarning, errorSet, error, errorName, "No matching visuals found"); XFree(dmxScreen->beVisuals); - XLIB_PROLOGUE (dmxScreen); - XCloseDisplay(dmxScreen->beDisplay); - XLIB_EPILOGUE (dmxScreen); + dmxCloseDisplay (dmxScreen); /* Restore the old screen */ *dmxScreen = oldDMXScreen; @@ -1945,9 +1944,7 @@ dmxAttachScreen (int idx, XFree(dmxScreen->beVisuals); XFree(dmxScreen->beDepths); XFree(dmxScreen->bePixmapFormats); - XLIB_PROLOGUE (dmxScreen); - XCloseDisplay(dmxScreen->beDisplay); - XLIB_EPILOGUE (dmxScreen); + dmxCloseDisplay (dmxScreen); /* Restore the old screen */ *dmxScreen = oldDMXScreen; @@ -1961,9 +1958,7 @@ dmxAttachScreen (int idx, XFree(dmxScreen->beVisuals); XFree(dmxScreen->beDepths); XFree(dmxScreen->bePixmapFormats); - XLIB_PROLOGUE (dmxScreen); - XCloseDisplay(dmxScreen->beDisplay); - XLIB_EPILOGUE (dmxScreen); + dmxCloseDisplay (dmxScreen); /* Restore the old screen */ *dmxScreen = oldDMXScreen; diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c index 55c6ca9dc..c39cc6ac5 100644 --- a/hw/dmx/dmxinit.c +++ b/hw/dmx/dmxinit.c @@ -292,10 +292,23 @@ Bool dmxOpenDisplay(DMXScreenInfo *dmxScreen) dmxScreen->fd = XConnectionNumber (dmxScreen->beDisplay); dmxScreen->connection = XGetXCBConnection (dmxScreen->beDisplay); + dmxScreen->syncCookie.sequence = 0; + + AddEnabledDevice (dmxScreen->fd); + dmxPropertyDisplay(dmxScreen); return TRUE; } +void dmxCloseDisplay(DMXScreenInfo *dmxScreen) +{ + RemoveEnabledDevice (dmxScreen->fd); + + XLIB_PROLOGUE (dmxScreen); + XCloseDisplay (dmxScreen->beDisplay); + XLIB_EPILOGUE (dmxScreen); +} + void dmxSetErrorHandler(DMXScreenInfo *dmxScreen) { XSetErrorHandler(dmxErrorHandler); diff --git a/hw/dmx/dmxinit.h b/hw/dmx/dmxinit.h index 7d166fd85..2fed0f193 100644 --- a/hw/dmx/dmxinit.h +++ b/hw/dmx/dmxinit.h @@ -40,6 +40,7 @@ #include "scrnintstr.h" extern Bool dmxOpenDisplay(DMXScreenInfo *dmxScreen); +extern void dmxCloseDisplay(DMXScreenInfo *dmxScreen); extern void dmxSetErrorHandler(DMXScreenInfo *dmxScreen); extern void dmxCheckForWM(DMXScreenInfo *dmxScreen); extern void dmxGetScreenAttribs(DMXScreenInfo *dmxScreen); diff --git a/hw/dmx/dmxscrinit.c b/hw/dmx/dmxscrinit.c index 560a3e6e0..39752b97f 100644 --- a/hw/dmx/dmxscrinit.c +++ b/hw/dmx/dmxscrinit.c @@ -55,6 +55,7 @@ #include "dmxdpms.h" #include "dmxlog.h" #include "dmxcb.h" +#include "dmxinit.h" #ifdef PANORAMIX #include "panoramiX.h" @@ -2374,9 +2375,7 @@ void dmxBECloseScreen(ScreenPtr pScreen) #endif /* Close display */ - XLIB_PROLOGUE (dmxScreen); - XCloseDisplay(dmxScreen->beDisplay); - XLIB_EPILOGUE (dmxScreen); + dmxCloseDisplay (dmxScreen); dmxScreen->beDisplay = NULL; }