From b27756dbe6a1be4633ec47a8fe92a4c217f68f93 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Sun, 11 Aug 2013 12:15:11 +0100 Subject: [PATCH 01/15] hw/xwin: Fix inclusion of shlobj.h in MinGW64 build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix build with latest MinGW64 headers by wrapping Status type in shlobj.h as well In file included from InitOutput.c:51:0: /usr/i686-w64-mingw32/sys-root/mingw/include/shlobj.h:1231:44: error: expected identifier or ‘(’ before ‘int’ /usr/i686-w64-mingw32/sys-root/mingw/include/shlobj.h:1248:44: error: expected identifier or ‘(’ before ‘int’ Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- hw/xwin/InitOutput.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/xwin/InitOutput.c b/hw/xwin/InitOutput.c index d6b5e4fd9..b05ca2736 100644 --- a/hw/xwin/InitOutput.c +++ b/hw/xwin/InitOutput.c @@ -48,7 +48,11 @@ from The Open Group. #include "xkbsrv.h" #endif #ifdef RELOCATE_PROJECTROOT +#pragma push_macro("Status") +#undef Status +#define Status wStatus #include +#pragma pop_macro("Status") typedef WINAPI HRESULT(*SHGETFOLDERPATHPROC) (HWND hwndOwner, int nFolder, HANDLE hToken, From ce0217b98261dcf8b20cfb743831965dda1950ec Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Sat, 10 Aug 2013 12:35:55 +0100 Subject: [PATCH 02/15] hw/xwin: Fix winglobals.h for MinGW64 build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Include pthread.h in winglobals.h to fix build with latest MinGW64 headers In file included from winmultiwindowicons.c:47:0: winglobals.h:92:1: error: unknown type name ‘pthread_mutex_t’ Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- hw/xwin/winglobals.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/xwin/winglobals.h b/hw/xwin/winglobals.h index e7e2f7e20..4faba9eb7 100644 --- a/hw/xwin/winglobals.h +++ b/hw/xwin/winglobals.h @@ -30,6 +30,8 @@ #include #endif +#include + /* * References to external symbols */ From e716baedc4d8e52a60f43ef21aba771b340d8c8b Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Sat, 31 Mar 2012 14:42:45 +0100 Subject: [PATCH 03/15] Move pseudoramiX code where it can be shared between Xwin and Xquartz Move pseudoramiX code to a separate top-level directory. Link Xwin and Xquartz with libPseudoramiX I'm not sure moving this to a top-level directory is appropriate, but I'm not sure where else it fits. Future work: pseudoramiX can probably be consolidated with the rrxinerama code (which I think provides fake xinerama data when real XINERAMA is disabled and we only have one screen) v2: fix distcheck Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- Makefile.am | 2 ++ configure.ac | 1 + hw/xquartz/Makefile.am | 4 ++-- hw/xwin/Makefile.am | 1 + pseudoramiX/Makefile.am | 7 +++++++ {hw/xquartz => pseudoramiX}/pseudoramiX.c | 0 {hw/xquartz => pseudoramiX}/pseudoramiX.h | 0 7 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 pseudoramiX/Makefile.am rename {hw/xquartz => pseudoramiX}/pseudoramiX.c (100%) rename {hw/xquartz => pseudoramiX}/pseudoramiX.h (100%) diff --git a/Makefile.am b/Makefile.am index 9a628537d..7be4271d4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -27,6 +27,7 @@ SUBDIRS = \ Xext \ miext \ os \ + pseudoramiX \ randr \ render \ Xi \ @@ -77,6 +78,7 @@ DIST_SUBDIRS = \ Xext \ miext \ os \ + pseudoramiX \ randr \ render \ Xi \ diff --git a/configure.ac b/configure.ac index d27ca2392..225b70fbf 100644 --- a/configure.ac +++ b/configure.ac @@ -2256,6 +2256,7 @@ miext/damage/Makefile miext/shadow/Makefile miext/rootless/Makefile os/Makefile +pseudoramiX/Makefile randr/Makefile render/Makefile xkb/Makefile diff --git a/hw/xquartz/Makefile.am b/hw/xquartz/Makefile.am index a7cc012d9..2e894d705 100644 --- a/hw/xquartz/Makefile.am +++ b/hw/xquartz/Makefile.am @@ -28,7 +28,6 @@ libXquartz_la_SOURCES = \ darwinEvents.c \ darwinXinput.c \ keysym2ucs.c \ - pseudoramiX.c \ quartz.c \ quartzCocoa.m \ quartzKeyboard.c \ @@ -36,6 +35,8 @@ libXquartz_la_SOURCES = \ quartzRandR.c \ console_redirect.c +libXquartz_la_LIBADD = $(top_builddir)/pseudoramiX/libPseudoramiX.la + EXTRA_DIST = \ X11Application.h \ X11Controller.h \ @@ -44,7 +45,6 @@ EXTRA_DIST = \ darwinfb.h \ darwinEvents.h \ keysym2ucs.h \ - pseudoramiX.h \ quartz.h \ quartzCommon.h \ quartzKeyboard.h \ diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am index 831e7dc47..c7006959c 100644 --- a/hw/xwin/Makefile.am +++ b/hw/xwin/Makefile.am @@ -153,6 +153,7 @@ XWin_SOURCES = $(SRCS) AM_CPPFLAGS = -I$(top_srcdir)/miext/rootless XWIN_SYS_LIBS += -ldxguid +XWIN_LIBS += $(top_builddir)/pseudoramiX/libPseudoramiX.la XWin_DEPENDENCIES = $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_LIBS) $(XSERVER_LIBS) XWin_LDADD = $(MULTIWINDOW_LIBS) $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_GLX_LINK_FLAGS) $(XWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS) diff --git a/pseudoramiX/Makefile.am b/pseudoramiX/Makefile.am new file mode 100644 index 000000000..17b664b9e --- /dev/null +++ b/pseudoramiX/Makefile.am @@ -0,0 +1,7 @@ +# Fake Xinerama extension + +AM_CFLAGS = $(DIX_CFLAGS) + +noinst_LTLIBRARIES = libPseudoramiX.la + +libPseudoramiX_la_SOURCES = pseudoramiX.c pseudoramiX.h diff --git a/hw/xquartz/pseudoramiX.c b/pseudoramiX/pseudoramiX.c similarity index 100% rename from hw/xquartz/pseudoramiX.c rename to pseudoramiX/pseudoramiX.c diff --git a/hw/xquartz/pseudoramiX.h b/pseudoramiX/pseudoramiX.h similarity index 100% rename from hw/xquartz/pseudoramiX.h rename to pseudoramiX/pseudoramiX.h From 390cfec10ef7d52391f890c7593ac82a7d77d856 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Fri, 9 Aug 2013 16:48:12 +0100 Subject: [PATCH 04/15] hw/xwin: Correct winprefs.c function signatures for x64. Correct SetupRootMenu(), SetupSysMenu(), HandleCustomWM_INITMENU() and HandleCustomWM_COMMAND() function signatures which use unsigned long parameters, where just a specific HWND or HMENU handle type should have been used. Signed-off-by: Colin Harrison Reviewed-by: Jon TURNEY Reviewed-by: Marc Haesen --- hw/xwin/winmultiwindowwndproc.c | 6 +++--- hw/xwin/winprefs.c | 22 +++++----------------- hw/xwin/winprefs.h | 8 ++++---- hw/xwin/wintrayicon.c | 2 +- 4 files changed, 13 insertions(+), 25 deletions(-) diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c index 9292e73ca..a888f08ef 100644 --- a/hw/xwin/winmultiwindowwndproc.c +++ b/hw/xwin/winmultiwindowwndproc.c @@ -420,14 +420,14 @@ winTopLevelWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) /* * Add whatever the setup file wants to for this window */ - SetupSysMenu((unsigned long) hwnd); + SetupSysMenu(hwnd); return 0; case WM_SYSCOMMAND: /* * Any window menu items go through here */ - if (HandleCustomWM_COMMAND((unsigned long) hwnd, LOWORD(wParam))) { + if (HandleCustomWM_COMMAND(hwnd, LOWORD(wParam))) { /* Don't pass customized menus to DefWindowProc */ return 0; } @@ -443,7 +443,7 @@ winTopLevelWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_INITMENU: /* Checks/Unchecks any menu items before they are displayed */ - HandleCustomWM_INITMENU((unsigned long) hwnd, wParam); + HandleCustomWM_INITMENU(hwnd, (HMENU)wParam); break; case WM_ERASEBKGND: diff --git a/hw/xwin/winprefs.c b/hw/xwin/winprefs.c index 8936aae63..f386facdd 100644 --- a/hw/xwin/winprefs.c +++ b/hw/xwin/winprefs.c @@ -188,7 +188,7 @@ ReloadEnumWindowsProc(HWND hwnd, LPARAM lParam) } /* Update the system menu for this window */ - SetupSysMenu((unsigned long) hwnd); + SetupSysMenu(hwnd); /* That was easy... */ } @@ -275,15 +275,11 @@ ReloadPrefs(void) * Check/uncheck the ALWAYSONTOP items in this menu */ void -HandleCustomWM_INITMENU(unsigned long hwndIn, unsigned long hmenuIn) +HandleCustomWM_INITMENU(HWND hwnd, HMENU hmenu) { - HWND hwnd; - HMENU hmenu; DWORD dwExStyle; int i, j; - hwnd = (HWND) hwndIn; - hmenu = (HMENU) hmenuIn; if (!hwnd || !hmenu) return; @@ -305,15 +301,12 @@ HandleCustomWM_INITMENU(unsigned long hwndIn, unsigned long hmenuIn) * Return TRUE if command is proccessed, FALSE otherwise. */ Bool -HandleCustomWM_COMMAND(unsigned long hwndIn, int command) +HandleCustomWM_COMMAND(HWND hwnd, int command) { - HWND hwnd; int i, j; MENUPARSED *m; DWORD dwExStyle; - hwnd = (HWND) hwndIn; - if (!command) return FALSE; @@ -412,15 +405,13 @@ HandleCustomWM_COMMAND(unsigned long hwndIn, int command) * Add the default or a custom menu depending on the class match */ void -SetupSysMenu(unsigned long hwndIn) +SetupSysMenu(HWND hwnd) { - HWND hwnd; HMENU sys; int i; WindowPtr pWin; char *res_name, *res_class; - hwnd = (HWND) hwndIn; if (!hwnd) return; @@ -465,11 +456,8 @@ SetupSysMenu(unsigned long hwndIn) * Possibly add a menu to the toolbar icon */ void -SetupRootMenu(unsigned long hmenuRoot) +SetupRootMenu(HMENU root) { - HMENU root; - - root = (HMENU) hmenuRoot; if (!root) return; diff --git a/hw/xwin/winprefs.h b/hw/xwin/winprefs.h index a4a6e7eec..8f4eb0807 100644 --- a/hw/xwin/winprefs.h +++ b/hw/xwin/winprefs.h @@ -150,16 +150,16 @@ void LoadPreferences(void); void - SetupRootMenu(unsigned long hmenuRoot); + SetupRootMenu(HMENU root); void - SetupSysMenu(unsigned long hwndIn); + SetupSysMenu(HWND hwnd); void - HandleCustomWM_INITMENU(unsigned long hwndIn, unsigned long hmenuIn); + HandleCustomWM_INITMENU(HWND hwnd, HMENU hmenu); Bool - HandleCustomWM_COMMAND(unsigned long hwndIn, int command); + HandleCustomWM_COMMAND(HWND hwnd, int command); int winIconIsOverride(HICON hicon); diff --git a/hw/xwin/wintrayicon.c b/hw/xwin/wintrayicon.c index f168b884a..e0aa7e5ab 100644 --- a/hw/xwin/wintrayicon.c +++ b/hw/xwin/wintrayicon.c @@ -170,7 +170,7 @@ winHandleIconMessage(HWND hwnd, UINT message, RemoveMenu(hmenuTray, ID_APP_HIDE_ROOT, MF_BYCOMMAND); } - SetupRootMenu((unsigned long) hmenuTray); + SetupRootMenu(hmenuTray); /* * NOTE: This three-step procedure is required for From 41d03c9ccce665b919b180bbb819b78c750aa325 Mon Sep 17 00:00:00 2001 From: Marc Haesen Date: Fri, 2 Aug 2013 18:19:22 +0100 Subject: [PATCH 05/15] hw/xwin: Correct size of _WINDOWSWM_NATIVE_HWND property on x86_64 Use the correct size of a HWND on x86_64 in XChangeProperty() and XGetWindowProperty() calls for the _WINDOWSWM_NATIVE_HWND property. Signed-off-by: Marc Haesen Reviewed-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/winmultiwindowwm.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c index 3c44f05e4..685136818 100644 --- a/hw/xwin/winmultiwindowwm.c +++ b/hw/xwin/winmultiwindowwm.c @@ -488,7 +488,7 @@ getHwnd(WMInfoPtr pWMInfo, Window iWindow) iWindow, pWMInfo->atmPrivMap, 0, - 1, + sizeof(HWND)/4, False, XA_INTEGER, &atmType, @@ -747,10 +747,10 @@ winMultiWindowWMProc(void *pArg) ErrorF("\tWM_WM_MAP\n"); #endif /* Put a note as to the HWND associated with this Window */ - XChangeProperty(pWMInfo->pDisplay, pNode->msg.iWindow, pWMInfo->atmPrivMap, XA_INTEGER, //pWMInfo->atmPrivMap, + XChangeProperty(pWMInfo->pDisplay, pNode->msg.iWindow, pWMInfo->atmPrivMap, XA_INTEGER, 32, PropModeReplace, - (unsigned char *) &(pNode->msg.hwndWindow), 1); + (unsigned char *) &(pNode->msg.hwndWindow), sizeof(HWND)/4); UpdateName(pWMInfo, pNode->msg.iWindow); UpdateIcon(pWMInfo, pNode->msg.iWindow); break; @@ -759,10 +759,10 @@ winMultiWindowWMProc(void *pArg) #if CYGMULTIWINDOW_DEBUG ErrorF("\tWM_WM_MAP2\n"); #endif - XChangeProperty(pWMInfo->pDisplay, pNode->msg.iWindow, pWMInfo->atmPrivMap, XA_INTEGER, //pWMInfo->atmPrivMap, + XChangeProperty(pWMInfo->pDisplay, pNode->msg.iWindow, pWMInfo->atmPrivMap, XA_INTEGER, 32, PropModeReplace, - (unsigned char *) &(pNode->msg.hwndWindow), 1); + (unsigned char *) &(pNode->msg.hwndWindow), sizeof(HWND)/4); break; case WM_WM_MAP3: @@ -770,10 +770,10 @@ winMultiWindowWMProc(void *pArg) ErrorF("\tWM_WM_MAP3\n"); #endif /* Put a note as to the HWND associated with this Window */ - XChangeProperty(pWMInfo->pDisplay, pNode->msg.iWindow, pWMInfo->atmPrivMap, XA_INTEGER, //pWMInfo->atmPrivMap, + XChangeProperty(pWMInfo->pDisplay, pNode->msg.iWindow, pWMInfo->atmPrivMap, XA_INTEGER, 32, PropModeReplace, - (unsigned char *) &(pNode->msg.hwndWindow), 1); + (unsigned char *) &(pNode->msg.hwndWindow), sizeof(HWND)/4); UpdateName(pWMInfo, pNode->msg.iWindow); UpdateIcon(pWMInfo, pNode->msg.iWindow); UpdateStyle(pWMInfo, pNode->msg.iWindow); From 784c006adb22c6693ad30dd0b1b05369cfaa7b5e Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Sat, 10 Aug 2013 11:55:23 +0100 Subject: [PATCH 06/15] hw/xwin: Fix -Warray-bounds warning in winXCursorToHCURSOR() Rewrite winXCursorToHCURSOR() so access to BITMAPINFO bmiColors member doesn't trigger an -Warray-bounds warning. Note that the underlying storage is allocated as a BITMAPV4HEADER, so has sufficent room for the extra RGBQUADs bmiColors after the BITMAPINFO bmiHeader. wincursor.c: In function 'winSetCursor': wincursor.c:293:24: error: array subscript is above array bounds [-Werror=array-bounds] wincursor.c:294:24: error: array subscript is above array bounds [-Werror=array-bounds] wincursor.c:295:24: error: array subscript is above array bounds [-Werror=array-bounds] wincursor.c:296:24: error: array subscript is above array bounds [-Werror=array-bounds] wincursor.c:297:24: error: array subscript is above array bounds [-Werror=array-bounds] wincursor.c:298:24: error: array subscript is above array bounds [-Werror=array-bounds] wincursor.c:299:24: error: array subscript is above array bounds [-Werror=array-bounds] wincursor.c:300:24: error: array subscript is above array bounds [-Werror=array-bounds] Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- hw/xwin/wincursor.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/hw/xwin/wincursor.c b/hw/xwin/wincursor.c index 2962d06ad..285e1bcc2 100644 --- a/hw/xwin/wincursor.c +++ b/hw/xwin/wincursor.c @@ -273,9 +273,12 @@ winLoadCursor(ScreenPtr pScreen, CursorPtr pCursor, int screen) } /* End if-truecolor-icon */ if (!lpBits) { + RGBQUAD *pbmiColors; /* Bicolor, use a palettized DIB */ WIN_DEBUG_MSG("winLoadCursor: Trying two color cursor\n"); pbmi = (BITMAPINFO *) &bi; + pbmiColors = &(pbmi->bmiColors[0]); + memset(pbmi, 0, sizeof(BITMAPINFOHEADER)); pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); pbmi->bmiHeader.biWidth = pScreenPriv->cursor.sm_cx; @@ -286,18 +289,19 @@ winLoadCursor(ScreenPtr pScreen, CursorPtr pCursor, int screen) pbmi->bmiHeader.biSizeImage = 0; pbmi->bmiHeader.biClrUsed = 3; pbmi->bmiHeader.biClrImportant = 3; - pbmi->bmiColors[0].rgbRed = 0; /* Empty */ - pbmi->bmiColors[0].rgbGreen = 0; - pbmi->bmiColors[0].rgbBlue = 0; - pbmi->bmiColors[0].rgbReserved = 0; - pbmi->bmiColors[1].rgbRed = pCursor->backRed >> 8; /* Background */ - pbmi->bmiColors[1].rgbGreen = pCursor->backGreen >> 8; - pbmi->bmiColors[1].rgbBlue = pCursor->backBlue >> 8; - pbmi->bmiColors[1].rgbReserved = 0; - pbmi->bmiColors[2].rgbRed = pCursor->foreRed >> 8; /* Foreground */ - pbmi->bmiColors[2].rgbGreen = pCursor->foreGreen >> 8; - pbmi->bmiColors[2].rgbBlue = pCursor->foreBlue >> 8; - pbmi->bmiColors[2].rgbReserved = 0; + + pbmiColors[0].rgbRed = 0; /* Empty */ + pbmiColors[0].rgbGreen = 0; + pbmiColors[0].rgbBlue = 0; + pbmiColors[0].rgbReserved = 0; + pbmiColors[1].rgbRed = pCursor->backRed >> 8; /* Background */ + pbmiColors[1].rgbGreen = pCursor->backGreen >> 8; + pbmiColors[1].rgbBlue = pCursor->backBlue >> 8; + pbmiColors[1].rgbReserved = 0; + pbmiColors[2].rgbRed = pCursor->foreRed >> 8; /* Foreground */ + pbmiColors[2].rgbGreen = pCursor->foreGreen >> 8; + pbmiColors[2].rgbBlue = pCursor->foreBlue >> 8; + pbmiColors[2].rgbReserved = 0; lpBits = (unsigned long *) calloc(pScreenPriv->cursor.sm_cx * From 4bfb2dce5eea4923eaf86eca33b96087b28235f5 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Sun, 7 Apr 2013 23:59:44 +0100 Subject: [PATCH 07/15] hw/xwin: Fix an issue in winSetSpansNativeGDI() identifed by -Warray-bounds The BITMAPINFO local only has room for a single RBGQUAD in bmiColors, but we access two (black and white for a mono-color DIB). Fix by changing to a dynamic allocation big enough for a BITMAPINFO and a RGBQUAD. Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- hw/xwin/winsetsp.c | 52 ++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/hw/xwin/winsetsp.c b/hw/xwin/winsetsp.c index f102f9ff5..11108cb53 100644 --- a/hw/xwin/winsetsp.c +++ b/hw/xwin/winsetsp.c @@ -46,7 +46,7 @@ winSetSpansNativeGDI(DrawablePtr pDrawable, PixmapPtr pPixmap = NULL; winPrivPixmapPtr pPixmapPriv = NULL; HBITMAP hbmpOrig = NULL; - BITMAPINFO bmi; + BITMAPINFO *pbmi; HRGN hrgn = NULL, combined = NULL; int nbox; BoxPtr pbox; @@ -57,6 +57,8 @@ winSetSpansNativeGDI(DrawablePtr pDrawable, if (!nbox) return; + pbmi = malloc(sizeof(BITMAPINFO) + sizeof(RGBQUAD)); + combined = CreateRectRgn(pbox->x1, pbox->y1, pbox->x2, pbox->y2); nbox--; pbox++; @@ -86,19 +88,20 @@ winSetSpansNativeGDI(DrawablePtr pDrawable, "failed on pPixmapPriv->hBitmap\n"); while (iSpans--) { - ZeroMemory(&bmi, sizeof(BITMAPINFO)); - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmi.bmiHeader.biWidth = *piWidths; - bmi.bmiHeader.biHeight = 1; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = pDrawable->depth; - bmi.bmiHeader.biCompression = BI_RGB; + ZeroMemory(pbmi, sizeof(BITMAPINFO)); + pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbmi->bmiHeader.biWidth = *piWidths; + pbmi->bmiHeader.biHeight = 1; + pbmi->bmiHeader.biPlanes = 1; + pbmi->bmiHeader.biBitCount = pDrawable->depth; + pbmi->bmiHeader.biCompression = BI_RGB; /* Setup color table for mono DIBs */ if (pDrawable->depth == 1) { - bmi.bmiColors[1].rgbBlue = 255; - bmi.bmiColors[1].rgbGreen = 255; - bmi.bmiColors[1].rgbRed = 255; + RGBQUAD *bmiColors = &(pbmi->bmiColors[0]); + bmiColors[1].rgbBlue = 255; + bmiColors[1].rgbGreen = 255; + bmiColors[1].rgbRed = 255; } StretchDIBits(pGCPriv->hdcMem, @@ -107,7 +110,7 @@ winSetSpansNativeGDI(DrawablePtr pDrawable, 0, 0, *piWidths, 1, pSrcs, - (BITMAPINFO *) &bmi, + (BITMAPINFO *) pbmi, DIB_RGB_COLORS, g_copyROP[pGC->alu]); pSrcs += PixmapBytePad(*piWidths, pDrawable->depth); @@ -129,19 +132,20 @@ winSetSpansNativeGDI(DrawablePtr pDrawable, combined = NULL; while (iSpans--) { - ZeroMemory(&bmi, sizeof(BITMAPINFO)); - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmi.bmiHeader.biWidth = *piWidths; - bmi.bmiHeader.biHeight = 1; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = pDrawable->depth; - bmi.bmiHeader.biCompression = BI_RGB; + ZeroMemory(pbmi, sizeof(BITMAPINFO)); + pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbmi->bmiHeader.biWidth = *piWidths; + pbmi->bmiHeader.biHeight = 1; + pbmi->bmiHeader.biPlanes = 1; + pbmi->bmiHeader.biBitCount = pDrawable->depth; + pbmi->bmiHeader.biCompression = BI_RGB; /* Setup color table for mono DIBs */ if (pDrawable->depth == 1) { - bmi.bmiColors[1].rgbBlue = 255; - bmi.bmiColors[1].rgbGreen = 255; - bmi.bmiColors[1].rgbRed = 255; + RGBQUAD *bmiColors = &(pbmi->bmiColors[0]); + bmiColors[1].rgbBlue = 255; + bmiColors[1].rgbGreen = 255; + bmiColors[1].rgbRed = 255; } StretchDIBits(pGCPriv->hdc, @@ -150,7 +154,7 @@ winSetSpansNativeGDI(DrawablePtr pDrawable, 0, 0, *piWidths, 1, pSrcs, - (BITMAPINFO *) &bmi, + (BITMAPINFO *) pbmi, DIB_RGB_COLORS, g_copyROP[pGC->alu]); pSrcs += PixmapBytePad(*piWidths, pDrawable->depth); @@ -166,4 +170,6 @@ winSetSpansNativeGDI(DrawablePtr pDrawable, FatalError("\nwinSetSpansNativeGDI - Unknown drawable type\n\n"); break; } + + free(pbmi); } From 8fa882a980abea6f05b4b59447a187aea2c793a1 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Sat, 10 Aug 2013 12:41:07 +0100 Subject: [PATCH 08/15] hw/xwin: Fix ARGB cursor conversion on x86_64 Fix erroneous use of unsigned long * for lpBits in winXCursorToHCURSOR() which leads to ARGB cursors being vertically streched on x86_64 by interleaving blank rows of pixels. Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- hw/xwin/wincursor.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/hw/xwin/wincursor.c b/hw/xwin/wincursor.c index 285e1bcc2..a35336a34 100644 --- a/hw/xwin/wincursor.c +++ b/hw/xwin/wincursor.c @@ -162,7 +162,7 @@ winLoadCursor(ScreenPtr pScreen, CursorPtr pCursor, int screen) HDC hDC; BITMAPV4HEADER bi; BITMAPINFO *pbmi; - unsigned long *lpBits; + uint32_t *lpBits; WIN_DEBUG_MSG("winLoadCursor: Win32: %dx%d X11: %dx%d hotspot: %d,%d\n", pScreenPriv->cursor.sm_cx, pScreenPriv->cursor.sm_cy, @@ -256,15 +256,14 @@ winLoadCursor(ScreenPtr pScreen, CursorPtr pCursor, int screen) bi.bV4AlphaMask = 0xFF000000; lpBits = - (unsigned long *) calloc(pScreenPriv->cursor.sm_cx * - pScreenPriv->cursor.sm_cy, - sizeof(unsigned long)); + (uint32_t *) calloc(pScreenPriv->cursor.sm_cx * + pScreenPriv->cursor.sm_cy, + sizeof(uint32_t)); if (lpBits) { int y; for (y = 0; y < nCY; y++) { - unsigned long *src, *dst; - + void *src, *dst; src = &(pCursor->bits->argb[y * pCursor->bits->width]); dst = &(lpBits[y * pScreenPriv->cursor.sm_cx]); memcpy(dst, src, 4 * nCX); @@ -304,8 +303,8 @@ winLoadCursor(ScreenPtr pScreen, CursorPtr pCursor, int screen) pbmiColors[2].rgbReserved = 0; lpBits = - (unsigned long *) calloc(pScreenPriv->cursor.sm_cx * - pScreenPriv->cursor.sm_cy, sizeof(char)); + (uint32_t *) calloc(pScreenPriv->cursor.sm_cx * + pScreenPriv->cursor.sm_cy, sizeof(char)); pCur = (unsigned char *) lpBits; if (lpBits) { From fcc7767f8cd6c318861b1060ef6a3936750a0dd2 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Mon, 10 Jun 2013 17:31:12 +0100 Subject: [PATCH 09/15] hw/xwin: Remove unused winProcQueryTreeOrig variable Unused since 47c7b6d3e626497747ae2780f259a15b8e6c846f "Remove no-longer needed tricks used to prevent the clipboard client from being killed" Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- hw/xwin/InitInput.c | 1 - hw/xwin/winglobals.c | 1 - hw/xwin/winglobals.h | 1 - 3 files changed, 3 deletions(-) diff --git a/hw/xwin/InitInput.c b/hw/xwin/InitInput.c index 395b533fc..36346b7e1 100644 --- a/hw/xwin/InitInput.c +++ b/hw/xwin/InitInput.c @@ -39,7 +39,6 @@ #ifdef XWIN_CLIPBOARD int winProcEstablishConnection(ClientPtr /* client */ ); -int winProcQueryTree(ClientPtr /* client */ ); int winProcSetSelectionOwner(ClientPtr /* client */ ); #endif diff --git a/hw/xwin/winglobals.c b/hw/xwin/winglobals.c index b3ca29592..d28132247 100644 --- a/hw/xwin/winglobals.c +++ b/hw/xwin/winglobals.c @@ -85,7 +85,6 @@ pthread_mutex_t g_pmTerminating = PTHREAD_MUTEX_INITIALIZER; * Wrapped DIX functions */ winDispatchProcPtr winProcEstablishConnectionOrig = NULL; -winDispatchProcPtr winProcQueryTreeOrig = NULL; winDispatchProcPtr winProcSetSelectionOwnerOrig = NULL; /* diff --git a/hw/xwin/winglobals.h b/hw/xwin/winglobals.h index 4faba9eb7..58a919c65 100644 --- a/hw/xwin/winglobals.h +++ b/hw/xwin/winglobals.h @@ -71,7 +71,6 @@ typedef int (*winDispatchProcPtr) (ClientPtr); * Wrapped DIX functions */ extern winDispatchProcPtr winProcEstablishConnectionOrig; -extern winDispatchProcPtr winProcQueryTreeOrig; extern winDispatchProcPtr winProcSetSelectionOwnerOrig; #endif From acc46fc217352b94f77a6b5b14808ea89875a2a1 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Mon, 17 Jun 2013 00:40:13 +0100 Subject: [PATCH 10/15] hw/xwin: Remove unused externs from winclipboardwrappers.c Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- hw/xwin/winclipboardwrappers.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/hw/xwin/winclipboardwrappers.c b/hw/xwin/winclipboardwrappers.c index 008088b6a..bfd6bff8b 100644 --- a/hw/xwin/winclipboardwrappers.c +++ b/hw/xwin/winclipboardwrappers.c @@ -56,8 +56,6 @@ DISPATCH_PROC(winProcSetSelectionOwner); * References to external symbols */ -extern unsigned int g_uiAuthDataLen; -extern char *g_pAuthData; extern Bool g_fClipboardLaunched; extern Bool g_fClipboardStarted; extern Bool g_fClipboard; From 9c45a1ad44f12ac25e1c3b7a18a3bceb85a2cf38 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Mon, 17 Jun 2013 16:58:47 +0100 Subject: [PATCH 11/15] hw/xwin: Remove prototype for non-existent winDeinitClipboard() Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- hw/xwin/winclipboard.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/hw/xwin/winclipboard.h b/hw/xwin/winclipboard.h index aa7fd4468..cb7769510 100644 --- a/hw/xwin/winclipboard.h +++ b/hw/xwin/winclipboard.h @@ -106,9 +106,6 @@ void void *winClipboardProc(void *); -void - winDeinitClipboard(void); - /* * winclipboardwndproc.c */ From 69401f38a697c941ea58351028f4cd4b810f9188 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Mon, 17 Jun 2013 18:37:26 +0100 Subject: [PATCH 12/15] hw/xwin: Remove unneeded forward declaration of winProcessXEventsTimeout() Remove unneeded forward declaration of winProcessXEventsTimeout(), the actual definition immediately follows. Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- hw/xwin/winclipboardwndproc.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/hw/xwin/winclipboardwndproc.c b/hw/xwin/winclipboardwndproc.c index e19f678a7..32712aafa 100644 --- a/hw/xwin/winclipboardwndproc.c +++ b/hw/xwin/winclipboardwndproc.c @@ -53,16 +53,6 @@ extern void *g_pClipboardDisplay; extern Window g_iClipboardWindow; extern Atom g_atomLastOwnedSelection; -/* - * Local function prototypes - */ - -static int - - -winProcessXEventsTimeout(HWND hwnd, int iWindow, Display * pDisplay, - Bool fUseUnicode, int iTimeoutSec); - /* * Process X events up to specified timeout */ From 2a08554a0bf80b862c15676c31ecd463b616518c Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Mon, 17 Jun 2013 23:54:01 +0100 Subject: [PATCH 13/15] hw/xwin: Remove unused extern g_fUseUnicode from winclipboardwndproc.c Signed-off-by: Jon TURNEY Reviewed-by: Marc Haesen --- hw/xwin/winclipboardwndproc.c | 1 - 1 file changed, 1 deletion(-) diff --git a/hw/xwin/winclipboardwndproc.c b/hw/xwin/winclipboardwndproc.c index 32712aafa..90dc9e0bb 100644 --- a/hw/xwin/winclipboardwndproc.c +++ b/hw/xwin/winclipboardwndproc.c @@ -48,7 +48,6 @@ * References to external symbols */ -extern Bool g_fUseUnicode; extern void *g_pClipboardDisplay; extern Window g_iClipboardWindow; extern Atom g_atomLastOwnedSelection; From 34932cef6cc800fbdf2f375506057ed8cd1e07f6 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Mon, 1 Apr 2013 13:43:00 +0100 Subject: [PATCH 14/15] hw/xwin: Fix compilation of winauth.c with -Werror=implicit-function-declaration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /jhbuild/checkout/xorg/xserver/hw/xwin/winauth.c: In function ‘MitGenerateCookie’: /jhbuild/checkout/xorg/xserver/hw/xwin/winauth.c:87:5: error: implicit declaration of function ‘MitAddCookie’ [-Werror=implicit-function-declaration] Signed-off-by: Jon TURNEY Reviewed-by: Colin Harrison Reviewed-by: Marc Haesen --- hw/xwin/winauth.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hw/xwin/winauth.c b/hw/xwin/winauth.c index 25d1fbd62..a6a7366a4 100644 --- a/hw/xwin/winauth.c +++ b/hw/xwin/winauth.c @@ -36,6 +36,7 @@ /* Includes for authorization */ #include "securitysrv.h" +#include "os/osdep.h" /* * Constants @@ -56,8 +57,7 @@ static char *g_pAuthData = NULL; */ #ifndef XCSECURITY -static - void +void GenerateRandomData(int len, char *buf) { int fd; @@ -70,9 +70,8 @@ GenerateRandomData(int len, char *buf) static char cookie[16]; /* 128 bits */ XID - static MitGenerateCookie(unsigned data_length, - char *data, + const char *data, XID id, unsigned *data_length_return, char **data_return) { int i = 0; From 3752a815800626ae93f64a856f5889aa6636344e Mon Sep 17 00:00:00 2001 From: Marc Haesen Date: Sat, 10 Aug 2013 17:38:38 +0100 Subject: [PATCH 15/15] hw/xwin: Remove unnecessary and incorrect HWND casts Signed-off-by: Marc Haesen Reviewed-by: Jon TURNEY Reviewed-by: Colin Harrison --- hw/xwin/winmultiwindowwm.c | 6 ++---- hw/xwin/winmultiwindowwndproc.c | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c index 685136818..1dd8ba5b3 100644 --- a/hw/xwin/winmultiwindowwm.c +++ b/hw/xwin/winmultiwindowwm.c @@ -1061,15 +1061,13 @@ winMultiWindowXMsgProc(void *pArg) (pProcArg->pDisplay, pProcArg->dwScreen, TRUE)) { if (!g_fAnotherWMRunning) { g_fAnotherWMRunning = TRUE; - SendMessage(*(HWND *) pProcArg->hwndScreen, WM_UNMANAGE, 0, - 0); + SendMessage(pProcArg->hwndScreen, WM_UNMANAGE, 0, 0); } } else { if (g_fAnotherWMRunning) { g_fAnotherWMRunning = FALSE; - SendMessage(*(HWND *) pProcArg->hwndScreen, WM_MANAGE, 0, - 0); + SendMessage(pProcArg->hwndScreen, WM_MANAGE, 0, 0); } } Sleep(500); diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c index a888f08ef..abb87ee4b 100644 --- a/hw/xwin/winmultiwindowwndproc.c +++ b/hw/xwin/winmultiwindowwndproc.c @@ -825,7 +825,7 @@ winTopLevelWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) } /* Prevent the mouse wheel from stalling when another window is minimized */ if (HIWORD(wParam) == 0 && LOWORD(wParam) == WA_ACTIVE && - (HWND) lParam != NULL && (HWND) lParam != (HWND) GetParent(hwnd)) + (HWND) lParam != NULL && (HWND) lParam != GetParent(hwnd)) SetFocus(hwnd); return 0;