Release 960928
Fri Sep 27 14:18:42 1996 Alexandre Julliard <julliard@lrc.epfl.ch> * [controls/button.c] Fixed focus rectangle size and clipping. * [controls/scroll.c] Converted to Win32 and added support for scroll page. Completed SetScrollInfo() and implemented other Win32 functions. * [files/file.c] Removed FILE_Read() (use _lread32 instead). * [objects/dce.c] [include/dce.h] Allocate DCE on the Win32 heap, and use pointers instead of handles. Implemented Win32 version of DC functions. * [windows/painting.c] Attempt to make CS_PARENTDC style work again. Wed Sep 25 23:40:52 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu> * [windows/dce.c] [windows/winpos.c] Override SaveUnder attribute when painting took place in a window below. Force X to raise activated window in seamless mode. * [misc/clipboard.c] [windows/event.c] Translation between DOS and Unix text formats and several other fixes for the sudden selection loss. * [windows/message.c] Apply "first" and "last" when checking for WM_QUIT in MSG_PeekMessage(). * [windows/win.c] Rearranged DestroyWindow() to fit "Windows Internals" description. * [windows/win.c] [windows/winpos.c] [windows/nonclient.c] Misc. fixes to CBT hook calls. * [controls/menu.c] [misc/user.c] Fixup resident popup menu window so that it doesn't get destroyed by USER_AppExit(). * [loader/module.c] [loader/task.c] [windows/event.c] Process "unsafe" X events outside the scheduler to prevent deadlocks. * [windows/message.c] [windows/queue.c] [windows/winpos.c] Lots of fixes for better Win16 multitasking. Wed Sep 25 20:36:30 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de> * [include/windows.h] Added some missing HOOK defines. * [misc/shell.c][if1632/shell32.spec][include/shell.h] SHGetFileInfoA stub added (win95 mplayer.exe /play bla.avi). * [win32/console.c][include/wincon.h] GetConsoleScreenBufferInfo, GetLargestConsoleWindowSize added. * [misc/registry.c] Some null ptr fixes. * [loader/pe_image.c] Fixed exported function lookup. (msvcrt20.dll) Add debugsyms for entrypoint, exported functions and sections. * [multimedia/mmsystem.c] MCIOpen: support for element opens (mplayer.exe /play bla.avi). * [several] Added several missing things/stubs/simple thunks from win32 to win16 code. Sat Sep 21 17:27:44 1996 O.Flebbe <flebbe@science-computing.uni-tuebingen.de> * [windows/property.c] Fixed debugging of 16 Bit RemoveProp(). * [debugger/memory.c] Added DEBUG_checkmap_bad() for linux. Thu Sep 19 20:48:31 1996 Albrecht Kleine <kleine@ak.sax.de> * [windows/event.c] [windows/hook.c] Use EnableHardwareInput() for JournalPlayback hook. * [controls/listbox.c] Changed handling of LB_GETITEMRECT in empty listboxes. Thu Sep 19 13:34:35 1996 Slaven Rezic <eserte@cs.tu-berlin.de> * [misc/main.c] Fixes to X resources handling. Wed Sep 18 00:31:15 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk> * [objects/metafile.c] [include/gdi.h] [objects/dc.c] Individual handle table created for each metafile. Fixed GlobalReAlloc() bug in MF_AddHandleDC() (was MF_AddHandleInternal). * [windows/graphics.c] [objects/dc.c] Rectangle() changed to work better with wide pens and PS_NULL. Use JoinMiter. * [windows/winpos.c] Make the whole (non X) window invalid on resize if CS_[VH]REDRAW is set. * [windows/nonclient.c] AdjustWindowRectEx() should perform calculations even if the window is minimized. * [windows/mdi.c] Better handling of system button painting. Maximized windows can contain scroll bars. Icons now maximize properly. * [windows/defwnd.c] [windows/nonclient.c] [controls/menu.c] Improved greying of items in system menu. WM_INITMEMUPOPUP no longer caught in DefWndProc, DEFWND_InitSysMenuPopup moved to menu.c. Mon Sep 16 21:30:00 1996 Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de> * [several files] Fix missing includes and wrong printing arguments. * [controls/listbox.c] Don't sort drives in ListBoxDirectory(). Sat Sep 14 09:05:47 1996 Petri Tuomola <ptuomola@xs4all.nl> * [windows/dialog.c] Fixed handling of Shift-TAB in dialogs. Thu Sep 12 18:31:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk> * [if1632/gdi32.spec] Added SelectClipRgn - call win16 version. * [if1632/user32.spec] Added GetAsyncKeyState, GetMenuItemID and GetMenuStringA. * [include/wincon.h] Added COORD and SMALL_RECT typedefs, moved CONSOLE_SCREEN_BUFFER_INFO out of #if 0 protected portion of file. * [loader/pe_image.c] PE_InitTEB() - Tidy up, bug fix to stack pointer value (Borland programs now work better) * [win32/console.c] Added stub functions for GetConsoleScreenBufferInfo and GetLargestConsoleWindowSize * [win32/findfile.c] FindFirstFile32A() - removed erroneous strcpy * [windows/keyboard.c] GetAsyncKeyState() - bug fix - now returns value as per Microsoft specification. NB - I still have doubts about some other functions in this file.
This commit is contained in:
parent
8bbf8180e5
commit
2c69f6d8e9
16
ANNOUNCE
16
ANNOUNCE
|
@ -1,12 +1,14 @@
|
||||||
This is release 960913 of Wine, the MS Windows emulator. This is still a
|
This is release 960928 of Wine, the MS Windows emulator. This is still a
|
||||||
developer's only release. There are many bugs and many unimplemented API
|
developer's only release. There are many bugs and many unimplemented API
|
||||||
features. Most applications still do not work correctly.
|
features. Most applications still do not work correctly.
|
||||||
|
|
||||||
Patches should be submitted to "julliard@lrc.epfl.ch". Please don't
|
Patches should be submitted to "julliard@lrc.epfl.ch". Please don't
|
||||||
forget to include a ChangeLog entry.
|
forget to include a ChangeLog entry.
|
||||||
|
|
||||||
WHAT'S NEW with Wine-960913: (see ChangeLog for details)
|
WHAT'S NEW with Wine-960928: (see ChangeLog for details)
|
||||||
- Better Win32 file handling.
|
- Intertask messaging improved.
|
||||||
|
- Many painting fixes.
|
||||||
|
- Still more Win32 support.
|
||||||
- Lots of bug fixes.
|
- Lots of bug fixes.
|
||||||
|
|
||||||
See the README file in the distribution for installation instructions.
|
See the README file in the distribution for installation instructions.
|
||||||
|
@ -15,10 +17,10 @@ Because of lags created by using mirror, this message may reach you before
|
||||||
the release is available at the ftp sites. The sources will be available
|
the release is available at the ftp sites. The sources will be available
|
||||||
from the following locations:
|
from the following locations:
|
||||||
|
|
||||||
ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-960913.tar.gz
|
ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-960928.tar.gz
|
||||||
ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-960913.tar.gz
|
ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-960928.tar.gz
|
||||||
ftp://ftp.infomagic.com/pub/mirrors/linux/wine/development/Wine-960913.tar.gz
|
ftp://ftp.infomagic.com/pub/mirrors/linux/wine/development/Wine-960928.tar.gz
|
||||||
ftp://aris.com/pub/linux/ALPHA/Wine/development/Wine-960913.tar.gz
|
ftp://aris.com/pub/linux/ALPHA/Wine/development/Wine-960928.tar.gz
|
||||||
|
|
||||||
It should also be available from any site that mirrors tsx-11 or sunsite.
|
It should also be available from any site that mirrors tsx-11 or sunsite.
|
||||||
|
|
||||||
|
|
168
ChangeLog
168
ChangeLog
|
@ -1,3 +1,171 @@
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
Fri Sep 27 14:18:42 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
|
||||||
|
|
||||||
|
* [controls/button.c]
|
||||||
|
Fixed focus rectangle size and clipping.
|
||||||
|
|
||||||
|
* [controls/scroll.c]
|
||||||
|
Converted to Win32 and added support for scroll page.
|
||||||
|
Completed SetScrollInfo() and implemented other Win32 functions.
|
||||||
|
|
||||||
|
* [files/file.c]
|
||||||
|
Removed FILE_Read() (use _lread32 instead).
|
||||||
|
|
||||||
|
* [objects/dce.c] [include/dce.h]
|
||||||
|
Allocate DCE on the Win32 heap, and use pointers instead of
|
||||||
|
handles.
|
||||||
|
Implemented Win32 version of DC functions.
|
||||||
|
|
||||||
|
* [windows/painting.c]
|
||||||
|
Attempt to make CS_PARENTDC style work again.
|
||||||
|
|
||||||
|
Wed Sep 25 23:40:52 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
|
||||||
|
|
||||||
|
* [windows/dce.c] [windows/winpos.c]
|
||||||
|
Override SaveUnder attribute when painting took place
|
||||||
|
in a window below. Force X to raise activated window
|
||||||
|
in seamless mode.
|
||||||
|
|
||||||
|
* [misc/clipboard.c] [windows/event.c]
|
||||||
|
Translation between DOS and Unix text formats and several
|
||||||
|
other fixes for the sudden selection loss.
|
||||||
|
|
||||||
|
* [windows/message.c]
|
||||||
|
Apply "first" and "last" when checking for WM_QUIT in
|
||||||
|
MSG_PeekMessage().
|
||||||
|
|
||||||
|
* [windows/win.c]
|
||||||
|
Rearranged DestroyWindow() to fit "Windows Internals"
|
||||||
|
description.
|
||||||
|
|
||||||
|
* [windows/win.c] [windows/winpos.c] [windows/nonclient.c]
|
||||||
|
Misc. fixes to CBT hook calls.
|
||||||
|
|
||||||
|
* [controls/menu.c] [misc/user.c]
|
||||||
|
Fixup resident popup menu window so that it doesn't get
|
||||||
|
destroyed by USER_AppExit().
|
||||||
|
|
||||||
|
* [loader/module.c] [loader/task.c] [windows/event.c]
|
||||||
|
Process "unsafe" X events outside the scheduler to prevent
|
||||||
|
deadlocks.
|
||||||
|
|
||||||
|
* [windows/message.c] [windows/queue.c] [windows/winpos.c]
|
||||||
|
Lots of fixes for better Win16 multitasking.
|
||||||
|
|
||||||
|
Wed Sep 25 20:36:30 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
|
||||||
|
|
||||||
|
* [include/windows.h]
|
||||||
|
Added some missing HOOK defines.
|
||||||
|
|
||||||
|
* [misc/shell.c][if1632/shell32.spec][include/shell.h]
|
||||||
|
SHGetFileInfoA stub added (win95 mplayer.exe /play bla.avi).
|
||||||
|
|
||||||
|
* [win32/console.c][include/wincon.h]
|
||||||
|
GetConsoleScreenBufferInfo, GetLargestConsoleWindowSize added.
|
||||||
|
|
||||||
|
* [misc/registry.c]
|
||||||
|
Some null ptr fixes.
|
||||||
|
|
||||||
|
* [loader/pe_image.c]
|
||||||
|
Fixed exported function lookup. (msvcrt20.dll)
|
||||||
|
Add debugsyms for entrypoint, exported functions and sections.
|
||||||
|
|
||||||
|
* [multimedia/mmsystem.c]
|
||||||
|
MCIOpen: support for element opens (mplayer.exe /play bla.avi).
|
||||||
|
|
||||||
|
* [several]
|
||||||
|
Added several missing things/stubs/simple thunks from win32
|
||||||
|
to win16 code.
|
||||||
|
|
||||||
|
Sat Sep 21 17:27:44 1996 O.Flebbe <flebbe@science-computing.uni-tuebingen.de>
|
||||||
|
|
||||||
|
* [windows/property.c]
|
||||||
|
Fixed debugging of 16 Bit RemoveProp().
|
||||||
|
|
||||||
|
* [debugger/memory.c]
|
||||||
|
Added DEBUG_checkmap_bad() for linux.
|
||||||
|
|
||||||
|
Thu Sep 19 20:48:31 1996 Albrecht Kleine <kleine@ak.sax.de>
|
||||||
|
|
||||||
|
* [windows/event.c] [windows/hook.c]
|
||||||
|
Use EnableHardwareInput() for JournalPlayback hook.
|
||||||
|
|
||||||
|
* [controls/listbox.c]
|
||||||
|
Changed handling of LB_GETITEMRECT in empty listboxes.
|
||||||
|
|
||||||
|
Thu Sep 19 13:34:35 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
|
||||||
|
|
||||||
|
* [misc/main.c]
|
||||||
|
Fixes to X resources handling.
|
||||||
|
|
||||||
|
Wed Sep 18 00:31:15 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
|
||||||
|
|
||||||
|
* [objects/metafile.c] [include/gdi.h] [objects/dc.c]
|
||||||
|
Individual handle table created for each metafile. Fixed
|
||||||
|
GlobalReAlloc() bug in MF_AddHandleDC() (was MF_AddHandleInternal).
|
||||||
|
|
||||||
|
* [windows/graphics.c] [objects/dc.c]
|
||||||
|
Rectangle() changed to work better with wide pens and PS_NULL.
|
||||||
|
Use JoinMiter.
|
||||||
|
|
||||||
|
* [windows/winpos.c]
|
||||||
|
Make the whole (non X) window invalid on resize if CS_[VH]REDRAW
|
||||||
|
is set.
|
||||||
|
|
||||||
|
* [windows/nonclient.c]
|
||||||
|
AdjustWindowRectEx() should perform calculations even if the
|
||||||
|
window is minimized.
|
||||||
|
|
||||||
|
* [windows/mdi.c]
|
||||||
|
Better handling of system button painting. Maximized windows can
|
||||||
|
contain scroll bars. Icons now maximize properly.
|
||||||
|
|
||||||
|
* [windows/defwnd.c] [windows/nonclient.c] [controls/menu.c]
|
||||||
|
Improved greying of items in system menu. WM_INITMEMUPOPUP no
|
||||||
|
longer caught in DefWndProc, DEFWND_InitSysMenuPopup moved to
|
||||||
|
menu.c.
|
||||||
|
|
||||||
|
Mon Sep 16 21:30:00 1996 Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de>
|
||||||
|
|
||||||
|
* [several files]
|
||||||
|
Fix missing includes and wrong printing arguments.
|
||||||
|
|
||||||
|
* [controls/listbox.c]
|
||||||
|
Don't sort drives in ListBoxDirectory().
|
||||||
|
|
||||||
|
Sat Sep 14 09:05:47 1996 Petri Tuomola <ptuomola@xs4all.nl>
|
||||||
|
|
||||||
|
* [windows/dialog.c]
|
||||||
|
Fixed handling of Shift-TAB in dialogs.
|
||||||
|
|
||||||
|
Thu Sep 12 18:31:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
|
||||||
|
|
||||||
|
* [if1632/gdi32.spec]
|
||||||
|
Added SelectClipRgn - call win16 version.
|
||||||
|
|
||||||
|
* [if1632/user32.spec]
|
||||||
|
Added GetAsyncKeyState, GetMenuItemID and GetMenuStringA.
|
||||||
|
|
||||||
|
* [include/wincon.h]
|
||||||
|
Added COORD and SMALL_RECT typedefs, moved CONSOLE_SCREEN_BUFFER_INFO
|
||||||
|
out of #if 0 protected portion of file.
|
||||||
|
|
||||||
|
* [loader/pe_image.c]
|
||||||
|
PE_InitTEB() - Tidy up, bug fix to stack pointer value (Borland
|
||||||
|
programs now work better)
|
||||||
|
|
||||||
|
* [win32/console.c]
|
||||||
|
Added stub functions for GetConsoleScreenBufferInfo and
|
||||||
|
GetLargestConsoleWindowSize
|
||||||
|
|
||||||
|
* [win32/findfile.c]
|
||||||
|
FindFirstFile32A() - removed erroneous strcpy
|
||||||
|
|
||||||
|
* [windows/keyboard.c]
|
||||||
|
GetAsyncKeyState() - bug fix - now returns value as per Microsoft
|
||||||
|
specification. NB - I still have doubts about some other functions
|
||||||
|
in this file.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Wed Sep 11 18:08:30 1996 Albrecht Kleine <kleine@ak.sax.de>
|
Wed Sep 11 18:08:30 1996 Albrecht Kleine <kleine@ak.sax.de>
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,12 @@
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
|
|
||||||
static void PB_Paint( WND *wndPtr, HDC hDC, WORD action );
|
static void PB_Paint( WND *wndPtr, HDC32 hDC, WORD action );
|
||||||
static void PB_PaintGrayOnGray(HDC hDC,HFONT hFont,RECT16 *rc,char *text);
|
static void PB_PaintGrayOnGray(HDC32 hDC,HFONT hFont,RECT32 *rc,char *text);
|
||||||
static void CB_Paint( WND *wndPtr, HDC hDC, WORD action );
|
static void CB_Paint( WND *wndPtr, HDC32 hDC, WORD action );
|
||||||
static void GB_Paint( WND *wndPtr, HDC hDC, WORD action );
|
static void GB_Paint( WND *wndPtr, HDC32 hDC, WORD action );
|
||||||
static void UB_Paint( WND *wndPtr, HDC hDC, WORD action );
|
static void UB_Paint( WND *wndPtr, HDC32 hDC, WORD action );
|
||||||
static void OB_Paint( WND *wndPtr, HDC hDC, WORD action );
|
static void OB_Paint( WND *wndPtr, HDC32 hDC, WORD action );
|
||||||
static void BUTTON_CheckAutoRadioButton( WND *wndPtr );
|
static void BUTTON_CheckAutoRadioButton( WND *wndPtr );
|
||||||
|
|
||||||
#define MAX_BTN_TYPE 12
|
#define MAX_BTN_TYPE 12
|
||||||
|
@ -36,7 +36,7 @@ static const WORD maxCheckState[MAX_BTN_TYPE] =
|
||||||
BUTTON_UNCHECKED /* BS_OWNERDRAW */
|
BUTTON_UNCHECKED /* BS_OWNERDRAW */
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*pfPaint)( WND *wndPtr, HDC hdc, WORD action );
|
typedef void (*pfPaint)( WND *wndPtr, HDC32 hdc, WORD action );
|
||||||
|
|
||||||
static const pfPaint btnPaintFunc[MAX_BTN_TYPE] =
|
static const pfPaint btnPaintFunc[MAX_BTN_TYPE] =
|
||||||
{
|
{
|
||||||
|
@ -56,9 +56,9 @@ static const pfPaint btnPaintFunc[MAX_BTN_TYPE] =
|
||||||
|
|
||||||
#define PAINT_BUTTON(wndPtr,style,action) \
|
#define PAINT_BUTTON(wndPtr,style,action) \
|
||||||
if (btnPaintFunc[style]) { \
|
if (btnPaintFunc[style]) { \
|
||||||
HDC hdc = GetDC( (wndPtr)->hwndSelf ); \
|
HDC32 hdc = GetDC32( (wndPtr)->hwndSelf ); \
|
||||||
(btnPaintFunc[style])(wndPtr,hdc,action); \
|
(btnPaintFunc[style])(wndPtr,hdc,action); \
|
||||||
ReleaseDC( (wndPtr)->hwndSelf, hdc ); }
|
ReleaseDC32( (wndPtr)->hwndSelf, hdc ); }
|
||||||
|
|
||||||
#define BUTTON_SEND_CTLCOLOR(wndPtr,hdc) \
|
#define BUTTON_SEND_CTLCOLOR(wndPtr,hdc) \
|
||||||
SendMessage32A( GetParent32((wndPtr)->hwndSelf), WM_CTLCOLORBTN, \
|
SendMessage32A( GetParent32((wndPtr)->hwndSelf), WM_CTLCOLORBTN, \
|
||||||
|
@ -124,7 +124,7 @@ LRESULT ButtonWndProc(HWND32 hWnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
SendMessage32A( hWnd, BM_SETSTATE32, TRUE, 0 );
|
SendMessage32A( hWnd, BM_SETSTATE32, TRUE, 0 );
|
||||||
SetFocus32( hWnd );
|
SetFocus32( hWnd );
|
||||||
SetCapture( hWnd );
|
SetCapture32( hWnd );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
case WM_LBUTTONUP:
|
||||||
|
@ -155,7 +155,7 @@ LRESULT ButtonWndProc(HWND32 hWnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
if (GetCapture() == hWnd)
|
if (GetCapture32() == hWnd)
|
||||||
{
|
{
|
||||||
GetClientRect16( hWnd, &rect );
|
GetClientRect16( hWnd, &rect );
|
||||||
SendMessage32A( hWnd, BM_SETSTATE32,
|
SendMessage32A( hWnd, BM_SETSTATE32,
|
||||||
|
@ -249,16 +249,14 @@ LRESULT ButtonWndProc(HWND32 hWnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
|
||||||
* Push Button Functions
|
* Push Button Functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void PB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
static void PB_Paint( WND *wndPtr, HDC32 hDC, WORD action )
|
||||||
{
|
{
|
||||||
RECT16 rc;
|
RECT32 rc;
|
||||||
HPEN16 hOldPen;
|
HPEN16 hOldPen;
|
||||||
HBRUSH hOldBrush;
|
HBRUSH hOldBrush;
|
||||||
DWORD dwTextSize;
|
|
||||||
TEXTMETRIC16 tm;
|
|
||||||
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
|
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
|
||||||
|
|
||||||
GetClientRect16(wndPtr->hwndSelf, &rc);
|
GetClientRect32( wndPtr->hwndSelf, &rc );
|
||||||
|
|
||||||
/* Send WM_CTLCOLOR to allow changing the font (the colors are fixed) */
|
/* Send WM_CTLCOLOR to allow changing the font (the colors are fixed) */
|
||||||
if (infoPtr->hFont) SelectObject( hDC, infoPtr->hFont );
|
if (infoPtr->hFont) SelectObject( hDC, infoPtr->hFont );
|
||||||
|
@ -274,12 +272,12 @@ static void PB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
||||||
SetPixel( hDC, rc.right-1, rc.top, GetSysColor(COLOR_WINDOW) );
|
SetPixel( hDC, rc.right-1, rc.top, GetSysColor(COLOR_WINDOW) );
|
||||||
SetPixel( hDC, rc.right-1, rc.bottom-1, GetSysColor(COLOR_WINDOW) );
|
SetPixel( hDC, rc.right-1, rc.bottom-1, GetSysColor(COLOR_WINDOW) );
|
||||||
}
|
}
|
||||||
InflateRect16( &rc, -1, -1 );
|
InflateRect32( &rc, -1, -1 );
|
||||||
|
|
||||||
if ((wndPtr->dwStyle & 0x000f) == BS_DEFPUSHBUTTON)
|
if ((wndPtr->dwStyle & 0x000f) == BS_DEFPUSHBUTTON)
|
||||||
{
|
{
|
||||||
Rectangle(hDC, rc.left, rc.top, rc.right, rc.bottom);
|
Rectangle(hDC, rc.left, rc.top, rc.right, rc.bottom);
|
||||||
InflateRect16( &rc, -1, -1 );
|
InflateRect32( &rc, -1, -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (infoPtr->state & BUTTON_HIGHLIGHTED)
|
if (infoPtr->state & BUTTON_HIGHLIGHTED)
|
||||||
|
@ -306,20 +304,22 @@ static void PB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
||||||
{
|
{
|
||||||
SetTextColor( hDC, (wndPtr->dwStyle & WS_DISABLED) ?
|
SetTextColor( hDC, (wndPtr->dwStyle & WS_DISABLED) ?
|
||||||
GetSysColor(COLOR_GRAYTEXT) : GetSysColor(COLOR_BTNTEXT));
|
GetSysColor(COLOR_GRAYTEXT) : GetSysColor(COLOR_BTNTEXT));
|
||||||
DrawText16( hDC, wndPtr->text, -1, &rc,
|
DrawText32A( hDC, wndPtr->text, -1, &rc,
|
||||||
DT_SINGLELINE | DT_CENTER | DT_VCENTER );
|
DT_SINGLELINE | DT_CENTER | DT_VCENTER );
|
||||||
/* do we have the focus? */
|
/* do we have the focus? */
|
||||||
if (infoPtr->state & BUTTON_HASFOCUS)
|
if (infoPtr->state & BUTTON_HASFOCUS)
|
||||||
{
|
{
|
||||||
short xdelta, ydelta;
|
RECT32 r = { 0, 0, 0, 0 };
|
||||||
dwTextSize = GetTextExtent(hDC,wndPtr->text,strlen(wndPtr->text));
|
INT32 xdelta, ydelta;
|
||||||
GetTextMetrics16( hDC, &tm );
|
|
||||||
xdelta = ((rc.right - rc.left) - LOWORD(dwTextSize) - 1) / 2;
|
DrawText32A( hDC, wndPtr->text, -1, &r,
|
||||||
ydelta = ((rc.bottom - rc.top) - tm.tmHeight - 1) / 2;
|
DT_SINGLELINE | DT_CALCRECT );
|
||||||
|
xdelta = ((rc.right - rc.left) - (r.right - r.left) - 1) / 2;
|
||||||
|
ydelta = ((rc.bottom - rc.top) - (r.bottom - r.top) - 1) / 2;
|
||||||
if (xdelta < 0) xdelta = 0;
|
if (xdelta < 0) xdelta = 0;
|
||||||
if (ydelta < 0) ydelta = 0;
|
if (ydelta < 0) ydelta = 0;
|
||||||
InflateRect16( &rc, -xdelta, -ydelta );
|
InflateRect32( &rc, -xdelta, -ydelta );
|
||||||
DrawFocusRect16( hDC, &rc );
|
DrawFocusRect32( hDC, &rc );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -334,17 +334,17 @@ static void PB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
||||||
* using a raster brush to avoid gray text on gray background
|
* using a raster brush to avoid gray text on gray background
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void PB_PaintGrayOnGray(HDC hDC,HFONT hFont,RECT16 *rc,char *text)
|
void PB_PaintGrayOnGray(HDC32 hDC,HFONT hFont,RECT32 *rc,char *text)
|
||||||
{
|
{
|
||||||
static int Pattern[] = {0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55};
|
static int Pattern[] = {0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55};
|
||||||
HBITMAP hbm = CreateBitmap(8, 8, 1, 1, Pattern);
|
HBITMAP hbm = CreateBitmap(8, 8, 1, 1, Pattern);
|
||||||
HDC hdcMem = CreateCompatibleDC(hDC);
|
HDC hdcMem = CreateCompatibleDC(hDC);
|
||||||
HBITMAP hbmMem;
|
HBITMAP hbmMem;
|
||||||
HBRUSH hBr;
|
HBRUSH hBr;
|
||||||
RECT16 rect,rc2;
|
RECT32 rect,rc2;
|
||||||
|
|
||||||
rect=*rc;
|
rect=*rc;
|
||||||
DrawText16( hDC, text, -1, &rect, DT_SINGLELINE | DT_CALCRECT);
|
DrawText32A( hDC, text, -1, &rect, DT_SINGLELINE | DT_CALCRECT);
|
||||||
rc2=rect;
|
rc2=rect;
|
||||||
rect.left=(rc->right-rect.right)/2; /* for centering text bitmap */
|
rect.left=(rc->right-rect.right)/2; /* for centering text bitmap */
|
||||||
rect.top=(rc->bottom-rect.bottom)/2;
|
rect.top=(rc->bottom-rect.bottom)/2;
|
||||||
|
@ -354,7 +354,7 @@ void PB_PaintGrayOnGray(HDC hDC,HFONT hFont,RECT16 *rc,char *text)
|
||||||
DeleteObject( hbm);
|
DeleteObject( hbm);
|
||||||
PatBlt( hdcMem,0,0,rect.right,rect.bottom,WHITENESS);
|
PatBlt( hdcMem,0,0,rect.right,rect.bottom,WHITENESS);
|
||||||
if (hFont) SelectObject( hdcMem, hFont);
|
if (hFont) SelectObject( hdcMem, hFont);
|
||||||
DrawText16( hdcMem, text, -1, &rc2, DT_SINGLELINE);
|
DrawText32A( hdcMem, text, -1, &rc2, DT_SINGLELINE);
|
||||||
PatBlt( hdcMem,0,0,rect.right,rect.bottom,0xFA0089);
|
PatBlt( hdcMem,0,0,rect.right,rect.bottom,0xFA0089);
|
||||||
DeleteObject( SelectObject( hdcMem,hBr));
|
DeleteObject( SelectObject( hdcMem,hBr));
|
||||||
BitBlt( hDC,rect.left,rect.top,rect.right,rect.bottom,hdcMem,0,0,0x990000);
|
BitBlt( hDC,rect.left,rect.top,rect.right,rect.bottom,hdcMem,0,0,0x990000);
|
||||||
|
@ -367,13 +367,12 @@ void PB_PaintGrayOnGray(HDC hDC,HFONT hFont,RECT16 *rc,char *text)
|
||||||
* Check Box & Radio Button Functions
|
* Check Box & Radio Button Functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void CB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
static void CB_Paint( WND *wndPtr, HDC32 hDC, WORD action )
|
||||||
{
|
{
|
||||||
RECT16 rc;
|
RECT16 rc;
|
||||||
HBRUSH hBrush;
|
HBRUSH hBrush;
|
||||||
int textlen, delta, x, y;
|
int textlen, delta, x, y;
|
||||||
TEXTMETRIC16 tm;
|
TEXTMETRIC16 tm;
|
||||||
SIZE16 size;
|
|
||||||
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
|
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
|
||||||
|
|
||||||
GetClientRect16(wndPtr->hwndSelf, &rc);
|
GetClientRect16(wndPtr->hwndSelf, &rc);
|
||||||
|
@ -404,20 +403,22 @@ static void CB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
||||||
if (wndPtr->dwStyle & WS_DISABLED)
|
if (wndPtr->dwStyle & WS_DISABLED)
|
||||||
SetTextColor( hDC, GetSysColor(COLOR_GRAYTEXT) );
|
SetTextColor( hDC, GetSysColor(COLOR_GRAYTEXT) );
|
||||||
DrawText16( hDC, wndPtr->text, textlen, &rc,
|
DrawText16( hDC, wndPtr->text, textlen, &rc,
|
||||||
DT_SINGLELINE | DT_VCENTER );
|
DT_SINGLELINE | DT_VCENTER | DT_NOCLIP );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((action == ODA_FOCUS) ||
|
if ((action == ODA_FOCUS) ||
|
||||||
((action == ODA_DRAWENTIRE) && (infoPtr->state & BUTTON_HASFOCUS)))
|
((action == ODA_DRAWENTIRE) && (infoPtr->state & BUTTON_HASFOCUS)))
|
||||||
{
|
{
|
||||||
GetTextExtentPoint16( hDC, wndPtr->text, textlen, &size );
|
RECT16 rect = { 0, 0, 0, 0 };
|
||||||
|
DrawText16( hDC, wndPtr->text, textlen, &rect,
|
||||||
|
DT_SINGLELINE | DT_CALCRECT );
|
||||||
if (delta > 1)
|
if (delta > 1)
|
||||||
{
|
{
|
||||||
rc.top += delta - 1;
|
rc.top += delta - 1;
|
||||||
rc.bottom -= delta + 1;
|
rc.bottom -= delta + 1;
|
||||||
}
|
}
|
||||||
rc.left--;
|
rc.left--;
|
||||||
rc.right = MIN( rc.left + size.cx + 2, rc.right );
|
rc.right = rc.left + rect.right + 2;
|
||||||
DrawFocusRect16( hDC, &rc );
|
DrawFocusRect16( hDC, &rc );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -444,10 +445,9 @@ static void BUTTON_CheckAutoRadioButton( WND *wndPtr )
|
||||||
* Group Box Functions
|
* Group Box Functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void GB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
static void GB_Paint( WND *wndPtr, HDC32 hDC, WORD action )
|
||||||
{
|
{
|
||||||
RECT16 rc;
|
RECT16 rc;
|
||||||
SIZE16 size;
|
|
||||||
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
|
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
|
||||||
|
|
||||||
if (action != ODA_DRAWENTIRE) return;
|
if (action != ODA_DRAWENTIRE) return;
|
||||||
|
@ -465,13 +465,10 @@ static void GB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
||||||
LineTo( hDC, rc.left, rc.top+2 );
|
LineTo( hDC, rc.left, rc.top+2 );
|
||||||
|
|
||||||
if (!wndPtr->text) return;
|
if (!wndPtr->text) return;
|
||||||
GetTextExtentPoint16( hDC, wndPtr->text, strlen(wndPtr->text), &size );
|
|
||||||
rc.left += 10;
|
|
||||||
rc.right = rc.left + size.cx + 1;
|
|
||||||
rc.bottom = size.cy;
|
|
||||||
if (wndPtr->dwStyle & WS_DISABLED)
|
if (wndPtr->dwStyle & WS_DISABLED)
|
||||||
SetTextColor( hDC, GetSysColor(COLOR_GRAYTEXT) );
|
SetTextColor( hDC, GetSysColor(COLOR_GRAYTEXT) );
|
||||||
DrawText16( hDC, wndPtr->text, -1, &rc, DT_SINGLELINE );
|
rc.left += 10;
|
||||||
|
DrawText16( hDC, wndPtr->text, -1, &rc, DT_SINGLELINE | DT_NOCLIP );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -479,7 +476,7 @@ static void GB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
||||||
* User Button Functions
|
* User Button Functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void UB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
static void UB_Paint( WND *wndPtr, HDC32 hDC, WORD action )
|
||||||
{
|
{
|
||||||
RECT16 rc;
|
RECT16 rc;
|
||||||
HBRUSH hBrush;
|
HBRUSH hBrush;
|
||||||
|
@ -503,7 +500,7 @@ static void UB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
||||||
* Ownerdrawn Button Functions
|
* Ownerdrawn Button Functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void OB_Paint( WND *wndPtr, HDC hDC, WORD action )
|
static void OB_Paint( WND *wndPtr, HDC32 hDC, WORD action )
|
||||||
{
|
{
|
||||||
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
|
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
|
||||||
DRAWITEMSTRUCT32 dis;
|
DRAWITEMSTRUCT32 dis;
|
||||||
|
|
|
@ -87,7 +87,7 @@ void ComboUpdateWindow(HWND hwnd, LPHEADLIST lphl, LPHEADCOMBO lphc, BOOL repain
|
||||||
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
|
|
||||||
if (wndPtr->dwStyle & WS_VSCROLL)
|
if (wndPtr->dwStyle & WS_VSCROLL)
|
||||||
SetScrollRange(lphc->hWndLBox,SB_VERT,0,ListMaxFirstVisible(lphl),TRUE);
|
SetScrollRange32(lphc->hWndLBox,SB_VERT,0,ListMaxFirstVisible(lphl),TRUE);
|
||||||
if (repaint && lphl->bRedrawFlag) InvalidateRect32( hwnd, NULL, TRUE );
|
if (repaint && lphl->bRedrawFlag) InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,7 +240,11 @@ static LRESULT CBPaint(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
Rectangle(hdc,lphc->RectButton.left-1,lphc->RectButton.top-1,
|
Rectangle(hdc,lphc->RectButton.left-1,lphc->RectButton.top-1,
|
||||||
lphc->RectButton.right+1,lphc->RectButton.bottom+1);
|
lphc->RectButton.right+1,lphc->RectButton.bottom+1);
|
||||||
GRAPH_DrawReliefRect(hdc, &lphc->RectButton, 2, 2, FALSE);
|
{
|
||||||
|
RECT32 r;
|
||||||
|
CONV_RECT16TO32( &lphc->RectButton, &r );
|
||||||
|
GRAPH_DrawReliefRect(hdc, &r, 2, 2, FALSE);
|
||||||
|
}
|
||||||
GRAPH_DrawBitmap(hdc, hComboBit,
|
GRAPH_DrawBitmap(hdc, hComboBit,
|
||||||
lphc->RectButton.left + 2,lphc->RectButton.top + 2,
|
lphc->RectButton.left + 2,lphc->RectButton.top + 2,
|
||||||
0, 0, CBitWidth, CBitHeight );
|
0, 0, CBitWidth, CBitHeight );
|
||||||
|
@ -889,7 +893,7 @@ static LRESULT CBLKeyDown( HWND hwnd, WPARAM wParam, LPARAM lParam )
|
||||||
SendMessage16(GetParent16(hwnd), WM_COMMAND,ID_CLB,MAKELONG(0,CBN_SELCHANGE));
|
SendMessage16(GetParent16(hwnd), WM_COMMAND,ID_CLB,MAKELONG(0,CBN_SELCHANGE));
|
||||||
lphl->ItemFocused = newFocused;
|
lphl->ItemFocused = newFocused;
|
||||||
ListBoxScrollToFocus(lphl);
|
ListBoxScrollToFocus(lphl);
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -971,7 +975,7 @@ static LRESULT CBLPaint( HWND hwnd, WPARAM wParam, LPARAM lParam )
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wndPtr->dwStyle & WS_VSCROLL)
|
if (wndPtr->dwStyle & WS_VSCROLL)
|
||||||
SetScrollRange(hwnd, SB_VERT, 0, ListMaxFirstVisible(lphl), TRUE);
|
SetScrollRange32(hwnd, SB_VERT, 0, ListMaxFirstVisible(lphl), TRUE);
|
||||||
|
|
||||||
SelectObject(hdc,hOldFont);
|
SelectObject(hdc,hOldFont);
|
||||||
EndPaint16( hwnd, &ps );
|
EndPaint16( hwnd, &ps );
|
||||||
|
@ -1008,7 +1012,7 @@ static LRESULT CBLLButtonDown( HWND hwnd, WPARAM wParam, LPARAM lParam )
|
||||||
RECT16 rectsel;
|
RECT16 rectsel;
|
||||||
|
|
||||||
/* SetFocus32(hwnd); */
|
/* SetFocus32(hwnd); */
|
||||||
SetCapture(hwnd);
|
SetCapture32(hwnd);
|
||||||
|
|
||||||
lphl->PrevFocused = lphl->ItemFocused;
|
lphl->PrevFocused = lphl->ItemFocused;
|
||||||
|
|
||||||
|
@ -1030,7 +1034,7 @@ static LRESULT CBLLButtonUp( HWND hwnd, WPARAM wParam, LPARAM lParam )
|
||||||
{
|
{
|
||||||
LPHEADLIST lphl = CLBoxGetListHeader(hwnd);
|
LPHEADLIST lphl = CLBoxGetListHeader(hwnd);
|
||||||
|
|
||||||
if (GetCapture() == hwnd) ReleaseCapture();
|
if (GetCapture32() == hwnd) ReleaseCapture();
|
||||||
|
|
||||||
if(!lphl)
|
if(!lphl)
|
||||||
{
|
{
|
||||||
|
@ -1070,7 +1074,7 @@ hwnd,wParam,lParam,y,lphl->ItemFocused,wRet,rectsel.left,rectsel.top,rectsel.rig
|
||||||
if (y < CBLMM_EDGE) {
|
if (y < CBLMM_EDGE) {
|
||||||
if (lphl->FirstVisible > 0) {
|
if (lphl->FirstVisible > 0) {
|
||||||
lphl->FirstVisible--;
|
lphl->FirstVisible--;
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
ListBoxSetCurSel(lphl, wRet);
|
ListBoxSetCurSel(lphl, wRet);
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1079,7 +1083,7 @@ hwnd,wParam,lParam,y,lphl->ItemFocused,wRet,rectsel.left,rectsel.top,rectsel.rig
|
||||||
else if (y >= (rect.bottom-CBLMM_EDGE)) {
|
else if (y >= (rect.bottom-CBLMM_EDGE)) {
|
||||||
if (lphl->FirstVisible < ListMaxFirstVisible(lphl)) {
|
if (lphl->FirstVisible < ListMaxFirstVisible(lphl)) {
|
||||||
lphl->FirstVisible++;
|
lphl->FirstVisible++;
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
ListBoxSetCurSel(lphl, wRet);
|
ListBoxSetCurSel(lphl, wRet);
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1136,7 +1140,7 @@ static LRESULT CBLVScroll( HWND hwnd, WPARAM wParam, LPARAM lParam )
|
||||||
lphl->FirstVisible = ListMaxFirstVisible(lphl);
|
lphl->FirstVisible = ListMaxFirstVisible(lphl);
|
||||||
|
|
||||||
if (y != lphl->FirstVisible) {
|
if (y != lphl->FirstVisible) {
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,13 +4,13 @@
|
||||||
* Copyright 1994 Alexandre Julliard
|
* Copyright 1994 Alexandre Julliard
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define NO_TRANSITION_TYPES /* This file is Win32-clean */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "desktop.h"
|
#include "desktop.h"
|
||||||
#include "directory.h"
|
#include "directory.h"
|
||||||
#include "file.h"
|
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
|
|
||||||
|
@ -20,11 +20,11 @@
|
||||||
*
|
*
|
||||||
* Load a bitmap from a file. Used by SetDeskWallPaper().
|
* Load a bitmap from a file. Used by SetDeskWallPaper().
|
||||||
*/
|
*/
|
||||||
static HBITMAP DESKTOP_LoadBitmap( HDC hdc, const char *filename )
|
static HBITMAP32 DESKTOP_LoadBitmap( HDC32 hdc, const char *filename )
|
||||||
{
|
{
|
||||||
BITMAPFILEHEADER *fileHeader;
|
BITMAPFILEHEADER *fileHeader;
|
||||||
BITMAPINFO *bitmapInfo;
|
BITMAPINFO *bitmapInfo;
|
||||||
HBITMAP hbitmap;
|
HBITMAP32 hbitmap;
|
||||||
HFILE file;
|
HFILE file;
|
||||||
LPSTR buffer;
|
LPSTR buffer;
|
||||||
LONG size;
|
LONG size;
|
||||||
|
@ -33,10 +33,10 @@ static HBITMAP DESKTOP_LoadBitmap( HDC hdc, const char *filename )
|
||||||
|
|
||||||
if ((file = _lopen( filename, OF_READ )) == HFILE_ERROR)
|
if ((file = _lopen( filename, OF_READ )) == HFILE_ERROR)
|
||||||
{
|
{
|
||||||
UINT32 len = GetWindowsDirectory( NULL, 0 );
|
UINT32 len = GetWindowsDirectory32A( NULL, 0 );
|
||||||
if (!(buffer = HeapAlloc( SystemHeap, 0, len + strlen(filename) + 2 )))
|
if (!(buffer = HeapAlloc( SystemHeap, 0, len + strlen(filename) + 2 )))
|
||||||
return 0;
|
return 0;
|
||||||
GetWindowsDirectory( buffer, len + 1 );
|
GetWindowsDirectory32A( buffer, len + 1 );
|
||||||
strcat( buffer, "\\" );
|
strcat( buffer, "\\" );
|
||||||
strcat( buffer, filename );
|
strcat( buffer, filename );
|
||||||
file = _lopen( buffer, OF_READ );
|
file = _lopen( buffer, OF_READ );
|
||||||
|
@ -50,7 +50,7 @@ static HBITMAP DESKTOP_LoadBitmap( HDC hdc, const char *filename )
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
_llseek( file, 0, 0 );
|
_llseek( file, 0, 0 );
|
||||||
size = FILE_Read( file, buffer, size );
|
size = _lread32( file, buffer, size );
|
||||||
_lclose( file );
|
_lclose( file );
|
||||||
fileHeader = (BITMAPFILEHEADER *)buffer;
|
fileHeader = (BITMAPFILEHEADER *)buffer;
|
||||||
bitmapInfo = (BITMAPINFO *)(buffer + sizeof(BITMAPFILEHEADER));
|
bitmapInfo = (BITMAPINFO *)(buffer + sizeof(BITMAPFILEHEADER));
|
||||||
|
@ -74,15 +74,16 @@ static HBITMAP DESKTOP_LoadBitmap( HDC hdc, const char *filename )
|
||||||
*
|
*
|
||||||
* Handle the WM_ERASEBKGND message.
|
* Handle the WM_ERASEBKGND message.
|
||||||
*/
|
*/
|
||||||
static LONG DESKTOP_DoEraseBkgnd( HWND hwnd, HDC hdc, DESKTOPINFO *infoPtr )
|
static LRESULT DESKTOP_DoEraseBkgnd( HWND32 hwnd, HDC32 hdc,
|
||||||
|
DESKTOPINFO *infoPtr )
|
||||||
{
|
{
|
||||||
RECT16 rect;
|
RECT32 rect;
|
||||||
WND* Wnd = WIN_FindWndPtr( hwnd );
|
WND* Wnd = WIN_FindWndPtr( hwnd );
|
||||||
|
|
||||||
if( Wnd->hrgnUpdate > 1 ) DeleteObject( Wnd->hrgnUpdate );
|
if( Wnd->hrgnUpdate > 1 ) DeleteObject( Wnd->hrgnUpdate );
|
||||||
Wnd->hrgnUpdate = 0;
|
Wnd->hrgnUpdate = 0;
|
||||||
|
|
||||||
GetClientRect16( hwnd, &rect );
|
GetClientRect32( hwnd, &rect );
|
||||||
|
|
||||||
/* Paint desktop pattern (only if wall paper does not cover everything) */
|
/* Paint desktop pattern (only if wall paper does not cover everything) */
|
||||||
|
|
||||||
|
@ -93,14 +94,14 @@ static LONG DESKTOP_DoEraseBkgnd( HWND hwnd, HDC hdc, DESKTOPINFO *infoPtr )
|
||||||
/* Set colors in case pattern is a monochrome bitmap */
|
/* Set colors in case pattern is a monochrome bitmap */
|
||||||
SetBkColor( hdc, RGB(0,0,0) );
|
SetBkColor( hdc, RGB(0,0,0) );
|
||||||
SetTextColor( hdc, GetSysColor(COLOR_BACKGROUND) );
|
SetTextColor( hdc, GetSysColor(COLOR_BACKGROUND) );
|
||||||
FillRect16( hdc, &rect, infoPtr->hbrushPattern );
|
FillRect32( hdc, &rect, infoPtr->hbrushPattern );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Paint wall paper */
|
/* Paint wall paper */
|
||||||
|
|
||||||
if (infoPtr->hbitmapWallPaper)
|
if (infoPtr->hbitmapWallPaper)
|
||||||
{
|
{
|
||||||
int x, y;
|
INT32 x, y;
|
||||||
|
|
||||||
if (infoPtr->fTileWallPaper)
|
if (infoPtr->fTileWallPaper)
|
||||||
{
|
{
|
||||||
|
@ -147,12 +148,12 @@ LRESULT DesktopWndProc( HWND32 hwnd, UINT32 message,
|
||||||
infoPtr->hbrushPattern = 0;
|
infoPtr->hbrushPattern = 0;
|
||||||
infoPtr->hbitmapWallPaper = 0;
|
infoPtr->hbitmapWallPaper = 0;
|
||||||
SetDeskPattern();
|
SetDeskPattern();
|
||||||
SetDeskWallPaper( (LPSTR)-1 );
|
SetDeskWallPaper32( (LPSTR)-1 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_ERASEBKGND:
|
case WM_ERASEBKGND:
|
||||||
if (rootWindow == DefaultRootWindow(display)) return 1;
|
if (rootWindow == DefaultRootWindow(display)) return 1;
|
||||||
return DESKTOP_DoEraseBkgnd( hwnd, (HDC)wParam, infoPtr );
|
return DESKTOP_DoEraseBkgnd( hwnd, (HDC32)wParam, infoPtr );
|
||||||
|
|
||||||
case WM_SYSCOMMAND:
|
case WM_SYSCOMMAND:
|
||||||
if ((wParam & 0xfff0) != SC_CLOSE) return 0;
|
if ((wParam & 0xfff0) != SC_CLOSE) return 0;
|
||||||
|
@ -169,7 +170,7 @@ LRESULT DesktopWndProc( HWND32 hwnd, UINT32 message,
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SetDeskPattern (USER.279)
|
* SetDeskPattern (USER.279)
|
||||||
*/
|
*/
|
||||||
BOOL SetDeskPattern(void)
|
BOOL16 SetDeskPattern(void)
|
||||||
{
|
{
|
||||||
char buffer[100];
|
char buffer[100];
|
||||||
GetProfileString( "desktop", "Pattern", "(None)", buffer, 100 );
|
GetProfileString( "desktop", "Pattern", "(None)", buffer, 100 );
|
||||||
|
@ -178,14 +179,25 @@ BOOL SetDeskPattern(void)
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SetDeskWallPaper (USER.285)
|
* SetDeskWallPaper16 (USER.285)
|
||||||
*/
|
*/
|
||||||
BOOL SetDeskWallPaper( LPCSTR filename )
|
BOOL16 SetDeskWallPaper16( LPCSTR filename )
|
||||||
{
|
{
|
||||||
HBITMAP hbitmap;
|
return SetDeskWallPaper32( filename );
|
||||||
HDC hdc;
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SetDeskWallPaper32 (USER32.475)
|
||||||
|
*
|
||||||
|
* FIXME: is there a unicode version?
|
||||||
|
*/
|
||||||
|
BOOL32 SetDeskWallPaper32( LPCSTR filename )
|
||||||
|
{
|
||||||
|
HBITMAP32 hbitmap;
|
||||||
|
HDC32 hdc;
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
WND *wndPtr = WIN_FindWndPtr( GetDesktopWindow() );
|
WND *wndPtr = WIN_GetDesktop();
|
||||||
DESKTOPINFO *infoPtr = (DESKTOPINFO *)wndPtr->wExtra;
|
DESKTOPINFO *infoPtr = (DESKTOPINFO *)wndPtr->wExtra;
|
||||||
|
|
||||||
if (filename == (LPSTR)-1)
|
if (filename == (LPSTR)-1)
|
||||||
|
@ -193,16 +205,16 @@ BOOL SetDeskWallPaper( LPCSTR filename )
|
||||||
GetProfileString( "desktop", "WallPaper", "(None)", buffer, 256 );
|
GetProfileString( "desktop", "WallPaper", "(None)", buffer, 256 );
|
||||||
filename = buffer;
|
filename = buffer;
|
||||||
}
|
}
|
||||||
hdc = GetDC( 0 );
|
hdc = GetDC32( 0 );
|
||||||
hbitmap = DESKTOP_LoadBitmap( hdc, filename );
|
hbitmap = DESKTOP_LoadBitmap( hdc, filename );
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
if (infoPtr->hbitmapWallPaper) DeleteObject( infoPtr->hbitmapWallPaper );
|
if (infoPtr->hbitmapWallPaper) DeleteObject( infoPtr->hbitmapWallPaper );
|
||||||
infoPtr->hbitmapWallPaper = hbitmap;
|
infoPtr->hbitmapWallPaper = hbitmap;
|
||||||
infoPtr->fTileWallPaper = GetProfileInt( "desktop", "TileWallPaper", 0 );
|
infoPtr->fTileWallPaper = GetProfileInt( "desktop", "TileWallPaper", 0 );
|
||||||
if (hbitmap)
|
if (hbitmap)
|
||||||
{
|
{
|
||||||
BITMAP16 bmp;
|
BITMAP32 bmp;
|
||||||
GetObject16( hbitmap, sizeof(bmp), &bmp );
|
GetObject32A( hbitmap, sizeof(bmp), &bmp );
|
||||||
infoPtr->bitmapSize.cx = (bmp.bmWidth != 0) ? bmp.bmWidth : 1;
|
infoPtr->bitmapSize.cx = (bmp.bmWidth != 0) ? bmp.bmWidth : 1;
|
||||||
infoPtr->bitmapSize.cy = (bmp.bmHeight != 0) ? bmp.bmHeight : 1;
|
infoPtr->bitmapSize.cy = (bmp.bmHeight != 0) ? bmp.bmHeight : 1;
|
||||||
}
|
}
|
||||||
|
@ -215,9 +227,9 @@ BOOL SetDeskWallPaper( LPCSTR filename )
|
||||||
*
|
*
|
||||||
* Set the desktop pattern.
|
* Set the desktop pattern.
|
||||||
*/
|
*/
|
||||||
BOOL DESKTOP_SetPattern(char *pattern )
|
BOOL32 DESKTOP_SetPattern( LPCSTR pattern )
|
||||||
{
|
{
|
||||||
WND *wndPtr = WIN_FindWndPtr( GetDesktopWindow() );
|
WND *wndPtr = WIN_GetDesktop();
|
||||||
DESKTOPINFO *infoPtr = (DESKTOPINFO *)wndPtr->wExtra;
|
DESKTOPINFO *infoPtr = (DESKTOPINFO *)wndPtr->wExtra;
|
||||||
int pat[8];
|
int pat[8];
|
||||||
|
|
||||||
|
@ -228,7 +240,7 @@ BOOL DESKTOP_SetPattern(char *pattern )
|
||||||
&pat[4], &pat[5], &pat[6], &pat[7] ))
|
&pat[4], &pat[5], &pat[6], &pat[7] ))
|
||||||
{
|
{
|
||||||
WORD pattern[8];
|
WORD pattern[8];
|
||||||
HBITMAP hbitmap;
|
HBITMAP32 hbitmap;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) pattern[i] = pat[i] & 0xffff;
|
for (i = 0; i < 8; i++) pattern[i] = pat[i] & 0xffff;
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <windows.h>
|
#include "windows.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
|
@ -503,7 +503,7 @@ static void EDIT_BuildLineDefs(WND *wndPtr)
|
||||||
EDITSTATE *es = EDITSTATEPTR(wndPtr);
|
EDITSTATE *es = EDITSTATEPTR(wndPtr);
|
||||||
char *text = EDIT_GetPasswordPointer(wndPtr);
|
char *text = EDIT_GetPasswordPointer(wndPtr);
|
||||||
int ww = EDIT_GetWndWidth(wndPtr);
|
int ww = EDIT_GetWndWidth(wndPtr);
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
HFONT hFont;
|
HFONT hFont;
|
||||||
HFONT oldFont = 0;
|
HFONT oldFont = 0;
|
||||||
char *start, *cp;
|
char *start, *cp;
|
||||||
|
@ -512,7 +512,7 @@ static void EDIT_BuildLineDefs(WND *wndPtr)
|
||||||
int length;
|
int length;
|
||||||
LINE_END ending;
|
LINE_END ending;
|
||||||
|
|
||||||
hdc = GetDC(wndPtr->hwndSelf);
|
hdc = GetDC32(wndPtr->hwndSelf);
|
||||||
hFont = (HFONT)EDIT_WM_GetFont(wndPtr, 0, 0L);
|
hFont = (HFONT)EDIT_WM_GetFont(wndPtr, 0, 0L);
|
||||||
if (hFont)
|
if (hFont)
|
||||||
oldFont = SelectObject(hdc, hFont);
|
oldFont = SelectObject(hdc, hFont);
|
||||||
|
@ -598,7 +598,7 @@ static void EDIT_BuildLineDefs(WND *wndPtr)
|
||||||
}
|
}
|
||||||
if (hFont)
|
if (hFont)
|
||||||
SelectObject(hdc, oldFont);
|
SelectObject(hdc, oldFont);
|
||||||
ReleaseDC(wndPtr->hwndSelf, hdc);
|
ReleaseDC32(wndPtr->hwndSelf, hdc);
|
||||||
|
|
||||||
free(text);
|
free(text);
|
||||||
}
|
}
|
||||||
|
@ -1441,7 +1441,7 @@ static INT EDIT_WndXFromCol(WND *wndPtr, UINT line, UINT col)
|
||||||
EDITSTATE *es = EDITSTATEPTR(wndPtr);
|
EDITSTATE *es = EDITSTATEPTR(wndPtr);
|
||||||
char *text = EDIT_GetPasswordPointer(wndPtr);
|
char *text = EDIT_GetPasswordPointer(wndPtr);
|
||||||
INT ret;
|
INT ret;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
HFONT hFont;
|
HFONT hFont;
|
||||||
HFONT oldFont = 0;
|
HFONT oldFont = 0;
|
||||||
UINT lc = (UINT)EDIT_EM_GetLineCount(wndPtr, 0, 0L);
|
UINT lc = (UINT)EDIT_EM_GetLineCount(wndPtr, 0, 0L);
|
||||||
|
@ -1449,7 +1449,7 @@ static INT EDIT_WndXFromCol(WND *wndPtr, UINT line, UINT col)
|
||||||
UINT ll = (UINT)EDIT_EM_LineLength(wndPtr, li, 0L);
|
UINT ll = (UINT)EDIT_EM_LineLength(wndPtr, li, 0L);
|
||||||
UINT xoff = EDIT_GetXOffset(wndPtr);
|
UINT xoff = EDIT_GetXOffset(wndPtr);
|
||||||
|
|
||||||
hdc = GetDC(wndPtr->hwndSelf);
|
hdc = GetDC32(wndPtr->hwndSelf);
|
||||||
hFont = (HFONT)EDIT_WM_GetFont(wndPtr, 0, 0L);
|
hFont = (HFONT)EDIT_WM_GetFont(wndPtr, 0, 0L);
|
||||||
if (hFont)
|
if (hFont)
|
||||||
oldFont = SelectObject(hdc, hFont);
|
oldFont = SelectObject(hdc, hFont);
|
||||||
|
@ -1460,7 +1460,7 @@ static INT EDIT_WndXFromCol(WND *wndPtr, UINT line, UINT col)
|
||||||
es->NumTabStops, es->TabStops)) - xoff;
|
es->NumTabStops, es->TabStops)) - xoff;
|
||||||
if (hFont)
|
if (hFont)
|
||||||
SelectObject(hdc, oldFont);
|
SelectObject(hdc, oldFont);
|
||||||
ReleaseDC(wndPtr->hwndSelf, hdc);
|
ReleaseDC32(wndPtr->hwndSelf, hdc);
|
||||||
free(text);
|
free(text);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1859,10 +1859,10 @@ static LRESULT EDIT_EM_LineScroll(WND *wndPtr, WPARAM wParam, LPARAM lParam)
|
||||||
es->FirstVisibleLine = nfv;
|
es->FirstVisibleLine = nfv;
|
||||||
es->XOffset = nxoff;
|
es->XOffset = nxoff;
|
||||||
if (IsVScrollBar(wndPtr))
|
if (IsVScrollBar(wndPtr))
|
||||||
SetScrollPos(wndPtr->hwndSelf, SB_VERT,
|
SetScrollPos32(wndPtr->hwndSelf, SB_VERT,
|
||||||
EDIT_WM_VScroll(wndPtr, EM_GETTHUMB, 0L), TRUE);
|
EDIT_WM_VScroll(wndPtr, EM_GETTHUMB, 0L), TRUE);
|
||||||
if (IsHScrollBar(wndPtr))
|
if (IsHScrollBar(wndPtr))
|
||||||
SetScrollPos(wndPtr->hwndSelf, SB_HORZ,
|
SetScrollPos32(wndPtr->hwndSelf, SB_HORZ,
|
||||||
EDIT_WM_HScroll(wndPtr, EM_GETTHUMB, 0L), TRUE);
|
EDIT_WM_HScroll(wndPtr, EM_GETTHUMB, 0L), TRUE);
|
||||||
if (wndPtr->hwndSelf == GetFocus32()) {
|
if (wndPtr->hwndSelf == GetFocus32()) {
|
||||||
GetCaretPos16(&pos);
|
GetCaretPos16(&pos);
|
||||||
|
@ -2604,7 +2604,7 @@ static LRESULT EDIT_WM_LButtonDown(WND *wndPtr, WPARAM wParam, LPARAM lParam)
|
||||||
UINT li;
|
UINT li;
|
||||||
|
|
||||||
SetFocus32(wndPtr->hwndSelf);
|
SetFocus32(wndPtr->hwndSelf);
|
||||||
SetCapture(wndPtr->hwndSelf);
|
SetCapture32(wndPtr->hwndSelf);
|
||||||
l = MIN(fv + vlc - 1, MAX(fv, l));
|
l = MIN(fv + vlc - 1, MAX(fv, l));
|
||||||
x = MIN(EDIT_GetWndWidth(wndPtr), MAX(0, x));
|
x = MIN(EDIT_GetWndWidth(wndPtr), MAX(0, x));
|
||||||
c = EDIT_ColFromWndX(wndPtr, l, x);
|
c = EDIT_ColFromWndX(wndPtr, l, x);
|
||||||
|
@ -2626,7 +2626,7 @@ static LRESULT EDIT_WM_LButtonDown(WND *wndPtr, WPARAM wParam, LPARAM lParam)
|
||||||
*/
|
*/
|
||||||
static LRESULT EDIT_WM_LButtonUp(WND *wndPtr, WPARAM wParam, LPARAM lParam)
|
static LRESULT EDIT_WM_LButtonUp(WND *wndPtr, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
if (GetCapture() == wndPtr->hwndSelf)
|
if (GetCapture32() == wndPtr->hwndSelf)
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
return 0L;
|
return 0L;
|
||||||
}
|
}
|
||||||
|
@ -2648,7 +2648,7 @@ static LRESULT EDIT_WM_MouseMove(WND *wndPtr, WPARAM wParam, LPARAM lParam)
|
||||||
UINT vlc;
|
UINT vlc;
|
||||||
UINT li;
|
UINT li;
|
||||||
|
|
||||||
if (GetCapture() == wndPtr->hwndSelf) {
|
if (GetCapture32() == wndPtr->hwndSelf) {
|
||||||
x = (INT)LOWORD(lParam);
|
x = (INT)LOWORD(lParam);
|
||||||
y = (INT)HIWORD(lParam);
|
y = (INT)HIWORD(lParam);
|
||||||
fv = (UINT)EDIT_EM_GetFirstVisibleLine(wndPtr, 0, 0L);
|
fv = (UINT)EDIT_EM_GetFirstVisibleLine(wndPtr, 0, 0L);
|
||||||
|
@ -2775,11 +2775,11 @@ static LRESULT EDIT_WM_SetFont(WND *wndPtr, WPARAM wParam, LPARAM lParam)
|
||||||
TEXTMETRIC16 tm;
|
TEXTMETRIC16 tm;
|
||||||
EDITSTATE *es = EDITSTATEPTR(wndPtr);
|
EDITSTATE *es = EDITSTATEPTR(wndPtr);
|
||||||
LPARAM sel = EDIT_EM_GetSel(wndPtr, 0, 0L);
|
LPARAM sel = EDIT_EM_GetSel(wndPtr, 0, 0L);
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
HFONT oldFont = 0;
|
HFONT oldFont = 0;
|
||||||
|
|
||||||
es->hFont = (HFONT)wParam;
|
es->hFont = (HFONT)wParam;
|
||||||
hdc = GetDC(wndPtr->hwndSelf);
|
hdc = GetDC32(wndPtr->hwndSelf);
|
||||||
if (es->hFont)
|
if (es->hFont)
|
||||||
oldFont = SelectObject(hdc, es->hFont);
|
oldFont = SelectObject(hdc, es->hFont);
|
||||||
GetTextMetrics16(hdc, &tm);
|
GetTextMetrics16(hdc, &tm);
|
||||||
|
@ -2787,7 +2787,7 @@ static LRESULT EDIT_WM_SetFont(WND *wndPtr, WPARAM wParam, LPARAM lParam)
|
||||||
es->AveCharWidth = tm.tmAveCharWidth;
|
es->AveCharWidth = tm.tmAveCharWidth;
|
||||||
if (es->hFont)
|
if (es->hFont)
|
||||||
SelectObject(hdc, oldFont);
|
SelectObject(hdc, oldFont);
|
||||||
ReleaseDC(wndPtr->hwndSelf, hdc);
|
ReleaseDC32(wndPtr->hwndSelf, hdc);
|
||||||
EDIT_BuildLineDefs(wndPtr);
|
EDIT_BuildLineDefs(wndPtr);
|
||||||
if ((BOOL)lParam && EDIT_GetRedraw(wndPtr))
|
if ((BOOL)lParam && EDIT_GetRedraw(wndPtr))
|
||||||
InvalidateRect32( wndPtr->hwndSelf, NULL, TRUE );
|
InvalidateRect32( wndPtr->hwndSelf, NULL, TRUE );
|
||||||
|
|
|
@ -64,7 +64,7 @@ static void ListBoxInitialize(LPHEADLIST lphl)
|
||||||
void CreateListBoxStruct(HWND hwnd, WORD CtlType, LONG styles, HWND parent)
|
void CreateListBoxStruct(HWND hwnd, WORD CtlType, LONG styles, HWND parent)
|
||||||
{
|
{
|
||||||
LPHEADLIST lphl;
|
LPHEADLIST lphl;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
|
|
||||||
lphl = (LPHEADLIST)xmalloc(sizeof(HEADLIST));
|
lphl = (LPHEADLIST)xmalloc(sizeof(HEADLIST));
|
||||||
SetWindowLong32A(hwnd, 0, (LONG)lphl);
|
SetWindowLong32A(hwnd, 0, (LONG)lphl);
|
||||||
|
@ -87,14 +87,14 @@ void CreateListBoxStruct(HWND hwnd, WORD CtlType, LONG styles, HWND parent)
|
||||||
lphl->HasStrings = (styles & LBS_HASSTRINGS) || !lphl->OwnerDrawn;
|
lphl->HasStrings = (styles & LBS_HASSTRINGS) || !lphl->OwnerDrawn;
|
||||||
|
|
||||||
/* create dummy hdc to set text height */
|
/* create dummy hdc to set text height */
|
||||||
if ((hdc = GetDC(0)))
|
if ((hdc = GetDC32(0)))
|
||||||
{
|
{
|
||||||
TEXTMETRIC16 tm;
|
TEXTMETRIC16 tm;
|
||||||
GetTextMetrics16( hdc, &tm );
|
GetTextMetrics16( hdc, &tm );
|
||||||
lphl->StdItemHeight = tm.tmHeight;
|
lphl->StdItemHeight = tm.tmHeight;
|
||||||
dprintf_listbox(stddeb,"CreateListBoxStruct: font height %d\n",
|
dprintf_listbox(stddeb,"CreateListBoxStruct: font height %d\n",
|
||||||
lphl->StdItemHeight);
|
lphl->StdItemHeight);
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lphl->OwnerDrawn)
|
if (lphl->OwnerDrawn)
|
||||||
|
@ -148,9 +148,9 @@ int ListMaxFirstVisible(LPHEADLIST lphl)
|
||||||
void ListBoxUpdateWindow(HWND hwnd, LPHEADLIST lphl, BOOL repaint)
|
void ListBoxUpdateWindow(HWND hwnd, LPHEADLIST lphl, BOOL repaint)
|
||||||
{
|
{
|
||||||
if (lphl->dwStyle & WS_VSCROLL)
|
if (lphl->dwStyle & WS_VSCROLL)
|
||||||
SetScrollRange(hwnd, SB_VERT, 0, ListMaxFirstVisible(lphl), TRUE);
|
SetScrollRange32(hwnd, SB_VERT, 0, ListMaxFirstVisible(lphl), TRUE);
|
||||||
if ((lphl->dwStyle & WS_HSCROLL) && (lphl->ItemsPerColumn != 0))
|
if ((lphl->dwStyle & WS_HSCROLL) && (lphl->ItemsPerColumn != 0))
|
||||||
SetScrollRange(hwnd, SB_HORZ, 1, lphl->ItemsVisible /
|
SetScrollRange32(hwnd, SB_HORZ, 1, lphl->ItemsVisible /
|
||||||
lphl->ItemsPerColumn + 1, TRUE);
|
lphl->ItemsPerColumn + 1, TRUE);
|
||||||
|
|
||||||
if (repaint && lphl->bRedrawFlag) InvalidateRect32( hwnd, NULL, TRUE );
|
if (repaint && lphl->bRedrawFlag) InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
|
@ -811,12 +811,16 @@ LONG ListBoxDirectory(LPHEADLIST lphl, UINT attrib, LPCSTR filespec)
|
||||||
if (attrib & DDL_DRIVES)
|
if (attrib & DDL_DRIVES)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
|
DWORD oldstyle = lphl->dwStyle;
|
||||||
|
|
||||||
|
lphl->dwStyle &= ~LBS_SORT;
|
||||||
strcpy( temp, "[-a-]" );
|
strcpy( temp, "[-a-]" );
|
||||||
for (x = 0; x < MAX_DOS_DRIVES; x++, temp[2]++)
|
for (x = 0; x < MAX_DOS_DRIVES; x++, temp[2]++)
|
||||||
{
|
{
|
||||||
if (DRIVE_IsValid(x))
|
if (DRIVE_IsValid(x))
|
||||||
if ((ret = ListBoxAddString(lphl, SEGPTR_GET(temp))) == LB_ERR) break;
|
if ((ret = ListBoxAddString(lphl, SEGPTR_GET(temp))) == LB_ERR) break;
|
||||||
}
|
}
|
||||||
|
lphl->dwStyle = oldstyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
free( path );
|
free( path );
|
||||||
|
@ -831,8 +835,22 @@ int ListBoxGetItemRect(LPHEADLIST lphl, WORD wIndex, LPRECT16 lprect)
|
||||||
{
|
{
|
||||||
LPLISTSTRUCT lpls = ListBoxGetItem(lphl,wIndex);
|
LPLISTSTRUCT lpls = ListBoxGetItem(lphl,wIndex);
|
||||||
|
|
||||||
if (lpls == NULL) return LB_ERR;
|
dprintf_listbox(stddeb,"ListBox LB_GETITEMRECT %i %p", wIndex,lpls);
|
||||||
|
if (lpls == NULL)
|
||||||
|
{
|
||||||
|
if (lphl->dwStyle & LBS_OWNERDRAWVARIABLE)
|
||||||
|
return LB_ERR;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GetClientRect16(lphl->hSelf,lprect);
|
||||||
|
lprect->bottom=lphl->StdItemHeight;
|
||||||
|
if (lprect->right<0) lprect->right=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
*lprect = lpls->itemRect;
|
*lprect = lpls->itemRect;
|
||||||
|
dprintf_listbox(stddeb," = %d,%d %d,%d\n", lprect->left,lprect->top,
|
||||||
|
lprect->right,lprect->bottom);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -897,9 +915,9 @@ static LONG LBCreate(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
lphl->ColumnsWidth = rect.right - rect.left;
|
lphl->ColumnsWidth = rect.right - rect.left;
|
||||||
|
|
||||||
if (dwStyle & WS_VSCROLL)
|
if (dwStyle & WS_VSCROLL)
|
||||||
SetScrollRange(hwnd, SB_VERT, 0, ListMaxFirstVisible(lphl), TRUE);
|
SetScrollRange32(hwnd, SB_VERT, 0, ListMaxFirstVisible(lphl), TRUE);
|
||||||
if (dwStyle & WS_HSCROLL)
|
if (dwStyle & WS_HSCROLL)
|
||||||
SetScrollRange(hwnd, SB_HORZ, 1, 1, TRUE);
|
SetScrollRange32(hwnd, SB_HORZ, 1, 1, TRUE);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -974,7 +992,7 @@ static LONG LBVScroll(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
lphl->FirstVisible = ListMaxFirstVisible(lphl);
|
lphl->FirstVisible = ListMaxFirstVisible(lphl);
|
||||||
|
|
||||||
if (y != lphl->FirstVisible) {
|
if (y != lphl->FirstVisible) {
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1029,7 +1047,7 @@ static LONG LBHScroll(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
lphl->FirstVisible = lphl->FirstVisible /
|
lphl->FirstVisible = lphl->FirstVisible /
|
||||||
lphl->ItemsPerColumn * lphl->ItemsPerColumn + 1;
|
lphl->ItemsPerColumn * lphl->ItemsPerColumn + 1;
|
||||||
if (y != lphl->FirstVisible) {
|
if (y != lphl->FirstVisible) {
|
||||||
SetScrollPos(hwnd, SB_HORZ, lphl->FirstVisible /
|
SetScrollPos32(hwnd, SB_HORZ, lphl->FirstVisible /
|
||||||
lphl->ItemsPerColumn + 1, TRUE);
|
lphl->ItemsPerColumn + 1, TRUE);
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
}
|
}
|
||||||
|
@ -1048,7 +1066,7 @@ static LONG LBLButtonDown(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
RECT16 rectsel;
|
RECT16 rectsel;
|
||||||
|
|
||||||
SetFocus32(hwnd);
|
SetFocus32(hwnd);
|
||||||
SetCapture(hwnd);
|
SetCapture32(hwnd);
|
||||||
|
|
||||||
lphl->PrevFocused = lphl->ItemFocused;
|
lphl->PrevFocused = lphl->ItemFocused;
|
||||||
|
|
||||||
|
@ -1122,7 +1140,7 @@ static LONG LBLButtonUp(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
{
|
{
|
||||||
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
|
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
|
||||||
|
|
||||||
if (GetCapture() == hwnd) ReleaseCapture();
|
if (GetCapture32() == hwnd) ReleaseCapture();
|
||||||
|
|
||||||
if (lphl->PrevFocused != lphl->ItemFocused)
|
if (lphl->PrevFocused != lphl->ItemFocused)
|
||||||
ListBoxSendNotification(lphl, LBN_SELCHANGE);
|
ListBoxSendNotification(lphl, LBN_SELCHANGE);
|
||||||
|
@ -1158,7 +1176,7 @@ static LONG LBMouseMove(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
if (y < LBMM_EDGE) {
|
if (y < LBMM_EDGE) {
|
||||||
if (lphl->FirstVisible > 0) {
|
if (lphl->FirstVisible > 0) {
|
||||||
lphl->FirstVisible--;
|
lphl->FirstVisible--;
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1167,7 +1185,7 @@ static LONG LBMouseMove(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
if (y >= (rect.bottom-LBMM_EDGE)) {
|
if (y >= (rect.bottom-LBMM_EDGE)) {
|
||||||
if (lphl->FirstVisible < ListMaxFirstVisible(lphl)) {
|
if (lphl->FirstVisible < ListMaxFirstVisible(lphl)) {
|
||||||
lphl->FirstVisible++;
|
lphl->FirstVisible++;
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1322,7 +1340,7 @@ static LONG LBKeyDown(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1358,7 +1376,7 @@ static LONG LBChar(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
|
|
||||||
lphl->ItemFocused = newFocused;
|
lphl->ItemFocused = newFocused;
|
||||||
ListBoxScrollToFocus(lphl);
|
ListBoxScrollToFocus(lphl);
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
|
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
|
|
||||||
|
@ -1385,7 +1403,7 @@ static LONG LBSetRedraw(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
static LONG LBSetFont(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
static LONG LBSetFont(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
|
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
|
|
||||||
if (wParam == 0)
|
if (wParam == 0)
|
||||||
lphl->hFont = GetStockObject(SYSTEM_FONT);
|
lphl->hFont = GetStockObject(SYSTEM_FONT);
|
||||||
|
@ -1395,14 +1413,14 @@ static LONG LBSetFont(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||||
/* a new font means possible new text height */
|
/* a new font means possible new text height */
|
||||||
/* does this mean the height of each entry must be separately changed? */
|
/* does this mean the height of each entry must be separately changed? */
|
||||||
/* or are we guaranteed to get a LBSetFont before the first insert/add? */
|
/* or are we guaranteed to get a LBSetFont before the first insert/add? */
|
||||||
if ((hdc = GetDC(0)))
|
if ((hdc = GetDC32(0)))
|
||||||
{
|
{
|
||||||
TEXTMETRIC16 tm;
|
TEXTMETRIC16 tm;
|
||||||
GetTextMetrics16( hdc, &tm );
|
GetTextMetrics16( hdc, &tm );
|
||||||
lphl->StdItemHeight = tm.tmHeight;
|
lphl->StdItemHeight = tm.tmHeight;
|
||||||
dprintf_listbox(stddeb,"LBSetFont: new font %d with height %d\n",
|
dprintf_listbox(stddeb,"LBSetFont: new font %d with height %d\n",
|
||||||
lphl->hFont, lphl->StdItemHeight);
|
lphl->hFont, lphl->StdItemHeight);
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1517,7 +1535,7 @@ static LONG LBSetFocus(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
if(!(lphl->dwStyle & LBS_MULTIPLESEL) )
|
if(!(lphl->dwStyle & LBS_MULTIPLESEL) )
|
||||||
if( lphl->ItemsCount && lphl->ItemFocused != -1)
|
if( lphl->ItemsCount && lphl->ItemFocused != -1)
|
||||||
{
|
{
|
||||||
HDC hDC = GetDC(hwnd);
|
HDC32 hDC = GetDC32(hwnd);
|
||||||
HFONT hOldFont = SelectObject(hDC, lphl->hFont);
|
HFONT hOldFont = SelectObject(hDC, lphl->hFont);
|
||||||
LPLISTSTRUCT lpls;
|
LPLISTSTRUCT lpls;
|
||||||
|
|
||||||
|
@ -1526,7 +1544,7 @@ static LONG LBSetFocus(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
|
|
||||||
ListBoxDrawItem(hwnd,lphl,hDC,lpls,&lpls->itemRect, ODA_FOCUS, lpls->itemState);
|
ListBoxDrawItem(hwnd,lphl,hDC,lpls,&lpls->itemRect, ODA_FOCUS, lpls->itemState);
|
||||||
SelectObject(hDC, hOldFont);
|
SelectObject(hDC, hOldFont);
|
||||||
ReleaseDC(hwnd,hDC);
|
ReleaseDC32(hwnd,hDC);
|
||||||
}
|
}
|
||||||
|
|
||||||
ListBoxSendNotification(lphl, LBN_SETFOCUS);
|
ListBoxSendNotification(lphl, LBN_SETFOCUS);
|
||||||
|
@ -1547,7 +1565,7 @@ static LONG LBKillFocus(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
if( lphl->ItemsCount )
|
if( lphl->ItemsCount )
|
||||||
if( lphl->ItemFocused != -1 )
|
if( lphl->ItemFocused != -1 )
|
||||||
{
|
{
|
||||||
HDC hDC = GetDC(hwnd);
|
HDC32 hDC = GetDC32(hwnd);
|
||||||
HFONT hOldFont = SelectObject(hDC, lphl->hFont);
|
HFONT hOldFont = SelectObject(hDC, lphl->hFont);
|
||||||
LPLISTSTRUCT lpls;
|
LPLISTSTRUCT lpls;
|
||||||
|
|
||||||
|
@ -1556,7 +1574,7 @@ static LONG LBKillFocus(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
|
|
||||||
ListBoxDrawItem(hwnd,lphl,hDC,lpls,&lpls->itemRect, ODA_FOCUS, lpls->itemState);
|
ListBoxDrawItem(hwnd,lphl,hDC,lpls,&lpls->itemRect, ODA_FOCUS, lpls->itemState);
|
||||||
SelectObject(hDC, hOldFont);
|
SelectObject(hDC, hOldFont);
|
||||||
ReleaseDC(hwnd,hDC);
|
ReleaseDC32(hwnd,hDC);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
dprintf_listbox(stddeb,"LBKillFocus: no focused item!\n");
|
dprintf_listbox(stddeb,"LBKillFocus: no focused item!\n");
|
||||||
|
@ -1905,7 +1923,7 @@ static LONG LBSetCaretIndex(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
lphl->ItemFocused = wParam;
|
lphl->ItemFocused = wParam;
|
||||||
i = ListBoxScrollToFocus (lphl);
|
i = ListBoxScrollToFocus (lphl);
|
||||||
|
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
if(i)
|
if(i)
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
|
|
||||||
|
@ -1988,7 +2006,7 @@ static LONG LBSetCurSel(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
|
|
||||||
wRet = ListBoxSetCurSel(lphl, wParam);
|
wRet = ListBoxSetCurSel(lphl, wParam);
|
||||||
|
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
|
|
||||||
return wRet;
|
return wRet;
|
||||||
|
@ -2034,7 +2052,7 @@ static LONG LBSetTopIndex(HWND hwnd, WORD wParam, LONG lParam)
|
||||||
dprintf_listbox(stddeb,"ListBox LB_SETTOPINDEX wParam=%x !\n",
|
dprintf_listbox(stddeb,"ListBox LB_SETTOPINDEX wParam=%x !\n",
|
||||||
wParam);
|
wParam);
|
||||||
lphl->FirstVisible = wParam;
|
lphl->FirstVisible = wParam;
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos32(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
|
|
||||||
InvalidateRect32( hwnd, NULL, TRUE );
|
InvalidateRect32( hwnd, NULL, TRUE );
|
||||||
|
|
||||||
|
|
|
@ -89,6 +89,7 @@ static BOOL fEndMenuCalled = FALSE;
|
||||||
|
|
||||||
extern void NC_DrawSysButton(HWND hwnd, HDC hdc, BOOL down); /* nonclient.c */
|
extern void NC_DrawSysButton(HWND hwnd, HDC hdc, BOOL down); /* nonclient.c */
|
||||||
extern BOOL NC_GetSysPopupPos(WND* wndPtr, RECT16* rect);
|
extern BOOL NC_GetSysPopupPos(WND* wndPtr, RECT16* rect);
|
||||||
|
extern HTASK TASK_GetNextTask(HTASK);
|
||||||
|
|
||||||
static HBITMAP hStdCheck = 0;
|
static HBITMAP hStdCheck = 0;
|
||||||
static HBITMAP hStdMnArrow = 0;
|
static HBITMAP hStdMnArrow = 0;
|
||||||
|
@ -209,6 +210,30 @@ static BOOL MENU_IsInSysMenu( POPUPMENU *menu, POINT16 pt )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* MENU_InitSysMenuPopup
|
||||||
|
*
|
||||||
|
* Grey the appropriate items in System menu.
|
||||||
|
*/
|
||||||
|
void MENU_InitSysMenuPopup(HMENU hmenu, DWORD style, DWORD clsStyle)
|
||||||
|
{
|
||||||
|
BOOL gray;
|
||||||
|
|
||||||
|
gray = !(style & WS_THICKFRAME) || (style & (WS_MAXIMIZE | WS_MINIMIZE));
|
||||||
|
EnableMenuItem( hmenu, SC_SIZE, (gray ? MF_GRAYED : MF_ENABLED) );
|
||||||
|
gray = ((style & WS_MAXIMIZE) != 0);
|
||||||
|
EnableMenuItem( hmenu, SC_MOVE, (gray ? MF_GRAYED : MF_ENABLED) );
|
||||||
|
gray = !(style & WS_MINIMIZEBOX) || (style & WS_MINIMIZE);
|
||||||
|
EnableMenuItem( hmenu, SC_MINIMIZE, (gray ? MF_GRAYED : MF_ENABLED) );
|
||||||
|
gray = !(style & WS_MAXIMIZEBOX) || (style & WS_MAXIMIZE);
|
||||||
|
EnableMenuItem( hmenu, SC_MAXIMIZE, (gray ? MF_GRAYED : MF_ENABLED) );
|
||||||
|
gray = !(style & (WS_MAXIMIZE | WS_MINIMIZE));
|
||||||
|
EnableMenuItem( hmenu, SC_RESTORE, (gray ? MF_GRAYED : MF_ENABLED) );
|
||||||
|
gray = (clsStyle & CS_NOCLOSE) != 0;
|
||||||
|
EnableMenuItem( hmenu, SC_CLOSE, (gray ? MF_GRAYED : MF_ENABLED) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* MENU_FindItem
|
* MENU_FindItem
|
||||||
*
|
*
|
||||||
|
@ -407,13 +432,13 @@ static void MENU_CalcItemSize( HDC hdc, MENUITEM *lpitem, HWND hwndOwner,
|
||||||
static void MENU_PopupMenuCalcSize( LPPOPUPMENU lppop, HWND hwndOwner )
|
static void MENU_PopupMenuCalcSize( LPPOPUPMENU lppop, HWND hwndOwner )
|
||||||
{
|
{
|
||||||
MENUITEM *lpitem;
|
MENUITEM *lpitem;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
int start, i;
|
int start, i;
|
||||||
int orgX, orgY, maxX, maxTab, maxTabWidth;
|
int orgX, orgY, maxX, maxTab, maxTabWidth;
|
||||||
|
|
||||||
lppop->Width = lppop->Height = 0;
|
lppop->Width = lppop->Height = 0;
|
||||||
if (lppop->nItems == 0) return;
|
if (lppop->nItems == 0) return;
|
||||||
hdc = GetDC( 0 );
|
hdc = GetDC32( 0 );
|
||||||
maxX = start = 0;
|
maxX = start = 0;
|
||||||
while (start < lppop->nItems)
|
while (start < lppop->nItems)
|
||||||
{
|
{
|
||||||
|
@ -450,7 +475,7 @@ static void MENU_PopupMenuCalcSize( LPPOPUPMENU lppop, HWND hwndOwner )
|
||||||
}
|
}
|
||||||
|
|
||||||
lppop->Width = maxX;
|
lppop->Width = maxX;
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -731,12 +756,25 @@ UINT MENU_DrawMenuBar(HDC hDC, LPRECT16 lprect, HWND hwnd, BOOL suppress_draw)
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* MENU_SwitchTPWndTo
|
* MENU_SwitchTPWndTo
|
||||||
*/
|
*/
|
||||||
static BOOL MENU_SwitchTPWndTo( HTASK hTask)
|
BOOL32 MENU_SwitchTPWndTo( HTASK hTask)
|
||||||
{
|
{
|
||||||
/* This is supposed to be called when popup is hidden */
|
/* This is supposed to be called when popup is hidden.
|
||||||
|
* AppExit() calls with hTask == 0, so we get the next to current.
|
||||||
|
*/
|
||||||
|
|
||||||
TDB* task = (TDB*)GlobalLock16(hTask);
|
TDB* task;
|
||||||
|
|
||||||
|
if( !pTopPWnd ) return 0;
|
||||||
|
|
||||||
|
if( !hTask )
|
||||||
|
{
|
||||||
|
task = (TDB*)GlobalLock16( (hTask = GetCurrentTask()) );
|
||||||
|
if( task && task->hQueue == pTopPWnd->hmemTaskQ )
|
||||||
|
hTask = TASK_GetNextTask(hTask);
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
task = (TDB*)GlobalLock16(hTask);
|
||||||
if( !task ) return 0;
|
if( !task ) return 0;
|
||||||
|
|
||||||
/* if this task got as far as menu tracking it must have a queue */
|
/* if this task got as far as menu tracking it must have a queue */
|
||||||
|
@ -802,7 +840,7 @@ static BOOL MENU_ShowPopup(HWND hwndOwner, HMENU hmenu, UINT id, int x, int y,
|
||||||
pTopPWnd = WIN_FindWndPtr(CreateWindow16( POPUPMENU_CLASS_ATOM, NULL,
|
pTopPWnd = WIN_FindWndPtr(CreateWindow16( POPUPMENU_CLASS_ATOM, NULL,
|
||||||
WS_POPUP | WS_BORDER, x, y,
|
WS_POPUP | WS_BORDER, x, y,
|
||||||
width, height,
|
width, height,
|
||||||
0, 0, wndPtr->hInstance,
|
hwndOwner, 0, wndPtr->hInstance,
|
||||||
(LPVOID)(HMENU32)hmenu ));
|
(LPVOID)(HMENU32)hmenu ));
|
||||||
if (!pTopPWnd) return FALSE;
|
if (!pTopPWnd) return FALSE;
|
||||||
skip_init = TRUE;
|
skip_init = TRUE;
|
||||||
|
@ -851,7 +889,7 @@ static void MENU_SelectItem( HWND hwndOwner, HMENU hmenu, UINT wIndex,
|
||||||
BOOL sendMenuSelect )
|
BOOL sendMenuSelect )
|
||||||
{
|
{
|
||||||
LPPOPUPMENU lppop;
|
LPPOPUPMENU lppop;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
|
|
||||||
lppop = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
lppop = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
if (!lppop->nItems) return;
|
if (!lppop->nItems) return;
|
||||||
|
@ -860,8 +898,8 @@ static void MENU_SelectItem( HWND hwndOwner, HMENU hmenu, UINT wIndex,
|
||||||
(lppop->items[wIndex].item_flags & MF_SEPARATOR))
|
(lppop->items[wIndex].item_flags & MF_SEPARATOR))
|
||||||
wIndex = NO_SELECTED_ITEM;
|
wIndex = NO_SELECTED_ITEM;
|
||||||
if (lppop->FocusedItem == wIndex) return;
|
if (lppop->FocusedItem == wIndex) return;
|
||||||
if (lppop->wFlags & MF_POPUP) hdc = GetDC( lppop->hWnd );
|
if (lppop->wFlags & MF_POPUP) hdc = GetDC32( lppop->hWnd );
|
||||||
else hdc = GetDCEx( lppop->hWnd, 0, DCX_CACHE | DCX_WINDOW);
|
else hdc = GetDCEx32( lppop->hWnd, 0, DCX_CACHE | DCX_WINDOW);
|
||||||
|
|
||||||
/* Clear previous highlighted item */
|
/* Clear previous highlighted item */
|
||||||
if (lppop->FocusedItem != NO_SELECTED_ITEM)
|
if (lppop->FocusedItem != NO_SELECTED_ITEM)
|
||||||
|
@ -903,7 +941,7 @@ static void MENU_SelectItem( HWND hwndOwner, HMENU hmenu, UINT wIndex,
|
||||||
SendMessage16( hwndOwner, WM_MENUSELECT, hmenu,
|
SendMessage16( hwndOwner, WM_MENUSELECT, hmenu,
|
||||||
MAKELONG( lppop->wFlags | MF_MOUSESELECT, hmenu ) );
|
MAKELONG( lppop->wFlags | MF_MOUSESELECT, hmenu ) );
|
||||||
|
|
||||||
ReleaseDC( lppop->hWnd, hdc );
|
ReleaseDC32( lppop->hWnd, hdc );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1187,6 +1225,8 @@ static HMENU MENU_ShowSubPopup( HWND hwndOwner, HMENU hmenu, BOOL selectFirst )
|
||||||
if (menu->FocusedItem == NO_SELECTED_ITEM) return hmenu;
|
if (menu->FocusedItem == NO_SELECTED_ITEM) return hmenu;
|
||||||
if (menu->FocusedItem == SYSMENU_SELECTED)
|
if (menu->FocusedItem == SYSMENU_SELECTED)
|
||||||
{
|
{
|
||||||
|
MENU_InitSysMenuPopup(wndPtr->hSysMenu, wndPtr->dwStyle,
|
||||||
|
wndPtr->class->style);
|
||||||
MENU_ShowPopup(hwndOwner, wndPtr->hSysMenu, 0, wndPtr->rectClient.left,
|
MENU_ShowPopup(hwndOwner, wndPtr->hSysMenu, 0, wndPtr->rectClient.left,
|
||||||
wndPtr->rectClient.top - menu->Height - 2*SYSMETRICS_CYBORDER,
|
wndPtr->rectClient.top - menu->Height - 2*SYSMETRICS_CYBORDER,
|
||||||
SYSMETRICS_CXSIZE, SYSMETRICS_CYSIZE );
|
SYSMETRICS_CXSIZE, SYSMETRICS_CYSIZE );
|
||||||
|
@ -1445,23 +1485,21 @@ static LRESULT MENU_DoNextMenu( HWND* hwndOwner, HMENU* hmenu, HMENU *hmenuCurre
|
||||||
|
|
||||||
if( (menu->wFlags & (MF_POPUP | MF_SYSMENU)) == (MF_POPUP | MF_SYSMENU) )
|
if( (menu->wFlags & (MF_POPUP | MF_SYSMENU)) == (MF_POPUP | MF_SYSMENU) )
|
||||||
{
|
{
|
||||||
HDC hdc;
|
|
||||||
|
|
||||||
ShowWindow( menu->hWnd, SW_HIDE );
|
ShowWindow( menu->hWnd, SW_HIDE );
|
||||||
uSubPWndLevel = 0;
|
uSubPWndLevel = 0;
|
||||||
|
|
||||||
if( !IsIconic( *hwndOwner ) )
|
if( !IsIconic( *hwndOwner ) )
|
||||||
{
|
{
|
||||||
hdc = GetDCEx( *hwndOwner, 0, DCX_CACHE | DCX_WINDOW);
|
HDC32 hdc = GetDCEx32( *hwndOwner, 0, DCX_CACHE | DCX_WINDOW);
|
||||||
NC_DrawSysButton( *hwndOwner, hdc, FALSE );
|
NC_DrawSysButton( *hwndOwner, hdc, FALSE );
|
||||||
ReleaseDC( *hwndOwner, hdc );
|
ReleaseDC32( *hwndOwner, hdc );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
*hwndOwner = HIWORD(l);
|
*hwndOwner = HIWORD(l);
|
||||||
*hmenu = LOWORD(l);
|
*hmenu = LOWORD(l);
|
||||||
SetCapture( *hwndOwner );
|
SetCapture32( *hwndOwner );
|
||||||
|
|
||||||
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( *hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( *hmenu );
|
||||||
|
|
||||||
|
@ -1484,9 +1522,9 @@ static LRESULT MENU_DoNextMenu( HWND* hwndOwner, HMENU* hmenu, HMENU *hmenuCurre
|
||||||
|
|
||||||
if( !IsIconic( *hwndOwner ) )
|
if( !IsIconic( *hwndOwner ) )
|
||||||
{
|
{
|
||||||
HDC hdc = GetDCEx( *hwndOwner, 0, DCX_CACHE | DCX_WINDOW);
|
HDC32 hdc = GetDCEx32( *hwndOwner, 0, DCX_CACHE | DCX_WINDOW);
|
||||||
NC_DrawSysButton( *hwndOwner, hdc, TRUE );
|
NC_DrawSysButton( *hwndOwner, hdc, TRUE );
|
||||||
ReleaseDC( *hwndOwner, hdc );
|
ReleaseDC32( *hwndOwner, hdc );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1618,7 +1656,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, UINT wFlags, int x, int y,
|
||||||
POINT16 pt = { x, y };
|
POINT16 pt = { x, y };
|
||||||
MENU_ButtonDown( hwnd, hmenu, &hmenuCurrent, pt );
|
MENU_ButtonDown( hwnd, hmenu, &hmenuCurrent, pt );
|
||||||
}
|
}
|
||||||
SetCapture( hwnd );
|
SetCapture32( hwnd );
|
||||||
while (!fClosed)
|
while (!fClosed)
|
||||||
{
|
{
|
||||||
if (!MSG_InternalGetMessage( &msg, 0, hwnd, MSGF_MENU, 0, TRUE ))
|
if (!MSG_InternalGetMessage( &msg, 0, hwnd, MSGF_MENU, 0, TRUE ))
|
||||||
|
@ -1918,7 +1956,7 @@ LRESULT PopupMenuWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if( hwnd == pTopPWnd->hwndSelf )
|
if( hwnd == pTopPWnd->hwndSelf )
|
||||||
pTopPWnd = 0;
|
{ pTopPWnd = NULL; uSubPWndLevel = 0; }
|
||||||
else
|
else
|
||||||
uSubPWndLevel--;
|
uSubPWndLevel--;
|
||||||
break;
|
break;
|
||||||
|
@ -1940,7 +1978,7 @@ LRESULT PopupMenuWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
|
||||||
*/
|
*/
|
||||||
UINT MENU_GetMenuBarHeight( HWND hwnd, UINT menubarWidth, int orgX, int orgY )
|
UINT MENU_GetMenuBarHeight( HWND hwnd, UINT menubarWidth, int orgX, int orgY )
|
||||||
{
|
{
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
RECT16 rectBar;
|
RECT16 rectBar;
|
||||||
WND *wndPtr;
|
WND *wndPtr;
|
||||||
LPPOPUPMENU lppop;
|
LPPOPUPMENU lppop;
|
||||||
|
@ -1948,10 +1986,10 @@ UINT MENU_GetMenuBarHeight( HWND hwnd, UINT menubarWidth, int orgX, int orgY )
|
||||||
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
|
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
|
||||||
if (!(lppop = (LPPOPUPMENU)USER_HEAP_LIN_ADDR((HMENU)wndPtr->wIDmenu)))
|
if (!(lppop = (LPPOPUPMENU)USER_HEAP_LIN_ADDR((HMENU)wndPtr->wIDmenu)))
|
||||||
return 0;
|
return 0;
|
||||||
hdc = GetDCEx( hwnd, 0, DCX_CACHE | DCX_WINDOW );
|
hdc = GetDCEx32( hwnd, 0, DCX_CACHE | DCX_WINDOW );
|
||||||
SetRect16(&rectBar, orgX, orgY, orgX+menubarWidth, orgY+SYSMETRICS_CYMENU);
|
SetRect16(&rectBar, orgX, orgY, orgX+menubarWidth, orgY+SYSMETRICS_CYMENU);
|
||||||
MENU_MenuBarCalcSize( hdc, &rectBar, lppop, hwnd );
|
MENU_MenuBarCalcSize( hdc, &rectBar, lppop, hwnd );
|
||||||
ReleaseDC( hwnd, hdc );
|
ReleaseDC32( hwnd, hdc );
|
||||||
return lppop->Height;
|
return lppop->Height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2522,7 +2560,7 @@ BOOL SetMenu(HWND hWnd, HMENU hMenu)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
dprintf_menu(stddeb,"SetMenu(%04x, %04x);\n", hWnd, hMenu);
|
dprintf_menu(stddeb,"SetMenu(%04x, %04x);\n", hWnd, hMenu);
|
||||||
if (GetCapture() == hWnd) ReleaseCapture();
|
if (GetCapture32() == hWnd) ReleaseCapture();
|
||||||
wndPtr->wIDmenu = (UINT)hMenu;
|
wndPtr->wIDmenu = (UINT)hMenu;
|
||||||
if (hMenu != 0)
|
if (hMenu != 0)
|
||||||
{
|
{
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -4,6 +4,7 @@
|
||||||
* Copyright 1996 Bruce Milner
|
* Copyright 1996 Bruce Milner
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define NO_TRANSITION_TYPES /* This file is Win32-clean */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
@ -226,9 +227,9 @@ SW_SetParts(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||||
}
|
}
|
||||||
SW_SetPartBounds(hwnd, self);
|
SW_SetPartBounds(hwnd, self);
|
||||||
|
|
||||||
hdc = GetDC(hwnd);
|
hdc = GetDC32(hwnd);
|
||||||
SW_Refresh(hwnd, hdc, self);
|
SW_Refresh(hwnd, hdc, self);
|
||||||
ReleaseDC(hwnd, hdc);
|
ReleaseDC32(hwnd, hdc);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,11 +273,11 @@ SW_Create(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||||
self->part0.style = 0;
|
self->part0.style = 0;
|
||||||
|
|
||||||
height = 40;
|
height = 40;
|
||||||
if ((hdc = GetDC(0))) {
|
if ((hdc = GetDC32(0))) {
|
||||||
TEXTMETRIC32A tm;
|
TEXTMETRIC32A tm;
|
||||||
GetTextMetrics32A(hdc, &tm);
|
GetTextMetrics32A(hdc, &tm);
|
||||||
self->textHeight = tm.tmHeight;
|
self->textHeight = tm.tmHeight;
|
||||||
ReleaseDC(0, hdc);
|
ReleaseDC32(0, hdc);
|
||||||
}
|
}
|
||||||
|
|
||||||
parent = GetParent32(hwnd);
|
parent = GetParent32(hwnd);
|
||||||
|
@ -369,9 +370,9 @@ SW_Simple(STATUSWINDOWINFO *self, HWND32 hwnd, WPARAM32 wParam, LPARAM lParam)
|
||||||
|
|
||||||
simple = (BOOL32) wParam;
|
simple = (BOOL32) wParam;
|
||||||
self->simple = simple;
|
self->simple = simple;
|
||||||
hdc = GetDC(hwnd);
|
hdc = GetDC32(hwnd);
|
||||||
SW_Refresh(hwnd, hdc, self);
|
SW_Refresh(hwnd, hdc, self);
|
||||||
ReleaseDC(hwnd, hdc);
|
ReleaseDC32(hwnd, hdc);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,6 @@ static const BUILTIN_CLASS_INFO16 WIDGETS_BuiltinClasses16[] =
|
||||||
{
|
{
|
||||||
{ CS_GLOBALCLASS | CS_PARENTDC,
|
{ CS_GLOBALCLASS | CS_PARENTDC,
|
||||||
sizeof(STATICINFO), 0, "StaticWndProc", "STATIC" },
|
sizeof(STATICINFO), 0, "StaticWndProc", "STATIC" },
|
||||||
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
|
|
||||||
sizeof(SCROLLBAR_INFO), 0, "ScrollBarWndProc", "SCROLLBAR" },
|
|
||||||
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
|
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
|
||||||
8, 0, "ListBoxWndProc", "LISTBOX" },
|
8, 0, "ListBoxWndProc", "LISTBOX" },
|
||||||
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
|
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
|
||||||
|
@ -55,6 +53,8 @@ static WNDCLASS32A WIDGETS_BuiltinClasses32[] =
|
||||||
{
|
{
|
||||||
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
|
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
|
||||||
ButtonWndProc, 0, sizeof(BUTTONINFO), 0, 0, 0, 0, 0, "BUTTON" },
|
ButtonWndProc, 0, sizeof(BUTTONINFO), 0, 0, 0, 0, 0, "BUTTON" },
|
||||||
|
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
|
||||||
|
ScrollBarWndProc, 0, sizeof(SCROLLBAR_INFO), 0, 0, 0, 0, 0, "SCROLLBAR"},
|
||||||
{ CS_GLOBALCLASS, DesktopWndProc, 0, sizeof(DESKTOPINFO),
|
{ CS_GLOBALCLASS, DesktopWndProc, 0, sizeof(DESKTOPINFO),
|
||||||
0, 0, 0, 0, 0, DESKTOP_CLASS_NAME }
|
0, 0, 0, 0, 0, DESKTOP_CLASS_NAME }
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,6 +11,64 @@
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************
|
||||||
|
*
|
||||||
|
* Check if linear pointer in [addr, addr+size[
|
||||||
|
* read (rwflag == 1)
|
||||||
|
* or
|
||||||
|
* write (rwflag == 0)
|
||||||
|
************************************************************/
|
||||||
|
|
||||||
|
#ifdef linux
|
||||||
|
BOOL32 DEBUG_checkmap_bad( const char *addr, size_t size, int rwflag)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
char buf[80]; /* temporary line buffer */
|
||||||
|
char prot[5]; /* protection string */
|
||||||
|
char *start, *end;
|
||||||
|
int ret = TRUE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
The entries in /proc/self/maps are of the form:
|
||||||
|
08000000-08002000 r-xp 00000000 03:41 2361
|
||||||
|
08002000-08003000 rw-p 00001000 03:41 2361
|
||||||
|
08003000-08005000 rwxp 00000000 00:00 0
|
||||||
|
40000000-40005000 r-xp 00000000 03:41 67219
|
||||||
|
40005000-40006000 rw-p 00004000 03:41 67219
|
||||||
|
40006000-40007000 rw-p 00000000 00:00 0
|
||||||
|
...
|
||||||
|
start end perm ??? major:minor inode
|
||||||
|
|
||||||
|
Only permissions start and end are used here
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!(fp = fopen("/proc/self/maps", "r")))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
while (fgets( buf, 79, fp)) {
|
||||||
|
sscanf(buf, "%x-%x %3s", (int *) &start, (int *) &end, prot);
|
||||||
|
if ( end < addr)
|
||||||
|
continue;
|
||||||
|
if (start <= addr && addr+size < end) {
|
||||||
|
if (rwflag)
|
||||||
|
ret = (prot[0] != 'r'); /* test for reading */
|
||||||
|
else
|
||||||
|
ret = (prot[1] != 'w'); /* test for writing */
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fclose( fp);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#else /* linux */
|
||||||
|
/* FIXME: code needed for BSD et al. */
|
||||||
|
BOOL32 DEBUG_checkmap_bad(char *addr, size_t size, int rwflag)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
#endif /* linux */
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DEBUG_IsBadReadPtr
|
* DEBUG_IsBadReadPtr
|
||||||
*
|
*
|
||||||
|
@ -19,11 +77,12 @@
|
||||||
BOOL32 DEBUG_IsBadReadPtr( const DBG_ADDR *address, int size )
|
BOOL32 DEBUG_IsBadReadPtr( const DBG_ADDR *address, int size )
|
||||||
{
|
{
|
||||||
if (address->seg) /* segmented addr */
|
if (address->seg) /* segmented addr */
|
||||||
return IsBadReadPtr16( (SEGPTR)MAKELONG( (WORD)address->off,
|
{
|
||||||
(WORD)address->seg ), size );
|
if (IsBadReadPtr16( (SEGPTR)MAKELONG( (WORD)address->off,
|
||||||
/* FIXME: should check if resulting linear addr is readable */
|
(WORD)address->seg ), size ))
|
||||||
else /* linear address */
|
return TRUE;
|
||||||
return FALSE; /* FIXME: should do some checks here */
|
}
|
||||||
|
return DEBUG_checkmap_bad( DBG_ADDR_TO_LIN(address), size, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,13 +94,14 @@ BOOL32 DEBUG_IsBadReadPtr( const DBG_ADDR *address, int size )
|
||||||
BOOL32 DEBUG_IsBadWritePtr( const DBG_ADDR *address, int size )
|
BOOL32 DEBUG_IsBadWritePtr( const DBG_ADDR *address, int size )
|
||||||
{
|
{
|
||||||
if (address->seg) /* segmented addr */
|
if (address->seg) /* segmented addr */
|
||||||
|
{
|
||||||
/* Note: we use IsBadReadPtr here because we are */
|
/* Note: we use IsBadReadPtr here because we are */
|
||||||
/* always allowed to write to read-only segments */
|
/* always allowed to write to read-only segments */
|
||||||
return IsBadReadPtr16( (SEGPTR)MAKELONG( (WORD)address->off,
|
if (IsBadReadPtr16( (SEGPTR)MAKELONG( (WORD)address->off,
|
||||||
(WORD)address->seg ), size );
|
(WORD)address->seg ), size ))
|
||||||
/* FIXME: should check if resulting linear addr is writable */
|
return TRUE;
|
||||||
else /* linear address */
|
}
|
||||||
return FALSE; /* FIXME: should do some checks here */
|
return DEBUG_checkmap_bad( DBG_ADDR_TO_LIN(address), size, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,10 +15,8 @@
|
||||||
#include "msdos.h"
|
#include "msdos.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "string32.h"
|
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "string32.h"
|
|
||||||
|
|
||||||
#define MAX_PATH_ELEMENTS 20
|
#define MAX_PATH_ELEMENTS 20
|
||||||
|
|
||||||
|
@ -200,18 +198,15 @@ UINT32 GetTempPath32A( UINT32 count, LPSTR path )
|
||||||
*/
|
*/
|
||||||
UINT32 GetTempPath32W( UINT32 count, LPWSTR path )
|
UINT32 GetTempPath32W( UINT32 count, LPWSTR path )
|
||||||
{
|
{
|
||||||
LPSTR tmp = (char*)xmalloc(count);
|
if (path) lstrcpynAtoW( path, DIR_TempDosDir, count );
|
||||||
UINT32 len = GetTempPath32A( count, tmp );
|
return strlen( DIR_TempDosDir );
|
||||||
if (path) STRING32_AnsiToUni( path, tmp );
|
|
||||||
free(tmp);
|
|
||||||
return len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DIR_GetTempUnixDir
|
* DIR_GetTempUnixDir
|
||||||
*/
|
*/
|
||||||
UINT DIR_GetTempUnixDir( LPSTR path, UINT count )
|
UINT32 DIR_GetTempUnixDir( LPSTR path, UINT32 count )
|
||||||
{
|
{
|
||||||
if (path) lstrcpyn32A( path, DIR_TempUnixDir, count );
|
if (path) lstrcpyn32A( path, DIR_TempUnixDir, count );
|
||||||
return strlen( DIR_TempUnixDir );
|
return strlen( DIR_TempUnixDir );
|
||||||
|
@ -221,7 +216,7 @@ UINT DIR_GetTempUnixDir( LPSTR path, UINT count )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DIR_GetWindowsUnixDir
|
* DIR_GetWindowsUnixDir
|
||||||
*/
|
*/
|
||||||
UINT DIR_GetWindowsUnixDir( LPSTR path, UINT count )
|
UINT32 DIR_GetWindowsUnixDir( LPSTR path, UINT32 count )
|
||||||
{
|
{
|
||||||
if (path) lstrcpyn32A( path, DIR_WindowsUnixDir, count );
|
if (path) lstrcpyn32A( path, DIR_WindowsUnixDir, count );
|
||||||
return strlen( DIR_WindowsUnixDir );
|
return strlen( DIR_WindowsUnixDir );
|
||||||
|
@ -231,7 +226,7 @@ UINT DIR_GetWindowsUnixDir( LPSTR path, UINT count )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DIR_GetSystemUnixDir
|
* DIR_GetSystemUnixDir
|
||||||
*/
|
*/
|
||||||
UINT DIR_GetSystemUnixDir( LPSTR path, UINT count )
|
UINT32 DIR_GetSystemUnixDir( LPSTR path, UINT32 count )
|
||||||
{
|
{
|
||||||
if (path) lstrcpyn32A( path, DIR_SystemUnixDir, count );
|
if (path) lstrcpyn32A( path, DIR_SystemUnixDir, count );
|
||||||
return strlen( DIR_SystemUnixDir );
|
return strlen( DIR_SystemUnixDir );
|
||||||
|
@ -241,7 +236,7 @@ UINT DIR_GetSystemUnixDir( LPSTR path, UINT count )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DIR_GetDosPath
|
* DIR_GetDosPath
|
||||||
*/
|
*/
|
||||||
UINT DIR_GetDosPath( int element, LPSTR path, UINT count )
|
UINT32 DIR_GetDosPath( INT32 element, LPSTR path, UINT32 count )
|
||||||
{
|
{
|
||||||
if ((element < 0) || (element >= DIR_PathElements)) return 0;
|
if ((element < 0) || (element >= DIR_PathElements)) return 0;
|
||||||
if (path) lstrcpyn32A( path, DIR_DosPath[element], count );
|
if (path) lstrcpyn32A( path, DIR_DosPath[element], count );
|
||||||
|
@ -272,16 +267,36 @@ UINT32 WIN16_GetTempDrive( BYTE ignored )
|
||||||
return MAKELONG( GetTempDrive(ignored) | (':' << 8), 1 );
|
return MAKELONG( GetTempDrive(ignored) | (':' << 8), 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetWindowsDirectory (KERNEL.134)
|
* GetWindowsDirectory16 (KERNEL.134)
|
||||||
*/
|
*/
|
||||||
UINT GetWindowsDirectory( LPSTR path, UINT count )
|
UINT16 GetWindowsDirectory16( LPSTR path, UINT16 count )
|
||||||
|
{
|
||||||
|
return (UINT16)GetWindowsDirectory32A( path, count );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetWindowsDirectory32A (KERNEL32.311)
|
||||||
|
*/
|
||||||
|
UINT32 GetWindowsDirectory32A( LPSTR path, UINT32 count )
|
||||||
{
|
{
|
||||||
if (path) lstrcpyn32A( path, DIR_WindowsDosDir, count );
|
if (path) lstrcpyn32A( path, DIR_WindowsDosDir, count );
|
||||||
return strlen( DIR_WindowsDosDir );
|
return strlen( DIR_WindowsDosDir );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetWindowsDirectory32W (KERNEL32.312)
|
||||||
|
*/
|
||||||
|
UINT32 GetWindowsDirectory32W( LPWSTR path, UINT32 count )
|
||||||
|
{
|
||||||
|
if (path) lstrcpynAtoW( path, DIR_WindowsDosDir, count );
|
||||||
|
return strlen( DIR_WindowsDosDir );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetSystemDirectory16 (KERNEL.135)
|
* GetSystemDirectory16 (KERNEL.135)
|
||||||
*/
|
*/
|
||||||
|
@ -306,11 +321,6 @@ UINT32 GetSystemDirectory32A( LPSTR path, UINT32 count )
|
||||||
*/
|
*/
|
||||||
UINT32 GetSystemDirectory32W( LPWSTR path, UINT32 count )
|
UINT32 GetSystemDirectory32W( LPWSTR path, UINT32 count )
|
||||||
{
|
{
|
||||||
if (path)
|
if (path) lstrcpynAtoW( path, DIR_SystemDosDir, count );
|
||||||
{
|
|
||||||
LPWSTR tmp = STRING32_DupAnsiToUni( DIR_SystemDosDir );
|
|
||||||
lstrcpyn32W( path, tmp, count );
|
|
||||||
free (tmp);
|
|
||||||
}
|
|
||||||
return strlen( DIR_SystemDosDir );
|
return strlen( DIR_SystemDosDir );
|
||||||
}
|
}
|
||||||
|
|
|
@ -777,3 +777,15 @@ DWORD GetShortPathName32W( LPCWSTR longpath, LPWSTR shortpath, DWORD shortlen )
|
||||||
lstrcpynAtoW( shortpath, dostruename, shortlen );
|
lstrcpynAtoW( shortpath, dostruename, shortlen );
|
||||||
return strlen(dostruename);
|
return strlen(dostruename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetFullPathNameA (KERNEL32.272)
|
||||||
|
*/
|
||||||
|
DWORD GetFullPathName32A( LPCSTR fn, DWORD buflen, LPSTR buf, LPSTR *lastpart) {
|
||||||
|
dprintf_file(stddeb,"GetFullPathNameA(%s)\n",fn);
|
||||||
|
/* FIXME */
|
||||||
|
lstrcpyn32A(buf,fn,buflen);
|
||||||
|
if (lastpart)
|
||||||
|
*lastpart=strrchr(buf,'\\');
|
||||||
|
return strlen(fn);
|
||||||
|
}
|
||||||
|
|
37
files/file.c
37
files/file.c
|
@ -541,23 +541,6 @@ HFILE FILE_Dup2( HFILE hFile1, HFILE hFile2 )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* FILE_Read
|
|
||||||
*/
|
|
||||||
INT32 FILE_Read( HFILE hFile, LPVOID buffer, UINT32 count )
|
|
||||||
{
|
|
||||||
DOS_FILE *file;
|
|
||||||
INT32 result;
|
|
||||||
|
|
||||||
dprintf_file( stddeb, "FILE_Read: %d %p %d\n", hFile, buffer, count );
|
|
||||||
if (!(file = FILE_GetFile( hFile ))) return -1;
|
|
||||||
if (!count) return 0;
|
|
||||||
if ((result = read( file->unix_handle, buffer, count )) == -1)
|
|
||||||
FILE_SetDosError();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetTempFileName16 (KERNEL.97)
|
* GetTempFileName16 (KERNEL.97)
|
||||||
*/
|
*/
|
||||||
|
@ -735,7 +718,7 @@ HFILE OpenFile( LPCSTR name, OFSTRUCT *ofs, UINT32 mode )
|
||||||
|
|
||||||
/* Try the Windows directory */
|
/* Try the Windows directory */
|
||||||
|
|
||||||
GetWindowsDirectory( ofs->szPathName, len );
|
GetWindowsDirectory32A( ofs->szPathName, len );
|
||||||
strcat( ofs->szPathName, "\\" );
|
strcat( ofs->szPathName, "\\" );
|
||||||
strcat( ofs->szPathName, name );
|
strcat( ofs->szPathName, name );
|
||||||
if ((unixName = DOSFS_GetUnixFileName( ofs->szPathName, TRUE )) != NULL)
|
if ((unixName = DOSFS_GetUnixFileName( ofs->szPathName, TRUE )) != NULL)
|
||||||
|
@ -893,7 +876,7 @@ DWORD SearchPath32A(
|
||||||
goto found;
|
goto found;
|
||||||
|
|
||||||
/* Try the Windows directory */
|
/* Try the Windows directory */
|
||||||
GetWindowsDirectory(testpath,len);
|
GetWindowsDirectory32A(testpath,len);
|
||||||
strcat(testpath,"\\");
|
strcat(testpath,"\\");
|
||||||
strcat(testpath,name);
|
strcat(testpath,name);
|
||||||
if ((unixName = DOSFS_GetUnixFileName((LPCSTR)testpath,TRUE))!=NULL)
|
if ((unixName = DOSFS_GetUnixFileName((LPCSTR)testpath,TRUE))!=NULL)
|
||||||
|
@ -991,7 +974,7 @@ LONG WIN16_hread( HFILE hFile, SEGPTR buffer, LONG count )
|
||||||
/* Some programs pass a count larger than the allocated buffer */
|
/* Some programs pass a count larger than the allocated buffer */
|
||||||
maxlen = GetSelectorLimit( SELECTOROF(buffer) ) - OFFSETOF(buffer) + 1;
|
maxlen = GetSelectorLimit( SELECTOROF(buffer) ) - OFFSETOF(buffer) + 1;
|
||||||
if (count > maxlen) count = maxlen;
|
if (count > maxlen) count = maxlen;
|
||||||
return FILE_Read( hFile, PTR_SEG_TO_LIN(buffer), count );
|
return _lread32( hFile, PTR_SEG_TO_LIN(buffer), count );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1009,7 +992,15 @@ UINT16 WIN16_lread( HFILE hFile, SEGPTR buffer, UINT16 count )
|
||||||
*/
|
*/
|
||||||
UINT32 _lread32( HFILE hFile, LPVOID buffer, UINT32 count )
|
UINT32 _lread32( HFILE hFile, LPVOID buffer, UINT32 count )
|
||||||
{
|
{
|
||||||
return (UINT32)FILE_Read( hFile, buffer, (LONG)count );
|
DOS_FILE *file;
|
||||||
|
UINT32 result;
|
||||||
|
|
||||||
|
dprintf_file( stddeb, "_lread32: %d %p %d\n", hFile, buffer, count );
|
||||||
|
if (!(file = FILE_GetFile( hFile ))) return -1;
|
||||||
|
if (!count) return 0;
|
||||||
|
if ((result = read( file->unix_handle, buffer, count )) == -1)
|
||||||
|
FILE_SetDosError();
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1018,7 +1009,7 @@ UINT32 _lread32( HFILE hFile, LPVOID buffer, UINT32 count )
|
||||||
*/
|
*/
|
||||||
UINT16 _lread16( HFILE hFile, LPVOID buffer, UINT16 count )
|
UINT16 _lread16( HFILE hFile, LPVOID buffer, UINT16 count )
|
||||||
{
|
{
|
||||||
return (UINT16)FILE_Read( hFile, buffer, (LONG)count );
|
return (UINT16)_lread32( hFile, buffer, (LONG)count );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1131,7 +1122,7 @@ UINT32 _lwrite32( HFILE hFile, LPCSTR buffer, UINT32 count )
|
||||||
*/
|
*/
|
||||||
LONG _hread( HFILE hFile, LPVOID buffer, LONG count)
|
LONG _hread( HFILE hFile, LPVOID buffer, LONG count)
|
||||||
{
|
{
|
||||||
return FILE_Read( hFile, buffer, count );
|
return _lread32( hFile, buffer, count );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -382,7 +382,7 @@ static BOOL PROFILE_Open( const char *filename )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetWindowsDirectory( buffer, sizeof(buffer) );
|
GetWindowsDirectory32A( buffer, sizeof(buffer) );
|
||||||
strcat( buffer, "\\" );
|
strcat( buffer, "\\" );
|
||||||
strcat( buffer, filename );
|
strcat( buffer, filename );
|
||||||
if (!(dos_name = DOSFS_GetDosTrueName( buffer, FALSE ))) return FALSE;
|
if (!(dos_name = DOSFS_GetDosTrueName( buffer, FALSE ))) return FALSE;
|
||||||
|
|
|
@ -483,7 +483,7 @@ base 1
|
||||||
478 stub strtod
|
478 stub strtod
|
||||||
479 stub strtok
|
479 stub strtok
|
||||||
480 stub strtol
|
480 stub strtol
|
||||||
481 stub strtoul
|
481 cdecl strtoul(ptr ptr long) strtoul
|
||||||
482 stub strxfrm
|
482 stub strxfrm
|
||||||
483 stub swprintf
|
483 stub swprintf
|
||||||
484 stub swscanf
|
484 stub swscanf
|
||||||
|
|
|
@ -283,7 +283,7 @@ base 1
|
||||||
0276 stub Polyline
|
0276 stub Polyline
|
||||||
0277 stub PolylineTo
|
0277 stub PolylineTo
|
||||||
0278 stdcall PtInRegion(long long long) PtInRegion
|
0278 stdcall PtInRegion(long long long) PtInRegion
|
||||||
0279 stub PtVisible
|
0279 stdcall PtVisible(long long long) PtVisible
|
||||||
0280 stdcall RealizePalette(long) RealizePalette
|
0280 stdcall RealizePalette(long) RealizePalette
|
||||||
0281 stdcall RectInRegion(long ptr) RectInRegion32
|
0281 stdcall RectInRegion(long ptr) RectInRegion32
|
||||||
0282 stdcall RectVisible(long ptr) RectVisible32
|
0282 stdcall RectVisible(long ptr) RectVisible32
|
||||||
|
@ -301,7 +301,7 @@ base 1
|
||||||
0294 stdcall ScaleWindowExtEx(long long long long long ptr) ScaleWindowExtEx32
|
0294 stdcall ScaleWindowExtEx(long long long long long ptr) ScaleWindowExtEx32
|
||||||
0295 stub SelectBrushLocal
|
0295 stub SelectBrushLocal
|
||||||
0296 stub SelectClipPath
|
0296 stub SelectClipPath
|
||||||
0297 stub SelectClipRgn
|
0297 stdcall SelectClipRgn(long long) SelectClipRgn
|
||||||
0298 stub SelectFontLocal
|
0298 stub SelectFontLocal
|
||||||
0299 stdcall SelectObject(long long) SelectObject
|
0299 stdcall SelectObject(long long) SelectObject
|
||||||
0300 stdcall SelectPalette(long long long) SelectPalette
|
0300 stdcall SelectPalette(long long long) SelectPalette
|
||||||
|
@ -356,7 +356,8 @@ base 1
|
||||||
0348 stub StartDocW
|
0348 stub StartDocW
|
||||||
0349 stub StartPage
|
0349 stub StartPage
|
||||||
0350 stdcall StretchBlt(long long long long long long long long long long long) StretchBlt
|
0350 stdcall StretchBlt(long long long long long long long long long long long) StretchBlt
|
||||||
0351 stub StretchDIBits
|
0351 stdcall StretchDIBits(long long long long long long long
|
||||||
|
long long long long long long) StretchDIBits
|
||||||
0352 stub StrokeAndFillPath
|
0352 stub StrokeAndFillPath
|
||||||
0353 stub StrokePath
|
0353 stub StrokePath
|
||||||
0354 stub SwapBuffers
|
0354 stub SwapBuffers
|
||||||
|
@ -392,5 +393,4 @@ base 1
|
||||||
0383 stub UpdateICMRegKeyA
|
0383 stub UpdateICMRegKeyA
|
||||||
0384 stub UpdateICMRegKeyW
|
0384 stub UpdateICMRegKeyW
|
||||||
0385 stub gdiPlaySpoolStream
|
0385 stub gdiPlaySpoolStream
|
||||||
|
0386 return SetObjectOwner 8 0
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ type win16
|
||||||
131 pascal GetDOSEnvironment() GetDOSEnvironment
|
131 pascal GetDOSEnvironment() GetDOSEnvironment
|
||||||
132 pascal GetWinFlags() GetWinFlags
|
132 pascal GetWinFlags() GetWinFlags
|
||||||
133 pascal16 GetExePtr(word) GetExePtr
|
133 pascal16 GetExePtr(word) GetExePtr
|
||||||
134 pascal16 GetWindowsDirectory(ptr word) GetWindowsDirectory
|
134 pascal16 GetWindowsDirectory(ptr word) GetWindowsDirectory16
|
||||||
135 pascal16 GetSystemDirectory(ptr word) GetSystemDirectory16
|
135 pascal16 GetSystemDirectory(ptr word) GetSystemDirectory16
|
||||||
136 pascal16 GetDriveType(byte) GetDriveType16
|
136 pascal16 GetDriveType(byte) GetDriveType16
|
||||||
137 pascal FatalAppExit(word ptr) FatalAppExit
|
137 pascal FatalAppExit(word ptr) FatalAppExit
|
||||||
|
|
|
@ -192,7 +192,7 @@ base 1
|
||||||
0187 stub GetConsoleInputWaitHandle
|
0187 stub GetConsoleInputWaitHandle
|
||||||
0188 stub GetConsoleMode
|
0188 stub GetConsoleMode
|
||||||
0189 stub GetConsoleOutputCP
|
0189 stub GetConsoleOutputCP
|
||||||
0190 stub GetConsoleScreenBufferInfo
|
0190 stdcall GetConsoleScreenBufferInfo(long ptr) GetConsoleScreenBufferInfo
|
||||||
0191 stub GetConsoleTitleA
|
0191 stub GetConsoleTitleA
|
||||||
0192 stub GetConsoleTitleW
|
0192 stub GetConsoleTitleW
|
||||||
0193 stub GetCurrencyFormatA
|
0193 stub GetCurrencyFormatA
|
||||||
|
@ -225,10 +225,10 @@ base 1
|
||||||
0220 stub GetFileSize
|
0220 stub GetFileSize
|
||||||
0221 stub GetFileTime
|
0221 stub GetFileTime
|
||||||
0222 stdcall GetFileType(long) GetFileType
|
0222 stdcall GetFileType(long) GetFileType
|
||||||
0223 stub GetFullPathNameA
|
0223 stdcall GetFullPathNameA(ptr long ptr ptr) GetFullPathName32A
|
||||||
0224 stub GetFullPathNameW
|
0224 stub GetFullPathNameW
|
||||||
0225 stub GetHandleInformation
|
0225 stub GetHandleInformation
|
||||||
0226 stub GetLargestConsoleWindowSize
|
0226 stdcall GetLargestConsoleWindowSize(long) GetLargestConsoleWindowSize
|
||||||
0227 stdcall GetLastError() GetLastError
|
0227 stdcall GetLastError() GetLastError
|
||||||
0228 stdcall GetLocalTime(ptr) GetLocalTime
|
0228 stdcall GetLocalTime(ptr) GetLocalTime
|
||||||
0229 stdcall GetLocaleInfoA(long long ptr long) GetLocaleInfoA
|
0229 stdcall GetLocaleInfoA(long long ptr long) GetLocaleInfoA
|
||||||
|
@ -283,7 +283,7 @@ base 1
|
||||||
0278 stub GetStringTypeExW
|
0278 stub GetStringTypeExW
|
||||||
0279 stub GetStringTypeW
|
0279 stub GetStringTypeW
|
||||||
0280 stdcall GetSystemDefaultLCID() GetSystemDefaultLCID
|
0280 stdcall GetSystemDefaultLCID() GetSystemDefaultLCID
|
||||||
0281 stub GetSystemDefaultLangID
|
0281 stdcall GetSystemDefaultLangID() GetSystemDefaultLangID
|
||||||
0282 stdcall GetSystemDirectoryA(ptr long) GetSystemDirectory32A
|
0282 stdcall GetSystemDirectoryA(ptr long) GetSystemDirectory32A
|
||||||
0283 stdcall GetSystemDirectoryW(ptr long) GetSystemDirectory32W
|
0283 stdcall GetSystemDirectoryW(ptr long) GetSystemDirectory32W
|
||||||
0284 stub GetSystemInfo
|
0284 stub GetSystemInfo
|
||||||
|
@ -306,15 +306,15 @@ base 1
|
||||||
0301 stub GetTimeFormatW
|
0301 stub GetTimeFormatW
|
||||||
0302 stdcall GetTimeZoneInformation(ptr) GetTimeZoneInformation
|
0302 stdcall GetTimeZoneInformation(ptr) GetTimeZoneInformation
|
||||||
0303 stdcall GetUserDefaultLCID() GetUserDefaultLCID
|
0303 stdcall GetUserDefaultLCID() GetUserDefaultLCID
|
||||||
0304 stub GetUserDefaultLangID
|
0304 stdcall GetUserDefaultLangID() GetUserDefaultLangID
|
||||||
0305 stub GetVDMCurrentDirectories
|
0305 stub GetVDMCurrentDirectories
|
||||||
0306 stdcall GetVersion() GetVersion32
|
0306 stdcall GetVersion() GetVersion32
|
||||||
0307 stdcall GetVersionExA(ptr) GetVersionEx32A
|
0307 stdcall GetVersionExA(ptr) GetVersionEx32A
|
||||||
0308 stdcall GetVersionExW(ptr) GetVersionEx32W
|
0308 stdcall GetVersionExW(ptr) GetVersionEx32W
|
||||||
0309 stdcall GetVolumeInformationA(ptr ptr long ptr ptr ptr ptr long) GetVolumeInformation32A
|
0309 stdcall GetVolumeInformationA(ptr ptr long ptr ptr ptr ptr long) GetVolumeInformation32A
|
||||||
0310 stdcall GetVolumeInformationW(ptr ptr long ptr ptr ptr ptr long) GetVolumeInformation32W
|
0310 stdcall GetVolumeInformationW(ptr ptr long ptr ptr ptr ptr long) GetVolumeInformation32W
|
||||||
0311 stdcall GetWindowsDirectoryA(ptr long) GetWindowsDirectory
|
0311 stdcall GetWindowsDirectoryA(ptr long) GetWindowsDirectory32A
|
||||||
0312 stub GetWindowsDirectoryW
|
0312 stdcall GetWindowsDirectoryW(ptr long) GetWindowsDirectory32W
|
||||||
0313 stdcall GlobalAddAtomA(ptr) GlobalAddAtom32A
|
0313 stdcall GlobalAddAtomA(ptr) GlobalAddAtom32A
|
||||||
0314 stdcall GlobalAddAtomW(ptr) GlobalAddAtom32W
|
0314 stdcall GlobalAddAtomW(ptr) GlobalAddAtom32W
|
||||||
0315 stdcall GlobalAlloc(long long) GlobalAlloc32
|
0315 stdcall GlobalAlloc(long long) GlobalAlloc32
|
||||||
|
@ -363,7 +363,7 @@ base 1
|
||||||
0358 return IsDBCSLeadByte 4 0
|
0358 return IsDBCSLeadByte 4 0
|
||||||
0359 stub IsDBCSLeadByteEx
|
0359 stub IsDBCSLeadByteEx
|
||||||
0360 stub IsValidCodePage
|
0360 stub IsValidCodePage
|
||||||
0361 stub IsValidLocale
|
0361 stdcall IsValidLocale(long long) IsValidLocale
|
||||||
0362 stub LCMapStringA
|
0362 stub LCMapStringA
|
||||||
0363 stub LCMapStringW
|
0363 stub LCMapStringW
|
||||||
0364 stdcall LeaveCriticalSection(ptr) LeaveCriticalSection
|
0364 stdcall LeaveCriticalSection(ptr) LeaveCriticalSection
|
||||||
|
@ -556,7 +556,7 @@ base 1
|
||||||
0551 stub VirtualLock
|
0551 stub VirtualLock
|
||||||
0552 stub VirtualProtect
|
0552 stub VirtualProtect
|
||||||
0553 stub VirtualProtectEx
|
0553 stub VirtualProtectEx
|
||||||
0554 stub VirtualQuery
|
0554 stdcall VirtualQuery(ptr ptr long) VirtualQuery
|
||||||
0555 stub VirtualQueryEx
|
0555 stub VirtualQueryEx
|
||||||
0556 stub VirtualUnlock
|
0556 stub VirtualUnlock
|
||||||
0557 stub WaitCommEvent
|
0557 stub WaitCommEvent
|
||||||
|
@ -639,3 +639,13 @@ base 1
|
||||||
0633 stub MakeCriticalSectionGlobal
|
0633 stub MakeCriticalSectionGlobal
|
||||||
#extra late additions
|
#extra late additions
|
||||||
0634 stdcall ThunkConnect32(ptr ptr ptr ptr ptr ptr) ThunkConnect32
|
0634 stdcall ThunkConnect32(ptr ptr ptr ptr ptr ptr) ThunkConnect32
|
||||||
|
0636 stub SUnMapLS
|
||||||
|
0637 stub SMapLS
|
||||||
|
0638 stdcall ReinitializeCriticalSection(ptr) ReinitializeCriticalSection
|
||||||
|
0639 stub FT_Thunk
|
||||||
|
0640 stub FT_Exit20
|
||||||
|
0641 stub SMapLS_IP_EBP_12
|
||||||
|
0642 stub SUnMapLS_IP_EBP_12
|
||||||
|
0643 stub MapSLFix
|
||||||
|
0644 stub UnMapSLFixArray
|
||||||
|
0645 stub dprintf
|
||||||
|
|
|
@ -56,8 +56,8 @@ base 1
|
||||||
0051 stub SHFormatDrive
|
0051 stub SHFormatDrive
|
||||||
0052 stub SHFreeNameMappings
|
0052 stub SHFreeNameMappings
|
||||||
0053 stub SHGetDesktopFolder
|
0053 stub SHGetDesktopFolder
|
||||||
0054 stub SHGetFileInfo
|
0054 stdcall SHGetFileInfo(ptr long ptr long long) SHGetFileInfo32A
|
||||||
0055 stub SHGetFileInfoA
|
0055 stdcall SHGetFileInfoA(ptr long ptr long long) SHGetFileInfo32A
|
||||||
0056 stub SHGetFileInfoW
|
0056 stub SHGetFileInfoW
|
||||||
0057 stub SHGetInstanceExplorer
|
0057 stub SHGetInstanceExplorer
|
||||||
0058 stub SHGetMalloc
|
0058 stub SHGetMalloc
|
||||||
|
|
|
@ -17,7 +17,7 @@ heap 65520
|
||||||
15 pascal GetCurrentTime() GetCurrentTime
|
15 pascal GetCurrentTime() GetCurrentTime
|
||||||
16 pascal16 ClipCursor(ptr) ClipCursor16
|
16 pascal16 ClipCursor(ptr) ClipCursor16
|
||||||
17 pascal16 GetCursorPos(ptr) GetCursorPos16
|
17 pascal16 GetCursorPos(ptr) GetCursorPos16
|
||||||
18 pascal16 SetCapture(word) SetCapture
|
18 pascal16 SetCapture(word) SetCapture16
|
||||||
19 pascal16 ReleaseCapture() ReleaseCapture
|
19 pascal16 ReleaseCapture() ReleaseCapture
|
||||||
20 pascal16 SetDoubleClickTime(word) SetDoubleClickTime
|
20 pascal16 SetDoubleClickTime(word) SetDoubleClickTime
|
||||||
21 pascal16 GetDoubleClickTime() GetDoubleClickTime
|
21 pascal16 GetDoubleClickTime() GetDoubleClickTime
|
||||||
|
@ -62,13 +62,13 @@ heap 65520
|
||||||
59 pascal16 SetActiveWindow(word) SetActiveWindow
|
59 pascal16 SetActiveWindow(word) SetActiveWindow
|
||||||
60 pascal16 GetActiveWindow() GetActiveWindow
|
60 pascal16 GetActiveWindow() GetActiveWindow
|
||||||
61 pascal16 ScrollWindow(word s_word s_word ptr ptr) ScrollWindow
|
61 pascal16 ScrollWindow(word s_word s_word ptr ptr) ScrollWindow
|
||||||
62 pascal16 SetScrollPos(word word s_word word) SetScrollPos
|
62 pascal16 SetScrollPos(word word s_word word) SetScrollPos16
|
||||||
63 pascal16 GetScrollPos(word word) GetScrollPos
|
63 pascal16 GetScrollPos(word word) GetScrollPos16
|
||||||
64 pascal16 SetScrollRange(word word s_word s_word word) SetScrollRange
|
64 pascal16 SetScrollRange(word word s_word s_word word) SetScrollRange16
|
||||||
65 pascal16 GetScrollRange(word word ptr ptr) GetScrollRange
|
65 pascal16 GetScrollRange(word word ptr ptr) GetScrollRange16
|
||||||
66 pascal16 GetDC(word) GetDC
|
66 pascal16 GetDC(word) GetDC16
|
||||||
67 pascal16 GetWindowDC(word) GetWindowDC
|
67 pascal16 GetWindowDC(word) GetWindowDC16
|
||||||
68 pascal16 ReleaseDC(word word) ReleaseDC
|
68 pascal16 ReleaseDC(word word) ReleaseDC16
|
||||||
69 pascal16 SetCursor(word) SetCursor
|
69 pascal16 SetCursor(word) SetCursor
|
||||||
70 pascal16 SetCursorPos(word word) SetCursorPos
|
70 pascal16 SetCursorPos(word word) SetCursorPos
|
||||||
71 pascal16 ShowCursor(word) ShowCursor
|
71 pascal16 ShowCursor(word) ShowCursor
|
||||||
|
@ -117,7 +117,7 @@ heap 65520
|
||||||
115 pascal16 ReplyMessage(long) ReplyMessage
|
115 pascal16 ReplyMessage(long) ReplyMessage
|
||||||
116 pascal16 PostAppMessage(word word word long) PostAppMessage
|
116 pascal16 PostAppMessage(word word word long) PostAppMessage
|
||||||
118 pascal16 RegisterWindowMessage(segptr) RegisterWindowMessage16
|
118 pascal16 RegisterWindowMessage(segptr) RegisterWindowMessage16
|
||||||
117 pascal16 WindowFromDC(word) WindowFromDC
|
117 pascal16 WindowFromDC(word) WindowFromDC16
|
||||||
119 pascal GetMessagePos() GetMessagePos
|
119 pascal GetMessagePos() GetMessagePos
|
||||||
120 pascal GetMessageTime() GetMessageTime
|
120 pascal GetMessageTime() GetMessageTime
|
||||||
121 pascal SetWindowsHook(s_word segptr) SetWindowsHook
|
121 pascal SetWindowsHook(s_word segptr) SetWindowsHook
|
||||||
|
@ -236,7 +236,7 @@ heap 65520
|
||||||
233 pascal16 SetParent(word word) SetParent
|
233 pascal16 SetParent(word word) SetParent
|
||||||
234 pascal16 UnhookWindowsHook(s_word segptr) UnhookWindowsHook
|
234 pascal16 UnhookWindowsHook(s_word segptr) UnhookWindowsHook
|
||||||
235 pascal DefHookProc(s_word word long ptr) DefHookProc
|
235 pascal DefHookProc(s_word word long ptr) DefHookProc
|
||||||
236 pascal16 GetCapture() GetCapture
|
236 pascal16 GetCapture() GetCapture16
|
||||||
237 pascal16 GetUpdateRgn(word word word) GetUpdateRgn
|
237 pascal16 GetUpdateRgn(word word word) GetUpdateRgn
|
||||||
238 pascal16 ExcludeUpdateRgn(word word) ExcludeUpdateRgn
|
238 pascal16 ExcludeUpdateRgn(word word) ExcludeUpdateRgn
|
||||||
239 pascal16 DialogBoxParam(word segptr word segptr long) DialogBoxParam16
|
239 pascal16 DialogBoxParam(word segptr word segptr long) DialogBoxParam16
|
||||||
|
@ -270,7 +270,7 @@ heap 65520
|
||||||
264 pascal16 GetMenuItemID(word word) GetMenuItemID
|
264 pascal16 GetMenuItemID(word word) GetMenuItemID
|
||||||
265 pascal16 ShowOwnedPopups(word word) ShowOwnedPopups
|
265 pascal16 ShowOwnedPopups(word word) ShowOwnedPopups
|
||||||
266 pascal16 SetMessageQueue(word) SetMessageQueue
|
266 pascal16 SetMessageQueue(word) SetMessageQueue
|
||||||
267 pascal16 ShowScrollBar(word word word) ShowScrollBar
|
267 pascal16 ShowScrollBar(word word word) ShowScrollBar16
|
||||||
268 pascal16 GlobalAddAtom(segptr) GlobalAddAtom16
|
268 pascal16 GlobalAddAtom(segptr) GlobalAddAtom16
|
||||||
269 pascal16 GlobalDeleteAtom(word) GlobalDeleteAtom
|
269 pascal16 GlobalDeleteAtom(word) GlobalDeleteAtom
|
||||||
270 pascal16 GlobalFindAtom(segptr) GlobalFindAtom16
|
270 pascal16 GlobalFindAtom(segptr) GlobalFindAtom16
|
||||||
|
@ -288,8 +288,8 @@ heap 65520
|
||||||
282 pascal16 SelectPalette(word word word) SelectPalette
|
282 pascal16 SelectPalette(word word word) SelectPalette
|
||||||
283 pascal16 RealizePalette(word) RealizePalette
|
283 pascal16 RealizePalette(word) RealizePalette
|
||||||
284 pascal16 GetFreeSystemResources(word) GetFreeSystemResources
|
284 pascal16 GetFreeSystemResources(word) GetFreeSystemResources
|
||||||
#285 BEAR285
|
285 pascal16 SetDeskWallPaper(ptr) SetDeskWallPaper16
|
||||||
286 pascal16 GetDesktopWindow() GetDesktopWindow
|
286 pascal16 GetDesktopWindow() GetDesktopWindow16
|
||||||
287 pascal16 GetLastActivePopup(word) GetLastActivePopup
|
287 pascal16 GetLastActivePopup(word) GetLastActivePopup
|
||||||
288 pascal GetMessageExtraInfo() GetMessageExtraInfo
|
288 pascal GetMessageExtraInfo() GetMessageExtraInfo
|
||||||
#289 KEYB_EVENT
|
#289 KEYB_EVENT
|
||||||
|
@ -326,7 +326,7 @@ heap 65520
|
||||||
356 stub LoadDIBCursorHandler
|
356 stub LoadDIBCursorHandler
|
||||||
357 stub LoadDIBIconHandler
|
357 stub LoadDIBIconHandler
|
||||||
358 pascal16 IsMenu(word) IsMenu
|
358 pascal16 IsMenu(word) IsMenu
|
||||||
359 pascal16 GetDCEx(word word long) GetDCEx
|
359 pascal16 GetDCEx(word word long) GetDCEx16
|
||||||
362 pascal16 DCHook(word word long long) DCHook
|
362 pascal16 DCHook(word word long long) DCHook
|
||||||
364 stub LookupIconIDFromDirectoryEx
|
364 stub LookupIconIDFromDirectoryEx
|
||||||
368 pascal16 CopyIcon(word word) CopyIcon16
|
368 pascal16 CopyIcon(word word) CopyIcon16
|
||||||
|
@ -416,14 +416,14 @@ heap 65520
|
||||||
471 pascal16 lstrcmpi(ptr ptr) lstrcmpi16
|
471 pascal16 lstrcmpi(ptr ptr) lstrcmpi16
|
||||||
472 pascal AnsiNext(segptr) AnsiNext
|
472 pascal AnsiNext(segptr) AnsiNext
|
||||||
473 pascal AnsiPrev(segptr segptr) AnsiPrev
|
473 pascal AnsiPrev(segptr segptr) AnsiPrev
|
||||||
475 stub SetScrollInfo
|
475 pascal16 SetScrollInfo(word s_word ptr word) SetScrollInfo16
|
||||||
476 stub GetScrollInfo
|
476 pascal16 GetScrollInfo(word s_word ptr) GetScrollInfo16
|
||||||
477 stub GetKeyboardLayoutName
|
477 stub GetKeyboardLayoutName
|
||||||
478 stub LoadKeyboardLayout
|
478 stub LoadKeyboardLayout
|
||||||
479 stub MenuItemFromPoint
|
479 stub MenuItemFromPoint
|
||||||
480 stub GetUserLocalObjType
|
480 stub GetUserLocalObjType
|
||||||
#481 HARDWARE_EVENT
|
#481 HARDWARE_EVENT
|
||||||
482 pascal16 EnableScrollBar(word word word) EnableScrollBar
|
482 pascal16 EnableScrollBar(word word word) EnableScrollBar16
|
||||||
483 pascal16 SystemParametersInfo(word word ptr word) SystemParametersInfo
|
483 pascal16 SystemParametersInfo(word word ptr word) SystemParametersInfo
|
||||||
#484 __GP
|
#484 __GP
|
||||||
# Stubs for Hebrew version
|
# Stubs for Hebrew version
|
||||||
|
|
|
@ -10,7 +10,7 @@ base 1
|
||||||
0005 stdcall AppendMenuW(long long long ptr) AppendMenu32W
|
0005 stdcall AppendMenuW(long long long ptr) AppendMenu32W
|
||||||
0006 stub ArrangeIconicWindows
|
0006 stub ArrangeIconicWindows
|
||||||
0007 stub AttachThreadInput
|
0007 stub AttachThreadInput
|
||||||
0008 stub BeginDeferWindowPos
|
0008 stdcall BeginDeferWindowPos(long) BeginDeferWindowPos
|
||||||
0009 stdcall BeginPaint(long ptr) BeginPaint32
|
0009 stdcall BeginPaint(long ptr) BeginPaint32
|
||||||
0010 stdcall BringWindowToTop(long) BringWindowToTop
|
0010 stdcall BringWindowToTop(long) BringWindowToTop
|
||||||
0011 stub BroadcastSystemMessage
|
0011 stub BroadcastSystemMessage
|
||||||
|
@ -62,7 +62,7 @@ base 1
|
||||||
0057 stub CopyAcceleratorTableA
|
0057 stub CopyAcceleratorTableA
|
||||||
0058 stub CopyAcceleratorTableW
|
0058 stub CopyAcceleratorTableW
|
||||||
0059 stdcall CopyIcon(long) CopyIcon32
|
0059 stdcall CopyIcon(long) CopyIcon32
|
||||||
0060 stub CopyImage
|
0060 stdcall CopyImage(long long long long long) CopyImage32
|
||||||
0061 stdcall CopyRect(ptr ptr) CopyRect32
|
0061 stdcall CopyRect(ptr ptr) CopyRect32
|
||||||
0062 stub CountClipboardFormats
|
0062 stub CountClipboardFormats
|
||||||
0063 stub CreateAcceleratorTableA
|
0063 stub CreateAcceleratorTableA
|
||||||
|
@ -131,7 +131,7 @@ base 1
|
||||||
0124 stdcall DefMDIChildProcW(long long long long) DefMDIChildProc32W
|
0124 stdcall DefMDIChildProcW(long long long long) DefMDIChildProc32W
|
||||||
0125 stdcall DefWindowProcA(long long long long) DefWindowProc32A
|
0125 stdcall DefWindowProcA(long long long long) DefWindowProc32A
|
||||||
0126 stdcall DefWindowProcW(long long long long) DefWindowProc32W
|
0126 stdcall DefWindowProcW(long long long long) DefWindowProc32W
|
||||||
0127 stub DeferWindowPos
|
0127 stdcall DeferWindowPos(long long long long long long long long) DeferWindowPos
|
||||||
0128 stdcall DeleteMenu(long) DeleteMenu
|
0128 stdcall DeleteMenu(long) DeleteMenu
|
||||||
0129 stub DestroyAcceleratorTable
|
0129 stub DestroyAcceleratorTable
|
||||||
0130 stdcall DestroyCaret() DestroyCaret
|
0130 stdcall DestroyCaret() DestroyCaret
|
||||||
|
@ -174,9 +174,9 @@ base 1
|
||||||
0167 stub EditWndProc
|
0167 stub EditWndProc
|
||||||
0168 stdcall EmptyClipboard() EmptyClipboard
|
0168 stdcall EmptyClipboard() EmptyClipboard
|
||||||
0169 stdcall EnableMenuItem(long long long) EnableMenuItem
|
0169 stdcall EnableMenuItem(long long long) EnableMenuItem
|
||||||
0170 stdcall EnableScrollBar(long long long) EnableScrollBar
|
0170 stdcall EnableScrollBar(long long long) EnableScrollBar32
|
||||||
0171 stdcall EnableWindow(long long) EnableWindow
|
0171 stdcall EnableWindow(long long) EnableWindow
|
||||||
0172 stub EndDeferWindowPos
|
0172 stdcall EndDeferWindowPos(long) EndDeferWindowPos
|
||||||
0173 stdcall EndDialog(long long) EndDialog
|
0173 stdcall EndDialog(long long) EndDialog
|
||||||
0174 stub EndMenu
|
0174 stub EndMenu
|
||||||
0175 stdcall EndPaint(long ptr) EndPaint32
|
0175 stdcall EndPaint(long ptr) EndPaint32
|
||||||
|
@ -210,8 +210,8 @@ base 1
|
||||||
0203 stub FreeDDElParam
|
0203 stub FreeDDElParam
|
||||||
0204 stdcall GetActiveWindow() GetActiveWindow
|
0204 stdcall GetActiveWindow() GetActiveWindow
|
||||||
0205 stdcall GetAppCompatFlags(long) GetAppCompatFlags
|
0205 stdcall GetAppCompatFlags(long) GetAppCompatFlags
|
||||||
0206 stub GetAsyncKeyState
|
0206 stdcall GetAsyncKeyState(long) GetAsyncKeyState
|
||||||
0207 stub GetCapture
|
0207 stdcall GetCapture() GetCapture32
|
||||||
0208 stdcall GetCaretBlinkTime() GetCaretBlinkTime32
|
0208 stdcall GetCaretBlinkTime() GetCaretBlinkTime32
|
||||||
0209 stdcall GetCaretPos(ptr) GetCaretPos32
|
0209 stdcall GetCaretPos(ptr) GetCaretPos32
|
||||||
0210 stdcall GetClassInfoA(long ptr ptr) GetClassInfo32A
|
0210 stdcall GetClassInfoA(long ptr ptr) GetClassInfo32A
|
||||||
|
@ -233,10 +233,10 @@ base 1
|
||||||
0226 stub GetCursor
|
0226 stub GetCursor
|
||||||
0227 stub GetCursorInfo
|
0227 stub GetCursorInfo
|
||||||
0228 stdcall GetCursorPos(ptr) GetCursorPos32
|
0228 stdcall GetCursorPos(ptr) GetCursorPos32
|
||||||
0229 stdcall GetDC(long) GetDC
|
0229 stdcall GetDC(long) GetDC32
|
||||||
0230 stub GetDCEx
|
0230 stdcall GetDCEx(long long long) GetDCEx32
|
||||||
0231 stdcall GetDesktopWindow() GetDesktopWindow
|
0231 stdcall GetDesktopWindow() GetDesktopWindow32
|
||||||
0232 stub GetDialogBaseUnits
|
0232 stdcall GetDialogBaseUnits() GetDialogBaseUnits
|
||||||
0233 stdcall GetDlgCtrlID(long) GetDlgCtrlID
|
0233 stdcall GetDlgCtrlID(long) GetDlgCtrlID
|
||||||
0234 stdcall GetDlgItem(long long) GetDlgItem
|
0234 stdcall GetDlgItem(long long) GetDlgItem
|
||||||
0235 stdcall GetDlgItemInt(long long long long) GetDlgItemInt
|
0235 stdcall GetDlgItemInt(long long long long) GetDlgItemInt
|
||||||
|
@ -244,7 +244,7 @@ base 1
|
||||||
0237 stdcall GetDlgItemTextW(long long ptr long) GetDlgItemText32W
|
0237 stdcall GetDlgItemTextW(long long ptr long) GetDlgItemText32W
|
||||||
0238 stub GetDoubleClickTime
|
0238 stub GetDoubleClickTime
|
||||||
0239 stdcall GetFocus() GetFocus32
|
0239 stdcall GetFocus() GetFocus32
|
||||||
0240 stub GetForegroundWindow
|
0240 return GetForegroundWindow 0 0 #FIXME
|
||||||
0241 stub GetIconInfo
|
0241 stub GetIconInfo
|
||||||
0242 stub GetInputDesktop
|
0242 stub GetInputDesktop
|
||||||
0243 stub GetInputState
|
0243 stub GetInputState
|
||||||
|
@ -266,12 +266,12 @@ base 1
|
||||||
0259 stub GetMenuDefaultItem
|
0259 stub GetMenuDefaultItem
|
||||||
0260 stub GetMenuIndex
|
0260 stub GetMenuIndex
|
||||||
0261 stdcall GetMenuItemCount(long) GetMenuItemCount
|
0261 stdcall GetMenuItemCount(long) GetMenuItemCount
|
||||||
0262 stub GetMenuItemID
|
0262 stdcall GetMenuItemID(long long) GetMenuItemID
|
||||||
0263 stub GetMenuItemInfoA
|
0263 stub GetMenuItemInfoA
|
||||||
0264 stub GetMenuItemInfoW
|
0264 stub GetMenuItemInfoW
|
||||||
0265 stub GetMenuItemRect
|
0265 stub GetMenuItemRect
|
||||||
0266 stub GetMenuState
|
0266 stdcall GetMenuState(long long long) GetMenuState
|
||||||
0267 stub GetMenuStringA
|
0267 stdcall GetMenuStringA(long long ptr long long) GetMenuString
|
||||||
0268 stub GetMenuStringW
|
0268 stub GetMenuStringW
|
||||||
0269 stdcall GetMessageA(ptr long long long) USER32_GetMessageA
|
0269 stdcall GetMessageA(ptr long long long) USER32_GetMessageA
|
||||||
0270 stub GetMessageExtraInfo
|
0270 stub GetMessageExtraInfo
|
||||||
|
@ -288,8 +288,8 @@ base 1
|
||||||
0281 stdcall GetPropW(long ptr) GetProp32W
|
0281 stdcall GetPropW(long ptr) GetProp32W
|
||||||
0282 stub GetQueueStatus
|
0282 stub GetQueueStatus
|
||||||
0283 stdcall GetScrollInfo(long long ptr) GetScrollInfo32
|
0283 stdcall GetScrollInfo(long long ptr) GetScrollInfo32
|
||||||
0284 stdcall GetScrollPos(long long) GetScrollPos
|
0284 stdcall GetScrollPos(long long) GetScrollPos32
|
||||||
0285 stub GetScrollRange
|
0285 stdcall GetScrollRange(long long ptr ptr) GetScrollRange32
|
||||||
0286 return GetShellWindow 0 0
|
0286 return GetShellWindow 0 0
|
||||||
0287 stdcall GetSubMenu(long long) GetSubMenu
|
0287 stdcall GetSubMenu(long long) GetSubMenu
|
||||||
0288 stdcall GetSysColor(long) GetSysColor
|
0288 stdcall GetSysColor(long) GetSysColor
|
||||||
|
@ -307,7 +307,7 @@ base 1
|
||||||
0300 stub GetUserObjectSecurity
|
0300 stub GetUserObjectSecurity
|
||||||
0301 stdcall GetWindow(long long) GetWindow
|
0301 stdcall GetWindow(long long) GetWindow
|
||||||
0302 stub GetWindowContextHelpId
|
0302 stub GetWindowContextHelpId
|
||||||
0303 stdcall GetWindowDC(long) GetWindowDC
|
0303 stdcall GetWindowDC(long) GetWindowDC32
|
||||||
0304 stdcall GetWindowLongA(long long) GetWindowLong32A
|
0304 stdcall GetWindowLongA(long long) GetWindowLong32A
|
||||||
0305 stdcall GetWindowLongW(long long) GetWindowLong32W
|
0305 stdcall GetWindowLongW(long long) GetWindowLong32W
|
||||||
0306 stdcall GetWindowPlacement(long ptr) GetWindowPlacement32
|
0306 stdcall GetWindowPlacement(long ptr) GetWindowPlacement32
|
||||||
|
@ -443,7 +443,7 @@ base 1
|
||||||
0436 stdcall RegisterWindowMessageA(ptr) RegisterWindowMessage32A
|
0436 stdcall RegisterWindowMessageA(ptr) RegisterWindowMessage32A
|
||||||
0437 stdcall RegisterWindowMessageW(ptr) RegisterWindowMessage32W
|
0437 stdcall RegisterWindowMessageW(ptr) RegisterWindowMessage32W
|
||||||
0438 stdcall ReleaseCapture() ReleaseCapture
|
0438 stdcall ReleaseCapture() ReleaseCapture
|
||||||
0439 stdcall ReleaseDC(long long) ReleaseDC
|
0439 stdcall ReleaseDC(long long) ReleaseDC32
|
||||||
0440 stub RemoveMenu
|
0440 stub RemoveMenu
|
||||||
0441 stdcall RemovePropA(long ptr) RemoveProp32A
|
0441 stdcall RemovePropA(long ptr) RemoveProp32A
|
||||||
0442 stdcall RemovePropW(long ptr) RemoveProp32W
|
0442 stdcall RemovePropW(long ptr) RemoveProp32W
|
||||||
|
@ -467,7 +467,7 @@ base 1
|
||||||
0460 stub SendNotifyMessageW
|
0460 stub SendNotifyMessageW
|
||||||
0461 stub ServerSetFunctionPointers
|
0461 stub ServerSetFunctionPointers
|
||||||
0462 stub SetActiveWindow
|
0462 stub SetActiveWindow
|
||||||
0463 stdcall SetCapture(long) SetCapture
|
0463 stdcall SetCapture(long) SetCapture32
|
||||||
0464 stdcall SetCaretBlinkTime(long) SetCaretBlinkTime
|
0464 stdcall SetCaretBlinkTime(long) SetCaretBlinkTime
|
||||||
0465 stdcall SetCaretPos(long long) SetCaretPos
|
0465 stdcall SetCaretPos(long long) SetCaretPos
|
||||||
0466 stdcall SetClassLongA(long long long) SetClassLong32A
|
0466 stdcall SetClassLongA(long long long) SetClassLong32A
|
||||||
|
@ -479,7 +479,7 @@ base 1
|
||||||
0472 stub SetCursorContents
|
0472 stub SetCursorContents
|
||||||
0473 stub SetCursorPos
|
0473 stub SetCursorPos
|
||||||
0474 stub SetDebugErrorLevel
|
0474 stub SetDebugErrorLevel
|
||||||
0475 stub SetDeskWallpaper
|
0475 stdcall SetDeskWallPaper(ptr) SetDeskWallPaper32
|
||||||
0476 stdcall SetDlgItemInt(long long long long) SetDlgItemInt32
|
0476 stdcall SetDlgItemInt(long long long long) SetDlgItemInt32
|
||||||
0477 stdcall SetDlgItemTextA(long long ptr) SetDlgItemText32A
|
0477 stdcall SetDlgItemTextA(long long ptr) SetDlgItemText32A
|
||||||
0478 stdcall SetDlgItemTextW(long long ptr) SetDlgItemText32W
|
0478 stdcall SetDlgItemTextW(long long ptr) SetDlgItemText32W
|
||||||
|
@ -505,8 +505,8 @@ base 1
|
||||||
0498 stdcall SetRect(ptr long long long long) SetRect32
|
0498 stdcall SetRect(ptr long long long long) SetRect32
|
||||||
0499 stdcall SetRectEmpty(ptr) SetRectEmpty32
|
0499 stdcall SetRectEmpty(ptr) SetRectEmpty32
|
||||||
0500 stdcall SetScrollInfo(long long ptr long) SetScrollInfo32
|
0500 stdcall SetScrollInfo(long long ptr long) SetScrollInfo32
|
||||||
0501 stdcall SetScrollPos(long long long long) SetScrollPos
|
0501 stdcall SetScrollPos(long long long long) SetScrollPos32
|
||||||
0502 stdcall SetScrollRange(long long long long long) SetScrollRange
|
0502 stdcall SetScrollRange(long long long long long) SetScrollRange32
|
||||||
0503 stub SetShellWindow
|
0503 stub SetShellWindow
|
||||||
0504 stub SetSysColors
|
0504 stub SetSysColors
|
||||||
0505 stub SetSysColorsTemp
|
0505 stub SetSysColorsTemp
|
||||||
|
@ -528,19 +528,19 @@ base 1
|
||||||
0521 stdcall SetWindowTextA(long ptr) SetWindowText32A
|
0521 stdcall SetWindowTextA(long ptr) SetWindowText32A
|
||||||
0522 stdcall SetWindowTextW(long ptr) SetWindowText32W
|
0522 stdcall SetWindowTextW(long ptr) SetWindowText32W
|
||||||
0523 stdcall SetWindowWord(long long long) SetWindowWord
|
0523 stdcall SetWindowWord(long long long) SetWindowWord
|
||||||
0524 stub SetWindowsHookA
|
0524 stdcall SetWindowsHookA(long ptr) SetWindowsHook32A
|
||||||
0525 stdcall SetWindowsHookExA(long long long long) SetWindowsHookEx32A
|
0525 stdcall SetWindowsHookExA(long long long long) SetWindowsHookEx32A
|
||||||
0526 stub SetWindowsHookExW
|
0526 stub SetWindowsHookExW
|
||||||
0527 stub SetWindowsHookW
|
0527 stub SetWindowsHookW
|
||||||
0528 stdcall ShowCaret(long) ShowCaret
|
0528 stdcall ShowCaret(long) ShowCaret
|
||||||
0529 stdcall ShowCursor(long) ShowCursor
|
0529 stdcall ShowCursor(long) ShowCursor
|
||||||
0530 stub ShowOwnedPopups
|
0530 stub ShowOwnedPopups
|
||||||
0531 stdcall ShowScrollBar(long long long) ShowScrollBar
|
0531 stdcall ShowScrollBar(long long long) ShowScrollBar32
|
||||||
0532 stub ShowStartGlass
|
0532 stub ShowStartGlass
|
||||||
0533 stdcall ShowWindow(long long) ShowWindow
|
0533 stdcall ShowWindow(long long) ShowWindow
|
||||||
0534 stub ShowWindowAsync
|
0534 stub ShowWindowAsync
|
||||||
0535 stdcall SubtractRect(ptr ptr ptr) SubtractRect32
|
0535 stdcall SubtractRect(ptr ptr ptr) SubtractRect32
|
||||||
0536 stub SwapMouseButton
|
0536 stdcall SwapMouseButton(long) SwapMouseButton
|
||||||
0537 stub SwitchDesktop
|
0537 stub SwitchDesktop
|
||||||
0538 stub SwitchToThisWindow
|
0538 stub SwitchToThisWindow
|
||||||
0539 stdcall SystemParametersInfoA(long long ptr long) SystemParametersInfo
|
0539 stdcall SystemParametersInfoA(long long ptr long) SystemParametersInfo
|
||||||
|
@ -584,7 +584,7 @@ base 1
|
||||||
0577 stub WaitMessage
|
0577 stub WaitMessage
|
||||||
0578 stdcall WinHelpA(long ptr long long) WIN32_WinHelpA
|
0578 stdcall WinHelpA(long ptr long long) WIN32_WinHelpA
|
||||||
0579 stub WinHelpW
|
0579 stub WinHelpW
|
||||||
0580 stdcall WindowFromDC(long) WindowFromDC
|
0580 stdcall WindowFromDC(long) WindowFromDC32
|
||||||
0581 stdcall WindowFromPoint(long long) WindowFromPoint32
|
0581 stdcall WindowFromPoint(long long) WindowFromPoint32
|
||||||
0582 stub keybd_event
|
0582 stub keybd_event
|
||||||
0583 stub mouse_event
|
0583 stub mouse_event
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
|
|
||||||
#define CLASS_MAGIC ('C' | ('L' << 8) | ('A' << 16) | ('S' << 24))
|
#define CLASS_MAGIC ('C' | ('L' << 8) | ('A' << 16) | ('S' << 24))
|
||||||
|
|
||||||
|
struct tagDCE;
|
||||||
|
|
||||||
typedef struct tagCLASS
|
typedef struct tagCLASS
|
||||||
{
|
{
|
||||||
struct tagCLASS *next; /* Next class */
|
struct tagCLASS *next; /* Next class */
|
||||||
|
@ -23,13 +25,13 @@ typedef struct tagCLASS
|
||||||
INT32 cbWndExtra; /* Window extra bytes */
|
INT32 cbWndExtra; /* Window extra bytes */
|
||||||
LPSTR menuNameA; /* Default menu name (ASCII string) */
|
LPSTR menuNameA; /* Default menu name (ASCII string) */
|
||||||
LPWSTR menuNameW; /* Default menu name (Unicode) */
|
LPWSTR menuNameW; /* Default menu name (Unicode) */
|
||||||
|
struct tagDCE *dce; /* Class DCE (if CS_CLASSDC) */
|
||||||
HINSTANCE32 hInstance; /* Module that created the task */
|
HINSTANCE32 hInstance; /* Module that created the task */
|
||||||
HICON16 hIcon; /* Default icon */
|
HICON16 hIcon; /* Default icon */
|
||||||
HICON16 hIconSm; /* Default small icon */
|
HICON16 hIconSm; /* Default small icon */
|
||||||
HCURSOR16 hCursor; /* Default cursor */
|
HCURSOR16 hCursor; /* Default cursor */
|
||||||
HBRUSH16 hbrBackground; /* Default background */
|
HBRUSH16 hbrBackground; /* Default background */
|
||||||
ATOM atomName; /* Name of the class */
|
ATOM atomName; /* Name of the class */
|
||||||
HANDLE16 hdce; /* Class DCE (if CS_CLASSDC) */
|
|
||||||
LONG wExtra[1]; /* Class extra bytes */
|
LONG wExtra[1]; /* Class extra bytes */
|
||||||
} CLASS;
|
} CLASS;
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
#define __WINE_CLIPBOARD_H
|
#define __WINE_CLIPBOARD_H
|
||||||
|
|
||||||
void CLIPBOARD_ReadSelection(Window w,Atom prop);
|
void CLIPBOARD_ReadSelection(Window w,Atom prop);
|
||||||
void CLIPBOARD_ReleaseSelection(HWND hwnd);
|
void CLIPBOARD_ReleaseSelection(Window w,HWND hwnd);
|
||||||
void CLIPBOARD_DisOwn(HWND hWnd);
|
void CLIPBOARD_DisOwn(WND* pWnd);
|
||||||
BOOL CLIPBOARD_IsPresent(WORD wFormat);
|
BOOL CLIPBOARD_IsPresent(WORD wFormat);
|
||||||
|
|
||||||
#endif /* __WINE_CLIPBOARD_H */
|
#endif /* __WINE_CLIPBOARD_H */
|
||||||
|
|
|
@ -34,18 +34,18 @@ typedef enum
|
||||||
|
|
||||||
typedef struct tagDCE
|
typedef struct tagDCE
|
||||||
{
|
{
|
||||||
HANDLE hNext;
|
struct tagDCE *next;
|
||||||
HDC hDC;
|
HDC32 hDC;
|
||||||
HWND hwndCurrent;
|
HWND32 hwndCurrent;
|
||||||
HWND hwndDC;
|
HWND32 hwndDC;
|
||||||
HRGN hClipRgn;
|
HRGN32 hClipRgn;
|
||||||
DCE_TYPE type;
|
DCE_TYPE type;
|
||||||
DWORD DCXflags;
|
DWORD DCXflags;
|
||||||
} DCE;
|
} DCE;
|
||||||
|
|
||||||
|
|
||||||
extern void DCE_Init(void);
|
extern void DCE_Init(void);
|
||||||
extern HANDLE DCE_AllocDCE( HWND hWnd, DCE_TYPE type );
|
extern DCE *DCE_AllocDCE( HWND32 hWnd, DCE_TYPE type );
|
||||||
extern void DCE_FreeDCE( HANDLE hdce );
|
extern void DCE_FreeDCE( DCE *dce );
|
||||||
|
|
||||||
#endif /* DCE_H */
|
#endif /* DCE_H */
|
||||||
|
|
|
@ -25,14 +25,14 @@ typedef struct {
|
||||||
|
|
||||||
WORD DDE_SyncHandle(HGLOBAL16 handle, WORD sel);
|
WORD DDE_SyncHandle(HGLOBAL16 handle, WORD sel);
|
||||||
void *DDE_malloc(unsigned int flags,unsigned long size, SHMDATA *shmdata);
|
void *DDE_malloc(unsigned int flags,unsigned long size, SHMDATA *shmdata);
|
||||||
HANDLE DDE_GlobalReAlloc(WORD,long,WORD);
|
HANDLE16 DDE_GlobalReAlloc(WORD,long,WORD);
|
||||||
HGLOBAL16 DDE_GlobalFree(HGLOBAL16 block);
|
HGLOBAL16 DDE_GlobalFree(HGLOBAL16 block);
|
||||||
void *DDE_AttachHandle(HGLOBAL16 handle, SEGPTR *segptr);
|
void *DDE_AttachHandle(HGLOBAL16 handle, SEGPTR *segptr);
|
||||||
WORD DDE_GlobalHandleToSel( HGLOBAL16 handle );
|
WORD DDE_GlobalHandleToSel( HGLOBAL16 handle );
|
||||||
int DDE_GlobalUnlock(int);
|
int DDE_GlobalUnlock(int);
|
||||||
HANDLE DDE_GlobalSize(WORD);
|
HANDLE16 DDE_GlobalSize(WORD);
|
||||||
HANDLE DDE_GlobalHandle(WORD);
|
HANDLE16 DDE_GlobalHandle(WORD);
|
||||||
HANDLE DDE_GlobalFlags(WORD);
|
HANDLE16 DDE_GlobalFlags(WORD);
|
||||||
|
|
||||||
#endif /* CONFIG_IPC */
|
#endif /* CONFIG_IPC */
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,7 @@
|
||||||
#undef DEBUG_SCROLL
|
#undef DEBUG_SCROLL
|
||||||
#undef DEBUG_SELECTOR
|
#undef DEBUG_SELECTOR
|
||||||
#undef DEBUG_SEM
|
#undef DEBUG_SEM
|
||||||
|
#undef DEBUG_SENDMSG
|
||||||
#undef DEBUG_SHM
|
#undef DEBUG_SHM
|
||||||
#undef DEBUG_STRESS
|
#undef DEBUG_STRESS
|
||||||
#undef DEBUG_SYSCOLOR
|
#undef DEBUG_SYSCOLOR
|
||||||
|
@ -159,6 +160,7 @@
|
||||||
#define DEBUG_SCROLL
|
#define DEBUG_SCROLL
|
||||||
#define DEBUG_SELECTOR
|
#define DEBUG_SELECTOR
|
||||||
#define DEBUG_SEM
|
#define DEBUG_SEM
|
||||||
|
#define DEBUG_SENDMSG
|
||||||
#define DEBUG_SHM
|
#define DEBUG_SHM
|
||||||
#define DEBUG_STRESS
|
#define DEBUG_STRESS
|
||||||
#define DEBUG_SYSCOLOR
|
#define DEBUG_SYSCOLOR
|
||||||
|
@ -496,6 +498,11 @@ short debug_msg_enabled[]={
|
||||||
#else
|
#else
|
||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef DEBUG_SENDMSG
|
||||||
|
1,
|
||||||
|
#else
|
||||||
|
0,
|
||||||
|
#endif
|
||||||
#ifdef DEBUG_SHM
|
#ifdef DEBUG_SHM
|
||||||
1,
|
1,
|
||||||
#else
|
#else
|
||||||
|
@ -1396,8 +1403,21 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_shm if(!debug_msg_enabled[64]) ; else fprintf
|
#define dprintf_sendmsg if(!debug_msg_enabled[64]) ; else fprintf
|
||||||
#define debugging_shm debug_msg_enabled[64]
|
#define debugging_sendmsg debug_msg_enabled[64]
|
||||||
|
#else
|
||||||
|
#ifdef DEBUG_SENDMSG
|
||||||
|
#define dprintf_sendmsg fprintf
|
||||||
|
#define debugging_sendmsg 1
|
||||||
|
#else
|
||||||
|
#define dprintf_sendmsg while(0) fprintf
|
||||||
|
#define debugging_sendmsg 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_RUNTIME
|
||||||
|
#define dprintf_shm if(!debug_msg_enabled[65]) ; else fprintf
|
||||||
|
#define debugging_shm debug_msg_enabled[65]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_SHM
|
#ifdef DEBUG_SHM
|
||||||
#define dprintf_shm fprintf
|
#define dprintf_shm fprintf
|
||||||
|
@ -1409,8 +1429,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_stress if(!debug_msg_enabled[65]) ; else fprintf
|
#define dprintf_stress if(!debug_msg_enabled[66]) ; else fprintf
|
||||||
#define debugging_stress debug_msg_enabled[65]
|
#define debugging_stress debug_msg_enabled[66]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_STRESS
|
#ifdef DEBUG_STRESS
|
||||||
#define dprintf_stress fprintf
|
#define dprintf_stress fprintf
|
||||||
|
@ -1422,8 +1442,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_syscolor if(!debug_msg_enabled[66]) ; else fprintf
|
#define dprintf_syscolor if(!debug_msg_enabled[67]) ; else fprintf
|
||||||
#define debugging_syscolor debug_msg_enabled[66]
|
#define debugging_syscolor debug_msg_enabled[67]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_SYSCOLOR
|
#ifdef DEBUG_SYSCOLOR
|
||||||
#define dprintf_syscolor fprintf
|
#define dprintf_syscolor fprintf
|
||||||
|
@ -1435,8 +1455,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_task if(!debug_msg_enabled[67]) ; else fprintf
|
#define dprintf_task if(!debug_msg_enabled[68]) ; else fprintf
|
||||||
#define debugging_task debug_msg_enabled[67]
|
#define debugging_task debug_msg_enabled[68]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_TASK
|
#ifdef DEBUG_TASK
|
||||||
#define dprintf_task fprintf
|
#define dprintf_task fprintf
|
||||||
|
@ -1448,8 +1468,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_text if(!debug_msg_enabled[68]) ; else fprintf
|
#define dprintf_text if(!debug_msg_enabled[69]) ; else fprintf
|
||||||
#define debugging_text debug_msg_enabled[68]
|
#define debugging_text debug_msg_enabled[69]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_TEXT
|
#ifdef DEBUG_TEXT
|
||||||
#define dprintf_text fprintf
|
#define dprintf_text fprintf
|
||||||
|
@ -1461,8 +1481,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_timer if(!debug_msg_enabled[69]) ; else fprintf
|
#define dprintf_timer if(!debug_msg_enabled[70]) ; else fprintf
|
||||||
#define debugging_timer debug_msg_enabled[69]
|
#define debugging_timer debug_msg_enabled[70]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_TIMER
|
#ifdef DEBUG_TIMER
|
||||||
#define dprintf_timer fprintf
|
#define dprintf_timer fprintf
|
||||||
|
@ -1474,8 +1494,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_toolhelp if(!debug_msg_enabled[70]) ; else fprintf
|
#define dprintf_toolhelp if(!debug_msg_enabled[71]) ; else fprintf
|
||||||
#define debugging_toolhelp debug_msg_enabled[70]
|
#define debugging_toolhelp debug_msg_enabled[71]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_TOOLHELP
|
#ifdef DEBUG_TOOLHELP
|
||||||
#define dprintf_toolhelp fprintf
|
#define dprintf_toolhelp fprintf
|
||||||
|
@ -1487,8 +1507,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_ver if(!debug_msg_enabled[71]) ; else fprintf
|
#define dprintf_ver if(!debug_msg_enabled[72]) ; else fprintf
|
||||||
#define debugging_ver debug_msg_enabled[71]
|
#define debugging_ver debug_msg_enabled[72]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_VER
|
#ifdef DEBUG_VER
|
||||||
#define dprintf_ver fprintf
|
#define dprintf_ver fprintf
|
||||||
|
@ -1500,8 +1520,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_vxd if(!debug_msg_enabled[72]) ; else fprintf
|
#define dprintf_vxd if(!debug_msg_enabled[73]) ; else fprintf
|
||||||
#define debugging_vxd debug_msg_enabled[72]
|
#define debugging_vxd debug_msg_enabled[73]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_VXD
|
#ifdef DEBUG_VXD
|
||||||
#define dprintf_vxd fprintf
|
#define dprintf_vxd fprintf
|
||||||
|
@ -1513,8 +1533,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_win if(!debug_msg_enabled[73]) ; else fprintf
|
#define dprintf_win if(!debug_msg_enabled[74]) ; else fprintf
|
||||||
#define debugging_win debug_msg_enabled[73]
|
#define debugging_win debug_msg_enabled[74]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_WIN
|
#ifdef DEBUG_WIN
|
||||||
#define dprintf_win fprintf
|
#define dprintf_win fprintf
|
||||||
|
@ -1526,8 +1546,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_win32 if(!debug_msg_enabled[74]) ; else fprintf
|
#define dprintf_win32 if(!debug_msg_enabled[75]) ; else fprintf
|
||||||
#define debugging_win32 debug_msg_enabled[74]
|
#define debugging_win32 debug_msg_enabled[75]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_WIN32
|
#ifdef DEBUG_WIN32
|
||||||
#define dprintf_win32 fprintf
|
#define dprintf_win32 fprintf
|
||||||
|
@ -1539,8 +1559,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_winsock if(!debug_msg_enabled[75]) ; else fprintf
|
#define dprintf_winsock if(!debug_msg_enabled[76]) ; else fprintf
|
||||||
#define debugging_winsock debug_msg_enabled[75]
|
#define debugging_winsock debug_msg_enabled[76]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_WINSOCK
|
#ifdef DEBUG_WINSOCK
|
||||||
#define dprintf_winsock fprintf
|
#define dprintf_winsock fprintf
|
||||||
|
@ -1619,6 +1639,7 @@ static char *debug_msg_name[] = {
|
||||||
"scroll",
|
"scroll",
|
||||||
"selector",
|
"selector",
|
||||||
"sem",
|
"sem",
|
||||||
|
"sendmsg",
|
||||||
"shm",
|
"shm",
|
||||||
"stress",
|
"stress",
|
||||||
"syscolor",
|
"syscolor",
|
||||||
|
|
|
@ -11,13 +11,13 @@
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
HBRUSH hbrushPattern;
|
HBRUSH32 hbrushPattern;
|
||||||
HBITMAP hbitmapWallPaper;
|
HBITMAP32 hbitmapWallPaper;
|
||||||
SIZE16 bitmapSize;
|
SIZE32 bitmapSize;
|
||||||
BOOL fTileWallPaper;
|
BOOL32 fTileWallPaper;
|
||||||
} DESKTOPINFO;
|
} DESKTOPINFO;
|
||||||
|
|
||||||
extern BOOL DESKTOP_SetPattern(char *pattern );
|
extern BOOL32 DESKTOP_SetPattern( LPCSTR pattern );
|
||||||
extern LRESULT DesktopWndProc( HWND32 hwnd, UINT32 message,
|
extern LRESULT DesktopWndProc( HWND32 hwnd, UINT32 message,
|
||||||
WPARAM32 wParam, LPARAM lParam );
|
WPARAM32 wParam, LPARAM lParam );
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@
|
||||||
#define __WINE_DIRECTORY_H
|
#define __WINE_DIRECTORY_H
|
||||||
|
|
||||||
extern int DIR_Init(void);
|
extern int DIR_Init(void);
|
||||||
extern UINT DIR_GetWindowsUnixDir( LPSTR path, UINT count );
|
extern UINT32 DIR_GetWindowsUnixDir( LPSTR path, UINT32 count );
|
||||||
extern UINT DIR_GetSystemUnixDir( LPSTR path, UINT count );
|
extern UINT32 DIR_GetSystemUnixDir( LPSTR path, UINT32 count );
|
||||||
extern UINT DIR_GetTempUnixDir( LPSTR path, UINT count );
|
extern UINT32 DIR_GetTempUnixDir( LPSTR path, UINT32 count );
|
||||||
extern UINT DIR_GetDosPath( int element, LPSTR path, UINT count );
|
extern UINT32 DIR_GetDosPath( INT32 element, LPSTR path, UINT32 count );
|
||||||
extern UINT DIR_GetUnixPath( int element, LPSTR path, UINT count );
|
extern UINT32 DIR_GetUnixPath( INT32 element, LPSTR path, UINT32 count );
|
||||||
|
|
||||||
#endif /* __WINE_DIRECTORY_H */
|
#endif /* __WINE_DIRECTORY_H */
|
||||||
|
|
|
@ -22,7 +22,6 @@ extern int FILE_Fstat( HFILE hFile, BYTE *pattr, DWORD *psize,
|
||||||
extern HFILE FILE_Dup( HFILE hFile );
|
extern HFILE FILE_Dup( HFILE hFile );
|
||||||
extern HFILE FILE_Dup2( HFILE hFile1, HFILE hFile2 );
|
extern HFILE FILE_Dup2( HFILE hFile1, HFILE hFile2 );
|
||||||
extern HFILE FILE_Open( LPCSTR path, INT32 mode );
|
extern HFILE FILE_Open( LPCSTR path, INT32 mode );
|
||||||
extern INT32 FILE_Read( HFILE hFile, LPVOID buffer, UINT32 count );
|
|
||||||
extern BOOL32 FILE_SetFileType( HFILE hFile, DWORD type );
|
extern BOOL32 FILE_SetFileType( HFILE hFile, DWORD type );
|
||||||
extern HFILE _lcreat_uniq( LPCSTR path, INT32 attr );
|
extern HFILE _lcreat_uniq( LPCSTR path, INT32 attr );
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,9 @@ typedef struct
|
||||||
int flags;
|
int flags;
|
||||||
const DeviceCaps *devCaps;
|
const DeviceCaps *devCaps;
|
||||||
|
|
||||||
HANDLE16 hMetaFile;
|
HMETAFILE16 hMetaFile;
|
||||||
|
HGLOBAL16 hHT; /* Handle table for metafile */
|
||||||
|
WORD HTLen; /* Handle table length (in entries) */
|
||||||
HRGN16 hClipRgn; /* Clip region (may be 0) */
|
HRGN16 hClipRgn; /* Clip region (may be 0) */
|
||||||
HRGN16 hVisRgn; /* Visible region (must never be 0) */
|
HRGN16 hVisRgn; /* Visible region (must never be 0) */
|
||||||
HRGN16 hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */
|
HRGN16 hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */
|
||||||
|
|
|
@ -8,9 +8,13 @@
|
||||||
#ifndef __WINE_GRAPHICS_H
|
#ifndef __WINE_GRAPHICS_H
|
||||||
#define __WINE_GRAPHICS_H
|
#define __WINE_GRAPHICS_H
|
||||||
|
|
||||||
extern void GRAPH_DrawReliefRect( HDC hdc, RECT16 *rect, int highlight_size,
|
#include "windows.h"
|
||||||
int shadow_size, BOOL pressed );
|
|
||||||
extern BOOL GRAPH_DrawBitmap( HDC hdc, HBITMAP hbitmap, int xdest, int ydest,
|
extern void GRAPH_DrawReliefRect( HDC32 hdc, const RECT32 *rect,
|
||||||
int xsrc, int ysrc, int width, int height );
|
INT32 highlight_size, INT32 shadow_size,
|
||||||
|
BOOL32 pressed );
|
||||||
|
extern BOOL32 GRAPH_DrawBitmap( HDC32 hdc, HBITMAP32 hbitmap,
|
||||||
|
int xdest, int ydest, int xsrc, int ysrc,
|
||||||
|
int width, int height );
|
||||||
|
|
||||||
#endif /* __WINE_GRAPHICS_H */
|
#endif /* __WINE_GRAPHICS_H */
|
||||||
|
|
|
@ -54,6 +54,7 @@ extern DWORD ListBoxGetItemData(LPHEADLIST lphl, UINT uIndex);
|
||||||
extern int ListBoxSetItemData(LPHEADLIST lphl, UINT uIndex, DWORD ItemData);
|
extern int ListBoxSetItemData(LPHEADLIST lphl, UINT uIndex, DWORD ItemData);
|
||||||
extern int ListBoxDeleteString(LPHEADLIST lphl, UINT uIndex);
|
extern int ListBoxDeleteString(LPHEADLIST lphl, UINT uIndex);
|
||||||
extern int ListBoxFindString(LPHEADLIST lphl, UINT nFirst, SEGPTR MatchStr);
|
extern int ListBoxFindString(LPHEADLIST lphl, UINT nFirst, SEGPTR MatchStr);
|
||||||
|
extern int ListBoxFindStringExact(LPHEADLIST lphl, UINT nFirst, SEGPTR MatchStr);
|
||||||
extern int ListBoxResetContent(LPHEADLIST lphl);
|
extern int ListBoxResetContent(LPHEADLIST lphl);
|
||||||
extern int ListBoxSetCurSel(LPHEADLIST lphl, WORD wIndex);
|
extern int ListBoxSetCurSel(LPHEADLIST lphl, WORD wIndex);
|
||||||
extern int ListBoxSetSel(LPHEADLIST lphl, WORD wIndex, WORD state);
|
extern int ListBoxSetSel(LPHEADLIST lphl, WORD wIndex, WORD state);
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
extern BOOL MENU_Init(void);
|
extern BOOL MENU_Init(void);
|
||||||
extern HMENU MENU_GetDefSysMenu(void);
|
extern HMENU MENU_GetDefSysMenu(void);
|
||||||
|
extern void MENU_InitSysMenuPopup(HMENU hmenu, DWORD style, DWORD clsStyle);
|
||||||
extern UINT MENU_GetMenuBarHeight( HWND hwnd, UINT menubarWidth,
|
extern UINT MENU_GetMenuBarHeight( HWND hwnd, UINT menubarWidth,
|
||||||
int orgX, int orgY );
|
int orgX, int orgY );
|
||||||
extern void MENU_TrackMouseMenuBar( HWND hwnd, POINT16 pt );
|
extern void MENU_TrackMouseMenuBar( HWND hwnd, POINT16 pt );
|
||||||
|
|
|
@ -27,7 +27,7 @@ extern BOOL32 TIMER_GetTimerMsg( MSG16 *msg, HWND32 hwnd,
|
||||||
HQUEUE16 hQueue, BOOL32 remove );
|
HQUEUE16 hQueue, BOOL32 remove );
|
||||||
|
|
||||||
/* event.c */
|
/* event.c */
|
||||||
extern BOOL32 EVENT_WaitXEvent( BOOL32 sleep );
|
extern BOOL32 EVENT_WaitXEvent( BOOL32 sleep, BOOL32 peek );
|
||||||
extern void EVENT_Synchronize(void);
|
extern void EVENT_Synchronize(void);
|
||||||
extern void EVENT_ProcessEvent( XEvent *event );
|
extern void EVENT_ProcessEvent( XEvent *event );
|
||||||
extern void EVENT_RegisterWindow( WND *pWnd );
|
extern void EVENT_RegisterWindow( WND *pWnd );
|
||||||
|
|
|
@ -117,7 +117,9 @@ extern void MODULE_WalkModules(void);
|
||||||
extern int MODULE_OpenFile( HMODULE16 hModule );
|
extern int MODULE_OpenFile( HMODULE16 hModule );
|
||||||
extern LPSTR MODULE_GetModuleName( HMODULE16 hModule );
|
extern LPSTR MODULE_GetModuleName( HMODULE16 hModule );
|
||||||
extern void MODULE_RegisterModule( NE_MODULE *pModule );
|
extern void MODULE_RegisterModule( NE_MODULE *pModule );
|
||||||
|
extern HMODULE16 MODULE_FindModule( LPCSTR path );
|
||||||
extern HINSTANCE16 MODULE_GetInstance( HMODULE16 hModule );
|
extern HINSTANCE16 MODULE_GetInstance( HMODULE16 hModule );
|
||||||
|
extern HMODULE16 MODULE_CreateDummyModule( const OFSTRUCT *ofs );
|
||||||
extern WORD MODULE_GetOrdinal( HMODULE16 hModule, const char *name );
|
extern WORD MODULE_GetOrdinal( HMODULE16 hModule, const char *name );
|
||||||
extern FARPROC16 MODULE_GetEntryPoint( HMODULE16 hModule, WORD ordinal );
|
extern FARPROC16 MODULE_GetEntryPoint( HMODULE16 hModule, WORD ordinal );
|
||||||
extern BOOL16 MODULE_SetEntryPoint( HMODULE16 hModule, WORD ordinal,
|
extern BOOL16 MODULE_SetEntryPoint( HMODULE16 hModule, WORD ordinal,
|
||||||
|
|
|
@ -16,6 +16,12 @@ typedef struct tagQMSG
|
||||||
MSG16 msg;
|
MSG16 msg;
|
||||||
} QMSG;
|
} QMSG;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
LRESULT lResult;
|
||||||
|
BOOL16 bPending;
|
||||||
|
} QSMCTRL;
|
||||||
|
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
|
|
||||||
typedef struct tagMESSAGEQUEUE
|
typedef struct tagMESSAGEQUEUE
|
||||||
|
@ -40,7 +46,7 @@ typedef struct tagMESSAGEQUEUE
|
||||||
WORD wPostQMsg; /* 2c PostQuitMessage flag */
|
WORD wPostQMsg; /* 2c PostQuitMessage flag */
|
||||||
WORD wExitCode; /* 2e PostQuitMessage exit code */
|
WORD wExitCode; /* 2e PostQuitMessage exit code */
|
||||||
WORD flags; /* 30 Queue flags */
|
WORD flags; /* 30 Queue flags */
|
||||||
WORD reserved3[2]; /* 32 Unknown */
|
QSMCTRL* smResultInit; /* 32 1st LRESULT ptr - was: reserved */
|
||||||
WORD wWinVersion; /* 36 Expected Windows version */
|
WORD wWinVersion; /* 36 Expected Windows version */
|
||||||
HQUEUE16 InSendMessageHandle; /* 38 Queue of task that sent a message */
|
HQUEUE16 InSendMessageHandle; /* 38 Queue of task that sent a message */
|
||||||
HTASK16 hSendingTask; /* 3a Handle of task that sent a message */
|
HTASK16 hSendingTask; /* 3a Handle of task that sent a message */
|
||||||
|
@ -50,21 +56,22 @@ typedef struct tagMESSAGEQUEUE
|
||||||
WORD changeBits; /* 42 Changed wake-up bits */
|
WORD changeBits; /* 42 Changed wake-up bits */
|
||||||
WORD wakeBits; /* 44 Queue wake-up bits */
|
WORD wakeBits; /* 44 Queue wake-up bits */
|
||||||
WORD wakeMask; /* 46 Queue wake-up mask */
|
WORD wakeMask; /* 46 Queue wake-up mask */
|
||||||
WORD SendMsgReturnPtrs[3]; /* 48 Near ptr to return values (?) */
|
QSMCTRL* smResultCurrent; /* 48 ptrs to SendMessage() LRESULT - point to */
|
||||||
|
WORD SendMsgReturnPtr[1]; /* values on stack */
|
||||||
HANDLE16 hCurHook; /* 4e Current hook */
|
HANDLE16 hCurHook; /* 4e Current hook */
|
||||||
HANDLE16 hooks[WH_NB_HOOKS]; /* 50 Task hooks list */
|
HANDLE16 hooks[WH_NB_HOOKS]; /* 50 Task hooks list */
|
||||||
WORD reserved4[3]; /* 68 Unknown */
|
QSMCTRL* smResult; /* 6c 3rd LRESULT ptr - was: reserved */
|
||||||
QMSG messages[1]; /* 6e Queue messages */
|
QMSG messages[1]; /* 70 Queue messages */
|
||||||
} MESSAGEQUEUE;
|
} MESSAGEQUEUE;
|
||||||
|
|
||||||
#pragma pack(4)
|
#pragma pack(4)
|
||||||
|
|
||||||
/* Extra (undocumented) queue wake bits; not sure about the values */
|
/* Extra (undocumented) queue wake bits - see "Undoc. Windows" */
|
||||||
#define QS_SMRESULT 0x0100 /* Queue has a SendMessage() result */
|
#define QS_SMRESULT 0x8000 /* Queue has a SendMessage() result */
|
||||||
#define QS_SMPARAMSFREE 0x0200 /* SendMessage() parameters are available */
|
#define QS_SMPARAMSFREE 0x4000 /* SendMessage() parameters are available */
|
||||||
|
|
||||||
/* Queue flags */
|
/* Queue flags */
|
||||||
#define QUEUE_FLAG_REPLIED 0x0001 /* Replied to a SendMessage() */
|
#define QUEUE_FLAG_XEVENT 0x0001
|
||||||
|
|
||||||
extern void QUEUE_DumpQueue( HQUEUE16 hQueue );
|
extern void QUEUE_DumpQueue( HQUEUE16 hQueue );
|
||||||
extern void QUEUE_WalkQueues(void);
|
extern void QUEUE_WalkQueues(void);
|
||||||
|
|
|
@ -12,16 +12,18 @@
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
INT CurVal; /* Current scroll-bar value */
|
INT32 CurVal; /* Current scroll-bar value */
|
||||||
INT MinVal; /* Minimum scroll-bar value */
|
INT32 MinVal; /* Minimum scroll-bar value */
|
||||||
INT MaxVal; /* Maximum scroll-bar value */
|
INT32 MaxVal; /* Maximum scroll-bar value */
|
||||||
INT Page; /* Page size of scroll bar (Win32) */
|
INT32 Page; /* Page size of scroll bar (Win32) */
|
||||||
WORD flags; /* EnableScrollBar flags */
|
UINT32 flags; /* EnableScrollBar flags */
|
||||||
} SCROLLBAR_INFO;
|
} SCROLLBAR_INFO;
|
||||||
|
|
||||||
extern LONG ScrollBarWndProc( HWND hwnd, WORD uMsg, WORD wParam, LONG lParam );
|
extern LRESULT ScrollBarWndProc( HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam,
|
||||||
extern void SCROLL_DrawScrollBar( HWND hwnd, HDC hdc, int nBar );
|
LPARAM lParam );
|
||||||
extern void SCROLL_HandleScrollEvent( HWND hwnd, int nBar,
|
extern void SCROLL_DrawScrollBar( HWND32 hwnd, HDC32 hdc, INT32 nBar,
|
||||||
WORD msg, POINT16 pt );
|
BOOL32 arrows );
|
||||||
|
extern void SCROLL_HandleScrollEvent( HWND32 hwnd, INT32 nBar,
|
||||||
|
UINT32 msg, POINT32 pt );
|
||||||
|
|
||||||
#endif /* SCROLL_H */
|
#endif /* SCROLL_H */
|
||||||
|
|
|
@ -9,6 +9,10 @@
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "winreg.h"
|
#include "winreg.h"
|
||||||
|
|
||||||
|
#ifndef MAX_PATH
|
||||||
|
#define MAX_PATH 260
|
||||||
|
#endif
|
||||||
|
|
||||||
extern INT ShellAbout(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff,
|
extern INT ShellAbout(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff,
|
||||||
HICON16 hIcon);
|
HICON16 hIcon);
|
||||||
extern void SHELL_LoadRegistry();
|
extern void SHELL_LoadRegistry();
|
||||||
|
@ -32,6 +36,44 @@ typedef struct { /* structure for dropped files */
|
||||||
/* memory block with filenames follows */
|
/* memory block with filenames follows */
|
||||||
} DROPFILESTRUCT, *LPDROPFILESTRUCT;
|
} DROPFILESTRUCT, *LPDROPFILESTRUCT;
|
||||||
|
|
||||||
|
typedef struct tagSHFILEINFO32A {
|
||||||
|
HICON32 hIcon; /* icon */
|
||||||
|
int iIcon; /* icon index */
|
||||||
|
DWORD dwAttributes; /* SFGAO_ flags */
|
||||||
|
CHAR szDisplayName[MAX_PATH];/* display name (or path) */
|
||||||
|
CHAR szTypeName[80]; /* type name */
|
||||||
|
} SHFILEINFO32A;
|
||||||
|
|
||||||
|
typedef struct tagSHFILEINFO32W {
|
||||||
|
HICON32 hIcon; /* icon */
|
||||||
|
int iIcon; /* icon index */
|
||||||
|
DWORD dwAttributes; /* SFGAO_ flags */
|
||||||
|
WCHAR szDisplayName[MAX_PATH];/* display name (or path) */
|
||||||
|
WCHAR szTypeName[80]; /* type name */
|
||||||
|
} SHFILEINFO32W;
|
||||||
|
|
||||||
|
DECL_WINELIB_TYPE_AW(SHFILEINFO);
|
||||||
|
|
||||||
|
#define SHGFI_ICON 0x000000100 /* get icon */
|
||||||
|
#define SHGFI_DISPLAYNAME 0x000000200 /* get display name */
|
||||||
|
#define SHGFI_TYPENAME 0x000000400 /* get type name */
|
||||||
|
#define SHGFI_ATTRIBUTES 0x000000800 /* get attributes */
|
||||||
|
#define SHGFI_ICONLOCATION 0x000001000 /* get icon location */
|
||||||
|
#define SHGFI_EXETYPE 0x000002000 /* return exe type */
|
||||||
|
#define SHGFI_SYSICONINDEX 0x000004000 /* get system icon index */
|
||||||
|
#define SHGFI_LINKOVERLAY 0x000008000 /* put a link overlay on icon */
|
||||||
|
#define SHGFI_SELECTED 0x000010000 /* show icon in selected state */
|
||||||
|
#define SHGFI_LARGEICON 0x000000000 /* get large icon */
|
||||||
|
#define SHGFI_SMALLICON 0x000000001 /* get small icon */
|
||||||
|
#define SHGFI_OPENICON 0x000000002 /* get open icon */
|
||||||
|
#define SHGFI_SHELLICONSIZE 0x000000004 /* get shell size icon */
|
||||||
|
#define SHGFI_PIDL 0x000000008 /* pszPath is a pidl */
|
||||||
|
#define SHGFI_USEFILEATTRIBUTES 0x000000010 /* use passed dwFileAttribute */
|
||||||
|
|
||||||
|
DWORD SHGetFileInfo32A(LPCSTR,DWORD,SHFILEINFO32A*,UINT32,UINT32);
|
||||||
|
DWORD SHGetFileInfo32W(LPCWSTR,DWORD,SHFILEINFO32W*,UINT32,UINT32);
|
||||||
|
#define SHGetFileInfo WINELIB_NAME_AW(SHGetFileInfo)
|
||||||
|
|
||||||
#define SE_ERR_SHARE 26
|
#define SE_ERR_SHARE 26
|
||||||
#define SE_ERR_ASSOCINCOMPLETE 27
|
#define SE_ERR_ASSOCINCOMPLETE 27
|
||||||
#define SE_ERR_DDETIMEOUT 28
|
#define SE_ERR_DDETIMEOUT 28
|
||||||
|
|
|
@ -140,6 +140,7 @@
|
||||||
#undef DEBUG_SCROLL
|
#undef DEBUG_SCROLL
|
||||||
#undef DEBUG_SELECTOR
|
#undef DEBUG_SELECTOR
|
||||||
#undef DEBUG_SEM
|
#undef DEBUG_SEM
|
||||||
|
#undef DEBUG_SENDMSG
|
||||||
#undef DEBUG_SHM
|
#undef DEBUG_SHM
|
||||||
#undef DEBUG_STRESS
|
#undef DEBUG_STRESS
|
||||||
#undef DEBUG_SYSCOLOR
|
#undef DEBUG_SYSCOLOR
|
||||||
|
@ -219,6 +220,7 @@
|
||||||
#define DEBUG_SCROLL
|
#define DEBUG_SCROLL
|
||||||
#define DEBUG_SELECTOR
|
#define DEBUG_SELECTOR
|
||||||
#define DEBUG_SEM
|
#define DEBUG_SEM
|
||||||
|
#define DEBUG_SENDMSG
|
||||||
#define DEBUG_SHM
|
#define DEBUG_SHM
|
||||||
#define DEBUG_STRESS
|
#define DEBUG_STRESS
|
||||||
#define DEBUG_SYSCOLOR
|
#define DEBUG_SYSCOLOR
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
#define RDW_C_USEHRGN 0x0001
|
#define RDW_C_USEHRGN 0x0001
|
||||||
#define RDW_C_DELETEHRGN 0x0002
|
#define RDW_C_DELETEHRGN 0x0002
|
||||||
|
|
||||||
|
struct tagDCE;
|
||||||
|
|
||||||
typedef struct tagWND
|
typedef struct tagWND
|
||||||
{
|
{
|
||||||
struct tagWND *next; /* Next sibling */
|
struct tagWND *next; /* Next sibling */
|
||||||
|
@ -52,12 +54,12 @@ typedef struct tagWND
|
||||||
void *pVScroll; /* Vertical scroll-bar info */
|
void *pVScroll; /* Vertical scroll-bar info */
|
||||||
void *pHScroll; /* Horizontal scroll-bar info */
|
void *pHScroll; /* Horizontal scroll-bar info */
|
||||||
void *pProp; /* Pointer to properties list */
|
void *pProp; /* Pointer to properties list */
|
||||||
|
struct tagDCE *dce; /* Window DCE (if CS_OWNDC or CS_CLASSDC) */
|
||||||
HGLOBAL16 hmemTaskQ; /* Task queue global memory handle */
|
HGLOBAL16 hmemTaskQ; /* Task queue global memory handle */
|
||||||
HRGN16 hrgnUpdate; /* Update region */
|
HRGN16 hrgnUpdate; /* Update region */
|
||||||
HWND16 hwndLastActive;/* Last active popup hwnd */
|
HWND16 hwndLastActive;/* Last active popup hwnd */
|
||||||
DWORD dwStyle; /* Window style (from CreateWindow) */
|
DWORD dwStyle; /* Window style (from CreateWindow) */
|
||||||
DWORD dwExStyle; /* Extended style (from CreateWindowEx) */
|
DWORD dwExStyle; /* Extended style (from CreateWindowEx) */
|
||||||
HANDLE16 hdce; /* Window DCE (if CS_OWNDC or CS_CLASSDC) */
|
|
||||||
UINT16 wIDmenu; /* ID or hmenu (from CreateWindow) */
|
UINT16 wIDmenu; /* ID or hmenu (from CreateWindow) */
|
||||||
WORD flags; /* Misc. flags (see below) */
|
WORD flags; /* Misc. flags (see below) */
|
||||||
Window window; /* X window (only for top-level windows) */
|
Window window; /* X window (only for top-level windows) */
|
||||||
|
@ -77,6 +79,7 @@ typedef struct tagWND
|
||||||
#define WIN_NCACTIVATED 0x0080 /* last WM_NCACTIVATE was positive */
|
#define WIN_NCACTIVATED 0x0080 /* last WM_NCACTIVATE was positive */
|
||||||
#define WIN_MANAGED 0x0100 /* Window managed by the X wm */
|
#define WIN_MANAGED 0x0100 /* Window managed by the X wm */
|
||||||
#define WIN_ISDIALOG 0x0200 /* Window is a dialog */
|
#define WIN_ISDIALOG 0x0200 /* Window is a dialog */
|
||||||
|
#define WIN_SAVEUNDER_OVERRIDE 0x0400
|
||||||
|
|
||||||
/* Window functions */
|
/* Window functions */
|
||||||
extern WND *WIN_FindWndPtr( HWND32 hwnd );
|
extern WND *WIN_FindWndPtr( HWND32 hwnd );
|
||||||
|
@ -89,6 +92,7 @@ extern BOOL32 WIN_LinkWindow( HWND32 hwnd, HWND32 hwndInsertAfter );
|
||||||
extern HWND32 WIN_FindWinToRepaint( HWND32 hwnd, HQUEUE16 hQueue );
|
extern HWND32 WIN_FindWinToRepaint( HWND32 hwnd, HQUEUE16 hQueue );
|
||||||
extern void WIN_SendParentNotify( HWND32 hwnd, WORD event,
|
extern void WIN_SendParentNotify( HWND32 hwnd, WORD event,
|
||||||
WORD idChild, LPARAM lValue );
|
WORD idChild, LPARAM lValue );
|
||||||
|
extern void WIN_DestroyQueueWindows( WND* wnd, HQUEUE16 hQueue );
|
||||||
extern BOOL32 WIN_CreateDesktopWindow(void);
|
extern BOOL32 WIN_CreateDesktopWindow(void);
|
||||||
extern HWND32 WIN_GetTopParent( HWND32 hwnd );
|
extern HWND32 WIN_GetTopParent( HWND32 hwnd );
|
||||||
extern BOOL32 WIN_IsWindowDrawable(WND*, BOOL32 );
|
extern BOOL32 WIN_IsWindowDrawable(WND*, BOOL32 );
|
||||||
|
|
|
@ -1,7 +1,57 @@
|
||||||
|
#ifndef _WINECON_H_
|
||||||
|
#define _WINECON_H_
|
||||||
|
|
||||||
|
#define CTRL_C_EVENT 0
|
||||||
|
#define CTRL_BREAK_EVENT 1
|
||||||
|
#define CTRL_CLOSE_EVENT 2
|
||||||
|
#define CTRL_LOGOFF_EVENT 5
|
||||||
|
#define CTRL_SHUTDOWN_EVENT 6
|
||||||
|
|
||||||
|
typedef BOOL32 HANDLER_ROUTINE(WORD);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attributes flags:
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define FOREGROUND_BLUE 0x0001 /* text color contains blue. */
|
||||||
|
#define FOREGROUND_GREEN 0x0002 /* text color contains green. */
|
||||||
|
#define FOREGROUND_RED 0x0004 /* text color contains red. */
|
||||||
|
#define FOREGROUND_INTENSITY 0x0008 /* text color is intensified. */
|
||||||
|
#define BACKGROUND_BLUE 0x0010 /* background color contains blue. */
|
||||||
|
#define BACKGROUND_GREEN 0x0020 /* background color contains green. */
|
||||||
|
#define BACKGROUND_RED 0x0040 /* background color contains red. */
|
||||||
|
#define BACKGROUND_INTENSITY 0x0080 /* background color is intensified. */
|
||||||
|
|
||||||
|
typedef struct tagCOORD
|
||||||
|
{
|
||||||
|
INT16 x;
|
||||||
|
INT16 y;
|
||||||
|
} COORD,*LPCOORD;
|
||||||
|
|
||||||
|
typedef struct tagSMALL_RECT
|
||||||
|
{
|
||||||
|
INT16 Left;
|
||||||
|
INT16 Right;
|
||||||
|
INT16 Top;
|
||||||
|
INT16 Bottom;
|
||||||
|
} SMALL_RECT,*LPSMALL_RECT;
|
||||||
|
|
||||||
|
typedef struct tagCONSOLE_SCREEN_BUFFER_INFO
|
||||||
|
{
|
||||||
|
COORD dwSize;
|
||||||
|
COORD dwCursorPosition;
|
||||||
|
WORD wAttributes;
|
||||||
|
SMALL_RECT srWindow;
|
||||||
|
COORD dwMaximumWindowSize;
|
||||||
|
} CONSOLE_SCREEN_BUFFER_INFO,*LPCONSOLE_SCREEN_BUFFER_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
#ifndef _WINCON_H_
|
#ifndef _WINCON_H_
|
||||||
#define _WINCON_H_
|
#define _WINCON_H_
|
||||||
|
|
||||||
|
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
#define FillConsoleOutputCharacter FillConsoleOutputCharacterW
|
#define FillConsoleOutputCharacter FillConsoleOutputCharacterW
|
||||||
#define GetConsoleTitle GetConsoleTitleW
|
#define GetConsoleTitle GetConsoleTitleW
|
||||||
|
@ -143,29 +193,6 @@ typedef struct
|
||||||
}
|
}
|
||||||
CHAR_INFO;
|
CHAR_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define FOREGROUND_BLUE 0x01
|
|
||||||
#define FOREGROUND_GREEN 0x02
|
|
||||||
#define FOREGROUND_RED 0x04
|
|
||||||
#define FOREGROUND_INTENSITY 0x08
|
|
||||||
#define BACKGROUND_BLUE 0x10
|
|
||||||
#define BACKGROUND_GREEN 0x20
|
|
||||||
#define BACKGROUND_RED 0x40
|
|
||||||
#define BACKGROUND_INTENSITY 0x80
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
COORD dwSize;
|
|
||||||
COORD dwCursorPosition;
|
|
||||||
WORD wAttrs;
|
|
||||||
SMALL_RECT srWindow;
|
|
||||||
COORD dwMaximumWindowSize;
|
|
||||||
}
|
|
||||||
CONSOLE_SCREEN_BUFFER_INFO;
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
DWORD size;
|
DWORD size;
|
||||||
|
@ -176,14 +203,6 @@ CONSOLE_CURSOR_INFO;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define CTRL_C_EVENT 0
|
|
||||||
#define CTRL_BREAK_EVENT 1
|
|
||||||
#define CTRL_CLOSE_EVENT 2
|
|
||||||
#define CTRL_LOGOFF_EVENT 5
|
|
||||||
#define CTRL_SHUTDOWN_EVENT 6
|
|
||||||
|
|
||||||
typedef BOOL HANDLER_ROUTINE (WORD ctrltype);
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
||||||
#define ENABLE_PROCESSED_INPUT 0x01
|
#define ENABLE_PROCESSED_INPUT 0x01
|
||||||
|
@ -255,3 +274,4 @@ BOOL WriteConsoleOutputCharacterA (HANDLE h, const char * c, DWORD len,
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* 0 */
|
||||||
|
|
|
@ -435,6 +435,7 @@ DECL_WINELIB_TYPE(LPNCCALCSIZE_PARAMS);
|
||||||
/***** Window hooks *****/
|
/***** Window hooks *****/
|
||||||
|
|
||||||
/* Hook values */
|
/* Hook values */
|
||||||
|
#define WH_MIN (-1)
|
||||||
#define WH_MSGFILTER (-1)
|
#define WH_MSGFILTER (-1)
|
||||||
#define WH_JOURNALRECORD 0
|
#define WH_JOURNALRECORD 0
|
||||||
#define WH_JOURNALPLAYBACK 1
|
#define WH_JOURNALPLAYBACK 1
|
||||||
|
@ -447,10 +448,13 @@ DECL_WINELIB_TYPE(LPNCCALCSIZE_PARAMS);
|
||||||
#define WH_HARDWARE 8
|
#define WH_HARDWARE 8
|
||||||
#define WH_DEBUG 9
|
#define WH_DEBUG 9
|
||||||
#define WH_SHELL 10
|
#define WH_SHELL 10
|
||||||
|
#define WH_FOREGROUNDIDLE 11
|
||||||
|
#define WH_CALLWNDPROCRET 12
|
||||||
|
#define WH_MAX 12
|
||||||
|
|
||||||
#define WH_FIRST_HOOK WH_MSGFILTER
|
#define WH_MINHOOK WH_MIN
|
||||||
#define WH_LAST_HOOK WH_SHELL
|
#define WH_MAXHOOK WH_MAX
|
||||||
#define WH_NB_HOOKS (WH_LAST_HOOK-WH_FIRST_HOOK+1)
|
#define WH_NB_HOOKS (WH_MAXHOOK-WH_MINHOOK+1)
|
||||||
|
|
||||||
/* Hook action codes */
|
/* Hook action codes */
|
||||||
#define HC_ACTION 0
|
#define HC_ACTION 0
|
||||||
|
@ -2546,25 +2550,33 @@ typedef struct
|
||||||
#define ESB_DISABLE_LTUP ESB_DISABLE_LEFT
|
#define ESB_DISABLE_LTUP ESB_DISABLE_LEFT
|
||||||
#define ESB_DISABLE_RTDN ESB_DISABLE_RIGHT
|
#define ESB_DISABLE_RTDN ESB_DISABLE_RIGHT
|
||||||
|
|
||||||
/* Scrollbar messages (undocumented) */
|
/* Scrollbar messages */
|
||||||
#define SBM_SETSCROLLPOS (WM_USER+0)
|
#define SBM_SETPOS16 (WM_USER+0)
|
||||||
#define SBM_GETSCROLLPOS (WM_USER+1)
|
#define SBM_SETPOS32 0x00e0
|
||||||
#define SBM_SETSCROLLRANGE (WM_USER+2)
|
#define SBM_SETPOS WINELIB_NAME(SBM_SETPOS)
|
||||||
#define SBM_REDRAW (WM_USER+3)
|
#define SBM_GETPOS16 (WM_USER+1)
|
||||||
#define SBM_ENABLE (WM_USER+4)
|
#define SBM_GETPOS32 0x00e1
|
||||||
|
#define SBM_GETPOS WINELIB_NAME(SBM_GETPOS)
|
||||||
|
#define SBM_SETRANGE16 (WM_USER+2)
|
||||||
|
#define SBM_SETRANGE32 0x00e2
|
||||||
|
#define SBM_SETRANGE WINELIB_NAME(SBM_SETRANGE)
|
||||||
|
#define SBM_GETRANGE16 (WM_USER+3)
|
||||||
|
#define SBM_GETRANGE32 0x00e3
|
||||||
|
#define SBM_GETRANGE WINELIB_NAME(SBM_GETRANGE)
|
||||||
|
#define SBM_ENABLE_ARROWS16 (WM_USER+4)
|
||||||
|
#define SBM_ENABLE_ARROWS32 0x00e4
|
||||||
|
#define SBM_ENABLE_ARROWS WINELIB_NAME(SBM_ENABLE_ARROWS)
|
||||||
|
#define SBM_SETRANGEREDRAW16 WM_NULL /* Not in Win16 */
|
||||||
|
#define SBM_SETRANGEREDRAW32 0x00e6
|
||||||
|
#define SBM_SETRANGEREDRAW WINELIB_NAME(SBM_SETRANGEREDRAW)
|
||||||
|
#define SBM_SETSCROLLINFO16 WM_NULL /* Not in Win16 */
|
||||||
|
#define SBM_SETSCROLLINFO32 0x00e9
|
||||||
|
#define SBM_SETSCROLLINFO WINELIB_NAME(SBM_SETSCROLLINFO)
|
||||||
|
#define SBM_GETSCROLLINFO16 WM_NULL /* Not in Win16 */
|
||||||
|
#define SBM_GETSCROLLINFO32 0x00ea
|
||||||
|
#define SBM_GETSCROLLINFO WINELIB_NAME(SBM_GETSCROLLINFO)
|
||||||
|
|
||||||
/* Scrollbar info */
|
/* Scrollbar info */
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
UINT16 cbSize;
|
|
||||||
UINT16 fMask;
|
|
||||||
INT16 nMin;
|
|
||||||
INT16 nMax;
|
|
||||||
UINT16 nPage;
|
|
||||||
INT16 nPos;
|
|
||||||
INT16 nTrackPos;
|
|
||||||
} SCROLLINFO16, *LPSCROLLINFO16;
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
UINT32 cbSize;
|
UINT32 cbSize;
|
||||||
|
@ -2574,10 +2586,7 @@ typedef struct
|
||||||
UINT32 nPage;
|
UINT32 nPage;
|
||||||
INT32 nPos;
|
INT32 nPos;
|
||||||
INT32 nTrackPos;
|
INT32 nTrackPos;
|
||||||
} SCROLLINFO32, *LPSCROLLINFO32;
|
} SCROLLINFO, *LPSCROLLINFO;
|
||||||
|
|
||||||
DECL_WINELIB_TYPE(SCROLLINFO);
|
|
||||||
DECL_WINELIB_TYPE(LPSCROLLINFO);
|
|
||||||
|
|
||||||
/* GetScrollInfo() flags */
|
/* GetScrollInfo() flags */
|
||||||
#define SIF_RANGE 0x0001
|
#define SIF_RANGE 0x0001
|
||||||
|
@ -3587,6 +3596,22 @@ typedef struct _ULARGE_INTEGER
|
||||||
#define DLL_THREAD_ATTACH 2 /* attach new thread */
|
#define DLL_THREAD_ATTACH 2 /* attach new thread */
|
||||||
#define DLL_THREAD_DETACH 3 /* detach thread */
|
#define DLL_THREAD_DETACH 3 /* detach thread */
|
||||||
|
|
||||||
|
typedef struct _MEMORY_BASIC_INFORMATION
|
||||||
|
{
|
||||||
|
LPVOID BaseAddress;
|
||||||
|
LPVOID AllocationBase;
|
||||||
|
DWORD AllocationProtect;
|
||||||
|
DWORD RegionSize;
|
||||||
|
DWORD State;
|
||||||
|
DWORD Protect;
|
||||||
|
DWORD Type;
|
||||||
|
} MEMORY_BASIC_INFORMATION,*LPMEMORY_BASIC_INFORMATION;
|
||||||
|
|
||||||
|
typedef DWORD (*LPTHREAD_START_ROUTINE)(LPVOID);
|
||||||
|
|
||||||
|
typedef BOOL32 (*CODEPAGE_ENUMPROC32A)(LPSTR);
|
||||||
|
typedef BOOL32 (*CODEPAGE_ENUMPROC32W)(LPWSTR);
|
||||||
|
DECL_WINELIB_TYPE_AW(CODEPAGE_ENUMPROC);
|
||||||
|
|
||||||
#pragma pack(4)
|
#pragma pack(4)
|
||||||
|
|
||||||
|
@ -3598,6 +3623,7 @@ WORD AllocSelector(WORD);
|
||||||
WORD AllocSelectorArray(WORD);
|
WORD AllocSelectorArray(WORD);
|
||||||
INT16 Catch(LPCATCHBUF);
|
INT16 Catch(LPCATCHBUF);
|
||||||
INT16 CloseComm(INT16);
|
INT16 CloseComm(INT16);
|
||||||
|
BOOL16 EnableHardwareInput(BOOL16);
|
||||||
HANDLE16 FarGetOwner(HGLOBAL16);
|
HANDLE16 FarGetOwner(HGLOBAL16);
|
||||||
VOID FarSetOwner(HGLOBAL16,HANDLE16);
|
VOID FarSetOwner(HGLOBAL16,HANDLE16);
|
||||||
VOID FillWindow(HWND16,HWND16,HDC16,HBRUSH16);
|
VOID FillWindow(HWND16,HWND16,HDC16,HBRUSH16);
|
||||||
|
@ -3609,6 +3635,7 @@ INT16 GetCommError(INT16,LPCOMSTAT);
|
||||||
UINT16 GetCommEventMask(INT16,UINT16);
|
UINT16 GetCommEventMask(INT16,UINT16);
|
||||||
HANDLE16 GetCurrentPDB(void);
|
HANDLE16 GetCurrentPDB(void);
|
||||||
HTASK16 GetCurrentTask(void);
|
HTASK16 GetCurrentTask(void);
|
||||||
|
HWND16 GetDesktopHwnd(void);
|
||||||
HMODULE16 GetExePtr(HANDLE16);
|
HMODULE16 GetExePtr(HANDLE16);
|
||||||
WORD GetExeVersion(void);
|
WORD GetExeVersion(void);
|
||||||
BOOL16 GetModuleName(HINSTANCE16,LPSTR,INT16);
|
BOOL16 GetModuleName(HINSTANCE16,LPSTR,INT16);
|
||||||
|
@ -3631,6 +3658,7 @@ WORD SelectorAccessRights(WORD,WORD,WORD);
|
||||||
DWORD SetBitmapDimension(HBITMAP16,INT16,INT16);
|
DWORD SetBitmapDimension(HBITMAP16,INT16,INT16);
|
||||||
DWORD SetBrushOrg(HDC16,INT16,INT16);
|
DWORD SetBrushOrg(HDC16,INT16,INT16);
|
||||||
UINT16* SetCommEventMask(INT16,UINT16);
|
UINT16* SetCommEventMask(INT16,UINT16);
|
||||||
|
BOOL16 SetDeskPattern(void);
|
||||||
WORD SetSelectorBase(WORD,DWORD);
|
WORD SetSelectorBase(WORD,DWORD);
|
||||||
WORD SetSelectorLimit(WORD,DWORD);
|
WORD SetSelectorLimit(WORD,DWORD);
|
||||||
FARPROC16 SetTaskSignalProc(HTASK16,FARPROC16);
|
FARPROC16 SetTaskSignalProc(HTASK16,FARPROC16);
|
||||||
|
@ -3763,6 +3791,7 @@ BOOL16 PtInRegion(HRGN32,INT32,INT32);
|
||||||
UINT16 RealizePalette(HDC32);
|
UINT16 RealizePalette(HDC32);
|
||||||
DWORD RegCloseKey(HKEY);
|
DWORD RegCloseKey(HKEY);
|
||||||
DWORD RegFlushKey(HKEY);
|
DWORD RegFlushKey(HKEY);
|
||||||
|
VOID ReleaseCapture(void);
|
||||||
LONG SetBitmapBits(HBITMAP32,LONG,LPCVOID);
|
LONG SetBitmapBits(HBITMAP32,LONG,LPCVOID);
|
||||||
COLORREF SetBkColor(HDC32,COLORREF);
|
COLORREF SetBkColor(HDC32,COLORREF);
|
||||||
BOOL16 SetCaretBlinkTime(UINT32);
|
BOOL16 SetCaretBlinkTime(UINT32);
|
||||||
|
@ -3776,7 +3805,6 @@ VOID SetRectRgn(HRGN32,INT32,INT32,INT32,INT32);
|
||||||
COLORREF SetTextColor(HDC32,COLORREF);
|
COLORREF SetTextColor(HDC32,COLORREF);
|
||||||
WORD SetWindowWord(HWND32,INT32,WORD);
|
WORD SetWindowWord(HWND32,INT32,WORD);
|
||||||
BOOL16 ShowCaret(HWND32);
|
BOOL16 ShowCaret(HWND32);
|
||||||
HWND16 WindowFromDC(HDC32);
|
|
||||||
LONG _hread(HFILE,LPVOID,LONG);
|
LONG _hread(HFILE,LPVOID,LONG);
|
||||||
HFILE _lclose(HFILE);
|
HFILE _lclose(HFILE);
|
||||||
HFILE _lcreat(LPCSTR,INT32);
|
HFILE _lcreat(LPCSTR,INT32);
|
||||||
|
@ -3996,6 +4024,9 @@ INT16 DrawText16(HDC16,LPCSTR,INT16,LPRECT16,UINT16);
|
||||||
INT32 DrawText32A(HDC32,LPCSTR,INT32,LPRECT32,UINT32);
|
INT32 DrawText32A(HDC32,LPCSTR,INT32,LPRECT32,UINT32);
|
||||||
INT32 DrawText32W(HDC32,LPCWSTR,INT32,LPRECT32,UINT32);
|
INT32 DrawText32W(HDC32,LPCWSTR,INT32,LPRECT32,UINT32);
|
||||||
#define DrawText WINELIB_NAME_AW(DrawText)
|
#define DrawText WINELIB_NAME_AW(DrawText)
|
||||||
|
BOOL16 EnableScrollBar16(HWND16,INT16,UINT16);
|
||||||
|
BOOL32 EnableScrollBar32(HWND32,INT32,UINT32);
|
||||||
|
#define EnableScrollBar WINELIB_NAME(EnableScrollBar)
|
||||||
BOOL16 EndPaint16(HWND16,const PAINTSTRUCT16*);
|
BOOL16 EndPaint16(HWND16,const PAINTSTRUCT16*);
|
||||||
BOOL32 EndPaint32(HWND32,const PAINTSTRUCT32*);
|
BOOL32 EndPaint32(HWND32,const PAINTSTRUCT32*);
|
||||||
#define EndPaint WINELIB_NAME(EndPaint)
|
#define EndPaint WINELIB_NAME(EndPaint)
|
||||||
|
@ -4067,6 +4098,9 @@ BOOL32 GetBitmapDimensionEx32(HBITMAP32,LPSIZE32);
|
||||||
BOOL16 GetBrushOrgEx16(HDC16,LPPOINT16);
|
BOOL16 GetBrushOrgEx16(HDC16,LPPOINT16);
|
||||||
BOOL32 GetBrushOrgEx32(HDC32,LPPOINT32);
|
BOOL32 GetBrushOrgEx32(HDC32,LPPOINT32);
|
||||||
#define GetBrushOrgEx WINELIB_NAME(GetBrushOrgEx)
|
#define GetBrushOrgEx WINELIB_NAME(GetBrushOrgEx)
|
||||||
|
HWND16 GetCapture16(void);
|
||||||
|
HWND32 GetCapture32(void);
|
||||||
|
#define GetCapture WINELIB_NAME(GetCapture)
|
||||||
UINT16 GetCaretBlinkTime16(void);
|
UINT16 GetCaretBlinkTime16(void);
|
||||||
UINT32 GetCaretBlinkTime32(void);
|
UINT32 GetCaretBlinkTime32(void);
|
||||||
#define GetCaretBlinkTime WINELIB_NAME(GetCaretBlinkTime)
|
#define GetCaretBlinkTime WINELIB_NAME(GetCaretBlinkTime)
|
||||||
|
@ -4111,6 +4145,15 @@ BOOL32 GetCurrentPositionEx32(HDC32,LPPOINT32);
|
||||||
void GetCursorPos16(LPPOINT16);
|
void GetCursorPos16(LPPOINT16);
|
||||||
void GetCursorPos32(LPPOINT32);
|
void GetCursorPos32(LPPOINT32);
|
||||||
#define GetCursorPos WINELIB_NAME(GetCursorPos)
|
#define GetCursorPos WINELIB_NAME(GetCursorPos)
|
||||||
|
HDC16 GetDC16(HWND16);
|
||||||
|
HDC32 GetDC32(HWND32);
|
||||||
|
#define GetDC WINELIB_NAME(GetDC)
|
||||||
|
HDC16 GetDCEx16(HWND16,HRGN16,DWORD);
|
||||||
|
HDC32 GetDCEx32(HWND32,HRGN32,DWORD);
|
||||||
|
#define GetDCEx WINELIB_NAME(GetDCEx)
|
||||||
|
HWND16 GetDesktopWindow16(void);
|
||||||
|
HWND32 GetDesktopWindow32(void);
|
||||||
|
#define GetDesktopWindow WINELIB_NAME(GetDesktopWindow)
|
||||||
BOOL16 GetDiskFreeSpace16(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
|
BOOL16 GetDiskFreeSpace16(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
|
||||||
BOOL32 GetDiskFreeSpace32A(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
|
BOOL32 GetDiskFreeSpace32A(LPCSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
|
||||||
BOOL32 GetDiskFreeSpace32W(LPCWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
|
BOOL32 GetDiskFreeSpace32W(LPCWSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD);
|
||||||
|
@ -4165,9 +4208,15 @@ HANDLE32 GetProp32W(HWND32,LPCWSTR);
|
||||||
INT16 GetRgnBox16(HRGN16,LPRECT16);
|
INT16 GetRgnBox16(HRGN16,LPRECT16);
|
||||||
INT32 GetRgnBox32(HRGN32,LPRECT32);
|
INT32 GetRgnBox32(HRGN32,LPRECT32);
|
||||||
#define GetRgnBox WINELIB_NAME(GetRgnBox)
|
#define GetRgnBox WINELIB_NAME(GetRgnBox)
|
||||||
BOOL16 GetScrollInfo16(HWND16,INT16,LPSCROLLINFO16);
|
BOOL16 GetScrollInfo16(HWND16,INT16,LPSCROLLINFO);
|
||||||
BOOL32 GetScrollInfo32(HWND32,INT32,LPSCROLLINFO32);
|
BOOL32 GetScrollInfo32(HWND32,INT32,LPSCROLLINFO);
|
||||||
#define GetScrollInfo WINELIB_NAME(GetScrollInfo)
|
#define GetScrollInfo WINELIB_NAME(GetScrollInfo)
|
||||||
|
INT16 GetScrollPos16(HWND16,INT16);
|
||||||
|
INT32 GetScrollPos32(HWND32,INT32);
|
||||||
|
#define GetScrollPos WINELIB_NAME(GetScrollPos)
|
||||||
|
BOOL16 GetScrollRange16(HWND16,INT16,LPINT16,LPINT16);
|
||||||
|
BOOL32 GetScrollRange32(HWND32,INT32,LPINT32,LPINT32);
|
||||||
|
#define GetScrollRange WINELIB_NAME(GetScrollRange)
|
||||||
DWORD GetShortPathName32A(LPCSTR,LPSTR,DWORD);
|
DWORD GetShortPathName32A(LPCSTR,LPSTR,DWORD);
|
||||||
DWORD GetShortPathName32W(LPCWSTR,LPWSTR,DWORD);
|
DWORD GetShortPathName32W(LPCWSTR,LPWSTR,DWORD);
|
||||||
#define GetShortPathName WINELIB_NAME_AW(GetShortPathName)
|
#define GetShortPathName WINELIB_NAME_AW(GetShortPathName)
|
||||||
|
@ -4208,6 +4257,9 @@ BOOL32 GetViewportOrgEx32(HDC32,LPPOINT32);
|
||||||
BOOL32 GetVolumeInformation32A(LPCSTR,LPSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);
|
BOOL32 GetVolumeInformation32A(LPCSTR,LPSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPSTR,DWORD);
|
||||||
BOOL32 GetVolumeInformation32W(LPCWSTR,LPWSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);
|
BOOL32 GetVolumeInformation32W(LPCWSTR,LPWSTR,DWORD,LPDWORD,LPDWORD,LPDWORD,LPWSTR,DWORD);
|
||||||
#define GetVolumeInformation WINELIB_NAME_AW(GetVolumeInformation)
|
#define GetVolumeInformation WINELIB_NAME_AW(GetVolumeInformation)
|
||||||
|
HDC16 GetWindowDC16(HWND16);
|
||||||
|
HDC32 GetWindowDC32(HWND32);
|
||||||
|
#define GetWindowDC WINELIB_NAME(GetWindowDC)
|
||||||
BOOL16 GetWindowExtEx16(HDC16,LPPOINT16);
|
BOOL16 GetWindowExtEx16(HDC16,LPPOINT16);
|
||||||
BOOL32 GetWindowExtEx32(HDC32,LPPOINT32);
|
BOOL32 GetWindowExtEx32(HDC32,LPPOINT32);
|
||||||
#define GetWindowExtEx WINELIB_NAME(GetWindowExtEx)
|
#define GetWindowExtEx WINELIB_NAME(GetWindowExtEx)
|
||||||
|
@ -4224,6 +4276,10 @@ BOOL32 GetWindowPlacement32(HWND32,LPWINDOWPLACEMENT32);
|
||||||
void GetWindowRect16(HWND16,LPRECT16);
|
void GetWindowRect16(HWND16,LPRECT16);
|
||||||
void GetWindowRect32(HWND32,LPRECT32);
|
void GetWindowRect32(HWND32,LPRECT32);
|
||||||
#define GetWindowRect WINELIB_NAME(GetWindowRect)
|
#define GetWindowRect WINELIB_NAME(GetWindowRect)
|
||||||
|
UINT16 GetWindowsDirectory16(LPSTR,UINT16);
|
||||||
|
UINT32 GetWindowsDirectory32A(LPSTR,UINT32);
|
||||||
|
UINT32 GetWindowsDirectory32W(LPWSTR,UINT32);
|
||||||
|
#define GetWindowsDirectory WINELIB_NAME_AW(GetWindowsDirectory)
|
||||||
HTASK16 GetWindowTask16(HWND16);
|
HTASK16 GetWindowTask16(HWND16);
|
||||||
#define GetWindowTask32(hwnd) ((HTASK32)GetWindowThreadProcessId(hwnd,NULL))
|
#define GetWindowTask32(hwnd) ((HTASK32)GetWindowThreadProcessId(hwnd,NULL))
|
||||||
#define GetWindowTask WINELIB_NAME(GetWindowTask)
|
#define GetWindowTask WINELIB_NAME(GetWindowTask)
|
||||||
|
@ -4521,6 +4577,9 @@ DWORD RegSetValueEx16(HKEY,LPSTR,DWORD,DWORD,LPBYTE,DWORD);
|
||||||
DWORD RegSetValueEx32A(HKEY,LPSTR,DWORD,DWORD,LPBYTE,DWORD);
|
DWORD RegSetValueEx32A(HKEY,LPSTR,DWORD,DWORD,LPBYTE,DWORD);
|
||||||
DWORD RegSetValueEx32W(HKEY,LPWSTR,DWORD,DWORD,LPBYTE,DWORD);
|
DWORD RegSetValueEx32W(HKEY,LPWSTR,DWORD,DWORD,LPBYTE,DWORD);
|
||||||
#define RegSetValueEx WINELIB_NAME_AW(RegSetValueEx)
|
#define RegSetValueEx WINELIB_NAME_AW(RegSetValueEx)
|
||||||
|
INT16 ReleaseDC16(HWND16,HDC16);
|
||||||
|
INT32 ReleaseDC32(HWND32,HDC32);
|
||||||
|
#define ReleaseDC WINELIB_NAME(ReleaseDC)
|
||||||
HANDLE16 RemoveProp16(HWND16,LPCSTR);
|
HANDLE16 RemoveProp16(HWND16,LPCSTR);
|
||||||
HANDLE32 RemoveProp32A(HWND32,LPCSTR);
|
HANDLE32 RemoveProp32A(HWND32,LPCSTR);
|
||||||
HANDLE32 RemoveProp32W(HWND32,LPCWSTR);
|
HANDLE32 RemoveProp32W(HWND32,LPCWSTR);
|
||||||
|
@ -4549,6 +4608,9 @@ LRESULT SendMessage32W(HWND32,UINT32,WPARAM32,LPARAM);
|
||||||
BOOL16 SetBitmapDimensionEx16(HBITMAP16,INT16,INT16,LPSIZE16);
|
BOOL16 SetBitmapDimensionEx16(HBITMAP16,INT16,INT16,LPSIZE16);
|
||||||
BOOL32 SetBitmapDimensionEx32(HBITMAP32,INT32,INT32,LPSIZE32);
|
BOOL32 SetBitmapDimensionEx32(HBITMAP32,INT32,INT32,LPSIZE32);
|
||||||
#define SetBitmapDimensionEx WINELIB_NAME(SetBitmapDimensionEx)
|
#define SetBitmapDimensionEx WINELIB_NAME(SetBitmapDimensionEx)
|
||||||
|
HWND16 SetCapture16(HWND16);
|
||||||
|
HWND32 SetCapture32(HWND32);
|
||||||
|
#define SetCapture WINELIB_NAME(SetCapture)
|
||||||
LONG SetClassLong16(HWND16,INT16,LONG);
|
LONG SetClassLong16(HWND16,INT16,LONG);
|
||||||
LONG SetClassLong32A(HWND32,INT32,LONG);
|
LONG SetClassLong32A(HWND32,INT32,LONG);
|
||||||
LONG SetClassLong32W(HWND32,INT32,LONG);
|
LONG SetClassLong32W(HWND32,INT32,LONG);
|
||||||
|
@ -4559,6 +4621,9 @@ BOOL32 SetCommBreak32(INT32);
|
||||||
INT16 SetCommState16(LPDCB16);
|
INT16 SetCommState16(LPDCB16);
|
||||||
BOOL32 SetCommState32(INT32,LPDCB32);
|
BOOL32 SetCommState32(INT32,LPDCB32);
|
||||||
#define SetCommState WINELIB_NAME(SetCommState)
|
#define SetCommState WINELIB_NAME(SetCommState)
|
||||||
|
BOOL16 SetDeskWallPaper16(LPCSTR);
|
||||||
|
BOOL32 SetDeskWallPaper32(LPCSTR);
|
||||||
|
#define SetDeskWallPaper WINELIB_NAME(SetDeskWallPaper)
|
||||||
void SetDlgItemInt16(HWND16,INT16,UINT16,BOOL16);
|
void SetDlgItemInt16(HWND16,INT16,UINT16,BOOL16);
|
||||||
void SetDlgItemInt32(HWND32,INT32,UINT32,BOOL32);
|
void SetDlgItemInt32(HWND32,INT32,UINT32,BOOL32);
|
||||||
#define SetDlgItemInt WINELIB_NAME(SetDlgItemInt)
|
#define SetDlgItemInt WINELIB_NAME(SetDlgItemInt)
|
||||||
|
@ -4592,9 +4657,15 @@ void SetRect32(LPRECT32,INT32,INT32,INT32,INT32);
|
||||||
void SetRectEmpty16(LPRECT16);
|
void SetRectEmpty16(LPRECT16);
|
||||||
void SetRectEmpty32(LPRECT32);
|
void SetRectEmpty32(LPRECT32);
|
||||||
#define SetRectEmpty WINELIB_NAME(SetRectEmpty)
|
#define SetRectEmpty WINELIB_NAME(SetRectEmpty)
|
||||||
INT16 SetScrollInfo16(HWND16,INT16,LPSCROLLINFO16,BOOL16);
|
INT16 SetScrollInfo16(HWND16,INT16,const SCROLLINFO*,BOOL16);
|
||||||
INT32 SetScrollInfo32(HWND32,INT32,LPSCROLLINFO32,BOOL32);
|
INT32 SetScrollInfo32(HWND32,INT32,const SCROLLINFO*,BOOL32);
|
||||||
#define SetScrollInfo WINELIB_NAME(SetScrollInfo)
|
#define SetScrollInfo WINELIB_NAME(SetScrollInfo)
|
||||||
|
INT16 SetScrollPos16(HWND16,INT16,INT16,BOOL16);
|
||||||
|
INT32 SetScrollPos32(HWND32,INT32,INT32,BOOL32);
|
||||||
|
#define SetScrollPos WINELIB_NAME(SetScrollPos)
|
||||||
|
void SetScrollRange16(HWND16,INT16,INT16,INT16,BOOL16);
|
||||||
|
BOOL32 SetScrollRange32(HWND32,INT32,INT32,INT32,BOOL32);
|
||||||
|
#define SetScrollRange WINELIB_NAME(SetScrollRange)
|
||||||
HWND16 SetSysModalWindow16(HWND16);
|
HWND16 SetSysModalWindow16(HWND16);
|
||||||
#define SetSysModalWindow32(hwnd) ((HWND32)0)
|
#define SetSysModalWindow32(hwnd) ((HWND32)0)
|
||||||
#define SetSysModalWindow WINELIB_NAME(SetSysModalWindow)
|
#define SetSysModalWindow WINELIB_NAME(SetSysModalWindow)
|
||||||
|
@ -4627,6 +4698,9 @@ void SetWindowText16(HWND16,SEGPTR);
|
||||||
void SetWindowText32A(HWND32,LPCSTR);
|
void SetWindowText32A(HWND32,LPCSTR);
|
||||||
void SetWindowText32W(HWND32,LPCWSTR);
|
void SetWindowText32W(HWND32,LPCWSTR);
|
||||||
#define SetWindowText WINELIB_NAME_AW(SetWindowText)
|
#define SetWindowText WINELIB_NAME_AW(SetWindowText)
|
||||||
|
void ShowScrollBar16(HWND16,INT16,BOOL16);
|
||||||
|
BOOL32 ShowScrollBar32(HWND32,INT32,BOOL32);
|
||||||
|
#define ShowScrollBar WINELIB_NAME(ShowScrollBar)
|
||||||
BOOL16 SubtractRect16(LPRECT16,const RECT16*,const RECT16*);
|
BOOL16 SubtractRect16(LPRECT16,const RECT16*,const RECT16*);
|
||||||
BOOL32 SubtractRect32(LPRECT32,const RECT32*,const RECT32*);
|
BOOL32 SubtractRect32(LPRECT32,const RECT32*,const RECT32*);
|
||||||
#define SubtractRect WINELIB_NAME(SubtractRect)
|
#define SubtractRect WINELIB_NAME(SubtractRect)
|
||||||
|
@ -4669,6 +4743,9 @@ DWORD VerQueryValue16(SEGPTR,LPCSTR,SEGPTR*,UINT16*);
|
||||||
DWORD VerQueryValue32A(LPVOID,LPCSTR,LPVOID*,UINT32*);
|
DWORD VerQueryValue32A(LPVOID,LPCSTR,LPVOID*,UINT32*);
|
||||||
DWORD VerQueryValue32W(LPVOID,LPCWSTR,LPVOID*,UINT32*);
|
DWORD VerQueryValue32W(LPVOID,LPCWSTR,LPVOID*,UINT32*);
|
||||||
#define VerQueryValue WINELIB_NAME_AW(VerQueryValue)
|
#define VerQueryValue WINELIB_NAME_AW(VerQueryValue)
|
||||||
|
HWND16 WindowFromDC16(HDC16);
|
||||||
|
HWND32 WindowFromDC32(HDC32);
|
||||||
|
#define WindowFromDC WINELIB_NAME(WindowFromDC)
|
||||||
HWND16 WindowFromPoint16(POINT16);
|
HWND16 WindowFromPoint16(POINT16);
|
||||||
HWND32 WindowFromPoint32(POINT32);
|
HWND32 WindowFromPoint32(POINT32);
|
||||||
#define WindowFromPoint WINELIB_NAME(WindowFromPoint)
|
#define WindowFromPoint WINELIB_NAME(WindowFromPoint)
|
||||||
|
@ -4859,12 +4936,10 @@ void DrawMenuBar(HWND);
|
||||||
DWORD DumpIcon(SEGPTR,WORD*,SEGPTR*,SEGPTR*);
|
DWORD DumpIcon(SEGPTR,WORD*,SEGPTR*,SEGPTR*);
|
||||||
BOOL Ellipse(HDC,INT,INT,INT,INT);
|
BOOL Ellipse(HDC,INT,INT,INT,INT);
|
||||||
BOOL EmptyClipboard(void);
|
BOOL EmptyClipboard(void);
|
||||||
BOOL EnableHardwareInput(BOOL);
|
|
||||||
BOOL EnableMenuItem(HMENU,UINT,UINT);
|
BOOL EnableMenuItem(HMENU,UINT,UINT);
|
||||||
BOOL EnableScrollBar(HWND,UINT,UINT);
|
|
||||||
BOOL EnableWindow(HWND,BOOL);
|
BOOL EnableWindow(HWND,BOOL);
|
||||||
BOOL EndDeferWindowPos(HDWP16);
|
BOOL EndDeferWindowPos(HDWP16);
|
||||||
UINT EnumClipboardFormats(UINT);
|
UINT16 EnumClipboardFormats(UINT16);
|
||||||
INT EnumFontFamilies(HDC,LPCSTR,FONTENUMPROC16,LPARAM);
|
INT EnumFontFamilies(HDC,LPCSTR,FONTENUMPROC16,LPARAM);
|
||||||
INT EnumFonts(HDC,LPCSTR,FONTENUMPROC16,LPARAM);
|
INT EnumFonts(HDC,LPCSTR,FONTENUMPROC16,LPARAM);
|
||||||
BOOL EnumMetaFile(HDC,HMETAFILE16,MFENUMPROC16,LPARAM);
|
BOOL EnumMetaFile(HDC,HMETAFILE16,MFENUMPROC16,LPARAM);
|
||||||
|
@ -4891,7 +4966,6 @@ WORD GetAtomName(ATOM,LPSTR,short);
|
||||||
COLORREF GetBkColor(HDC);
|
COLORREF GetBkColor(HDC);
|
||||||
WORD GetBkMode(HDC);
|
WORD GetBkMode(HDC);
|
||||||
DWORD GetBrushOrg(HDC);
|
DWORD GetBrushOrg(HDC);
|
||||||
HWND GetCapture(void);
|
|
||||||
BOOL GetCharABCWidths(HDC,UINT,UINT,LPABC16);
|
BOOL GetCharABCWidths(HDC,UINT,UINT,LPABC16);
|
||||||
BOOL GetCharWidth(HDC,WORD,WORD,LPINT16);
|
BOOL GetCharWidth(HDC,WORD,WORD,LPINT16);
|
||||||
HRGN GetClipRgn(HDC);
|
HRGN GetClipRgn(HDC);
|
||||||
|
@ -4905,15 +4979,11 @@ HBRUSH GetControlBrush(HWND,HDC,WORD);
|
||||||
DWORD GetCurrentPosition(HDC);
|
DWORD GetCurrentPosition(HDC);
|
||||||
DWORD GetCurrentTime(void);
|
DWORD GetCurrentTime(void);
|
||||||
HCURSOR16 GetCursor(void);
|
HCURSOR16 GetCursor(void);
|
||||||
HDC GetDC(HWND);
|
|
||||||
HDC GetDCEx(HWND,HRGN,DWORD);
|
|
||||||
DWORD GetDCHook(HDC,FARPROC16*);
|
DWORD GetDCHook(HDC,FARPROC16*);
|
||||||
DWORD GetDCOrg(HDC);
|
DWORD GetDCOrg(HDC);
|
||||||
HDC GetDCState(HDC);
|
HDC GetDCState(HDC);
|
||||||
int GetDIBits(HDC,HANDLE,WORD,WORD,LPSTR,LPBITMAPINFO,WORD);
|
int GetDIBits(HDC,HANDLE,WORD,WORD,LPSTR,LPBITMAPINFO,WORD);
|
||||||
SEGPTR GetDOSEnvironment(void);
|
SEGPTR GetDOSEnvironment(void);
|
||||||
HWND GetDesktopHwnd(void);
|
|
||||||
HWND GetDesktopWindow(void);
|
|
||||||
int GetDeviceCaps(HDC,WORD);
|
int GetDeviceCaps(HDC,WORD);
|
||||||
DWORD GetDialogBaseUnits(void);
|
DWORD GetDialogBaseUnits(void);
|
||||||
HWND GetDlgItem(HWND,WORD);
|
HWND GetDlgItem(HWND,WORD);
|
||||||
|
@ -4968,8 +5038,6 @@ DWORD GetQueueStatus(UINT);
|
||||||
BOOL GetRasterizerCaps(LPRASTERIZER_STATUS,UINT);
|
BOOL GetRasterizerCaps(LPRASTERIZER_STATUS,UINT);
|
||||||
WORD GetROP2(HDC);
|
WORD GetROP2(HDC);
|
||||||
WORD GetRelAbs(HDC);
|
WORD GetRelAbs(HDC);
|
||||||
int GetScrollPos(HWND,int);
|
|
||||||
void GetScrollRange(HWND,int,LPINT16,LPINT16);
|
|
||||||
HANDLE GetStockObject(int);
|
HANDLE GetStockObject(int);
|
||||||
WORD GetStretchBltMode(HDC);
|
WORD GetStretchBltMode(HDC);
|
||||||
HMENU GetSubMenu(HMENU,short);
|
HMENU GetSubMenu(HMENU,short);
|
||||||
|
@ -4994,11 +5062,9 @@ DWORD GetViewportOrg(HDC);
|
||||||
BOOL GetWinDebugInfo(LPWINDEBUGINFO,UINT);
|
BOOL GetWinDebugInfo(LPWINDEBUGINFO,UINT);
|
||||||
LONG GetWinFlags(void);
|
LONG GetWinFlags(void);
|
||||||
HWND GetWindow(HWND,WORD);
|
HWND GetWindow(HWND,WORD);
|
||||||
HDC GetWindowDC(HWND);
|
|
||||||
DWORD GetWindowExt(HDC);
|
DWORD GetWindowExt(HDC);
|
||||||
DWORD GetWindowOrg(HDC);
|
DWORD GetWindowOrg(HDC);
|
||||||
int GetWindowTextLength(HWND);
|
int GetWindowTextLength(HWND);
|
||||||
UINT GetWindowsDirectory(LPSTR,UINT);
|
|
||||||
ATOM GlobalDeleteAtom(ATOM);
|
ATOM GlobalDeleteAtom(ATOM);
|
||||||
void GlobalFix(HGLOBAL16);
|
void GlobalFix(HGLOBAL16);
|
||||||
void GlobalFreeAll(HGLOBAL16);
|
void GlobalFreeAll(HGLOBAL16);
|
||||||
|
@ -5047,6 +5113,7 @@ DWORD OemKeyScan(WORD);
|
||||||
BOOL OemToAnsi(LPCSTR,LPSTR);
|
BOOL OemToAnsi(LPCSTR,LPSTR);
|
||||||
void OemToAnsiBuff(LPCSTR,LPSTR,INT);
|
void OemToAnsiBuff(LPCSTR,LPSTR,INT);
|
||||||
int OffsetClipRgn(HDC,short,short);
|
int OffsetClipRgn(HDC,short,short);
|
||||||
|
void OldYield(void);
|
||||||
BOOL OpenClipboard(HWND);
|
BOOL OpenClipboard(HWND);
|
||||||
BOOL OpenIcon(HWND);
|
BOOL OpenIcon(HWND);
|
||||||
int OpenSound(void);
|
int OpenSound(void);
|
||||||
|
@ -5073,8 +5140,6 @@ BOOL PtVisible(HDC,short,short);
|
||||||
WORD RealizeDefaultPalette(HDC);
|
WORD RealizeDefaultPalette(HDC);
|
||||||
BOOL Rectangle(HDC,INT,INT,INT,INT);
|
BOOL Rectangle(HDC,INT,INT,INT,INT);
|
||||||
WORD RegisterClipboardFormat(LPCSTR);
|
WORD RegisterClipboardFormat(LPCSTR);
|
||||||
void ReleaseCapture(void);
|
|
||||||
int ReleaseDC(HWND,HDC);
|
|
||||||
BOOL RemoveFontResource(LPSTR);
|
BOOL RemoveFontResource(LPSTR);
|
||||||
BOOL RemoveMenu(HMENU,UINT,UINT);
|
BOOL RemoveMenu(HMENU,UINT,UINT);
|
||||||
void ReplyMessage(LRESULT);
|
void ReplyMessage(LRESULT);
|
||||||
|
@ -5095,7 +5160,6 @@ HPALETTE16 SelectPalette(HDC,HPALETTE16,BOOL);
|
||||||
int SelectVisRgn(HDC,HRGN);
|
int SelectVisRgn(HDC,HRGN);
|
||||||
HWND SetActiveWindow(HWND);
|
HWND SetActiveWindow(HWND);
|
||||||
WORD SetBkMode(HDC,WORD);
|
WORD SetBkMode(HDC,WORD);
|
||||||
HWND SetCapture(HWND);
|
|
||||||
HANDLE SetClipboardData(WORD,HANDLE);
|
HANDLE SetClipboardData(WORD,HANDLE);
|
||||||
HWND SetClipboardViewer(HWND);
|
HWND SetClipboardViewer(HWND);
|
||||||
void SetConvertHook(BOOL);
|
void SetConvertHook(BOOL);
|
||||||
|
@ -5105,8 +5169,6 @@ HCURSOR16 SetCursor(HCURSOR16);
|
||||||
void SetCursorPos(short,short);
|
void SetCursorPos(short,short);
|
||||||
BOOL SetDCHook(HDC,FARPROC16,DWORD);
|
BOOL SetDCHook(HDC,FARPROC16,DWORD);
|
||||||
void SetDCState(HDC,HDC);
|
void SetDCState(HDC,HDC);
|
||||||
BOOL SetDeskPattern(void);
|
|
||||||
BOOL SetDeskWallPaper(LPCSTR);
|
|
||||||
void SetDoubleClickTime(WORD);
|
void SetDoubleClickTime(WORD);
|
||||||
int SetEnvironment(LPCSTR,LPCSTR,WORD);
|
int SetEnvironment(LPCSTR,LPCSTR,WORD);
|
||||||
UINT SetErrorMode(UINT);
|
UINT SetErrorMode(UINT);
|
||||||
|
@ -5125,8 +5187,6 @@ WORD SetPolyFillMode(HDC,WORD);
|
||||||
WORD SetROP2(HDC,WORD);
|
WORD SetROP2(HDC,WORD);
|
||||||
WORD SetRelAbs(HDC,WORD);
|
WORD SetRelAbs(HDC,WORD);
|
||||||
FARPROC16 SetResourceHandler(HANDLE,LPSTR,FARPROC16);
|
FARPROC16 SetResourceHandler(HANDLE,LPSTR,FARPROC16);
|
||||||
int SetScrollPos(HWND,int,int,BOOL);
|
|
||||||
void SetScrollRange(HWND,int,int,int,BOOL);
|
|
||||||
int SetSoundNoise(int,int);
|
int SetSoundNoise(int,int);
|
||||||
WORD SetStretchBltMode(HDC,WORD);
|
WORD SetStretchBltMode(HDC,WORD);
|
||||||
LONG SetSwapAreaSize(WORD);
|
LONG SetSwapAreaSize(WORD);
|
||||||
|
@ -5151,7 +5211,6 @@ HHOOK SetWindowsHookEx(INT16,HOOKPROC16,HINSTANCE,HTASK);
|
||||||
HINSTANCE ShellExecute(HWND,LPCSTR,LPCSTR,LPSTR,LPCSTR,INT);
|
HINSTANCE ShellExecute(HWND,LPCSTR,LPCSTR,LPSTR,LPCSTR,INT);
|
||||||
int ShowCursor(BOOL);
|
int ShowCursor(BOOL);
|
||||||
void ShowOwnedPopups(HWND,BOOL);
|
void ShowOwnedPopups(HWND,BOOL);
|
||||||
void ShowScrollBar(HWND,WORD,BOOL);
|
|
||||||
BOOL ShowWindow(HWND,int);
|
BOOL ShowWindow(HWND,int);
|
||||||
DWORD SizeofResource(HMODULE16,HRSRC16);
|
DWORD SizeofResource(HMODULE16,HRSRC16);
|
||||||
VOID Sleep(DWORD); /* Win32 */
|
VOID Sleep(DWORD); /* Win32 */
|
||||||
|
|
|
@ -475,7 +475,7 @@ int DDE_GetRemoteMessage()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* iterate through all the windows */
|
/* iterate through all the windows */
|
||||||
for (wndPtr = WIN_FindWndPtr(GetTopWindow(GetDesktopWindow()));
|
for (wndPtr = WIN_FindWndPtr(GetTopWindow(GetDesktopWindow32()));
|
||||||
wndPtr != NULL;
|
wndPtr != NULL;
|
||||||
wndPtr = wndPtr->next)
|
wndPtr = wndPtr->next)
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,7 +34,7 @@ void dummy_usage_of_debug_msg_name()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* stub */
|
/* stub */
|
||||||
HWND GetDesktopWindow()
|
HWND32 GetDesktopWindow32()
|
||||||
{
|
{
|
||||||
printf("GetDesktopWindow\n");
|
printf("GetDesktopWindow\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -145,7 +145,7 @@ static BUILTIN_DLL BuiltinDLLs[] =
|
||||||
{ &W32SYS_Descriptor, 0 },
|
{ &W32SYS_Descriptor, 0 },
|
||||||
/* Win32 DLLs */
|
/* Win32 DLLs */
|
||||||
{ &ADVAPI32_Descriptor, 0 },
|
{ &ADVAPI32_Descriptor, 0 },
|
||||||
{ &COMCTL32_Descriptor, 0 },
|
{ &COMCTL32_Descriptor, DLL_FLAG_NOT_USED },
|
||||||
{ &COMDLG32_Descriptor, 0 },
|
{ &COMDLG32_Descriptor, 0 },
|
||||||
{ &CRTDLL_Descriptor, 0 },
|
{ &CRTDLL_Descriptor, 0 },
|
||||||
{ &OLE32_Descriptor, 0 },
|
{ &OLE32_Descriptor, 0 },
|
||||||
|
|
|
@ -459,15 +459,15 @@ static HMODULE16 MODULE_LoadExeHeader( HFILE hFile, OFSTRUCT *ofs )
|
||||||
((offset)+(size) <= fastload_offset+fastload_length)) ? \
|
((offset)+(size) <= fastload_offset+fastload_length)) ? \
|
||||||
(memcpy( buffer, fastload+(offset)-fastload_offset, (size) ), TRUE) : \
|
(memcpy( buffer, fastload+(offset)-fastload_offset, (size) ), TRUE) : \
|
||||||
(_llseek( hFile, mz_header.ne_offset+(offset), SEEK_SET), \
|
(_llseek( hFile, mz_header.ne_offset+(offset), SEEK_SET), \
|
||||||
FILE_Read( hFile, (buffer), (size) ) == (size)))
|
_lread32( hFile, (buffer), (size) ) == (size)))
|
||||||
|
|
||||||
_llseek( hFile, 0, SEEK_SET );
|
_llseek( hFile, 0, SEEK_SET );
|
||||||
if ((FILE_Read(hFile,&mz_header,sizeof(mz_header)) != sizeof(mz_header)) ||
|
if ((_lread32(hFile,&mz_header,sizeof(mz_header)) != sizeof(mz_header)) ||
|
||||||
(mz_header.mz_magic != MZ_SIGNATURE))
|
(mz_header.mz_magic != MZ_SIGNATURE))
|
||||||
return (HMODULE16)11; /* invalid exe */
|
return (HMODULE16)11; /* invalid exe */
|
||||||
|
|
||||||
_llseek( hFile, mz_header.ne_offset, SEEK_SET );
|
_llseek( hFile, mz_header.ne_offset, SEEK_SET );
|
||||||
if (FILE_Read( hFile, &ne_header, sizeof(ne_header) ) != sizeof(ne_header))
|
if (_lread32( hFile, &ne_header, sizeof(ne_header) ) != sizeof(ne_header))
|
||||||
return (HMODULE16)11; /* invalid exe */
|
return (HMODULE16)11; /* invalid exe */
|
||||||
|
|
||||||
if (ne_header.ne_magic == PE_SIGNATURE) return (HMODULE16)21; /* win32 exe */
|
if (ne_header.ne_magic == PE_SIGNATURE) return (HMODULE16)21; /* win32 exe */
|
||||||
|
@ -517,7 +517,7 @@ static HMODULE16 MODULE_LoadExeHeader( HFILE hFile, OFSTRUCT *ofs )
|
||||||
if ((fastload = (char *)malloc( fastload_length )) != NULL)
|
if ((fastload = (char *)malloc( fastload_length )) != NULL)
|
||||||
{
|
{
|
||||||
_llseek( hFile, mz_header.ne_offset + fastload_offset, SEEK_SET );
|
_llseek( hFile, mz_header.ne_offset + fastload_offset, SEEK_SET );
|
||||||
if (FILE_Read( hFile, fastload, fastload_length ) != fastload_length)
|
if (_lread32(hFile, fastload, fastload_length) != fastload_length)
|
||||||
{
|
{
|
||||||
free( fastload );
|
free( fastload );
|
||||||
fastload = NULL;
|
fastload = NULL;
|
||||||
|
@ -632,7 +632,7 @@ static HMODULE16 MODULE_LoadExeHeader( HFILE hFile, OFSTRUCT *ofs )
|
||||||
}
|
}
|
||||||
buffer = GlobalLock16( pModule->nrname_handle );
|
buffer = GlobalLock16( pModule->nrname_handle );
|
||||||
_llseek( hFile, ne_header.nrname_tab_offset, SEEK_SET );
|
_llseek( hFile, ne_header.nrname_tab_offset, SEEK_SET );
|
||||||
if (FILE_Read( hFile, buffer, ne_header.nrname_tab_length )
|
if (_lread32( hFile, buffer, ne_header.nrname_tab_length )
|
||||||
!= ne_header.nrname_tab_length)
|
!= ne_header.nrname_tab_length)
|
||||||
{
|
{
|
||||||
GlobalFree16( pModule->nrname_handle );
|
GlobalFree16( pModule->nrname_handle );
|
||||||
|
@ -1165,7 +1165,6 @@ HINSTANCE LoadModule( LPCSTR name, LPVOID paramBlock )
|
||||||
IF1632_Stack32_base = WIN16_GlobalLock16(hInitialStack32);
|
IF1632_Stack32_base = WIN16_GlobalLock16(hInitialStack32);
|
||||||
|
|
||||||
}
|
}
|
||||||
/* FIXME: we probably need a DOS handle here */
|
|
||||||
hf = FILE_DupUnixHandle( MODULE_OpenFile( hModule ) );
|
hf = FILE_DupUnixHandle( MODULE_OpenFile( hModule ) );
|
||||||
CallTo16_word_ww( selfloadheader->BootApp, hModule, hf );
|
CallTo16_word_ww( selfloadheader->BootApp, hModule, hf );
|
||||||
_lclose(hf);
|
_lclose(hf);
|
||||||
|
@ -1215,6 +1214,7 @@ HINSTANCE LoadModule( LPCSTR name, LPVOID paramBlock )
|
||||||
|
|
||||||
if (!(pModule->flags & NE_FFLAGS_LIBMODULE) && (paramBlock != (LPVOID)-1))
|
if (!(pModule->flags & NE_FFLAGS_LIBMODULE) && (paramBlock != (LPVOID)-1))
|
||||||
{
|
{
|
||||||
|
HTASK16 hTask;
|
||||||
WORD showcmd;
|
WORD showcmd;
|
||||||
|
|
||||||
/* PowerPoint passes NULL as showCmd */
|
/* PowerPoint passes NULL as showCmd */
|
||||||
|
@ -1222,10 +1222,13 @@ HINSTANCE LoadModule( LPCSTR name, LPVOID paramBlock )
|
||||||
showcmd = *((WORD *)PTR_SEG_TO_LIN(params->showCmd)+1);
|
showcmd = *((WORD *)PTR_SEG_TO_LIN(params->showCmd)+1);
|
||||||
else
|
else
|
||||||
showcmd = 0; /* FIXME: correct */
|
showcmd = 0; /* FIXME: correct */
|
||||||
TASK_CreateTask( hModule, hInstance, hPrevInstance,
|
|
||||||
|
hTask = TASK_CreateTask( hModule, hInstance, hPrevInstance,
|
||||||
params->hEnvironment,
|
params->hEnvironment,
|
||||||
(LPSTR)PTR_SEG_TO_LIN( params->cmdLine ),
|
(LPSTR)PTR_SEG_TO_LIN( params->cmdLine ),
|
||||||
showcmd );
|
showcmd );
|
||||||
|
|
||||||
|
if( hTask && TASK_GetNextTask(hTask)) Yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
return hInstance;
|
return hInstance;
|
||||||
|
@ -1479,14 +1482,8 @@ HANDLE WinExec( LPSTR lpCmdLine, WORD nCmdShow )
|
||||||
#if 0
|
#if 0
|
||||||
if (handle < (HANDLE)32) /* Error? */
|
if (handle < (HANDLE)32) /* Error? */
|
||||||
return handle;
|
return handle;
|
||||||
|
|
||||||
/* FIXME: Yield never returns!
|
|
||||||
We may want to run more applications or start the debugger
|
|
||||||
before calling Yield. If we don't Yield will be called immdiately
|
|
||||||
after returning. Why is it needed for Word anyway? */
|
|
||||||
Yield(); /* program is executed immediately ....needed for word */
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 1994 Eric Youndale & Erik Bos
|
* Copyright 1994 Eric Youndale & Erik Bos
|
||||||
* Copyright 1995 Martin von Löwis
|
* Copyright 1995 Martin von Löwis
|
||||||
|
* Copyright 1996 Marcus Meissner
|
||||||
*
|
*
|
||||||
* based on Eric Youndale's pe-test and:
|
* based on Eric Youndale's pe-test and:
|
||||||
*
|
*
|
||||||
|
@ -30,6 +31,7 @@
|
||||||
#include "registers.h"
|
#include "registers.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "debugger.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
|
||||||
void my_wcstombs(char * result, u_short * source, int len)
|
void my_wcstombs(char * result, u_short * source, int len)
|
||||||
|
@ -77,34 +79,53 @@ char * xmmap(char * vaddr, unsigned int v_size, unsigned int r_size,
|
||||||
|
|
||||||
void dump_exports(struct PE_Export_Directory * pe_exports, unsigned int load_addr)
|
void dump_exports(struct PE_Export_Directory * pe_exports, unsigned int load_addr)
|
||||||
{
|
{
|
||||||
char * Module;
|
char *Module;
|
||||||
int i;
|
int i;
|
||||||
u_short * ordinal;
|
u_short *ordinal;
|
||||||
u_long * function;
|
u_long *function,*functions;
|
||||||
u_char ** name, *ename;
|
u_char **name,*ename;
|
||||||
|
char buffer[1000];
|
||||||
|
DBG_ADDR daddr;
|
||||||
|
|
||||||
Module = ((char *) load_addr) + pe_exports->Name;
|
daddr.seg = 0;
|
||||||
|
Module = ((char*)load_addr)+pe_exports->Name;
|
||||||
dprintf_win32(stddeb,"\n*******EXPORT DATA*******\nModule name is %s, %ld functions, %ld names\n",
|
dprintf_win32(stddeb,"\n*******EXPORT DATA*******\nModule name is %s, %ld functions, %ld names\n",
|
||||||
Module,
|
Module,
|
||||||
pe_exports->Number_Of_Functions,
|
pe_exports->Number_Of_Functions,
|
||||||
pe_exports->Number_Of_Names);
|
pe_exports->Number_Of_Names);
|
||||||
|
|
||||||
ordinal = (u_short *) (((char *) load_addr) + (int) pe_exports->Address_Of_Name_Ordinals);
|
ordinal=(u_short*)(((char*)load_addr)+(int)pe_exports->Address_Of_Name_Ordinals);
|
||||||
function = (u_long *) (((char *) load_addr) + (int) pe_exports->AddressOfFunctions);
|
functions=function=(u_long*)(((char*)load_addr)+(int)pe_exports->AddressOfFunctions);
|
||||||
name = (u_char **) (((char *) load_addr) + (int) pe_exports->AddressOfNames);
|
name=(u_char**)(((char*)load_addr)+(int)pe_exports->AddressOfNames);
|
||||||
|
|
||||||
dprintf_win32(stddeb,"%-32s Ordinal Virt Addr\n", "Function Name");
|
dprintf_win32(stddeb,"%-32s Ordinal Virt Addr\n", "Function Name");
|
||||||
for(i=0; i< pe_exports->Number_Of_Functions; i++) {
|
for (i=0;i<pe_exports->Number_Of_Functions;i++) {
|
||||||
if (i<pe_exports->Number_Of_Names) {
|
if (i<pe_exports->Number_Of_Names) {
|
||||||
ename = (char *) (((char *) load_addr) + (int) *name++);
|
ename=(char*)(((char*)load_addr)+(int)*name++);
|
||||||
dprintf_win32(stddeb,"%-32s %4d %8.8lx\n", ename, *ordinal++, *function++);
|
dprintf_win32(stddeb,"%-32s %4d %8.8lx (%8.8lx)\n",ename,*ordinal,functions[*ordinal],*function);
|
||||||
|
sprintf(buffer,"%s.%s",Module,ename);
|
||||||
|
daddr.off=load_addr+functions[*ordinal];
|
||||||
|
ordinal++;
|
||||||
|
function++;
|
||||||
} else {
|
} else {
|
||||||
/* ordinals/names no longer valid, but we still got functions */
|
/* ordinals/names no longer valid, but we still got functions */
|
||||||
dprintf_win32(stddeb,"%-32s %4s %8.8lx\n","","",*function++);
|
dprintf_win32(stddeb,"%-32s %4s %8s %8.8lx\n","","","",*function);
|
||||||
|
sprintf(buffer,"%s.%d",Module,i);
|
||||||
|
daddr.off=load_addr+*functions;
|
||||||
|
function++;
|
||||||
}
|
}
|
||||||
|
DEBUG_AddSymbol(buffer,&daddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Look up the specified function or ordinal in the exportlist:
|
||||||
|
* If it is a string:
|
||||||
|
* - look up the name in the Name list.
|
||||||
|
* - look up the ordinal with that index.
|
||||||
|
* - use the ordinal as offset into the functionlist
|
||||||
|
* If it is a ordinal:
|
||||||
|
* - use ordinal-pe_export->Base as offset into the functionlist
|
||||||
|
*/
|
||||||
FARPROC32 PE_FindExportedFunction(struct pe_data *pe, LPCSTR funcName)
|
FARPROC32 PE_FindExportedFunction(struct pe_data *pe, LPCSTR funcName)
|
||||||
{
|
{
|
||||||
struct PE_Export_Directory * exports = pe->pe_export;
|
struct PE_Export_Directory * exports = pe->pe_export;
|
||||||
|
@ -114,32 +135,29 @@ FARPROC32 PE_FindExportedFunction(struct pe_data *pe, LPCSTR funcName)
|
||||||
u_char ** name, *ename;
|
u_char ** name, *ename;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (HIWORD(funcName))
|
||||||
|
dprintf_win32(stddeb,"PE_FindExportedFunction(%s)\n",funcName);
|
||||||
|
else
|
||||||
|
dprintf_win32(stddeb,"PE_FindExportedFunction(%d)\n",(int)funcName);
|
||||||
if (!exports)
|
if (!exports)
|
||||||
return NULL;
|
return NULL;
|
||||||
ordinal=(u_short*)(((char*)load_addr)+(int)exports->Address_Of_Name_Ordinals);
|
ordinal=(u_short*)(((char*)load_addr)+(int)exports->Address_Of_Name_Ordinals);
|
||||||
function=(u_long*)(((char*)load_addr)+(int)exports->AddressOfFunctions);
|
function=(u_long*)(((char*)load_addr)+(int)exports->AddressOfFunctions);
|
||||||
name=(u_char **)(((char*)load_addr)+(int)exports->AddressOfNames);
|
name=(u_char **)(((char*)load_addr)+(int)exports->AddressOfNames);
|
||||||
if (HIWORD(funcName)) {
|
if (HIWORD(funcName)) {
|
||||||
for(i=0; i<exports->Number_Of_Names; i++)
|
for(i=0; i<exports->Number_Of_Names; i++) {
|
||||||
{
|
ename=(char*)(((char*)load_addr)+(int)*name);
|
||||||
ename = (char *) (((char *) load_addr) + (int) *name);
|
if(!strcmp(ename,funcName))
|
||||||
if(strcmp(ename,funcName)==0)
|
return (FARPROC32)(load_addr+function[*ordinal]);
|
||||||
return (FARPROC32)(load_addr + *function);
|
ordinal++;
|
||||||
function++;
|
|
||||||
name++;
|
name++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* if we got no name directory, we use the ordinal as offset */
|
if (funcName-exports->Base > exports->Number_Of_Functions) {
|
||||||
if (!exports->Number_Of_Names) {
|
dprintf_win32(stddeb," ordinal %d out of range!\n",funcName);
|
||||||
i = function[(int)funcName-exports->Base];
|
return NULL;
|
||||||
return (FARPROC32)(load_addr+i);
|
|
||||||
}
|
|
||||||
for(i=0; i<exports->Number_Of_Names; i++) {
|
|
||||||
if((int)funcName == (int)*ordinal + exports->Base)
|
|
||||||
return (FARPROC32)(load_addr + *function);
|
|
||||||
function++;
|
|
||||||
ordinal++;
|
|
||||||
}
|
}
|
||||||
|
return (FARPROC32)(load_addr+function[(int)funcName-exports->Base]);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -357,6 +375,10 @@ static struct pe_data *PE_LoadImage( int fd, HMODULE16 hModule, WORD offset )
|
||||||
int i, result;
|
int i, result;
|
||||||
unsigned int load_addr;
|
unsigned int load_addr;
|
||||||
struct Directory dir;
|
struct Directory dir;
|
||||||
|
char buffer[200];
|
||||||
|
DBG_ADDR daddr;
|
||||||
|
|
||||||
|
daddr.seg=0;
|
||||||
|
|
||||||
pe = xmalloc(sizeof(struct pe_data));
|
pe = xmalloc(sizeof(struct pe_data));
|
||||||
memset(pe,0,sizeof(struct pe_data));
|
memset(pe,0,sizeof(struct pe_data));
|
||||||
|
@ -511,9 +533,28 @@ static struct pe_data *PE_LoadImage( int fd, HMODULE16 hModule, WORD offset )
|
||||||
dprintf_win32(stdnimp,"Callback directory ignored\n");
|
dprintf_win32(stdnimp,"Callback directory ignored\n");
|
||||||
|
|
||||||
|
|
||||||
|
if(pe->pe_reloc) do_relocations(pe);
|
||||||
if(pe->pe_import) fixup_imports(pe, hModule);
|
if(pe->pe_import) fixup_imports(pe, hModule);
|
||||||
if(pe->pe_export) dump_exports(pe->pe_export,load_addr);
|
if(pe->pe_export) dump_exports(pe->pe_export,load_addr);
|
||||||
if(pe->pe_reloc) do_relocations(pe);
|
|
||||||
|
if (pe->pe_export) {
|
||||||
|
/* add start of sections as debugsymbols */
|
||||||
|
for(i=0;i<pe->pe_header->coff.NumberOfSections;i++) {
|
||||||
|
sprintf(buffer,"%s.%s",
|
||||||
|
((char*)load_addr)+pe->pe_export->Name,
|
||||||
|
pe->pe_seg[i].Name
|
||||||
|
);
|
||||||
|
daddr.off=load_addr+pe->pe_seg[i].Virtual_Address;
|
||||||
|
DEBUG_AddSymbol(buffer,&daddr);
|
||||||
|
}
|
||||||
|
/* add entry point */
|
||||||
|
sprintf(buffer,"%s.EntryPoint",((char*)load_addr)+pe->pe_export->Name);
|
||||||
|
daddr.off=load_addr+pe->pe_header->opt_coff.AddressOfEntryPoint;
|
||||||
|
DEBUG_AddSymbol(buffer,&daddr);
|
||||||
|
/* add start of DLL */
|
||||||
|
daddr.off=load_addr;
|
||||||
|
DEBUG_AddSymbol(((char*)load_addr)+pe->pe_export->Name,&daddr);
|
||||||
|
}
|
||||||
return pe;
|
return pe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -607,7 +648,7 @@ static void PE_InitDLL(HMODULE16 hModule)
|
||||||
printf("InitPEDLL() called!\n");
|
printf("InitPEDLL() called!\n");
|
||||||
CallDLLEntryProc32( (FARPROC32)(pe->load_addr +
|
CallDLLEntryProc32( (FARPROC32)(pe->load_addr +
|
||||||
pe->pe_header->opt_coff.AddressOfEntryPoint),
|
pe->pe_header->opt_coff.AddressOfEntryPoint),
|
||||||
hModule, DLL_PROCESS_ATTACH, 0 );
|
hModule, DLL_PROCESS_ATTACH, (void *)-1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -631,8 +672,8 @@ void PE_InitTEB(int hTEB)
|
||||||
TEB *pTEB;
|
TEB *pTEB;
|
||||||
|
|
||||||
pTask = (TDB *)(GlobalLock16(GetCurrentTask() & 0xffff));
|
pTask = (TDB *)(GlobalLock16(GetCurrentTask() & 0xffff));
|
||||||
pTEB = (TEB *)(PTR_SEG_OFF_TO_LIN(hTEB, 0));
|
pTEB = (TEB *)(GlobalLock16(hTEB));
|
||||||
pTEB->stack = (void *)(GlobalLock16(pTask->hStack32));
|
pTEB->stack = pTask->esp;
|
||||||
pTEB->Except = (void *)(-1);
|
pTEB->Except = (void *)(-1);
|
||||||
pTEB->TEBDSAlias = pTEB;
|
pTEB->TEBDSAlias = pTEB;
|
||||||
pTEB->taskid = getpid();
|
pTEB->taskid = getpid();
|
||||||
|
|
|
@ -671,18 +671,42 @@ void TASK_KillCurrentTask( INT16 exitCode )
|
||||||
Yield();
|
Yield();
|
||||||
/* We should never return from this Yield() */
|
/* We should never return from this Yield() */
|
||||||
|
|
||||||
fprintf(stderr,"It's alive! Alive!!!\n");
|
fprintf(stderr,"Return of the living dead %04x!!!\n", hCurrentTask);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* TASK_YieldToSystem
|
||||||
|
*
|
||||||
|
* Scheduler interface, this way we ensure that all "unsafe" events are
|
||||||
|
* processed outside the scheduler.
|
||||||
|
*/
|
||||||
|
void TASK_YieldToSystem(TDB* pTask)
|
||||||
|
{
|
||||||
|
MESSAGEQUEUE* pQ;
|
||||||
|
|
||||||
|
TASK_SCHEDULE();
|
||||||
|
|
||||||
|
if( pTask )
|
||||||
|
{
|
||||||
|
pQ = (MESSAGEQUEUE*)GlobalLock16(pTask->hQueue);
|
||||||
|
if( pQ && pQ->flags & QUEUE_FLAG_XEVENT )
|
||||||
|
{
|
||||||
|
pQ->flags &= ~QUEUE_FLAG_XEVENT;
|
||||||
|
EVENT_WaitXEvent( FALSE, FALSE );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* TASK_Reschedule
|
* TASK_Reschedule
|
||||||
*
|
*
|
||||||
* This is where all the magic of task-switching happens!
|
* This is where all the magic of task-switching happens!
|
||||||
*
|
*
|
||||||
* This function should only be called via the TASK_SCHEDULE() macro, to make
|
* Note: This function should only be called via the TASK_YieldToSystem()
|
||||||
* sure that all the context is saved correctly.
|
* wrapper, to make sure that all the context is saved correctly.
|
||||||
|
*
|
||||||
|
* It must not call functions that may yield control.
|
||||||
*/
|
*/
|
||||||
void TASK_Reschedule(void)
|
void TASK_Reschedule(void)
|
||||||
{
|
{
|
||||||
|
@ -700,22 +724,22 @@ void TASK_Reschedule(void)
|
||||||
hTaskToKill = 0;
|
hTaskToKill = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flush any X events that happened in the meantime */
|
|
||||||
|
|
||||||
EVENT_WaitXEvent( FALSE );
|
|
||||||
|
|
||||||
/* Find a task to yield to */
|
/* Find a task to yield to */
|
||||||
|
|
||||||
pOldTask = (TDB *)GlobalLock16( hCurrentTask );
|
pOldTask = (TDB *)GlobalLock16( hCurrentTask );
|
||||||
if (pOldTask && pOldTask->hYieldTo)
|
if (pOldTask && pOldTask->hYieldTo)
|
||||||
{
|
{
|
||||||
/* If a task is stored in hYieldTo of the current task (put there */
|
/* check for DirectedYield() */
|
||||||
/* by DirectedYield), yield to it only if it has events pending. */
|
|
||||||
hTask = pOldTask->hYieldTo;
|
hTask = pOldTask->hYieldTo;
|
||||||
if (!(pNewTask = (TDB *)GlobalLock16( hTask )) || !pNewTask->nEvents)
|
if (!(pNewTask = (TDB *)GlobalLock16( hTask )) || !pNewTask->nEvents)
|
||||||
hTask = 0;
|
hTask = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* extract hardware events only! */
|
||||||
|
|
||||||
|
EVENT_WaitXEvent( FALSE, TRUE );
|
||||||
|
|
||||||
while (!hTask)
|
while (!hTask)
|
||||||
{
|
{
|
||||||
/* Find a task that has an event pending */
|
/* Find a task that has an event pending */
|
||||||
|
@ -724,6 +748,9 @@ void TASK_Reschedule(void)
|
||||||
while (hTask)
|
while (hTask)
|
||||||
{
|
{
|
||||||
pNewTask = (TDB *)GlobalLock16( hTask );
|
pNewTask = (TDB *)GlobalLock16( hTask );
|
||||||
|
|
||||||
|
dprintf_task( stddeb, "\ttask = %04x, events = %i\n", hTask, pNewTask->nEvents);
|
||||||
|
|
||||||
if (pNewTask->nEvents) break;
|
if (pNewTask->nEvents) break;
|
||||||
hTask = pNewTask->hNext;
|
hTask = pNewTask->hNext;
|
||||||
}
|
}
|
||||||
|
@ -732,11 +759,14 @@ void TASK_Reschedule(void)
|
||||||
|
|
||||||
/* No task found, wait for some events to come in */
|
/* No task found, wait for some events to come in */
|
||||||
|
|
||||||
EVENT_WaitXEvent( TRUE );
|
EVENT_WaitXEvent( TRUE, TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hTask == hCurrentTask) return; /* Nothing to do */
|
if (hTask == hCurrentTask)
|
||||||
|
{
|
||||||
|
dprintf_task( stddeb, "returning to the current task(%04x)\n", hTask );
|
||||||
|
return; /* Nothing to do */
|
||||||
|
}
|
||||||
pNewTask = (TDB *)GlobalLock16( hTask );
|
pNewTask = (TDB *)GlobalLock16( hTask );
|
||||||
dprintf_task( stddeb, "Switching to task %04x (%.8s)\n",
|
dprintf_task( stddeb, "Switching to task %04x (%.8s)\n",
|
||||||
hTask, pNewTask->module_name );
|
hTask, pNewTask->module_name );
|
||||||
|
@ -843,10 +873,11 @@ BOOL WaitEvent( HTASK hTask )
|
||||||
pTask->nEvents--;
|
pTask->nEvents--;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
TASK_SCHEDULE();
|
TASK_YieldToSystem(pTask);
|
||||||
|
|
||||||
/* When we get back here, we have an event */
|
/* When we get back here, we have an event */
|
||||||
|
|
||||||
if (pTask->nEvents > 0) pTask->nEvents--;
|
if (pTask->nEvents > 0) pTask->nEvents--;
|
||||||
else fprintf( stderr, "WaitEvent: reschedule returned without event\n" );
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -914,7 +945,7 @@ void OldYield(void)
|
||||||
|
|
||||||
pCurTask = (TDB *)GlobalLock16( hCurrentTask );
|
pCurTask = (TDB *)GlobalLock16( hCurrentTask );
|
||||||
if (pCurTask) pCurTask->nEvents++; /* Make sure we get back here */
|
if (pCurTask) pCurTask->nEvents++; /* Make sure we get back here */
|
||||||
TASK_SCHEDULE();
|
TASK_YieldToSystem(pCurTask);
|
||||||
if (pCurTask) pCurTask->nEvents--;
|
if (pCurTask) pCurTask->nEvents--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
414
misc/clipboard.c
414
misc/clipboard.c
|
@ -30,7 +30,7 @@ typedef struct tagCLIPFORMAT {
|
||||||
WORD wRefCount;
|
WORD wRefCount;
|
||||||
WORD wDataPresent;
|
WORD wDataPresent;
|
||||||
LPSTR Name;
|
LPSTR Name;
|
||||||
HANDLE hData;
|
HANDLE16 hData;
|
||||||
DWORD BufSize;
|
DWORD BufSize;
|
||||||
struct tagCLIPFORMAT *PrevFormat;
|
struct tagCLIPFORMAT *PrevFormat;
|
||||||
struct tagCLIPFORMAT *NextFormat;
|
struct tagCLIPFORMAT *NextFormat;
|
||||||
|
@ -47,37 +47,75 @@ static HWND hWndViewer = 0; /* start of viewers chain */
|
||||||
static BOOL bClipChanged = FALSE;
|
static BOOL bClipChanged = FALSE;
|
||||||
static WORD LastRegFormat = CF_REGFORMATBASE;
|
static WORD LastRegFormat = CF_REGFORMATBASE;
|
||||||
|
|
||||||
static Bool wait_for_selection = False;
|
static Bool selectionWait = False;
|
||||||
static Bool wineOwnsSelection = False;
|
static Bool selectionAcquired = False;
|
||||||
|
static Window selectionWindow = None;
|
||||||
|
static Window selectionPrevWindow = None;
|
||||||
|
|
||||||
static CLIPFORMAT ClipFormats[16] = {
|
static CLIPFORMAT ClipFormats[16] = {
|
||||||
{ CF_TEXT, 1, 0, "Text", (HANDLE)NULL, 0, NULL, &ClipFormats[1] },
|
{ CF_TEXT, 1, 0, "Text", (HANDLE16)NULL, 0, NULL, &ClipFormats[1] },
|
||||||
{ CF_BITMAP, 1, 0, "Bitmap", (HANDLE)NULL, 0, &ClipFormats[0], &ClipFormats[2] },
|
{ CF_BITMAP, 1, 0, "Bitmap", (HANDLE16)NULL, 0, &ClipFormats[0], &ClipFormats[2] },
|
||||||
{ CF_METAFILEPICT, 1, 0, "MetaFile Picture", (HANDLE)NULL, 0, &ClipFormats[1], &ClipFormats[3] },
|
{ CF_METAFILEPICT, 1, 0, "MetaFile Picture", (HANDLE16)NULL, 0, &ClipFormats[1], &ClipFormats[3] },
|
||||||
{ CF_SYLK, 1, 0, "Sylk", (HANDLE)NULL, 0, &ClipFormats[2], &ClipFormats[4] },
|
{ CF_SYLK, 1, 0, "Sylk", (HANDLE16)NULL, 0, &ClipFormats[2], &ClipFormats[4] },
|
||||||
{ CF_DIF, 1, 0, "DIF", (HANDLE)NULL, 0, &ClipFormats[3], &ClipFormats[5] },
|
{ CF_DIF, 1, 0, "DIF", (HANDLE16)NULL, 0, &ClipFormats[3], &ClipFormats[5] },
|
||||||
{ CF_TIFF, 1, 0, "TIFF", (HANDLE)NULL, 0, &ClipFormats[4], &ClipFormats[6] },
|
{ CF_TIFF, 1, 0, "TIFF", (HANDLE16)NULL, 0, &ClipFormats[4], &ClipFormats[6] },
|
||||||
{ CF_OEMTEXT, 1, 0, "OEM Text", (HANDLE)NULL, 0, &ClipFormats[5], &ClipFormats[7] },
|
{ CF_OEMTEXT, 1, 0, "OEM Text", (HANDLE16)NULL, 0, &ClipFormats[5], &ClipFormats[7] },
|
||||||
{ CF_DIB, 1, 0, "DIB", (HANDLE)NULL, 0, &ClipFormats[6], &ClipFormats[8] },
|
{ CF_DIB, 1, 0, "DIB", (HANDLE16)NULL, 0, &ClipFormats[6], &ClipFormats[8] },
|
||||||
{ CF_PALETTE, 1, 0, "Palette", (HANDLE)NULL, 0, &ClipFormats[7], &ClipFormats[9] },
|
{ CF_PALETTE, 1, 0, "Palette", (HANDLE16)NULL, 0, &ClipFormats[7], &ClipFormats[9] },
|
||||||
{ CF_PENDATA, 1, 0, "PenData", (HANDLE)NULL, 0, &ClipFormats[8], &ClipFormats[10] },
|
{ CF_PENDATA, 1, 0, "PenData", (HANDLE16)NULL, 0, &ClipFormats[8], &ClipFormats[10] },
|
||||||
{ CF_RIFF, 1, 0, "RIFF", (HANDLE)NULL, 0, &ClipFormats[9], &ClipFormats[11] },
|
{ CF_RIFF, 1, 0, "RIFF", (HANDLE16)NULL, 0, &ClipFormats[9], &ClipFormats[11] },
|
||||||
{ CF_WAVE, 1, 0, "Wave", (HANDLE)NULL, 0, &ClipFormats[10], &ClipFormats[12] },
|
{ CF_WAVE, 1, 0, "Wave", (HANDLE16)NULL, 0, &ClipFormats[10], &ClipFormats[12] },
|
||||||
{ CF_OWNERDISPLAY, 1, 0, "Owner Display", (HANDLE)NULL, 0, &ClipFormats[11], &ClipFormats[13] },
|
{ CF_OWNERDISPLAY, 1, 0, "Owner Display", (HANDLE16)NULL, 0, &ClipFormats[11], &ClipFormats[13] },
|
||||||
{ CF_DSPTEXT, 1, 0, "DSPText", (HANDLE)NULL, 0, &ClipFormats[12], &ClipFormats[14] },
|
{ CF_DSPTEXT, 1, 0, "DSPText", (HANDLE16)NULL, 0, &ClipFormats[12], &ClipFormats[14] },
|
||||||
{ CF_DSPMETAFILEPICT, 1, 0, "DSPMetaFile Picture", (HANDLE)NULL, 0, &ClipFormats[13], &ClipFormats[15] },
|
{ CF_DSPMETAFILEPICT, 1, 0, "DSPMetaFile Picture", (HANDLE16)NULL, 0, &ClipFormats[13], &ClipFormats[15] },
|
||||||
{ CF_DSPBITMAP, 1, 0, "DSPBitmap", (HANDLE)NULL, 0, &ClipFormats[14], NULL }
|
{ CF_DSPBITMAP, 1, 0, "DSPBitmap", (HANDLE16)NULL, 0, &ClipFormats[14], NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* CLIPBOARD_DisOwn
|
* CLIPBOARD_CheckSelection
|
||||||
*/
|
*/
|
||||||
void CLIPBOARD_DisOwn(HWND hWnd)
|
void CLIPBOARD_CheckSelection(WND* pWnd)
|
||||||
|
{
|
||||||
|
dprintf_clipboard(stddeb,"\tchecking %08x\n", (unsigned)pWnd->window);
|
||||||
|
|
||||||
|
if( selectionAcquired && selectionWindow != None &&
|
||||||
|
pWnd->window == selectionWindow )
|
||||||
|
{
|
||||||
|
selectionPrevWindow = selectionWindow;
|
||||||
|
selectionWindow = None;
|
||||||
|
|
||||||
|
if( pWnd->next )
|
||||||
|
selectionWindow = pWnd->next->window;
|
||||||
|
else if( pWnd->parent )
|
||||||
|
if( pWnd->parent->child != pWnd )
|
||||||
|
selectionWindow = pWnd->parent->child->window;
|
||||||
|
|
||||||
|
dprintf_clipboard(stddeb,"\tswitching selection from %08x to %08x\n",
|
||||||
|
(unsigned)selectionPrevWindow, (unsigned)selectionWindow);
|
||||||
|
|
||||||
|
if( selectionWindow != None )
|
||||||
|
{
|
||||||
|
XSetSelectionOwner(display, XA_PRIMARY, selectionWindow, CurrentTime);
|
||||||
|
if( XGetSelectionOwner(display, XA_PRIMARY) != selectionWindow )
|
||||||
|
selectionWindow = None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* CLIPBOARD_DisOwn
|
||||||
|
*
|
||||||
|
* Called from DestroyWindow().
|
||||||
|
*/
|
||||||
|
void CLIPBOARD_DisOwn(WND* pWnd)
|
||||||
{
|
{
|
||||||
LPCLIPFORMAT lpFormat = ClipFormats;
|
LPCLIPFORMAT lpFormat = ClipFormats;
|
||||||
|
|
||||||
if( hWnd != hWndClipOwner || !hWndClipOwner ) return;
|
dprintf_clipboard(stddeb,"DisOwn: clipboard owner = %04x, sw = %08x\n",
|
||||||
|
hWndClipOwner, (unsigned)selectionWindow);
|
||||||
|
|
||||||
|
if( pWnd->hwndSelf == hWndClipOwner)
|
||||||
|
{
|
||||||
SendMessage16(hWndClipOwner,WM_RENDERALLFORMATS,0,0L);
|
SendMessage16(hWndClipOwner,WM_RENDERALLFORMATS,0,0L);
|
||||||
|
|
||||||
/* check if all formats were rendered */
|
/* check if all formats were rendered */
|
||||||
|
@ -91,8 +129,12 @@ void CLIPBOARD_DisOwn(HWND hWnd)
|
||||||
}
|
}
|
||||||
lpFormat = lpFormat->NextFormat;
|
lpFormat = lpFormat->NextFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
hWndClipOwner = 0;
|
hWndClipOwner = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* now try to salvage current selection from being destroyed by X */
|
||||||
|
|
||||||
|
CLIPBOARD_CheckSelection(pWnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -117,21 +159,31 @@ void CLIPBOARD_DeleteRecord(LPCLIPFORMAT lpFormat)
|
||||||
*/
|
*/
|
||||||
BOOL CLIPBOARD_RequestXSelection()
|
BOOL CLIPBOARD_RequestXSelection()
|
||||||
{
|
{
|
||||||
HWND hWnd = hWndClipWindow;
|
HWND hWnd = (hWndClipWindow) ? hWndClipWindow : GetActiveWindow();
|
||||||
|
|
||||||
if( !hWnd ) hWnd = GetActiveWindow();
|
if( !hWnd ) return FALSE;
|
||||||
|
|
||||||
wait_for_selection=True;
|
dprintf_clipboard(stddeb,"Requesting selection...\n");
|
||||||
dprintf_clipboard(stddeb,"Requesting selection\n");
|
|
||||||
|
/* request data type XA_STRING, later
|
||||||
|
* CLIPBOARD_ReadSelection() will be invoked
|
||||||
|
* from the SelectionNotify event handler */
|
||||||
|
|
||||||
XConvertSelection(display,XA_PRIMARY,XA_STRING,
|
XConvertSelection(display,XA_PRIMARY,XA_STRING,
|
||||||
XInternAtom(display,"PRIMARY_TEXT",False),
|
XInternAtom(display,"PRIMARY_TEXT",False),
|
||||||
WIN_GetXWindow(hWnd),CurrentTime);
|
WIN_GetXWindow(hWnd),CurrentTime);
|
||||||
|
|
||||||
/* TODO: need time-out for broken clients */
|
/* wait until SelectionNotify is processed */
|
||||||
while(wait_for_selection) EVENT_WaitXEvent( TRUE );
|
|
||||||
|
|
||||||
return (BOOL)ClipFormats[0].wDataPresent;
|
selectionWait=True;
|
||||||
|
while(selectionWait)
|
||||||
|
EVENT_WaitXEvent( TRUE, FALSE );
|
||||||
|
|
||||||
|
/* we treat Unix text as CF_OEMTEXT */
|
||||||
|
dprintf_clipboard(stddeb,"\tgot CF_OEMTEXT = %i\n",
|
||||||
|
ClipFormats[CF_OEMTEXT-1].wDataPresent);
|
||||||
|
|
||||||
|
return (BOOL)ClipFormats[CF_OEMTEXT-1].wDataPresent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -141,11 +193,18 @@ BOOL CLIPBOARD_IsPresent(WORD wFormat)
|
||||||
{
|
{
|
||||||
LPCLIPFORMAT lpFormat = ClipFormats;
|
LPCLIPFORMAT lpFormat = ClipFormats;
|
||||||
|
|
||||||
|
/* special case */
|
||||||
|
|
||||||
|
if( wFormat == CF_TEXT || wFormat == CF_OEMTEXT )
|
||||||
|
return lpFormat[CF_TEXT-1].wDataPresent |
|
||||||
|
lpFormat[CF_OEMTEXT-1].wDataPresent;
|
||||||
|
|
||||||
while(TRUE) {
|
while(TRUE) {
|
||||||
if (lpFormat == NULL) return FALSE;
|
if (lpFormat == NULL) return FALSE;
|
||||||
if (lpFormat->wFormatID == wFormat) break;
|
if (lpFormat->wFormatID == wFormat) break;
|
||||||
lpFormat = lpFormat->NextFormat;
|
lpFormat = lpFormat->NextFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (lpFormat->wDataPresent);
|
return (lpFormat->wDataPresent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,7 +262,7 @@ BOOL EmptyClipboard()
|
||||||
|
|
||||||
while(lpFormat)
|
while(lpFormat)
|
||||||
{
|
{
|
||||||
if ( lpFormat->wDataPresent )
|
if ( lpFormat->wDataPresent || lpFormat->hData )
|
||||||
CLIPBOARD_DeleteRecord( lpFormat );
|
CLIPBOARD_DeleteRecord( lpFormat );
|
||||||
|
|
||||||
lpFormat = lpFormat->NextFormat;
|
lpFormat = lpFormat->NextFormat;
|
||||||
|
@ -211,9 +270,15 @@ BOOL EmptyClipboard()
|
||||||
|
|
||||||
hWndClipOwner = hWndClipWindow;
|
hWndClipOwner = hWndClipWindow;
|
||||||
|
|
||||||
if(wineOwnsSelection){
|
if(selectionAcquired)
|
||||||
dprintf_clipboard(stddeb,"Losing selection\n");
|
{
|
||||||
wineOwnsSelection=False;
|
selectionAcquired = False;
|
||||||
|
selectionPrevWindow = selectionWindow;
|
||||||
|
selectionWindow = None;
|
||||||
|
|
||||||
|
dprintf_clipboard(stddeb, "\tgiving up selection (spw = %08x)\n",
|
||||||
|
(unsigned)selectionPrevWindow);
|
||||||
|
|
||||||
XSetSelectionOwner(display,XA_PRIMARY,None,CurrentTime);
|
XSetSelectionOwner(display,XA_PRIMARY,None,CurrentTime);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -240,7 +305,7 @@ HANDLE SetClipboardData(WORD wFormat, HANDLE hData)
|
||||||
Window owner;
|
Window owner;
|
||||||
|
|
||||||
dprintf_clipboard(stddeb,
|
dprintf_clipboard(stddeb,
|
||||||
"SetClipboardDate(%04X, %04x) !\n", wFormat, hData);
|
"SetClipboardData(%04X, %04x) !\n", wFormat, hData);
|
||||||
|
|
||||||
while(TRUE)
|
while(TRUE)
|
||||||
{
|
{
|
||||||
|
@ -249,59 +314,138 @@ HANDLE SetClipboardData(WORD wFormat, HANDLE hData)
|
||||||
lpFormat = lpFormat->NextFormat;
|
lpFormat = lpFormat->NextFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Acquire X selection:
|
/* Acquire X selection if text format */
|
||||||
*
|
|
||||||
* doc says we shouldn't use CurrentTime
|
|
||||||
* should we become owner of CLIPBOARD as well?
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
if( !selectionAcquired &&
|
||||||
|
(wFormat == CF_TEXT || wFormat == CF_OEMTEXT) )
|
||||||
|
{
|
||||||
owner = WIN_GetXWindow(hWndClipWindow);
|
owner = WIN_GetXWindow(hWndClipWindow);
|
||||||
|
|
||||||
XSetSelectionOwner(display,XA_PRIMARY,owner,CurrentTime);
|
XSetSelectionOwner(display,XA_PRIMARY,owner,CurrentTime);
|
||||||
if( XGetSelectionOwner(display,XA_PRIMARY) == owner )
|
if( XGetSelectionOwner(display,XA_PRIMARY) == owner )
|
||||||
{
|
{
|
||||||
wineOwnsSelection = True;
|
selectionAcquired = True;
|
||||||
dprintf_clipboard(stddeb,"Getting selection\n");
|
selectionWindow = owner;
|
||||||
|
|
||||||
|
dprintf_clipboard(stddeb,"Grabbed X selection, owner=(%08x)\n",
|
||||||
|
(unsigned) owner);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( lpFormat->wDataPresent )
|
if ( lpFormat->wDataPresent || lpFormat->hData )
|
||||||
|
{
|
||||||
CLIPBOARD_DeleteRecord(lpFormat);
|
CLIPBOARD_DeleteRecord(lpFormat);
|
||||||
|
|
||||||
|
/* delete existing CF_TEXT/CF_OEMTEXT aliases */
|
||||||
|
|
||||||
|
if( wFormat == CF_TEXT && ClipFormats[CF_OEMTEXT-1].hData
|
||||||
|
&& !ClipFormats[CF_OEMTEXT-1].wDataPresent )
|
||||||
|
CLIPBOARD_DeleteRecord(&ClipFormats[CF_OEMTEXT-1]);
|
||||||
|
if( wFormat == CF_OEMTEXT && ClipFormats[CF_TEXT-1].hData
|
||||||
|
&& !ClipFormats[CF_TEXT-1].wDataPresent )
|
||||||
|
CLIPBOARD_DeleteRecord(&ClipFormats[CF_TEXT-1]);
|
||||||
|
}
|
||||||
|
|
||||||
bClipChanged = TRUE;
|
bClipChanged = TRUE;
|
||||||
lpFormat->wDataPresent = TRUE;
|
lpFormat->wDataPresent = 1;
|
||||||
lpFormat->hData = hData;
|
lpFormat->hData = hData; /* 0 is legal, see WM_RENDERFORMAT */
|
||||||
|
|
||||||
return lpFormat->hData;
|
return lpFormat->hData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* CLIPBOARD_RenderFormat
|
||||||
|
*/
|
||||||
|
BOOL32 CLIPBOARD_RenderFormat(LPCLIPFORMAT lpFormat)
|
||||||
|
{
|
||||||
|
if( lpFormat->wDataPresent && !lpFormat->hData )
|
||||||
|
if( IsWindow(hWndClipOwner) )
|
||||||
|
SendMessage16(hWndClipOwner,WM_RENDERFORMAT,(WPARAM)lpFormat->wFormatID,0L);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dprintf_clipboard(stddeb,"\thWndClipOwner (%04x) is lost!\n",
|
||||||
|
hWndClipOwner);
|
||||||
|
hWndClipOwner = 0; lpFormat->wDataPresent = 0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return (lpFormat->hData) ? TRUE : FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* CLIPBOARD_RenderText
|
||||||
|
*/
|
||||||
|
BOOL32 CLIPBOARD_RenderText(LPCLIPFORMAT lpTarget, LPCLIPFORMAT lpSource)
|
||||||
|
{
|
||||||
|
UINT size = GlobalSize16( lpSource->hData );
|
||||||
|
LPCSTR lpstrS = (LPSTR)GlobalLock16(lpSource->hData);
|
||||||
|
LPSTR lpstrT;
|
||||||
|
|
||||||
|
if( !lpstrS ) return FALSE;
|
||||||
|
dprintf_clipboard(stddeb,"\tconverting from '%s' to '%s', %i chars\n",
|
||||||
|
lpSource->Name, lpTarget->Name, size);
|
||||||
|
|
||||||
|
lpTarget->hData = GlobalAlloc16(GMEM_ZEROINIT, size);
|
||||||
|
lpstrT = (LPSTR)GlobalLock16(lpTarget->hData);
|
||||||
|
|
||||||
|
if( lpstrT )
|
||||||
|
{
|
||||||
|
if( lpSource->wFormatID == CF_TEXT )
|
||||||
|
AnsiToOemBuff(lpstrS, lpstrT, size);
|
||||||
|
else
|
||||||
|
OemToAnsiBuff(lpstrS, lpstrT, size);
|
||||||
|
dprintf_clipboard(stddeb,"\tgot %s\n", lpstrT);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
lpTarget->hData = 0;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* GetClipboardData [USER.142]
|
* GetClipboardData [USER.142]
|
||||||
*/
|
*/
|
||||||
HANDLE GetClipboardData(WORD wFormat)
|
HANDLE GetClipboardData(WORD wFormat)
|
||||||
{
|
{
|
||||||
LPCLIPFORMAT lpFormat = ClipFormats;
|
LPCLIPFORMAT lpRender = ClipFormats;
|
||||||
dprintf_clipboard(stddeb,"GetClipboardData(%04X)\n", wFormat);
|
LPCLIPFORMAT lpUpdate = NULL;
|
||||||
|
|
||||||
if (!hWndClipWindow) return 0;
|
if (!hWndClipWindow) return 0;
|
||||||
|
|
||||||
/* if(wFormat == CF_TEXT && !wineOwnsSelection)
|
dprintf_clipboard(stddeb,"GetClipboardData(%04X)\n", wFormat);
|
||||||
CLIPBOARD_RequestXSelection();
|
|
||||||
*/
|
|
||||||
|
|
||||||
while(TRUE) {
|
if( wFormat == CF_TEXT && !lpRender[CF_TEXT-1].wDataPresent
|
||||||
if (lpFormat == NULL) return 0;
|
&& lpRender[CF_OEMTEXT-1].wDataPresent )
|
||||||
if (lpFormat->wFormatID == wFormat) break;
|
{
|
||||||
lpFormat = lpFormat->NextFormat;
|
lpRender = &ClipFormats[CF_OEMTEXT-1];
|
||||||
|
lpUpdate = &ClipFormats[CF_TEXT-1];
|
||||||
|
|
||||||
|
dprintf_clipboard(stddeb,"\tOEMTEXT -> TEXT\n");
|
||||||
|
}
|
||||||
|
else if( wFormat == CF_OEMTEXT && !lpRender[CF_OEMTEXT-1].wDataPresent
|
||||||
|
&& lpRender[CF_TEXT-1].wDataPresent )
|
||||||
|
{
|
||||||
|
lpRender = &ClipFormats[CF_TEXT-1];
|
||||||
|
lpUpdate = &ClipFormats[CF_OEMTEXT-1];
|
||||||
|
|
||||||
|
dprintf_clipboard(stddeb,"\tTEXT -> OEMTEXT\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while(TRUE)
|
||||||
|
{
|
||||||
|
if (lpRender == NULL) return 0;
|
||||||
|
if (lpRender->wFormatID == wFormat) break;
|
||||||
|
lpRender = lpRender->NextFormat;
|
||||||
|
}
|
||||||
|
lpUpdate = lpRender;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( lpFormat->wDataPresent && !lpFormat->hData )
|
if( !CLIPBOARD_RenderFormat(lpRender) ) return 0;
|
||||||
if( IsWindow(hWndClipOwner) )
|
if( lpUpdate != lpRender &&
|
||||||
SendMessage16(hWndClipOwner,WM_RENDERFORMAT,(WPARAM)lpFormat->wFormatID,0L);
|
!lpUpdate->hData ) CLIPBOARD_RenderText(lpUpdate, lpRender);
|
||||||
else
|
|
||||||
dprintf_clipboard(stddeb,"\thWndClipOwner is lost\n");
|
|
||||||
|
|
||||||
return lpFormat->hData;
|
dprintf_clipboard(stddeb,"\treturning %04x (type %i)\n",
|
||||||
|
lpUpdate->hData, lpUpdate->wFormatID);
|
||||||
|
return lpUpdate->hData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -315,6 +459,11 @@ INT CountClipboardFormats()
|
||||||
|
|
||||||
dprintf_clipboard(stddeb,"CountClipboardFormats()\n");
|
dprintf_clipboard(stddeb,"CountClipboardFormats()\n");
|
||||||
|
|
||||||
|
if( !selectionAcquired ) CLIPBOARD_RequestXSelection();
|
||||||
|
|
||||||
|
FormatCount += abs(lpFormat[CF_TEXT-1].wDataPresent -
|
||||||
|
lpFormat[CF_OEMTEXT-1].wDataPresent);
|
||||||
|
|
||||||
while(TRUE) {
|
while(TRUE) {
|
||||||
if (lpFormat == NULL) break;
|
if (lpFormat == NULL) break;
|
||||||
if (lpFormat->wDataPresent)
|
if (lpFormat->wDataPresent)
|
||||||
|
@ -334,21 +483,22 @@ INT CountClipboardFormats()
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* EnumClipboardFormats [USER.144]
|
* EnumClipboardFormats [USER.144]
|
||||||
*/
|
*/
|
||||||
UINT EnumClipboardFormats(UINT wFormat)
|
UINT16 EnumClipboardFormats(UINT16 wFormat)
|
||||||
{
|
{
|
||||||
LPCLIPFORMAT lpFormat = ClipFormats;
|
LPCLIPFORMAT lpFormat = ClipFormats;
|
||||||
|
|
||||||
dprintf_clipboard(stddeb,"EnumClipboardFormats(%04X)\n", wFormat);
|
dprintf_clipboard(stddeb,"EnumClipboardFormats(%04X)\n", wFormat);
|
||||||
|
|
||||||
if( (!wFormat || wFormat == CF_TEXT) && !wineOwnsSelection)
|
if( !hWndClipWindow ) return 0;
|
||||||
CLIPBOARD_RequestXSelection();
|
|
||||||
|
|
||||||
if (wFormat == 0) {
|
if( (!wFormat || wFormat == CF_TEXT || wFormat == CF_OEMTEXT)
|
||||||
if (lpFormat->wDataPresent)
|
&& !selectionAcquired) CLIPBOARD_RequestXSelection();
|
||||||
|
|
||||||
|
if (wFormat == 0)
|
||||||
|
if (lpFormat->wDataPresent || ClipFormats[CF_OEMTEXT-1].wDataPresent)
|
||||||
return lpFormat->wFormatID;
|
return lpFormat->wFormatID;
|
||||||
else
|
else
|
||||||
wFormat = lpFormat->wFormatID;
|
wFormat = lpFormat->wFormatID; /* and CF_TEXT is not available */
|
||||||
}
|
|
||||||
|
|
||||||
/* walk up to the specified format record */
|
/* walk up to the specified format record */
|
||||||
|
|
||||||
|
@ -363,12 +513,12 @@ UINT EnumClipboardFormats(UINT wFormat)
|
||||||
lpFormat = lpFormat->NextFormat;
|
lpFormat = lpFormat->NextFormat;
|
||||||
while(TRUE) {
|
while(TRUE) {
|
||||||
if (lpFormat == NULL) return 0;
|
if (lpFormat == NULL) return 0;
|
||||||
if (lpFormat->wDataPresent ) break;
|
if (lpFormat->wDataPresent ||
|
||||||
|
(lpFormat->wFormatID == CF_OEMTEXT &&
|
||||||
|
ClipFormats[CF_TEXT-1].wDataPresent)) break;
|
||||||
lpFormat = lpFormat->NextFormat;
|
lpFormat = lpFormat->NextFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintf_clipboard(stddeb, "\t got not empty - Id=%04X hData=%04x !\n",
|
|
||||||
lpFormat->wFormatID, lpFormat->hData);
|
|
||||||
return lpFormat->wFormatID;
|
return lpFormat->wFormatID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -500,8 +650,8 @@ BOOL IsClipboardFormatAvailable(WORD wFormat)
|
||||||
{
|
{
|
||||||
dprintf_clipboard(stddeb,"IsClipboardFormatAvailable(%04X) !\n", wFormat);
|
dprintf_clipboard(stddeb,"IsClipboardFormatAvailable(%04X) !\n", wFormat);
|
||||||
|
|
||||||
if(wFormat == CF_TEXT && !wineOwnsSelection)
|
if( (wFormat == CF_TEXT || wFormat == CF_OEMTEXT) &&
|
||||||
CLIPBOARD_RequestXSelection();
|
!selectionAcquired ) CLIPBOARD_RequestXSelection();
|
||||||
|
|
||||||
return CLIPBOARD_IsPresent(wFormat);
|
return CLIPBOARD_IsPresent(wFormat);
|
||||||
}
|
}
|
||||||
|
@ -533,72 +683,112 @@ int GetPriorityClipboardFormat(WORD *lpPriorityList, short nCount)
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* CLIPBOARD_ReadSelection
|
* CLIPBOARD_ReadSelection
|
||||||
*
|
*
|
||||||
* The current selection owner has set prop at our window w
|
* Called from the SelectionNotify event handler.
|
||||||
* Transfer the property contents into the Clipboard
|
|
||||||
*/
|
*/
|
||||||
void CLIPBOARD_ReadSelection(Window w,Atom prop)
|
void CLIPBOARD_ReadSelection(Window w,Atom prop)
|
||||||
{
|
{
|
||||||
HANDLE hText;
|
HANDLE16 hText = 0;
|
||||||
LPCLIPFORMAT lpFormat = ClipFormats;
|
LPCLIPFORMAT lpFormat = ClipFormats;
|
||||||
if(prop==None)
|
|
||||||
hText=0;
|
dprintf_clipboard(stddeb,"ReadSelection callback\n");
|
||||||
else
|
|
||||||
|
if(prop != None)
|
||||||
{
|
{
|
||||||
Atom atype=None;
|
Atom atype=AnyPropertyType;
|
||||||
int aformat;
|
int aformat;
|
||||||
unsigned long nitems,remain;
|
unsigned long nitems,remain;
|
||||||
unsigned char *val=NULL;
|
unsigned char* val=NULL;
|
||||||
|
|
||||||
dprintf_clipboard(stddeb,"Received prop %s\n",XGetAtomName(display,prop));
|
dprintf_clipboard(stddeb,"\tgot property %s\n",XGetAtomName(display,prop));
|
||||||
|
|
||||||
/* TODO: Properties longer than 64K */
|
/* TODO: Properties longer than 64K */
|
||||||
|
|
||||||
if(XGetWindowProperty(display,w,prop,0,0x3FFF,True,XA_STRING,
|
if(XGetWindowProperty(display,w,prop,0,0x3FFF,True,XA_STRING,
|
||||||
&atype, &aformat, &nitems, &remain, &val)!=Success)
|
&atype, &aformat, &nitems, &remain, &val) != Success)
|
||||||
fprintf(stderr,"couldn't read property\n");
|
dprintf_clipboard(stddeb,"\tcouldn't read property\n");
|
||||||
|
else
|
||||||
dprintf_clipboard(stddeb,"Type %s,Format %d,nitems %ld,value %s\n",
|
{
|
||||||
|
dprintf_clipboard(stddeb,"\tType %s,Format %d,nitems %ld,value %s\n",
|
||||||
XGetAtomName(display,atype),aformat,nitems,val);
|
XGetAtomName(display,atype),aformat,nitems,val);
|
||||||
|
|
||||||
if(atype!=XA_STRING || aformat!=8){
|
if(atype == XA_STRING && aformat == 8)
|
||||||
fprintf(stderr,"Property not set\n");
|
{
|
||||||
hText=0;
|
int i,inlcount = 0;
|
||||||
} else {
|
char* lpstr;
|
||||||
dprintf_clipboard(stddeb,"Selection is %s\n",val);
|
|
||||||
hText=GlobalAlloc16(GMEM_MOVEABLE, nitems+1);
|
dprintf_clipboard(stddeb,"\tselection is '%s'\n",val);
|
||||||
memcpy(GlobalLock16(hText),val,nitems+1);
|
|
||||||
GlobalUnlock16(hText);
|
for(i=0; i <= nitems; i++)
|
||||||
|
if( val[i] == '\n' ) inlcount++;
|
||||||
|
|
||||||
|
if( nitems )
|
||||||
|
{
|
||||||
|
hText=GlobalAlloc16(GMEM_MOVEABLE, nitems + inlcount + 1);
|
||||||
|
if( (lpstr = (char*)GlobalLock16(hText)) )
|
||||||
|
for(i=0,inlcount=0; i <= nitems; i++)
|
||||||
|
{
|
||||||
|
if( val[i] == '\n' ) lpstr[inlcount++]='\r';
|
||||||
|
lpstr[inlcount++]=val[i];
|
||||||
|
}
|
||||||
|
else hText = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
XFree(val);
|
XFree(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
while(TRUE) {
|
|
||||||
if (lpFormat == NULL) return;
|
|
||||||
if (lpFormat->wFormatID == CF_TEXT) break;
|
|
||||||
lpFormat = lpFormat->NextFormat;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lpFormat->wDataPresent)
|
/* delete previous CF_TEXT and CF_OEMTEXT data */
|
||||||
|
|
||||||
|
if( hText )
|
||||||
|
{
|
||||||
|
lpFormat = &ClipFormats[CF_TEXT-1];
|
||||||
|
if (lpFormat->wDataPresent || lpFormat->hData)
|
||||||
|
CLIPBOARD_DeleteRecord(lpFormat);
|
||||||
|
lpFormat = &ClipFormats[CF_OEMTEXT-1];
|
||||||
|
if (lpFormat->wDataPresent || lpFormat->hData)
|
||||||
CLIPBOARD_DeleteRecord(lpFormat);
|
CLIPBOARD_DeleteRecord(lpFormat);
|
||||||
|
|
||||||
wait_for_selection=False;
|
lpFormat->wDataPresent = 1;
|
||||||
|
|
||||||
lpFormat->wDataPresent = TRUE;
|
|
||||||
lpFormat->hData = hText;
|
lpFormat->hData = hText;
|
||||||
dprintf_clipboard(stddeb,"Received selection\n");
|
}
|
||||||
|
|
||||||
|
selectionWait=False;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* CLIPBOARD_ReleaseSelection
|
* CLIPBOARD_ReleaseSelection
|
||||||
*
|
*
|
||||||
* Wine lost the primary selection.
|
* Wine might have lost XA_PRIMARY selection because of
|
||||||
* Empty the clipboard, but don't set the current owner to None.
|
* EmptyClipboard() or other client.
|
||||||
* Make sure current get/put attempts fail.
|
|
||||||
*/
|
*/
|
||||||
void CLIPBOARD_ReleaseSelection(HWND hwnd)
|
void CLIPBOARD_ReleaseSelection(Window w, HWND hwnd)
|
||||||
{
|
{
|
||||||
wineOwnsSelection=False;
|
/* w is the window that lost selection,
|
||||||
OpenClipboard(hwnd);
|
*
|
||||||
EmptyClipboard();
|
* selectionPrevWindow is nonzero if CheckSelection() was called.
|
||||||
CloseClipboard();
|
*/
|
||||||
|
|
||||||
|
dprintf_clipboard(stddeb,"\tevent->window = %08x (sw = %08x, spw=%08x)\n",
|
||||||
|
(unsigned)w, (unsigned)selectionWindow, (unsigned)selectionPrevWindow );
|
||||||
|
|
||||||
|
if( selectionAcquired )
|
||||||
|
if( w == selectionWindow || selectionPrevWindow == None)
|
||||||
|
{
|
||||||
|
/* alright, we really lost it */
|
||||||
|
|
||||||
|
selectionAcquired = False;
|
||||||
|
selectionWindow = None;
|
||||||
|
|
||||||
|
/* but we'll keep existing data for internal use */
|
||||||
|
}
|
||||||
|
else if( w == selectionPrevWindow )
|
||||||
|
{
|
||||||
|
w = XGetSelectionOwner(display, XA_PRIMARY);
|
||||||
|
|
||||||
|
if( w == None )
|
||||||
|
XSetSelectionOwner(display, XA_PRIMARY, selectionWindow, CurrentTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
selectionPrevWindow = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1576,7 +1576,7 @@ INT16 WriteComm(INT16 fd, LPSTR lpvBuf, INT16 cbWrite)
|
||||||
* GetCommTimeouts (KERNEL32.160)
|
* GetCommTimeouts (KERNEL32.160)
|
||||||
*/
|
*/
|
||||||
BOOL32 GetCommTimeouts(INT32 fd,LPCOMMTIMEOUTS lptimeouts) {
|
BOOL32 GetCommTimeouts(INT32 fd,LPCOMMTIMEOUTS lptimeouts) {
|
||||||
dprintf_comm(stddeb,"GetCommTimeouts(%lx,%p), empty stub.\n",
|
dprintf_comm(stddeb,"GetCommTimeouts(%x,%p), empty stub.\n",
|
||||||
fd,lptimeouts
|
fd,lptimeouts
|
||||||
);
|
);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1586,7 +1586,7 @@ BOOL32 GetCommTimeouts(INT32 fd,LPCOMMTIMEOUTS lptimeouts) {
|
||||||
* SetCommTimeouts (KERNEL32.453)
|
* SetCommTimeouts (KERNEL32.453)
|
||||||
*/
|
*/
|
||||||
BOOL32 SetCommTimeouts(INT32 fd,LPCOMMTIMEOUTS lptimeouts) {
|
BOOL32 SetCommTimeouts(INT32 fd,LPCOMMTIMEOUTS lptimeouts) {
|
||||||
dprintf_comm(stddeb,"SetCommTimeouts(%lx,%p), empty stub.\n",
|
dprintf_comm(stddeb,"SetCommTimeouts(%x,%p), empty stub.\n",
|
||||||
fd,lptimeouts
|
fd,lptimeouts
|
||||||
);
|
);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -1475,12 +1475,12 @@ static int CC_CheckDigitsInEdit(HWND hwnd,int maxval)
|
||||||
static void CC_PaintSelectedColor(HWND hDlg,COLORREF cr)
|
static void CC_PaintSelectedColor(HWND hDlg,COLORREF cr)
|
||||||
{
|
{
|
||||||
RECT16 rect;
|
RECT16 rect;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
HBRUSH hBrush;
|
HBRUSH hBrush;
|
||||||
HWND hwnd=GetDlgItem(hDlg,0x2c5);
|
HWND hwnd=GetDlgItem(hDlg,0x2c5);
|
||||||
if (IsWindowVisible(GetDlgItem(hDlg,0x2c6))) /* if full size */
|
if (IsWindowVisible(GetDlgItem(hDlg,0x2c6))) /* if full size */
|
||||||
{
|
{
|
||||||
hdc=GetDC(hwnd);
|
hdc=GetDC32(hwnd);
|
||||||
GetClientRect16 (hwnd, &rect) ;
|
GetClientRect16 (hwnd, &rect) ;
|
||||||
hBrush = CreateSolidBrush(cr);
|
hBrush = CreateSolidBrush(cr);
|
||||||
if (hBrush)
|
if (hBrush)
|
||||||
|
@ -1496,7 +1496,7 @@ static void CC_PaintSelectedColor(HWND hDlg,COLORREF cr)
|
||||||
DeleteObject (SelectObject (hdc, hBrush)) ;
|
DeleteObject (SelectObject (hdc, hBrush)) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ReleaseDC(hwnd,hdc);
|
ReleaseDC32(hwnd,hdc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1505,7 +1505,7 @@ static void CC_PaintSelectedColor(HWND hDlg,COLORREF cr)
|
||||||
*/
|
*/
|
||||||
static void CC_PaintTriangle(HWND hDlg,int y)
|
static void CC_PaintTriangle(HWND hDlg,int y)
|
||||||
{
|
{
|
||||||
HDC hDC;
|
HDC32 hDC;
|
||||||
long temp;
|
long temp;
|
||||||
int w=GetDialogBaseUnits();
|
int w=GetDialogBaseUnits();
|
||||||
POINT16 points[3];
|
POINT16 points[3];
|
||||||
|
@ -1519,7 +1519,7 @@ static void CC_PaintTriangle(HWND hDlg,int y)
|
||||||
{
|
{
|
||||||
GetClientRect16(hwnd,&rect);
|
GetClientRect16(hwnd,&rect);
|
||||||
height=rect.bottom;
|
height=rect.bottom;
|
||||||
hDC=GetDC(hDlg);
|
hDC=GetDC32(hDlg);
|
||||||
|
|
||||||
points[0].y=rect.top;
|
points[0].y=rect.top;
|
||||||
points[0].x=rect.right; /* | /| */
|
points[0].x=rect.right; /* | /| */
|
||||||
|
@ -1540,7 +1540,7 @@ static void CC_PaintTriangle(HWND hDlg,int y)
|
||||||
lpp->old3angle.top =points[2].y-1;
|
lpp->old3angle.top =points[2].y-1;
|
||||||
lpp->old3angle.bottom=points[1].y+1;
|
lpp->old3angle.bottom=points[1].y+1;
|
||||||
Polygon16(hDC,points,3);
|
Polygon16(hDC,points,3);
|
||||||
ReleaseDC(hDlg,hDC);
|
ReleaseDC32(hDlg,hDC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1550,7 +1550,7 @@ static void CC_PaintTriangle(HWND hDlg,int y)
|
||||||
*/
|
*/
|
||||||
static void CC_PaintCross(HWND hDlg,int x,int y)
|
static void CC_PaintCross(HWND hDlg,int x,int y)
|
||||||
{
|
{
|
||||||
HDC hDC;
|
HDC32 hDC;
|
||||||
int w=GetDialogBaseUnits();
|
int w=GetDialogBaseUnits();
|
||||||
HWND hwnd=GetDlgItem(hDlg,0x2c6);
|
HWND hwnd=GetDlgItem(hDlg,0x2c6);
|
||||||
struct CCPRIVATE * lpp=(struct CCPRIVATE *)GetWindowLong32A(hDlg, DWL_USER);
|
struct CCPRIVATE * lpp=(struct CCPRIVATE *)GetWindowLong32A(hDlg, DWL_USER);
|
||||||
|
@ -1561,7 +1561,7 @@ static void CC_PaintCross(HWND hDlg,int x,int y)
|
||||||
if (IsWindowVisible(GetDlgItem(hDlg,0x2c6))) /* if full size */
|
if (IsWindowVisible(GetDlgItem(hDlg,0x2c6))) /* if full size */
|
||||||
{
|
{
|
||||||
GetClientRect16(hwnd,&rect);
|
GetClientRect16(hwnd,&rect);
|
||||||
hDC=GetDC(hwnd);
|
hDC=GetDC32(hwnd);
|
||||||
SelectClipRgn(hDC,CreateRectRgnIndirect16(&rect));
|
SelectClipRgn(hDC,CreateRectRgnIndirect16(&rect));
|
||||||
hPen=CreatePen(PS_SOLID,2,0);
|
hPen=CreatePen(PS_SOLID,2,0);
|
||||||
hPen=SelectObject(hDC,hPen);
|
hPen=SelectObject(hDC,hPen);
|
||||||
|
@ -1582,7 +1582,7 @@ static void CC_PaintCross(HWND hDlg,int x,int y)
|
||||||
MoveTo(hDC,point.x,point.y-w);
|
MoveTo(hDC,point.x,point.y-w);
|
||||||
LineTo(hDC,point.x,point.y+w);
|
LineTo(hDC,point.x,point.y+w);
|
||||||
DeleteObject(SelectObject(hDC,hPen));
|
DeleteObject(SelectObject(hDC,hPen));
|
||||||
ReleaseDC(hwnd,hDC);
|
ReleaseDC32(hwnd,hDC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1600,12 +1600,12 @@ static void CC_PrepareColorGraph(HWND hDlg)
|
||||||
HWND hwnd=GetDlgItem(hDlg,0x2c6);
|
HWND hwnd=GetDlgItem(hDlg,0x2c6);
|
||||||
struct CCPRIVATE * lpp=(struct CCPRIVATE *)GetWindowLong32A(hDlg, DWL_USER);
|
struct CCPRIVATE * lpp=(struct CCPRIVATE *)GetWindowLong32A(hDlg, DWL_USER);
|
||||||
HBRUSH hbrush;
|
HBRUSH hbrush;
|
||||||
HDC hdc ;
|
HDC32 hdc ;
|
||||||
RECT16 rect,client;
|
RECT16 rect,client;
|
||||||
HCURSOR16 hcursor=SetCursor(LoadCursor16(0,IDC_WAIT));
|
HCURSOR16 hcursor=SetCursor(LoadCursor16(0,IDC_WAIT));
|
||||||
|
|
||||||
GetClientRect16(hwnd,&client);
|
GetClientRect16(hwnd,&client);
|
||||||
hdc=GetDC(hwnd);
|
hdc=GetDC32(hwnd);
|
||||||
lpp->hdcMem = CreateCompatibleDC(hdc);
|
lpp->hdcMem = CreateCompatibleDC(hdc);
|
||||||
lpp->hbmMem = CreateCompatibleBitmap(hdc,client.right,client.bottom);
|
lpp->hbmMem = CreateCompatibleBitmap(hdc,client.right,client.bottom);
|
||||||
SelectObject(lpp->hdcMem,lpp->hbmMem);
|
SelectObject(lpp->hdcMem,lpp->hbmMem);
|
||||||
|
@ -1631,7 +1631,7 @@ static void CC_PrepareColorGraph(HWND hDlg)
|
||||||
}
|
}
|
||||||
rect.left=rect.right;
|
rect.left=rect.right;
|
||||||
}
|
}
|
||||||
ReleaseDC(hwnd,hdc);
|
ReleaseDC32(hwnd,hdc);
|
||||||
SetCursor(hcursor);
|
SetCursor(hcursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1642,20 +1642,20 @@ static void CC_PaintColorGraph(HWND hDlg)
|
||||||
{
|
{
|
||||||
HWND hwnd=GetDlgItem(hDlg,0x2c6);
|
HWND hwnd=GetDlgItem(hDlg,0x2c6);
|
||||||
struct CCPRIVATE * lpp=(struct CCPRIVATE *)GetWindowLong32A(hDlg, DWL_USER);
|
struct CCPRIVATE * lpp=(struct CCPRIVATE *)GetWindowLong32A(hDlg, DWL_USER);
|
||||||
HDC hDC;
|
HDC32 hDC;
|
||||||
RECT16 rect;
|
RECT16 rect;
|
||||||
if (IsWindowVisible(hwnd)) /* if full size */
|
if (IsWindowVisible(hwnd)) /* if full size */
|
||||||
{
|
{
|
||||||
if (!lpp->hdcMem)
|
if (!lpp->hdcMem)
|
||||||
CC_PrepareColorGraph(hDlg); /* should not be necessary */
|
CC_PrepareColorGraph(hDlg); /* should not be necessary */
|
||||||
|
|
||||||
hDC=GetDC(hwnd);
|
hDC=GetDC32(hwnd);
|
||||||
GetClientRect16(hwnd,&rect);
|
GetClientRect16(hwnd,&rect);
|
||||||
if (lpp->hdcMem)
|
if (lpp->hdcMem)
|
||||||
BitBlt(hDC,0,0,rect.right,rect.bottom,lpp->hdcMem,0,0,SRCCOPY);
|
BitBlt(hDC,0,0,rect.right,rect.bottom,lpp->hdcMem,0,0,SRCCOPY);
|
||||||
else
|
else
|
||||||
fprintf(stderr,"choose color: hdcMem is not defined\n");
|
fprintf(stderr,"choose color: hdcMem is not defined\n");
|
||||||
ReleaseDC(hwnd,hDC);
|
ReleaseDC32(hwnd,hDC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -1667,11 +1667,11 @@ static void CC_PaintLumBar(HWND hDlg,int hue,int sat)
|
||||||
RECT16 rect,client;
|
RECT16 rect,client;
|
||||||
int lum,ldif,ydif,r,g,b;
|
int lum,ldif,ydif,r,g,b;
|
||||||
HBRUSH hbrush;
|
HBRUSH hbrush;
|
||||||
HDC hDC;
|
HDC32 hDC;
|
||||||
|
|
||||||
if (IsWindowVisible(hwnd))
|
if (IsWindowVisible(hwnd))
|
||||||
{
|
{
|
||||||
hDC=GetDC(hwnd);
|
hDC=GetDC32(hwnd);
|
||||||
GetClientRect16(hwnd,&client);
|
GetClientRect16(hwnd,&client);
|
||||||
rect=client;
|
rect=client;
|
||||||
|
|
||||||
|
@ -1690,7 +1690,7 @@ static void CC_PaintLumBar(HWND hDlg,int hue,int sat)
|
||||||
}
|
}
|
||||||
GetClientRect16(hwnd,&rect);
|
GetClientRect16(hwnd,&rect);
|
||||||
FrameRect16(hDC,&rect,GetStockObject(BLACK_BRUSH));
|
FrameRect16(hDC,&rect,GetStockObject(BLACK_BRUSH));
|
||||||
ReleaseDC(hwnd,hDC);
|
ReleaseDC32(hwnd,hDC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1775,7 +1775,7 @@ static void CC_PaintPredefColorArray(HWND hDlg,int rows,int cols)
|
||||||
{
|
{
|
||||||
HWND hwnd=GetDlgItem(hDlg,0x2d0);
|
HWND hwnd=GetDlgItem(hDlg,0x2d0);
|
||||||
RECT16 rect;
|
RECT16 rect;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
HBRUSH hBrush;
|
HBRUSH hBrush;
|
||||||
int dx,dy,i,j,k;
|
int dx,dy,i,j,k;
|
||||||
|
|
||||||
|
@ -1784,7 +1784,7 @@ static void CC_PaintPredefColorArray(HWND hDlg,int rows,int cols)
|
||||||
dy=rect.bottom/rows;
|
dy=rect.bottom/rows;
|
||||||
k=rect.left;
|
k=rect.left;
|
||||||
|
|
||||||
hdc=GetDC(hwnd);
|
hdc=GetDC32(hwnd);
|
||||||
GetClientRect16 (hwnd, &rect) ;
|
GetClientRect16 (hwnd, &rect) ;
|
||||||
|
|
||||||
for (j=0;j<rows;j++)
|
for (j=0;j<rows;j++)
|
||||||
|
@ -1804,7 +1804,7 @@ static void CC_PaintPredefColorArray(HWND hDlg,int rows,int cols)
|
||||||
rect.top=rect.top+dy;
|
rect.top=rect.top+dy;
|
||||||
rect.left=k;
|
rect.left=k;
|
||||||
}
|
}
|
||||||
ReleaseDC(hwnd,hdc);
|
ReleaseDC32(hwnd,hdc);
|
||||||
/* FIXME: draw_a_focus_rect */
|
/* FIXME: draw_a_focus_rect */
|
||||||
}
|
}
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -1814,7 +1814,7 @@ static void CC_PaintUserColorArray(HWND hDlg,int rows,int cols,COLORREF* lpcr)
|
||||||
{
|
{
|
||||||
HWND hwnd=GetDlgItem(hDlg,0x2d1);
|
HWND hwnd=GetDlgItem(hDlg,0x2d1);
|
||||||
RECT16 rect;
|
RECT16 rect;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
HBRUSH hBrush;
|
HBRUSH hBrush;
|
||||||
int dx,dy,i,j,k;
|
int dx,dy,i,j,k;
|
||||||
|
|
||||||
|
@ -1824,7 +1824,7 @@ static void CC_PaintUserColorArray(HWND hDlg,int rows,int cols,COLORREF* lpcr)
|
||||||
dy=rect.bottom/rows;
|
dy=rect.bottom/rows;
|
||||||
k=rect.left;
|
k=rect.left;
|
||||||
|
|
||||||
hdc=GetDC(hwnd);
|
hdc=GetDC32(hwnd);
|
||||||
if (hdc)
|
if (hdc)
|
||||||
{
|
{
|
||||||
for (j=0;j<rows;j++)
|
for (j=0;j<rows;j++)
|
||||||
|
@ -1844,7 +1844,7 @@ static void CC_PaintUserColorArray(HWND hDlg,int rows,int cols,COLORREF* lpcr)
|
||||||
rect.top=rect.top+dy;
|
rect.top=rect.top+dy;
|
||||||
rect.left=k;
|
rect.left=k;
|
||||||
}
|
}
|
||||||
ReleaseDC(hwnd,hdc);
|
ReleaseDC32(hwnd,hdc);
|
||||||
}
|
}
|
||||||
/* FIXME: draw_a_focus_rect */
|
/* FIXME: draw_a_focus_rect */
|
||||||
}
|
}
|
||||||
|
@ -1940,7 +1940,7 @@ static LRESULT CC_WMCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
int r,g,b,i,xx;
|
int r,g,b,i,xx;
|
||||||
UINT cokmsg;
|
UINT cokmsg;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
COLORREF *cr;
|
COLORREF *cr;
|
||||||
struct CCPRIVATE * lpp=(struct CCPRIVATE *)GetWindowLong32A(hDlg, DWL_USER);
|
struct CCPRIVATE * lpp=(struct CCPRIVATE *)GetWindowLong32A(hDlg, DWL_USER);
|
||||||
dprintf_commdlg(stddeb,"CC_WMCommand wParam=%x lParam=%lx\n",wParam,lParam);
|
dprintf_commdlg(stddeb,"CC_WMCommand wParam=%x lParam=%lx\n",wParam,lParam);
|
||||||
|
@ -2018,9 +2018,9 @@ static LRESULT CC_WMCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x2c9: /* resulting color */
|
case 0x2c9: /* resulting color */
|
||||||
hdc=GetDC(hDlg);
|
hdc=GetDC32(hDlg);
|
||||||
lpp->lpcc->rgbResult=GetNearestColor(hdc,lpp->lpcc->rgbResult);
|
lpp->lpcc->rgbResult=GetNearestColor(hdc,lpp->lpcc->rgbResult);
|
||||||
ReleaseDC(hDlg,hdc);
|
ReleaseDC32(hDlg,hdc);
|
||||||
CC_EditSetRGB(hDlg,lpp->lpcc->rgbResult);
|
CC_EditSetRGB(hDlg,lpp->lpcc->rgbResult);
|
||||||
CC_PaintSelectedColor(hDlg,lpp->lpcc->rgbResult);
|
CC_PaintSelectedColor(hDlg,lpp->lpcc->rgbResult);
|
||||||
r=GetRValue(lpp->lpcc->rgbResult);
|
r=GetRValue(lpp->lpcc->rgbResult);
|
||||||
|
@ -2402,10 +2402,10 @@ INT16 FontStyleEnumProc( SEGPTR logfont, SEGPTR metrics,
|
||||||
|
|
||||||
if (!SendMessage16(hcmb2,CB_GETCOUNT,0,0))
|
if (!SendMessage16(hcmb2,CB_GETCOUNT,0,0))
|
||||||
{
|
{
|
||||||
HDC hdc= (lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC) ? lpcf->hDC : GetDC(hDlg);
|
HDC hdc= (lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC) ? lpcf->hDC : GetDC32(hDlg);
|
||||||
i=SetFontStylesToCombo2(hcmb2,hdc,lplf,lptm);
|
i=SetFontStylesToCombo2(hcmb2,hdc,lplf,lptm);
|
||||||
if (!(lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC))
|
if (!(lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC))
|
||||||
ReleaseDC(hDlg,hdc);
|
ReleaseDC32(hDlg,hdc);
|
||||||
if (i)
|
if (i)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2418,7 +2418,7 @@ INT16 FontStyleEnumProc( SEGPTR logfont, SEGPTR metrics,
|
||||||
*/
|
*/
|
||||||
LRESULT CFn_WMInitDialog(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
LRESULT CFn_WMInitDialog(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
int i,j,res,init=0;
|
int i,j,res,init=0;
|
||||||
long l;
|
long l;
|
||||||
LPLOGFONT16 lpxx;
|
LPLOGFONT16 lpxx;
|
||||||
|
@ -2466,7 +2466,7 @@ LRESULT CFn_WMInitDialog(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
||||||
ShowWindow(GetDlgItem(hDlg,grp1),SW_HIDE);
|
ShowWindow(GetDlgItem(hDlg,grp1),SW_HIDE);
|
||||||
ShowWindow(GetDlgItem(hDlg,stc4),SW_HIDE);
|
ShowWindow(GetDlgItem(hDlg,stc4),SW_HIDE);
|
||||||
}
|
}
|
||||||
hdc= (lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC) ? lpcf->hDC : GetDC(hDlg);
|
hdc= (lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC) ? lpcf->hDC : GetDC32(hDlg);
|
||||||
if (hdc)
|
if (hdc)
|
||||||
{
|
{
|
||||||
if (!EnumFontFamilies (hdc, NULL,FontFamilyEnumProc,(LPARAM)GetDlgItem(hDlg,cmb1)))
|
if (!EnumFontFamilies (hdc, NULL,FontFamilyEnumProc,(LPARAM)GetDlgItem(hDlg,cmb1)))
|
||||||
|
@ -2520,7 +2520,7 @@ LRESULT CFn_WMInitDialog(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC))
|
if (!(lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC))
|
||||||
ReleaseDC(hDlg,hdc);
|
ReleaseDC32(hDlg,hdc);
|
||||||
res=TRUE;
|
res=TRUE;
|
||||||
if (CFn_HookCallChk(lpcf))
|
if (CFn_HookCallChk(lpcf))
|
||||||
res=CallWindowProc16(lpcf->lpfnHook,hDlg,WM_INITDIALOG,wParam,lParam);
|
res=CallWindowProc16(lpcf->lpfnHook,hDlg,WM_INITDIALOG,wParam,lParam);
|
||||||
|
@ -2670,7 +2670,7 @@ LRESULT CFn_WMCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
case cmb1:if (HIWORD(lParam)==CBN_SELCHANGE)
|
case cmb1:if (HIWORD(lParam)==CBN_SELCHANGE)
|
||||||
{
|
{
|
||||||
hdc=(lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC) ? lpcf->hDC : GetDC(hDlg);
|
hdc=(lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC) ? lpcf->hDC : GetDC32(hDlg);
|
||||||
if (hdc)
|
if (hdc)
|
||||||
{
|
{
|
||||||
SendDlgItemMessage16(hDlg,cmb2,CB_RESETCONTENT,0,0);
|
SendDlgItemMessage16(hDlg,cmb2,CB_RESETCONTENT,0,0);
|
||||||
|
@ -2689,7 +2689,7 @@ LRESULT CFn_WMCommand(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
||||||
SEGPTR_FREE(str);
|
SEGPTR_FREE(str);
|
||||||
}
|
}
|
||||||
if (!(lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC))
|
if (!(lpcf->Flags & CF_PRINTERFONTS && lpcf->hDC))
|
||||||
ReleaseDC(hDlg,hdc);
|
ReleaseDC32(hDlg,hdc);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -697,6 +697,7 @@ FormatMessage32A(
|
||||||
char *fmtstr,*sprintfbuf,*x;
|
char *fmtstr,*sprintfbuf,*x;
|
||||||
DWORD *argliststart;
|
DWORD *argliststart;
|
||||||
|
|
||||||
|
fmtstr = NULL;
|
||||||
f++;
|
f++;
|
||||||
if (!*f) {
|
if (!*f) {
|
||||||
ADD_TO_T('%');
|
ADD_TO_T('%');
|
||||||
|
@ -722,7 +723,7 @@ FormatMessage32A(
|
||||||
f++;
|
f++;
|
||||||
if (NULL!=(x=strchr(f,'!'))) {
|
if (NULL!=(x=strchr(f,'!'))) {
|
||||||
*x='\0';
|
*x='\0';
|
||||||
fmtstr=xmalloc(strlen(f)+2);
|
fmtstr=(char*)xmalloc(strlen(f)+2);
|
||||||
sprintf(fmtstr,"%%%s",f);
|
sprintf(fmtstr,"%%%s",f);
|
||||||
f=x+1;
|
f=x+1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ _lzget(struct lzstate *lzs,BYTE *b) {
|
||||||
*b = lzs->get[lzs->getcur++];
|
*b = lzs->get[lzs->getcur++];
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
int ret = FILE_Read(lzs->realfd,lzs->get,GETLEN);
|
int ret = _lread32(lzs->realfd,lzs->get,GETLEN);
|
||||||
if (ret==HFILE_ERROR)
|
if (ret==HFILE_ERROR)
|
||||||
return HFILE_ERROR;
|
return HFILE_ERROR;
|
||||||
if (ret==0)
|
if (ret==0)
|
||||||
|
@ -102,7 +102,7 @@ read_header(HFILE fd,struct lzfileheader *head) {
|
||||||
/* We can't directly read the lzfileheader struct due to
|
/* We can't directly read the lzfileheader struct due to
|
||||||
* structure element alignment
|
* structure element alignment
|
||||||
*/
|
*/
|
||||||
if (FILE_Read(fd,buf,14)<14)
|
if (_lread32(fd,buf,14)<14)
|
||||||
return 0;
|
return 0;
|
||||||
memcpy(head->magic,buf,8);
|
memcpy(head->magic,buf,8);
|
||||||
memcpy(&(head->compressiontype),buf+8,1);
|
memcpy(&(head->compressiontype),buf+8,1);
|
||||||
|
@ -306,7 +306,7 @@ LZRead32(HFILE fd,LPVOID vbuf,UINT32 toread) {
|
||||||
if (lzstates[i].lzfd==fd)
|
if (lzstates[i].lzfd==fd)
|
||||||
break;
|
break;
|
||||||
if (i==nroflzstates)
|
if (i==nroflzstates)
|
||||||
return FILE_Read(fd,buf,toread);
|
return _lread32(fd,buf,toread);
|
||||||
lzs=lzstates+i;
|
lzs=lzstates+i;
|
||||||
|
|
||||||
/* The decompressor itself is in a define, cause we need it twice
|
/* The decompressor itself is in a define, cause we need it twice
|
||||||
|
@ -447,7 +447,7 @@ LZCopy(HFILE src,HFILE dest) {
|
||||||
|
|
||||||
/* not compressed? just copy */
|
/* not compressed? just copy */
|
||||||
if (i==nroflzstates)
|
if (i==nroflzstates)
|
||||||
xread=FILE_Read;
|
xread=(INT32(*)(HFILE,LPVOID,UINT32))_lread32;
|
||||||
else
|
else
|
||||||
xread=LZRead32;
|
xread=LZRead32;
|
||||||
len=0;
|
len=0;
|
||||||
|
|
39
misc/main.c
39
misc/main.c
|
@ -9,13 +9,14 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <locale.h>
|
/* #include <locale.h> */
|
||||||
#ifdef MALLOC_DEBUGGING
|
#ifdef MALLOC_DEBUGGING
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#endif
|
#endif
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/Xresource.h>
|
#include <X11/Xresource.h>
|
||||||
#include <X11/Xutil.h>
|
#include <X11/Xutil.h>
|
||||||
|
#include <X11/Xlocale.h>
|
||||||
#include <X11/cursorfont.h>
|
#include <X11/cursorfont.h>
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
|
@ -75,6 +76,8 @@ WORD WINE_LanguageId = 0;
|
||||||
|
|
||||||
#define WINE_CLASS "Wine" /* Class name for resources */
|
#define WINE_CLASS "Wine" /* Class name for resources */
|
||||||
|
|
||||||
|
#define WINE_APP_DEFAULTS "/usr/lib/X11/app-defaults/Wine"
|
||||||
|
|
||||||
typedef struct tagENVENTRY {
|
typedef struct tagENVENTRY {
|
||||||
LPSTR Name;
|
LPSTR Name;
|
||||||
LPSTR Value;
|
LPSTR Value;
|
||||||
|
@ -371,14 +374,21 @@ static void MAIN_ParseVersion( char *arg )
|
||||||
*/
|
*/
|
||||||
static void MAIN_ParseOptions( int *argc, char *argv[] )
|
static void MAIN_ParseOptions( int *argc, char *argv[] )
|
||||||
{
|
{
|
||||||
char *display_name;
|
char *display_name = NULL;
|
||||||
XrmValue value;
|
XrmValue value;
|
||||||
XrmDatabase db = XrmGetFileDatabase("/usr/lib/X11/app-defaults/Wine");
|
XrmDatabase db = XrmGetFileDatabase(WINE_APP_DEFAULTS);
|
||||||
|
int i;
|
||||||
|
char *xrm_string;
|
||||||
|
|
||||||
/* Parse command line */
|
|
||||||
Options.programName = MAIN_GetProgramName( *argc, argv );
|
Options.programName = MAIN_GetProgramName( *argc, argv );
|
||||||
XrmParseCommand( &db, optionsTable, NB_OPTIONS,
|
|
||||||
Options.programName, argc, argv );
|
/* Get display name from command line */
|
||||||
|
for (i = 1; i < *argc - 1; i++)
|
||||||
|
if (!strcmp( argv[i], "-display" ))
|
||||||
|
{
|
||||||
|
display_name = argv[i+1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef WINELIB
|
#ifdef WINELIB
|
||||||
/* Need to assemble command line and pass it to WinMain */
|
/* Need to assemble command line and pass it to WinMain */
|
||||||
|
@ -389,8 +399,8 @@ static void MAIN_ParseOptions( int *argc, char *argv[] )
|
||||||
|
|
||||||
/* Open display */
|
/* Open display */
|
||||||
|
|
||||||
if (MAIN_GetResource( db, ".display", &value )) display_name = value.addr;
|
if (display_name == NULL &&
|
||||||
else display_name = NULL;
|
MAIN_GetResource( db, ".display", &value )) display_name = value.addr;
|
||||||
|
|
||||||
if (!(display = XOpenDisplay( display_name )))
|
if (!(display = XOpenDisplay( display_name )))
|
||||||
{
|
{
|
||||||
|
@ -399,6 +409,17 @@ static void MAIN_ParseOptions( int *argc, char *argv[] )
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Merge file and screen databases */
|
||||||
|
if ((xrm_string = XResourceManagerString( display )) != NULL)
|
||||||
|
{
|
||||||
|
XrmDatabase display_db = XrmGetStringDatabase( xrm_string );
|
||||||
|
XrmMergeDatabases( display_db, &db );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse command line */
|
||||||
|
XrmParseCommand( &db, optionsTable, NB_OPTIONS,
|
||||||
|
Options.programName, argc, argv );
|
||||||
|
|
||||||
/* Get all options */
|
/* Get all options */
|
||||||
if (MAIN_GetResource( db, ".iconic", &value ))
|
if (MAIN_GetResource( db, ".iconic", &value ))
|
||||||
Options.cmdShow = SW_SHOWMINIMIZED;
|
Options.cmdShow = SW_SHOWMINIMIZED;
|
||||||
|
@ -1130,7 +1151,7 @@ BOOL SystemParametersInfo (UINT uAction, UINT uParam, LPVOID lpvParam, UINT fuWi
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SPI_SETDESKWALLPAPER:
|
case SPI_SETDESKWALLPAPER:
|
||||||
return (SetDeskWallPaper((LPSTR) lpvParam));
|
return (SetDeskWallPaper32((LPSTR) lpvParam));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SPI_SETDESKPATTERN:
|
case SPI_SETDESKPATTERN:
|
||||||
|
|
|
@ -1229,3 +1229,8 @@ BOOL SetLocaleInfoA(DWORD lcid, DWORD lctype, LPCSTR data) {
|
||||||
fprintf(stdnimp,"SetLocaleInfoA(%ld,%ld,%s)\n",lcid,lctype,data);
|
fprintf(stdnimp,"SetLocaleInfoA(%ld,%ld,%s)\n",lcid,lctype,data);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL IsValidLocale(DWORD lcid,DWORD flags) {
|
||||||
|
fprintf(stdnimp,"IsValidLocale(%ld,%ld)\n",lcid,flags);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
|
@ -1106,19 +1106,19 @@ _w95_loadreg(char* fn,LPKEYSTRUCT lpkey) {
|
||||||
if (hfd==HFILE_ERROR)
|
if (hfd==HFILE_ERROR)
|
||||||
return;
|
return;
|
||||||
magic[4]=0;
|
magic[4]=0;
|
||||||
if (4!=FILE_Read(hfd,magic,4))
|
if (4!=_lread32(hfd,magic,4))
|
||||||
return;
|
return;
|
||||||
if (strcmp(magic,"CREG")) {
|
if (strcmp(magic,"CREG")) {
|
||||||
fprintf(stddeb,"%s is not a w95 registry.\n",fn);
|
fprintf(stddeb,"%s is not a w95 registry.\n",fn);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (4!=FILE_Read(hfd,&version,4))
|
if (4!=_lread32(hfd,&version,4))
|
||||||
return;
|
return;
|
||||||
if (4!=FILE_Read(hfd,&rgdbsection,4))
|
if (4!=_lread32(hfd,&rgdbsection,4))
|
||||||
return;
|
return;
|
||||||
if (-1==_llseek(hfd,0x20,SEEK_SET))
|
if (-1==_llseek(hfd,0x20,SEEK_SET))
|
||||||
return;
|
return;
|
||||||
if (4!=FILE_Read(hfd,magic,4))
|
if (4!=_lread32(hfd,magic,4))
|
||||||
return;
|
return;
|
||||||
if (strcmp(magic,"RGKN")) {
|
if (strcmp(magic,"RGKN")) {
|
||||||
dprintf_reg(stddeb,"second IFF header not RGKN, but %s\n",magic);
|
dprintf_reg(stddeb,"second IFF header not RGKN, but %s\n",magic);
|
||||||
|
@ -1133,7 +1133,7 @@ _w95_loadreg(char* fn,LPKEYSTRUCT lpkey) {
|
||||||
|
|
||||||
nrofdkes = (end-where)/sizeof(struct dke)+100;
|
nrofdkes = (end-where)/sizeof(struct dke)+100;
|
||||||
data = (char*)xmalloc(end-where);
|
data = (char*)xmalloc(end-where);
|
||||||
if ((end-where)!=FILE_Read(hfd,data,end-where))
|
if ((end-where)!=_lread32(hfd,data,end-where))
|
||||||
return;
|
return;
|
||||||
curdata = data;
|
curdata = data;
|
||||||
|
|
||||||
|
@ -1215,7 +1215,7 @@ _w95_loadreg(char* fn,LPKEYSTRUCT lpkey) {
|
||||||
if (-1==_llseek(hfd,rgdbsection,SEEK_SET))
|
if (-1==_llseek(hfd,rgdbsection,SEEK_SET))
|
||||||
return;
|
return;
|
||||||
data = (char*)xmalloc(end-rgdbsection);
|
data = (char*)xmalloc(end-rgdbsection);
|
||||||
if ((end-rgdbsection)!=FILE_Read(hfd,data,end-rgdbsection))
|
if ((end-rgdbsection)!=_lread32(hfd,data,end-rgdbsection))
|
||||||
return;
|
return;
|
||||||
_lclose(hfd);
|
_lclose(hfd);
|
||||||
curdata = data;
|
curdata = data;
|
||||||
|
@ -1554,13 +1554,14 @@ DWORD RegCreateKeyEx32W(
|
||||||
if (!lpszSubKey || !*lpszSubKey) {
|
if (!lpszSubKey || !*lpszSubKey) {
|
||||||
add_handle(++currenthandle,lpNextKey,samDesired);
|
add_handle(++currenthandle,lpNextKey,samDesired);
|
||||||
*retkey=currenthandle;
|
*retkey=currenthandle;
|
||||||
|
lpNextKey->flags|=REG_OPTION_TAINTED;
|
||||||
return SHELL_ERROR_SUCCESS;
|
return SHELL_ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
split_keypath(lpszSubKey,&wps,&wpc);
|
split_keypath(lpszSubKey,&wps,&wpc);
|
||||||
i = 0;
|
i = 0;
|
||||||
while ((i<wpc) && (wps[i][0]=='\0')) i++;
|
while ((i<wpc) && (wps[i][0]=='\0')) i++;
|
||||||
lpxkey = lpNextKey;
|
lpxkey = lpNextKey;
|
||||||
while (i<wpc) {
|
while (wps[i]) {
|
||||||
lpxkey=lpNextKey->nextsub;
|
lpxkey=lpNextKey->nextsub;
|
||||||
while (lpxkey) {
|
while (lpxkey) {
|
||||||
if (!lstrcmp32W(wps[i],lpxkey->keyname))
|
if (!lstrcmp32W(wps[i],lpxkey->keyname))
|
||||||
|
@ -1574,13 +1575,15 @@ DWORD RegCreateKeyEx32W(
|
||||||
}
|
}
|
||||||
if (lpxkey) {
|
if (lpxkey) {
|
||||||
add_handle(++currenthandle,lpxkey,samDesired);
|
add_handle(++currenthandle,lpxkey,samDesired);
|
||||||
|
lpxkey->flags |= REG_OPTION_TAINTED;
|
||||||
*retkey = currenthandle;
|
*retkey = currenthandle;
|
||||||
|
if (lpDispos)
|
||||||
*lpDispos = REG_OPENED_EXISTING_KEY;
|
*lpDispos = REG_OPENED_EXISTING_KEY;
|
||||||
FREE_KEY_PATH;
|
FREE_KEY_PATH;
|
||||||
return SHELL_ERROR_SUCCESS;
|
return SHELL_ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
/* good. now the hard part */
|
/* good. now the hard part */
|
||||||
while (i<wpc) {
|
while (wps[i]) {
|
||||||
lplpPrevKey = &(lpNextKey->nextsub);
|
lplpPrevKey = &(lpNextKey->nextsub);
|
||||||
lpxkey = *lplpPrevKey;
|
lpxkey = *lplpPrevKey;
|
||||||
while (lpxkey) {
|
while (lpxkey) {
|
||||||
|
@ -1598,6 +1601,7 @@ DWORD RegCreateKeyEx32W(
|
||||||
(*lplpPrevKey)->nextsub = NULL;
|
(*lplpPrevKey)->nextsub = NULL;
|
||||||
(*lplpPrevKey)->values = NULL;
|
(*lplpPrevKey)->values = NULL;
|
||||||
(*lplpPrevKey)->nrofvalues = 0;
|
(*lplpPrevKey)->nrofvalues = 0;
|
||||||
|
(*lplpPrevKey)->flags = REG_OPTION_TAINTED;
|
||||||
if (lpszClass)
|
if (lpszClass)
|
||||||
(*lplpPrevKey)->class = strdupW(lpszClass);
|
(*lplpPrevKey)->class = strdupW(lpszClass);
|
||||||
else
|
else
|
||||||
|
@ -1608,13 +1612,13 @@ DWORD RegCreateKeyEx32W(
|
||||||
add_handle(++currenthandle,lpNextKey,samDesired);
|
add_handle(++currenthandle,lpNextKey,samDesired);
|
||||||
|
|
||||||
/*FIXME: flag handling correct? */
|
/*FIXME: flag handling correct? */
|
||||||
lpNextKey->flags= fdwOptions;
|
lpNextKey->flags= fdwOptions |REG_OPTION_TAINTED;
|
||||||
if (lpszClass)
|
if (lpszClass)
|
||||||
lpNextKey->class = strdupW(lpszClass);
|
lpNextKey->class = strdupW(lpszClass);
|
||||||
else
|
else
|
||||||
lpNextKey->class = NULL;
|
lpNextKey->class = NULL;
|
||||||
lpNextKey->flags|=REG_OPTION_TAINTED;
|
|
||||||
*retkey = currenthandle;
|
*retkey = currenthandle;
|
||||||
|
if (lpDispos)
|
||||||
*lpDispos = REG_CREATED_NEW_KEY;
|
*lpDispos = REG_CREATED_NEW_KEY;
|
||||||
FREE_KEY_PATH;
|
FREE_KEY_PATH;
|
||||||
return SHELL_ERROR_SUCCESS;
|
return SHELL_ERROR_SUCCESS;
|
||||||
|
|
27
misc/shell.c
27
misc/shell.c
|
@ -414,11 +414,11 @@ static BYTE* SHELL_GetResourceTable(HFILE hFile)
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
_llseek( hFile, 0, SEEK_SET );
|
_llseek( hFile, 0, SEEK_SET );
|
||||||
if ((FILE_Read(hFile,&mz_header,sizeof(mz_header)) != sizeof(mz_header)) ||
|
if ((_lread32(hFile,&mz_header,sizeof(mz_header)) != sizeof(mz_header)) ||
|
||||||
(mz_header.mz_magic != MZ_SIGNATURE)) return (BYTE*)-1;
|
(mz_header.mz_magic != MZ_SIGNATURE)) return (BYTE*)-1;
|
||||||
|
|
||||||
_llseek( hFile, mz_header.ne_offset, SEEK_SET );
|
_llseek( hFile, mz_header.ne_offset, SEEK_SET );
|
||||||
if (FILE_Read( hFile, &ne_header, sizeof(ne_header) ) != sizeof(ne_header))
|
if (_lread32( hFile, &ne_header, sizeof(ne_header) ) != sizeof(ne_header))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (ne_header.ne_magic == PE_SIGNATURE)
|
if (ne_header.ne_magic == PE_SIGNATURE)
|
||||||
|
@ -436,7 +436,7 @@ static BYTE* SHELL_GetResourceTable(HFILE hFile)
|
||||||
if( !pTypeInfo ) return NULL;
|
if( !pTypeInfo ) return NULL;
|
||||||
|
|
||||||
_llseek(hFile, mz_header.ne_offset+ne_header.resource_tab_offset, SEEK_SET);
|
_llseek(hFile, mz_header.ne_offset+ne_header.resource_tab_offset, SEEK_SET);
|
||||||
if( FILE_Read( hFile, (char*)pTypeInfo, size) != size )
|
if( _lread32( hFile, (char*)pTypeInfo, size) != size )
|
||||||
{ free(pTypeInfo); return NULL; }
|
{ free(pTypeInfo); return NULL; }
|
||||||
return pTypeInfo;
|
return pTypeInfo;
|
||||||
}
|
}
|
||||||
|
@ -456,7 +456,7 @@ static HANDLE SHELL_LoadResource(HINSTANCE hInst, HFILE hFile, NE_NAMEINFO* pNIn
|
||||||
if( (ptr = (BYTE*)GlobalLock16( handle )) )
|
if( (ptr = (BYTE*)GlobalLock16( handle )) )
|
||||||
{
|
{
|
||||||
_llseek( hFile, (DWORD)pNInfo->offset << sizeShift, SEEK_SET);
|
_llseek( hFile, (DWORD)pNInfo->offset << sizeShift, SEEK_SET);
|
||||||
FILE_Read( hFile, (char*)ptr, pNInfo->length << sizeShift);
|
_lread32( hFile, (char*)ptr, pNInfo->length << sizeShift);
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
return (HANDLE)0;
|
return (HANDLE)0;
|
||||||
|
@ -473,7 +473,7 @@ static HANDLE ICO_LoadIcon(HINSTANCE hInst, HFILE hFile, LPicoICONDIRENTRY lpi
|
||||||
if( (ptr = (BYTE*)GlobalLock16( handle )) )
|
if( (ptr = (BYTE*)GlobalLock16( handle )) )
|
||||||
{
|
{
|
||||||
_llseek( hFile, lpiIDE->dwImageOffset, SEEK_SET);
|
_llseek( hFile, lpiIDE->dwImageOffset, SEEK_SET);
|
||||||
FILE_Read( hFile, (char*)ptr, lpiIDE->dwBytesInRes);
|
_lread32( hFile, (char*)ptr, lpiIDE->dwBytesInRes);
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
return (HANDLE)0;
|
return (HANDLE)0;
|
||||||
|
@ -491,7 +491,7 @@ static HANDLE ICO_GetIconDirectory(HINSTANCE hInst, HFILE hFile, LPicoICONDIR* l
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
_llseek( hFile, 0, SEEK_SET );
|
_llseek( hFile, 0, SEEK_SET );
|
||||||
if( FILE_Read(hFile,(char*)id,sizeof(id)) != sizeof(id) ) return 0;
|
if( _lread32(hFile,(char*)id,sizeof(id)) != sizeof(id) ) return 0;
|
||||||
|
|
||||||
/* check .ICO header
|
/* check .ICO header
|
||||||
*
|
*
|
||||||
|
@ -504,7 +504,7 @@ static HANDLE ICO_GetIconDirectory(HINSTANCE hInst, HFILE hFile, LPicoICONDIR* l
|
||||||
|
|
||||||
lpiID = (LPicoICONDIR)xmalloc(i);
|
lpiID = (LPicoICONDIR)xmalloc(i);
|
||||||
|
|
||||||
if( FILE_Read(hFile,(char*)lpiID->idEntries,i) == i )
|
if( _lread32(hFile,(char*)lpiID->idEntries,i) == i )
|
||||||
{
|
{
|
||||||
HANDLE handle = DirectResAlloc( hInst, 0x10,
|
HANDLE handle = DirectResAlloc( hInst, 0x10,
|
||||||
id[2]*sizeof(ICONDIRENTRY) + sizeof(id) );
|
id[2]*sizeof(ICONDIRENTRY) + sizeof(id) );
|
||||||
|
@ -820,3 +820,16 @@ int ShellHookProc(void)
|
||||||
dprintf_reg(stdnimp, "ShellHookProc : Empty Stub !!!\n");
|
dprintf_reg(stdnimp, "ShellHookProc : Empty Stub !!!\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* SHGetFileInfoA [SHELL32.54]
|
||||||
|
*/
|
||||||
|
DWORD
|
||||||
|
SHGetFileInfo32A(LPCSTR path,DWORD dwFileAttributes,SHFILEINFO32A *psfi,
|
||||||
|
UINT32 sizeofpsfi,UINT32 flags
|
||||||
|
) {
|
||||||
|
fprintf(stdnimp,"SHGetFileInfo32A(%s,0x%08lx,%p,%ld,0x%08lx)\n",
|
||||||
|
path,dwFileAttributes,psfi,sizeofpsfi,flags
|
||||||
|
);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
13
misc/spy.c
13
misc/spy.c
|
@ -148,8 +148,17 @@ static const char * const MessageTypeNames[SPY_MAX_MSGNUM + 1] =
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
/* 0x00E0 - Win32 Scrollbars */
|
/* 0x00E0 - Win32 Scrollbars */
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
"SBM_SETPOS32", /* 0x00e0 */
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
"SBM_GETPOS32", /* 0x00e1 */
|
||||||
|
"SBM_SETRANGE32", /* 0x00e2 */
|
||||||
|
"SBM_GETRANGE32", /* 0x00e3 */
|
||||||
|
"SBM_ENABLE_ARROWS32", /* 0x00e4 */
|
||||||
|
NULL,
|
||||||
|
"SBM_SETRANGEREDRAW32", /* 0x00e6 */
|
||||||
|
NULL, NULL,
|
||||||
|
"SBM_SETSCROLLINFO32", /* 0x00e9 */
|
||||||
|
"SBM_GETSCROLLINFO32", /* 0x00ea */
|
||||||
|
NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
/* 0x00F0 - Win32 Buttons */
|
/* 0x00F0 - Win32 Buttons */
|
||||||
"BM_GETCHECK32", /* 0x00f0 */
|
"BM_GETCHECK32", /* 0x00f0 */
|
||||||
|
|
|
@ -16,11 +16,13 @@
|
||||||
#include "hook.h"
|
#include "hook.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "toolhelp.h"
|
#include "toolhelp.h"
|
||||||
|
#include "message.h"
|
||||||
|
|
||||||
WORD USER_HeapSel = 0;
|
WORD USER_HeapSel = 0;
|
||||||
|
|
||||||
|
|
||||||
extern HTASK TASK_GetNextTask(HTASK);
|
extern HTASK TASK_GetNextTask(HTASK);
|
||||||
|
extern BOOL32 MENU_SwitchTPWndTo(HTASK);
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetFreeSystemResources (USER.284)
|
* GetFreeSystemResources (USER.284)
|
||||||
|
@ -117,10 +119,13 @@ void USER_AppExit( HTASK16 hTask, HINSTANCE16 hInstance, HQUEUE16 hQueue )
|
||||||
|
|
||||||
WND* desktop = WIN_GetDesktop();
|
WND* desktop = WIN_GetDesktop();
|
||||||
|
|
||||||
/* Patch desktop window queue */
|
/* Patch desktop window */
|
||||||
if( desktop->hmemTaskQ == hQueue )
|
if( desktop->hmemTaskQ == hQueue )
|
||||||
desktop->hmemTaskQ = GetTaskQueue(TASK_GetNextTask(hTask));
|
desktop->hmemTaskQ = GetTaskQueue(TASK_GetNextTask(hTask));
|
||||||
|
|
||||||
|
/* Patch resident popup menu window */
|
||||||
|
MENU_SwitchTPWndTo(0);
|
||||||
|
|
||||||
/* Nuke timers */
|
/* Nuke timers */
|
||||||
|
|
||||||
TIMER_RemoveQueueTimers( hQueue );
|
TIMER_RemoveQueueTimers( hQueue );
|
||||||
|
|
|
@ -1687,7 +1687,7 @@ INT WSACleanup(void)
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
WsControl(DWORD x1,DWORD x2,LPDWORD x3,LPDWORD x4,LPDWORD x5,LPDWORD x6) {
|
WsControl(DWORD x1,DWORD x2,LPDWORD x3,LPDWORD x4,LPDWORD x5,LPDWORD x6) {
|
||||||
fprintf(stdnimp,"WsControl(%lx,%lx,%lx,%lx,%lx,%lx)\n",
|
fprintf(stdnimp,"WsControl(%lx,%lx,%p,%p,%p,%p)\n",
|
||||||
x1,x2,x3,x4,x5,x6
|
x1,x2,x3,x4,x5,x6
|
||||||
);
|
);
|
||||||
fprintf(stdnimp,"WsControl(x,x,%lx,%lx,%lx,%lx)\n",
|
fprintf(stdnimp,"WsControl(x,x,%lx,%lx,%lx,%lx)\n",
|
||||||
|
|
|
@ -181,7 +181,20 @@ void INT_Int31Handler( SIGCONTEXT *context )
|
||||||
AX_reg(context) = 0x8011; /* descriptor unavailable */
|
AX_reg(context) = 0x8011; /* descriptor unavailable */
|
||||||
SET_CFLAG(context);
|
SET_CFLAG(context);
|
||||||
break;
|
break;
|
||||||
|
case 0x0200: /* get real mode interrupt vector */
|
||||||
|
fprintf(stdnimp,
|
||||||
|
"int31: get realmode interupt vector(0x%02x) unimplemented.\n",
|
||||||
|
BL_reg(context)
|
||||||
|
);
|
||||||
|
SET_CFLAG(context);
|
||||||
|
break;
|
||||||
|
case 0x0201: /* set real mode interrupt vector */
|
||||||
|
fprintf(stdnimp,
|
||||||
|
"int31: set realmode interupt vector(0x%02x,0x%04x:0x%04x) unimplemented\n",
|
||||||
|
BL_reg(context),CX_reg(context),DX_reg(context)
|
||||||
|
);
|
||||||
|
SET_CFLAG(context);
|
||||||
|
break;
|
||||||
case 0x0204: /* Get protected mode interrupt vector */
|
case 0x0204: /* Get protected mode interrupt vector */
|
||||||
dw = (DWORD)INT_GetHandler( BL_reg(context) );
|
dw = (DWORD)INT_GetHandler( BL_reg(context) );
|
||||||
CX_reg(context) = HIWORD(dw);
|
CX_reg(context) = HIWORD(dw);
|
||||||
|
|
|
@ -553,7 +553,7 @@ BOOL mciDriverNotify(HWND hWndCallBack, UINT wDevID, UINT wStatus)
|
||||||
|
|
||||||
#define _MCI_STRDUP_TO_SEG(dest,source) {\
|
#define _MCI_STRDUP_TO_SEG(dest,source) {\
|
||||||
HANDLE x;\
|
HANDLE x;\
|
||||||
x=USER_HEAP_ALLOC(strlen(source));\
|
x=USER_HEAP_ALLOC(strlen(source)+1);\
|
||||||
dest=(LPSTR)MAKELONG(x,USER_HeapSel);\
|
dest=(LPSTR)MAKELONG(x,USER_HeapSel);\
|
||||||
strcpy(PTR_SEG_TO_LIN(dest),source);\
|
strcpy(PTR_SEG_TO_LIN(dest),source);\
|
||||||
}
|
}
|
||||||
|
@ -575,8 +575,44 @@ DWORD mciOpen(DWORD dwParam, LPMCI_OPEN_PARMS lp16Parms)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dprintf_mmsys(stddeb, "mciOpen // wDevID=%d \n", wDevID);
|
dprintf_mmsys(stddeb, "mciOpen // wDevID=%d \n", wDevID);
|
||||||
|
|
||||||
memcpy(&mciOpenDrv[wDevID],lpParms,sizeof(*lpParms));
|
memcpy(&mciOpenDrv[wDevID],lpParms,sizeof(*lpParms));
|
||||||
|
|
||||||
|
if (dwParam & MCI_OPEN_ELEMENT) {
|
||||||
|
char *s,*t;
|
||||||
|
|
||||||
|
dprintf_mmsys(stddeb,"mciOpen // lpstrElementName='%s'\n",
|
||||||
|
(char*)PTR_SEG_TO_LIN(lpParms->lpstrElementName)
|
||||||
|
);
|
||||||
|
s=(char*)PTR_SEG_TO_LIN(lpParms->lpstrElementName);
|
||||||
|
t=strrchr(s,'.');
|
||||||
|
if (t) {
|
||||||
|
GetProfileString("mci extensions",t+1,"*",str,sizeof(str));
|
||||||
|
AnsiUpper(str);
|
||||||
|
if (strcmp(str, "CDAUDIO") == 0) {
|
||||||
|
uDevTyp = MCI_DEVTYPE_CD_AUDIO;
|
||||||
|
} else
|
||||||
|
if (strcmp(str, "WAVEAUDIO") == 0) {
|
||||||
|
uDevTyp = MCI_DEVTYPE_WAVEFORM_AUDIO;
|
||||||
|
} else
|
||||||
|
if (strcmp(str, "SEQUENCER") == 0) {
|
||||||
|
uDevTyp = MCI_DEVTYPE_SEQUENCER;
|
||||||
|
} else
|
||||||
|
if (strcmp(str, "ANIMATION1") == 0) {
|
||||||
|
uDevTyp = MCI_DEVTYPE_ANIMATION;
|
||||||
|
} else
|
||||||
|
if (strcmp(str, "AVIVIDEO") == 0) {
|
||||||
|
uDevTyp = MCI_DEVTYPE_DIGITAL_VIDEO;
|
||||||
|
} else
|
||||||
|
if (strcmp(str,"*") == 0) {
|
||||||
|
dprintf_mmsys(stddeb,"No [mci extensions] entry for %s found.\n",t);
|
||||||
|
return MCIERR_EXTENSION_NOT_FOUND;
|
||||||
|
} else {
|
||||||
|
dprintf_mmsys(stddeb,"[mci extensions] entry %s for %s not supported.\n",str,t);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
return MCIERR_EXTENSION_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
if (dwParam & MCI_OPEN_ALIAS) {
|
if (dwParam & MCI_OPEN_ALIAS) {
|
||||||
dprintf_mmsys(stddeb, "MCI_OPEN // Alias='%s' !\n",
|
dprintf_mmsys(stddeb, "MCI_OPEN // Alias='%s' !\n",
|
||||||
(char*)PTR_SEG_TO_LIN(lpParms->lpstrAlias));
|
(char*)PTR_SEG_TO_LIN(lpParms->lpstrAlias));
|
||||||
|
@ -1911,7 +1947,7 @@ LONG mmioRead(HMMIO16 hmmio, HPSTR pch, LONG cch)
|
||||||
dprintf_mmio(stddeb, "mmioRead(%04X, %p, %ld);\n", hmmio, pch, cch);
|
dprintf_mmio(stddeb, "mmioRead(%04X, %p, %ld);\n", hmmio, pch, cch);
|
||||||
lpmminfo = (LPMMIOINFO)GlobalLock16(hmmio);
|
lpmminfo = (LPMMIOINFO)GlobalLock16(hmmio);
|
||||||
if (lpmminfo == NULL) return 0;
|
if (lpmminfo == NULL) return 0;
|
||||||
count = FILE_Read(LOWORD(lpmminfo->dwReserved2), pch, cch);
|
count = _lread32(LOWORD(lpmminfo->dwReserved2), pch, cch);
|
||||||
GlobalUnlock16(hmmio);
|
GlobalUnlock16(hmmio);
|
||||||
dprintf_mmio(stddeb, "mmioRead // count=%ld\n", count);
|
dprintf_mmio(stddeb, "mmioRead // count=%ld\n", count);
|
||||||
return count;
|
return count;
|
||||||
|
@ -2013,7 +2049,7 @@ UINT mmioAdvance(HMMIO16 hmmio, MMIOINFO * lpmmioinfo, UINT uFlags)
|
||||||
lpmminfo = (LPMMIOINFO)GlobalLock16(hmmio);
|
lpmminfo = (LPMMIOINFO)GlobalLock16(hmmio);
|
||||||
if (lpmminfo == NULL) return 0;
|
if (lpmminfo == NULL) return 0;
|
||||||
if (uFlags == MMIO_READ) {
|
if (uFlags == MMIO_READ) {
|
||||||
count = FILE_Read(LOWORD(lpmminfo->dwReserved2),
|
count = _lread32(LOWORD(lpmminfo->dwReserved2),
|
||||||
lpmmioinfo->pchBuffer, lpmmioinfo->cchBuffer);
|
lpmmioinfo->pchBuffer, lpmmioinfo->cchBuffer);
|
||||||
}
|
}
|
||||||
if (uFlags == MMIO_WRITE) {
|
if (uFlags == MMIO_WRITE) {
|
||||||
|
@ -2081,7 +2117,7 @@ UINT mmioDescend(HMMIO16 hmmio, MMCKINFO * lpck,
|
||||||
(uFlags & MMIO_FINDLIST)) {
|
(uFlags & MMIO_FINDLIST)) {
|
||||||
dprintf_mmio(stddeb, "mmioDescend // MMIO_FINDxxxx dwfcc=%08lX !\n", dwfcc);
|
dprintf_mmio(stddeb, "mmioDescend // MMIO_FINDxxxx dwfcc=%08lX !\n", dwfcc);
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
if (FILE_Read(LOWORD(lpmminfo->dwReserved2), (LPSTR)lpck,
|
if (_lread32(LOWORD(lpmminfo->dwReserved2), (LPSTR)lpck,
|
||||||
sizeof(MMCKINFO)) < sizeof(MMCKINFO)) {
|
sizeof(MMCKINFO)) < sizeof(MMCKINFO)) {
|
||||||
_llseek(LOWORD(lpmminfo->dwReserved2), dwOldPos, SEEK_SET);
|
_llseek(LOWORD(lpmminfo->dwReserved2), dwOldPos, SEEK_SET);
|
||||||
GlobalUnlock16(hmmio);
|
GlobalUnlock16(hmmio);
|
||||||
|
@ -2097,7 +2133,7 @@ UINT mmioDescend(HMMIO16 hmmio, MMCKINFO * lpck,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (FILE_Read(LOWORD(lpmminfo->dwReserved2), (LPSTR)lpck,
|
if (_lread32(LOWORD(lpmminfo->dwReserved2), (LPSTR)lpck,
|
||||||
sizeof(MMCKINFO)) < sizeof(MMCKINFO)) {
|
sizeof(MMCKINFO)) < sizeof(MMCKINFO)) {
|
||||||
_llseek(LOWORD(lpmminfo->dwReserved2), dwOldPos, SEEK_SET);
|
_llseek(LOWORD(lpmminfo->dwReserved2), dwOldPos, SEEK_SET);
|
||||||
GlobalUnlock16(hmmio);
|
GlobalUnlock16(hmmio);
|
||||||
|
|
|
@ -261,13 +261,35 @@ HANDLE32 LoadImage32A(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* CopyImage32 (USER32.60)
|
||||||
|
*
|
||||||
|
* FIXME: implementation still lacks nearly all features, see LR_*
|
||||||
|
* defines in windows.h
|
||||||
|
*/
|
||||||
|
HANDLE32 CopyImage32( HANDLE32 hnd, UINT32 type, INT32 desiredx,
|
||||||
|
INT32 desiredy, UINT32 flags )
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case IMAGE_BITMAP:
|
||||||
|
return hnd; /* FIXME ... need to copy here */
|
||||||
|
case IMAGE_ICON:
|
||||||
|
return CopyIcon32(hnd);
|
||||||
|
case IMAGE_CURSOR:
|
||||||
|
return CopyCursor32(hnd);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* LoadBitmap16 (USER.175)
|
* LoadBitmap16 (USER.175)
|
||||||
*/
|
*/
|
||||||
HBITMAP16 LoadBitmap16( HINSTANCE16 instance, SEGPTR name )
|
HBITMAP16 LoadBitmap16( HINSTANCE16 instance, SEGPTR name )
|
||||||
{
|
{
|
||||||
HBITMAP16 hbitmap = 0;
|
HBITMAP16 hbitmap = 0;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
HRSRC16 hRsrc;
|
HRSRC16 hRsrc;
|
||||||
HGLOBAL16 handle;
|
HGLOBAL16 handle;
|
||||||
BITMAPINFO *info;
|
BITMAPINFO *info;
|
||||||
|
@ -292,12 +314,12 @@ HBITMAP16 LoadBitmap16( HINSTANCE16 instance, SEGPTR name )
|
||||||
if (!(handle = LoadResource16( instance, hRsrc ))) return 0;
|
if (!(handle = LoadResource16( instance, hRsrc ))) return 0;
|
||||||
|
|
||||||
info = (BITMAPINFO *)LockResource16( handle );
|
info = (BITMAPINFO *)LockResource16( handle );
|
||||||
if ((hdc = GetDC(0)) != 0)
|
if ((hdc = GetDC32(0)) != 0)
|
||||||
{
|
{
|
||||||
char *bits = (char *)info + DIB_BitmapInfoSize( info, DIB_RGB_COLORS );
|
char *bits = (char *)info + DIB_BitmapInfoSize( info, DIB_RGB_COLORS );
|
||||||
hbitmap = CreateDIBitmap( hdc, &info->bmiHeader, CBM_INIT,
|
hbitmap = CreateDIBitmap( hdc, &info->bmiHeader, CBM_INIT,
|
||||||
bits, info, DIB_RGB_COLORS );
|
bits, info, DIB_RGB_COLORS );
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
}
|
}
|
||||||
FreeResource16( handle );
|
FreeResource16( handle );
|
||||||
return hbitmap;
|
return hbitmap;
|
||||||
|
@ -309,7 +331,7 @@ HBITMAP16 LoadBitmap16( HINSTANCE16 instance, SEGPTR name )
|
||||||
HBITMAP32 LoadBitmap32W( HINSTANCE32 instance, LPCWSTR name )
|
HBITMAP32 LoadBitmap32W( HINSTANCE32 instance, LPCWSTR name )
|
||||||
{
|
{
|
||||||
HBITMAP32 hbitmap = 0;
|
HBITMAP32 hbitmap = 0;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
HRSRC32 hRsrc;
|
HRSRC32 hRsrc;
|
||||||
HGLOBAL32 handle;
|
HGLOBAL32 handle;
|
||||||
BITMAPINFO *info;
|
BITMAPINFO *info;
|
||||||
|
@ -325,12 +347,12 @@ HBITMAP32 LoadBitmap32W( HINSTANCE32 instance, LPCWSTR name )
|
||||||
if (!(handle = LoadResource32( instance, hRsrc ))) return 0;
|
if (!(handle = LoadResource32( instance, hRsrc ))) return 0;
|
||||||
|
|
||||||
info = (BITMAPINFO *)LockResource32( handle );
|
info = (BITMAPINFO *)LockResource32( handle );
|
||||||
if ((hdc = GetDC(0)) != 0)
|
if ((hdc = GetDC32(0)) != 0)
|
||||||
{
|
{
|
||||||
char *bits = (char *)info + DIB_BitmapInfoSize( info, DIB_RGB_COLORS );
|
char *bits = (char *)info + DIB_BitmapInfoSize( info, DIB_RGB_COLORS );
|
||||||
hbitmap = CreateDIBitmap( hdc, &info->bmiHeader, CBM_INIT,
|
hbitmap = CreateDIBitmap( hdc, &info->bmiHeader, CBM_INIT,
|
||||||
bits, info, DIB_RGB_COLORS );
|
bits, info, DIB_RGB_COLORS );
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
}
|
}
|
||||||
return hbitmap;
|
return hbitmap;
|
||||||
}
|
}
|
||||||
|
|
|
@ -236,7 +236,7 @@ HANDLE CURSORICON_LoadHandler( HANDLE handle, HINSTANCE hInstance,
|
||||||
BOOL fCursor )
|
BOOL fCursor )
|
||||||
{
|
{
|
||||||
HANDLE hAndBits, hXorBits;
|
HANDLE hAndBits, hXorBits;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
int size, sizeAnd, sizeXor;
|
int size, sizeAnd, sizeXor;
|
||||||
POINT16 hotspot = { 0 ,0 };
|
POINT16 hotspot = { 0 ,0 };
|
||||||
BITMAPOBJ *bmpXor, *bmpAnd;
|
BITMAPOBJ *bmpXor, *bmpAnd;
|
||||||
|
@ -285,7 +285,7 @@ HANDLE CURSORICON_LoadHandler( HANDLE handle, HINSTANCE hInstance,
|
||||||
|
|
||||||
/* Create the XOR bitmap */
|
/* Create the XOR bitmap */
|
||||||
|
|
||||||
if (!(hdc = GetDC( 0 )))
|
if (!(hdc = GetDC32( 0 )))
|
||||||
{
|
{
|
||||||
free( pInfo );
|
free( pInfo );
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -323,7 +323,7 @@ HANDLE CURSORICON_LoadHandler( HANDLE handle, HINSTANCE hInstance,
|
||||||
|
|
||||||
hAndBits = CreateDIBitmap( hdc, &pInfo->bmiHeader, CBM_INIT,
|
hAndBits = CreateDIBitmap( hdc, &pInfo->bmiHeader, CBM_INIT,
|
||||||
bits, pInfo, DIB_RGB_COLORS );
|
bits, pInfo, DIB_RGB_COLORS );
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
|
|
||||||
/* Now create the CURSORICONINFO structure */
|
/* Now create the CURSORICONINFO structure */
|
||||||
|
|
||||||
|
@ -788,7 +788,7 @@ static BOOL CURSORICON_SetCursor( HCURSOR16 hCursor )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Set the same cursor for all top-level windows */
|
/* Set the same cursor for all top-level windows */
|
||||||
HWND hwnd = GetWindow( GetDesktopWindow(), GW_CHILD );
|
HWND hwnd = GetWindow( GetDesktopWindow32(), GW_CHILD );
|
||||||
while(hwnd)
|
while(hwnd)
|
||||||
{
|
{
|
||||||
Window win = WIN_GetXWindow( hwnd );
|
Window win = WIN_GetXWindow( hwnd );
|
||||||
|
|
|
@ -26,6 +26,8 @@ static const WIN_DC_INFO DC_defaultValues =
|
||||||
0, /* flags */
|
0, /* flags */
|
||||||
NULL, /* devCaps */
|
NULL, /* devCaps */
|
||||||
0, /* hMetaFile */
|
0, /* hMetaFile */
|
||||||
|
0, /* hHT */
|
||||||
|
0, /* HTLen */
|
||||||
0, /* hClipRgn */
|
0, /* hClipRgn */
|
||||||
0, /* hVisRgn */
|
0, /* hVisRgn */
|
||||||
0, /* hGCClipRgn */
|
0, /* hGCClipRgn */
|
||||||
|
@ -293,7 +295,7 @@ BOOL DC_SetupGCForPen( DC * dc )
|
||||||
else val.line_style = LineSolid;
|
else val.line_style = LineSolid;
|
||||||
val.line_width = dc->u.x.pen.width;
|
val.line_width = dc->u.x.pen.width;
|
||||||
val.cap_style = CapRound;
|
val.cap_style = CapRound;
|
||||||
val.join_style = JoinBevel;
|
val.join_style = JoinMiter;
|
||||||
XChangeGC( display, dc->u.x.gc,
|
XChangeGC( display, dc->u.x.gc,
|
||||||
GCFunction | GCForeground | GCBackground | GCLineWidth |
|
GCFunction | GCForeground | GCBackground | GCLineWidth |
|
||||||
GCLineStyle | GCCapStyle | GCJoinStyle | GCFillStyle, &val );
|
GCLineStyle | GCCapStyle | GCJoinStyle | GCFillStyle, &val );
|
||||||
|
|
|
@ -108,7 +108,7 @@ static FONTOBJ AnsiVarFont =
|
||||||
static FONTOBJ SystemFont =
|
static FONTOBJ SystemFont =
|
||||||
{
|
{
|
||||||
{ 0, FONT_MAGIC, 1 }, /* header */
|
{ 0, FONT_MAGIC, 1 }, /* header */
|
||||||
{ 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
{ 12, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||||
0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, "" }
|
0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ static FONTOBJ DeviceDefaultFont =
|
||||||
static FONTOBJ SystemFixedFont =
|
static FONTOBJ SystemFixedFont =
|
||||||
{
|
{
|
||||||
{ 0, FONT_MAGIC, 1 }, /* header */
|
{ 0, FONT_MAGIC, 1 }, /* header */
|
||||||
{ 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
{ 12, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
||||||
0, 0, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, "" }
|
0, 0, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* Metafile functions
|
* Metafile functions
|
||||||
*
|
*
|
||||||
* Copyright David W. Metcalfe, 1994
|
* Copyright David W. Metcalfe, 1994
|
||||||
* Niels de Carpentier, Albrecht Kleine 1996
|
* Niels de Carpentier, Albrecht Kleine, Huw Davies 1996
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -17,9 +17,6 @@
|
||||||
|
|
||||||
#define HTINCR 10 /* handle table allocation size increment */
|
#define HTINCR 10 /* handle table allocation size increment */
|
||||||
|
|
||||||
static HANDLE hHT; /* handle of the handle table */
|
|
||||||
static int HTLen; /* allocated length of handle table */
|
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* GetMetafile GDI.124 By Kenny MacDonald 30 Nov 94
|
* GetMetafile GDI.124 By Kenny MacDonald 30 Nov 94
|
||||||
*/
|
*/
|
||||||
|
@ -49,7 +46,7 @@ HMETAFILE16 GetMetaFile(LPSTR lpFilename)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FILE_Read(hFile, (char *)mh, MFHEADERSIZE) == HFILE_ERROR) {
|
if (_lread32(hFile, (char *)mh, MFHEADERSIZE) == HFILE_ERROR) {
|
||||||
GlobalFree16(hmf);
|
GlobalFree16(hmf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -64,7 +61,7 @@ HMETAFILE16 GetMetaFile(LPSTR lpFilename)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FILE_Read(hFile, (char*)mh + mh->mtHeaderSize * 2,
|
if (_lread32(hFile, (char*)mh + mh->mtHeaderSize * 2,
|
||||||
size - mh->mtHeaderSize * 2) == HFILE_ERROR) {
|
size - mh->mtHeaderSize * 2) == HFILE_ERROR) {
|
||||||
GlobalFree16(hmf);
|
GlobalFree16(hmf);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -91,7 +88,7 @@ HANDLE CreateMetaFile(LPCSTR lpFilename)
|
||||||
DC *dc;
|
DC *dc;
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
METAHEADER *mh;
|
METAHEADER *mh;
|
||||||
int hFile;
|
HFILE hFile;
|
||||||
|
|
||||||
dprintf_metafile(stddeb,"CreateMetaFile: %s\n", lpFilename);
|
dprintf_metafile(stddeb,"CreateMetaFile: %s\n", lpFilename);
|
||||||
|
|
||||||
|
@ -106,6 +103,13 @@ HANDLE CreateMetaFile(LPCSTR lpFilename)
|
||||||
GDI_FreeObject(handle);
|
GDI_FreeObject(handle);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (!(dc->w.hHT = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT,
|
||||||
|
sizeof(HANDLETABLE16) * HTINCR))) {
|
||||||
|
GlobalFree16(dc->w.hMetaFile);
|
||||||
|
GDI_FreeObject(handle);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
dc->w.HTLen = HTINCR;
|
||||||
dc->w.bitsPerPixel = screenDepth;
|
dc->w.bitsPerPixel = screenDepth;
|
||||||
mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile);
|
mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile);
|
||||||
|
|
||||||
|
@ -122,7 +126,9 @@ HANDLE CreateMetaFile(LPCSTR lpFilename)
|
||||||
hFile = _lcreat(lpFilename, 0);
|
hFile = _lcreat(lpFilename, 0);
|
||||||
if (_lwrite32(hFile, (char *)mh, MFHEADERSIZE) == -1)
|
if (_lwrite32(hFile, (char *)mh, MFHEADERSIZE) == -1)
|
||||||
{
|
{
|
||||||
|
GlobalFree16(dc->w.hHT);
|
||||||
GlobalFree16(dc->w.hMetaFile);
|
GlobalFree16(dc->w.hMetaFile);
|
||||||
|
GDI_FreeObject(handle);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
mh->mtNoParameters = hFile; /* store file descriptor here */
|
mh->mtNoParameters = hFile; /* store file descriptor here */
|
||||||
|
@ -131,11 +137,6 @@ HANDLE CreateMetaFile(LPCSTR lpFilename)
|
||||||
else /* memory based metafile */
|
else /* memory based metafile */
|
||||||
mh->mtType = 0;
|
mh->mtType = 0;
|
||||||
|
|
||||||
/* create the handle table */
|
|
||||||
HTLen = HTINCR;
|
|
||||||
hHT = GlobalAlloc16(GMEM_MOVEABLE | GMEM_ZEROINIT,
|
|
||||||
sizeof(HANDLETABLE16) * HTLen);
|
|
||||||
|
|
||||||
GlobalUnlock16(dc->w.hMetaFile);
|
GlobalUnlock16(dc->w.hMetaFile);
|
||||||
dprintf_metafile(stddeb,"CreateMetaFile: returning %04x\n", handle);
|
dprintf_metafile(stddeb,"CreateMetaFile: returning %04x\n", handle);
|
||||||
return handle;
|
return handle;
|
||||||
|
@ -150,7 +151,7 @@ HMETAFILE16 CopyMetaFile(HMETAFILE16 hSrcMetaFile, LPCSTR lpFilename)
|
||||||
HMETAFILE16 handle = 0;
|
HMETAFILE16 handle = 0;
|
||||||
METAHEADER *mh;
|
METAHEADER *mh;
|
||||||
METAHEADER *mh2;
|
METAHEADER *mh2;
|
||||||
int hFile;
|
HFILE hFile;
|
||||||
|
|
||||||
dprintf_metafile(stddeb,"CopyMetaFile: %s\n", lpFilename);
|
dprintf_metafile(stddeb,"CopyMetaFile: %s\n", lpFilename);
|
||||||
|
|
||||||
|
@ -191,12 +192,13 @@ BOOL IsValidMetaFile(HMETAFILE16 hmf)
|
||||||
{
|
{
|
||||||
BOOL resu=FALSE;
|
BOOL resu=FALSE;
|
||||||
METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf);
|
METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf);
|
||||||
if (mh)
|
if (mh) {
|
||||||
if (mh->mtType == 1 || mh->mtType == 0)
|
if (mh->mtType == 1 || mh->mtType == 0)
|
||||||
if (mh->mtHeaderSize == MFHEADERSIZE/sizeof(INT16))
|
if (mh->mtHeaderSize == MFHEADERSIZE/sizeof(INT16))
|
||||||
if (mh->mtVersion == MFVERSION)
|
if (mh->mtVersion == MFVERSION)
|
||||||
resu=TRUE;
|
resu=TRUE;
|
||||||
GlobalUnlock16(hmf);
|
GlobalUnlock16(hmf);
|
||||||
|
}
|
||||||
dprintf_metafile(stddeb,"IsValidMetaFile %x => %d\n",hmf,resu);
|
dprintf_metafile(stddeb,"IsValidMetaFile %x => %d\n",hmf,resu);
|
||||||
return resu;
|
return resu;
|
||||||
}
|
}
|
||||||
|
@ -228,7 +230,9 @@ HMETAFILE16 CloseMetaFile(HDC hdc)
|
||||||
|
|
||||||
if (!MF_MetaParam0(dc, META_EOF))
|
if (!MF_MetaParam0(dc, META_EOF))
|
||||||
{
|
{
|
||||||
|
GlobalFree16(dc->w.hHT);
|
||||||
GlobalFree16(dc->w.hMetaFile);
|
GlobalFree16(dc->w.hMetaFile);
|
||||||
|
GDI_FreeObject(hdc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,20 +242,22 @@ HMETAFILE16 CloseMetaFile(HDC hdc)
|
||||||
mh->mtNoParameters = 0;
|
mh->mtNoParameters = 0;
|
||||||
if (_llseek(hFile, 0L, 0) == -1)
|
if (_llseek(hFile, 0L, 0) == -1)
|
||||||
{
|
{
|
||||||
|
GlobalFree16(dc->w.hHT);
|
||||||
GlobalFree16(dc->w.hMetaFile);
|
GlobalFree16(dc->w.hMetaFile);
|
||||||
|
GDI_FreeObject(hdc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (_lwrite32(hFile, (char *)mh, MFHEADERSIZE) == -1)
|
if (_lwrite32(hFile, (char *)mh, MFHEADERSIZE) == -1)
|
||||||
{
|
{
|
||||||
|
GlobalFree16(dc->w.hHT);
|
||||||
GlobalFree16(dc->w.hMetaFile);
|
GlobalFree16(dc->w.hMetaFile);
|
||||||
|
GDI_FreeObject(hdc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
_lclose(hFile);
|
_lclose(hFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* delete the handle table */
|
GlobalFree16(dc->w.hHT);
|
||||||
GlobalFree16(hHT);
|
|
||||||
|
|
||||||
hmf = dc->w.hMetaFile;
|
hmf = dc->w.hMetaFile;
|
||||||
GlobalUnlock16(hmf);
|
GlobalUnlock16(hmf);
|
||||||
GDI_FreeObject(hdc);
|
GDI_FreeObject(hdc);
|
||||||
|
@ -284,6 +290,7 @@ BOOL PlayMetaFile(HDC hdc, HMETAFILE16 hmf)
|
||||||
METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf);
|
METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf);
|
||||||
METARECORD *mr;
|
METARECORD *mr;
|
||||||
HANDLETABLE16 *ht;
|
HANDLETABLE16 *ht;
|
||||||
|
HGLOBAL16 hHT;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
WORD i;
|
WORD i;
|
||||||
|
|
||||||
|
@ -326,6 +333,7 @@ BOOL EnumMetaFile(HDC hdc, HMETAFILE16 hmf, MFENUMPROC16 lpEnumFunc,LPARAM lpDat
|
||||||
{
|
{
|
||||||
METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf);
|
METAHEADER *mh = (METAHEADER *)GlobalLock16(hmf);
|
||||||
METARECORD *mr;
|
METARECORD *mr;
|
||||||
|
HGLOBAL16 hHT;
|
||||||
SEGPTR ht, spRecord;
|
SEGPTR ht, spRecord;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
|
@ -848,32 +856,27 @@ int MF_AddHandle(HANDLETABLE16 *ht, WORD htlen, HANDLE hobj)
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* MF_AddHandleInternal
|
* MF_AddHandleDC
|
||||||
*
|
*
|
||||||
* Add a handle to the internal handle table and return the index
|
* Add a handle to the handle table in the DC, growing table if
|
||||||
|
* necessary. Return the index
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int MF_AddHandleInternal(HANDLE hobj)
|
int MF_AddHandleDC(DC *dc, HANDLE hobj)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
HANDLETABLE16 *ht = (HANDLETABLE16 *)GlobalLock16(hHT);
|
HANDLETABLE16 *ht = (HANDLETABLE16 *)GlobalLock16(dc->w.hHT);
|
||||||
|
|
||||||
for (i = 0; i < HTLen; i++)
|
if((i = MF_AddHandle(ht, dc->w.HTLen, hobj)) == -1) {
|
||||||
{
|
GlobalUnlock16(dc->w.hHT);
|
||||||
if (*(ht->objectHandle + i) == 0)
|
if(!(dc->w.hHT = GlobalReAlloc16(dc->w.hHT, (dc->w.HTLen + HTINCR) *
|
||||||
{
|
sizeof(HANDLETABLE16), GMEM_MOVEABLE | GMEM_ZEROINIT)))
|
||||||
*(ht->objectHandle + i) = hobj;
|
|
||||||
GlobalUnlock16(hHT);
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
GlobalUnlock16(hHT);
|
|
||||||
if (!(hHT = GlobalReAlloc16(hHT, HTINCR, GMEM_MOVEABLE | GMEM_ZEROINIT)))
|
|
||||||
return -1;
|
return -1;
|
||||||
HTLen += HTINCR;
|
dc->w.HTLen += HTINCR;
|
||||||
ht = (HANDLETABLE16 *)GlobalLock16(hHT);
|
ht = (HANDLETABLE16 *)GlobalLock16(dc->w.hHT);
|
||||||
*(ht->objectHandle + i) = hobj;
|
i = MF_AddHandle(ht, dc->w.HTLen, hobj);
|
||||||
GlobalUnlock16(hHT);
|
}
|
||||||
|
GlobalUnlock16(dc->w.hHT);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1036,7 +1039,7 @@ BOOL MF_CreateBrushIndirect(DC *dc, HBRUSH hBrush, LOGBRUSH16 *logbrush)
|
||||||
mr->rdSize = sizeof(METARECORD) / 2;
|
mr->rdSize = sizeof(METARECORD) / 2;
|
||||||
mr->rdFunction = META_SELECTOBJECT;
|
mr->rdFunction = META_SELECTOBJECT;
|
||||||
|
|
||||||
if ((index = MF_AddHandleInternal(hBrush)) == -1)
|
if ((index = MF_AddHandleDC(dc, hBrush)) == -1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile);
|
mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile);
|
||||||
|
@ -1128,7 +1131,7 @@ BOOL MF_CreatePatternBrush(DC *dc, HBRUSH hBrush, LOGBRUSH16 *logbrush)
|
||||||
mr = (METARECORD *)&buffer;
|
mr = (METARECORD *)&buffer;
|
||||||
mr->rdSize = sizeof(METARECORD) / 2;
|
mr->rdSize = sizeof(METARECORD) / 2;
|
||||||
mr->rdFunction = META_SELECTOBJECT;
|
mr->rdFunction = META_SELECTOBJECT;
|
||||||
if ((index = MF_AddHandleInternal(hBrush)) == -1)
|
if ((index = MF_AddHandleDC(dc, hBrush)) == -1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile);
|
mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile);
|
||||||
|
@ -1165,7 +1168,7 @@ BOOL MF_CreatePenIndirect(DC *dc, HPEN16 hPen, LOGPEN16 *logpen)
|
||||||
mr->rdSize = sizeof(METARECORD) / 2;
|
mr->rdSize = sizeof(METARECORD) / 2;
|
||||||
mr->rdFunction = META_SELECTOBJECT;
|
mr->rdFunction = META_SELECTOBJECT;
|
||||||
|
|
||||||
if ((index = MF_AddHandleInternal(hPen)) == -1)
|
if ((index = MF_AddHandleDC(dc, hPen)) == -1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile);
|
mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile);
|
||||||
|
@ -1202,7 +1205,7 @@ BOOL MF_CreateFontIndirect(DC *dc, HFONT hFont, LOGFONT16 *logfont)
|
||||||
mr->rdSize = sizeof(METARECORD) / 2;
|
mr->rdSize = sizeof(METARECORD) / 2;
|
||||||
mr->rdFunction = META_SELECTOBJECT;
|
mr->rdFunction = META_SELECTOBJECT;
|
||||||
|
|
||||||
if ((index = MF_AddHandleInternal(hFont)) == -1)
|
if ((index = MF_AddHandleDC(dc, hFont)) == -1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile);
|
mh = (METAHEADER *)GlobalLock16(dc->w.hMetaFile);
|
||||||
|
|
|
@ -387,8 +387,8 @@ HPALETTE16 SelectPalette( HDC hDC, HPALETTE16 hPal, BOOL bForceBackground )
|
||||||
|
|
||||||
if( hPal != STOCK_DEFAULT_PALETTE )
|
if( hPal != STOCK_DEFAULT_PALETTE )
|
||||||
{
|
{
|
||||||
HWND hWnd = WindowFromDC( hDC );
|
HWND32 hWnd = WindowFromDC32( hDC );
|
||||||
HWND hActive = GetActiveWindow();
|
HWND32 hActive = GetActiveWindow();
|
||||||
|
|
||||||
/* set primary palette if it's related to current active */
|
/* set primary palette if it's related to current active */
|
||||||
|
|
||||||
|
@ -414,8 +414,8 @@ UINT16 RealizePalette( HDC32 hDC )
|
||||||
{
|
{
|
||||||
/* Send palette change notification */
|
/* Send palette change notification */
|
||||||
|
|
||||||
HWND hWnd;
|
HWND32 hWnd;
|
||||||
if( (hWnd = WindowFromDC( hDC )) )
|
if( (hWnd = WindowFromDC32( hDC )) )
|
||||||
SendMessage16( HWND_BROADCAST, WM_PALETTECHANGED, hWnd, 0L);
|
SendMessage16( HWND_BROADCAST, WM_PALETTECHANGED, hWnd, 0L);
|
||||||
}
|
}
|
||||||
return realized;
|
return realized;
|
||||||
|
@ -428,7 +428,7 @@ UINT16 RealizePalette( HDC32 hDC )
|
||||||
*/
|
*/
|
||||||
int UpdateColors( HDC hDC )
|
int UpdateColors( HDC hDC )
|
||||||
{
|
{
|
||||||
HWND hWnd = WindowFromDC( hDC );
|
HWND32 hWnd = WindowFromDC32( hDC );
|
||||||
|
|
||||||
/* Docs say that we have to remap current drawable pixel by pixel
|
/* Docs say that we have to remap current drawable pixel by pixel
|
||||||
* but it would take forever given the speed of XGet/PutPixel.
|
* but it would take forever given the speed of XGet/PutPixel.
|
||||||
|
|
|
@ -224,6 +224,8 @@ INT16 DrawText16( HDC16 hdc, LPCSTR str, INT16 i_count,
|
||||||
tabwidth = size.cx * tabstop;
|
tabwidth = size.cx * tabstop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flags & DT_CALCRECT) flags |= DT_NOCLIP;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
prefix_offset = -1;
|
prefix_offset = -1;
|
||||||
|
@ -268,7 +270,7 @@ INT16 DrawText16( HDC16 hdc, LPCSTR str, INT16 i_count,
|
||||||
y += lh;
|
y += lh;
|
||||||
if (strPtr)
|
if (strPtr)
|
||||||
{
|
{
|
||||||
if (!(flags & DT_NOCLIP) && !(flags & DT_CALCRECT))
|
if (!(flags & DT_NOCLIP))
|
||||||
{
|
{
|
||||||
if (y > rect->bottom - lh)
|
if (y > rect->bottom - lh)
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -11,6 +11,15 @@
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
static CONSOLE_SCREEN_BUFFER_INFO dummyinfo =
|
||||||
|
{
|
||||||
|
{80, 24},
|
||||||
|
{0, 0},
|
||||||
|
0,
|
||||||
|
{0, 0, 79, 23},
|
||||||
|
{80, 24}
|
||||||
|
};
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SetConsoleCtrlHandler (KERNEL32.459)
|
* SetConsoleCtrlHandler (KERNEL32.459)
|
||||||
*/
|
*/
|
||||||
|
@ -19,3 +28,34 @@ BOOL SetConsoleCtrlHandler(HANDLER_ROUTINE * func, BOOL a)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetConsoleScreenBufferInfo (KERNEL32.190)
|
||||||
|
*/
|
||||||
|
BOOL32 GetConsoleScreenBufferInfo( HANDLE32 hConsoleOutput,
|
||||||
|
LPCONSOLE_SCREEN_BUFFER_INFO csbi )
|
||||||
|
{
|
||||||
|
csbi->dwSize.x = 80;
|
||||||
|
csbi->dwSize.y = 24;
|
||||||
|
csbi->dwCursorPosition.x = 0;
|
||||||
|
csbi->dwCursorPosition.y = 0;
|
||||||
|
csbi->wAttributes = 0;
|
||||||
|
csbi->srWindow.Left = 0;
|
||||||
|
csbi->srWindow.Right = 79;
|
||||||
|
csbi->srWindow.Top = 0;
|
||||||
|
csbi->srWindow.Bottom = 23;
|
||||||
|
csbi->dwMaximumWindowSize.x = 80;
|
||||||
|
csbi->dwMaximumWindowSize.y = 24;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetLargestConsoleWindowSize (KERNEL32.226)
|
||||||
|
*/
|
||||||
|
COORD GetLargestConsoleWindowSize( HANDLE32 hConsoleOutput )
|
||||||
|
{
|
||||||
|
return dummyinfo.dwMaximumWindowSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -270,7 +270,7 @@ static HANDLE CURSORICON32_LoadHandler( HANDLE32 handle, HINSTANCE hInstance,
|
||||||
BOOL fCursor )
|
BOOL fCursor )
|
||||||
{
|
{
|
||||||
HANDLE hAndBits, hXorBits, hRes;
|
HANDLE hAndBits, hXorBits, hRes;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
int size, sizeAnd, sizeXor;
|
int size, sizeAnd, sizeXor;
|
||||||
POINT16 hotspot = { 0 ,0 };
|
POINT16 hotspot = { 0 ,0 };
|
||||||
BITMAPOBJ *bmpXor, *bmpAnd;
|
BITMAPOBJ *bmpXor, *bmpAnd;
|
||||||
|
@ -320,7 +320,7 @@ static HANDLE CURSORICON32_LoadHandler( HANDLE32 handle, HINSTANCE hInstance,
|
||||||
|
|
||||||
/* Create the XOR bitmap */
|
/* Create the XOR bitmap */
|
||||||
|
|
||||||
if (!(hdc = GetDC( 0 )))
|
if (!(hdc = GetDC32( 0 )))
|
||||||
{
|
{
|
||||||
free( pInfo );
|
free( pInfo );
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -358,7 +358,7 @@ static HANDLE CURSORICON32_LoadHandler( HANDLE32 handle, HINSTANCE hInstance,
|
||||||
|
|
||||||
hAndBits = CreateDIBitmap( hdc, &pInfo->bmiHeader, CBM_INIT,
|
hAndBits = CreateDIBitmap( hdc, &pInfo->bmiHeader, CBM_INIT,
|
||||||
bits, pInfo, DIB_RGB_COLORS );
|
bits, pInfo, DIB_RGB_COLORS );
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
|
|
||||||
/* Now create the CURSORICONINFO structure */
|
/* Now create the CURSORICONINFO structure */
|
||||||
|
|
||||||
|
|
|
@ -167,7 +167,7 @@ static void UnixTimeToFileTime(time_t unix_time, FILETIME *filetime)
|
||||||
time_t FileTimeToUnixTime(FILETIME *filetime)
|
time_t FileTimeToUnixTime(FILETIME *filetime)
|
||||||
{
|
{
|
||||||
/* reverse of UnixTimeToFileTime */
|
/* reverse of UnixTimeToFileTime */
|
||||||
return filetime->dwLowDateTime+(filetime->dwHighDateTime<<16);
|
return (filetime->dwLowDateTime>>16)+(filetime->dwHighDateTime<<16);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -339,7 +339,9 @@ UINT32 SetHandleCount32( UINT32 cHandles )
|
||||||
|
|
||||||
int CloseFileHandle(HFILE hFile)
|
int CloseFileHandle(HFILE hFile)
|
||||||
{
|
{
|
||||||
return _lclose(hFile);
|
if (!_lclose(hFile))
|
||||||
|
return TRUE;
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int TranslateAccessFlags(DWORD access_flags)
|
static int TranslateAccessFlags(DWORD access_flags)
|
||||||
|
@ -451,6 +453,7 @@ BOOL32 SetFileAttributes32A(LPCSTR lpFileName, DWORD attributes)
|
||||||
buf.st_mode &= ~0222; /* octal!, clear write permission bits */
|
buf.st_mode &= ~0222; /* octal!, clear write permission bits */
|
||||||
attributes &= ~FILE_ATTRIBUTE_READONLY;
|
attributes &= ~FILE_ATTRIBUTE_READONLY;
|
||||||
}
|
}
|
||||||
|
attributes &= ~(FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM);
|
||||||
if (attributes)
|
if (attributes)
|
||||||
fprintf(stdnimp,"SetFileAttributesA(%s):%lx attribute(s) not implemented.\n",lpFileName,attributes);
|
fprintf(stdnimp,"SetFileAttributesA(%s):%lx attribute(s) not implemented.\n",lpFileName,attributes);
|
||||||
if (-1==chmod(fn,buf.st_mode)) {
|
if (-1==chmod(fn,buf.st_mode)) {
|
||||||
|
|
|
@ -148,8 +148,6 @@ HANDLE32 FindFirstFile32A(LPCSTR lpfilename,
|
||||||
return INVALID_HANDLE_VALUE;
|
return INVALID_HANDLE_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(context->mask, slash+1);
|
|
||||||
|
|
||||||
/* uppercase mask in place */
|
/* uppercase mask in place */
|
||||||
for (p = context->mask ; *p; p++)
|
for (p = context->mask ; *p; p++)
|
||||||
*p = toupper(*p);
|
*p = toupper(*p);
|
||||||
|
|
|
@ -268,6 +268,15 @@ BOOL32 VirtualFree(LPVOID lpvAddress, DWORD cbSize, DWORD fdwFreeType)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* VirtualQuery (KERNEL32.554)
|
||||||
|
*/
|
||||||
|
BOOL32 VirtualQuery(LPCVOID address,LPMEMORY_BASIC_INFORMATION buf,DWORD len)
|
||||||
|
{
|
||||||
|
/* FIXME: fill out structure ... */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
int TranslateProtectionFlags(DWORD protection_flags)
|
int TranslateProtectionFlags(DWORD protection_flags)
|
||||||
{
|
{
|
||||||
int prot;
|
int prot;
|
||||||
|
@ -308,7 +317,7 @@ int TranslateProtectionFlags(DWORD protection_flags)
|
||||||
*/
|
*/
|
||||||
BOOL WIN32_IsBadReadPtr(void* ptr, unsigned int bytes)
|
BOOL WIN32_IsBadReadPtr(void* ptr, unsigned int bytes)
|
||||||
{
|
{
|
||||||
dprintf_global(stddeb,"IsBadReadPtr(%x,%x)\n",ptr,bytes);
|
dprintf_global(stddeb,"IsBadReadPtr(%x,%x)\n",(int)ptr,bytes);
|
||||||
/* FIXME: Should make check based on actual mappings, here */
|
/* FIXME: Should make check based on actual mappings, here */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -318,7 +327,7 @@ BOOL WIN32_IsBadReadPtr(void* ptr, unsigned int bytes)
|
||||||
*/
|
*/
|
||||||
BOOL WIN32_IsBadWritePtr(void* ptr, unsigned int bytes)
|
BOOL WIN32_IsBadWritePtr(void* ptr, unsigned int bytes)
|
||||||
{
|
{
|
||||||
dprintf_global(stddeb,"IsBadWritePtr(%x,%x)\n",ptr,bytes);
|
dprintf_global(stddeb,"IsBadWritePtr(%x,%x)\n",(int)ptr,bytes);
|
||||||
/* FIXME: Should make check based on actual mappings, here */
|
/* FIXME: Should make check based on actual mappings, here */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -327,7 +336,7 @@ BOOL WIN32_IsBadWritePtr(void* ptr, unsigned int bytes)
|
||||||
*/
|
*/
|
||||||
BOOL WIN32_IsBadCodePtr(void* ptr, unsigned int bytes)
|
BOOL WIN32_IsBadCodePtr(void* ptr, unsigned int bytes)
|
||||||
{
|
{
|
||||||
dprintf_global(stddeb,"IsBadCodePtr(%x,%x)\n",ptr,bytes);
|
dprintf_global(stddeb,"IsBadCodePtr(%x,%x)\n",(int)ptr,bytes);
|
||||||
/* FIXME: Should make check based on actual mappings, here */
|
/* FIXME: Should make check based on actual mappings, here */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,14 @@ HHOOK SetWindowsHookEx32A(int HookId, HOOKPROC32 hookfn, HINSTANCE hModule,
|
||||||
return (HHOOK) NULL;
|
return (HHOOK) NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HHOOK SetWindowsHook32A(int HookId, HOOKPROC32 hookfn)
|
||||||
|
{
|
||||||
|
/* Stub for now */
|
||||||
|
fprintf(stdnimp, "SetWindowsHook32A Stub called! (hook Id %d)\n", HookId);
|
||||||
|
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||||
|
return (HHOOK) NULL;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL UnhookWindowsHookEx32(HHOOK hHook)
|
BOOL UnhookWindowsHookEx32(HHOOK hHook)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -67,6 +67,11 @@ void DeleteCriticalSection(CRITICAL_SECTION* lpCrit)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ReinitializeCriticalSection(CRITICAL_SECTION *lpCrit) {
|
||||||
|
/* hmm */
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* Tls is available only for the single thread
|
* Tls is available only for the single thread
|
||||||
* (BTW: TLS means Thread Local Storage)
|
* (BTW: TLS means Thread Local Storage)
|
||||||
|
|
|
@ -49,7 +49,7 @@ HWND32 CARET_GetHwnd()
|
||||||
*/
|
*/
|
||||||
static void CARET_DisplayCaret( DISPLAY_CARET status )
|
static void CARET_DisplayCaret( DISPLAY_CARET status )
|
||||||
{
|
{
|
||||||
HDC16 hdc;
|
HDC32 hdc;
|
||||||
HBRUSH16 hPrevBrush;
|
HBRUSH16 hPrevBrush;
|
||||||
|
|
||||||
if (Caret.on && (status == CARET_ON)) return;
|
if (Caret.on && (status == CARET_ON)) return;
|
||||||
|
@ -58,11 +58,11 @@ static void CARET_DisplayCaret( DISPLAY_CARET status )
|
||||||
/* So now it's always a toggle */
|
/* So now it's always a toggle */
|
||||||
|
|
||||||
Caret.on = !Caret.on;
|
Caret.on = !Caret.on;
|
||||||
if (!(hdc = GetDCEx( Caret.hwnd, 0, DCX_USESTYLE | DCX_CACHE ))) return;
|
if (!(hdc = GetDCEx32( Caret.hwnd, 0, DCX_USESTYLE | DCX_CACHE ))) return;
|
||||||
hPrevBrush = SelectObject( hdc, Caret.hBrush );
|
hPrevBrush = SelectObject( hdc, Caret.hBrush );
|
||||||
PatBlt( hdc, Caret.x, Caret.y, Caret.width, Caret.height, PATINVERT );
|
PatBlt( hdc, Caret.x, Caret.y, Caret.width, Caret.height, PATINVERT );
|
||||||
SelectObject( hdc, hPrevBrush );
|
SelectObject( hdc, hPrevBrush );
|
||||||
ReleaseDC( Caret.hwnd, hdc );
|
ReleaseDC32( Caret.hwnd, hdc );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -44,10 +44,10 @@ void CLASS_DumpClass( CLASS *ptr )
|
||||||
fprintf( stderr, "Class %p:\n", ptr );
|
fprintf( stderr, "Class %p:\n", ptr );
|
||||||
fprintf( stderr,
|
fprintf( stderr,
|
||||||
"next=%p name=%04x '%s' style=%08x wndProc=%08x\n"
|
"next=%p name=%04x '%s' style=%08x wndProc=%08x\n"
|
||||||
"inst=%04x hdce=%04x icon=%04x cursor=%04x bkgnd=%04x\n"
|
"inst=%04x dce=%08x icon=%04x cursor=%04x bkgnd=%04x\n"
|
||||||
"clsExtra=%d winExtra=%d #windows=%d\n",
|
"clsExtra=%d winExtra=%d #windows=%d\n",
|
||||||
ptr->next, ptr->atomName, className, ptr->style,
|
ptr->next, ptr->atomName, className, ptr->style,
|
||||||
(UINT32)ptr->winproc, ptr->hInstance, ptr->hdce,
|
(UINT32)ptr->winproc, ptr->hInstance, (UINT32)ptr->dce,
|
||||||
ptr->hIcon, ptr->hCursor, ptr->hbrBackground,
|
ptr->hIcon, ptr->hCursor, ptr->hbrBackground,
|
||||||
ptr->cbClsExtra, ptr->cbWndExtra, ptr->cWindows );
|
ptr->cbClsExtra, ptr->cbWndExtra, ptr->cWindows );
|
||||||
if (ptr->cbClsExtra)
|
if (ptr->cbClsExtra)
|
||||||
|
@ -181,7 +181,7 @@ static BOOL CLASS_FreeClass( CLASS *classPtr )
|
||||||
|
|
||||||
/* Delete the class */
|
/* Delete the class */
|
||||||
|
|
||||||
if (classPtr->hdce) DCE_FreeDCE( classPtr->hdce );
|
if (classPtr->dce) DCE_FreeDCE( classPtr->dce );
|
||||||
if (classPtr->hbrBackground) DeleteObject( classPtr->hbrBackground );
|
if (classPtr->hbrBackground) DeleteObject( classPtr->hbrBackground );
|
||||||
GlobalDeleteAtom( classPtr->atomName );
|
GlobalDeleteAtom( classPtr->atomName );
|
||||||
CLASS_SetMenuNameA( classPtr, NULL );
|
CLASS_SetMenuNameA( classPtr, NULL );
|
||||||
|
@ -288,7 +288,9 @@ static CLASS *CLASS_RegisterClass( ATOM atom, HINSTANCE32 hInstance,
|
||||||
classPtr->atomName = atom;
|
classPtr->atomName = atom;
|
||||||
classPtr->menuNameA = 0;
|
classPtr->menuNameA = 0;
|
||||||
classPtr->menuNameW = 0;
|
classPtr->menuNameW = 0;
|
||||||
classPtr->hdce = (style&CS_CLASSDC) ? DCE_AllocDCE(0, DCE_CLASS_DC): 0;
|
classPtr->dce = (style & CS_CLASSDC) ?
|
||||||
|
DCE_AllocDCE( 0, DCE_CLASS_DC ) : NULL;
|
||||||
|
|
||||||
WINPROC_SetProc( &classPtr->winproc, wndProc, wndProcType );
|
WINPROC_SetProc( &classPtr->winproc, wndProc, wndProcType );
|
||||||
|
|
||||||
/* Other values must be set by caller */
|
/* Other values must be set by caller */
|
||||||
|
|
227
windows/dce.c
227
windows/dce.c
|
@ -19,7 +19,7 @@
|
||||||
#include "class.h"
|
#include "class.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "gdi.h"
|
#include "gdi.h"
|
||||||
#include "user.h"
|
#include "heap.h"
|
||||||
#include "sysmetrics.h"
|
#include "sysmetrics.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
/* #define DEBUG_DC */
|
/* #define DEBUG_DC */
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
#define NB_DCE 5 /* Number of DCEs created at startup */
|
#define NB_DCE 5 /* Number of DCEs created at startup */
|
||||||
|
|
||||||
static HANDLE firstDCE = 0;
|
static DCE *firstDCE = 0;
|
||||||
static HDC defaultDCstate = 0;
|
static HDC defaultDCstate = 0;
|
||||||
|
|
||||||
BOOL DCHook(HDC, WORD, DWORD, DWORD);
|
BOOL DCHook(HDC, WORD, DWORD, DWORD);
|
||||||
|
@ -37,26 +37,24 @@ BOOL DCHook(HDC, WORD, DWORD, DWORD);
|
||||||
*
|
*
|
||||||
* Allocate a new DCE.
|
* Allocate a new DCE.
|
||||||
*/
|
*/
|
||||||
HANDLE DCE_AllocDCE( HWND hWnd, DCE_TYPE type )
|
DCE *DCE_AllocDCE( HWND32 hWnd, DCE_TYPE type )
|
||||||
{
|
{
|
||||||
DCE * dce;
|
DCE * dce;
|
||||||
HANDLE handle = USER_HEAP_ALLOC( sizeof(DCE) );
|
if (!(dce = HeapAlloc( SystemHeap, 0, sizeof(DCE) ))) return NULL;
|
||||||
if (!handle) return 0;
|
|
||||||
dce = (DCE *) USER_HEAP_LIN_ADDR( handle );
|
|
||||||
if (!(dce->hDC = CreateDC( "DISPLAY", NULL, NULL, NULL )))
|
if (!(dce->hDC = CreateDC( "DISPLAY", NULL, NULL, NULL )))
|
||||||
{
|
{
|
||||||
USER_HEAP_FREE( handle );
|
HeapFree( SystemHeap, 0, dce );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* store DCE handle in DC hook data field */
|
/* store DCE handle in DC hook data field */
|
||||||
|
|
||||||
SetDCHook(dce->hDC, GDI_GetDefDCHook(), MAKELONG(handle,DC_MAGIC));
|
SetDCHook(dce->hDC, GDI_GetDefDCHook(), (DWORD)dce);
|
||||||
|
|
||||||
dce->hwndCurrent = hWnd;
|
dce->hwndCurrent = hWnd;
|
||||||
dce->hNext = firstDCE;
|
|
||||||
dce->hClipRgn = 0;
|
dce->hClipRgn = 0;
|
||||||
firstDCE = handle;
|
dce->next = firstDCE;
|
||||||
|
firstDCE = dce;
|
||||||
|
|
||||||
if( type != DCE_CACHE_DC )
|
if( type != DCE_CACHE_DC )
|
||||||
{
|
{
|
||||||
|
@ -72,77 +70,60 @@ HANDLE DCE_AllocDCE( HWND hWnd, DCE_TYPE type )
|
||||||
}
|
}
|
||||||
else dce->DCXflags = DCX_CACHE;
|
else dce->DCXflags = DCX_CACHE;
|
||||||
|
|
||||||
return handle;
|
return dce;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DCE_FreeDCE
|
* DCE_FreeDCE
|
||||||
*/
|
*/
|
||||||
void DCE_FreeDCE( HANDLE hdce )
|
void DCE_FreeDCE( DCE *dce )
|
||||||
{
|
{
|
||||||
DCE * dce;
|
DCE **ppDCE = &firstDCE;
|
||||||
HANDLE *handle = &firstDCE;
|
|
||||||
|
|
||||||
if (!(dce = (DCE *) USER_HEAP_LIN_ADDR( hdce ))) return;
|
if (!dce) return;
|
||||||
while (*handle && (*handle != hdce))
|
while (*ppDCE && (*ppDCE != dce)) ppDCE = &(*ppDCE)->next;
|
||||||
{
|
if (*ppDCE == dce) *ppDCE = dce->next;
|
||||||
DCE * prev = (DCE *) USER_HEAP_LIN_ADDR( *handle );
|
|
||||||
handle = &prev->hNext;
|
|
||||||
}
|
|
||||||
if (*handle == hdce) *handle = dce->hNext;
|
|
||||||
|
|
||||||
SetDCHook(dce->hDC,(SEGPTR)NULL,0L);
|
SetDCHook(dce->hDC,(SEGPTR)NULL,0L);
|
||||||
|
|
||||||
DeleteDC( dce->hDC );
|
DeleteDC( dce->hDC );
|
||||||
if( dce->hClipRgn && !(dce->DCXflags & DCX_KEEPCLIPRGN) )
|
if( dce->hClipRgn && !(dce->DCXflags & DCX_KEEPCLIPRGN) )
|
||||||
DeleteObject(dce->hClipRgn);
|
DeleteObject(dce->hClipRgn);
|
||||||
USER_HEAP_FREE( hdce );
|
HeapFree( SystemHeap, 0, dce );
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* DCE_FindDCE
|
|
||||||
*/
|
|
||||||
HANDLE DCE_FindDCE(HDC hDC)
|
|
||||||
{
|
|
||||||
HANDLE hdce = firstDCE;
|
|
||||||
DCE* dce;
|
|
||||||
|
|
||||||
while( hdce )
|
|
||||||
{
|
|
||||||
dce = (DCE *) USER_HEAP_LIN_ADDR(hdce);
|
|
||||||
if( dce->hDC == hDC ) break;
|
|
||||||
hdce = dce->hNext;
|
|
||||||
}
|
|
||||||
return hdce;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* WindowFromDC (USER.117) (USER32.580)
|
* WindowFromDC16 (USER32.580)
|
||||||
*/
|
*/
|
||||||
HWND16 WindowFromDC( HDC32 hDC )
|
HWND16 WindowFromDC16( HDC16 hDC )
|
||||||
{
|
{
|
||||||
HANDLE16 hdce = DCE_FindDCE(hDC);
|
return (HWND16)WindowFromDC32( hDC );
|
||||||
|
|
||||||
if( hdce )
|
|
||||||
{
|
|
||||||
DCE* dce = (DCE *) USER_HEAP_LIN_ADDR(hdce);
|
|
||||||
return dce->hwndCurrent;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* WindowFromDC32 (USER32.580)
|
||||||
|
*/
|
||||||
|
HWND32 WindowFromDC32( HDC32 hDC )
|
||||||
|
{
|
||||||
|
DCE *dce = firstDCE;
|
||||||
|
while (dce && (dce->hDC != hDC)) dce = dce->next;
|
||||||
|
return dce ? dce->hwndCurrent : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DCE_InvalidateDCE
|
* DCE_InvalidateDCE
|
||||||
*
|
*
|
||||||
* It is called from SetWindowPos - we have to invalidate all busy
|
* It is called from SetWindowPos - we have to invalidate all busy
|
||||||
* DCE's for windows whose client rect intersects with update rectangle
|
* DCE's for windows whose client rect intersects with update rectangle
|
||||||
*/
|
*/
|
||||||
BOOL DCE_InvalidateDCE(WND* wndScope, RECT16* pRectUpdate)
|
BOOL32 DCE_InvalidateDCE(WND* wndScope, RECT16* pRectUpdate)
|
||||||
{
|
{
|
||||||
HANDLE hdce;
|
BOOL32 bRet = FALSE;
|
||||||
DCE* dce;
|
DCE *dce;
|
||||||
|
|
||||||
if( !wndScope ) return 0;
|
if( !wndScope ) return 0;
|
||||||
|
|
||||||
|
@ -151,10 +132,8 @@ BOOL DCE_InvalidateDCE(WND* wndScope, RECT16* pRectUpdate)
|
||||||
pRectUpdate->right,pRectUpdate->bottom);
|
pRectUpdate->right,pRectUpdate->bottom);
|
||||||
/* walk all DCE's */
|
/* walk all DCE's */
|
||||||
|
|
||||||
for( hdce = firstDCE; (hdce); hdce=dce->hNext)
|
for (dce = firstDCE; (dce); dce = dce->next)
|
||||||
{
|
{
|
||||||
dce = (DCE*)USER_HEAP_LIN_ADDR(hdce);
|
|
||||||
|
|
||||||
if( dce->DCXflags & DCX_DCEBUSY )
|
if( dce->DCXflags & DCX_DCEBUSY )
|
||||||
{
|
{
|
||||||
WND * wndCurrent, * wnd;
|
WND * wndCurrent, * wnd;
|
||||||
|
@ -177,12 +156,15 @@ BOOL DCE_InvalidateDCE(WND* wndScope, RECT16* pRectUpdate)
|
||||||
MapWindowPoints16(wndCurrent->parent->hwndSelf, wndScope->hwndSelf,
|
MapWindowPoints16(wndCurrent->parent->hwndSelf, wndScope->hwndSelf,
|
||||||
(LPPOINT16)&wndRect, 2);
|
(LPPOINT16)&wndRect, 2);
|
||||||
if( IntersectRect16(&wndRect,&wndRect,pRectUpdate) )
|
if( IntersectRect16(&wndRect,&wndRect,pRectUpdate) )
|
||||||
|
{
|
||||||
SetHookFlags(dce->hDC, DCHF_INVALIDATEVISRGN);
|
SetHookFlags(dce->hDC, DCHF_INVALIDATEVISRGN);
|
||||||
|
bRet = TRUE;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -191,13 +173,11 @@ BOOL DCE_InvalidateDCE(WND* wndScope, RECT16* pRectUpdate)
|
||||||
void DCE_Init()
|
void DCE_Init()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
HANDLE handle;
|
|
||||||
DCE * dce;
|
DCE * dce;
|
||||||
|
|
||||||
for (i = 0; i < NB_DCE; i++)
|
for (i = 0; i < NB_DCE; i++)
|
||||||
{
|
{
|
||||||
if (!(handle = DCE_AllocDCE( 0, DCE_CACHE_DC ))) return;
|
if (!(dce = DCE_AllocDCE( 0, DCE_CACHE_DC ))) return;
|
||||||
dce = (DCE *) USER_HEAP_LIN_ADDR( handle );
|
|
||||||
if (!defaultDCstate) defaultDCstate = GetDCState( dce->hDC );
|
if (!defaultDCstate) defaultDCstate = GetDCState( dce->hDC );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -400,14 +380,23 @@ static void DCE_SetDrawable( WND *wndPtr, DC *dc, WORD flags )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetDCEx (USER.359)
|
* GetDCEx16 (USER.359)
|
||||||
|
*/
|
||||||
|
HDC16 GetDCEx16( HWND16 hwnd, HRGN16 hrgnClip, DWORD flags )
|
||||||
|
{
|
||||||
|
return (HDC16)GetDCEx32( hwnd, hrgnClip, flags );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetDCEx32 (USER32.230)
|
||||||
*
|
*
|
||||||
* Unimplemented flags: DCX_LOCKWINDOWUPDATE
|
* Unimplemented flags: DCX_LOCKWINDOWUPDATE
|
||||||
*/
|
*/
|
||||||
HDC GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags )
|
HDC32 GetDCEx32( HWND32 hwnd, HRGN32 hrgnClip, DWORD flags )
|
||||||
{
|
{
|
||||||
HANDLE hdce;
|
|
||||||
HRGN hrgnVisible;
|
HRGN hrgnVisible;
|
||||||
HDC hdc = 0;
|
HDC hdc = 0;
|
||||||
DCE * dce;
|
DCE * dce;
|
||||||
|
@ -446,7 +435,8 @@ HDC GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags )
|
||||||
flags &= ~(DCX_PARENTCLIP | DCX_CLIPCHILDREN);
|
flags &= ~(DCX_PARENTCLIP | DCX_CLIPCHILDREN);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hwnd==GetDesktopWindow() || !(wndPtr->dwStyle & WS_CHILD)) flags &= ~DCX_PARENTCLIP;
|
if (hwnd == GetDesktopWindow32() || !(wndPtr->dwStyle & WS_CHILD))
|
||||||
|
flags &= ~DCX_PARENTCLIP;
|
||||||
|
|
||||||
if (flags & DCX_WINDOW) flags = (flags & ~DCX_CLIPCHILDREN) | DCX_CACHE;
|
if (flags & DCX_WINDOW) flags = (flags & ~DCX_CLIPCHILDREN) | DCX_CACHE;
|
||||||
|
|
||||||
|
@ -464,17 +454,14 @@ HDC GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags )
|
||||||
|
|
||||||
if (flags & DCX_CACHE)
|
if (flags & DCX_CACHE)
|
||||||
{
|
{
|
||||||
for (hdce = firstDCE; (hdce); hdce = dce->hNext)
|
for (dce = firstDCE; (dce); dce = dce->next)
|
||||||
{
|
{
|
||||||
if (!(dce = (DCE *) USER_HEAP_LIN_ADDR( hdce ))) return 0;
|
|
||||||
if ((dce->DCXflags & DCX_CACHE) && !(dce->DCXflags & DCX_DCEBUSY)) break;
|
if ((dce->DCXflags & DCX_CACHE) && !(dce->DCXflags & DCX_DCEBUSY)) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hdce = (wndPtr->class->style & CS_OWNDC)?wndPtr->hdce:wndPtr->class->hdce;
|
dce = (wndPtr->class->style & CS_OWNDC)?wndPtr->dce:wndPtr->class->dce;
|
||||||
dce = (DCE *) USER_HEAP_LIN_ADDR( hdce );
|
|
||||||
|
|
||||||
if( dce->hwndCurrent == hwnd )
|
if( dce->hwndCurrent == hwnd )
|
||||||
{
|
{
|
||||||
dprintf_dc(stddeb,"\tskipping hVisRgn update\n");
|
dprintf_dc(stddeb,"\tskipping hVisRgn update\n");
|
||||||
|
@ -491,8 +478,7 @@ HDC GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags )
|
||||||
|
|
||||||
dcx_flags = flags & ( DCX_CLIPSIBLINGS | DCX_CLIPCHILDREN | DCX_CACHE | DCX_WINDOW | DCX_WINDOWPAINT);
|
dcx_flags = flags & ( DCX_CLIPSIBLINGS | DCX_CLIPCHILDREN | DCX_CACHE | DCX_WINDOW | DCX_WINDOWPAINT);
|
||||||
|
|
||||||
if (!hdce) return 0;
|
if (!dce) return 0;
|
||||||
dce = (DCE *) USER_HEAP_LIN_ADDR( hdce );
|
|
||||||
dce->hwndCurrent = hwnd;
|
dce->hwndCurrent = hwnd;
|
||||||
dce->hClipRgn = 0;
|
dce->hClipRgn = 0;
|
||||||
dce->DCXflags = dcx_flags | DCX_DCEBUSY;
|
dce->DCXflags = dcx_flags | DCX_DCEBUSY;
|
||||||
|
@ -521,14 +507,25 @@ HDC GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags )
|
||||||
}
|
}
|
||||||
/* optimize away GetVisRgn for desktop if it isn't there */
|
/* optimize away GetVisRgn for desktop if it isn't there */
|
||||||
|
|
||||||
else if ((hwnd == GetDesktopWindow()) &&
|
else if ((hwnd == GetDesktopWindow32()) &&
|
||||||
(rootWindow == DefaultRootWindow(display)))
|
(rootWindow == DefaultRootWindow(display)))
|
||||||
hrgnVisible = CreateRectRgn( 0, 0, SYSMETRICS_CXSCREEN,
|
hrgnVisible = CreateRectRgn( 0, 0, SYSMETRICS_CXSCREEN,
|
||||||
SYSMETRICS_CYSCREEN);
|
SYSMETRICS_CYSCREEN);
|
||||||
else hrgnVisible = DCE_GetVisRgn( hwnd, flags );
|
else hrgnVisible = DCE_GetVisRgn( hwnd, flags );
|
||||||
|
|
||||||
dc->w.flags &= ~DC_DIRTY;
|
if( wndPtr->parent && wndPtr->window )
|
||||||
|
{
|
||||||
|
WND* wnd = wndPtr->parent->child;
|
||||||
|
RECT16 rect;
|
||||||
|
|
||||||
|
for( ; wnd != wndPtr; wnd = wnd->next )
|
||||||
|
if( wnd->class->style & CS_SAVEBITS &&
|
||||||
|
wnd->dwStyle & WS_VISIBLE &&
|
||||||
|
IntersectRect16(&rect, &wndPtr->rectClient, &wnd->rectClient) )
|
||||||
|
wnd->flags |= WIN_SAVEUNDER_OVERRIDE;
|
||||||
|
}
|
||||||
|
|
||||||
|
dc->w.flags &= ~DC_DIRTY;
|
||||||
SelectVisRgn( hdc, hrgnVisible );
|
SelectVisRgn( hdc, hrgnVisible );
|
||||||
}
|
}
|
||||||
else hrgnVisible = CreateRectRgn(0,0,0,0);
|
else hrgnVisible = CreateRectRgn(0,0,0,0);
|
||||||
|
@ -552,49 +549,67 @@ HDC GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags )
|
||||||
return hdc;
|
return hdc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* GetDC (USER.66)
|
|
||||||
*/
|
|
||||||
HDC GetDC( HWND hwnd )
|
|
||||||
{
|
|
||||||
if( !hwnd ) return GetDCEx( GetDesktopWindow(), 0, DCX_CACHE | DCX_WINDOW );
|
|
||||||
|
|
||||||
return GetDCEx( hwnd, 0, DCX_USESTYLE );
|
/***********************************************************************
|
||||||
|
* GetDC16 (USER.66)
|
||||||
|
*/
|
||||||
|
HDC16 GetDC16( HWND16 hwnd )
|
||||||
|
{
|
||||||
|
return (HDC16)GetDC32( hwnd );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetWindowDC (USER.67)
|
* GetDC32 (USER32.229)
|
||||||
*/
|
*/
|
||||||
HDC GetWindowDC( HWND hwnd )
|
HDC32 GetDC32( HWND32 hwnd )
|
||||||
{
|
{
|
||||||
if (hwnd)
|
if (!hwnd)
|
||||||
{
|
return GetDCEx32( GetDesktopWindow32(), 0, DCX_CACHE | DCX_WINDOW );
|
||||||
WND * wndPtr;
|
return GetDCEx32( hwnd, 0, DCX_USESTYLE );
|
||||||
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
|
|
||||||
}
|
|
||||||
else hwnd = GetDesktopWindow();
|
|
||||||
|
|
||||||
return GetDCEx( hwnd, 0, DCX_USESTYLE | DCX_WINDOW );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ReleaseDC (USER.68)
|
* GetWindowDC16 (USER.67)
|
||||||
*/
|
*/
|
||||||
int ReleaseDC( HWND hwnd, HDC hdc )
|
HDC16 GetWindowDC16( HWND16 hwnd )
|
||||||
{
|
{
|
||||||
HANDLE hdce;
|
if (!hwnd) hwnd = GetDesktopWindow16();
|
||||||
DCE * dce = NULL;
|
return GetDCEx16( hwnd, 0, DCX_USESTYLE | DCX_WINDOW );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetWindowDC32 (USER32.)
|
||||||
|
*/
|
||||||
|
HDC32 GetWindowDC32( HWND32 hwnd )
|
||||||
|
{
|
||||||
|
if (!hwnd) hwnd = GetDesktopWindow32();
|
||||||
|
return GetDCEx32( hwnd, 0, DCX_USESTYLE | DCX_WINDOW );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* ReleaseDC16 (USER.68)
|
||||||
|
*/
|
||||||
|
INT16 ReleaseDC16( HWND16 hwnd, HDC16 hdc )
|
||||||
|
{
|
||||||
|
return (INT32)ReleaseDC32( hwnd, hdc );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* ReleaseDC32 (USER32.439)
|
||||||
|
*/
|
||||||
|
INT32 ReleaseDC32( HWND32 hwnd, HDC32 hdc )
|
||||||
|
{
|
||||||
|
DCE * dce = firstDCE;
|
||||||
|
|
||||||
dprintf_dc(stddeb, "ReleaseDC: %04x %04x\n", hwnd, hdc );
|
dprintf_dc(stddeb, "ReleaseDC: %04x %04x\n", hwnd, hdc );
|
||||||
|
|
||||||
for (hdce = firstDCE; (hdce); hdce = dce->hNext)
|
while (dce && (dce->hDC != hdc)) dce = dce->next;
|
||||||
{
|
if (!dce) return 0;
|
||||||
if (!(dce = (DCE *) USER_HEAP_LIN_ADDR( hdce ))) return 0;
|
|
||||||
if (dce->hDC == hdc) break;
|
|
||||||
}
|
|
||||||
if (!hdce) return 0;
|
|
||||||
if (!(dce->DCXflags & DCX_DCEBUSY) ) return 0;
|
if (!(dce->DCXflags & DCX_DCEBUSY) ) return 0;
|
||||||
|
|
||||||
/* restore previous visible region */
|
/* restore previous visible region */
|
||||||
|
@ -631,24 +646,18 @@ int ReleaseDC( HWND hwnd, HDC hdc )
|
||||||
*/
|
*/
|
||||||
BOOL DCHook(HDC hDC, WORD code, DWORD data, DWORD lParam)
|
BOOL DCHook(HDC hDC, WORD code, DWORD data, DWORD lParam)
|
||||||
{
|
{
|
||||||
HANDLE hdce;
|
HRGN32 hVisRgn;
|
||||||
HRGN hVisRgn;
|
DCE *dce = firstDCE;;
|
||||||
|
|
||||||
dprintf_dc(stddeb,"DCHook: hDC = %04x, %i\n", hDC, code);
|
dprintf_dc(stddeb,"DCHook: hDC = %04x, %i\n", hDC, code);
|
||||||
|
|
||||||
if( HIWORD(data) == DC_MAGIC )
|
while (dce && (dce->hDC != hDC)) dce = dce->next;
|
||||||
hdce = (HANDLE)LOWORD(data);
|
if (!dce) return 0;
|
||||||
else
|
|
||||||
hdce = DCE_FindDCE(hDC);
|
|
||||||
|
|
||||||
if( !hdce ) return 0;
|
|
||||||
|
|
||||||
switch( code )
|
switch( code )
|
||||||
{
|
{
|
||||||
case DCHC_INVALIDVISRGN:
|
case DCHC_INVALIDVISRGN:
|
||||||
{
|
{
|
||||||
DCE* dce = (DCE*) USER_HEAP_LIN_ADDR(hdce);
|
|
||||||
|
|
||||||
if( dce->DCXflags & DCX_DCEBUSY )
|
if( dce->DCXflags & DCX_DCEBUSY )
|
||||||
{
|
{
|
||||||
SetHookFlags(hDC, DCHF_VALIDATEVISRGN);
|
SetHookFlags(hDC, DCHF_VALIDATEVISRGN);
|
||||||
|
|
|
@ -29,31 +29,6 @@
|
||||||
static short iF10Key = 0;
|
static short iF10Key = 0;
|
||||||
static short iMenuSysKey = 0;
|
static short iMenuSysKey = 0;
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* DEFWND_InitSysMenuPopup
|
|
||||||
*
|
|
||||||
* Handle the WM_INITMENUPOPUP message on the system menu.
|
|
||||||
*/
|
|
||||||
static void DEFWND_InitSysMenuPopup( HMENU hmenu, DWORD style, DWORD clsStyle )
|
|
||||||
{
|
|
||||||
BOOL gray;
|
|
||||||
|
|
||||||
gray = !(style & WS_THICKFRAME) || (style & (WS_MAXIMIZE | WS_MINIMIZE));
|
|
||||||
EnableMenuItem( hmenu, SC_SIZE, (gray ? MF_GRAYED : MF_ENABLED) );
|
|
||||||
gray = ((style & WS_MAXIMIZE) != 0);
|
|
||||||
EnableMenuItem( hmenu, SC_MOVE, (gray ? MF_GRAYED : MF_ENABLED) );
|
|
||||||
gray = !(style & WS_MINIMIZEBOX) || (style & WS_MINIMIZE);
|
|
||||||
EnableMenuItem( hmenu, SC_MINIMIZE, (gray ? MF_GRAYED : MF_ENABLED) );
|
|
||||||
gray = !(style & WS_MAXIMIZEBOX) || (style & WS_MAXIMIZE);
|
|
||||||
EnableMenuItem( hmenu, SC_MAXIMIZE, (gray ? MF_GRAYED : MF_ENABLED) );
|
|
||||||
gray = !(style & (WS_MAXIMIZE | WS_MINIMIZE));
|
|
||||||
EnableMenuItem( hmenu, SC_RESTORE, (gray ? MF_GRAYED : MF_ENABLED) );
|
|
||||||
gray = (clsStyle & CS_NOCLOSE) != 0;
|
|
||||||
EnableMenuItem( hmenu, SC_CLOSE, (gray ? MF_GRAYED : MF_ENABLED) );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DEFWND_HandleWindowPosChanged
|
* DEFWND_HandleWindowPosChanged
|
||||||
*
|
*
|
||||||
|
@ -322,17 +297,10 @@ static LRESULT DEFWND_DefWinProc( WND *wndPtr, UINT32 msg, WPARAM32 wParam,
|
||||||
ShowWindow( wndPtr->hwndSelf, wParam ? SW_SHOWNOACTIVATE : SW_HIDE );
|
ShowWindow( wndPtr->hwndSelf, wParam ? SW_SHOWNOACTIVATE : SW_HIDE );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_INITMENUPOPUP:
|
|
||||||
/* Not absolutely sure this belongs here -- AJ */
|
|
||||||
if (HIWORD(lParam)) /* system menu */
|
|
||||||
DEFWND_InitSysMenuPopup( (HMENU)wParam, wndPtr->dwStyle,
|
|
||||||
wndPtr->class->style );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_CANCELMODE:
|
case WM_CANCELMODE:
|
||||||
/* EndMenu() should be called if in menu state but currently it's
|
/* EndMenu() should be called if in menu state but currently it's
|
||||||
impossible to detect - menu code should be updated*/
|
impossible to detect - menu code should be updated*/
|
||||||
if (GetCapture() == wndPtr->hwndSelf) ReleaseCapture();
|
if (GetCapture32() == wndPtr->hwndSelf) ReleaseCapture();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_VKEYTOITEM:
|
case WM_VKEYTOITEM:
|
||||||
|
|
|
@ -514,13 +514,12 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCSTR dlgTemplate,
|
||||||
{
|
{
|
||||||
TEXTMETRIC16 tm;
|
TEXTMETRIC16 tm;
|
||||||
HFONT oldFont;
|
HFONT oldFont;
|
||||||
HDC hdc;
|
|
||||||
|
|
||||||
hdc = GetDC(0);
|
HDC32 hdc = GetDC32(0);
|
||||||
oldFont = SelectObject( hdc, hFont );
|
oldFont = SelectObject( hdc, hFont );
|
||||||
GetTextMetrics16( hdc, &tm );
|
GetTextMetrics16( hdc, &tm );
|
||||||
SelectObject( hdc, oldFont );
|
SelectObject( hdc, oldFont );
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
xUnit = tm.tmAveCharWidth;
|
xUnit = tm.tmAveCharWidth;
|
||||||
yUnit = tm.tmHeight;
|
yUnit = tm.tmHeight;
|
||||||
if (tm.tmPitchAndFamily & TMPF_FIXED_PITCH)
|
if (tm.tmPitchAndFamily & TMPF_FIXED_PITCH)
|
||||||
|
@ -744,8 +743,8 @@ static INT32 DIALOG_DoDialogBox( HWND hwnd, HWND owner )
|
||||||
if (dlgInfo->fEnd) break;
|
if (dlgInfo->fEnd) break;
|
||||||
}
|
}
|
||||||
retval = dlgInfo->msgResult;
|
retval = dlgInfo->msgResult;
|
||||||
DestroyWindow( hwnd );
|
|
||||||
EnableWindow( owner, TRUE );
|
EnableWindow( owner, TRUE );
|
||||||
|
DestroyWindow( hwnd );
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -897,7 +896,7 @@ BOOL IsDialogMessage( HWND hwndDlg, LPMSG16 msg )
|
||||||
if (!(dlgCode & DLGC_WANTTAB))
|
if (!(dlgCode & DLGC_WANTTAB))
|
||||||
{
|
{
|
||||||
SendMessage16( hwndDlg, WM_NEXTDLGCTL,
|
SendMessage16( hwndDlg, WM_NEXTDLGCTL,
|
||||||
(GetKeyState(VK_SHIFT) & 0x80), 0 );
|
(GetKeyState(VK_SHIFT) & 0x8000), 0 );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
151
windows/event.c
151
windows/event.c
|
@ -22,17 +22,18 @@
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "gdi.h"
|
#include "gdi.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
|
#include "queue.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "class.h"
|
#include "class.h"
|
||||||
#include "clipboard.h"
|
#include "clipboard.h"
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "hook.h"
|
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
#include "winpos.h"
|
#include "winpos.h"
|
||||||
#include "registers.h"
|
#include "registers.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "dde_proc.h"
|
#include "dde_proc.h"
|
||||||
|
@ -52,8 +53,8 @@ BYTE AsyncKeyStateTable[256];
|
||||||
WPARAM lastEventChar = 0; /* this will have to be changed once
|
WPARAM lastEventChar = 0; /* this will have to be changed once
|
||||||
* ToAscii starts working */
|
* ToAscii starts working */
|
||||||
|
|
||||||
static HWND captureWnd = 0;
|
static HWND32 captureWnd = 0;
|
||||||
static BOOL InputEnabled = TRUE;
|
static BOOL32 InputEnabled = TRUE;
|
||||||
|
|
||||||
/* Keyboard translation tables */
|
/* Keyboard translation tables */
|
||||||
static const int special_key[] =
|
static const int special_key[] =
|
||||||
|
@ -174,17 +175,17 @@ void EVENT_ProcessEvent( XEvent *event )
|
||||||
{
|
{
|
||||||
case KeyPress:
|
case KeyPress:
|
||||||
case KeyRelease:
|
case KeyRelease:
|
||||||
if (!HOOK_GetHook(WH_JOURNALPLAYBACK, 0) )
|
if (InputEnabled)
|
||||||
EVENT_key( (XKeyEvent*)event );
|
EVENT_key( (XKeyEvent*)event );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ButtonPress:
|
case ButtonPress:
|
||||||
if (!HOOK_GetHook(WH_JOURNALPLAYBACK, 0) )
|
if (InputEnabled)
|
||||||
EVENT_ButtonPress( (XButtonEvent*)event );
|
EVENT_ButtonPress( (XButtonEvent*)event );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ButtonRelease:
|
case ButtonRelease:
|
||||||
if (!HOOK_GetHook(WH_JOURNALPLAYBACK, 0) )
|
if (InputEnabled)
|
||||||
EVENT_ButtonRelease( (XButtonEvent*)event );
|
EVENT_ButtonRelease( (XButtonEvent*)event );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -197,7 +198,7 @@ void EVENT_ProcessEvent( XEvent *event )
|
||||||
problems if the event order is important. I'm not yet seen
|
problems if the event order is important. I'm not yet seen
|
||||||
of any problems. Jon 7/6/96.
|
of any problems. Jon 7/6/96.
|
||||||
*/
|
*/
|
||||||
if (!HOOK_GetHook(WH_JOURNALPLAYBACK, 0) )
|
if (InputEnabled)
|
||||||
{
|
{
|
||||||
while (XCheckTypedWindowEvent(display,((XAnyEvent *)event)->window,
|
while (XCheckTypedWindowEvent(display,((XAnyEvent *)event)->window,
|
||||||
MotionNotify, event));
|
MotionNotify, event));
|
||||||
|
@ -240,6 +241,7 @@ void EVENT_ProcessEvent( XEvent *event )
|
||||||
case ClientMessage:
|
case ClientMessage:
|
||||||
EVENT_ClientMessage( pWnd, (XClientMessageEvent *) event );
|
EVENT_ClientMessage( pWnd, (XClientMessageEvent *) event );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* case EnterNotify:
|
/* case EnterNotify:
|
||||||
* EVENT_EnterNotify( pWnd, (XCrossingEvent *) event );
|
* EVENT_EnterNotify( pWnd, (XCrossingEvent *) event );
|
||||||
* break;
|
* break;
|
||||||
|
@ -287,7 +289,7 @@ void EVENT_RegisterWindow( WND *pWnd )
|
||||||
* Return TRUE if an event is pending, FALSE on timeout or error
|
* Return TRUE if an event is pending, FALSE on timeout or error
|
||||||
* (for instance lost connection with the server).
|
* (for instance lost connection with the server).
|
||||||
*/
|
*/
|
||||||
BOOL32 EVENT_WaitXEvent( BOOL32 sleep )
|
BOOL32 EVENT_WaitXEvent( BOOL32 sleep, BOOL32 peek )
|
||||||
{
|
{
|
||||||
fd_set read_set;
|
fd_set read_set;
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
|
@ -335,6 +337,7 @@ BOOL32 EVENT_WaitXEvent( BOOL32 sleep )
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Process the event (and possibly others that occurred in the meantime) */
|
/* Process the event (and possibly others that occurred in the meantime) */
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -347,6 +350,37 @@ BOOL32 EVENT_WaitXEvent( BOOL32 sleep )
|
||||||
#endif /* CONFIG_IPC */
|
#endif /* CONFIG_IPC */
|
||||||
|
|
||||||
XNextEvent( display, &event );
|
XNextEvent( display, &event );
|
||||||
|
|
||||||
|
if( peek )
|
||||||
|
{
|
||||||
|
WND* pWnd;
|
||||||
|
MESSAGEQUEUE* pQ;
|
||||||
|
|
||||||
|
if( XFindContext( display, ((XAnyEvent *)&event)->window, winContext, (char **)&pWnd)
|
||||||
|
|| event.type == NoExpose )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* check for the "safe" hardware events */
|
||||||
|
|
||||||
|
if( event.type == MotionNotify ||
|
||||||
|
event.type == ButtonPress || event.type == ButtonRelease ||
|
||||||
|
event.type == KeyPress || event.type == KeyRelease ||
|
||||||
|
event.type == SelectionRequest || event.type == SelectionClear )
|
||||||
|
{
|
||||||
|
EVENT_ProcessEvent( &event );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( pWnd )
|
||||||
|
if( (pQ = (MESSAGEQUEUE*)GlobalLock16(pWnd->hmemTaskQ)) )
|
||||||
|
{
|
||||||
|
pQ->flags |= QUEUE_FLAG_XEVENT;
|
||||||
|
PostEvent(pQ->hTask);
|
||||||
|
XPutBackEvent(display, &event);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
EVENT_ProcessEvent( &event );
|
EVENT_ProcessEvent( &event );
|
||||||
}
|
}
|
||||||
while (XPending( display ));
|
while (XPending( display ));
|
||||||
|
@ -684,7 +718,7 @@ static void EVENT_ConfigureNotify( HWND hwnd, XConfigureEvent *event )
|
||||||
* window structure is created. WIN_GetDesktop() check is a hack.
|
* window structure is created. WIN_GetDesktop() check is a hack.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ( !WIN_GetDesktop() || hwnd == GetDesktopWindow())
|
if ( !WIN_GetDesktop() || hwnd == GetDesktopWindow32())
|
||||||
{
|
{
|
||||||
desktopX = event->x;
|
desktopX = event->x;
|
||||||
desktopY = event->y;
|
desktopY = event->y;
|
||||||
|
@ -702,6 +736,9 @@ static void EVENT_ConfigureNotify( HWND hwnd, XConfigureEvent *event )
|
||||||
|
|
||||||
if (!(winpos = SEGPTR_NEW(WINDOWPOS16))) return;
|
if (!(winpos = SEGPTR_NEW(WINDOWPOS16))) return;
|
||||||
|
|
||||||
|
/* XTranslateCoordinates(display, event->window, rootWindow,
|
||||||
|
event->x, event->y, &event->x, &event->y, &child);
|
||||||
|
*/
|
||||||
|
|
||||||
/* Fill WINDOWPOS struct */
|
/* Fill WINDOWPOS struct */
|
||||||
winpos->flags = SWP_NOACTIVATE | SWP_NOZORDER;
|
winpos->flags = SWP_NOACTIVATE | SWP_NOZORDER;
|
||||||
|
@ -765,23 +802,44 @@ static void EVENT_SelectionRequest( WND *pWnd, XSelectionRequestEvent *event )
|
||||||
{
|
{
|
||||||
HANDLE hText;
|
HANDLE hText;
|
||||||
LPSTR text;
|
LPSTR text;
|
||||||
|
int size,i,j;
|
||||||
|
|
||||||
rprop = event->property;
|
rprop = event->property;
|
||||||
|
|
||||||
if(rprop == None) rprop = event->target;
|
if(rprop == None) rprop = event->target;
|
||||||
|
|
||||||
if(event->selection!=XA_PRIMARY) rprop = None;
|
if(event->selection!=XA_PRIMARY) rprop = None;
|
||||||
else if(!CLIPBOARD_IsPresent(CF_TEXT)) rprop = None;
|
else if(!CLIPBOARD_IsPresent(CF_OEMTEXT)) rprop = None;
|
||||||
else{
|
else
|
||||||
/* Don't worry if we can't open */
|
{
|
||||||
BOOL couldOpen=OpenClipboard( pWnd->hwndSelf );
|
/* open to make sure that clipboard is available */
|
||||||
hText=GetClipboardData(CF_TEXT);
|
|
||||||
text=GlobalLock16(hText);
|
BOOL couldOpen = OpenClipboard( pWnd->hwndSelf );
|
||||||
XChangeProperty(display,request,rprop,XA_STRING,
|
char* lpstr = 0;
|
||||||
8,PropModeReplace,text,strlen(text));
|
|
||||||
GlobalUnlock16(hText);
|
hText = GetClipboardData(CF_TEXT);
|
||||||
|
text = GlobalLock16(hText);
|
||||||
|
size = GlobalSize16(hText);
|
||||||
|
|
||||||
|
/* remove carriage returns */
|
||||||
|
|
||||||
|
lpstr = (char*)xmalloc(size--);
|
||||||
|
for(i=0,j=0; i < size; i++ )
|
||||||
|
{
|
||||||
|
if( text[i] == '\r' && text[i+1] == '\n' ) continue;
|
||||||
|
lpstr[j++] = text[i];
|
||||||
|
if( text[i] == '\0' ) break;
|
||||||
|
}
|
||||||
|
lpstr[j]='\0';
|
||||||
|
|
||||||
|
XChangeProperty(display, request, rprop,
|
||||||
|
XA_STRING, 8, PropModeReplace,
|
||||||
|
lpstr, j);
|
||||||
|
free(lpstr);
|
||||||
|
|
||||||
/* close only if we opened before */
|
/* close only if we opened before */
|
||||||
if(couldOpen)CloseClipboard();
|
|
||||||
|
if(couldOpen) CloseClipboard();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -805,8 +863,11 @@ static void EVENT_SelectionRequest( WND *pWnd, XSelectionRequestEvent *event )
|
||||||
static void EVENT_SelectionNotify( XSelectionEvent *event )
|
static void EVENT_SelectionNotify( XSelectionEvent *event )
|
||||||
{
|
{
|
||||||
if (event->selection != XA_PRIMARY) return;
|
if (event->selection != XA_PRIMARY) return;
|
||||||
|
|
||||||
if (event->target != XA_STRING) CLIPBOARD_ReadSelection( 0, None );
|
if (event->target != XA_STRING) CLIPBOARD_ReadSelection( 0, None );
|
||||||
CLIPBOARD_ReadSelection( event->requestor, event->property );
|
else CLIPBOARD_ReadSelection( event->requestor, event->property );
|
||||||
|
|
||||||
|
dprintf_clipboard(stddeb,"\tSelectionNotify done!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -816,7 +877,7 @@ static void EVENT_SelectionNotify( XSelectionEvent *event )
|
||||||
static void EVENT_SelectionClear( WND *pWnd, XSelectionClearEvent *event )
|
static void EVENT_SelectionClear( WND *pWnd, XSelectionClearEvent *event )
|
||||||
{
|
{
|
||||||
if (event->selection != XA_PRIMARY) return;
|
if (event->selection != XA_PRIMARY) return;
|
||||||
CLIPBOARD_ReleaseSelection( pWnd->hwndSelf );
|
CLIPBOARD_ReleaseSelection( event->window, pWnd->hwndSelf );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -857,6 +918,8 @@ static void EVENT_ClientMessage( WND *pWnd, XClientMessageEvent *event )
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
extern void FOCUS_SetXFocus( HWND32 );
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* EVENT_MapNotify
|
* EVENT_MapNotify
|
||||||
*/
|
*/
|
||||||
|
@ -865,18 +928,28 @@ void EVENT_MapNotify( HWND hWnd, XMapEvent *event )
|
||||||
HWND32 hwndFocus = GetFocus32();
|
HWND32 hwndFocus = GetFocus32();
|
||||||
|
|
||||||
if (hwndFocus && IsChild( hWnd, hwndFocus ))
|
if (hwndFocus && IsChild( hWnd, hwndFocus ))
|
||||||
FOCUS_SetXFocus( hwndFocus );
|
FOCUS_SetXFocus( (HWND32)hwndFocus );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* SetCapture (USER.18)
|
* SetCapture16 (USER.18)
|
||||||
*/
|
*/
|
||||||
HWND SetCapture( HWND hwnd )
|
HWND16 SetCapture16( HWND16 hwnd )
|
||||||
|
{
|
||||||
|
return (HWND16)SetCapture32( hwnd );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* SetCapture32 (USER32.463)
|
||||||
|
*/
|
||||||
|
HWND32 SetCapture32( HWND32 hwnd )
|
||||||
{
|
{
|
||||||
Window win;
|
Window win;
|
||||||
HWND old_capture_wnd = captureWnd;
|
HWND32 old_capture_wnd = captureWnd;
|
||||||
|
|
||||||
if (!hwnd)
|
if (!hwnd)
|
||||||
{
|
{
|
||||||
|
@ -898,9 +971,9 @@ HWND SetCapture( HWND hwnd )
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* ReleaseCapture (USER.19)
|
* ReleaseCapture (USER.19) (USER32.438)
|
||||||
*/
|
*/
|
||||||
void ReleaseCapture()
|
void ReleaseCapture(void)
|
||||||
{
|
{
|
||||||
if (captureWnd == 0) return;
|
if (captureWnd == 0) return;
|
||||||
XUngrabPointer( display, CurrentTime );
|
XUngrabPointer( display, CurrentTime );
|
||||||
|
@ -908,10 +981,20 @@ void ReleaseCapture()
|
||||||
dprintf_win(stddeb, "ReleaseCapture\n");
|
dprintf_win(stddeb, "ReleaseCapture\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* GetCapture (USER.236)
|
* GetCapture16 (USER.236)
|
||||||
*/
|
*/
|
||||||
HWND GetCapture()
|
HWND16 GetCapture16(void)
|
||||||
|
{
|
||||||
|
return (HWND16)captureWnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* GetCapture32 (USER32.207)
|
||||||
|
*/
|
||||||
|
HWND32 GetCapture32(void)
|
||||||
{
|
{
|
||||||
return captureWnd;
|
return captureWnd;
|
||||||
}
|
}
|
||||||
|
@ -971,13 +1054,13 @@ void Mouse_Event( SIGCONTEXT *context )
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* EnableHardwareInput [USER.331]
|
* EnableHardwareInput (USER.331)
|
||||||
*/
|
*/
|
||||||
BOOL EnableHardwareInput(BOOL bEnable)
|
BOOL16 EnableHardwareInput(BOOL16 bEnable)
|
||||||
{
|
{
|
||||||
BOOL bOldState = InputEnabled;
|
BOOL16 bOldState = InputEnabled;
|
||||||
dprintf_event(stdnimp,"EMPTY STUB !!! EnableHardwareInput(%d);\n", bEnable);
|
dprintf_event(stdnimp,"EnableHardwareInput(%d);\n", bEnable);
|
||||||
InputEnabled = bEnable;
|
InputEnabled = bEnable;
|
||||||
return (bOldState && !bEnable);
|
return bOldState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#ifndef PI
|
#ifndef PI
|
||||||
#define PI M_PI
|
#define PI M_PI
|
||||||
#endif
|
#endif
|
||||||
|
#include "graphics.h"
|
||||||
#include "dc.h"
|
#include "dc.h"
|
||||||
#include "bitmap.h"
|
#include "bitmap.h"
|
||||||
#include "callback.h"
|
#include "callback.h"
|
||||||
|
@ -279,6 +280,7 @@ BOOL Ellipse( HDC hdc, INT left, INT top, INT right, INT bottom )
|
||||||
*/
|
*/
|
||||||
BOOL Rectangle( HDC hdc, INT left, INT top, INT right, INT bottom )
|
BOOL Rectangle( HDC hdc, INT left, INT top, INT right, INT bottom )
|
||||||
{
|
{
|
||||||
|
INT32 width;
|
||||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||||
if (!dc)
|
if (!dc)
|
||||||
{
|
{
|
||||||
|
@ -305,21 +307,24 @@ BOOL Rectangle( HDC hdc, INT left, INT top, INT right, INT bottom )
|
||||||
dc->w.DCOrgY + bottom);
|
dc->w.DCOrgY + bottom);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
width = dc->u.x.pen.width;
|
||||||
|
if (!width) width = 1;
|
||||||
|
if(dc->u.x.pen.style == PS_NULL) width = 0;
|
||||||
|
|
||||||
if ((dc->u.x.pen.style == PS_INSIDEFRAME) &&
|
if ((dc->u.x.pen.style == PS_INSIDEFRAME) &&
|
||||||
(dc->u.x.pen.width < right-left) &&
|
(width < right-left) && (width < bottom-top))
|
||||||
(dc->u.x.pen.width < bottom-top))
|
|
||||||
{
|
{
|
||||||
left += dc->u.x.pen.width / 2;
|
left += width / 2;
|
||||||
right -= (dc->u.x.pen.width + 1) / 2;
|
right -= (width + 1) / 2;
|
||||||
top += dc->u.x.pen.width / 2;
|
top += width / 2;
|
||||||
bottom -= (dc->u.x.pen.width + 1) / 2;
|
bottom -= (width + 1) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DC_SetupGCForBrush( dc ))
|
if (DC_SetupGCForBrush( dc ))
|
||||||
XFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
|
XFillRectangle( display, dc->u.x.drawable, dc->u.x.gc,
|
||||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
dc->w.DCOrgX + left + (width + 1) / 2,
|
||||||
right-left, bottom-top );
|
dc->w.DCOrgY + top + (width + 1) / 2,
|
||||||
|
right-left-width-1, bottom-top-width-1);
|
||||||
if (DC_SetupGCForPen( dc ))
|
if (DC_SetupGCForPen( dc ))
|
||||||
XDrawRectangle( display, dc->u.x.drawable, dc->u.x.gc,
|
XDrawRectangle( display, dc->u.x.drawable, dc->u.x.gc,
|
||||||
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
dc->w.DCOrgX + left, dc->w.DCOrgY + top,
|
||||||
|
@ -745,7 +750,7 @@ void DrawFocusRect32( HDC32 hdc, const RECT32* rect )
|
||||||
* Short-cut function to blit a bitmap into a device.
|
* Short-cut function to blit a bitmap into a device.
|
||||||
* Faster than CreateCompatibleDC() + SelectBitmap() + BitBlt() + DeleteDC().
|
* Faster than CreateCompatibleDC() + SelectBitmap() + BitBlt() + DeleteDC().
|
||||||
*/
|
*/
|
||||||
BOOL GRAPH_DrawBitmap( HDC hdc, HBITMAP hbitmap, int xdest, int ydest,
|
BOOL32 GRAPH_DrawBitmap( HDC32 hdc, HBITMAP32 hbitmap, int xdest, int ydest,
|
||||||
int xsrc, int ysrc, int width, int height )
|
int xsrc, int ysrc, int width, int height )
|
||||||
{
|
{
|
||||||
BITMAPOBJ *bmp;
|
BITMAPOBJ *bmp;
|
||||||
|
@ -778,8 +783,8 @@ BOOL GRAPH_DrawBitmap( HDC hdc, HBITMAP hbitmap, int xdest, int ydest,
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* GRAPH_DrawReliefRect (Not a MSWin Call)
|
* GRAPH_DrawReliefRect (Not a MSWin Call)
|
||||||
*/
|
*/
|
||||||
void GRAPH_DrawReliefRect( HDC hdc, RECT16 *rect, int highlight_size,
|
void GRAPH_DrawReliefRect( HDC32 hdc, const RECT32 *rect, INT32 highlight_size,
|
||||||
int shadow_size, BOOL pressed )
|
INT32 shadow_size, BOOL32 pressed )
|
||||||
{
|
{
|
||||||
HBRUSH hbrushOld;
|
HBRUSH hbrushOld;
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -37,7 +37,7 @@ static HANDLE16 HOOK_GetNextHook( HANDLE16 hook )
|
||||||
if (data->next) return data->next;
|
if (data->next) return data->next;
|
||||||
if (!data->ownerQueue) return 0; /* Already system hook */
|
if (!data->ownerQueue) return 0; /* Already system hook */
|
||||||
/* Now start enumerating the system hooks */
|
/* Now start enumerating the system hooks */
|
||||||
return HOOK_systemHooks[data->id - WH_FIRST_HOOK];
|
return HOOK_systemHooks[data->id - WH_MINHOOK];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,8 +52,8 @@ HANDLE16 HOOK_GetHook( INT16 id , HQUEUE16 hQueue )
|
||||||
HANDLE16 hook = 0;
|
HANDLE16 hook = 0;
|
||||||
|
|
||||||
if ((queue = (MESSAGEQUEUE *)GlobalLock16( hQueue )) != NULL)
|
if ((queue = (MESSAGEQUEUE *)GlobalLock16( hQueue )) != NULL)
|
||||||
hook = queue->hooks[id - WH_FIRST_HOOK];
|
hook = queue->hooks[id - WH_MINHOOK];
|
||||||
if (!hook) hook = HOOK_systemHooks[id - WH_FIRST_HOOK];
|
if (!hook) hook = HOOK_systemHooks[id - WH_MINHOOK];
|
||||||
return hook;
|
return hook;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ static HANDLE16 HOOK_SetHook( INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst,
|
||||||
HANDLE16 handle;
|
HANDLE16 handle;
|
||||||
HQUEUE16 hQueue = 0;
|
HQUEUE16 hQueue = 0;
|
||||||
|
|
||||||
if ((id < WH_FIRST_HOOK) || (id > WH_LAST_HOOK)) return 0;
|
if ((id < WH_MINHOOK) || (id > WH_MAXHOOK)) return 0;
|
||||||
if (!(hInst = GetExePtr( hInst ))) return 0;
|
if (!(hInst = GetExePtr( hInst ))) return 0;
|
||||||
|
|
||||||
dprintf_hook( stddeb, "Setting hook %d: %08x %04x %04x\n",
|
dprintf_hook( stddeb, "Setting hook %d: %08x %04x %04x\n",
|
||||||
|
@ -83,11 +83,18 @@ static HANDLE16 HOOK_SetHook( INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst,
|
||||||
if (!(hQueue = GetTaskQueue( hTask ))) return 0;
|
if (!(hQueue = GetTaskQueue( hTask ))) return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (id == WH_CBT || id == WH_DEBUG || id == WH_SHELL)
|
if (id == WH_DEBUG)
|
||||||
{
|
{
|
||||||
fprintf( stdnimp, "Unimplemented hook set: (%d,%08lx,%04x,%04x)!\n",
|
fprintf( stdnimp,"WH_DEBUG is broken in 16-bit Windows.\n");
|
||||||
id, (DWORD)proc, hInst, hTask );
|
return 0;
|
||||||
}
|
}
|
||||||
|
else if (id == WH_CBT || id == WH_SHELL)
|
||||||
|
{
|
||||||
|
fprintf( stdnimp, "Half-implemented hook set: (%s,%08lx,%04x,%04x)!\n",
|
||||||
|
(id==WH_CBT)?"WH_CBT":"WH_SHELL", (DWORD)proc, hInst, hTask );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (id == WH_JOURNALPLAYBACK) EnableHardwareInput(FALSE);
|
||||||
|
|
||||||
/* Create the hook structure */
|
/* Create the hook structure */
|
||||||
|
|
||||||
|
@ -105,13 +112,13 @@ static HANDLE16 HOOK_SetHook( INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst,
|
||||||
if (hQueue)
|
if (hQueue)
|
||||||
{
|
{
|
||||||
MESSAGEQUEUE *queue = (MESSAGEQUEUE *)GlobalLock16( hQueue );
|
MESSAGEQUEUE *queue = (MESSAGEQUEUE *)GlobalLock16( hQueue );
|
||||||
data->next = queue->hooks[id - WH_FIRST_HOOK];
|
data->next = queue->hooks[id - WH_MINHOOK];
|
||||||
queue->hooks[id - WH_FIRST_HOOK] = handle;
|
queue->hooks[id - WH_MINHOOK] = handle;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
data->next = HOOK_systemHooks[id - WH_FIRST_HOOK];
|
data->next = HOOK_systemHooks[id - WH_MINHOOK];
|
||||||
HOOK_systemHooks[id - WH_FIRST_HOOK] = handle;
|
HOOK_systemHooks[id - WH_MINHOOK] = handle;
|
||||||
}
|
}
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
@ -138,15 +145,17 @@ static BOOL32 HOOK_RemoveHook( HANDLE16 hook )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data->id == WH_JOURNALPLAYBACK) EnableHardwareInput(TRUE);
|
||||||
|
|
||||||
/* Remove it from the linked list */
|
/* Remove it from the linked list */
|
||||||
|
|
||||||
if (data->ownerQueue)
|
if (data->ownerQueue)
|
||||||
{
|
{
|
||||||
MESSAGEQUEUE *queue = (MESSAGEQUEUE *)GlobalLock16( data->ownerQueue );
|
MESSAGEQUEUE *queue = (MESSAGEQUEUE *)GlobalLock16( data->ownerQueue );
|
||||||
if (!queue) return FALSE;
|
if (!queue) return FALSE;
|
||||||
prevHook = &queue->hooks[data->id - WH_FIRST_HOOK];
|
prevHook = &queue->hooks[data->id - WH_MINHOOK];
|
||||||
}
|
}
|
||||||
else prevHook = &HOOK_systemHooks[data->id - WH_FIRST_HOOK];
|
else prevHook = &HOOK_systemHooks[data->id - WH_MINHOOK];
|
||||||
|
|
||||||
while (*prevHook && *prevHook != hook)
|
while (*prevHook && *prevHook != hook)
|
||||||
prevHook = &((HOOKDATA *)USER_HEAP_LIN_ADDR(*prevHook))->next;
|
prevHook = &((HOOKDATA *)USER_HEAP_LIN_ADDR(*prevHook))->next;
|
||||||
|
@ -224,9 +233,9 @@ void HOOK_FreeModuleHooks( HMODULE16 hModule )
|
||||||
HHOOK hook, next;
|
HHOOK hook, next;
|
||||||
int id;
|
int id;
|
||||||
|
|
||||||
for( id = WH_FIRST_HOOK; id <= WH_LAST_HOOK; id++ )
|
for( id = WH_MINHOOK; id <= WH_MAXHOOK; id++ )
|
||||||
{
|
{
|
||||||
hook = HOOK_systemHooks[id - WH_FIRST_HOOK];
|
hook = HOOK_systemHooks[id - WH_MINHOOK];
|
||||||
while( hook )
|
while( hook )
|
||||||
if( (hptr = (HOOKDATA *)USER_HEAP_LIN_ADDR(hook)) )
|
if( (hptr = (HOOKDATA *)USER_HEAP_LIN_ADDR(hook)) )
|
||||||
{
|
{
|
||||||
|
@ -253,7 +262,7 @@ void HOOK_FreeQueueHooks( HQUEUE16 hQueue )
|
||||||
HHOOK hook, next;
|
HHOOK hook, next;
|
||||||
int id;
|
int id;
|
||||||
|
|
||||||
for( id = WH_FIRST_HOOK; id <= WH_LAST_HOOK; id++ )
|
for( id = WH_MINHOOK; id <= WH_MAXHOOK; id++ )
|
||||||
{
|
{
|
||||||
hook = HOOK_GetHook( id, hQueue );
|
hook = HOOK_GetHook( id, hQueue );
|
||||||
while( hook )
|
while( hook )
|
||||||
|
@ -277,15 +286,10 @@ void HOOK_FreeQueueHooks( HQUEUE16 hQueue )
|
||||||
FARPROC16 SetWindowsHook( INT16 id, HOOKPROC16 proc )
|
FARPROC16 SetWindowsHook( INT16 id, HOOKPROC16 proc )
|
||||||
{
|
{
|
||||||
HINSTANCE16 hInst = __winelib ? 0 : FarGetOwner( HIWORD(proc) );
|
HINSTANCE16 hInst = __winelib ? 0 : FarGetOwner( HIWORD(proc) );
|
||||||
/* WH_MSGFILTER is the only task-specific hook for SetWindowsHook() */
|
|
||||||
HTASK16 hTask = (id == WH_MSGFILTER) ? GetCurrentTask() : 0;
|
HTASK16 hTask = (id == WH_MSGFILTER) ? GetCurrentTask() : 0;
|
||||||
|
|
||||||
HANDLE16 handle = HOOK_SetHook( id, proc, hInst, hTask );
|
HANDLE16 handle = HOOK_SetHook( id, proc, hInst, hTask );
|
||||||
if (!handle) return (FARPROC16)-1;
|
|
||||||
if (!((HOOKDATA *)USER_HEAP_LIN_ADDR( handle ))->next) return 0;
|
return (handle) ? (FARPROC16)MAKELONG( handle, HOOK_MAGIC ) : NULL;
|
||||||
/* Not sure if the return value is correct; should not matter much
|
|
||||||
* since it's never used (see DefHookProc). -- AJ */
|
|
||||||
return (FARPROC16)MAKELONG( handle, HOOK_MAGIC );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -343,7 +347,7 @@ HHOOK SetWindowsHookEx( INT16 id, HOOKPROC16 proc, HINSTANCE16 hInst,
|
||||||
HTASK16 hTask )
|
HTASK16 hTask )
|
||||||
{
|
{
|
||||||
HANDLE16 handle = HOOK_SetHook( id, proc, hInst, hTask );
|
HANDLE16 handle = HOOK_SetHook( id, proc, hInst, hTask );
|
||||||
return MAKELONG( handle, HOOK_MAGIC );
|
return (handle) ? MAKELONG( handle, HOOK_MAGIC ) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ void SetKeyboardState(BYTE *lpKeyState)
|
||||||
* GetAsyncKeyState (USER.249)
|
* GetAsyncKeyState (USER.249)
|
||||||
*
|
*
|
||||||
* Determine if a key is or was pressed. retval has high-order
|
* Determine if a key is or was pressed. retval has high-order
|
||||||
* byte set to 1 if currently pressed, low-order byte 1 if key has
|
* bit set to 1 if currently pressed, low-order bit set to 1 if key has
|
||||||
* been pressed.
|
* been pressed.
|
||||||
*
|
*
|
||||||
* This uses the variable AsyncMouseButtonsStates and
|
* This uses the variable AsyncMouseButtonsStates and
|
||||||
|
@ -92,7 +92,7 @@ int GetAsyncKeyState(int nKey)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
retval = AsyncKeyStateTable[nKey] |
|
retval = AsyncKeyStateTable[nKey] |
|
||||||
(KeyStateTable[nKey] << 8);
|
(KeyStateTable[nKey] ? 0x8000 : 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -406,7 +406,8 @@ void MDI_ChildGetMinMaxInfo(WND* clientWnd, HWND hwnd, MINMAXINFO16* lpMinMax )
|
||||||
|
|
||||||
MapWindowPoints16(clientWnd->parent->hwndSelf,
|
MapWindowPoints16(clientWnd->parent->hwndSelf,
|
||||||
((MDICLIENTINFO*)clientWnd->wExtra)->self, (LPPOINT16)&rect, 2);
|
((MDICLIENTINFO*)clientWnd->wExtra)->self, (LPPOINT16)&rect, 2);
|
||||||
AdjustWindowRectEx16( &rect, childWnd->dwStyle, 0, childWnd->dwExStyle );
|
AdjustWindowRectEx16( &rect, childWnd->dwStyle & ~(WS_VSCROLL | WS_HSCROLL),
|
||||||
|
0, childWnd->dwExStyle );
|
||||||
|
|
||||||
lpMinMax->ptMaxSize.x = rect.right -= rect.left;
|
lpMinMax->ptMaxSize.x = rect.right -= rect.left;
|
||||||
lpMinMax->ptMaxSize.y = rect.bottom -= rect.top;
|
lpMinMax->ptMaxSize.y = rect.bottom -= rect.top;
|
||||||
|
@ -539,6 +540,7 @@ LONG MDI_ChildActivate(WND *clientPtr, HWND hWndChild)
|
||||||
/* deactivate prev. active child */
|
/* deactivate prev. active child */
|
||||||
if( wndPrev )
|
if( wndPrev )
|
||||||
{
|
{
|
||||||
|
wndPrev->dwStyle |= WS_SYSMENU;
|
||||||
SendMessage16( prevActiveWnd, WM_NCACTIVATE, FALSE, 0L );
|
SendMessage16( prevActiveWnd, WM_NCACTIVATE, FALSE, 0L );
|
||||||
|
|
||||||
#ifdef WINELIB32
|
#ifdef WINELIB32
|
||||||
|
@ -869,8 +871,6 @@ BOOL MDI_AugmentFrameMenu(MDICLIENTINFO* ci, WND *frame, HWND hChild)
|
||||||
EnableMenuItem(hSysPopup, SC_MOVE, MF_BYCOMMAND | MF_GRAYED);
|
EnableMenuItem(hSysPopup, SC_MOVE, MF_BYCOMMAND | MF_GRAYED);
|
||||||
EnableMenuItem(hSysPopup, SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED);
|
EnableMenuItem(hSysPopup, SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED);
|
||||||
|
|
||||||
child->dwStyle &= ~WS_SYSMENU;
|
|
||||||
|
|
||||||
/* redraw menu */
|
/* redraw menu */
|
||||||
DrawMenuBar(frame->hwndSelf);
|
DrawMenuBar(frame->hwndSelf);
|
||||||
|
|
||||||
|
@ -882,7 +882,6 @@ BOOL MDI_AugmentFrameMenu(MDICLIENTINFO* ci, WND *frame, HWND hChild)
|
||||||
*/
|
*/
|
||||||
BOOL MDI_RestoreFrameMenu( WND *frameWnd, HWND hChild)
|
BOOL MDI_RestoreFrameMenu( WND *frameWnd, HWND hChild)
|
||||||
{
|
{
|
||||||
WND* child = WIN_FindWndPtr(hChild);
|
|
||||||
INT nItems = GetMenuItemCount(frameWnd->wIDmenu) - 1;
|
INT nItems = GetMenuItemCount(frameWnd->wIDmenu) - 1;
|
||||||
|
|
||||||
dprintf_mdi(stddeb,"MDI_RestoreFrameMenu: for child %04x\n",hChild);
|
dprintf_mdi(stddeb,"MDI_RestoreFrameMenu: for child %04x\n",hChild);
|
||||||
|
@ -890,7 +889,6 @@ BOOL MDI_RestoreFrameMenu( WND *frameWnd, HWND hChild)
|
||||||
if( GetMenuItemID(frameWnd->wIDmenu,nItems) != SC_RESTORE )
|
if( GetMenuItemID(frameWnd->wIDmenu,nItems) != SC_RESTORE )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
child->dwStyle |= WS_SYSMENU;
|
|
||||||
|
|
||||||
RemoveMenu(frameWnd->wIDmenu,0,MF_BYPOSITION);
|
RemoveMenu(frameWnd->wIDmenu,0,MF_BYPOSITION);
|
||||||
DeleteMenu(frameWnd->wIDmenu,nItems-1,MF_BYPOSITION);
|
DeleteMenu(frameWnd->wIDmenu,nItems-1,MF_BYPOSITION);
|
||||||
|
@ -1079,7 +1077,7 @@ LRESULT MDIClientWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
||||||
case WM_MDITILE:
|
case WM_MDITILE:
|
||||||
ci->sbNeedUpdate = TRUE;
|
ci->sbNeedUpdate = TRUE;
|
||||||
ShowScrollBar(hwnd,SB_BOTH,FALSE);
|
ShowScrollBar32(hwnd,SB_BOTH,FALSE);
|
||||||
MDITile(w, ci,wParam);
|
MDITile(w, ci,wParam);
|
||||||
ci->sbNeedUpdate = FALSE;
|
ci->sbNeedUpdate = FALSE;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1366,10 +1364,15 @@ LRESULT DefMDIChildProc16( HWND16 hwnd, UINT16 message,
|
||||||
case SC_MOVE:
|
case SC_MOVE:
|
||||||
if( ci->hwndChildMaximized == hwnd) return 0;
|
if( ci->hwndChildMaximized == hwnd) return 0;
|
||||||
break;
|
break;
|
||||||
|
case SC_RESTORE:
|
||||||
|
case SC_MINIMIZE:
|
||||||
|
WIN_FindWndPtr(hwnd)->dwStyle |= WS_SYSMENU;
|
||||||
|
break;
|
||||||
case SC_MAXIMIZE:
|
case SC_MAXIMIZE:
|
||||||
if( ci->hwndChildMaximized == hwnd)
|
if( ci->hwndChildMaximized == hwnd)
|
||||||
return SendMessage16( clientWnd->parent->hwndSelf,
|
return SendMessage16( clientWnd->parent->hwndSelf,
|
||||||
message, wParam, lParam);
|
message, wParam, lParam);
|
||||||
|
WIN_FindWndPtr(hwnd)->dwStyle &= ~WS_SYSMENU;
|
||||||
break;
|
break;
|
||||||
case SC_NEXTWINDOW:
|
case SC_NEXTWINDOW:
|
||||||
SendMessage16( ci->self, WM_MDINEXT, 0, 0);
|
SendMessage16( ci->self, WM_MDINEXT, 0, 0);
|
||||||
|
@ -1627,15 +1630,15 @@ void CalcChildScroll( HWND hwnd, WORD scroll )
|
||||||
vpos = clientRect.top - childRect.top;
|
vpos = clientRect.top - childRect.top;
|
||||||
|
|
||||||
if( noscroll )
|
if( noscroll )
|
||||||
ShowScrollBar(hwnd, SB_BOTH, FALSE);
|
ShowScrollBar32(hwnd, SB_BOTH, FALSE);
|
||||||
else
|
else
|
||||||
switch( scroll )
|
switch( scroll )
|
||||||
{
|
{
|
||||||
case SB_HORZ:
|
case SB_HORZ:
|
||||||
vpos = hpos; vmin = hmin; vmax = hmax;
|
vpos = hpos; vmin = hmin; vmax = hmax;
|
||||||
case SB_VERT:
|
case SB_VERT:
|
||||||
SetScrollPos(hwnd, scroll, vpos, FALSE);
|
SetScrollPos32(hwnd, scroll, vpos, FALSE);
|
||||||
SetScrollRange(hwnd, scroll, vmin, vmax, TRUE);
|
SetScrollRange32(hwnd, scroll, vmin, vmax, TRUE);
|
||||||
break;
|
break;
|
||||||
case SB_BOTH:
|
case SB_BOTH:
|
||||||
SCROLL_SetNCSbState( Wnd, vmin, vmax, vpos,
|
SCROLL_SetNCSbState( Wnd, vmin, vmax, vpos,
|
||||||
|
@ -1654,23 +1657,23 @@ void ScrollChildren(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
short newPos=-1;
|
short newPos=-1;
|
||||||
short curPos;
|
short curPos;
|
||||||
short length;
|
short length;
|
||||||
INT16 minPos;
|
INT32 minPos;
|
||||||
INT16 maxPos;
|
INT32 maxPos;
|
||||||
short shift;
|
short shift;
|
||||||
|
|
||||||
if( !wndPtr ) return;
|
if( !wndPtr ) return;
|
||||||
|
|
||||||
if( uMsg == WM_HSCROLL )
|
if( uMsg == WM_HSCROLL )
|
||||||
{
|
{
|
||||||
GetScrollRange(hWnd,SB_HORZ,&minPos,&maxPos);
|
GetScrollRange32(hWnd,SB_HORZ,&minPos,&maxPos);
|
||||||
curPos = GetScrollPos(hWnd,SB_HORZ);
|
curPos = GetScrollPos32(hWnd,SB_HORZ);
|
||||||
length = (wndPtr->rectClient.right - wndPtr->rectClient.left)/2;
|
length = (wndPtr->rectClient.right - wndPtr->rectClient.left)/2;
|
||||||
shift = SYSMETRICS_CYHSCROLL;
|
shift = SYSMETRICS_CYHSCROLL;
|
||||||
}
|
}
|
||||||
else if( uMsg == WM_VSCROLL )
|
else if( uMsg == WM_VSCROLL )
|
||||||
{
|
{
|
||||||
GetScrollRange(hWnd,SB_VERT,&minPos,&maxPos);
|
GetScrollRange32(hWnd,SB_VERT,&minPos,&maxPos);
|
||||||
curPos = GetScrollPos(hWnd,SB_VERT);
|
curPos = GetScrollPos32(hWnd,SB_VERT);
|
||||||
length = (wndPtr->rectClient.bottom - wndPtr->rectClient.top)/2;
|
length = (wndPtr->rectClient.bottom - wndPtr->rectClient.top)/2;
|
||||||
shift = SYSMETRICS_CXVSCROLL;
|
shift = SYSMETRICS_CXVSCROLL;
|
||||||
}
|
}
|
||||||
|
@ -1714,7 +1717,7 @@ void ScrollChildren(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
else if( newPos < minPos )
|
else if( newPos < minPos )
|
||||||
newPos = minPos;
|
newPos = minPos;
|
||||||
|
|
||||||
SetScrollPos(hWnd, (uMsg == WM_VSCROLL)?SB_VERT:SB_HORZ , newPos, TRUE);
|
SetScrollPos32(hWnd, (uMsg == WM_VSCROLL)?SB_VERT:SB_HORZ , newPos, TRUE);
|
||||||
|
|
||||||
if( uMsg == WM_VSCROLL )
|
if( uMsg == WM_VSCROLL )
|
||||||
ScrollWindow(hWnd ,0 ,curPos - newPos, NULL, NULL);
|
ScrollWindow(hWnd ,0 ,curPos - newPos, NULL, NULL);
|
||||||
|
|
|
@ -34,15 +34,21 @@
|
||||||
|
|
||||||
#define ASCII_CHAR_HACK 0x0800
|
#define ASCII_CHAR_HACK 0x0800
|
||||||
|
|
||||||
|
typedef enum { SYSQ_MSG_ABANDON, SYSQ_MSG_SKIP, SYSQ_MSG_ACCEPT } SYSQ_STATUS;
|
||||||
|
|
||||||
extern WPARAM lastEventChar; /* event.c */
|
extern WPARAM lastEventChar; /* event.c */
|
||||||
extern BOOL MouseButtonsStates[3];
|
extern BOOL MouseButtonsStates[3];
|
||||||
extern BOOL AsyncMouseButtonsStates[3];
|
extern BOOL AsyncMouseButtonsStates[3];
|
||||||
extern BYTE KeyStateTable[256];
|
extern BYTE KeyStateTable[256];
|
||||||
extern BYTE AsyncKeyStateTable[256];
|
extern BYTE AsyncKeyStateTable[256];
|
||||||
|
|
||||||
|
extern MESSAGEQUEUE *pCursorQueue; /* queue.c */
|
||||||
|
extern MESSAGEQUEUE *pActiveQueue;
|
||||||
|
|
||||||
DWORD MSG_WineStartTicks; /* Ticks at Wine startup */
|
DWORD MSG_WineStartTicks; /* Ticks at Wine startup */
|
||||||
|
|
||||||
static WORD doubleClickSpeed = 452;
|
static WORD doubleClickSpeed = 452;
|
||||||
|
static INT32 debugSMRL = 0; /* intertask SendMessage() recursion level */
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* MSG_TranslateMouseMsg
|
* MSG_TranslateMouseMsg
|
||||||
|
@ -59,7 +65,7 @@ static WORD doubleClickSpeed = 452;
|
||||||
* the coordinates to client coordinates.
|
* the coordinates to client coordinates.
|
||||||
* - Send the WM_SETCURSOR message.
|
* - Send the WM_SETCURSOR message.
|
||||||
*/
|
*/
|
||||||
static BOOL MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
static SYSQ_STATUS MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
||||||
{
|
{
|
||||||
WND *pWnd;
|
WND *pWnd;
|
||||||
BOOL eatMsg = FALSE;
|
BOOL eatMsg = FALSE;
|
||||||
|
@ -70,6 +76,7 @@ static BOOL MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
||||||
static WORD lastClickMsg = 0;
|
static WORD lastClickMsg = 0;
|
||||||
static POINT16 lastClickPos = { 0, 0 };
|
static POINT16 lastClickPos = { 0, 0 };
|
||||||
POINT16 pt = msg->pt;
|
POINT16 pt = msg->pt;
|
||||||
|
MESSAGEQUEUE *queue = (MESSAGEQUEUE *)GlobalLock16(GetTaskQueue(0));
|
||||||
|
|
||||||
BOOL mouseClick = ((msg->message == WM_LBUTTONDOWN) ||
|
BOOL mouseClick = ((msg->message == WM_LBUTTONDOWN) ||
|
||||||
(msg->message == WM_RBUTTONDOWN) ||
|
(msg->message == WM_RBUTTONDOWN) ||
|
||||||
|
@ -77,7 +84,7 @@ static BOOL MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
||||||
|
|
||||||
/* Find the window */
|
/* Find the window */
|
||||||
|
|
||||||
if ((msg->hwnd = GetCapture()) != 0)
|
if ((msg->hwnd = GetCapture16()) != 0)
|
||||||
{
|
{
|
||||||
BOOL32 ret;
|
BOOL32 ret;
|
||||||
|
|
||||||
|
@ -87,7 +94,7 @@ static BOOL MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
||||||
|
|
||||||
if (!HOOK_GetHook( WH_MOUSE, GetTaskQueue(0)) ||
|
if (!HOOK_GetHook( WH_MOUSE, GetTaskQueue(0)) ||
|
||||||
!(hook = SEGPTR_NEW(MOUSEHOOKSTRUCT16)))
|
!(hook = SEGPTR_NEW(MOUSEHOOKSTRUCT16)))
|
||||||
return TRUE;
|
return SYSQ_MSG_ACCEPT;
|
||||||
hook->pt = msg->pt;
|
hook->pt = msg->pt;
|
||||||
hook->hwnd = msg->hwnd;
|
hook->hwnd = msg->hwnd;
|
||||||
hook->wHitTestCode = HTCLIENT;
|
hook->wHitTestCode = HTCLIENT;
|
||||||
|
@ -95,21 +102,22 @@ static BOOL MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
||||||
ret = !HOOK_CallHooks( WH_MOUSE, remove ? HC_ACTION : HC_NOREMOVE,
|
ret = !HOOK_CallHooks( WH_MOUSE, remove ? HC_ACTION : HC_NOREMOVE,
|
||||||
msg->message, (LPARAM)SEGPTR_GET(hook));
|
msg->message, (LPARAM)SEGPTR_GET(hook));
|
||||||
SEGPTR_FREE(hook);
|
SEGPTR_FREE(hook);
|
||||||
return ret;
|
return ret ? SYSQ_MSG_ACCEPT : SYSQ_MSG_SKIP ;
|
||||||
}
|
}
|
||||||
|
|
||||||
hittest = WINPOS_WindowFromPoint( msg->pt, &pWnd );
|
hittest = WINPOS_WindowFromPoint( msg->pt, &pWnd );
|
||||||
if (pWnd->hmemTaskQ != GetTaskQueue(0))
|
if (pWnd->hmemTaskQ != GetTaskQueue(0))
|
||||||
{
|
{
|
||||||
/* Not for the current task */
|
/* Not for the current task */
|
||||||
MESSAGEQUEUE *queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) );
|
|
||||||
if (queue) QUEUE_ClearWakeBit( queue, QS_MOUSE );
|
if (queue) QUEUE_ClearWakeBit( queue, QS_MOUSE );
|
||||||
/* Wake up the other task */
|
/* Wake up the other task */
|
||||||
queue = (MESSAGEQUEUE *)GlobalLock16( pWnd->hmemTaskQ );
|
queue = (MESSAGEQUEUE *)GlobalLock16( pWnd->hmemTaskQ );
|
||||||
if (queue) QUEUE_SetWakeBit( queue, QS_MOUSE );
|
if (queue) QUEUE_SetWakeBit( queue, QS_MOUSE );
|
||||||
return FALSE;
|
return SYSQ_MSG_ABANDON;
|
||||||
}
|
}
|
||||||
|
pCursorQueue = queue;
|
||||||
msg->hwnd = pWnd->hwndSelf;
|
msg->hwnd = pWnd->hwndSelf;
|
||||||
|
|
||||||
if ((hittest != HTERROR) && mouseClick)
|
if ((hittest != HTERROR) && mouseClick)
|
||||||
{
|
{
|
||||||
HWND hwndTop = WIN_GetTopParent( msg->hwnd );
|
HWND hwndTop = WIN_GetTopParent( msg->hwnd );
|
||||||
|
@ -121,7 +129,8 @@ static BOOL MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
||||||
|
|
||||||
/* Activate the window if needed */
|
/* Activate the window if needed */
|
||||||
|
|
||||||
if (msg->hwnd != GetActiveWindow() && msg->hwnd != GetDesktopWindow())
|
if (msg->hwnd != GetActiveWindow() &&
|
||||||
|
msg->hwnd != GetDesktopWindow16())
|
||||||
{
|
{
|
||||||
LONG ret = SendMessage16( msg->hwnd, WM_MOUSEACTIVATE, hwndTop,
|
LONG ret = SendMessage16( msg->hwnd, WM_MOUSEACTIVATE, hwndTop,
|
||||||
MAKELONG( hittest, msg->message ) );
|
MAKELONG( hittest, msg->message ) );
|
||||||
|
@ -139,7 +148,7 @@ static BOOL MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
||||||
|
|
||||||
SendMessage16( msg->hwnd, WM_SETCURSOR, (WPARAM)msg->hwnd,
|
SendMessage16( msg->hwnd, WM_SETCURSOR, (WPARAM)msg->hwnd,
|
||||||
MAKELONG( hittest, msg->message ));
|
MAKELONG( hittest, msg->message ));
|
||||||
if (eatMsg) return FALSE;
|
if (eatMsg) return SYSQ_MSG_SKIP;
|
||||||
|
|
||||||
/* Check for double-click */
|
/* Check for double-click */
|
||||||
|
|
||||||
|
@ -189,7 +198,7 @@ static BOOL MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
||||||
|
|
||||||
if (!HOOK_GetHook( WH_MOUSE, GetTaskQueue(0)) ||
|
if (!HOOK_GetHook( WH_MOUSE, GetTaskQueue(0)) ||
|
||||||
!(hook = SEGPTR_NEW(MOUSEHOOKSTRUCT16)))
|
!(hook = SEGPTR_NEW(MOUSEHOOKSTRUCT16)))
|
||||||
return TRUE;
|
return SYSQ_MSG_ACCEPT;
|
||||||
|
|
||||||
hook->pt = msg->pt;
|
hook->pt = msg->pt;
|
||||||
hook->hwnd = msg->hwnd;
|
hook->hwnd = msg->hwnd;
|
||||||
|
@ -198,7 +207,7 @@ static BOOL MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
||||||
ret = !HOOK_CallHooks( WH_MOUSE, remove ? HC_ACTION : HC_NOREMOVE,
|
ret = !HOOK_CallHooks( WH_MOUSE, remove ? HC_ACTION : HC_NOREMOVE,
|
||||||
msg->message, (LPARAM)SEGPTR_GET(hook) );
|
msg->message, (LPARAM)SEGPTR_GET(hook) );
|
||||||
SEGPTR_FREE(hook);
|
SEGPTR_FREE(hook);
|
||||||
return ret;
|
return ret ? SYSQ_MSG_ACCEPT : SYSQ_MSG_SKIP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -209,7 +218,7 @@ static BOOL MSG_TranslateMouseMsg( MSG16 *msg, BOOL remove )
|
||||||
* Return value indicates whether the translated message must be passed
|
* Return value indicates whether the translated message must be passed
|
||||||
* to the user.
|
* to the user.
|
||||||
*/
|
*/
|
||||||
static BOOL MSG_TranslateKeyboardMsg( MSG16 *msg, BOOL remove )
|
static SYSQ_STATUS MSG_TranslateKeyboardMsg( MSG16 *msg, BOOL remove )
|
||||||
{
|
{
|
||||||
WND *pWnd;
|
WND *pWnd;
|
||||||
|
|
||||||
|
@ -235,12 +244,14 @@ static BOOL MSG_TranslateKeyboardMsg( MSG16 *msg, BOOL remove )
|
||||||
/* Wake up the other task */
|
/* Wake up the other task */
|
||||||
queue = (MESSAGEQUEUE *)GlobalLock16( pWnd->hmemTaskQ );
|
queue = (MESSAGEQUEUE *)GlobalLock16( pWnd->hmemTaskQ );
|
||||||
if (queue) QUEUE_SetWakeBit( queue, QS_KEY );
|
if (queue) QUEUE_SetWakeBit( queue, QS_KEY );
|
||||||
return FALSE;
|
return SYSQ_MSG_ABANDON;
|
||||||
}
|
}
|
||||||
return !HOOK_CallHooks( WH_KEYBOARD, remove ? HC_ACTION : HC_NOREMOVE,
|
return (HOOK_CallHooks( WH_KEYBOARD, remove ? HC_ACTION : HC_NOREMOVE,
|
||||||
msg->wParam, msg->lParam );
|
msg->wParam, msg->lParam ))
|
||||||
|
? SYSQ_MSG_SKIP : SYSQ_MSG_ACCEPT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* MSG_JournalRecordMsg
|
* MSG_JournalRecordMsg
|
||||||
*
|
*
|
||||||
|
@ -392,26 +403,30 @@ static int MSG_JournalPlayBackMsg(void)
|
||||||
static BOOL MSG_PeekHardwareMsg( MSG16 *msg, HWND hwnd, WORD first, WORD last,
|
static BOOL MSG_PeekHardwareMsg( MSG16 *msg, HWND hwnd, WORD first, WORD last,
|
||||||
BOOL remove )
|
BOOL remove )
|
||||||
{
|
{
|
||||||
|
SYSQ_STATUS status;
|
||||||
MESSAGEQUEUE *sysMsgQueue = QUEUE_GetSysQueue();
|
MESSAGEQUEUE *sysMsgQueue = QUEUE_GetSysQueue();
|
||||||
int i, pos = sysMsgQueue->nextMessage;
|
int i, pos = sysMsgQueue->nextMessage;
|
||||||
|
|
||||||
/* If the queue is empty, attempt to fill it */
|
/* If the queue is empty, attempt to fill it */
|
||||||
if (!sysMsgQueue->msgCount && XPending(display)) EVENT_WaitXEvent( FALSE );
|
if (!sysMsgQueue->msgCount && XPending(display))
|
||||||
|
EVENT_WaitXEvent( FALSE, FALSE );
|
||||||
|
|
||||||
for (i = 0; i < sysMsgQueue->msgCount; i++, pos++)
|
for (i = 0; i < sysMsgQueue->msgCount; i++, pos++)
|
||||||
{
|
{
|
||||||
if (pos >= sysMsgQueue->queueSize) pos = 0;
|
if (pos >= sysMsgQueue->queueSize) pos = 0;
|
||||||
*msg = sysMsgQueue->messages[pos].msg;
|
*msg = sysMsgQueue->messages[pos].msg;
|
||||||
|
|
||||||
/* Translate message */
|
/* Translate message; return FALSE immediately on SYSQ_MSG_ABANDON */
|
||||||
|
|
||||||
if ((msg->message >= WM_MOUSEFIRST) && (msg->message <= WM_MOUSELAST))
|
if ((msg->message >= WM_MOUSEFIRST) && (msg->message <= WM_MOUSELAST))
|
||||||
{
|
{
|
||||||
if (!MSG_TranslateMouseMsg( msg, remove )) continue;
|
if ((status = MSG_TranslateMouseMsg(msg,remove)) == SYSQ_MSG_ABANDON)
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
else if ((msg->message >= WM_KEYFIRST) && (msg->message <= WM_KEYLAST))
|
else if ((msg->message >= WM_KEYFIRST) && (msg->message <= WM_KEYLAST))
|
||||||
{
|
{
|
||||||
if (!MSG_TranslateKeyboardMsg( msg, remove )) continue;
|
if ((status = MSG_TranslateKeyboardMsg(msg,remove)) == SYSQ_MSG_ABANDON)
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
else /* Non-standard hardware event */
|
else /* Non-standard hardware event */
|
||||||
{
|
{
|
||||||
|
@ -427,21 +442,28 @@ static BOOL MSG_PeekHardwareMsg( MSG16 *msg, HWND hwnd, WORD first, WORD last,
|
||||||
remove ? HC_ACTION : HC_NOREMOVE,
|
remove ? HC_ACTION : HC_NOREMOVE,
|
||||||
0, (LPARAM)SEGPTR_GET(hook) );
|
0, (LPARAM)SEGPTR_GET(hook) );
|
||||||
SEGPTR_FREE(hook);
|
SEGPTR_FREE(hook);
|
||||||
if (ret) continue;
|
status = ret ? SYSQ_MSG_SKIP : SYSQ_MSG_ACCEPT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (status == SYSQ_MSG_SKIP)
|
||||||
|
{
|
||||||
|
if (remove) QUEUE_RemoveMsg( sysMsgQueue, pos );
|
||||||
|
/* FIXME: call CBT_CLICKSKIPPED from here */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check message against filters */
|
/* Check message against filters */
|
||||||
|
|
||||||
if (hwnd && (msg->hwnd != hwnd)) continue;
|
if (hwnd && (msg->hwnd != hwnd)) continue;
|
||||||
if ((first || last) &&
|
if ((first || last) &&
|
||||||
((msg->message < first) || (msg->message > last))) continue;
|
((msg->message < first) || (msg->message > last))) continue;
|
||||||
if ((msg->hwnd != GetDesktopWindow()) &&
|
if (remove)
|
||||||
(GetWindowTask16(msg->hwnd) != GetCurrentTask()))
|
{
|
||||||
continue; /* Not for this task */
|
if (HOOK_GetHook( WH_JOURNALRECORD, GetTaskQueue(0) ))
|
||||||
if (remove && HOOK_GetHook( WH_JOURNALRECORD, GetTaskQueue(0) ))
|
|
||||||
MSG_JournalRecordMsg( msg );
|
MSG_JournalRecordMsg( msg );
|
||||||
if (remove) QUEUE_RemoveMsg( sysMsgQueue, pos );
|
QUEUE_RemoveMsg( sysMsgQueue, pos );
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -474,43 +496,71 @@ WORD GetDoubleClickTime()
|
||||||
static LRESULT MSG_SendMessage( HQUEUE16 hDestQueue, HWND hwnd, UINT msg,
|
static LRESULT MSG_SendMessage( HQUEUE16 hDestQueue, HWND hwnd, UINT msg,
|
||||||
WPARAM wParam, LPARAM lParam )
|
WPARAM wParam, LPARAM lParam )
|
||||||
{
|
{
|
||||||
|
INT32 prevSMRL = debugSMRL;
|
||||||
|
QSMCTRL qCtrl = { 0, 1};
|
||||||
MESSAGEQUEUE *queue, *destQ;
|
MESSAGEQUEUE *queue, *destQ;
|
||||||
|
|
||||||
if (!(queue = (MESSAGEQUEUE*)GlobalLock16( GetTaskQueue(0) ))) return 0;
|
if (!(queue = (MESSAGEQUEUE*)GlobalLock16( GetTaskQueue(0) ))) return 0;
|
||||||
if (!(destQ = (MESSAGEQUEUE*)GlobalLock16( hDestQueue ))) return 0;
|
if (!(destQ = (MESSAGEQUEUE*)GlobalLock16( hDestQueue ))) return 0;
|
||||||
|
|
||||||
if (IsTaskLocked())
|
if (IsTaskLocked() || !IsWindow(hwnd)) return 0;
|
||||||
|
|
||||||
|
debugSMRL+=4;
|
||||||
|
dprintf_sendmsg(stddeb,"%*sSM: %s [%04x] (%04x -> %04x)\n",
|
||||||
|
prevSMRL, "", SPY_GetMsgName(msg), msg, queue->self, hDestQueue );
|
||||||
|
|
||||||
|
if( !(queue->wakeBits & QS_SMPARAMSFREE) )
|
||||||
{
|
{
|
||||||
fprintf( stderr, "SendMessage: task is locked\n" );
|
dprintf_sendmsg(stddeb,"\tIntertask SendMessage: sleeping since unreplied SendMessage pending\n");
|
||||||
return 0;
|
queue->changeBits &= ~QS_SMPARAMSFREE;
|
||||||
|
QUEUE_WaitBits( QS_SMPARAMSFREE );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (queue->hWnd)
|
/* resume sending */
|
||||||
{
|
|
||||||
fprintf( stderr, "Nested SendMessage(), msg %04x skipped\n", msg );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
queue->hWnd = hwnd;
|
queue->hWnd = hwnd;
|
||||||
queue->msg = msg;
|
queue->msg = msg;
|
||||||
queue->wParam = wParam;
|
queue->wParam = wParam;
|
||||||
queue->lParam = lParam;
|
queue->lParam = lParam;
|
||||||
queue->hPrevSendingTask = destQ->hSendingTask;
|
queue->hPrevSendingTask = destQ->hSendingTask;
|
||||||
destQ->hSendingTask = GetTaskQueue(0);
|
destQ->hSendingTask = GetTaskQueue(0);
|
||||||
|
|
||||||
|
queue->wakeBits &= ~QS_SMPARAMSFREE;
|
||||||
|
|
||||||
|
dprintf_sendmsg(stddeb,"%*ssm: smResultInit = %08x\n", prevSMRL, "", (unsigned)&qCtrl);
|
||||||
|
|
||||||
|
queue->smResultInit = &qCtrl;
|
||||||
|
|
||||||
QUEUE_SetWakeBit( destQ, QS_SENDMESSAGE );
|
QUEUE_SetWakeBit( destQ, QS_SENDMESSAGE );
|
||||||
|
|
||||||
/* Wait for the result */
|
/* perform task switch and wait for the result */
|
||||||
|
|
||||||
printf( "SendMessage %04x to %04x\n", msg, hDestQueue );
|
|
||||||
|
|
||||||
|
while( qCtrl.bPending )
|
||||||
|
{
|
||||||
if (!(queue->wakeBits & QS_SMRESULT))
|
if (!(queue->wakeBits & QS_SMRESULT))
|
||||||
{
|
{
|
||||||
|
queue->changeBits &= ~QS_SMRESULT;
|
||||||
DirectedYield( destQ->hTask );
|
DirectedYield( destQ->hTask );
|
||||||
QUEUE_WaitBits( QS_SMRESULT );
|
QUEUE_WaitBits( QS_SMRESULT );
|
||||||
|
dprintf_sendmsg(stddeb,"\tsm: have result!\n");
|
||||||
}
|
}
|
||||||
printf( "SendMessage %04x to %04x: got %08lx\n",
|
/* got something */
|
||||||
msg, hDestQueue, queue->SendMessageReturn );
|
|
||||||
|
dprintf_sendmsg(stddeb,"%*ssm: smResult = %08x\n", prevSMRL, "", (unsigned)queue->smResult );
|
||||||
|
|
||||||
|
queue->smResult->lResult = queue->SendMessageReturn;
|
||||||
|
queue->smResult->bPending = FALSE;
|
||||||
queue->wakeBits &= ~QS_SMRESULT;
|
queue->wakeBits &= ~QS_SMRESULT;
|
||||||
return queue->SendMessageReturn;
|
|
||||||
|
if( queue->smResult != &qCtrl )
|
||||||
|
dprintf_msg(stddeb,"%*ssm: weird scenes inside the goldmine!\n", prevSMRL, "");
|
||||||
|
}
|
||||||
|
queue->smResultInit = NULL;
|
||||||
|
|
||||||
|
dprintf_sendmsg(stddeb,"%*sSM: [%04x] returning %08lx\n", prevSMRL, "", msg, qCtrl.lResult);
|
||||||
|
debugSMRL-=4;
|
||||||
|
|
||||||
|
return qCtrl.lResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -522,19 +572,33 @@ void ReplyMessage( LRESULT result )
|
||||||
MESSAGEQUEUE *senderQ;
|
MESSAGEQUEUE *senderQ;
|
||||||
MESSAGEQUEUE *queue;
|
MESSAGEQUEUE *queue;
|
||||||
|
|
||||||
printf( "ReplyMessage\n " );
|
|
||||||
if (!(queue = (MESSAGEQUEUE*)GlobalLock16( GetTaskQueue(0) ))) return;
|
if (!(queue = (MESSAGEQUEUE*)GlobalLock16( GetTaskQueue(0) ))) return;
|
||||||
if (!(senderQ = (MESSAGEQUEUE*)GlobalLock16( queue->InSendMessageHandle)))
|
|
||||||
return;
|
dprintf_msg(stddeb,"ReplyMessage, queue %04x\n", queue->self);
|
||||||
for (;;)
|
|
||||||
|
while( (senderQ = (MESSAGEQUEUE*)GlobalLock16( queue->InSendMessageHandle)))
|
||||||
{
|
{
|
||||||
if (queue->wakeBits & QS_SENDMESSAGE) QUEUE_ReceiveMessage( queue );
|
dprintf_msg(stddeb,"\trpm: replying to %04x (%04x -> %04x)\n",
|
||||||
else if (senderQ->wakeBits & QS_SMRESULT) Yield();
|
queue->msg, queue->self, senderQ->self);
|
||||||
else break;
|
|
||||||
|
if( queue->wakeBits & QS_SENDMESSAGE )
|
||||||
|
{
|
||||||
|
QUEUE_ReceiveMessage( queue );
|
||||||
|
continue; /* ReceiveMessage() already called us */
|
||||||
}
|
}
|
||||||
printf( "ReplyMessage: res = %08lx\n", result );
|
|
||||||
|
if(!(senderQ->wakeBits & QS_SMRESULT) ) break;
|
||||||
|
OldYield();
|
||||||
|
}
|
||||||
|
if( !senderQ ) { dprintf_msg(stddeb,"\trpm: done\n"); return; }
|
||||||
|
|
||||||
senderQ->SendMessageReturn = result;
|
senderQ->SendMessageReturn = result;
|
||||||
|
dprintf_msg(stddeb,"\trpm: smResult = %08x, result = %08lx\n",
|
||||||
|
(unsigned)queue->smResultCurrent, result );
|
||||||
|
|
||||||
|
senderQ->smResult = queue->smResultCurrent;
|
||||||
queue->InSendMessageHandle = 0;
|
queue->InSendMessageHandle = 0;
|
||||||
|
|
||||||
QUEUE_SetWakeBit( senderQ, QS_SMRESULT );
|
QUEUE_SetWakeBit( senderQ, QS_SMRESULT );
|
||||||
DirectedYield( queue->hSendingTask );
|
DirectedYield( queue->hSendingTask );
|
||||||
}
|
}
|
||||||
|
@ -583,6 +647,23 @@ static BOOL MSG_PeekMessage( LPMSG16 msg, HWND hwnd, WORD first, WORD last,
|
||||||
if (msgQueue->wakeBits & QS_SENDMESSAGE)
|
if (msgQueue->wakeBits & QS_SENDMESSAGE)
|
||||||
QUEUE_ReceiveMessage( msgQueue );
|
QUEUE_ReceiveMessage( msgQueue );
|
||||||
|
|
||||||
|
/* Now handle a WM_QUIT message
|
||||||
|
*
|
||||||
|
* FIXME: PostQuitMessage() should post WM_QUIT and
|
||||||
|
* set QS_POSTMESSAGE wakebit instead of this.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (msgQueue->wPostQMsg &&
|
||||||
|
(!first || WM_QUIT >= first) &&
|
||||||
|
(!last || WM_QUIT <= last) )
|
||||||
|
{
|
||||||
|
msg->hwnd = hwnd;
|
||||||
|
msg->message = WM_QUIT;
|
||||||
|
msg->wParam = msgQueue->wExitCode;
|
||||||
|
msg->lParam = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Now find a normal message */
|
/* Now find a normal message */
|
||||||
|
|
||||||
if (((msgQueue->wakeBits & mask) & QS_POSTMESSAGE) &&
|
if (((msgQueue->wakeBits & mask) & QS_POSTMESSAGE) &&
|
||||||
|
@ -612,17 +693,6 @@ static BOOL MSG_PeekMessage( LPMSG16 msg, HWND hwnd, WORD first, WORD last,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now handle a WM_QUIT message */
|
|
||||||
|
|
||||||
if (msgQueue->wPostQMsg)
|
|
||||||
{
|
|
||||||
msg->hwnd = hwnd;
|
|
||||||
msg->message = WM_QUIT;
|
|
||||||
msg->wParam = msgQueue->wExitCode;
|
|
||||||
msg->lParam = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check again for SendMessage */
|
/* Check again for SendMessage */
|
||||||
|
|
||||||
if (msgQueue->wakeBits & QS_SENDMESSAGE)
|
if (msgQueue->wakeBits & QS_SENDMESSAGE)
|
||||||
|
|
|
@ -23,7 +23,7 @@ LRESULT SystemMessageBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
|
||||||
LPMSGBOX lpmb;
|
LPMSGBOX lpmb;
|
||||||
RECT16 rect, textrect;
|
RECT16 rect, textrect;
|
||||||
HWND hItem;
|
HWND hItem;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
LONG lRet;
|
LONG lRet;
|
||||||
int i, buttons, bwidth, bheight, theight, wwidth, bpos;
|
int i, buttons, bwidth, bheight, theight, wwidth, bpos;
|
||||||
int borheight, iheight, tiheight;
|
int borheight, iheight, tiheight;
|
||||||
|
@ -111,12 +111,12 @@ LRESULT SystemMessageBoxProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
|
||||||
MapWindowPoints16(0, hwnd, (LPPOINT16)&textrect, 2);
|
MapWindowPoints16(0, hwnd, (LPPOINT16)&textrect, 2);
|
||||||
|
|
||||||
GetClientRect16(hItem, &rect);
|
GetClientRect16(hItem, &rect);
|
||||||
hdc = GetDC(hItem);
|
hdc = GetDC32(hItem);
|
||||||
lRet = DrawText16( hdc, lpmb->text, -1, &rect,
|
lRet = DrawText16( hdc, lpmb->text, -1, &rect,
|
||||||
DT_LEFT | DT_EXPANDTABS | DT_WORDBREAK | DT_CALCRECT);
|
DT_LEFT | DT_EXPANDTABS | DT_WORDBREAK | DT_CALCRECT);
|
||||||
theight = rect.bottom - rect.top;
|
theight = rect.bottom - rect.top;
|
||||||
tiheight = 16 + MAX(iheight, theight);
|
tiheight = 16 + MAX(iheight, theight);
|
||||||
ReleaseDC(hItem, hdc);
|
ReleaseDC32(hItem, hdc);
|
||||||
|
|
||||||
/* Position the text */
|
/* Position the text */
|
||||||
SetWindowPos(hItem, 0, textrect.left, (tiheight - theight) / 2,
|
SetWindowPos(hItem, 0, textrect.left, (tiheight - theight) / 2,
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include "syscolor.h"
|
#include "syscolor.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "winpos.h"
|
#include "winpos.h"
|
||||||
|
#include "hook.h"
|
||||||
#include "scroll.h"
|
#include "scroll.h"
|
||||||
#include "nonclient.h"
|
#include "nonclient.h"
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
|
@ -63,8 +64,6 @@ static HBITMAP hbitmapRestoreD = 0;
|
||||||
*/
|
*/
|
||||||
static void NC_AdjustRect(LPRECT16 rect, DWORD style, BOOL menu, DWORD exStyle)
|
static void NC_AdjustRect(LPRECT16 rect, DWORD style, BOOL menu, DWORD exStyle)
|
||||||
{
|
{
|
||||||
if (style & WS_ICONIC) return; /* Nothing to change for an icon */
|
|
||||||
|
|
||||||
/* Decide if the window will be managed (see CreateWindowEx) */
|
/* Decide if the window will be managed (see CreateWindowEx) */
|
||||||
if (!(Options.managed && !(style & WS_CHILD) &&
|
if (!(Options.managed && !(style & WS_CHILD) &&
|
||||||
((style & (WS_DLGFRAME | WS_THICKFRAME)) ||
|
((style & (WS_DLGFRAME | WS_THICKFRAME)) ||
|
||||||
|
@ -233,6 +232,10 @@ void NC_GetMinMaxInfo( HWND hwnd, POINT16 *maxSize, POINT16 *maxPos,
|
||||||
LONG NC_HandleNCCalcSize( WND *pWnd, RECT16 *winRect )
|
LONG NC_HandleNCCalcSize( WND *pWnd, RECT16 *winRect )
|
||||||
{
|
{
|
||||||
RECT16 tmpRect = { 0, 0, 0, 0 };
|
RECT16 tmpRect = { 0, 0, 0, 0 };
|
||||||
|
LONG result = 0;
|
||||||
|
|
||||||
|
if (pWnd->class->style & CS_VREDRAW) result |= WVR_VREDRAW;
|
||||||
|
if (pWnd->class->style & CS_HREDRAW) result |= WVR_HREDRAW;
|
||||||
|
|
||||||
if( !( pWnd->dwStyle & WS_MINIMIZE ) )
|
if( !( pWnd->dwStyle & WS_MINIMIZE ) )
|
||||||
{
|
{
|
||||||
|
@ -249,7 +252,7 @@ LONG NC_HandleNCCalcSize( WND *pWnd, RECT16 *winRect )
|
||||||
-tmpRect.left, -tmpRect.top ) + 1;
|
-tmpRect.left, -tmpRect.top ) + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -668,7 +671,7 @@ static void NC_DrawCaption( HDC hdc, RECT16 *rect, HWND hwnd,
|
||||||
*/
|
*/
|
||||||
void NC_DoNCPaint( HWND hwnd, HRGN clip, BOOL suppress_menupaint )
|
void NC_DoNCPaint( HWND hwnd, HRGN clip, BOOL suppress_menupaint )
|
||||||
{
|
{
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
RECT16 rect;
|
RECT16 rect;
|
||||||
BOOL active;
|
BOOL active;
|
||||||
|
|
||||||
|
@ -681,7 +684,7 @@ void NC_DoNCPaint( HWND hwnd, HRGN clip, BOOL suppress_menupaint )
|
||||||
|
|
||||||
dprintf_nonclient(stddeb, "NC_DoNCPaint: %04x %d\n", hwnd, active );
|
dprintf_nonclient(stddeb, "NC_DoNCPaint: %04x %d\n", hwnd, active );
|
||||||
|
|
||||||
if (!(hdc = GetDCEx( hwnd, 0, DCX_USESTYLE | DCX_WINDOW ))) return;
|
if (!(hdc = GetDCEx32( hwnd, 0, DCX_USESTYLE | DCX_WINDOW ))) return;
|
||||||
|
|
||||||
if (ExcludeVisRect( hdc, wndPtr->rectClient.left-wndPtr->rectWindow.left,
|
if (ExcludeVisRect( hdc, wndPtr->rectClient.left-wndPtr->rectWindow.left,
|
||||||
wndPtr->rectClient.top-wndPtr->rectWindow.top,
|
wndPtr->rectClient.top-wndPtr->rectWindow.top,
|
||||||
|
@ -689,7 +692,7 @@ void NC_DoNCPaint( HWND hwnd, HRGN clip, BOOL suppress_menupaint )
|
||||||
wndPtr->rectClient.bottom-wndPtr->rectWindow.top )
|
wndPtr->rectClient.bottom-wndPtr->rectWindow.top )
|
||||||
== NULLREGION)
|
== NULLREGION)
|
||||||
{
|
{
|
||||||
ReleaseDC( hwnd, hdc );
|
ReleaseDC32( hwnd, hdc );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -735,8 +738,10 @@ void NC_DoNCPaint( HWND hwnd, HRGN clip, BOOL suppress_menupaint )
|
||||||
|
|
||||||
/* Draw the scroll-bars */
|
/* Draw the scroll-bars */
|
||||||
|
|
||||||
if (wndPtr->dwStyle & WS_VSCROLL) SCROLL_DrawScrollBar(hwnd, hdc, SB_VERT);
|
if (wndPtr->dwStyle & WS_VSCROLL)
|
||||||
if (wndPtr->dwStyle & WS_HSCROLL) SCROLL_DrawScrollBar(hwnd, hdc, SB_HORZ);
|
SCROLL_DrawScrollBar( hwnd, hdc, SB_VERT, TRUE );
|
||||||
|
if (wndPtr->dwStyle & WS_HSCROLL)
|
||||||
|
SCROLL_DrawScrollBar( hwnd, hdc, SB_HORZ, TRUE );
|
||||||
|
|
||||||
/* Draw the "size-box" */
|
/* Draw the "size-box" */
|
||||||
|
|
||||||
|
@ -748,7 +753,7 @@ void NC_DoNCPaint( HWND hwnd, HRGN clip, BOOL suppress_menupaint )
|
||||||
FillRect16( hdc, &r, sysColorObjects.hbrushScrollbar );
|
FillRect16( hdc, &r, sysColorObjects.hbrushScrollbar );
|
||||||
}
|
}
|
||||||
|
|
||||||
ReleaseDC( hwnd, hdc );
|
ReleaseDC32( hwnd, hdc );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -870,6 +875,7 @@ static void NC_TrackSysMenu( HWND hwnd, HDC hdc, POINT16 pt )
|
||||||
RECT16 rect;
|
RECT16 rect;
|
||||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||||
int iconic = wndPtr->dwStyle & WS_MINIMIZE;
|
int iconic = wndPtr->dwStyle & WS_MINIMIZE;
|
||||||
|
HMENU hmenu;
|
||||||
|
|
||||||
if (!(wndPtr->dwStyle & WS_SYSMENU)) return;
|
if (!(wndPtr->dwStyle & WS_SYSMENU)) return;
|
||||||
|
|
||||||
|
@ -881,7 +887,10 @@ static void NC_TrackSysMenu( HWND hwnd, HDC hdc, POINT16 pt )
|
||||||
|
|
||||||
NC_GetSysPopupPos( wndPtr, &rect );
|
NC_GetSysPopupPos( wndPtr, &rect );
|
||||||
if (!iconic) NC_DrawSysButton( hwnd, hdc, TRUE );
|
if (!iconic) NC_DrawSysButton( hwnd, hdc, TRUE );
|
||||||
TrackPopupMenu16( GetSystemMenu(hwnd, 0), TPM_LEFTALIGN | TPM_LEFTBUTTON,
|
hmenu = GetSystemMenu(hwnd, 0);
|
||||||
|
MENU_InitSysMenuPopup(hmenu, wndPtr->dwStyle,
|
||||||
|
wndPtr->class->style);
|
||||||
|
TrackPopupMenu16( hmenu, TPM_LEFTALIGN | TPM_LEFTBUTTON,
|
||||||
rect.left, rect.bottom, 0, hwnd, &rect );
|
rect.left, rect.bottom, 0, hwnd, &rect );
|
||||||
if (!iconic) NC_DrawSysButton( hwnd, hdc, FALSE );
|
if (!iconic) NC_DrawSysButton( hwnd, hdc, FALSE );
|
||||||
}
|
}
|
||||||
|
@ -920,7 +929,7 @@ static LONG NC_StartSizeMove( HWND hwnd, WPARAM wParam, POINT16 *capturePoint )
|
||||||
}
|
}
|
||||||
else /* SC_SIZE */
|
else /* SC_SIZE */
|
||||||
{
|
{
|
||||||
SetCapture(hwnd);
|
SetCapture32(hwnd);
|
||||||
while(!hittest)
|
while(!hittest)
|
||||||
{
|
{
|
||||||
MSG_InternalGetMessage( &msg, 0, 0, MSGF_SIZE, PM_REMOVE, FALSE );
|
MSG_InternalGetMessage( &msg, 0, 0, MSGF_SIZE, PM_REMOVE, FALSE );
|
||||||
|
@ -982,7 +991,7 @@ static void NC_DoSizeMove( HWND hwnd, WORD wParam, POINT16 pt )
|
||||||
MSG16 msg;
|
MSG16 msg;
|
||||||
LONG hittest;
|
LONG hittest;
|
||||||
RECT16 sizingRect, mouseRect;
|
RECT16 sizingRect, mouseRect;
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
BOOL thickframe;
|
BOOL thickframe;
|
||||||
POINT16 minTrack, maxTrack, capturePoint = pt;
|
POINT16 minTrack, maxTrack, capturePoint = pt;
|
||||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
||||||
|
@ -1005,7 +1014,7 @@ static void NC_DoSizeMove( HWND hwnd, WORD wParam, POINT16 pt )
|
||||||
if (hittest) hittest += HTLEFT-1;
|
if (hittest) hittest += HTLEFT-1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetCapture(hwnd);
|
SetCapture32(hwnd);
|
||||||
hittest = NC_StartSizeMove( hwnd, wParam, &capturePoint );
|
hittest = NC_StartSizeMove( hwnd, wParam, &capturePoint );
|
||||||
if (!hittest)
|
if (!hittest)
|
||||||
{
|
{
|
||||||
|
@ -1044,16 +1053,16 @@ static void NC_DoSizeMove( HWND hwnd, WORD wParam, POINT16 pt )
|
||||||
}
|
}
|
||||||
SendMessage16( hwnd, WM_ENTERSIZEMOVE, 0, 0 );
|
SendMessage16( hwnd, WM_ENTERSIZEMOVE, 0, 0 );
|
||||||
|
|
||||||
if (GetCapture() != hwnd) SetCapture( hwnd );
|
if (GetCapture32() != hwnd) SetCapture32( hwnd );
|
||||||
|
|
||||||
if (wndPtr->dwStyle & WS_CHILD)
|
if (wndPtr->dwStyle & WS_CHILD)
|
||||||
{
|
{
|
||||||
/* Retrieve a default cache DC (without using the window style) */
|
/* Retrieve a default cache DC (without using the window style) */
|
||||||
hdc = GetDCEx( wndPtr->parent->hwndSelf, 0, DCX_CACHE );
|
hdc = GetDCEx32( wndPtr->parent->hwndSelf, 0, DCX_CACHE );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ /* Grab the server only when moving top-level windows without desktop */
|
{ /* Grab the server only when moving top-level windows without desktop */
|
||||||
hdc = GetDC( 0 );
|
hdc = GetDC32( 0 );
|
||||||
if (rootWindow == DefaultRootWindow(display)) XGrabServer( display );
|
if (rootWindow == DefaultRootWindow(display)) XGrabServer( display );
|
||||||
}
|
}
|
||||||
NC_DrawMovingFrame( hdc, &sizingRect, thickframe );
|
NC_DrawMovingFrame( hdc, &sizingRect, thickframe );
|
||||||
|
@ -1116,12 +1125,28 @@ static void NC_DoSizeMove( HWND hwnd, WORD wParam, POINT16 pt )
|
||||||
NC_DrawMovingFrame( hdc, &sizingRect, thickframe );
|
NC_DrawMovingFrame( hdc, &sizingRect, thickframe );
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
|
|
||||||
if (wndPtr->dwStyle & WS_CHILD) ReleaseDC( wndPtr->parent->hwndSelf, hdc );
|
if (wndPtr->dwStyle & WS_CHILD)
|
||||||
|
ReleaseDC32( wndPtr->parent->hwndSelf, hdc );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ReleaseDC( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
if (rootWindow == DefaultRootWindow(display)) XUngrabServer( display );
|
if (rootWindow == DefaultRootWindow(display)) XUngrabServer( display );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (HOOK_GetHook( WH_CBT, GetTaskQueue(0) ))
|
||||||
|
{
|
||||||
|
RECT16* pr = SEGPTR_NEW(RECT16);
|
||||||
|
if( pr )
|
||||||
|
{
|
||||||
|
*pr = sizingRect;
|
||||||
|
if( HOOK_CallHooks( WH_CBT, HCBT_MOVESIZE, hwnd,
|
||||||
|
(LPARAM)SEGPTR_GET(pr)) )
|
||||||
|
sizingRect = wndPtr->rectWindow;
|
||||||
|
else
|
||||||
|
sizingRect = *pr;
|
||||||
|
SEGPTR_FREE(pr);
|
||||||
|
}
|
||||||
|
}
|
||||||
SendMessage16( hwnd, WM_EXITSIZEMOVE, 0, 0 );
|
SendMessage16( hwnd, WM_EXITSIZEMOVE, 0, 0 );
|
||||||
SendMessage16( hwnd, WM_SETVISIBLE, !IsIconic(hwnd), 0L);
|
SendMessage16( hwnd, WM_SETVISIBLE, !IsIconic(hwnd), 0L);
|
||||||
|
|
||||||
|
@ -1154,10 +1179,10 @@ static void NC_DoSizeMove( HWND hwnd, WORD wParam, POINT16 pt )
|
||||||
static void NC_TrackMinMaxBox( HWND hwnd, WORD wParam )
|
static void NC_TrackMinMaxBox( HWND hwnd, WORD wParam )
|
||||||
{
|
{
|
||||||
MSG16 msg;
|
MSG16 msg;
|
||||||
HDC hdc = GetWindowDC( hwnd );
|
HDC32 hdc = GetWindowDC32( hwnd );
|
||||||
BOOL pressed = TRUE;
|
BOOL pressed = TRUE;
|
||||||
|
|
||||||
SetCapture( hwnd );
|
SetCapture32( hwnd );
|
||||||
if (wParam == HTMINBUTTON) NC_DrawMinButton( hwnd, hdc, TRUE );
|
if (wParam == HTMINBUTTON) NC_DrawMinButton( hwnd, hdc, TRUE );
|
||||||
else NC_DrawMaxButton( hwnd, hdc, TRUE );
|
else NC_DrawMaxButton( hwnd, hdc, TRUE );
|
||||||
|
|
||||||
|
@ -1178,7 +1203,7 @@ static void NC_TrackMinMaxBox( HWND hwnd, WORD wParam )
|
||||||
else NC_DrawMaxButton( hwnd, hdc, FALSE );
|
else NC_DrawMaxButton( hwnd, hdc, FALSE );
|
||||||
|
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
ReleaseDC( hwnd, hdc );
|
ReleaseDC32( hwnd, hdc );
|
||||||
if (!pressed) return;
|
if (!pressed) return;
|
||||||
|
|
||||||
if (wParam == HTMINBUTTON)
|
if (wParam == HTMINBUTTON)
|
||||||
|
@ -1194,10 +1219,10 @@ static void NC_TrackMinMaxBox( HWND hwnd, WORD wParam )
|
||||||
*
|
*
|
||||||
* Track a mouse button press on the horizontal or vertical scroll-bar.
|
* Track a mouse button press on the horizontal or vertical scroll-bar.
|
||||||
*/
|
*/
|
||||||
static void NC_TrackScrollBar( HWND hwnd, WORD wParam, POINT16 pt )
|
static void NC_TrackScrollBar( HWND32 hwnd, WPARAM32 wParam, POINT32 pt )
|
||||||
{
|
{
|
||||||
MSG16 *msg;
|
MSG16 *msg;
|
||||||
WORD scrollbar;
|
INT32 scrollbar;
|
||||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||||
|
|
||||||
if ((wParam & 0xfff0) == SC_HSCROLL)
|
if ((wParam & 0xfff0) == SC_HSCROLL)
|
||||||
|
@ -1214,7 +1239,7 @@ static void NC_TrackScrollBar( HWND hwnd, WORD wParam, POINT16 pt )
|
||||||
if (!(msg = SEGPTR_NEW(MSG16))) return;
|
if (!(msg = SEGPTR_NEW(MSG16))) return;
|
||||||
pt.x -= wndPtr->rectWindow.left;
|
pt.x -= wndPtr->rectWindow.left;
|
||||||
pt.y -= wndPtr->rectWindow.top;
|
pt.y -= wndPtr->rectWindow.top;
|
||||||
SetCapture( hwnd );
|
SetCapture32( hwnd );
|
||||||
SCROLL_HandleScrollEvent( hwnd, scrollbar, WM_LBUTTONDOWN, pt );
|
SCROLL_HandleScrollEvent( hwnd, scrollbar, WM_LBUTTONDOWN, pt );
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -1252,7 +1277,7 @@ static void NC_TrackScrollBar( HWND hwnd, WORD wParam, POINT16 pt )
|
||||||
*/
|
*/
|
||||||
LONG NC_HandleNCLButtonDown( HWND hwnd, WPARAM wParam, LPARAM lParam )
|
LONG NC_HandleNCLButtonDown( HWND hwnd, WPARAM wParam, LPARAM lParam )
|
||||||
{
|
{
|
||||||
HDC hdc = GetWindowDC( hwnd );
|
HDC32 hdc;
|
||||||
|
|
||||||
switch(wParam) /* Hit test */
|
switch(wParam) /* Hit test */
|
||||||
{
|
{
|
||||||
|
@ -1261,7 +1286,9 @@ LONG NC_HandleNCLButtonDown( HWND hwnd, WPARAM wParam, LPARAM lParam )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HTSYSMENU:
|
case HTSYSMENU:
|
||||||
|
hdc = GetWindowDC32( hwnd );
|
||||||
NC_TrackSysMenu( hwnd, hdc, MAKEPOINT16(lParam) );
|
NC_TrackSysMenu( hwnd, hdc, MAKEPOINT16(lParam) );
|
||||||
|
ReleaseDC32( hwnd, hdc );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HTMENU:
|
case HTMENU:
|
||||||
|
@ -1295,8 +1322,6 @@ LONG NC_HandleNCLButtonDown( HWND hwnd, WPARAM wParam, LPARAM lParam )
|
||||||
case HTBORDER:
|
case HTBORDER:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReleaseDC( hwnd, hdc );
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1345,6 +1370,7 @@ LONG NC_HandleNCLButtonDblClk( WND *pWnd, WPARAM wParam, LPARAM lParam )
|
||||||
LONG NC_HandleSysCommand( HWND hwnd, WPARAM wParam, POINT16 pt )
|
LONG NC_HandleSysCommand( HWND hwnd, WPARAM wParam, POINT16 pt )
|
||||||
{
|
{
|
||||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||||
|
POINT32 pt32;
|
||||||
|
|
||||||
dprintf_nonclient(stddeb, "Handling WM_SYSCOMMAND %x %d,%d\n",
|
dprintf_nonclient(stddeb, "Handling WM_SYSCOMMAND %x %d,%d\n",
|
||||||
wParam, pt.x, pt.y );
|
wParam, pt.x, pt.y );
|
||||||
|
@ -1380,7 +1406,8 @@ LONG NC_HandleSysCommand( HWND hwnd, WPARAM wParam, POINT16 pt )
|
||||||
|
|
||||||
case SC_VSCROLL:
|
case SC_VSCROLL:
|
||||||
case SC_HSCROLL:
|
case SC_HSCROLL:
|
||||||
NC_TrackScrollBar( hwnd, wParam, pt );
|
CONV_POINT16TO32( &pt, &pt32 );
|
||||||
|
NC_TrackScrollBar( hwnd, wParam, pt32 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_MOUSEMENU:
|
case SC_MOUSEMENU:
|
||||||
|
|
|
@ -114,7 +114,7 @@ HDC16 BeginPaint16( HWND16 hwnd, LPPAINTSTRUCT16 lps )
|
||||||
* (because rectClient == rectWindow for WS_MINIMIZE windows).
|
* (because rectClient == rectWindow for WS_MINIMIZE windows).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
lps->hdc = GetDCEx( hwnd, hrgnUpdate, DCX_INTERSECTRGN | DCX_WINDOWPAINT |
|
lps->hdc = GetDCEx16(hwnd, hrgnUpdate, DCX_INTERSECTRGN | DCX_WINDOWPAINT |
|
||||||
DCX_USESTYLE | (bIcon ? DCX_WINDOW : 0) );
|
DCX_USESTYLE | (bIcon ? DCX_WINDOW : 0) );
|
||||||
|
|
||||||
dprintf_win(stddeb,"hdc = %04x\n", lps->hdc);
|
dprintf_win(stddeb,"hdc = %04x\n", lps->hdc);
|
||||||
|
@ -166,7 +166,7 @@ HDC32 BeginPaint32( HWND32 hwnd, PAINTSTRUCT32 *lps )
|
||||||
*/
|
*/
|
||||||
BOOL16 EndPaint16( HWND16 hwnd, const PAINTSTRUCT16* lps )
|
BOOL16 EndPaint16( HWND16 hwnd, const PAINTSTRUCT16* lps )
|
||||||
{
|
{
|
||||||
ReleaseDC( hwnd, lps->hdc );
|
ReleaseDC16( hwnd, lps->hdc );
|
||||||
ShowCaret( hwnd );
|
ShowCaret( hwnd );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -177,7 +177,7 @@ BOOL16 EndPaint16( HWND16 hwnd, const PAINTSTRUCT16* lps )
|
||||||
*/
|
*/
|
||||||
BOOL32 EndPaint32( HWND32 hwnd, const PAINTSTRUCT32 *lps )
|
BOOL32 EndPaint32( HWND32 hwnd, const PAINTSTRUCT32 *lps )
|
||||||
{
|
{
|
||||||
ReleaseDC( hwnd, (HDC16)lps->hdc );
|
ReleaseDC32( hwnd, lps->hdc );
|
||||||
ShowCaret( hwnd );
|
ShowCaret( hwnd );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -245,7 +245,7 @@ BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate,
|
||||||
RECT32 rectClient;
|
RECT32 rectClient;
|
||||||
WND* wndPtr;
|
WND* wndPtr;
|
||||||
|
|
||||||
if (!hwnd) hwnd = GetDesktopWindow();
|
if (!hwnd) hwnd = GetDesktopWindow32();
|
||||||
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
|
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
|
||||||
if (!IsWindowVisible(hwnd) || (wndPtr->flags & WIN_NO_REDRAW))
|
if (!IsWindowVisible(hwnd) || (wndPtr->flags & WIN_NO_REDRAW))
|
||||||
return TRUE; /* No redraw needed */
|
return TRUE; /* No redraw needed */
|
||||||
|
@ -262,7 +262,14 @@ BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate,
|
||||||
dprintf_win(stddeb, "RedrawWindow: %04x NULL %04x flags=%04x\n",
|
dprintf_win(stddeb, "RedrawWindow: %04x NULL %04x flags=%04x\n",
|
||||||
hwnd, hrgnUpdate, flags);
|
hwnd, hrgnUpdate, flags);
|
||||||
}
|
}
|
||||||
GetClientRect32( hwnd, &rectClient );
|
|
||||||
|
if (wndPtr->class->style & CS_PARENTDC)
|
||||||
|
{
|
||||||
|
GetClientRect32( wndPtr->parent->hwndSelf, &rectClient );
|
||||||
|
OffsetRect32( &rectClient, -wndPtr->rectClient.left,
|
||||||
|
-wndPtr->rectClient.top );
|
||||||
|
}
|
||||||
|
else GetClientRect32( hwnd, &rectClient );
|
||||||
|
|
||||||
if (flags & RDW_INVALIDATE) /* Invalidate */
|
if (flags & RDW_INVALIDATE) /* Invalidate */
|
||||||
{
|
{
|
||||||
|
@ -364,7 +371,7 @@ BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate,
|
||||||
|
|
||||||
if (wndPtr->flags & WIN_NEEDS_ERASEBKGND)
|
if (wndPtr->flags & WIN_NEEDS_ERASEBKGND)
|
||||||
{
|
{
|
||||||
HDC hdc = GetDCEx( hwnd, wndPtr->hrgnUpdate,
|
HDC32 hdc = GetDCEx32( hwnd, wndPtr->hrgnUpdate,
|
||||||
DCX_INTERSECTRGN | DCX_USESTYLE |
|
DCX_INTERSECTRGN | DCX_USESTYLE |
|
||||||
DCX_KEEPCLIPRGN | DCX_WINDOWPAINT |
|
DCX_KEEPCLIPRGN | DCX_WINDOWPAINT |
|
||||||
(bIcon ? DCX_WINDOW : 0) );
|
(bIcon ? DCX_WINDOW : 0) );
|
||||||
|
@ -374,7 +381,7 @@ BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate,
|
||||||
: WM_ERASEBKGND,
|
: WM_ERASEBKGND,
|
||||||
(WPARAM)hdc, 0 ))
|
(WPARAM)hdc, 0 ))
|
||||||
wndPtr->flags &= ~WIN_NEEDS_ERASEBKGND;
|
wndPtr->flags &= ~WIN_NEEDS_ERASEBKGND;
|
||||||
ReleaseDC( hwnd, hdc );
|
ReleaseDC32( hwnd, hdc );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -400,19 +407,30 @@ BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate,
|
||||||
for (wndPtr = wndPtr->child; wndPtr; wndPtr = wndPtr->next)
|
for (wndPtr = wndPtr->child; wndPtr; wndPtr = wndPtr->next)
|
||||||
if( wndPtr->dwStyle & WS_VISIBLE )
|
if( wndPtr->dwStyle & WS_VISIBLE )
|
||||||
{
|
{
|
||||||
SetRectRgn( hrgn, wndPtr->rectWindow.left, wndPtr->rectWindow.top,
|
if (wndPtr->class->style & CS_PARENTDC)
|
||||||
wndPtr->rectWindow.right, wndPtr->rectWindow.bottom);
|
|
||||||
if( CombineRgn( hrgn, hrgn, hrgnUpdate, RGN_AND ) != NULLREGION )
|
|
||||||
{
|
{
|
||||||
|
if (!CombineRgn( hrgn, hrgnUpdate, 0, RGN_COPY ))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetRectRgn( hrgn, wndPtr->rectWindow.left,
|
||||||
|
wndPtr->rectWindow.top,
|
||||||
|
wndPtr->rectWindow.right,
|
||||||
|
wndPtr->rectWindow.bottom);
|
||||||
|
if (!CombineRgn( hrgn, hrgn, hrgnUpdate, RGN_AND ))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
if( control & RDW_C_USEHRGN &&
|
if( control & RDW_C_USEHRGN &&
|
||||||
wndPtr->dwStyle & WS_CLIPSIBLINGS )
|
wndPtr->dwStyle & WS_CLIPSIBLINGS )
|
||||||
CombineRgn( hrgnUpdate, hrgnUpdate, hrgn, RGN_DIFF );
|
CombineRgn( hrgnUpdate, hrgnUpdate, hrgn, RGN_DIFF );
|
||||||
|
#endif
|
||||||
|
|
||||||
OffsetRgn( hrgn, -wndPtr->rectClient.left,
|
OffsetRgn( hrgn, -wndPtr->rectClient.left,
|
||||||
-wndPtr->rectClient.top );
|
-wndPtr->rectClient.top );
|
||||||
PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, hrgn, flags, RDW_C_USEHRGN );
|
PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, hrgn, flags, RDW_C_USEHRGN );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
DeleteObject( hrgn );
|
DeleteObject( hrgn );
|
||||||
if( control & RDW_C_DELETEHRGN ) DeleteObject( hrgnUpdate );
|
if( control & RDW_C_DELETEHRGN ) DeleteObject( hrgnUpdate );
|
||||||
}
|
}
|
||||||
|
|
|
@ -166,7 +166,12 @@ HANDLE32 RemoveProp32A( HWND32 hwnd, LPCSTR str )
|
||||||
PROPERTY **pprop, *prop;
|
PROPERTY **pprop, *prop;
|
||||||
WND *pWnd = WIN_FindWndPtr( hwnd );
|
WND *pWnd = WIN_FindWndPtr( hwnd );
|
||||||
|
|
||||||
|
if (HIWORD(str))
|
||||||
dprintf_prop( stddeb, "RemoveProp: %04x '%s'\n", hwnd, str );
|
dprintf_prop( stddeb, "RemoveProp: %04x '%s'\n", hwnd, str );
|
||||||
|
else
|
||||||
|
dprintf_prop( stddeb, "RemoveProp: %04x #%04x\n", hwnd, LOWORD(str));
|
||||||
|
|
||||||
|
|
||||||
if (!pWnd) return NULL;
|
if (!pWnd) return NULL;
|
||||||
if (HIWORD(str))
|
if (HIWORD(str))
|
||||||
{
|
{
|
||||||
|
|
164
windows/queue.c
164
windows/queue.c
|
@ -15,11 +15,15 @@
|
||||||
#define MAX_QUEUE_SIZE 120 /* Max. size of a message queue */
|
#define MAX_QUEUE_SIZE 120 /* Max. size of a message queue */
|
||||||
|
|
||||||
static HQUEUE16 hFirstQueue = 0;
|
static HQUEUE16 hFirstQueue = 0;
|
||||||
|
static HQUEUE16 hDoomedQueue = 0;
|
||||||
static HQUEUE16 hmemSysMsgQueue = 0;
|
static HQUEUE16 hmemSysMsgQueue = 0;
|
||||||
|
static MESSAGEQUEUE *sysMsgQueue = NULL;
|
||||||
|
|
||||||
static MESSAGEQUEUE *pMouseQueue = NULL; /* Queue for last mouse message */
|
static MESSAGEQUEUE *pMouseQueue = NULL; /* Queue for last mouse message */
|
||||||
static MESSAGEQUEUE *pKbdQueue = NULL; /* Queue for last kbd message */
|
static MESSAGEQUEUE *pKbdQueue = NULL; /* Queue for last kbd message */
|
||||||
static HQUEUE16 hDoomedQueue = 0;
|
|
||||||
static MESSAGEQUEUE *sysMsgQueue = NULL;
|
MESSAGEQUEUE *pCursorQueue = NULL;
|
||||||
|
MESSAGEQUEUE *pActiveQueue = NULL;
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* QUEUE_DumpQueue
|
* QUEUE_DumpQueue
|
||||||
|
@ -122,6 +126,7 @@ static HQUEUE16 QUEUE_CreateMsgQueue( int size )
|
||||||
msgQueue->self = hQueue;
|
msgQueue->self = hQueue;
|
||||||
msgQueue->msgSize = sizeof(QMSG);
|
msgQueue->msgSize = sizeof(QMSG);
|
||||||
msgQueue->queueSize = size;
|
msgQueue->queueSize = size;
|
||||||
|
msgQueue->wakeBits = msgQueue->changeBits = QS_SMPARAMSFREE;
|
||||||
msgQueue->wWinVersion = pTask ? pTask->version : 0;
|
msgQueue->wWinVersion = pTask ? pTask->version : 0;
|
||||||
GlobalUnlock16( hQueue );
|
GlobalUnlock16( hQueue );
|
||||||
return hQueue;
|
return hQueue;
|
||||||
|
@ -136,6 +141,7 @@ static HQUEUE16 QUEUE_CreateMsgQueue( int size )
|
||||||
BOOL32 QUEUE_DeleteMsgQueue( HQUEUE16 hQueue )
|
BOOL32 QUEUE_DeleteMsgQueue( HQUEUE16 hQueue )
|
||||||
{
|
{
|
||||||
MESSAGEQUEUE * msgQueue = (MESSAGEQUEUE*)GlobalLock16(hQueue);
|
MESSAGEQUEUE * msgQueue = (MESSAGEQUEUE*)GlobalLock16(hQueue);
|
||||||
|
HQUEUE16 senderQ;
|
||||||
HQUEUE16 *pPrev;
|
HQUEUE16 *pPrev;
|
||||||
|
|
||||||
dprintf_msg(stddeb,"Deleting message queue %04x\n", hQueue);
|
dprintf_msg(stddeb,"Deleting message queue %04x\n", hQueue);
|
||||||
|
@ -145,6 +151,19 @@ BOOL32 QUEUE_DeleteMsgQueue( HQUEUE16 hQueue )
|
||||||
dprintf_msg(stddeb,"DeleteMsgQueue: invalid argument.\n");
|
dprintf_msg(stddeb,"DeleteMsgQueue: invalid argument.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if( pCursorQueue == msgQueue ) pCursorQueue = NULL;
|
||||||
|
if( pActiveQueue == msgQueue ) pActiveQueue = NULL;
|
||||||
|
|
||||||
|
/* flush sent messages */
|
||||||
|
senderQ = msgQueue->hSendingTask;
|
||||||
|
while( senderQ )
|
||||||
|
{
|
||||||
|
MESSAGEQUEUE* sq = (MESSAGEQUEUE*)GlobalLock16(senderQ);
|
||||||
|
if( !sq ) break;
|
||||||
|
sq->SendMessageReturn = 0L;
|
||||||
|
QUEUE_SetWakeBit( sq, QS_SMRESULT );
|
||||||
|
senderQ = sq->hPrevSendingTask;
|
||||||
|
}
|
||||||
|
|
||||||
pPrev = &hFirstQueue;
|
pPrev = &hFirstQueue;
|
||||||
while (*pPrev && (*pPrev != hQueue))
|
while (*pPrev && (*pPrev != hQueue))
|
||||||
|
@ -191,6 +210,9 @@ MESSAGEQUEUE *QUEUE_GetSysQueue(void)
|
||||||
*/
|
*/
|
||||||
void QUEUE_SetWakeBit( MESSAGEQUEUE *queue, WORD bit )
|
void QUEUE_SetWakeBit( MESSAGEQUEUE *queue, WORD bit )
|
||||||
{
|
{
|
||||||
|
dprintf_msg(stddeb,"SetWakeBit: queue = %04x (wm=%04x), bit = %04x\n",
|
||||||
|
queue->self, queue->wakeMask, bit );
|
||||||
|
|
||||||
if (bit & QS_MOUSE) pMouseQueue = queue;
|
if (bit & QS_MOUSE) pMouseQueue = queue;
|
||||||
if (bit & QS_KEY) pKbdQueue = queue;
|
if (bit & QS_KEY) pKbdQueue = queue;
|
||||||
queue->changeBits |= bit;
|
queue->changeBits |= bit;
|
||||||
|
@ -222,9 +244,12 @@ void QUEUE_WaitBits( WORD bits )
|
||||||
{
|
{
|
||||||
MESSAGEQUEUE *queue;
|
MESSAGEQUEUE *queue;
|
||||||
|
|
||||||
|
dprintf_msg(stddeb,"WaitBits: q %04x waiting for %04x\n", GetTaskQueue(0), bits);
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) ))) return;
|
if (!(queue = (MESSAGEQUEUE *)GlobalLock16( GetTaskQueue(0) ))) return;
|
||||||
|
|
||||||
if (queue->changeBits & bits)
|
if (queue->changeBits & bits)
|
||||||
{
|
{
|
||||||
/* One of the bits is set; we can return */
|
/* One of the bits is set; we can return */
|
||||||
|
@ -234,9 +259,17 @@ void QUEUE_WaitBits( WORD bits )
|
||||||
if (queue->wakeBits & QS_SENDMESSAGE)
|
if (queue->wakeBits & QS_SENDMESSAGE)
|
||||||
{
|
{
|
||||||
/* Process the sent message immediately */
|
/* Process the sent message immediately */
|
||||||
|
|
||||||
|
queue->wakeMask = 0;
|
||||||
QUEUE_ReceiveMessage( queue );
|
QUEUE_ReceiveMessage( queue );
|
||||||
|
continue; /* nested sm crux */
|
||||||
}
|
}
|
||||||
|
|
||||||
queue->wakeMask = bits | QS_SENDMESSAGE;
|
queue->wakeMask = bits | QS_SENDMESSAGE;
|
||||||
|
if(queue->changeBits & bits) continue;
|
||||||
|
|
||||||
|
dprintf_msg(stddeb,"wb: (%04x) wakeMask is %04x, waiting\n", queue->self, queue->wakeMask);
|
||||||
|
|
||||||
WaitEvent( 0 );
|
WaitEvent( 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -249,57 +282,55 @@ void QUEUE_WaitBits( WORD bits )
|
||||||
*/
|
*/
|
||||||
void QUEUE_ReceiveMessage( MESSAGEQUEUE *queue )
|
void QUEUE_ReceiveMessage( MESSAGEQUEUE *queue )
|
||||||
{
|
{
|
||||||
MESSAGEQUEUE *senderQ;
|
MESSAGEQUEUE *senderQ = NULL;
|
||||||
HWND hwnd;
|
HQUEUE16 prevSender = 0;
|
||||||
UINT msg;
|
QSMCTRL* prevCtrlPtr = NULL;
|
||||||
WPARAM wParam;
|
|
||||||
LPARAM lParam;
|
|
||||||
LRESULT result = 0;
|
LRESULT result = 0;
|
||||||
HQUEUE16 oldSender;
|
|
||||||
|
|
||||||
printf( "ReceiveMessage\n" );
|
dprintf_msg(stddeb, "ReceiveMessage, queue %04x\n", queue->self );
|
||||||
if (!(queue->wakeBits & QS_SENDMESSAGE)) return;
|
if (!(queue->wakeBits & QS_SENDMESSAGE) ||
|
||||||
if (!(senderQ = (MESSAGEQUEUE*)GlobalLock16( queue->hSendingTask))) return;
|
!(senderQ = (MESSAGEQUEUE*)GlobalLock16( queue->hSendingTask)))
|
||||||
|
{ dprintf_msg(stddeb,"\trcm: nothing to do\n"); return; }
|
||||||
|
|
||||||
/* Remove sending queue from the list */
|
|
||||||
oldSender = queue->InSendMessageHandle;
|
|
||||||
queue->InSendMessageHandle = queue->hSendingTask;
|
queue->InSendMessageHandle = queue->hSendingTask;
|
||||||
queue->hSendingTask = senderQ->hPrevSendingTask;
|
if( !(queue->hSendingTask = senderQ->hPrevSendingTask) )
|
||||||
senderQ->hPrevSendingTask = 0;
|
|
||||||
if (!queue->hSendingTask)
|
|
||||||
{
|
{
|
||||||
queue->wakeBits &= ~QS_SENDMESSAGE;
|
queue->wakeBits &= ~QS_SENDMESSAGE; /* no more sent messages */
|
||||||
queue->changeBits &= ~QS_SENDMESSAGE;
|
queue->changeBits &= ~QS_SENDMESSAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the parameters from the sending task */
|
/* Remove sending queue from the list */
|
||||||
hwnd = senderQ->hWnd;
|
prevSender = queue->InSendMessageHandle;
|
||||||
msg = senderQ->msg;
|
prevCtrlPtr = queue->smResultCurrent;
|
||||||
wParam = senderQ->wParam;
|
queue->smResultCurrent = senderQ->smResultInit;
|
||||||
lParam = senderQ->lParam;
|
|
||||||
senderQ->hWnd = 0;
|
dprintf_msg(stddeb, "\trcm: smResultCurrent = %08x, prevCtrl = %08x\n",
|
||||||
|
(unsigned)queue->smResultCurrent, (unsigned)prevCtrlPtr );
|
||||||
QUEUE_SetWakeBit( senderQ, QS_SMPARAMSFREE );
|
QUEUE_SetWakeBit( senderQ, QS_SMPARAMSFREE );
|
||||||
|
|
||||||
printf( "ReceiveMessage: calling wnd proc %04x %04x %04x %08x\n",
|
dprintf_msg(stddeb, "\trcm: calling wndproc - %04x %04x %04x %08x\n",
|
||||||
hwnd, msg, wParam, lParam );
|
senderQ->hWnd, senderQ->msg, senderQ->wParam, (unsigned)senderQ->lParam );
|
||||||
|
|
||||||
/* Call the window procedure */
|
if (IsWindow( senderQ->hWnd ))
|
||||||
/* FIXME: should we use CallWindowProc here? */
|
|
||||||
if (IsWindow( hwnd ))
|
|
||||||
{
|
{
|
||||||
DWORD extraInfo = queue->GetMessageExtraInfoVal;
|
DWORD extraInfo = queue->GetMessageExtraInfoVal;
|
||||||
queue->GetMessageExtraInfoVal = senderQ->GetMessageExtraInfoVal;
|
queue->GetMessageExtraInfoVal = senderQ->GetMessageExtraInfoVal;
|
||||||
result = SendMessage16( hwnd, msg, wParam, lParam );
|
|
||||||
queue->GetMessageExtraInfoVal = extraInfo; /* Restore extra info */
|
|
||||||
}
|
|
||||||
|
|
||||||
printf( "ReceiveMessage: wnd proc %04x %04x %04x %08x ret = %08x\n",
|
result = CallWindowProc16( (WNDPROC16)GetWindowLong16(senderQ->hWnd, GWL_WNDPROC),
|
||||||
hwnd, msg, wParam, lParam, result );
|
senderQ->hWnd, senderQ->msg, senderQ->wParam, senderQ->lParam );
|
||||||
|
|
||||||
|
queue->GetMessageExtraInfoVal = extraInfo; /* Restore extra info */
|
||||||
|
dprintf_msg(stddeb,"\trcm: result = %08x\n", (unsigned)result );
|
||||||
|
}
|
||||||
|
else dprintf_msg(stddeb,"\trcm: bad hWnd\n");
|
||||||
|
|
||||||
/* Return the result to the sender task */
|
/* Return the result to the sender task */
|
||||||
ReplyMessage( result );
|
ReplyMessage( result );
|
||||||
|
|
||||||
queue->InSendMessageHandle = oldSender;
|
queue->InSendMessageHandle = prevSender;
|
||||||
|
queue->smResultCurrent = prevCtrlPtr;
|
||||||
|
|
||||||
|
dprintf_msg(stddeb,"ReceiveMessage: done!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -399,39 +430,44 @@ void QUEUE_RemoveMsg( MESSAGEQUEUE * msgQueue, int pos )
|
||||||
*/
|
*/
|
||||||
static void QUEUE_WakeSomeone( UINT message )
|
static void QUEUE_WakeSomeone( UINT message )
|
||||||
{
|
{
|
||||||
|
WND* wndPtr = NULL;
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
WORD wakeBit;
|
WORD wakeBit;
|
||||||
HQUEUE16 hQueue;
|
MESSAGEQUEUE *queue = pCursorQueue;
|
||||||
MESSAGEQUEUE *queue = NULL;
|
|
||||||
|
|
||||||
if ((message >= WM_KEYFIRST) && (message <= WM_KEYLAST)) wakeBit = QS_KEY;
|
if( (message >= WM_KEYFIRST) && (message <= WM_KEYLAST) )
|
||||||
else wakeBit = (message == WM_MOUSEMOVE) ? QS_MOUSEMOVE : QS_MOUSEBUTTON;
|
{
|
||||||
|
wakeBit = QS_KEY;
|
||||||
|
if( pActiveQueue ) queue = pActiveQueue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wakeBit = (message == WM_MOUSEMOVE) ? QS_MOUSEMOVE : QS_MOUSEBUTTON;
|
||||||
|
if( (hwnd = GetCapture32()) )
|
||||||
|
if( (wndPtr = WIN_FindWndPtr( hwnd )) )
|
||||||
|
queue = (MESSAGEQUEUE *)GlobalLock16( wndPtr->hmemTaskQ );
|
||||||
|
}
|
||||||
|
|
||||||
if (!(hwnd = GetSysModalWindow16()))
|
if( (hwnd = GetSysModalWindow16()) )
|
||||||
|
if( (wndPtr = WIN_FindWndPtr( hwnd )) )
|
||||||
|
queue = (MESSAGEQUEUE *)GlobalLock16( wndPtr->hmemTaskQ );
|
||||||
|
|
||||||
|
if( !queue )
|
||||||
{
|
{
|
||||||
if (wakeBit == QS_KEY)
|
queue = GlobalLock16( hFirstQueue );
|
||||||
|
while( queue )
|
||||||
{
|
{
|
||||||
if (!(hwnd = GetFocus32())) hwnd = GetActiveWindow();
|
if (queue->wakeMask & wakeBit) break;
|
||||||
|
queue = GlobalLock16( queue->next );
|
||||||
}
|
}
|
||||||
else hwnd = GetCapture();
|
if( !queue )
|
||||||
}
|
|
||||||
if (hwnd)
|
|
||||||
{
|
{
|
||||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
dprintf_msg(stddeb,"WakeSomeone: couldn't find queue\n");
|
||||||
if (wndPtr) queue = (MESSAGEQUEUE *)GlobalLock16( wndPtr->hmemTaskQ );
|
return;
|
||||||
}
|
|
||||||
else if (!(queue = pMouseQueue))
|
|
||||||
{
|
|
||||||
hQueue = hFirstQueue;
|
|
||||||
while (hQueue)
|
|
||||||
{
|
|
||||||
queue = GlobalLock16( hQueue );
|
|
||||||
if (queue->wakeBits & wakeBit) break;
|
|
||||||
hQueue = queue->next;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!queue) printf( "WakeSomeone: no one found\n" );
|
|
||||||
if (queue) QUEUE_SetWakeBit( queue, wakeBit );
|
QUEUE_SetWakeBit( queue, wakeBit );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -595,16 +631,24 @@ BOOL SetMessageQueue( int size )
|
||||||
dprintf_msg(stddeb,"SetMessageQueue: failed!\n");
|
dprintf_msg(stddeb,"SetMessageQueue: failed!\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
queuePtr = (MESSAGEQUEUE *)GlobalLock16( hNewQueue );
|
||||||
|
|
||||||
/* Free the old message queue */
|
/* Copy data and free the old message queue */
|
||||||
if ((hQueue = GetTaskQueue(0)) != 0) QUEUE_DeleteMsgQueue( hQueue );
|
if ((hQueue = GetTaskQueue(0)) != 0)
|
||||||
|
{
|
||||||
|
MESSAGEQUEUE *oldQ = (MESSAGEQUEUE *)GlobalLock16( hQueue );
|
||||||
|
memcpy( &queuePtr->reserved2, &oldQ->reserved2,
|
||||||
|
(int)oldQ->messages - (int)(&oldQ->reserved2) );
|
||||||
|
QUEUE_DeleteMsgQueue( hQueue );
|
||||||
|
}
|
||||||
|
|
||||||
/* Link new queue into list */
|
/* Link new queue into list */
|
||||||
queuePtr = (MESSAGEQUEUE *)GlobalLock16( hNewQueue );
|
|
||||||
queuePtr->hTask = GetCurrentTask();
|
queuePtr->hTask = GetCurrentTask();
|
||||||
queuePtr->next = hFirstQueue;
|
queuePtr->next = hFirstQueue;
|
||||||
hFirstQueue = hNewQueue;
|
hFirstQueue = hNewQueue;
|
||||||
|
|
||||||
|
if( !queuePtr->next ) pCursorQueue = queuePtr;
|
||||||
|
|
||||||
SetTaskQueue( 0, hNewQueue );
|
SetTaskQueue( 0, hNewQueue );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ static int RgnType;
|
||||||
*/
|
*/
|
||||||
void ScrollWindow(HWND hwnd, short dx, short dy, LPRECT16 rect, LPRECT16 clipRect)
|
void ScrollWindow(HWND hwnd, short dx, short dy, LPRECT16 rect, LPRECT16 clipRect)
|
||||||
{
|
{
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
HRGN hrgnUpdate,hrgnClip;
|
HRGN hrgnUpdate,hrgnClip;
|
||||||
RECT16 rc, cliprc;
|
RECT16 rc, cliprc;
|
||||||
HWND hCaretWnd = CARET_GetHwnd();
|
HWND hCaretWnd = CARET_GetHwnd();
|
||||||
|
@ -52,7 +52,7 @@ void ScrollWindow(HWND hwnd, short dx, short dy, LPRECT16 rect, LPRECT16 clipRec
|
||||||
HideCaret(hCaretWnd);
|
HideCaret(hCaretWnd);
|
||||||
else hCaretWnd = 0;
|
else hCaretWnd = 0;
|
||||||
|
|
||||||
hdc = GetDCEx(hwnd, hrgnClip, DCX_CACHE | DCX_CLIPSIBLINGS);
|
hdc = GetDCEx32(hwnd, hrgnClip, DCX_CACHE | DCX_CLIPSIBLINGS);
|
||||||
DeleteObject(hrgnClip);
|
DeleteObject(hrgnClip);
|
||||||
}
|
}
|
||||||
else /* clip children */
|
else /* clip children */
|
||||||
|
@ -63,7 +63,7 @@ void ScrollWindow(HWND hwnd, short dx, short dy, LPRECT16 rect, LPRECT16 clipRec
|
||||||
if (hCaretWnd == hwnd) HideCaret(hCaretWnd);
|
if (hCaretWnd == hwnd) HideCaret(hCaretWnd);
|
||||||
else hCaretWnd = 0;
|
else hCaretWnd = 0;
|
||||||
|
|
||||||
hdc = GetDC(hwnd);
|
hdc = GetDC32(hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clipRect == NULL)
|
if (clipRect == NULL)
|
||||||
|
@ -73,7 +73,7 @@ void ScrollWindow(HWND hwnd, short dx, short dy, LPRECT16 rect, LPRECT16 clipRec
|
||||||
|
|
||||||
hrgnUpdate = CreateRectRgn(0, 0, 0, 0);
|
hrgnUpdate = CreateRectRgn(0, 0, 0, 0);
|
||||||
ScrollDC(hdc, dx, dy, &rc, &cliprc, hrgnUpdate, NULL);
|
ScrollDC(hdc, dx, dy, &rc, &cliprc, hrgnUpdate, NULL);
|
||||||
ReleaseDC(hwnd, hdc);
|
ReleaseDC32(hwnd, hdc);
|
||||||
|
|
||||||
if( !rect ) /* move child windows and update region */
|
if( !rect ) /* move child windows and update region */
|
||||||
{
|
{
|
||||||
|
@ -230,12 +230,12 @@ BOOL ScrollDC(HDC hdc, short dx, short dy, LPRECT16 rc, LPRECT16 cliprc,
|
||||||
int ScrollWindowEx(HWND hwnd, short dx, short dy, LPRECT16 rect, LPRECT16 clipRect,
|
int ScrollWindowEx(HWND hwnd, short dx, short dy, LPRECT16 rect, LPRECT16 clipRect,
|
||||||
HRGN hrgnUpdate, LPRECT16 rcUpdate, WORD flags)
|
HRGN hrgnUpdate, LPRECT16 rcUpdate, WORD flags)
|
||||||
{
|
{
|
||||||
HDC hdc;
|
HDC32 hdc;
|
||||||
RECT16 rc, cliprc;
|
RECT16 rc, cliprc;
|
||||||
|
|
||||||
dprintf_scroll(stddeb,"ScrollWindowEx: dx=%d, dy=%d, wFlags=%04x\n",dx, dy, flags);
|
dprintf_scroll(stddeb,"ScrollWindowEx: dx=%d, dy=%d, wFlags=%04x\n",dx, dy, flags);
|
||||||
|
|
||||||
hdc = GetDC(hwnd);
|
hdc = GetDC32(hwnd);
|
||||||
|
|
||||||
if (rect == NULL)
|
if (rect == NULL)
|
||||||
GetClientRect16(hwnd, &rc);
|
GetClientRect16(hwnd, &rc);
|
||||||
|
@ -254,6 +254,6 @@ int ScrollWindowEx(HWND hwnd, short dx, short dy, LPRECT16 rect, LPRECT16 clipRe
|
||||||
((flags & SW_ERASE) ? RDW_ERASENOW : 0), 0 );
|
((flags & SW_ERASE) ? RDW_ERASENOW : 0), 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
ReleaseDC(hwnd, hdc);
|
ReleaseDC32(hwnd, hdc);
|
||||||
return RgnType;
|
return RgnType;
|
||||||
}
|
}
|
||||||
|
|
302
windows/win.c
302
windows/win.c
|
@ -44,6 +44,9 @@ static WORD wDragWidth = 4;
|
||||||
static WORD wDragHeight= 3;
|
static WORD wDragHeight= 3;
|
||||||
|
|
||||||
extern HCURSOR16 CURSORICON_IconToCursor(HICON16);
|
extern HCURSOR16 CURSORICON_IconToCursor(HICON16);
|
||||||
|
extern HWND32 CARET_GetHwnd(void);
|
||||||
|
extern BOOL32 WINPOS_ActivateOtherWindow(WND* pWnd);
|
||||||
|
extern void WINPOS_CheckActive(HWND32);
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WIN_FindWndPtr
|
* WIN_FindWndPtr
|
||||||
|
@ -90,13 +93,13 @@ void WIN_DumpWindow( HWND32 hwnd )
|
||||||
fprintf( stderr, "Window %04x (%p):\n", hwnd, ptr );
|
fprintf( stderr, "Window %04x (%p):\n", hwnd, ptr );
|
||||||
fprintf( stderr,
|
fprintf( stderr,
|
||||||
"next=%p child=%p parent=%p owner=%p class=%p '%s'\n"
|
"next=%p child=%p parent=%p owner=%p class=%p '%s'\n"
|
||||||
"inst=%04x taskQ=%04x updRgn=%04x active=%04x hdce=%04x idmenu=%04x\n"
|
"inst=%04x taskQ=%04x updRgn=%04x active=%04x dce=%p idmenu=%04x\n"
|
||||||
"style=%08lx exstyle=%08lx wndproc=%08x text='%s'\n"
|
"style=%08lx exstyle=%08lx wndproc=%08x text='%s'\n"
|
||||||
"client=%d,%d-%d,%d window=%d,%d-%d,%d iconpos=%d,%d maxpos=%d,%d\n"
|
"client=%d,%d-%d,%d window=%d,%d-%d,%d iconpos=%d,%d maxpos=%d,%d\n"
|
||||||
"sysmenu=%04x flags=%04x props=%p vscroll=%p hscroll=%p\n",
|
"sysmenu=%04x flags=%04x props=%p vscroll=%p hscroll=%p\n",
|
||||||
ptr->next, ptr->child, ptr->parent, ptr->owner,
|
ptr->next, ptr->child, ptr->parent, ptr->owner,
|
||||||
ptr->class, className, ptr->hInstance, ptr->hmemTaskQ,
|
ptr->class, className, ptr->hInstance, ptr->hmemTaskQ,
|
||||||
ptr->hrgnUpdate, ptr->hwndLastActive, ptr->hdce, ptr->wIDmenu,
|
ptr->hrgnUpdate, ptr->hwndLastActive, ptr->dce, ptr->wIDmenu,
|
||||||
ptr->dwStyle, ptr->dwExStyle, (UINT32)ptr->winproc,
|
ptr->dwStyle, ptr->dwExStyle, (UINT32)ptr->winproc,
|
||||||
ptr->text ? ptr->text : "",
|
ptr->text ? ptr->text : "",
|
||||||
ptr->rectClient.left, ptr->rectClient.top, ptr->rectClient.right,
|
ptr->rectClient.left, ptr->rectClient.top, ptr->rectClient.right,
|
||||||
|
@ -301,37 +304,71 @@ void WIN_SendParentNotify(HWND32 hwnd, WORD event, WORD idChild, LPARAM lValue)
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WIN_DestroyWindow
|
* WIN_DestroyWindow
|
||||||
*
|
*
|
||||||
* Destroy storage associated to a window
|
* Destroy storage associated to a window. "Internals" p.358
|
||||||
*/
|
*/
|
||||||
static void WIN_DestroyWindow( HWND hwnd )
|
static void WIN_DestroyWindow( WND* wndPtr )
|
||||||
{
|
{
|
||||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
HWND hwnd = wndPtr->hwndSelf;
|
||||||
|
WND* pWnd,*pNext;
|
||||||
|
|
||||||
#ifdef CONFIG_IPC
|
#ifdef CONFIG_IPC
|
||||||
if (main_block)
|
if (main_block)
|
||||||
DDE_DestroyWindow(hwnd);
|
DDE_DestroyWindow(wndPtr->hwndSelf);
|
||||||
#endif /* CONFIG_IPC */
|
#endif /* CONFIG_IPC */
|
||||||
|
|
||||||
if (!wndPtr) return;
|
/* free child windows */
|
||||||
WIN_UnlinkWindow( hwnd ); /* Remove the window from the linked list */
|
|
||||||
TIMER_RemoveWindowTimers( hwnd );
|
pNext = wndPtr->child;
|
||||||
|
while( (pWnd = pNext) )
|
||||||
|
{
|
||||||
|
pNext = pWnd->next;
|
||||||
|
WIN_DestroyWindow( pWnd );
|
||||||
|
}
|
||||||
|
|
||||||
|
SendMessage32A( wndPtr->hwndSelf, WM_NCDESTROY, 0, 0);
|
||||||
|
|
||||||
|
/* FIXME: do we need to fake QS_MOUSEMOVE wakebit? */
|
||||||
|
|
||||||
|
WINPOS_CheckActive( hwnd );
|
||||||
|
if( hwnd == GetCapture32()) ReleaseCapture();
|
||||||
|
|
||||||
|
/* free resources associated with the window */
|
||||||
|
|
||||||
|
TIMER_RemoveWindowTimers( wndPtr->hwndSelf );
|
||||||
PROPERTY_RemoveWindowProps( wndPtr );
|
PROPERTY_RemoveWindowProps( wndPtr );
|
||||||
|
|
||||||
wndPtr->dwMagic = 0; /* Mark it as invalid */
|
wndPtr->dwMagic = 0; /* Mark it as invalid */
|
||||||
wndPtr->hwndSelf = 0;
|
wndPtr->hwndSelf = 0;
|
||||||
|
|
||||||
if ((wndPtr->hrgnUpdate) || (wndPtr->flags & WIN_INTERNAL_PAINT))
|
if ((wndPtr->hrgnUpdate) || (wndPtr->flags & WIN_INTERNAL_PAINT))
|
||||||
{
|
{
|
||||||
if (wndPtr->hrgnUpdate) DeleteObject( wndPtr->hrgnUpdate );
|
if (wndPtr->hrgnUpdate) DeleteObject( wndPtr->hrgnUpdate );
|
||||||
QUEUE_DecPaintCount( wndPtr->hmemTaskQ );
|
QUEUE_DecPaintCount( wndPtr->hmemTaskQ );
|
||||||
}
|
}
|
||||||
if (!(wndPtr->dwStyle & WS_CHILD))
|
|
||||||
|
/* toss stale messages from the queue */
|
||||||
|
|
||||||
|
if( wndPtr->hmemTaskQ )
|
||||||
{
|
{
|
||||||
if (wndPtr->wIDmenu) DestroyMenu( (HMENU)wndPtr->wIDmenu );
|
int pos;
|
||||||
|
MESSAGEQUEUE* msgQ = (MESSAGEQUEUE*) GlobalLock16(wndPtr->hmemTaskQ);
|
||||||
|
|
||||||
|
while( (pos = QUEUE_FindMsg(msgQ, hwnd, 0, 0)) != -1 )
|
||||||
|
QUEUE_RemoveMsg(msgQ, pos);
|
||||||
|
wndPtr->hmemTaskQ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(wndPtr->dwStyle & WS_CHILD))
|
||||||
|
if (wndPtr->wIDmenu) DestroyMenu( (HMENU)wndPtr->wIDmenu );
|
||||||
if (wndPtr->hSysMenu) DestroyMenu( wndPtr->hSysMenu );
|
if (wndPtr->hSysMenu) DestroyMenu( wndPtr->hSysMenu );
|
||||||
if (wndPtr->window) XDestroyWindow( display, wndPtr->window );
|
if (wndPtr->window) XDestroyWindow( display, wndPtr->window );
|
||||||
if (wndPtr->class->style & CS_OWNDC) DCE_FreeDCE( wndPtr->hdce );
|
if (wndPtr->class->style & CS_OWNDC) DCE_FreeDCE( wndPtr->dce );
|
||||||
|
|
||||||
WINPROC_FreeProc( wndPtr->winproc );
|
WINPROC_FreeProc( wndPtr->winproc );
|
||||||
|
|
||||||
wndPtr->class->cWindows--;
|
wndPtr->class->cWindows--;
|
||||||
|
wndPtr->class = NULL;
|
||||||
|
|
||||||
USER_HEAP_FREE( hwnd );
|
USER_HEAP_FREE( hwnd );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,7 +435,7 @@ BOOL32 WIN_CreateDesktopWindow(void)
|
||||||
pWndDesktop->dwStyle = WS_VISIBLE | WS_CLIPCHILDREN |
|
pWndDesktop->dwStyle = WS_VISIBLE | WS_CLIPCHILDREN |
|
||||||
WS_CLIPSIBLINGS;
|
WS_CLIPSIBLINGS;
|
||||||
pWndDesktop->dwExStyle = 0;
|
pWndDesktop->dwExStyle = 0;
|
||||||
pWndDesktop->hdce = 0;
|
pWndDesktop->dce = NULL;
|
||||||
pWndDesktop->pVScroll = NULL;
|
pWndDesktop->pVScroll = NULL;
|
||||||
pWndDesktop->pHScroll = NULL;
|
pWndDesktop->pHScroll = NULL;
|
||||||
pWndDesktop->pProp = NULL;
|
pWndDesktop->pProp = NULL;
|
||||||
|
@ -426,7 +463,7 @@ static HWND WIN_CreateWindowEx( CREATESTRUCT32A *cs, ATOM classAtom,
|
||||||
{
|
{
|
||||||
CLASS *classPtr;
|
CLASS *classPtr;
|
||||||
WND *wndPtr;
|
WND *wndPtr;
|
||||||
HWND16 hwnd;
|
HWND16 hwnd, hwndLinkAfter;
|
||||||
POINT16 maxSize, maxPos, minTrack, maxTrack;
|
POINT16 maxSize, maxPos, minTrack, maxTrack;
|
||||||
LRESULT wmcreate;
|
LRESULT wmcreate;
|
||||||
|
|
||||||
|
@ -495,10 +532,21 @@ static HWND WIN_CreateWindowEx( CREATESTRUCT32A *cs, ATOM classAtom,
|
||||||
wndPtr = (WND *) USER_HEAP_LIN_ADDR( hwnd );
|
wndPtr = (WND *) USER_HEAP_LIN_ADDR( hwnd );
|
||||||
wndPtr->next = NULL;
|
wndPtr->next = NULL;
|
||||||
wndPtr->child = NULL;
|
wndPtr->child = NULL;
|
||||||
wndPtr->parent = (cs->style & WS_CHILD) ?
|
|
||||||
WIN_FindWndPtr( cs->hwndParent ) : pWndDesktop;
|
if (cs->style & WS_CHILD)
|
||||||
wndPtr->owner = (cs->style & WS_CHILD) ? NULL :
|
{
|
||||||
WIN_FindWndPtr(WIN_GetTopParent(cs->hwndParent));
|
wndPtr->parent = WIN_FindWndPtr( cs->hwndParent );
|
||||||
|
wndPtr->owner = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wndPtr->parent = pWndDesktop;
|
||||||
|
if (!cs->hwndParent || (cs->hwndParent == pWndDesktop->hwndSelf))
|
||||||
|
wndPtr->owner = NULL;
|
||||||
|
else
|
||||||
|
wndPtr->owner = WIN_FindWndPtr(WIN_GetTopParent(cs->hwndParent));
|
||||||
|
}
|
||||||
|
|
||||||
wndPtr->window = 0;
|
wndPtr->window = 0;
|
||||||
wndPtr->class = classPtr;
|
wndPtr->class = classPtr;
|
||||||
wndPtr->winproc = NULL;
|
wndPtr->winproc = NULL;
|
||||||
|
@ -524,10 +572,46 @@ static HWND WIN_CreateWindowEx( CREATESTRUCT32A *cs, ATOM classAtom,
|
||||||
wndPtr->userdata = 0;
|
wndPtr->userdata = 0;
|
||||||
|
|
||||||
if (classPtr->cbWndExtra) memset( wndPtr->wExtra, 0, classPtr->cbWndExtra);
|
if (classPtr->cbWndExtra) memset( wndPtr->wExtra, 0, classPtr->cbWndExtra);
|
||||||
classPtr->cWindows++;
|
|
||||||
|
/* Call the WH_CBT hook */
|
||||||
|
|
||||||
|
hwndLinkAfter = (cs->style & WS_CHILD) ? HWND_BOTTOM : HWND_TOP;
|
||||||
|
|
||||||
|
if (HOOK_GetHook( WH_CBT, GetTaskQueue(0) ))
|
||||||
|
{
|
||||||
|
CBT_CREATEWND16* cbtc;
|
||||||
|
|
||||||
|
if ((cbtc = SEGPTR_NEW(CBT_CREATEWND16)))
|
||||||
|
{
|
||||||
|
/* Dummy message params to use WINPROC_MapMsg functions */
|
||||||
|
UINT16 msg;
|
||||||
|
WPARAM16 wparam;
|
||||||
|
LPARAM lparam;
|
||||||
|
|
||||||
|
/* Map the CREATESTRUCT to 16-bit format */
|
||||||
|
lparam = (LPARAM)cs;
|
||||||
|
if (unicode)
|
||||||
|
WINPROC_MapMsg32WTo16( WM_CREATE, 0, &msg, &wparam, &lparam );
|
||||||
|
else
|
||||||
|
WINPROC_MapMsg32ATo16( WM_CREATE, 0, &msg, &wparam, &lparam );
|
||||||
|
cbtc->lpcs = (CREATESTRUCT16 *)lparam;
|
||||||
|
cbtc->hwndInsertAfter = hwndLinkAfter;
|
||||||
|
wmcreate = !HOOK_CallHooks( WH_CBT, HCBT_CREATEWND, hwnd,
|
||||||
|
(LPARAM)SEGPTR_GET(cbtc) );
|
||||||
|
WINPROC_UnmapMsg32ATo16( WM_CREATE, 0, lparam );
|
||||||
|
SEGPTR_FREE(cbtc);
|
||||||
|
if (!wmcreate)
|
||||||
|
{
|
||||||
|
dprintf_win(stddeb,"CreateWindowEx: CBT-hook returned 0\n" );
|
||||||
|
USER_HEAP_FREE( hwnd );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the window procedure */
|
/* Set the window procedure */
|
||||||
|
|
||||||
|
classPtr->cWindows++;
|
||||||
WINPROC_SetProc( &wndPtr->winproc, (WNDPROC16)classPtr->winproc, 0 );
|
WINPROC_SetProc( &wndPtr->winproc, (WNDPROC16)classPtr->winproc, 0 );
|
||||||
|
|
||||||
/* Correct the window style */
|
/* Correct the window style */
|
||||||
|
@ -541,54 +625,13 @@ static HWND WIN_CreateWindowEx( CREATESTRUCT32A *cs, ATOM classAtom,
|
||||||
|
|
||||||
/* Get class or window DC if needed */
|
/* Get class or window DC if needed */
|
||||||
|
|
||||||
if (classPtr->style & CS_OWNDC) wndPtr->hdce = DCE_AllocDCE(hwnd, DCE_WINDOW_DC);
|
if (classPtr->style & CS_OWNDC) wndPtr->dce = DCE_AllocDCE(hwnd,DCE_WINDOW_DC);
|
||||||
else if (classPtr->style & CS_CLASSDC) wndPtr->hdce = classPtr->hdce;
|
else if (classPtr->style & CS_CLASSDC) wndPtr->dce = classPtr->dce;
|
||||||
else wndPtr->hdce = 0;
|
else wndPtr->dce = NULL;
|
||||||
|
|
||||||
/* Insert the window in the linked list */
|
/* Insert the window in the linked list */
|
||||||
|
|
||||||
WIN_LinkWindow( hwnd, (cs->style & WS_CHILD) ? HWND_BOTTOM : HWND_TOP );
|
WIN_LinkWindow( hwnd, hwndLinkAfter );
|
||||||
|
|
||||||
/* Call the WH_CBT hook */
|
|
||||||
|
|
||||||
if (HOOK_GetHook( WH_CBT, GetTaskQueue(0) ))
|
|
||||||
{
|
|
||||||
CBT_CREATEWND16* cbtc;
|
|
||||||
|
|
||||||
if ((cbtc = SEGPTR_NEW(CBT_CREATEWND16)))
|
|
||||||
{
|
|
||||||
/* Dummy message params to use WINPROC_MapMsg functions */
|
|
||||||
UINT16 msg;
|
|
||||||
WPARAM16 wparam;
|
|
||||||
LPARAM lparam;
|
|
||||||
|
|
||||||
HWND hwndZnew = (cs->style & WS_CHILD) ? HWND_BOTTOM : HWND_TOP;
|
|
||||||
|
|
||||||
/* Map the CREATESTRUCT to 16-bit format */
|
|
||||||
lparam = (LPARAM)cs;
|
|
||||||
if (unicode)
|
|
||||||
WINPROC_MapMsg32WTo16( WM_CREATE, 0, &msg, &wparam, &lparam );
|
|
||||||
else
|
|
||||||
WINPROC_MapMsg32ATo16( WM_CREATE, 0, &msg, &wparam, &lparam );
|
|
||||||
cbtc->lpcs = (CREATESTRUCT16 *)lparam;
|
|
||||||
cbtc->hwndInsertAfter = hwndZnew;
|
|
||||||
wmcreate = !HOOK_CallHooks( WH_CBT, HCBT_CREATEWND, hwnd,
|
|
||||||
(LPARAM)SEGPTR_GET(cbtc) );
|
|
||||||
WINPROC_UnmapMsg32ATo16( WM_CREATE, 0, lparam );
|
|
||||||
if (hwndZnew != cbtc->hwndInsertAfter)
|
|
||||||
{
|
|
||||||
WIN_UnlinkWindow( hwnd );
|
|
||||||
WIN_LinkWindow( hwnd, cbtc->hwndInsertAfter );
|
|
||||||
}
|
|
||||||
SEGPTR_FREE(cbtc);
|
|
||||||
if (!wmcreate)
|
|
||||||
{
|
|
||||||
dprintf_win(stddeb,"CreateWindowEx: CBT-hook returned 0\n" );
|
|
||||||
WIN_DestroyWindow( hwnd );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Send the WM_GETMINMAXINFO message and fix the size if needed */
|
/* Send the WM_GETMINMAXINFO message and fix the size if needed */
|
||||||
|
|
||||||
|
@ -722,7 +765,8 @@ static HWND WIN_CreateWindowEx( CREATESTRUCT32A *cs, ATOM classAtom,
|
||||||
{
|
{
|
||||||
/* Abort window creation */
|
/* Abort window creation */
|
||||||
dprintf_win(stddeb,"CreateWindowEx: wmcreate==-1, aborting\n");
|
dprintf_win(stddeb,"CreateWindowEx: wmcreate==-1, aborting\n");
|
||||||
WIN_DestroyWindow( hwnd );
|
WIN_UnlinkWindow( hwnd );
|
||||||
|
WIN_DestroyWindow( wndPtr );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -884,6 +928,13 @@ HWND32 CreateWindowEx32W( DWORD exStyle, LPCWSTR className, LPCWSTR windowName,
|
||||||
|
|
||||||
if (!(classAtom = GlobalFindAtom32W( className )))
|
if (!(classAtom = GlobalFindAtom32W( className )))
|
||||||
{
|
{
|
||||||
|
if (HIWORD(className))
|
||||||
|
{
|
||||||
|
LPSTR cn = STRING32_DupUniToAnsi(className);
|
||||||
|
fprintf( stderr, "CreateWindowEx32W: bad class name '%s'\n",cn);
|
||||||
|
free(cn);
|
||||||
|
}
|
||||||
|
else
|
||||||
fprintf( stderr, "CreateWindowEx32W: bad class name %p\n", className );
|
fprintf( stderr, "CreateWindowEx32W: bad class name %p\n", className );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -908,6 +959,45 @@ HWND32 CreateWindowEx32W( DWORD exStyle, LPCWSTR className, LPCWSTR windowName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* WIN_CheckFocus
|
||||||
|
*/
|
||||||
|
static void WIN_CheckFocus( WND* pWnd )
|
||||||
|
{
|
||||||
|
if( GetFocus16() == pWnd->hwndSelf )
|
||||||
|
SetFocus16( (pWnd->dwStyle & WS_CHILD) ? pWnd->parent->hwndSelf : 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* WIN_SendDestroyMsg
|
||||||
|
*/
|
||||||
|
static void WIN_SendDestroyMsg( WND* pWnd )
|
||||||
|
{
|
||||||
|
WND* pChild;
|
||||||
|
|
||||||
|
WIN_CheckFocus(pWnd);
|
||||||
|
|
||||||
|
if( CARET_GetHwnd() == pWnd->hwndSelf ) DestroyCaret();
|
||||||
|
if( !pWnd->window ) CLIPBOARD_DisOwn( pWnd );
|
||||||
|
|
||||||
|
SendMessage32A( pWnd->hwndSelf, WM_DESTROY, 0, 0);
|
||||||
|
|
||||||
|
if( !IsWindow(pWnd->hwndSelf) )
|
||||||
|
{
|
||||||
|
dprintf_win(stddeb,"\tdestroyed itself while in WM_DESTROY!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pChild = pWnd->child;
|
||||||
|
while( pChild )
|
||||||
|
{
|
||||||
|
WIN_SendDestroyMsg( pChild );
|
||||||
|
pChild = pChild->next;
|
||||||
|
}
|
||||||
|
WIN_CheckFocus(pWnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DestroyWindow (USER.53)
|
* DestroyWindow (USER.53)
|
||||||
*/
|
*/
|
||||||
|
@ -922,7 +1012,10 @@ BOOL DestroyWindow( HWND hwnd )
|
||||||
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
|
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
|
||||||
if (wndPtr == pWndDesktop) return FALSE; /* Can't destroy desktop */
|
if (wndPtr == pWndDesktop) return FALSE; /* Can't destroy desktop */
|
||||||
|
|
||||||
/* Top-level window */
|
/* Call hooks */
|
||||||
|
|
||||||
|
if( HOOK_CallHooks( WH_CBT, HCBT_DESTROYWND, hwnd, 0L) )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if (!(wndPtr->dwStyle & WS_CHILD) && !wndPtr->owner)
|
if (!(wndPtr->dwStyle & WS_CHILD) && !wndPtr->owner)
|
||||||
{
|
{
|
||||||
|
@ -930,41 +1023,61 @@ BOOL DestroyWindow( HWND hwnd )
|
||||||
/* FIXME: clean up palette - see "Internals" p.352 */
|
/* FIXME: clean up palette - see "Internals" p.352 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( !QUEUE_IsDoomedQueue(wndPtr->hmemTaskQ) )
|
||||||
|
WIN_SendParentNotify( hwnd, WM_DESTROY, wndPtr->wIDmenu, (LPARAM)hwnd );
|
||||||
|
if( !IsWindow(hwnd) ) return TRUE;
|
||||||
|
|
||||||
|
if( wndPtr->window ) CLIPBOARD_DisOwn( wndPtr ); /* before window is unmapped */
|
||||||
|
|
||||||
/* Hide the window */
|
/* Hide the window */
|
||||||
|
|
||||||
if (wndPtr->dwStyle & WS_VISIBLE)
|
if (wndPtr->dwStyle & WS_VISIBLE)
|
||||||
SetWindowPos( hwnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW | SWP_NOACTIVATE |
|
{
|
||||||
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE );
|
SetWindowPos( hwnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW |
|
||||||
if ((hwnd == GetCapture()) || IsChild( hwnd, GetCapture() ))
|
SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE |
|
||||||
ReleaseCapture();
|
((QUEUE_IsDoomedQueue(wndPtr->hmemTaskQ))?SWP_DEFERERASE:0) );
|
||||||
WIN_SendParentNotify( hwnd, WM_DESTROY, wndPtr->wIDmenu, (LPARAM)hwnd );
|
if( !IsWindow(hwnd) ) return TRUE;
|
||||||
|
}
|
||||||
CLIPBOARD_DisOwn( hwnd );
|
|
||||||
|
|
||||||
/* Recursively destroy owned windows */
|
/* Recursively destroy owned windows */
|
||||||
|
|
||||||
|
if( !(wndPtr->dwStyle & WS_CHILD) )
|
||||||
|
{
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
WND *siblingPtr = wndPtr->parent->child; /* First sibling */
|
WND *siblingPtr = wndPtr->parent->child; /* First sibling */
|
||||||
while (siblingPtr)
|
while (siblingPtr)
|
||||||
{
|
{
|
||||||
if (siblingPtr->owner == wndPtr) break;
|
if (siblingPtr->owner == wndPtr)
|
||||||
|
if (siblingPtr->hmemTaskQ == wndPtr->hmemTaskQ)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
siblingPtr->owner = NULL;
|
||||||
siblingPtr = siblingPtr->next;
|
siblingPtr = siblingPtr->next;
|
||||||
}
|
}
|
||||||
if (siblingPtr) DestroyWindow( siblingPtr->hwndSelf );
|
if (siblingPtr) DestroyWindow( siblingPtr->hwndSelf );
|
||||||
else break;
|
else break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send destroy messages and destroy children */
|
WINPOS_ActivateOtherWindow(wndPtr);
|
||||||
|
|
||||||
SendMessage16( hwnd, WM_DESTROY, 0, 0 );
|
if( wndPtr->owner &&
|
||||||
while (wndPtr->child) /* The child removes itself from the list */
|
wndPtr->owner->hwndLastActive == wndPtr->hwndSelf )
|
||||||
DestroyWindow( wndPtr->child->hwndSelf );
|
wndPtr->owner->hwndLastActive = wndPtr->owner->hwndSelf;
|
||||||
SendMessage16( hwnd, WM_NCDESTROY, 0, 0 );
|
}
|
||||||
|
|
||||||
/* Destroy the window */
|
/* Send destroy messages */
|
||||||
|
|
||||||
WIN_DestroyWindow( hwnd );
|
WIN_SendDestroyMsg( wndPtr );
|
||||||
|
if( !IsWindow(hwnd) ) return TRUE;
|
||||||
|
|
||||||
|
/* Unlink now so we won't bother with the children later on */
|
||||||
|
|
||||||
|
if( wndPtr->parent ) WIN_UnlinkWindow(hwnd);
|
||||||
|
|
||||||
|
/* Destroy the window storage */
|
||||||
|
|
||||||
|
WIN_DestroyWindow( wndPtr );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1145,9 +1258,18 @@ WND *WIN_GetDesktop(void)
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* GetDesktopWindow (USER.286)
|
* GetDesktopWindow16 (USER.286)
|
||||||
*/
|
*/
|
||||||
HWND GetDesktopWindow(void)
|
HWND16 GetDesktopWindow16(void)
|
||||||
|
{
|
||||||
|
return (HWND16)pWndDesktop->hwndSelf;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* GetDesktopWindow32 (USER32.231)
|
||||||
|
*/
|
||||||
|
HWND32 GetDesktopWindow32(void)
|
||||||
{
|
{
|
||||||
return pWndDesktop->hwndSelf;
|
return pWndDesktop->hwndSelf;
|
||||||
}
|
}
|
||||||
|
@ -1159,9 +1281,9 @@ HWND GetDesktopWindow(void)
|
||||||
* Exactly the same thing as GetDesktopWindow(), but not documented.
|
* Exactly the same thing as GetDesktopWindow(), but not documented.
|
||||||
* Don't ask me why...
|
* Don't ask me why...
|
||||||
*/
|
*/
|
||||||
HWND GetDesktopHwnd(void)
|
HWND16 GetDesktopHwnd(void)
|
||||||
{
|
{
|
||||||
return pWndDesktop->hwndSelf;
|
return (HWND16)pWndDesktop->hwndSelf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1186,7 +1308,7 @@ BOOL EnableWindow( HWND hwnd, BOOL enable )
|
||||||
wndPtr->dwStyle |= WS_DISABLED;
|
wndPtr->dwStyle |= WS_DISABLED;
|
||||||
if ((hwnd == GetFocus32()) || IsChild( hwnd, GetFocus32() ))
|
if ((hwnd == GetFocus32()) || IsChild( hwnd, GetFocus32() ))
|
||||||
SetFocus32( 0 ); /* A disabled window can't have the focus */
|
SetFocus32( 0 ); /* A disabled window can't have the focus */
|
||||||
if ((hwnd == GetCapture()) || IsChild( hwnd, GetCapture() ))
|
if ((hwnd == GetCapture32()) || IsChild( hwnd, GetCapture32() ))
|
||||||
ReleaseCapture(); /* A disabled window can't capture the mouse */
|
ReleaseCapture(); /* A disabled window can't capture the mouse */
|
||||||
SendMessage16( hwnd, WM_ENABLE, FALSE, 0 );
|
SendMessage16( hwnd, WM_ENABLE, FALSE, 0 );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1892,12 +2014,12 @@ BOOL FlashWindow(HWND hWnd, BOOL bInvert)
|
||||||
{
|
{
|
||||||
if (bInvert && !(wndPtr->flags & WIN_NCACTIVATED))
|
if (bInvert && !(wndPtr->flags & WIN_NCACTIVATED))
|
||||||
{
|
{
|
||||||
HDC hDC = GetDC(hWnd);
|
HDC32 hDC = GetDC32(hWnd);
|
||||||
|
|
||||||
if (!SendMessage16( hWnd, WM_ERASEBKGND, (WPARAM)hDC, (LPARAM)0 ))
|
if (!SendMessage16( hWnd, WM_ERASEBKGND, (WPARAM)hDC, (LPARAM)0 ))
|
||||||
wndPtr->flags |= WIN_NEEDS_ERASEBKGND;
|
wndPtr->flags |= WIN_NEEDS_ERASEBKGND;
|
||||||
|
|
||||||
ReleaseDC( hWnd, hDC );
|
ReleaseDC32( hWnd, hDC );
|
||||||
wndPtr->flags |= WIN_NCACTIVATED;
|
wndPtr->flags |= WIN_NCACTIVATED;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2026,7 +2148,7 @@ BOOL16 DragDetect(HWND16 hWnd, POINT16 pt)
|
||||||
rect.top = pt.y - wDragHeight;
|
rect.top = pt.y - wDragHeight;
|
||||||
rect.bottom = pt.y + wDragHeight;
|
rect.bottom = pt.y + wDragHeight;
|
||||||
|
|
||||||
SetCapture(hWnd);
|
SetCapture32(hWnd);
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
|
@ -2105,7 +2227,7 @@ DWORD DragObject(HWND hwndScope, HWND hWnd, WORD wObj, HANDLE hOfStruct,
|
||||||
lpDragInfo->hOfStruct = hOfStruct;
|
lpDragInfo->hOfStruct = hOfStruct;
|
||||||
lpDragInfo->l = 0L;
|
lpDragInfo->l = 0L;
|
||||||
|
|
||||||
SetCapture(hWnd);
|
SetCapture32(hWnd);
|
||||||
ShowCursor(1);
|
ShowCursor(1);
|
||||||
|
|
||||||
while( !dragDone )
|
while( !dragDone )
|
||||||
|
|
304
windows/winpos.c
304
windows/winpos.c
|
@ -48,6 +48,21 @@ extern BOOL DCE_InvalidateDCE(WND*, RECT16* );
|
||||||
static HWND hwndActive = 0; /* Currently active window */
|
static HWND hwndActive = 0; /* Currently active window */
|
||||||
static HWND hwndPrevActive = 0; /* Previously active window */
|
static HWND hwndPrevActive = 0; /* Previously active window */
|
||||||
|
|
||||||
|
extern MESSAGEQUEUE* pActiveQueue;
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* WINPOS_CheckActive
|
||||||
|
*/
|
||||||
|
void WINPOS_CheckActive( HWND32 hwnd )
|
||||||
|
{
|
||||||
|
if( hwnd == hwndPrevActive ) hwndPrevActive = 0;
|
||||||
|
if( hwnd == hwndActive )
|
||||||
|
{
|
||||||
|
hwndActive = 0;
|
||||||
|
dprintf_win(stddeb,"\tattempt to activate destroyed window!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WINPOS_FindIconPos
|
* WINPOS_FindIconPos
|
||||||
*
|
*
|
||||||
|
@ -483,12 +498,22 @@ BOOL IsZoomed(HWND hWnd)
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* GetActiveWindow (USER.60)
|
* GetActiveWindow (USER.60)
|
||||||
*/
|
*/
|
||||||
HWND GetActiveWindow()
|
HWND GetActiveWindow(void)
|
||||||
{
|
{
|
||||||
return hwndActive;
|
return hwndActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* WINPOS_IsGoodEnough
|
||||||
|
*/
|
||||||
|
static BOOL32 WINPOS_IsGoodEnough(WND* pWnd)
|
||||||
|
{
|
||||||
|
return (pWnd) ? ((!(pWnd->dwStyle & WS_DISABLED) &&
|
||||||
|
pWnd->dwStyle & WS_VISIBLE ) ? TRUE : FALSE) : FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* SetActiveWindow (USER.59)
|
* SetActiveWindow (USER.59)
|
||||||
*/
|
*/
|
||||||
|
@ -497,8 +522,7 @@ HWND SetActiveWindow( HWND hwnd )
|
||||||
HWND prev = hwndActive;
|
HWND prev = hwndActive;
|
||||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||||
|
|
||||||
if (!wndPtr || (wndPtr->dwStyle & WS_DISABLED) ||
|
if ( !WINPOS_IsGoodEnough(wndPtr) ) return 0;
|
||||||
!(wndPtr->dwStyle & WS_VISIBLE)) return 0;
|
|
||||||
|
|
||||||
WINPOS_SetActiveWindow( hwnd, 0, 0 );
|
WINPOS_SetActiveWindow( hwnd, 0, 0 );
|
||||||
return prev;
|
return prev;
|
||||||
|
@ -562,6 +586,9 @@ BOOL ShowWindow( HWND hwnd, int cmd )
|
||||||
swpflags |= SWP_FRAMECHANGED;
|
swpflags |= SWP_FRAMECHANGED;
|
||||||
if (!(wndPtr->dwStyle & WS_MINIMIZE))
|
if (!(wndPtr->dwStyle & WS_MINIMIZE))
|
||||||
{
|
{
|
||||||
|
if( HOOK_CallHooks( WH_CBT, HCBT_MINMAX, hwnd, cmd) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (wndPtr->dwStyle & WS_MAXIMIZE)
|
if (wndPtr->dwStyle & WS_MAXIMIZE)
|
||||||
{
|
{
|
||||||
wndPtr->flags |= WIN_RESTORE_MAX;
|
wndPtr->flags |= WIN_RESTORE_MAX;
|
||||||
|
@ -587,6 +614,9 @@ BOOL ShowWindow( HWND hwnd, int cmd )
|
||||||
swpflags |= SWP_SHOWWINDOW | SWP_FRAMECHANGED;
|
swpflags |= SWP_SHOWWINDOW | SWP_FRAMECHANGED;
|
||||||
if (!(wndPtr->dwStyle & WS_MAXIMIZE))
|
if (!(wndPtr->dwStyle & WS_MAXIMIZE))
|
||||||
{
|
{
|
||||||
|
if( HOOK_CallHooks( WH_CBT, HCBT_MINMAX, hwnd, cmd) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
/* Store the current position and find the maximized size */
|
/* Store the current position and find the maximized size */
|
||||||
if (!(wndPtr->dwStyle & WS_MINIMIZE))
|
if (!(wndPtr->dwStyle & WS_MINIMIZE))
|
||||||
wndPtr->rectNormal = wndPtr->rectWindow;
|
wndPtr->rectNormal = wndPtr->rectWindow;
|
||||||
|
@ -630,6 +660,9 @@ BOOL ShowWindow( HWND hwnd, int cmd )
|
||||||
|
|
||||||
if (wndPtr->dwStyle & WS_MINIMIZE)
|
if (wndPtr->dwStyle & WS_MINIMIZE)
|
||||||
{
|
{
|
||||||
|
if( HOOK_CallHooks( WH_CBT, HCBT_MINMAX, hwnd, cmd) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
if( !SendMessage16( hwnd, WM_QUERYOPEN, 0, 0L) )
|
if( !SendMessage16( hwnd, WM_QUERYOPEN, 0, 0L) )
|
||||||
{
|
{
|
||||||
swpflags |= SWP_NOSIZE | SWP_NOMOVE;
|
swpflags |= SWP_NOSIZE | SWP_NOMOVE;
|
||||||
|
@ -660,6 +693,9 @@ BOOL ShowWindow( HWND hwnd, int cmd )
|
||||||
}
|
}
|
||||||
else if (wndPtr->dwStyle & WS_MAXIMIZE)
|
else if (wndPtr->dwStyle & WS_MAXIMIZE)
|
||||||
{
|
{
|
||||||
|
if( HOOK_CallHooks( WH_CBT, HCBT_MINMAX, hwnd, cmd) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
wndPtr->ptMaxPos.x = wndPtr->rectWindow.left;
|
wndPtr->ptMaxPos.x = wndPtr->rectWindow.left;
|
||||||
wndPtr->ptMaxPos.y = wndPtr->rectWindow.top;
|
wndPtr->ptMaxPos.y = wndPtr->rectWindow.top;
|
||||||
wndPtr->dwStyle &= ~WS_MAXIMIZE;
|
wndPtr->dwStyle &= ~WS_MAXIMIZE;
|
||||||
|
@ -855,6 +891,43 @@ BOOL32 SetWindowPlacement32( HWND32 hwnd, const WINDOWPLACEMENT32 *wndpl )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* WINPOS_ForceXWindowRaise
|
||||||
|
*/
|
||||||
|
void WINPOS_ForceXWindowRaise( WND* pWnd )
|
||||||
|
{
|
||||||
|
XWindowChanges winChanges;
|
||||||
|
WND *wndStop, *wndLast;
|
||||||
|
|
||||||
|
if (!pWnd->window) return;
|
||||||
|
|
||||||
|
wndLast = wndStop = pWnd;
|
||||||
|
winChanges.stack_mode = Above;
|
||||||
|
XReconfigureWMWindow( display, pWnd->window, 0, CWStackMode, &winChanges );
|
||||||
|
|
||||||
|
/* Recursively raise owned popups according to their z-order
|
||||||
|
* (it would be easier with sibling-related Below but it doesn't
|
||||||
|
* work very well with SGI mwm for instance)
|
||||||
|
*/
|
||||||
|
while (wndLast)
|
||||||
|
{
|
||||||
|
WND *wnd = WIN_GetDesktop()->child;
|
||||||
|
wndLast = NULL;
|
||||||
|
while (wnd != wndStop)
|
||||||
|
{
|
||||||
|
if (wnd->owner == pWnd &&
|
||||||
|
(wnd->dwStyle & WS_POPUP) &&
|
||||||
|
(wnd->dwStyle & WS_VISIBLE))
|
||||||
|
wndLast = wnd;
|
||||||
|
wnd = wnd->next;
|
||||||
|
}
|
||||||
|
if (wndLast)
|
||||||
|
{
|
||||||
|
WINPOS_ForceXWindowRaise( wndLast );
|
||||||
|
wndStop = wndLast;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* WINPOS_SetActiveWindow
|
* WINPOS_SetActiveWindow
|
||||||
|
@ -867,20 +940,16 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus)
|
||||||
WND *wndTemp = WIN_FindWndPtr(hwndActive);
|
WND *wndTemp = WIN_FindWndPtr(hwndActive);
|
||||||
CBTACTIVATESTRUCT16 *cbtStruct;
|
CBTACTIVATESTRUCT16 *cbtStruct;
|
||||||
WORD wIconized=0;
|
WORD wIconized=0;
|
||||||
|
HANDLE hOldActiveQueue = (pActiveQueue)?pActiveQueue->self:0;
|
||||||
HANDLE hNewActiveQueue;
|
HANDLE hNewActiveQueue;
|
||||||
|
|
||||||
/* FIXME: When proper support for cooperative multitasking is in place
|
|
||||||
* hActiveQ will be global
|
|
||||||
*/
|
|
||||||
|
|
||||||
HANDLE hActiveQ = 0;
|
|
||||||
|
|
||||||
/* paranoid checks */
|
/* paranoid checks */
|
||||||
if( hWnd == GetDesktopWindow() || hWnd == hwndActive )
|
if( hWnd == GetDesktopWindow32() || hWnd == hwndActive )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (wndPtr && (GetTaskQueue(0) != wndPtr->hmemTaskQ))
|
/* if (wndPtr && (GetTaskQueue(0) != wndPtr->hmemTaskQ))
|
||||||
return 0;
|
return 0;
|
||||||
|
*/
|
||||||
|
|
||||||
if( wndTemp )
|
if( wndTemp )
|
||||||
wIconized = HIWORD(wndTemp->dwStyle & WS_MINIMIZE);
|
wIconized = HIWORD(wndTemp->dwStyle & WS_MINIMIZE);
|
||||||
|
@ -946,15 +1015,10 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus)
|
||||||
if( !IsWindow(hWnd) ) return 0;
|
if( !IsWindow(hWnd) ) return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hwndPrevActive)
|
|
||||||
{
|
|
||||||
wndTemp = WIN_FindWndPtr( hwndPrevActive );
|
|
||||||
if (wndTemp) hActiveQ = wndTemp->hmemTaskQ;
|
|
||||||
}
|
|
||||||
hNewActiveQueue = wndPtr ? wndPtr->hmemTaskQ : 0;
|
hNewActiveQueue = wndPtr ? wndPtr->hmemTaskQ : 0;
|
||||||
|
|
||||||
/* send WM_ACTIVATEAPP if necessary */
|
/* send WM_ACTIVATEAPP if necessary */
|
||||||
if (hActiveQ != hNewActiveQueue)
|
if (hOldActiveQueue != hNewActiveQueue)
|
||||||
{
|
{
|
||||||
WND **list, **ppWnd;
|
WND **list, **ppWnd;
|
||||||
|
|
||||||
|
@ -962,24 +1026,27 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus)
|
||||||
{
|
{
|
||||||
for (ppWnd = list; *ppWnd; ppWnd++)
|
for (ppWnd = list; *ppWnd; ppWnd++)
|
||||||
{
|
{
|
||||||
/* Make sure that the window still exists */
|
|
||||||
if (!IsWindow( (*ppWnd)->hwndSelf )) continue;
|
if (!IsWindow( (*ppWnd)->hwndSelf )) continue;
|
||||||
if ((*ppWnd)->hmemTaskQ != hActiveQ) continue;
|
|
||||||
|
if ((*ppWnd)->hmemTaskQ == hOldActiveQueue)
|
||||||
SendMessage16( (*ppWnd)->hwndSelf, WM_ACTIVATEAPP,
|
SendMessage16( (*ppWnd)->hwndSelf, WM_ACTIVATEAPP,
|
||||||
0, QUEUE_GetQueueTask(hNewActiveQueue) );
|
0, QUEUE_GetQueueTask(hNewActiveQueue) );
|
||||||
}
|
}
|
||||||
HeapFree( SystemHeap, 0, list );
|
HeapFree( SystemHeap, 0, list );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pActiveQueue = (hNewActiveQueue)
|
||||||
|
? (MESSAGEQUEUE*) GlobalLock16(hNewActiveQueue) : NULL;
|
||||||
|
|
||||||
if ((list = WIN_BuildWinArray( WIN_GetDesktop() )))
|
if ((list = WIN_BuildWinArray( WIN_GetDesktop() )))
|
||||||
{
|
{
|
||||||
for (ppWnd = list; *ppWnd; ppWnd++)
|
for (ppWnd = list; *ppWnd; ppWnd++)
|
||||||
{
|
{
|
||||||
/* Make sure that the window still exists */
|
|
||||||
if (!IsWindow( (*ppWnd)->hwndSelf )) continue;
|
if (!IsWindow( (*ppWnd)->hwndSelf )) continue;
|
||||||
if ((*ppWnd)->hmemTaskQ != hNewActiveQueue) continue;
|
|
||||||
|
if ((*ppWnd)->hmemTaskQ == hNewActiveQueue)
|
||||||
SendMessage16( (*ppWnd)->hwndSelf, WM_ACTIVATEAPP,
|
SendMessage16( (*ppWnd)->hwndSelf, WM_ACTIVATEAPP,
|
||||||
1, QUEUE_GetQueueTask( hActiveQ ) );
|
1, QUEUE_GetQueueTask( hOldActiveQueue ) );
|
||||||
}
|
}
|
||||||
HeapFree( SystemHeap, 0, list );
|
HeapFree( SystemHeap, 0, list );
|
||||||
}
|
}
|
||||||
|
@ -1009,6 +1076,10 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus)
|
||||||
FOCUS_SwitchFocus( GetFocus32(),
|
FOCUS_SwitchFocus( GetFocus32(),
|
||||||
(wndPtr->dwStyle & WS_MINIMIZE)? 0: hwndActive);
|
(wndPtr->dwStyle & WS_MINIMIZE)? 0: hwndActive);
|
||||||
|
|
||||||
|
if( !hwndPrevActive && wndPtr &&
|
||||||
|
wndPtr->window && !(wndPtr->flags & WIN_MANAGED) )
|
||||||
|
WINPOS_ForceXWindowRaise(wndPtr);
|
||||||
|
|
||||||
/* if active wnd is minimized redraw icon title
|
/* if active wnd is minimized redraw icon title
|
||||||
if( hwndActive )
|
if( hwndActive )
|
||||||
{
|
{
|
||||||
|
@ -1020,6 +1091,50 @@ BOOL32 WINPOS_SetActiveWindow( HWND32 hWnd, BOOL32 fMouse, BOOL32 fChangeFocus)
|
||||||
return (hWnd == hwndActive);
|
return (hWnd == hwndActive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* WINPOS_ActivateOtherWindow
|
||||||
|
*
|
||||||
|
* DestroyWindow() helper. pWnd must be a top-level window.
|
||||||
|
*/
|
||||||
|
BOOL32 WINPOS_ActivateOtherWindow(WND* pWnd)
|
||||||
|
{
|
||||||
|
BOOL32 bRet = 0;
|
||||||
|
WND* pWndTo = NULL;
|
||||||
|
|
||||||
|
if( pWnd->hwndSelf == hwndPrevActive )
|
||||||
|
hwndPrevActive = 0;
|
||||||
|
|
||||||
|
if( hwndActive != pWnd->hwndSelf &&
|
||||||
|
( hwndActive || QUEUE_IsDoomedQueue(pWnd->hmemTaskQ)) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if( pWnd->dwStyle & WS_POPUP &&
|
||||||
|
WINPOS_IsGoodEnough( pWnd->owner ) ) pWndTo = pWnd->owner;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WND* pWndPtr = pWnd;
|
||||||
|
|
||||||
|
pWndTo = WIN_FindWndPtr(hwndPrevActive);
|
||||||
|
|
||||||
|
while( !WINPOS_IsGoodEnough(pWndTo) )
|
||||||
|
{
|
||||||
|
/* by now owned windows should've been taken care of */
|
||||||
|
|
||||||
|
pWndTo = pWndPtr->next;
|
||||||
|
pWndPtr = pWndTo;
|
||||||
|
if( !pWndTo ) return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bRet = WINPOS_SetActiveWindow( pWndTo->hwndSelf, FALSE, TRUE );
|
||||||
|
|
||||||
|
/* switch desktop queue to current active */
|
||||||
|
if( pWndTo->parent == WIN_GetDesktop())
|
||||||
|
WIN_GetDesktop()->hmemTaskQ = pWndTo->hmemTaskQ;
|
||||||
|
|
||||||
|
hwndPrevActive = 0;
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* WINPOS_ChangeActiveWindow
|
* WINPOS_ChangeActiveWindow
|
||||||
|
@ -1219,55 +1334,29 @@ static void WINPOS_MoveWindowZOrder( HWND hwnd, HWND hwndAfter )
|
||||||
*/
|
*/
|
||||||
HWND WINPOS_ReorderOwnedPopups(HWND hwndInsertAfter, WND* wndPtr, WORD flags)
|
HWND WINPOS_ReorderOwnedPopups(HWND hwndInsertAfter, WND* wndPtr, WORD flags)
|
||||||
{
|
{
|
||||||
WND* w = WIN_GetDesktop();
|
WND* w = WIN_GetDesktop()->child;
|
||||||
|
|
||||||
w = w->child;
|
if( wndPtr->dwStyle & WS_POPUP && wndPtr->owner )
|
||||||
|
|
||||||
/* if we are dealing with owned popup...
|
|
||||||
*/
|
|
||||||
if( wndPtr->dwStyle & WS_POPUP && wndPtr->owner && hwndInsertAfter != HWND_TOP )
|
|
||||||
{
|
{
|
||||||
BOOL bFound = FALSE;
|
/* implement "local z-order" between the top and owner window */
|
||||||
|
|
||||||
HWND hwndLocalPrev = HWND_TOP;
|
HWND hwndLocalPrev = HWND_TOP;
|
||||||
HWND hwndNewAfter = 0;
|
|
||||||
|
|
||||||
while( w )
|
if( hwndInsertAfter != HWND_TOP )
|
||||||
{
|
{
|
||||||
if( !bFound && hwndInsertAfter == hwndLocalPrev )
|
while( w != wndPtr->owner )
|
||||||
hwndInsertAfter = HWND_TOP;
|
|
||||||
|
|
||||||
if( w->dwStyle & WS_POPUP && w->owner == wndPtr->owner )
|
|
||||||
{
|
{
|
||||||
bFound = TRUE;
|
|
||||||
|
|
||||||
if( hwndInsertAfter == HWND_TOP )
|
|
||||||
{
|
|
||||||
hwndInsertAfter = hwndLocalPrev;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
hwndNewAfter = hwndLocalPrev;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( w == wndPtr->owner )
|
|
||||||
{
|
|
||||||
/* basically HWND_BOTTOM */
|
|
||||||
hwndInsertAfter = hwndLocalPrev;
|
|
||||||
|
|
||||||
if( bFound )
|
|
||||||
hwndInsertAfter = hwndNewAfter;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( w != wndPtr )
|
|
||||||
hwndLocalPrev = w->hwndSelf;
|
hwndLocalPrev = w->hwndSelf;
|
||||||
|
if( hwndLocalPrev == hwndInsertAfter ) break;
|
||||||
w = w->next;
|
w = w->next;
|
||||||
}
|
}
|
||||||
|
hwndInsertAfter = hwndLocalPrev;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
/* or overlapped top-level window...
|
}
|
||||||
*/
|
else if( wndPtr->dwStyle & WS_CHILD ) return hwndInsertAfter;
|
||||||
if( !(wndPtr->dwStyle & WS_CHILD) )
|
|
||||||
|
w = WIN_GetDesktop()->child;
|
||||||
while( w )
|
while( w )
|
||||||
{
|
{
|
||||||
if( w == wndPtr ) break;
|
if( w == wndPtr ) break;
|
||||||
|
@ -1343,7 +1432,7 @@ static UINT WINPOS_SizeMoveClean(WND* Wnd, HRGN oldVisRgn, LPRECT16 lpOldWndRect
|
||||||
}
|
}
|
||||||
else /* bitblt old client area */
|
else /* bitblt old client area */
|
||||||
{
|
{
|
||||||
HDC hDC;
|
HDC32 hDC;
|
||||||
int update;
|
int update;
|
||||||
HRGN updateRgn;
|
HRGN updateRgn;
|
||||||
int xfrom,yfrom,xto,yto,width,height;
|
int xfrom,yfrom,xto,yto,width,height;
|
||||||
|
@ -1386,11 +1475,13 @@ static UINT WINPOS_SizeMoveClean(WND* Wnd, HRGN oldVisRgn, LPRECT16 lpOldWndRect
|
||||||
OffsetRgn( newVisRgn, Wnd->rectClient.left, Wnd->rectClient.top);
|
OffsetRgn( newVisRgn, Wnd->rectClient.left, Wnd->rectClient.top);
|
||||||
CombineRgn( oldVisRgn, oldVisRgn, newVisRgn, RGN_OR );
|
CombineRgn( oldVisRgn, oldVisRgn, newVisRgn, RGN_OR );
|
||||||
|
|
||||||
hDC = GetDCEx( Wnd->parent->hwndSelf, oldVisRgn, DCX_KEEPCLIPRGN | DCX_INTERSECTRGN | DCX_CACHE | DCX_CLIPSIBLINGS);
|
hDC = GetDCEx32( Wnd->parent->hwndSelf, oldVisRgn,
|
||||||
|
DCX_KEEPCLIPRGN | DCX_INTERSECTRGN |
|
||||||
|
DCX_CACHE | DCX_CLIPSIBLINGS);
|
||||||
|
|
||||||
BitBlt( hDC, xto, yto, width, height, hDC, xfrom, yfrom, SRCCOPY );
|
BitBlt( hDC, xto, yto, width, height, hDC, xfrom, yfrom, SRCCOPY );
|
||||||
|
|
||||||
ReleaseDC( Wnd->parent->hwndSelf, hDC);
|
ReleaseDC32( Wnd->parent->hwndSelf, hDC);
|
||||||
}
|
}
|
||||||
|
|
||||||
if( update != NULLREGION )
|
if( update != NULLREGION )
|
||||||
|
@ -1411,45 +1502,6 @@ static UINT WINPOS_SizeMoveClean(WND* Wnd, HRGN oldVisRgn, LPRECT16 lpOldWndRect
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* WINPOS_ForceXWindowRaise
|
|
||||||
*/
|
|
||||||
void WINPOS_ForceXWindowRaise( WND* pWnd )
|
|
||||||
{
|
|
||||||
XWindowChanges winChanges;
|
|
||||||
WND *wndStop, *wndLast;
|
|
||||||
|
|
||||||
if (!pWnd->window) return;
|
|
||||||
|
|
||||||
wndLast = wndStop = pWnd;
|
|
||||||
winChanges.stack_mode = Above;
|
|
||||||
XReconfigureWMWindow( display, pWnd->window, 0, CWStackMode, &winChanges );
|
|
||||||
|
|
||||||
/* Recursively raise owned popups according to their z-order
|
|
||||||
* (it would be easier with sibling-related Below but it doesn't
|
|
||||||
* work very well with SGI mwm for instance)
|
|
||||||
*/
|
|
||||||
while (wndLast)
|
|
||||||
{
|
|
||||||
WND *wnd = WIN_GetDesktop()->child;
|
|
||||||
wndLast = NULL;
|
|
||||||
while (wnd != wndStop)
|
|
||||||
{
|
|
||||||
if (wnd->owner == pWnd &&
|
|
||||||
(wnd->dwStyle & WS_POPUP) &&
|
|
||||||
(wnd->dwStyle & WS_VISIBLE))
|
|
||||||
wndLast = wnd;
|
|
||||||
wnd = wnd->next;
|
|
||||||
}
|
|
||||||
if (wndLast)
|
|
||||||
{
|
|
||||||
WINPOS_ForceXWindowRaise( wndLast );
|
|
||||||
wndStop = wndLast;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WINPOS_SetXWindowPos
|
* WINPOS_SetXWindowPos
|
||||||
*
|
*
|
||||||
|
@ -1496,22 +1548,27 @@ static void WINPOS_SetXWindowPos( WINDOWPOS16 *winpos )
|
||||||
}
|
}
|
||||||
if (!(winpos->flags & SWP_NOZORDER))
|
if (!(winpos->flags & SWP_NOZORDER))
|
||||||
{
|
{
|
||||||
if (winpos->hwndInsertAfter == HWND_TOP) winChanges.stack_mode = Above;
|
winChanges.stack_mode = Below;
|
||||||
else winChanges.stack_mode = Below;
|
|
||||||
if ((winpos->hwndInsertAfter != HWND_TOP) &&
|
|
||||||
(winpos->hwndInsertAfter != HWND_BOTTOM))
|
|
||||||
{
|
|
||||||
WND * insertPtr = WIN_FindWndPtr( winpos->hwndInsertAfter );
|
|
||||||
winChanges.sibling = insertPtr->window;
|
|
||||||
changeMask |= CWSibling;
|
|
||||||
}
|
|
||||||
changeMask |= CWStackMode;
|
changeMask |= CWStackMode;
|
||||||
|
|
||||||
|
if (winpos->hwndInsertAfter == HWND_TOP) winChanges.stack_mode = Above;
|
||||||
|
else if (winpos->hwndInsertAfter != HWND_BOTTOM)
|
||||||
|
{
|
||||||
|
WND* insertPtr = WIN_FindWndPtr( winpos->hwndInsertAfter );
|
||||||
|
Window stack[2];
|
||||||
|
|
||||||
|
stack[0] = insertPtr->window;
|
||||||
|
stack[1] = wndPtr->window;
|
||||||
|
|
||||||
|
/* for stupid window managers (i.e. all of them) */
|
||||||
|
|
||||||
|
XRestackWindows(display, stack, 2);
|
||||||
|
changeMask &= ~CWStackMode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!changeMask) return;
|
if (!changeMask) return;
|
||||||
if (wndPtr->flags & WIN_MANAGED)
|
|
||||||
XReconfigureWMWindow( display, wndPtr->window, 0,
|
XReconfigureWMWindow( display, wndPtr->window, 0, changeMask, &winChanges );
|
||||||
changeMask, &winChanges );
|
|
||||||
else XConfigureWindow( display, wndPtr->window, changeMask, &winChanges );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1533,7 +1590,7 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, INT x, INT y,
|
||||||
hwnd, x, y, x+cx, y+cy, flags);
|
hwnd, x, y, x+cx, y+cy, flags);
|
||||||
/* Check window handle */
|
/* Check window handle */
|
||||||
|
|
||||||
if (hwnd == GetDesktopWindow()) return FALSE;
|
if (hwnd == GetDesktopWindow32()) return FALSE;
|
||||||
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
|
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
|
||||||
|
|
||||||
if (wndPtr->dwStyle & WS_VISIBLE) flags &= ~SWP_SHOWWINDOW;
|
if (wndPtr->dwStyle & WS_VISIBLE) flags &= ~SWP_SHOWWINDOW;
|
||||||
|
@ -1839,7 +1896,7 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, INT x, INT y,
|
||||||
HWND newActive = hwndPrevActive;
|
HWND newActive = hwndPrevActive;
|
||||||
if (!IsWindow(newActive) || (newActive == winpos->hwnd))
|
if (!IsWindow(newActive) || (newActive == winpos->hwnd))
|
||||||
{
|
{
|
||||||
newActive = GetTopWindow( GetDesktopWindow() );
|
newActive = GetTopWindow( GetDesktopWindow32() );
|
||||||
if (newActive == winpos->hwnd)
|
if (newActive == winpos->hwnd)
|
||||||
newActive = wndPtr->next ? wndPtr->next->hwndSelf : 0;
|
newActive = wndPtr->next ? wndPtr->next->hwndSelf : 0;
|
||||||
}
|
}
|
||||||
|
@ -1859,7 +1916,14 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, INT x, INT y,
|
||||||
EVENT_DummyMotionNotify(); /* Simulate a mouse event to set the cursor */
|
EVENT_DummyMotionNotify(); /* Simulate a mouse event to set the cursor */
|
||||||
|
|
||||||
if (!(flags & SWP_DEFERERASE) && !(uFlags & SMC_NOPARENTERASE) )
|
if (!(flags & SWP_DEFERERASE) && !(uFlags & SMC_NOPARENTERASE) )
|
||||||
PAINT_RedrawWindow( wndPtr->parent->hwndSelf, NULL, 0, RDW_ALLCHILDREN | RDW_ERASENOW, 0 );
|
{
|
||||||
|
RECT32 rect;
|
||||||
|
CONV_RECT16TO32( &oldWindowRect, &rect );
|
||||||
|
PAINT_RedrawWindow( wndPtr->parent->hwndSelf, (wndPtr->flags & WIN_SAVEUNDER_OVERRIDE)
|
||||||
|
? &rect : NULL, 0, RDW_ALLCHILDREN | RDW_ERASENOW |
|
||||||
|
((wndPtr->flags & WIN_SAVEUNDER_OVERRIDE) ? RDW_INVALIDATE : 0), 0 );
|
||||||
|
wndPtr->flags &= ~WIN_SAVEUNDER_OVERRIDE;
|
||||||
|
}
|
||||||
else if( wndPtr->parent == WIN_GetDesktop() && wndPtr->parent->flags & WIN_NEEDS_ERASEBKGND )
|
else if( wndPtr->parent == WIN_GetDesktop() && wndPtr->parent->flags & WIN_NEEDS_ERASEBKGND )
|
||||||
PAINT_RedrawWindow( wndPtr->parent->hwndSelf, NULL, 0, RDW_NOCHILDREN | RDW_ERASENOW, 0 );
|
PAINT_RedrawWindow( wndPtr->parent->hwndSelf, NULL, 0, RDW_NOCHILDREN | RDW_ERASENOW, 0 );
|
||||||
|
|
||||||
|
@ -1911,7 +1975,7 @@ HDWP16 DeferWindowPos( HDWP16 hdwp, HWND hwnd, HWND hwndAfter, INT x, INT y,
|
||||||
|
|
||||||
pDWP = (DWP *) USER_HEAP_LIN_ADDR( hdwp );
|
pDWP = (DWP *) USER_HEAP_LIN_ADDR( hdwp );
|
||||||
if (!pDWP) return 0;
|
if (!pDWP) return 0;
|
||||||
if (hwnd == GetDesktopWindow()) return 0;
|
if (hwnd == GetDesktopWindow32()) return 0;
|
||||||
|
|
||||||
/* All the windows of a DeferWindowPos() must have the same parent */
|
/* All the windows of a DeferWindowPos() must have the same parent */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue