From 946a4448aff65ff19bb989f66f94173683ea18ac Mon Sep 17 00:00:00 2001
From: Alexandre Julliard <julliard@winehq.org>
Date: Sun, 30 Jul 2000 13:50:27 +0000
Subject: [PATCH] Cleaned up a few USER dependencies.

---
 if1632/thunk.c     |  4 ++++
 include/callback.h |  6 ++++++
 include/keyboard.h |  1 -
 loader/dos/dosvm.c |  2 +-
 misc/main.c        | 23 ++---------------------
 objects/bitmap.c   |  9 +++++----
 objects/dib.c      | 13 +++++++++----
 objects/palette.c  | 37 +++++++++++++++----------------------
 windows/keyboard.c | 14 +++++++++++---
 9 files changed, 53 insertions(+), 56 deletions(-)

diff --git a/if1632/thunk.c b/if1632/thunk.c
index 6a9f3531fb1..6fb6d22b73c 100644
--- a/if1632/thunk.c
+++ b/if1632/thunk.c
@@ -190,6 +190,10 @@ void THUNK_InitCallout(void)
         GETADDR( DispatchMessageA );
         GETADDR( RedrawWindow );
         GETADDR( WaitForInputIdle );
+        GETADDR( MsgWaitForMultipleObjects );
+        GETADDR( WindowFromDC );
+        GETADDR( GetForegroundWindow );
+        GETADDR( IsChild );
         GETADDR( MessageBoxA );
         GETADDR( MessageBoxW );
 #undef GETADDR
diff --git a/include/callback.h b/include/callback.h
index 3ca00524835..a0bea6a573f 100644
--- a/include/callback.h
+++ b/include/callback.h
@@ -100,6 +100,12 @@ typedef struct
     void WINAPI (*UserYield16)( void );
     WORD WINAPI (*DestroyIcon32)( HGLOBAL16 handle, UINT16 flags );
     DWORD WINAPI (*WaitForInputIdle)( HANDLE hProcess, DWORD dwTimeOut );
+    DWORD WINAPI (*MsgWaitForMultipleObjects)( DWORD nCount, HANDLE *pHandles,
+                                               BOOL fWaitAll, DWORD dwMilliseconds,
+                                               DWORD dwWakeMask );
+    HWND WINAPI (*WindowFromDC)( HDC hDC );
+    HWND WINAPI (*GetForegroundWindow)(void);
+    BOOL WINAPI (*IsChild)( HWND parent, HWND child );
 
     INT WINAPI (*MessageBoxA)( HWND hWnd, LPCSTR text, LPCSTR title, UINT type );
     INT WINAPI (*MessageBoxW)( HWND hwnd, LPCWSTR text, LPCWSTR title, UINT type );
diff --git a/include/keyboard.h b/include/keyboard.h
index 7ad803ed423..1f1bc5b92d3 100644
--- a/include/keyboard.h
+++ b/include/keyboard.h
@@ -31,7 +31,6 @@ VOID WINAPI KEYBOARD_Disable(VOID);
 
 extern BOOL KEYBOARD_GetBeepActive(void);
 extern void KEYBOARD_SetBeepActive(BOOL bActivate);
-extern void KEYBOARD_Beep(void);
 
 extern void KEYBOARD_SendEvent(BYTE bVk, BYTE bScan, DWORD dwFlags, DWORD posX, DWORD posY, DWORD time);
 
diff --git a/loader/dos/dosvm.c b/loader/dos/dosvm.c
index 755ce811221..b5fd5446b0f 100644
--- a/loader/dos/dosvm.c
+++ b/loader/dos/dosvm.c
@@ -431,7 +431,7 @@ void DOSVM_Wait( int read_pipe, HANDLE hObject )
 	break;
     }
     /* nothing yet, block while waiting for something to do */
-    waitret=MsgWaitForMultipleObjects(objc,objs,FALSE,INFINITE,QS_ALLINPUT);
+    waitret=Callout.MsgWaitForMultipleObjects(objc,objs,FALSE,INFINITE,QS_ALLINPUT);
     if (waitret==(DWORD)-1) {
       ERR_(module)("dosvm wait error=%ld\n",GetLastError());
     }
diff --git a/misc/main.c b/misc/main.c
index bb803e9b377..68ec23a7c74 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -29,7 +29,6 @@
 #include "winnls.h"
 #include "console.h"
 #include "monitor.h"
-#include "keyboard.h"
 #include "gdi.h"
 #include "user.h"
 #include "windef.h"
@@ -585,32 +584,14 @@ void MAIN_WineInit(void)
     atexit(called_at_exit);
 }
 
-/***********************************************************************
- *           MessageBeep16   (USER.104)
- */
-void WINAPI MessageBeep16( UINT16 i )
-{
-    MessageBeep( i );
-}
-
-
-/***********************************************************************
- *           MessageBeep   (USER32.390)
- */
-BOOL WINAPI MessageBeep( UINT i )
-{
-    KEYBOARD_Beep();
-    return TRUE;
-}
-
-
 /***********************************************************************
  *           Beep   (KERNEL32.11)
  */
 BOOL WINAPI Beep( DWORD dwFreq, DWORD dwDur )
 {
+    static char beep = '\a';
     /* dwFreq and dwDur are ignored by Win95 */
-    KEYBOARD_Beep();
+    if (isatty(2)) write( 2, &beep, 1 );
     return TRUE;
 }
 
diff --git a/objects/bitmap.c b/objects/bitmap.c
index a637ddc8bd6..4b8de05e519 100644
--- a/objects/bitmap.c
+++ b/objects/bitmap.c
@@ -16,11 +16,9 @@
 #include "global.h"
 #include "cursoricon.h"
 #include "debugtools.h"
-#include "monitor.h"
 #include "wine/winuser16.h"
 
-DEFAULT_DEBUG_CHANNEL(bitmap)
-DECLARE_DEBUG_CHANNEL(resource)
+DEFAULT_DEBUG_CHANNEL(bitmap);
 
 BITMAP_DRIVER *BITMAP_Driver = NULL;
 
