winpriv.c revision 706f2543
1/* 2 * Export window information for the Windows-OpenGL GLX implementation. 3 * 4 * Authors: Alexander Gottwald 5 */ 6 7#ifdef HAVE_XWIN_CONFIG_H 8#include <xwin-config.h> 9#endif 10#include "win.h" 11#include "winpriv.h" 12#include "winwindow.h" 13 14void 15winCreateWindowsWindow (WindowPtr pWin); 16/** 17 * Return size and handles of a window. 18 * If pWin is NULL, then the information for the root window is requested. 19 */ 20HWND winGetWindowInfo(WindowPtr pWin) 21{ 22 winDebug("%s: pWin=%p\n", __FUNCTION__, pWin); 23 24 /* a real window was requested */ 25 if (pWin != NULL) 26 { 27 /* Get the window and screen privates */ 28 ScreenPtr pScreen = pWin->drawable.pScreen; 29 winPrivScreenPtr pWinScreen = winGetScreenPriv(pScreen); 30 winScreenInfoPtr pScreenInfo = NULL; 31 HWND hwnd = NULL; 32 33 if (pWinScreen == NULL) 34 { 35 ErrorF("winGetWindowInfo: screen has no privates\n"); 36 return NULL; 37 } 38 39 hwnd = pWinScreen->hwndScreen; 40 41 pScreenInfo = pWinScreen->pScreenInfo; 42#ifdef XWIN_MULTIWINDOW 43 /* check for multiwindow mode */ 44 if (pScreenInfo->fMultiWindow) 45 { 46 winWindowPriv(pWin); 47 48 if (pWinPriv == NULL) 49 { 50 ErrorF("winGetWindowInfo: window has no privates\n"); 51 return hwnd; 52 } 53 54 if (pWinPriv->hWnd == NULL) 55 { 56 winCreateWindowsWindow(pWin); 57 ErrorF("winGetWindowInfo: forcing window to exist...\n"); 58 } 59 60 if (pWinPriv->hWnd != NULL) 61 { 62 /* copy window handle */ 63 hwnd = pWinPriv->hWnd; 64 } 65 66 return hwnd; 67 } 68#endif 69#ifdef XWIN_MULTIWINDOWEXTWM 70 /* check for multiwindow external wm mode */ 71 if (pScreenInfo->fMWExtWM) 72 { 73 win32RootlessWindowPtr pRLWinPriv 74 = (win32RootlessWindowPtr) RootlessFrameForWindow (pWin, FALSE); 75 76 if (pRLWinPriv == NULL) { 77 ErrorF("winGetWindowInfo: window has no privates\n"); 78 return hwnd; 79 } 80 81 if (pRLWinPriv->hWnd != NULL) 82 { 83 /* copy window handle */ 84 hwnd = pRLWinPriv->hWnd; 85 } 86 return hwnd; 87 } 88#endif 89 } 90 else 91 { 92 ScreenPtr pScreen = g_ScreenInfo[0].pScreen; 93 winPrivScreenPtr pWinScreen = winGetScreenPriv(pScreen); 94 95 if (pWinScreen == NULL) 96 { 97 ErrorF("winGetWindowInfo: screen has no privates\n"); 98 return NULL; 99 } 100 101 ErrorF("winGetWindowInfo: returning root window\n"); 102 103 return pWinScreen->hwndScreen; 104 } 105 106 return NULL; 107} 108 109Bool 110winCheckScreenAiglxIsSupported(ScreenPtr pScreen) 111{ 112 winPrivScreenPtr pWinScreen = winGetScreenPriv(pScreen); 113 winScreenInfoPtr pScreenInfo = pWinScreen->pScreenInfo; 114 115#ifdef XWIN_MULTIWINDOW 116 if (pScreenInfo->fMultiWindow) 117 return TRUE; 118#endif 119 120#ifdef XWIN_MULTIWINDOWEXTWM 121 if (pScreenInfo->fMWExtWM) 122 return TRUE; 123#endif 124 125 return FALSE; 126} 127