diff --git a/dlls/user/win.c b/dlls/user/win.c index d2f539c2716..fb0b8660d92 100644 --- a/dlls/user/win.c +++ b/dlls/user/win.c @@ -617,8 +617,6 @@ BOOL WIN_CreateDesktopWindow(void) TRACE("Creating desktop window\n"); - if (!WINPOS_CreateInternalPosAtom()) return FALSE; - SERVER_START_REQ( create_window ) { req->parent = 0; diff --git a/dlls/user/winpos.c b/dlls/user/winpos.c index 3dd63cd828e..ac51650df86 100644 --- a/dlls/user/winpos.c +++ b/dlls/user/winpos.c @@ -79,15 +79,16 @@ typedef struct static LPCSTR atomInternalPos; - -/*********************************************************************** - * WINPOS_CreateInternalPosAtom - */ -BOOL WINPOS_CreateInternalPosAtom() +static inline INTERNALPOS *get_internal_pos( HWND hwnd ) { - LPCSTR str = "SysIP"; - atomInternalPos = (LPCSTR)(DWORD)GlobalAddAtomA(str); - return (atomInternalPos) ? TRUE : FALSE; + if (!atomInternalPos) return NULL; + return GetPropA( hwnd, atomInternalPos ); +} + +static inline void set_internal_pos( HWND hwnd, INTERNALPOS *pos ) +{ + if (!atomInternalPos) atomInternalPos = (LPCSTR)(DWORD)GlobalAddAtomA("SysIP"); + SetPropA( hwnd, atomInternalPos, pos ); } /*********************************************************************** @@ -97,9 +98,9 @@ BOOL WINPOS_CreateInternalPosAtom() */ void WINPOS_CheckInternalPos( HWND hwnd ) { - LPINTERNALPOS lpPos = (LPINTERNALPOS) GetPropA( hwnd, atomInternalPos ); + LPINTERNALPOS lpPos = get_internal_pos( hwnd ); - if( lpPos ) + if ( lpPos ) { if( IsWindow(lpPos->hwndIconTitle) ) DestroyWindow( lpPos->hwndIconTitle ); @@ -633,7 +634,7 @@ BOOL WINAPI MoveWindow( HWND hwnd, INT x, INT y, INT cx, INT cy, */ static LPINTERNALPOS WINPOS_InitInternalPos( WND* wnd ) { - LPINTERNALPOS lpPos = GetPropA( wnd->hwndSelf, atomInternalPos ); + LPINTERNALPOS lpPos = get_internal_pos( wnd->hwndSelf ); if( !lpPos ) { /* this happens when the window is minimized/maximized @@ -642,7 +643,7 @@ static LPINTERNALPOS WINPOS_InitInternalPos( WND* wnd ) lpPos = HeapAlloc( GetProcessHeap(), 0, sizeof(INTERNALPOS) ); if( !lpPos ) return NULL; - SetPropA( wnd->hwndSelf, atomInternalPos, (HANDLE)lpPos ); + set_internal_pos( wnd->hwndSelf, lpPos ); lpPos->hwndIconTitle = 0; /* defer until needs to be shown */ lpPos->rectNormal.left = wnd->rectWindow.left; lpPos->rectNormal.top = wnd->rectWindow.top; @@ -677,7 +678,7 @@ static LPINTERNALPOS WINPOS_InitInternalPos( WND* wnd ) */ BOOL WINPOS_RedrawIconTitle( HWND hWnd ) { - LPINTERNALPOS lpPos = (LPINTERNALPOS)GetPropA( hWnd, atomInternalPos ); + LPINTERNALPOS lpPos = get_internal_pos( hWnd ); if( lpPos ) { if( lpPos->hwndIconTitle ) @@ -695,7 +696,7 @@ BOOL WINPOS_RedrawIconTitle( HWND hWnd ) */ BOOL WINPOS_ShowIconTitle( HWND hwnd, BOOL bShow ) { - LPINTERNALPOS lpPos = (LPINTERNALPOS)GetPropA( hwnd, atomInternalPos ); + LPINTERNALPOS lpPos = get_internal_pos( hwnd ); if (lpPos && !GetPropA( hwnd, "__wine_x11_managed" )) { @@ -786,7 +787,7 @@ void WINPOS_GetMinMaxInfo( HWND hwnd, POINT *maxSize, POINT *maxPos, MinMax.ptMaxSize.x += 2 * xinc; MinMax.ptMaxSize.y += 2 * yinc; - lpPos = (LPINTERNALPOS)GetPropA( hwnd, atomInternalPos ); + lpPos = get_internal_pos( hwnd ); if( lpPos && !EMPTYPOINT(lpPos->ptMaxPos) ) { MinMax.ptMaxPosition.x = lpPos->ptMaxPos.x; diff --git a/include/winpos.h b/include/winpos.h index 369432a88a7..27a950cbd63 100644 --- a/include/winpos.h +++ b/include/winpos.h @@ -42,6 +42,5 @@ extern LONG WINPOS_HandleWindowPosChanging(HWND hwnd, WINDOWPOS *winpos); extern HWND WINPOS_WindowFromPoint( HWND hwndScope, POINT pt, INT *hittest ); extern void WINPOS_CheckInternalPos( HWND hwnd ); extern void WINPOS_ActivateOtherWindow( HWND hwnd ); -extern BOOL WINPOS_CreateInternalPosAtom(void); #endif /* __WINE_WINPOS_H */