@@ -74,7 +72,10 @@ HBITMAP16 WINAPI CreateUserBitmap16( INT16 width, INT16 height, UINT16 planes,
 HBITMAP16 WINAPI CreateUserDiscardableBitmap16( WORD dummy, 
                                                 INT16 width, INT16 height )
 {
-    return CreateUserBitmap16( width, height, 1, MONITOR_GetDepth(&MONITOR_PrimaryMonitor), NULL );
+    HDC hdc = CreateDCA( "DISPLAY", NULL, NULL, NULL );
+    HBITMAP16 ret = CreateCompatibleBitmap16( hdc, width, height );
+    DeleteDC( hdc );
+    return ret;
 }
 
 
diff --git a/objects/dib.c b/objects/dib.c
index ff655214ed1..4947f122d97 100644
--- a/objects/dib.c
+++ b/objects/dib.c
@@ -10,10 +10,9 @@
 #include "callback.h"
 #include "dc.h"
 #include "debugtools.h"
-#include "monitor.h"
 #include "palette.h"
 
-DEFAULT_DEBUG_CHANNEL(bitmap)
+DEFAULT_DEBUG_CHANNEL(bitmap);
 
 /***********************************************************************
  *           DIB_GetDIBWidthBytes
@@ -849,8 +848,14 @@ HBITMAP WINAPI CreateDIBitmap( HDC hdc, const BITMAPINFOHEADER *header,
 
     /* Now create the bitmap */
 
-    handle = fColor ? CreateBitmap( width, height, 1, MONITOR_GetDepth(&MONITOR_PrimaryMonitor), NULL ) :
-                      CreateBitmap( width, height, 1, 1, NULL );
+    if (fColor)
+    {
+        HDC tmpdc = CreateDCA( "DISPLAY", NULL, NULL, NULL );
+        handle = CreateCompatibleBitmap( tmpdc, width, height );
+        DeleteDC( tmpdc );
+    }
+    else handle = CreateBitmap( width, height, 1, 1, NULL );
+
     if (!handle) return 0;
 
     if (init == CBM_INIT)
diff --git a/objects/palette.c b/objects/palette.c
index 9e9050d10b2..16e3d262ef4 100644
--- a/objects/palette.c
+++ b/objects/palette.c
@@ -19,6 +19,7 @@
 #include "color.h"
 #include "palette.h"
 #include "debugtools.h"
+#include "callback.h"
 #include "winerror.h"
 
 DEFAULT_DEBUG_CHANNEL(palette)
@@ -766,25 +767,17 @@ HPALETTE WINAPI SelectPalette(
     HPALETTE hPal,         /* [in] Handle of logical color palette */
     BOOL bForceBackground) /* [in] Foreground/background mode */
 {
-    WORD	wBkgPalette = 1;
-    PALETTEOBJ* lpt = (PALETTEOBJ*) GDI_GetObjPtr( hPal, PALETTE_MAGIC );
+    WORD wBkgPalette = 1;
 
-    TRACE("dc=%04x,pal=%04x,force=%i\n", hDC, hPal, bForceBackground);
-    if( !lpt ) return 0;
-
-    TRACE(" entries = %d\n", lpt->logpalette.palNumEntries);
-    GDI_HEAP_UNLOCK( hPal );
-
-    if( hPal != STOCK_DEFAULT_PALETTE )
+    if (!bForceBackground && (hPal != STOCK_DEFAULT_PALETTE))
     {
-	HWND hWnd = WindowFromDC( hDC );
-	HWND hActive = GetActiveWindow();
-	
-	/* set primary palette if it's related to current active */
-
-	if((!hWnd || (hActive == hWnd || IsChild16(hActive,hWnd))) &&
-            !bForceBackground )
-	    wBkgPalette = 0;
+	HWND hwnd = Callout.WindowFromDC( hDC );
+        if (hwnd)
+        {
+            HWND hForeground = Callout.GetForegroundWindow();
+            /* set primary palette if it's related to current active */
+            if (hForeground == hwnd || Callout.IsChild(hForeground,hwnd)) wBkgPalette = 0;
+        }
     }
     return GDISelectPalette16( hDC, hPal, wBkgPalette);
 }
@@ -824,8 +817,8 @@ UINT WINAPI RealizePalette(
 	/* Send palette change notification */
 
 	HWND hWnd;
- 	if( (hWnd = WindowFromDC( hDC )) )
-            SendMessage16( HWND_BROADCAST, WM_PALETTECHANGED, hWnd, 0L);
+ 	if( (hWnd = Callout.WindowFromDC( hDC )) )
+            Callout.SendMessageA( HWND_BROADCAST, WM_PALETTECHANGED, hWnd, 0L);
     }
 
     GDI_HEAP_UNLOCK( hDC );
@@ -843,13 +836,13 @@ INT16 WINAPI UpdateColors16( HDC16 hDC )
 
     if (!(dc = (DC *) GDI_GetObjPtr( hDC, DC_MAGIC ))) return 0;
 
-    hWnd = WindowFromDC( hDC );
+    hWnd = Callout.WindowFromDC( hDC );
 
     /* Docs say that we have to remap current drawable pixel by pixel
      * but it would take forever given the speed of XGet/PutPixel.
      */
-    if (hWnd && dc->w.devCaps->sizePalette ) 
-	InvalidateRect( hWnd, NULL, FALSE );
+    if (hWnd && dc->w.devCaps->sizePalette )
+        Callout.RedrawWindow( hWnd, NULL, 0, RDW_INVALIDATE );
 
     GDI_HEAP_UNLOCK( hDC );
 
diff --git a/windows/keyboard.c b/windows/keyboard.c
index d9c14072d88..ccfe803decc 100644
--- a/windows/keyboard.c
+++ b/windows/keyboard.c
@@ -274,10 +274,18 @@ void KEYBOARD_SetBeepActive(BOOL bActivate)
 }
 
 /***********************************************************************
- *		KEYBOARD_Beep
+ *           MessageBeep16   (USER.104)
  */
-void KEYBOARD_Beep(void)
+void WINAPI MessageBeep16( UINT16 i )
 {
-    USER_Driver->pBeep();
+    MessageBeep( i );
 }
 
+/***********************************************************************
+ *           MessageBeep   (USER32.390)
+ */
+BOOL WINAPI MessageBeep( UINT i )
+{
+    USER_Driver->pBeep();
+    return TRUE;
+}
-- 
GitLab