Fixed a few issues with tsx11 locking.
Always map the client window when moving out of iconic state.
This commit is contained in:
parent
ca4fa36584
commit
704d035364
|
@ -95,7 +95,7 @@ inline static BOOL is_window_top_level( WND *win )
|
||||||
inline static BOOL is_client_window_mapped( WND *win )
|
inline static BOOL is_client_window_mapped( WND *win )
|
||||||
{
|
{
|
||||||
struct x11drv_win_data *data = win->pDriverData;
|
struct x11drv_win_data *data = win->pDriverData;
|
||||||
return !IsIconic( win->hwndSelf ) && !IsRectEmpty( &data->client_rect );
|
return !(win->dwStyle & WS_MINIMIZE) && !IsRectEmpty( &data->client_rect );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -217,9 +217,11 @@ inline static void destroy_icon_window( Display *display, WND *win )
|
||||||
struct x11drv_win_data *data = win->pDriverData;
|
struct x11drv_win_data *data = win->pDriverData;
|
||||||
|
|
||||||
if (!data->icon_window) return;
|
if (!data->icon_window) return;
|
||||||
|
wine_tsx11_lock();
|
||||||
XDeleteContext( display, data->icon_window, winContext );
|
XDeleteContext( display, data->icon_window, winContext );
|
||||||
XDestroyWindow( display, data->icon_window );
|
XDestroyWindow( display, data->icon_window );
|
||||||
data->icon_window = 0;
|
data->icon_window = 0;
|
||||||
|
wine_tsx11_unlock();
|
||||||
RemovePropA( win->hwndSelf, "__wine_x11_icon_window" );
|
RemovePropA( win->hwndSelf, "__wine_x11_icon_window" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,23 +359,6 @@ static void set_wm_hints( Display *display, WND *win )
|
||||||
}
|
}
|
||||||
else group_leader = data->whole_window;
|
else group_leader = data->whole_window;
|
||||||
|
|
||||||
/* wm hints */
|
|
||||||
if ((wm_hints = XAllocWMHints()))
|
|
||||||
{
|
|
||||||
wm_hints->flags = InputHint | StateHint | WindowGroupHint;
|
|
||||||
/* use globally active model if take focus is supported,
|
|
||||||
* passive model otherwise (cf. ICCCM) */
|
|
||||||
wm_hints->input = !wmTakeFocus;
|
|
||||||
|
|
||||||
set_icon_hints( display, win, wm_hints );
|
|
||||||
|
|
||||||
wm_hints->initial_state = (win->dwStyle & WS_MINIMIZE) ? IconicState : NormalState;
|
|
||||||
wm_hints->window_group = group_leader;
|
|
||||||
|
|
||||||
XSetWMHints( display, data->whole_window, wm_hints );
|
|
||||||
XFree(wm_hints);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* size hints */
|
/* size hints */
|
||||||
set_size_hints( display, win );
|
set_size_hints( display, win );
|
||||||
|
|
||||||
|
@ -390,6 +375,25 @@ static void set_wm_hints( Display *display, WND *win )
|
||||||
}
|
}
|
||||||
|
|
||||||
wine_tsx11_unlock();
|
wine_tsx11_unlock();
|
||||||
|
|
||||||
|
/* wm hints */
|
||||||
|
if ((wm_hints = TSXAllocWMHints()))
|
||||||
|
{
|
||||||
|
wm_hints->flags = InputHint | StateHint | WindowGroupHint;
|
||||||
|
/* use globally active model if take focus is supported,
|
||||||
|
* passive model otherwise (cf. ICCCM) */
|
||||||
|
wm_hints->input = !wmTakeFocus;
|
||||||
|
|
||||||
|
set_icon_hints( display, win, wm_hints );
|
||||||
|
|
||||||
|
wm_hints->initial_state = (win->dwStyle & WS_MINIMIZE) ? IconicState : NormalState;
|
||||||
|
wm_hints->window_group = group_leader;
|
||||||
|
|
||||||
|
wine_tsx11_lock();
|
||||||
|
XSetWMHints( display, data->whole_window, wm_hints );
|
||||||
|
XFree(wm_hints);
|
||||||
|
wine_tsx11_unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -405,14 +409,11 @@ void X11DRV_set_iconic_state( WND *win )
|
||||||
XWMHints* wm_hints;
|
XWMHints* wm_hints;
|
||||||
BOOL iconic = IsIconic( win->hwndSelf );
|
BOOL iconic = IsIconic( win->hwndSelf );
|
||||||
|
|
||||||
if (!(win->dwExStyle & WS_EX_MANAGED))
|
|
||||||
{
|
|
||||||
if (iconic) TSXUnmapWindow( display, data->client_window );
|
|
||||||
else if (is_client_window_mapped( win )) TSXMapWindow( display, data->client_window );
|
|
||||||
}
|
|
||||||
|
|
||||||
wine_tsx11_lock();
|
wine_tsx11_lock();
|
||||||
|
|
||||||
|
if (iconic) XUnmapWindow( display, data->client_window );
|
||||||
|
else if (is_client_window_mapped( win )) XMapWindow( display, data->client_window );
|
||||||
|
|
||||||
if (!(wm_hints = XGetWMHints( display, data->whole_window ))) wm_hints = XAllocWMHints();
|
if (!(wm_hints = XGetWMHints( display, data->whole_window ))) wm_hints = XAllocWMHints();
|
||||||
wm_hints->flags |= StateHint | IconPositionHint;
|
wm_hints->flags |= StateHint | IconPositionHint;
|
||||||
wm_hints->initial_state = iconic ? IconicState : NormalState;
|
wm_hints->initial_state = iconic ? IconicState : NormalState;
|
||||||
|
@ -686,7 +687,11 @@ static Window create_whole_window( Display *display, WND *win )
|
||||||
mask, &attr );
|
mask, &attr );
|
||||||
if (attr.cursor) XFreeCursor( display, attr.cursor );
|
if (attr.cursor) XFreeCursor( display, attr.cursor );
|
||||||
|
|
||||||
if (!data->whole_window) goto done;
|
if (!data->whole_window)
|
||||||
|
{
|
||||||
|
wine_tsx11_unlock();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* non-maximized child must be at bottom of Z order */
|
/* non-maximized child must be at bottom of Z order */
|
||||||
if ((win->dwStyle & (WS_CHILD|WS_MAXIMIZE)) == WS_CHILD)
|
if ((win->dwStyle & (WS_CHILD|WS_MAXIMIZE)) == WS_CHILD)
|
||||||
|
@ -696,10 +701,10 @@ static Window create_whole_window( Display *display, WND *win )
|
||||||
XConfigureWindow( display, data->whole_window, CWStackMode, &changes );
|
XConfigureWindow( display, data->whole_window, CWStackMode, &changes );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wine_tsx11_unlock();
|
||||||
|
|
||||||
if (is_top_level) set_wm_hints( display, win );
|
if (is_top_level) set_wm_hints( display, win );
|
||||||
|
|
||||||
done:
|
|
||||||
wine_tsx11_unlock();
|
|
||||||
return data->whole_window;
|
return data->whole_window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1066,9 +1071,9 @@ HWND X11DRV_SetParent( HWND hwnd, HWND parent )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_window_top_level( wndPtr )) set_wm_hints( display, wndPtr );
|
||||||
wine_tsx11_lock();
|
wine_tsx11_lock();
|
||||||
sync_window_style( display, wndPtr );
|
sync_window_style( display, wndPtr );
|
||||||
if (is_window_top_level( wndPtr )) set_wm_hints( display, wndPtr );
|
|
||||||
XReparentWindow( display, data->whole_window, get_client_window(pWndParent),
|
XReparentWindow( display, data->whole_window, get_client_window(pWndParent),
|
||||||
data->whole_rect.left, data->whole_rect.top );
|
data->whole_rect.left, data->whole_rect.top );
|
||||||
wine_tsx11_unlock();
|
wine_tsx11_unlock();
|
||||||
|
|
|
@ -1279,6 +1279,7 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
if (!fStretch) switch(rop) /* A few optimisations */
|
if (!fStretch) switch(rop) /* A few optimisations */
|
||||||
{
|
{
|
||||||
case BLACKNESS: /* 0x00 */
|
case BLACKNESS: /* 0x00 */
|
||||||
|
wine_tsx11_lock();
|
||||||
if ((dcDst->bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel)
|
if ((dcDst->bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel)
|
||||||
XSetFunction( gdi_display, physDevDst->gc, GXclear );
|
XSetFunction( gdi_display, physDevDst->gc, GXclear );
|
||||||
else
|
else
|
||||||
|
@ -1289,12 +1290,14 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
}
|
}
|
||||||
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
||||||
visRectDst.left, visRectDst.top, width, height );
|
visRectDst.left, visRectDst.top, width, height );
|
||||||
|
wine_tsx11_unlock();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case DSTINVERT: /* 0x55 */
|
case DSTINVERT: /* 0x55 */
|
||||||
if ((dcDst->bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel ||
|
if ((dcDst->bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel ||
|
||||||
!perfect_graphics())
|
!perfect_graphics())
|
||||||
{
|
{
|
||||||
|
wine_tsx11_lock();
|
||||||
XSetFunction( gdi_display, physDevDst->gc, GXinvert );
|
XSetFunction( gdi_display, physDevDst->gc, GXinvert );
|
||||||
|
|
||||||
if( X11DRV_PALETTE_PaletteFlags & (X11DRV_PALETTE_PRIVATE | X11DRV_PALETTE_VIRTUAL) )
|
if( X11DRV_PALETTE_PaletteFlags & (X11DRV_PALETTE_PRIVATE | X11DRV_PALETTE_VIRTUAL) )
|
||||||
|
@ -1312,6 +1315,7 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
}
|
}
|
||||||
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
||||||
visRectDst.left, visRectDst.top, width, height );
|
visRectDst.left, visRectDst.top, width, height );
|
||||||
|
wine_tsx11_unlock();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1320,9 +1324,11 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
if (perfect_graphics()) break;
|
if (perfect_graphics()) break;
|
||||||
if (X11DRV_SetupGCForBrush( dcDst ))
|
if (X11DRV_SetupGCForBrush( dcDst ))
|
||||||
{
|
{
|
||||||
|
wine_tsx11_lock();
|
||||||
XSetFunction( gdi_display, physDevDst->gc, GXxor );
|
XSetFunction( gdi_display, physDevDst->gc, GXxor );
|
||||||
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
||||||
visRectDst.left, visRectDst.top, width, height );
|
visRectDst.left, visRectDst.top, width, height );
|
||||||
|
wine_tsx11_unlock();
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
@ -1330,25 +1336,30 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
if (perfect_graphics()) break;
|
if (perfect_graphics()) break;
|
||||||
if (X11DRV_SetupGCForBrush( dcDst ))
|
if (X11DRV_SetupGCForBrush( dcDst ))
|
||||||
{
|
{
|
||||||
|
wine_tsx11_lock();
|
||||||
XSetFunction( gdi_display, physDevDst->gc, GXequiv );
|
XSetFunction( gdi_display, physDevDst->gc, GXequiv );
|
||||||
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
||||||
visRectDst.left, visRectDst.top, width, height );
|
visRectDst.left, visRectDst.top, width, height );
|
||||||
|
wine_tsx11_unlock();
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case SRCCOPY: /* 0xcc */
|
case SRCCOPY: /* 0xcc */
|
||||||
if (dcSrc->bitsPerPixel == dcDst->bitsPerPixel)
|
if (dcSrc->bitsPerPixel == dcDst->bitsPerPixel)
|
||||||
{
|
{
|
||||||
|
wine_tsx11_lock();
|
||||||
XSetFunction( gdi_display, physDevDst->gc, GXcopy );
|
XSetFunction( gdi_display, physDevDst->gc, GXcopy );
|
||||||
XCopyArea( gdi_display, physDevSrc->drawable,
|
XCopyArea( gdi_display, physDevSrc->drawable,
|
||||||
physDevDst->drawable, physDevDst->gc,
|
physDevDst->drawable, physDevDst->gc,
|
||||||
visRectSrc.left, visRectSrc.top,
|
visRectSrc.left, visRectSrc.top,
|
||||||
width, height, visRectDst.left, visRectDst.top );
|
width, height, visRectDst.left, visRectDst.top );
|
||||||
physDevDst->exposures++;
|
physDevDst->exposures++;
|
||||||
|
wine_tsx11_unlock();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
if (dcSrc->bitsPerPixel == 1)
|
if (dcSrc->bitsPerPixel == 1)
|
||||||
{
|
{
|
||||||
|
wine_tsx11_lock();
|
||||||
XSetBackground( gdi_display, physDevDst->gc, physDevDst->textPixel );
|
XSetBackground( gdi_display, physDevDst->gc, physDevDst->textPixel );
|
||||||
XSetForeground( gdi_display, physDevDst->gc, physDevDst->backgroundPixel );
|
XSetForeground( gdi_display, physDevDst->gc, physDevDst->backgroundPixel );
|
||||||
XSetFunction( gdi_display, physDevDst->gc, GXcopy );
|
XSetFunction( gdi_display, physDevDst->gc, GXcopy );
|
||||||
|
@ -1357,18 +1368,22 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
visRectSrc.left, visRectSrc.top,
|
visRectSrc.left, visRectSrc.top,
|
||||||
width, height, visRectDst.left, visRectDst.top, 1 );
|
width, height, visRectDst.left, visRectDst.top, 1 );
|
||||||
physDevDst->exposures++;
|
physDevDst->exposures++;
|
||||||
|
wine_tsx11_unlock();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PATCOPY: /* 0xf0 */
|
case PATCOPY: /* 0xf0 */
|
||||||
if (!X11DRV_SetupGCForBrush( dcDst )) return TRUE;
|
if (!X11DRV_SetupGCForBrush( dcDst )) return TRUE;
|
||||||
|
wine_tsx11_lock();
|
||||||
XSetFunction( gdi_display, physDevDst->gc, GXcopy );
|
XSetFunction( gdi_display, physDevDst->gc, GXcopy );
|
||||||
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
||||||
visRectDst.left, visRectDst.top, width, height );
|
visRectDst.left, visRectDst.top, width, height );
|
||||||
|
wine_tsx11_unlock();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case WHITENESS: /* 0xff */
|
case WHITENESS: /* 0xff */
|
||||||
|
wine_tsx11_lock();
|
||||||
if ((dcDst->bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel)
|
if ((dcDst->bitsPerPixel == 1) || !X11DRV_PALETTE_PaletteToXPixel)
|
||||||
XSetFunction( gdi_display, physDevDst->gc, GXset );
|
XSetFunction( gdi_display, physDevDst->gc, GXset );
|
||||||
else
|
else
|
||||||
|
@ -1380,9 +1395,12 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
}
|
}
|
||||||
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
XFillRectangle( gdi_display, physDevDst->drawable, physDevDst->gc,
|
||||||
visRectDst.left, visRectDst.top, width, height );
|
visRectDst.left, visRectDst.top, width, height );
|
||||||
|
wine_tsx11_unlock();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wine_tsx11_lock();
|
||||||
|
|
||||||
tmpGC = XCreateGC( gdi_display, physDevDst->drawable, 0, NULL );
|
tmpGC = XCreateGC( gdi_display, physDevDst->drawable, 0, NULL );
|
||||||
XSetSubwindowMode( gdi_display, tmpGC, IncludeInferiors );
|
XSetSubwindowMode( gdi_display, tmpGC, IncludeInferiors );
|
||||||
XSetGraphicsExposures( gdi_display, tmpGC, False );
|
XSetGraphicsExposures( gdi_display, tmpGC, False );
|
||||||
|
@ -1401,6 +1419,7 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
BITBLT_GetSrcArea( dcSrc, dcDst, pixmaps[SRC], tmpGC,
|
BITBLT_GetSrcArea( dcSrc, dcDst, pixmaps[SRC], tmpGC,
|
||||||
xSrc, ySrc, &visRectSrc );
|
xSrc, ySrc, &visRectSrc );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (useDst) BITBLT_GetDstArea( dcDst, pixmaps[DST], tmpGC, &visRectDst );
|
if (useDst) BITBLT_GetDstArea( dcDst, pixmaps[DST], tmpGC, &visRectDst );
|
||||||
if (usePat) fNullBrush = !X11DRV_SetupGCForPatBlt( dcDst, tmpGC, TRUE );
|
if (usePat) fNullBrush = !X11DRV_SetupGCForPatBlt( dcDst, tmpGC, TRUE );
|
||||||
else fNullBrush = FALSE;
|
else fNullBrush = FALSE;
|
||||||
|
@ -1449,6 +1468,7 @@ static BOOL BITBLT_InternalStretchBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
if (pixmaps[SRC]) XFreePixmap( gdi_display, pixmaps[SRC] );
|
if (pixmaps[SRC]) XFreePixmap( gdi_display, pixmaps[SRC] );
|
||||||
if (pixmaps[TMP]) XFreePixmap( gdi_display, pixmaps[TMP] );
|
if (pixmaps[TMP]) XFreePixmap( gdi_display, pixmaps[TMP] );
|
||||||
XFreeGC( gdi_display, tmpGC );
|
XFreeGC( gdi_display, tmpGC );
|
||||||
|
wine_tsx11_unlock();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1462,9 +1482,7 @@ BOOL X11DRV_PatBlt( DC *dc, INT left, INT top,
|
||||||
BOOL result;
|
BOOL result;
|
||||||
|
|
||||||
X11DRV_LockDIBSection( dc, DIB_Status_GdiMod, FALSE );
|
X11DRV_LockDIBSection( dc, DIB_Status_GdiMod, FALSE );
|
||||||
wine_tsx11_lock();
|
|
||||||
result = BITBLT_InternalStretchBlt( dc, left, top, width, height, NULL, 0, 0, 0, 0, rop );
|
result = BITBLT_InternalStretchBlt( dc, left, top, width, height, NULL, 0, 0, 0, 0, rop );
|
||||||
wine_tsx11_unlock();
|
|
||||||
X11DRV_UnlockDIBSection( dc, TRUE );
|
X11DRV_UnlockDIBSection( dc, TRUE );
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1525,10 +1543,8 @@ BOOL X11DRV_BitBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
X11DRV_CoerceDIBSection( dcDst, DIB_Status_GdiMod, FALSE );
|
X11DRV_CoerceDIBSection( dcDst, DIB_Status_GdiMod, FALSE );
|
||||||
X11DRV_CoerceDIBSection( dcSrc, DIB_Status_GdiMod, FALSE );
|
X11DRV_CoerceDIBSection( dcSrc, DIB_Status_GdiMod, FALSE );
|
||||||
|
|
||||||
wine_tsx11_lock();
|
|
||||||
result = BITBLT_InternalStretchBlt( dcDst, xDst, yDst, width, height,
|
result = BITBLT_InternalStretchBlt( dcDst, xDst, yDst, width, height,
|
||||||
dcSrc, xSrc, ySrc, width, height, rop );
|
dcSrc, xSrc, ySrc, width, height, rop );
|
||||||
wine_tsx11_unlock();
|
|
||||||
|
|
||||||
END:
|
END:
|
||||||
X11DRV_UnlockDIBSection( dcSrc, FALSE );
|
X11DRV_UnlockDIBSection( dcSrc, FALSE );
|
||||||
|
@ -1551,10 +1567,8 @@ BOOL X11DRV_StretchBlt( DC *dcDst, INT xDst, INT yDst,
|
||||||
X11DRV_LockDIBSection( dcDst, DIB_Status_GdiMod, FALSE );
|
X11DRV_LockDIBSection( dcDst, DIB_Status_GdiMod, FALSE );
|
||||||
X11DRV_LockDIBSection( dcSrc, DIB_Status_GdiMod, FALSE );
|
X11DRV_LockDIBSection( dcSrc, DIB_Status_GdiMod, FALSE );
|
||||||
|
|
||||||
wine_tsx11_lock();
|
|
||||||
result = BITBLT_InternalStretchBlt( dcDst, xDst, yDst, widthDst, heightDst,
|
result = BITBLT_InternalStretchBlt( dcDst, xDst, yDst, widthDst, heightDst,
|
||||||
dcSrc, xSrc, ySrc, widthSrc, heightSrc, rop );
|
dcSrc, xSrc, ySrc, widthSrc, heightSrc, rop );
|
||||||
wine_tsx11_unlock();
|
|
||||||
|
|
||||||
X11DRV_UnlockDIBSection( dcSrc, FALSE );
|
X11DRV_UnlockDIBSection( dcSrc, FALSE );
|
||||||
X11DRV_UnlockDIBSection( dcDst, TRUE );
|
X11DRV_UnlockDIBSection( dcDst, TRUE );
|
||||||
|
|
|
@ -1254,13 +1254,13 @@ X11DRV_ExtFloodFill( DC *dc, INT x, INT y, COLORREF color,
|
||||||
rect.bottom - rect.top,
|
rect.bottom - rect.top,
|
||||||
AllPlanes, ZPixmap ))) return FALSE;
|
AllPlanes, ZPixmap ))) return FALSE;
|
||||||
|
|
||||||
wine_tsx11_lock();
|
|
||||||
if (X11DRV_SetupGCForBrush( dc ))
|
if (X11DRV_SetupGCForBrush( dc ))
|
||||||
{
|
{
|
||||||
/* Update the pixmap from the DIB section */
|
/* Update the pixmap from the DIB section */
|
||||||
X11DRV_LockDIBSection(dc, DIB_Status_GdiMod, FALSE);
|
X11DRV_LockDIBSection(dc, DIB_Status_GdiMod, FALSE);
|
||||||
|
|
||||||
/* ROP mode is always GXcopy for flood-fill */
|
/* ROP mode is always GXcopy for flood-fill */
|
||||||
|
wine_tsx11_lock();
|
||||||
XSetFunction( gdi_display, physDev->gc, GXcopy );
|
XSetFunction( gdi_display, physDev->gc, GXcopy );
|
||||||
X11DRV_InternalFloodFill(image, dc,
|
X11DRV_InternalFloodFill(image, dc,
|
||||||
XLPTODP(dc,x) + dc->DCOrgX - rect.left,
|
XLPTODP(dc,x) + dc->DCOrgX - rect.left,
|
||||||
|
@ -1268,12 +1268,12 @@ X11DRV_ExtFloodFill( DC *dc, INT x, INT y, COLORREF color,
|
||||||
rect.left, rect.top,
|
rect.left, rect.top,
|
||||||
X11DRV_PALETTE_ToPhysical( dc, color ),
|
X11DRV_PALETTE_ToPhysical( dc, color ),
|
||||||
fillType );
|
fillType );
|
||||||
|
wine_tsx11_unlock();
|
||||||
/* Update the DIBSection of the dc's bitmap */
|
/* Update the DIBSection of the dc's bitmap */
|
||||||
X11DRV_UnlockDIBSection(dc, TRUE);
|
X11DRV_UnlockDIBSection(dc, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
XDestroyImage( image );
|
TSXDestroyImage( image );
|
||||||
wine_tsx11_unlock();
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue