Release 960728
Sun Jul 28 17:57:19 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [loader/task.c] [include/task.h]
Implemented SwitchStackTo()/SwitchStackBack().
* [include/wintypes.h] [loader/main.c]
Added __winelib variable to distinguish between emulator and
library at run-time. Later on, this should avoid some
recompilations when building Winelib.
* [windows/property.c]
Implemented Win32 functions for window properties.
Fri Jul 26 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [controls/listbox.c]
Implemented LBS_SORT style, WM_COMPAREITEM, and WM_DELETEITEM
messages.
* [controls/menu.c]
Call TranslateMessage() to enable shortcuts (on WM_CHAR).
* [include/cursoricon.h]
Moved #pragma pack(1) back to where it belongs.
* [objects/palette.c]
RealizeDefaultPalette() maps to system colors only.
Do not broadcast palette notifications when in TrueColor.
* [objects/color.c] [include/palette.h]
Miscellaneous optimizations. Had to fix several
"improvements" made to my patch for previous release.
* [objects/dib.c]
Reverse dib bits order for 24-bit SetDIBits().
* [objects/dc.c]
GetDeviceCaps() does not return RC_PALETTE when in TrueColor.
* [windows/scroll.c]
Scroll update region too.
* [windows/message.c]
Include QS_MOUSE into the event mask for nonclient mouse
message filter. Fixes problems with Word 6 freezing when
mouse hits nonclient area.
* [windows/win.c]
Allow top-level windows to be linked as HWND_TOP in CreateWindow().
* [windows/winpos.c] [windows/mdi.c]
Attempt to fix control menu duplication.
Fri Jul 26 09:49:35 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c]
GetDriveType32A(): return value for CDROM fixed.
* [files/file.c]
SearchPath* added.
* [if1632/gdi32.spec] [objects/brush.c]
SetBrushOrgEx() added.
* [loader/pe_resource.c]
If even loading the default entry fails, we just use the first
entry from the resource directory.
[loader/task.c]
SetSigHandler() stub added, Paradox 4.5 now starts up.
* [misc/comm.c] [include/windows.h] [if1632/kernel32.spec]
COMM functions updated to win32, not complete.
* [misc/lstr.c]
FormatMessageA partially implemented.
* [include/miscemu.h] [memory/selector.c]
[memory/global.c] [miscemu/dosmem.c]
DOS memory handling changed: 1MB preallocated block, real-mode
segment handling possible, SetSelectorBase into lower physical 1MB
possible.
* [miscemu/dpmi.c]
Real-mode segments changed, real-mode int 21,ax=6506 added.
AX=0x0303 added.
* [multimedia/time.c]
Fixed bug in killTimer.
* [objects/bitmap.c]
LoadImageA partially implemented.
Wed Jul 24 18:20:24 1996 Albrecht Kleine <kleine@ak.sax.de>
* [include/dde_mem.h][include/dde_proc.h]
[ipc/dde_atom.c][ipc/dde_proc.c][windows/message.c]
[ipc/generic_hash.h][library/miscstubs.c]
Changes for error free compilation using "--with-ipc":
replaced some names with *16-equivalent (e.g. MSG to MSG16),
modified prototype of function DDE_GlobalFree() .
* [objects/palette.c]
Added check for metafile-DC in GDISelectPalette(),
GDIRealizePalette(),RealizeDefaultPalette() and
IsDCCurrentPalette().
Tue Jul 23 22:46:53 1996 Andrew Lewycky <plewycky@oise.utoronto.ca>
* [controls/edit.c]
EDIT_WM_Create: Don't EDIT_EM_ReplaceSel if created with lParam = "",
fixes Winhelp.
* [windows/dialog.c]
DIALOG_CreateIndirect: Initialise dlgProc before creating children.
diff --git a/windows/scroll.c b/windows/scroll.c
index d25450d..d00330b 100644
--- a/windows/scroll.c
+++ b/windows/scroll.c
@@ -33,9 +33,8 @@
* dcx can have DCX_WINDOW, DCX_CLIPCHILDREN, DCX_CLIPSIBLINGS set
*/
-HRGN SCROLL_TraceChildren( HWND hScroll, short dx, short dy, WORD dcx)
+HRGN SCROLL_TraceChildren( WND* wndScroll, short dx, short dy, WORD dcx)
{
- WND *wndScroll = WIN_FindWndPtr( hScroll );
HRGN hRgnWnd;
HRGN hUpdateRgn,hCombineRgn;
@@ -45,13 +44,13 @@
hRgnWnd = CreateRectRgnIndirect16(&wndScroll->rectWindow);
else
{
- RECT32 rect;
+ RECT32 rect = { 0, 0, wndScroll->rectClient.right - wndScroll->rectClient.left,
+ wndScroll->rectClient.bottom - wndScroll->rectClient.top };
- GetClientRect32(hScroll,&rect);
hRgnWnd = CreateRectRgnIndirect32(&rect);
}
- hUpdateRgn = DCE_GetVisRgn( hScroll, dcx );
+ hUpdateRgn = DCE_GetVisRgn( wndScroll->hwndSelf, dcx );
hCombineRgn = CreateRectRgn(0,0,0,0);
if( !hUpdateRgn || !hCombineRgn )
@@ -74,21 +73,21 @@
/* ----------------------------------------------------------------------
* SCROLL_ScrollChildren
*/
-BOOL SCROLL_ScrollChildren( HWND hScroll, short dx, short dy)
+BOOL SCROLL_ScrollChildren( WND* wndScroll, short dx, short dy)
{
- WND *wndPtr = WIN_FindWndPtr(hScroll);
+ WND *wndPtr = NULL;
HRGN hUpdateRgn;
BOOL b = 0;
- if( !wndPtr || ( !dx && !dy )) return 0;
+ if( !wndScroll || ( !dx && !dy )) return 0;
- dprintf_scroll(stddeb,"SCROLL_ScrollChildren: hwnd %04x dx=%i dy=%i\n",hScroll,dx,dy);
+ dprintf_scroll(stddeb,"SCROLL_ScrollChildren: hwnd %04x dx=%i dy=%i\n",wndScroll->hwndSelf,dx,dy);
/* get a region in client rect invalidated by siblings and ansectors */
- hUpdateRgn = SCROLL_TraceChildren(hScroll, dx , dy, DCX_CLIPSIBLINGS);
+ hUpdateRgn = SCROLL_TraceChildren(wndScroll, dx , dy, DCX_CLIPSIBLINGS);
/* update children coordinates */
- for (wndPtr = wndPtr->child; wndPtr; wndPtr = wndPtr->next)
+ for (wndPtr = wndScroll->child; wndPtr; wndPtr = wndPtr->next)
{
/* we can check if window intersects with clipRect parameter
* and do not move it if not - just a thought. - AK
@@ -100,8 +99,8 @@
}
/* invalidate uncovered region and paint frames */
- b = RedrawWindow32( hScroll, NULL, hUpdateRgn, RDW_INVALIDATE | RDW_FRAME | RDW_ERASE |
- RDW_ERASENOW | RDW_ALLCHILDREN );
+ b = RedrawWindow32( wndScroll->hwndSelf, NULL, hUpdateRgn,
+ RDW_INVALIDATE | RDW_FRAME | RDW_ERASE | RDW_ERASENOW | RDW_ALLCHILDREN );
DeleteObject( hUpdateRgn);
return b;
@@ -114,10 +113,11 @@
*/
void ScrollWindow(HWND hwnd, short dx, short dy, LPRECT16 rect, LPRECT16 clipRect)
{
- HDC hdc;
- HRGN hrgnUpdate,hrgnClip;
- RECT16 rc, cliprc;
- HWND hCaretWnd = CARET_GetHwnd();
+ HDC hdc;
+ HRGN hrgnUpdate,hrgnClip;
+ RECT16 rc, cliprc;
+ HWND hCaretWnd = CARET_GetHwnd();
+ WND* wndScroll = WIN_FindWndPtr( hwnd );
dprintf_scroll(stddeb,"ScrollWindow: dx=%d, dy=%d, lpRect =%08lx clipRect=%i,%i,%i,%i\n",
dx, dy, (LONG)rect, (int)((clipRect)?clipRect->left:0),
@@ -158,6 +158,11 @@
else
CopyRect16(&cliprc, clipRect);
+ /* move window update region (if any) */
+
+ if( wndScroll->hrgnUpdate > 1 )
+ OffsetRgn( wndScroll->hrgnUpdate, dx, dy );
+
hrgnUpdate = CreateRectRgn(0, 0, 0, 0);
ScrollDC(hdc, dx, dy, &rc, &cliprc, hrgnUpdate, NULL);
ReleaseDC(hwnd, hdc);
@@ -165,13 +170,14 @@
if( !rect )
{
/* FIXME: this doesn't take into account hrgnUpdate */
- if( !SCROLL_ScrollChildren(hwnd,dx,dy) )
+
+ if( !SCROLL_ScrollChildren( wndScroll, dx,dy) )
InvalidateRgn(hwnd, hrgnUpdate, TRUE);
}
else
{
- HRGN hrgnInv = SCROLL_TraceChildren(hwnd,dx,dy,DCX_CLIPCHILDREN |
- DCX_CLIPSIBLINGS );
+ HRGN hrgnInv = SCROLL_TraceChildren( wndScroll ,dx,dy,DCX_CLIPCHILDREN |
+ DCX_CLIPSIBLINGS );
if( hrgnInv )
{
CombineRgn(hrgnUpdate,hrgnInv,hrgnUpdate,RGN_OR);