Release 0.6
Tue Jan 4 13:01:33 1994 David Metcalfe <david@prism.demon.co.uk> * [window/caret.c] Modified code to use system timer. Jan 9, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte) * [windows/win.c] Windows create if required new XLIB MenuBar & CaptionBar. * [windows/defwnd.c] WM_CALCSIZE Move & Resize caption, menubar & scrollbars. (I'm not sure it's the good place for it, but it work...) * [loader/resource.c] optimize in FindResourceByNumber, make lseek() if next type ... * [controls/scroll.c] scrollbar buttons are now using system resources bitmaps. * [controls/caption.c] - new file ... captionbar showing title, close button with SysMenu, and other buttons using system resources bitmaps. * [controls/menu.c] New functions: SetMenuItemBitmaps() with 'glues', Make new version of LoadMenu() & ParseMenu(), ( put #define USE_POPUPMENU ). Implementation of MenuBar functions. * [sysres.dll] New bitmaps for system such OBM_CLOSE, OBM_MINIMIZE, OBM_UPARROWI. New SYSMENU menu, it don't work yet ! :-(( Tue Jan 11 05:27:45 1994 julliard@di.epfl.ch (Alexandre Julliard * [memory/atom.c] Fixed a bug that could cause atoms to be case-sensitive. * [misc/rect.c] Bug fix in SubtractRect(). * [objects/clipping.c] Bug fix when setting the clip mask to an empty region. * [windows/dce.c] Bug fix in ReleaseDC(). * [windows/dialog.c] Call AdjustWindowRectEx() before creating the dialog window. Added support for DS_MODALFRAME style. * [windows/event.c] Cleaned up event handling and removed old Xt stuff. Moved double-click handling to windows/message.c * [windows/focus.c] Bug fix: only set the X focus when the window is viewable. * [windows/graphics.c] Rewritten DrawReliefRect() to use brush instead of pen, and to use the system colors. * [windows/message.c] Implemented WM_NCHITTEST message sending, and non-client mouse messages. Cleaned up double-click handling, and removed the Xt code. * [windows/nonclient.c] (New file) Implemented AdjustWindowRect(). Implemented WM_NCCALCSIZE, WM_NCHITTEST and WM_NCPAINT handling. * [windows/painting.c] Added sending of the WM_NCPAINT message in BeginPaint(). * [windows/sysmetrics.c] [include/sysmetrics.h] (New files) Implemented system metrics. * [windows/win.c] Bug fix in setting the parent and owner in CreateWindow(). Removed the Xt code. * [windows/winpos.c] Added sending of the WM_NCPAINT message in SetWindowPos(). Removed the Xt code.
This commit is contained in:
parent
5f721f81fd
commit
cdd0923710
88
ChangeLog
88
ChangeLog
|
@ -1,3 +1,90 @@
|
|||
Tue Jan 4 13:01:33 1994 David Metcalfe <david@prism.demon.co.uk>
|
||||
|
||||
* [window/caret.c]
|
||||
Modified code to use system timer.
|
||||
|
||||
Jan 9, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
|
||||
|
||||
* [windows/win.c]
|
||||
Windows create if required new XLIB MenuBar & CaptionBar.
|
||||
|
||||
* [windows/defwnd.c]
|
||||
WM_CALCSIZE Move & Resize caption, menubar & scrollbars.
|
||||
(I'm not sure it's the good place for it, but it work...)
|
||||
|
||||
* [loader/resource.c]
|
||||
optimize in FindResourceByNumber, make lseek() if next type ...
|
||||
|
||||
* [controls/scroll.c]
|
||||
scrollbar buttons are now using system resources bitmaps.
|
||||
|
||||
* [controls/caption.c] - new file ...
|
||||
captionbar showing title, close button with SysMenu,
|
||||
and other buttons using system resources bitmaps.
|
||||
|
||||
* [controls/menu.c]
|
||||
New functions: SetMenuItemBitmaps() with 'glues',
|
||||
Make new version of LoadMenu() & ParseMenu(),
|
||||
( put #define USE_POPUPMENU ).
|
||||
Implementation of MenuBar functions.
|
||||
|
||||
* [sysres.dll]
|
||||
New bitmaps for system such OBM_CLOSE, OBM_MINIMIZE, OBM_UPARROWI.
|
||||
New SYSMENU menu, it don't work yet ! :-((
|
||||
|
||||
Tue Jan 11 05:27:45 1994 julliard@di.epfl.ch (Alexandre Julliard
|
||||
|
||||
* [memory/atom.c]
|
||||
Fixed a bug that could cause atoms to be case-sensitive.
|
||||
|
||||
* [misc/rect.c]
|
||||
Bug fix in SubtractRect().
|
||||
|
||||
* [objects/clipping.c]
|
||||
Bug fix when setting the clip mask to an empty region.
|
||||
|
||||
* [windows/dce.c]
|
||||
Bug fix in ReleaseDC().
|
||||
|
||||
* [windows/dialog.c]
|
||||
Call AdjustWindowRectEx() before creating the dialog window.
|
||||
Added support for DS_MODALFRAME style.
|
||||
|
||||
* [windows/event.c]
|
||||
Cleaned up event handling and removed old Xt stuff.
|
||||
Moved double-click handling to windows/message.c
|
||||
|
||||
* [windows/focus.c]
|
||||
Bug fix: only set the X focus when the window is viewable.
|
||||
|
||||
* [windows/graphics.c]
|
||||
Rewritten DrawReliefRect() to use brush instead of pen, and
|
||||
to use the system colors.
|
||||
|
||||
* [windows/message.c]
|
||||
Implemented WM_NCHITTEST message sending, and non-client
|
||||
mouse messages.
|
||||
Cleaned up double-click handling, and removed the Xt code.
|
||||
|
||||
* [windows/nonclient.c] (New file)
|
||||
Implemented AdjustWindowRect().
|
||||
Implemented WM_NCCALCSIZE, WM_NCHITTEST and WM_NCPAINT handling.
|
||||
|
||||
* [windows/painting.c]
|
||||
Added sending of the WM_NCPAINT message in BeginPaint().
|
||||
|
||||
* [windows/sysmetrics.c] [include/sysmetrics.h] (New files)
|
||||
Implemented system metrics.
|
||||
|
||||
* [windows/win.c]
|
||||
Bug fix in setting the parent and owner in CreateWindow().
|
||||
Removed the Xt code.
|
||||
|
||||
* [windows/winpos.c]
|
||||
Added sending of the WM_NCPAINT message in SetWindowPos().
|
||||
Removed the Xt code.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Sun Jan 2 12:38:53 1994 David Metcalfe <david@prism.demon.co.uk>
|
||||
|
||||
* [windows/class.c]
|
||||
|
@ -101,7 +188,6 @@ Sat Jan 1 10:22:43 1994 Bob Amstadt (bob@pooh)
|
|||
|
||||
* loader/wine.c: Added support for relocation types 5 and 6.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Mon Dec 27 11:06:03 1993 Erik Bos (erik@trashcan.hacktic.nl)
|
||||
|
||||
* [misc/comm.c]
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
|||
######################################################################
|
||||
# These variables are inherited by the sub-makefiles
|
||||
DEBUGOPTS=-DUSE_XLIB
|
||||
DEBUGOPTS=
|
||||
COPTS=-O2 -m486
|
||||
INCLUDE_DIR=include
|
||||
LDFLAGS=
|
||||
|
|
8
README
8
README
|
@ -41,6 +41,14 @@ For example: to run Windows' solitaire:
|
|||
Have a nice game of solitaire, but be careful. Emulation isn't perfect.
|
||||
So, occassionally it will crash.
|
||||
|
||||
WHAT'S NEW with version 0.6: (see ChangeLog for details)
|
||||
- Working towards elimination of Xt-dependent code. Thanks to
|
||||
Alexandre and Martin.
|
||||
- Other bug fixes.
|
||||
- I added a rudimentary spy facility which can be turned
|
||||
on from the wine.ini file. See the sample wine.ini
|
||||
for details
|
||||
|
||||
WHAT'S NEW with version 0.5: (see ChangeLog for details)
|
||||
- Working towards elimination of Xt-dependent code.
|
||||
- StretchBlt()
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
CFLAGS=$(COPTS) $(DEBUGOPTS) -I$(INCLUDE_DIR)
|
||||
|
||||
OBJS=menu.o widgets.o button.o scroll.o listbox.o combo.o static.o \
|
||||
OBJS = menu.o caption.o widgets.o button.o \
|
||||
scroll.o listbox.o combo.o static.o \
|
||||
SmeMenuButto.o WinLabel.o WinCommand.o \
|
||||
WinMenuButto.o
|
||||
|
||||
|
|
|
@ -0,0 +1,296 @@
|
|||
/*
|
||||
* Interface code to CAPTION widget
|
||||
*
|
||||
* Copyright Martin Ayotte, 1994
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
#define DEBUG_CAPTION
|
||||
*/
|
||||
|
||||
static char Copyright[] = "Copyright Martin Ayotte, 1994";
|
||||
|
||||
#include <X11/Intrinsic.h>
|
||||
#include <X11/StringDefs.h>
|
||||
#include "windows.h"
|
||||
#include "caption.h"
|
||||
#include "heap.h"
|
||||
#include "win.h"
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
HBITMAP hStdClose = (HBITMAP)NULL;
|
||||
HBITMAP hStdCloseD = (HBITMAP)NULL;
|
||||
HBITMAP hStdMinim = (HBITMAP)NULL;
|
||||
HBITMAP hStdMinimD = (HBITMAP)NULL;
|
||||
HBITMAP hStdMaxim = (HBITMAP)NULL;
|
||||
HBITMAP hStdMaximD = (HBITMAP)NULL;
|
||||
HMENU hStdSysMenu = (HMENU)NULL;
|
||||
|
||||
LPHEADCAPTION CaptionBarGetWindowAndStorage(HWND hWnd, WND **wndPtr);
|
||||
LPHEADCAPTION CaptionBarGetStorageHeader(HWND hWnd);
|
||||
void SetMenuLogicalParent(HMENU hMenu, HWND hWnd);
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CaptionBarWndProc
|
||||
*/
|
||||
LONG CaptionBarWndProc( HWND hWnd, WORD message, WORD wParam, LONG lParam )
|
||||
{
|
||||
WORD wRet;
|
||||
short x, y;
|
||||
short width, height;
|
||||
WND *wndPtr;
|
||||
LPHEADCAPTION lphs;
|
||||
PAINTSTRUCT ps;
|
||||
HDC hDC;
|
||||
HDC hMemDC;
|
||||
BITMAP bm;
|
||||
RECT rect;
|
||||
char str[128];
|
||||
switch(message)
|
||||
{
|
||||
case WM_CREATE:
|
||||
wndPtr = WIN_FindWndPtr(hWnd);
|
||||
lphs = (LPHEADCAPTION)malloc(sizeof(HEADCAPTION));
|
||||
if (lphs == 0) {
|
||||
printf("Bad Memory Alloc on CAPTIONBAR !\n");
|
||||
return 0;
|
||||
}
|
||||
memset(lphs, 0, sizeof(HEADCAPTION));
|
||||
#ifdef DEBUG_CAPTION
|
||||
printf("CreateCaptionBarStruct %lX !\n", lphs);
|
||||
#endif
|
||||
*((LPHEADCAPTION *)&wndPtr->wExtra[1]) = lphs;
|
||||
if (hStdClose == (HBITMAP)NULL)
|
||||
hStdClose = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_CLOSE));
|
||||
lphs->hClose = hStdClose;
|
||||
if (hStdMinim == (HBITMAP)NULL)
|
||||
hStdMinim = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_REDUCE));
|
||||
lphs->hMinim = hStdMinim;
|
||||
if (hStdMaxim == (HBITMAP)NULL)
|
||||
hStdMaxim = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_RESTORE));
|
||||
lphs->hMaxim = hStdMaxim;
|
||||
if (hStdCloseD == (HBITMAP)NULL)
|
||||
hStdCloseD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_CLOSE));
|
||||
if (hStdMinimD == (HBITMAP)NULL)
|
||||
hStdMinimD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_REDUCED));
|
||||
if (hStdMaximD == (HBITMAP)NULL)
|
||||
hStdMaximD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_RESTORED));
|
||||
if (hStdSysMenu == (HBITMAP)NULL)
|
||||
hStdSysMenu = LoadMenu((HINSTANCE)NULL, "SYSMENU");
|
||||
lphs->hSysMenu = hStdSysMenu;
|
||||
printf("CaptionBar SYSMENU %04X !\n", lphs->hSysMenu);
|
||||
if (lphs->hSysMenu == 0) lphs->hSysMenu = CreatePopupMenu();
|
||||
AppendMenu(lphs->hSysMenu, MF_STRING, 9999, "About &Wine ...");
|
||||
GetClientRect(hWnd, &rect);
|
||||
CopyRect(&lphs->rectClose, &rect);
|
||||
CopyRect(&lphs->rectMaxim, &rect);
|
||||
lphs->rectClose.right = lphs->rectClose.left +
|
||||
lphs->rectClose.bottom + lphs->rectClose.top;
|
||||
lphs->rectMaxim.left = lphs->rectMaxim.right -
|
||||
lphs->rectMaxim.bottom + lphs->rectMaxim.top;
|
||||
CopyRect(&lphs->rectMinim, &lphs->rectMaxim);
|
||||
if (lphs->hMaxim != 0) {
|
||||
lphs->rectMinim.left = lphs->rectMaxim.bottom + lphs->rectMaxim.top;
|
||||
lphs->rectMinim.right = lphs->rectMaxim.bottom + lphs->rectMaxim.top;
|
||||
}
|
||||
if (lphs->hClose == 0) lphs->rectClose.right = lphs->rectClose.left;
|
||||
printf("CAPTION Close.right=%d Maxim.left=%d Minim.left=%d !\n",
|
||||
lphs->rectClose.right, lphs->rectMaxim.left, lphs->rectMinim.left);
|
||||
return 0;
|
||||
case WM_DESTROY:
|
||||
lphs = CaptionBarGetWindowAndStorage(hWnd, &wndPtr);
|
||||
if (lphs == 0) return 0;
|
||||
#ifdef DEBUG_CAPTION
|
||||
printf("CaptionBar WM_DESTROY %lX !\n", lphs);
|
||||
#endif
|
||||
DestroyMenu(lphs->hSysMenu);
|
||||
free(lphs);
|
||||
*((LPHEADCAPTION *)&wndPtr->wExtra[1]) = 0;
|
||||
return 0;
|
||||
case WM_COMMAND:
|
||||
#ifdef DEBUG_CAPTION
|
||||
printf("CaptionBar WM_COMMAND %04X %08X !\n", wParam, lParam);
|
||||
#endif
|
||||
lphs = CaptionBarGetWindowAndStorage(hWnd, &wndPtr);
|
||||
if (wParam == 9999) {
|
||||
printf("CaptionBar Show 'About Wine ...' !\n");
|
||||
}
|
||||
SendMessage(wndPtr->hwndParent, message, wParam, lParam);
|
||||
break;
|
||||
case WM_SIZE:
|
||||
lphs = CaptionBarGetWindowAndStorage(hWnd, &wndPtr);
|
||||
width = LOWORD(lParam);
|
||||
height = HIWORD(lParam);
|
||||
if (lphs->hClose != 0)
|
||||
SetRect(&lphs->rectClose, 0, 0, height, height);
|
||||
if (lphs->hMinim != 0) {
|
||||
if (lphs->hMaxim != 0)
|
||||
SetRect(&lphs->rectMinim, width - 2 * height, 0,
|
||||
width - height, height);
|
||||
else
|
||||
SetRect(&lphs->rectMinim, width - height, 0, width, height);
|
||||
}
|
||||
if (lphs->hMaxim != 0)
|
||||
SetRect(&lphs->rectMaxim, width - height, 0, width, height);
|
||||
break;
|
||||
case WM_LBUTTONDOWN:
|
||||
lphs = CaptionBarGetWindowAndStorage(hWnd, &wndPtr);
|
||||
SetCapture(hWnd);
|
||||
x = LOWORD(lParam);
|
||||
y = HIWORD(lParam);
|
||||
hDC = GetDC(hWnd);
|
||||
if (x > lphs->rectClose.left && x < lphs->rectClose.right) {
|
||||
lphs->hClose = hStdCloseD;
|
||||
InvalidateRect(hWnd, &lphs->rectClose, TRUE);
|
||||
UpdateWindow(hWnd);
|
||||
}
|
||||
if (x > lphs->rectMinim.left && x < lphs->rectMinim.right) {
|
||||
lphs->hMinim = hStdMinimD;
|
||||
InvalidateRect(hWnd, &lphs->rectMinim, TRUE);
|
||||
UpdateWindow(hWnd);
|
||||
}
|
||||
if (x > lphs->rectMaxim.left && x < lphs->rectMaxim.right &&
|
||||
lphs->hMaxim != 0) {
|
||||
lphs->hMaxim = hStdMaximD;
|
||||
InvalidateRect(hWnd, &lphs->rectMaxim, TRUE);
|
||||
UpdateWindow(hWnd);
|
||||
}
|
||||
ReleaseDC(hWnd, hDC);
|
||||
break;
|
||||
case WM_LBUTTONUP:
|
||||
lphs = CaptionBarGetWindowAndStorage(hWnd, &wndPtr);
|
||||
ReleaseCapture();
|
||||
#ifdef DEBUG_CAPTION
|
||||
printf("CaptionBar WM_LBUTTONUP %lX !\n", lParam);
|
||||
#endif
|
||||
x = LOWORD(lParam);
|
||||
y = HIWORD(lParam);
|
||||
if (x > lphs->rectClose.left && x < lphs->rectClose.right) {
|
||||
lphs->hClose = hStdClose;
|
||||
InvalidateRect(hWnd, &lphs->rectClose, TRUE);
|
||||
UpdateWindow(hWnd);
|
||||
TrackPopupMenu(lphs->hSysMenu, TPM_LEFTBUTTON, 0, -20,
|
||||
0, wndPtr->hwndParent, (LPRECT)NULL);
|
||||
SetMenuLogicalParent(lphs->hSysMenu, hWnd);
|
||||
printf("CAPTION Pop the SYSMENU !\n");
|
||||
break;
|
||||
}
|
||||
if (x > lphs->rectMinim.left && x < lphs->rectMinim.right) {
|
||||
SendMessage(wndPtr->hwndParent, WM_SYSCOMMAND, SC_MINIMIZE, 0L);
|
||||
lphs->hMinim = hStdMinim;
|
||||
InvalidateRect(hWnd, &lphs->rectMinim, TRUE);
|
||||
UpdateWindow(hWnd);
|
||||
printf("CAPTION Minimize Window !\n");
|
||||
break;
|
||||
}
|
||||
if (x > lphs->rectMaxim.left && x < lphs->rectMaxim.right) {
|
||||
lphs->hMaxim = hStdMaxim;
|
||||
InvalidateRect(hWnd, &lphs->rectMaxim, TRUE);
|
||||
UpdateWindow(hWnd);
|
||||
SendMessage(wndPtr->hwndParent, WM_SYSCOMMAND, SC_MAXIMIZE, 0L);
|
||||
printf("CAPTION Maximize Window !\n");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_LBUTTONDBLCLK:
|
||||
lphs = CaptionBarGetWindowAndStorage(hWnd, &wndPtr);
|
||||
#ifdef DEBUG_CAPTION
|
||||
printf("CaptionBar WM_LBUTTONDBLCLK %lX !\n", lParam);
|
||||
#endif
|
||||
x = LOWORD(lParam);
|
||||
y = HIWORD(lParam);
|
||||
if (x > lphs->rectClose.left && x < lphs->rectClose.right) {
|
||||
SendMessage(wndPtr->hwndParent, WM_SYSCOMMAND, SC_CLOSE, 0L);
|
||||
printf("CAPTION DoubleClick Close Window !\n");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_KEYDOWN:
|
||||
case WM_KEYUP:
|
||||
case WM_CHAR:
|
||||
lphs = CaptionBarGetWindowAndStorage(hWnd, &wndPtr);
|
||||
return(SendMessage(wndPtr->hwndParent, message, wParam, lParam));
|
||||
|
||||
case WM_PAINT:
|
||||
GetWindowRect(hWnd, &rect);
|
||||
#ifdef DEBUG_CAPTION
|
||||
printf("CaptionBar WM_PAINT left=%d top=%d right=%d bottom=%d !\n",
|
||||
rect.left, rect.top, rect.right, rect.bottom);
|
||||
#endif
|
||||
lphs = CaptionBarGetWindowAndStorage(hWnd, &wndPtr);
|
||||
hDC = BeginPaint(hWnd, &ps);
|
||||
hMemDC = CreateCompatibleDC(hDC);
|
||||
if (lphs->hClose != 0) {
|
||||
GetObject(lphs->hClose, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, lphs->hClose);
|
||||
BitBlt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
if (lphs->hMinim != 0) {
|
||||
GetObject(lphs->hMinim, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, lphs->hMinim);
|
||||
BitBlt(hDC, lphs->rectMinim.left, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
if (lphs->hMaxim != 0) {
|
||||
GetObject(lphs->hMaxim, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, lphs->hMaxim);
|
||||
BitBlt(hDC, lphs->rectMaxim.left, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
DeleteDC(hMemDC);
|
||||
GetClientRect(hWnd, &rect);
|
||||
FrameRect(hDC, &rect, GetStockObject(BLACK_BRUSH));
|
||||
rect.left = lphs->rectClose.right;
|
||||
rect.right = lphs->rectMinim.left;
|
||||
#ifdef DEBUG_CAPTION
|
||||
printf("CaptionBar WM_PAINT left=%d top=%d right=%d bottom=%d !\n",
|
||||
rect.left, rect.top, rect.right, rect.bottom);
|
||||
#endif
|
||||
FillRect(hDC, &rect, GetStockObject(GRAY_BRUSH));
|
||||
if (GetWindowTextLength(wndPtr->hwndParent) > 0) {
|
||||
GetWindowText(wndPtr->hwndParent, str, sizeof(str));
|
||||
width = GetTextExtent(hDC, str, strlen(str));
|
||||
DrawText(hDC, str, -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
|
||||
}
|
||||
EndPaint(hWnd, &ps);
|
||||
break;
|
||||
default:
|
||||
return DefWindowProc( hWnd, message, wParam, lParam );
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
LPHEADCAPTION CaptionBarGetWindowAndStorage(HWND hWnd, WND **wndPtr)
|
||||
{
|
||||
WND *Ptr;
|
||||
LPHEADCAPTION lphs;
|
||||
*(wndPtr) = Ptr = WIN_FindWndPtr(hWnd);
|
||||
if (Ptr == 0) {
|
||||
printf("Bad Window handle on CaptionBar !\n");
|
||||
return 0;
|
||||
}
|
||||
lphs = *((LPHEADCAPTION *)&Ptr->wExtra[1]);
|
||||
return lphs;
|
||||
}
|
||||
|
||||
|
||||
LPHEADCAPTION CaptionBarGetStorageHeader(HWND hWnd)
|
||||
{
|
||||
WND *wndPtr;
|
||||
LPHEADCAPTION lphs;
|
||||
wndPtr = WIN_FindWndPtr(hWnd);
|
||||
if (wndPtr == 0) {
|
||||
printf("Bad Window handle on CaptionBar !\n");
|
||||
return 0;
|
||||
}
|
||||
lphs = *((LPHEADCAPTION *)&wndPtr->wExtra[1]);
|
||||
return lphs;
|
||||
}
|
||||
|
||||
|
1117
controls/menu.c
1117
controls/menu.c
File diff suppressed because it is too large
Load Diff
|
@ -21,6 +21,15 @@ static char Copyright[] = "Copyright Martin Ayotte, 1993";
|
|||
#include <dirent.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
HBITMAP hUpArrow = 0;
|
||||
HBITMAP hDnArrow = 0;
|
||||
HBITMAP hLfArrow = 0;
|
||||
HBITMAP hRgArrow = 0;
|
||||
HBITMAP hUpArrowD = 0;
|
||||
HBITMAP hDnArrowD = 0;
|
||||
HBITMAP hLfArrowD = 0;
|
||||
HBITMAP hRgArrowD = 0;
|
||||
|
||||
LPHEADSCROLL ScrollBarGetWindowAndStorage(HWND hwnd, WND **wndPtr);
|
||||
LPHEADSCROLL ScrollBarGetStorageHeader(HWND hwnd);
|
||||
void StdDrawScrollBar(HWND hwnd);
|
||||
|
@ -34,9 +43,13 @@ LONG ScrollBarWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
|||
{
|
||||
WORD wRet;
|
||||
short x, y;
|
||||
short width, height;
|
||||
WND *wndPtr;
|
||||
LPHEADSCROLL lphs;
|
||||
RECT rect;
|
||||
LPDRAWITEMSTRUCT lpdis;
|
||||
HDC hMemDC;
|
||||
BITMAP bm;
|
||||
RECT rect;
|
||||
static RECT rectsel;
|
||||
switch(message)
|
||||
{
|
||||
|
@ -45,6 +58,22 @@ LONG ScrollBarWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
|||
#ifdef DEBUG_SCROLL
|
||||
printf("ScrollBar Creation up=%X down=%X!\n", lphs->hWndUp, lphs->hWndDown);
|
||||
#endif
|
||||
if (hUpArrow == (HBITMAP)NULL)
|
||||
hUpArrow = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_UPARROWI));
|
||||
if (hDnArrow == (HBITMAP)NULL)
|
||||
hDnArrow = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_DNARROWI));
|
||||
if (hLfArrow == (HBITMAP)NULL)
|
||||
hLfArrow = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_LFARROWI));
|
||||
if (hRgArrow == (HBITMAP)NULL)
|
||||
hRgArrow = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_RGARROWI));
|
||||
if (hUpArrowD == (HBITMAP)NULL)
|
||||
hUpArrowD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_UPARROWD));
|
||||
if (hDnArrowD == (HBITMAP)NULL)
|
||||
hDnArrowD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_DNARROWD));
|
||||
if (hLfArrowD == (HBITMAP)NULL)
|
||||
hLfArrowD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_LFARROWD));
|
||||
if (hRgArrowD == (HBITMAP)NULL)
|
||||
hRgArrowD = LoadBitmap((HINSTANCE)NULL, MAKEINTRESOURCE(OBM_RGARROWD));
|
||||
return 0;
|
||||
case WM_DESTROY:
|
||||
lphs = ScrollBarGetWindowAndStorage(hwnd, &wndPtr);
|
||||
|
@ -129,15 +158,6 @@ LONG ScrollBarWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
|||
ReleaseCapture();
|
||||
break;
|
||||
|
||||
case WM_KEYDOWN:
|
||||
case WM_KEYUP:
|
||||
case WM_CHAR:
|
||||
lphs = ScrollBarGetWindowAndStorage(hwnd, &wndPtr);
|
||||
return(SendMessage(wndPtr->hwndParent, message, wParam, lParam));
|
||||
|
||||
case WM_PAINT:
|
||||
StdDrawScrollBar(hwnd);
|
||||
break;
|
||||
case WM_MOUSEMOVE:
|
||||
if ((wParam & MK_LBUTTON) != 0) {
|
||||
lphs = ScrollBarGetWindowAndStorage(hwnd, &wndPtr);
|
||||
|
@ -150,12 +170,88 @@ LONG ScrollBarWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
|||
x = (y * (lphs->MaxVal - lphs->MinVal) /
|
||||
lphs->MaxPix) + lphs->MinVal;
|
||||
#ifdef DEBUG_SCROLL
|
||||
printf("WM_MOUSEMOVE val=%d pix=%d\n", x, y);
|
||||
printf("Scroll WM_MOUSEMOVE val=%d pix=%d\n", x, y);
|
||||
#endif
|
||||
SendMessage(wndPtr->hwndParent, lphs->Direction,
|
||||
SB_THUMBTRACK, MAKELONG(x, hwnd));
|
||||
}
|
||||
break;
|
||||
case WM_KEYDOWN:
|
||||
case WM_KEYUP:
|
||||
case WM_CHAR:
|
||||
lphs = ScrollBarGetWindowAndStorage(hwnd, &wndPtr);
|
||||
return(SendMessage(wndPtr->hwndParent, message, wParam, lParam));
|
||||
|
||||
case WM_SIZE:
|
||||
lphs = ScrollBarGetWindowAndStorage(hwnd, &wndPtr);
|
||||
width = LOWORD(lParam);
|
||||
height = HIWORD(lParam);
|
||||
if (lphs->Direction == WM_VSCROLL) {
|
||||
MoveWindow(lphs->hWndUp, 0, 0, width, width, TRUE);
|
||||
MoveWindow(lphs->hWndDown, 0, height - width, width, width, TRUE);
|
||||
}
|
||||
else {
|
||||
MoveWindow(lphs->hWndUp, 0, 0, height, height, TRUE);
|
||||
MoveWindow(lphs->hWndDown, width - height, 0, height, height, TRUE);
|
||||
}
|
||||
break;
|
||||
case WM_DRAWITEM:
|
||||
#ifdef DEBUG_SCROLL
|
||||
printf("Scroll WM_DRAWITEM w=%04X l=%08X\n", wParam, lParam);
|
||||
#endif
|
||||
lpdis = (LPDRAWITEMSTRUCT)lParam;
|
||||
if (lpdis->CtlType == ODT_BUTTON && lpdis->itemAction == ODA_DRAWENTIRE) {
|
||||
hMemDC = CreateCompatibleDC(lpdis->hDC);
|
||||
if (lpdis->CtlID == 1) {
|
||||
GetObject(hUpArrow, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, hUpArrow);
|
||||
BitBlt(lpdis->hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
if (lpdis->CtlID == 2) {
|
||||
GetObject(hDnArrow, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, hDnArrow);
|
||||
BitBlt(lpdis->hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
if (lpdis->CtlID == 3) {
|
||||
GetObject(hLfArrow, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, hLfArrow);
|
||||
BitBlt(lpdis->hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
if (lpdis->CtlID == 4) {
|
||||
GetObject(hRgArrow, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, hRgArrow);
|
||||
BitBlt(lpdis->hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
DeleteDC(hMemDC);
|
||||
}
|
||||
if (lpdis->CtlType == ODT_BUTTON && lpdis->itemAction == ODA_SELECT) {
|
||||
hMemDC = CreateCompatibleDC(lpdis->hDC);
|
||||
if (lpdis->CtlID == 1) {
|
||||
GetObject(hUpArrowD, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, hUpArrowD);
|
||||
BitBlt(lpdis->hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
if (lpdis->CtlID == 2) {
|
||||
GetObject(hDnArrowD, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, hDnArrowD);
|
||||
BitBlt(lpdis->hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
if (lpdis->CtlID == 3) {
|
||||
GetObject(hLfArrowD, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, hLfArrowD);
|
||||
BitBlt(lpdis->hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
if (lpdis->CtlID == 4) {
|
||||
GetObject(hRgArrowD, sizeof(BITMAP), (LPSTR)&bm);
|
||||
SelectObject(hMemDC, hRgArrowD);
|
||||
BitBlt(lpdis->hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
|
||||
}
|
||||
DeleteDC(hMemDC);
|
||||
}
|
||||
break;
|
||||
case WM_PAINT:
|
||||
StdDrawScrollBar(hwnd);
|
||||
break;
|
||||
default:
|
||||
return DefWindowProc( hwnd, message, wParam, lParam );
|
||||
}
|
||||
|
@ -274,10 +370,10 @@ int CreateScrollBarStruct(HWND hwnd)
|
|||
lphs->MaxPix = height - 3 * width;
|
||||
lphs->Direction = WM_VSCROLL;
|
||||
lphs->hWndUp = CreateWindow("BUTTON", "",
|
||||
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
|
||||
WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
|
||||
0, 0, width, width, hwnd, 1, wndPtr->hInstance, 0L);
|
||||
lphs->hWndDown = CreateWindow("BUTTON", "",
|
||||
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
|
||||
WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
|
||||
0, height - width, width, width, hwnd, 2,
|
||||
wndPtr->hInstance, 0L);
|
||||
}
|
||||
|
@ -286,11 +382,11 @@ int CreateScrollBarStruct(HWND hwnd)
|
|||
lphs->MaxPix = width - 3 * height;
|
||||
lphs->Direction = WM_HSCROLL;
|
||||
lphs->hWndUp = CreateWindow("BUTTON", "",
|
||||
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
|
||||
0, 0, height, height, hwnd, 0, wndPtr->hInstance, 0L);
|
||||
WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
|
||||
0, 0, height, height, hwnd, 3, wndPtr->hInstance, 0L);
|
||||
lphs->hWndDown = CreateWindow("BUTTON", "",
|
||||
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
|
||||
width - height, 0, height, height, hwnd, 0,
|
||||
WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
|
||||
width - height, 0, height, height, hwnd, 4,
|
||||
wndPtr->hInstance, 0L);
|
||||
}
|
||||
if (lphs->MaxPix < 1) lphs->MaxPix = 1;
|
||||
|
|
|
@ -17,6 +17,7 @@ LONG ScrollBarWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam );
|
|||
LONG ListBoxWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam );
|
||||
LONG ComboBoxWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam );
|
||||
LONG PopupMenuWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam );
|
||||
LONG CaptionBarWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam );
|
||||
|
||||
|
||||
static WNDCLASS WIDGETS_BuiltinClasses[] =
|
||||
|
@ -33,6 +34,8 @@ static WNDCLASS WIDGETS_BuiltinClasses[] =
|
|||
0, 0, 0, 0, NULL, "COMBOBOX" },
|
||||
{ CS_GLOBALCLASS, (LONG(*)())PopupMenuWndProc, 0, 8,
|
||||
0, 0, 0, 0, NULL, "POPUPMENU" },
|
||||
{ CS_GLOBALCLASS, (LONG(*)())CaptionBarWndProc, 0, 8,
|
||||
0, 0, 0, 0, NULL, "CAPTION" },
|
||||
{ CS_GLOBALCLASS, (LONG(*)())DefDlgProc, 0, DLGWINDOWEXTRA,
|
||||
0, 0, 0, 0, NULL, DIALOG_CLASS_NAME }
|
||||
};
|
||||
|
|
|
@ -172,7 +172,7 @@ void examine_memory(int addr, int count, char format){
|
|||
pnt = (char *) addr;
|
||||
for(i=0; i<count; i++)
|
||||
{
|
||||
fprintf(stderr," %w", *pnt++);
|
||||
fprintf(stderr," %02.2x", (*pnt++) & 0xff);
|
||||
if ((i % 32) == 7) {
|
||||
fprintf(stderr,"\n");
|
||||
print_address((unsigned int) pnt, stderr);
|
||||
|
|
|
@ -19,6 +19,8 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
|||
#include "prototypes.h"
|
||||
#include "dlls.h"
|
||||
|
||||
/* #define DEBUG_RELAY */
|
||||
|
||||
#define N_BUILTINS 8
|
||||
|
||||
struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS] =
|
||||
|
@ -99,14 +101,6 @@ DLLRelay(unsigned int func_num, unsigned int seg_off)
|
|||
IF1632_Saved16_esp, IF1632_Saved16_ebp,
|
||||
IF1632_Saved16_ss);
|
||||
|
||||
if (strcmp("GetMessage", dll_p->export_name) == 0 &&
|
||||
seg_off == 0x00972526 &&
|
||||
*ret_addr == 0x004700cd &&
|
||||
IF1632_Saved16_esp == 0x2526 &&
|
||||
IF1632_Saved16_ebp == 0x2534 &&
|
||||
IF1632_Saved16_ss == 0x0097)
|
||||
printf("ACK!!\n");
|
||||
|
||||
#ifdef DEBUG_STACK
|
||||
stack_p = (unsigned short *) seg_off;
|
||||
for (i = 0; i < 24; i++, stack_p++)
|
||||
|
|
|
@ -120,6 +120,7 @@ length 540
|
|||
155 pascal EnableMenuItem(word word word) EnableMenuItem(1 2 3)
|
||||
157 pascal GetMenu(word) GetMenu(1)
|
||||
158 pascal SetMenu(word word) SetMenu(1 2)
|
||||
160 pascal DrawMenuBar(word) DrawMenuBar(1)
|
||||
163 pascal CreateCaret(word word word word) CreateCaret(1 2 3 4)
|
||||
164 pascal DestroyCaret() DestroyCaret()
|
||||
165 pascal SetCaretPos(word word) SetCaretPos(1 2)
|
||||
|
@ -206,6 +207,8 @@ length 540
|
|||
415 pascal CreatePopupMenu() CreatePopupMenu()
|
||||
416 pascal TrackPopupMenu(word word word word word word ptr)
|
||||
TrackPopupMenu(1 2 3 4 5 6 7)
|
||||
418 pascal SetMenuItemBitmaps(word word word word word)
|
||||
SetMenuItemBitmaps(1 2 3 4 5)
|
||||
420 pascal wsprintf(ptr ptr) wsprintf(1 2)
|
||||
421 pascal wvsprintf(ptr ptr ptr) wvsprintf(1 2 3)
|
||||
430 pascal lstrcmp(ptr ptr) lstrcmp(1 2)
|
||||
|
@ -220,6 +223,7 @@ length 540
|
|||
452 pascal CreateWindowEx(long ptr ptr long s_word s_word s_word s_word
|
||||
word word word ptr)
|
||||
CreateWindowEx(1 2 3 4 5 6 7 8 9 10 11 12)
|
||||
454 pascal AdjustWindowRectEx(ptr long word long) AdjustWindowRectEx(1 2 3 4)
|
||||
457 pascal DestroyIcon(word) DestroyIcon(1)
|
||||
458 pascal DestroyCursor(word) DestroyCursor(1)
|
||||
471 pascal lstrcmpi(ptr ptr) lstrcmpi(1 2)
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Caption Bar definitions
|
||||
*/
|
||||
|
||||
|
||||
typedef struct tagHEADCAPTION {
|
||||
HBITMAP hClose;
|
||||
HBITMAP hMinim;
|
||||
HBITMAP hMaxim;
|
||||
HMENU hSysMenu;
|
||||
RECT rectClose;
|
||||
RECT rectMinim;
|
||||
RECT rectMaxim;
|
||||
} HEADCAPTION;
|
||||
typedef HEADCAPTION FAR* LPHEADCAPTION;
|
||||
|
||||
|
|
@ -282,7 +282,10 @@ extern HANDLE GDI_AllocObject( WORD, WORD );
|
|||
extern BOOL GDI_FreeObject( HANDLE );
|
||||
extern GDIOBJHDR * GDI_GetObjPtr( HANDLE, WORD );
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Screen * XT_screen;
|
||||
extern Display * XT_display; /* Will be removed */
|
||||
extern Screen * XT_screen; /* Will be removed */
|
||||
|
||||
extern Display * display;
|
||||
extern Screen * screen;
|
||||
|
||||
#endif /* GDI_H */
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
#include <X11/Xaw/Command.h>
|
||||
#include <X11/Xaw/Box.h>
|
||||
|
||||
#include "windows.h"
|
||||
|
||||
typedef struct tagMENUITEM
|
||||
{
|
||||
|
@ -23,7 +22,9 @@ typedef struct tagMENUITEM
|
|||
struct tagMENUITEM *parent;
|
||||
WORD item_flags;
|
||||
WORD item_id;
|
||||
char *item_text;
|
||||
WORD sel_key;
|
||||
char *shortcut;
|
||||
char *item_text;
|
||||
Widget w;
|
||||
Widget menu_w;
|
||||
char menu_name[10];
|
||||
|
@ -46,11 +47,15 @@ typedef struct tagMENUBAR
|
|||
typedef struct tagPOPUPMENU
|
||||
{
|
||||
HWND hWnd; /* PopupMenu window handle */
|
||||
HWND hWndParent; /* Parent opupMenu window handle */
|
||||
HWND ownerWnd; /* Owner window */
|
||||
WORD nItems; /* Number of items on menu */
|
||||
MENUITEM *firstItem;
|
||||
WORD FocusedItem;
|
||||
WORD MouseFlags;
|
||||
WORD BarFlags;
|
||||
WORD Width;
|
||||
WORD Height;
|
||||
} POPUPMENU, *LPPOPUPMENU;
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* System metrics definitions
|
||||
*
|
||||
* Copyright 1994 Alexandre Julliard
|
||||
*/
|
||||
|
||||
#ifndef SYSMETRICS_H
|
||||
#define SYSMETRICS_H
|
||||
|
||||
#include "windows.h"
|
||||
|
||||
|
||||
/* Constant system metrics */
|
||||
#define SYSMETRICS_CXVSCROLL 16
|
||||
#define SYSMETRICS_CYHSCROLL 16
|
||||
#define SYSMETRICS_CYCAPTION 20
|
||||
#define SYSMETRICS_CXBORDER 1
|
||||
#define SYSMETRICS_CYBORDER 1
|
||||
#define SYSMETRICS_CXDLGFRAME 4
|
||||
#define SYSMETRICS_CYDLGFRAME 4
|
||||
#define SYSMETRICS_CYVTHUMB 16
|
||||
#define SYSMETRICS_CXHTHUMB 16
|
||||
#define SYSMETRICS_CXICON 32
|
||||
#define SYSMETRICS_CYICON 32
|
||||
#define SYSMETRICS_CXCURSOR 32
|
||||
#define SYSMETRICS_CYCURSOR 32
|
||||
#define SYSMETRICS_CYMENU 18
|
||||
#define SYSMETRICS_CYVSCROLL 16
|
||||
#define SYSMETRICS_CXHSCROLL 16
|
||||
#define SYSMETRICS_CXMIN 100
|
||||
#define SYSMETRICS_CYMIN 28
|
||||
#define SYSMETRICS_CXSIZE 18
|
||||
#define SYSMETRICS_CYSIZE 18
|
||||
#define SYSMETRICS_CXMINTRACK 100
|
||||
#define SYSMETRICS_CYMINTRACK 28
|
||||
#define SYSMETRICS_CXICONSPACING 20
|
||||
#define SYSMETRICS_CYICONSPACING 20
|
||||
|
||||
/* Some non-constant system metrics */
|
||||
#define SYSMETRICS_CXSCREEN sysMetrics[SM_CXSCREEN]
|
||||
#define SYSMETRICS_CYSCREEN sysMetrics[SM_CYSCREEN]
|
||||
#define SYSMETRICS_CXFULLSCREEN sysMetrics[SM_CXFULLSCREEN]
|
||||
#define SYSMETRICS_CYFULLSCREEN sysMetrics[SM_CYFULLSCREEN]
|
||||
#define SYSMETRICS_SWAPBUTTON sysMetrics[SM_SWAPBUTTON]
|
||||
#define SYSMETRICS_CXFRAME sysMetrics[SM_CXFRAME]
|
||||
#define SYSMETRICS_CYFRAME sysMetrics[SM_CYFRAME]
|
||||
#define SYSMETRICS_CXDOUBLECLK sysMetrics[SM_CXDOUBLECLK]
|
||||
#define SYSMETRICS_CYDOUBLECLK sysMetrics[SM_CYDOUBLECLK]
|
||||
#define SYSMETRICS_MENUDROPALIGNMENT sysMetrics[SM_MENUDROPALIGNMENT]
|
||||
|
||||
|
||||
extern short sysMetrics[SM_CMETRICS];
|
||||
|
||||
|
||||
#endif
|
|
@ -7,7 +7,7 @@
|
|||
#ifndef WIN_H
|
||||
#define WIN_H
|
||||
|
||||
#include <X11/Intrinsic.h>
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
#include "windows.h"
|
||||
#include "menu.h"
|
||||
|
@ -40,11 +40,10 @@ typedef struct tagWND
|
|||
WORD wIDmenu; /* ID or hmenu (from CreateWindow) */
|
||||
HANDLE hText; /* Handle of window text */
|
||||
WORD flags; /* Misc. flags */
|
||||
Widget shellWidget; /* For top-level windows */
|
||||
Widget winWidget; /* For all windows */
|
||||
Widget compositeWidget;/* For top-level windows */
|
||||
Window window; /* X window */
|
||||
LPMENUBAR menuBarPtr; /* Menu bar */
|
||||
HWND hWndMenuBar; /* Menu bar */
|
||||
HWND hWndCaption; /* Caption bar */
|
||||
WORD wExtra[1]; /* Window extra bytes */
|
||||
} WND;
|
||||
|
||||
|
@ -54,6 +53,7 @@ typedef struct tagWND
|
|||
#define WIN_GOT_SIZEMSG 0x04 /* WM_SIZE has been sent to the window */
|
||||
#define WIN_OWN_DC 0x08 /* Win class has style CS_OWNDC */
|
||||
#define WIN_CLASS_DC 0x10 /* Win class has style CS_CLASSDC */
|
||||
#define WIN_DOUBLE_CLICKS 0x20 /* Win class has style CS_DBLCLKS */
|
||||
|
||||
/* Window functions */
|
||||
WND *WIN_FindWndPtr( HWND hwnd );
|
||||
|
|
|
@ -238,6 +238,49 @@ typedef struct
|
|||
#define WVR_REDRAW (WVR_HREDRAW | WVR_VREDRAW)
|
||||
#define WVR_VALIDRECTS 0x0400
|
||||
|
||||
/* WM_NCHITTEST return codes */
|
||||
#define HTERROR (-2)
|
||||
#define HTTRANSPARENT (-1)
|
||||
#define HTNOWHERE 0
|
||||
#define HTCLIENT 1
|
||||
#define HTCAPTION 2
|
||||
#define HTSYSMENU 3
|
||||
#define HTSIZE 4
|
||||
#define HTMENU 5
|
||||
#define HTHSCROLL 6
|
||||
#define HTVSCROLL 7
|
||||
#define HTMINBUTTON 8
|
||||
#define HTMAXBUTTON 9
|
||||
#define HTLEFT 10
|
||||
#define HTRIGHT 11
|
||||
#define HTTOP 12
|
||||
#define HTTOPLEFT 13
|
||||
#define HTTOPRIGHT 14
|
||||
#define HTBOTTOM 15
|
||||
#define HTBOTTOMLEFT 16
|
||||
#define HTBOTTOMRIGHT 17
|
||||
#define HTBORDER 18
|
||||
#define HTGROWBOX HTSIZE
|
||||
#define HTREDUCE HTMINBUTTON
|
||||
#define HTZOOM HTMAXBUTTON
|
||||
|
||||
/* WM_SYSCOMMAND parameters */
|
||||
#define SC_SIZE 0xf000
|
||||
#define SC_MOVE 0xf010
|
||||
#define SC_MINIMIZE 0xf020
|
||||
#define SC_MAXIMIZE 0xf030
|
||||
#define SC_NEXTWINDOW 0xf040
|
||||
#define SC_PREVWINDOW 0xf050
|
||||
#define SC_CLOSE 0xf060
|
||||
#define SC_VSCROLL 0xf070
|
||||
#define SC_HSCROLL 0xf080
|
||||
#define SC_MOUSEMENU 0xf090
|
||||
#define SC_KEYMENU 0xf100
|
||||
#define SC_ARRANGE 0xf110
|
||||
#define SC_RESTORE 0xf120
|
||||
#define SC_TASKLIST 0xf130
|
||||
#define SC_SCREENSAVE 0xf140
|
||||
#define SC_HOTKEY 0xf150
|
||||
|
||||
/* Dialogs */
|
||||
|
||||
|
@ -794,6 +837,8 @@ typedef METARECORD *PMETARECORD;
|
|||
#define SM_PENWINDOWS 41
|
||||
#define SM_DBCSENABLED 42
|
||||
|
||||
#define SM_CMETRICS 43
|
||||
|
||||
/* Device-independent bitmaps */
|
||||
|
||||
typedef struct { BYTE rgbBlue, rgbGreen, rgbRed, rgbReserved; } RGBQUAD;
|
||||
|
@ -1058,6 +1103,63 @@ typedef HANDLETABLE *LPHANDLETABLE;
|
|||
#define IDC_SIZEWE MAKEINTRESOURCE(32544)
|
||||
#define IDC_SIZENS MAKEINTRESOURCE(32545)
|
||||
|
||||
/* OEM Resource Ordinal Numbers */
|
||||
#define OBM_CLOSE 32754
|
||||
#define OBM_UPARROW 32753
|
||||
#define OBM_DNARROW 32752
|
||||
#define OBM_RGARROW 32751
|
||||
#define OBM_LFARROW 32750
|
||||
#define OBM_REDUCE 32749
|
||||
#define OBM_ZOOM 32748
|
||||
#define OBM_RESTORE 32747
|
||||
#define OBM_REDUCED 32746
|
||||
#define OBM_ZOOMD 32745
|
||||
#define OBM_RESTORED 32744
|
||||
#define OBM_UPARROWD 32743
|
||||
#define OBM_DNARROWD 32742
|
||||
#define OBM_RGARROWD 32741
|
||||
#define OBM_LFARROWD 32740
|
||||
#define OBM_MNARROW 32739
|
||||
#define OBM_COMBO 32738
|
||||
#define OBM_UPARROWI 32737
|
||||
#define OBM_DNARROWI 32736
|
||||
#define OBM_RGARROWI 32735
|
||||
#define OBM_LFARROWI 32734
|
||||
|
||||
#define OBM_OLD_CLOSE 32767
|
||||
#define OBM_SIZE 32766
|
||||
#define OBM_OLD_UPARROW 32765
|
||||
#define OBM_OLD_DNARROW 32764
|
||||
#define OBM_OLD_RGARROW 32763
|
||||
#define OBM_OLD_LFARROW 32762
|
||||
#define OBM_BTSIZE 32761
|
||||
#define OBM_CHECK 32760
|
||||
#define OBM_CHECKBOXES 32759
|
||||
#define OBM_BTNCORNERS 32758
|
||||
#define OBM_OLD_REDUCE 32757
|
||||
#define OBM_OLD_ZOOM 32756
|
||||
#define OBM_OLD_RESTORE 32755
|
||||
|
||||
#define OCR_NORMAL 32512
|
||||
#define OCR_IBEAM 32513
|
||||
#define OCR_WAIT 32514
|
||||
#define OCR_CROSS 32515
|
||||
#define OCR_UP 32516
|
||||
#define OCR_SIZE 32640
|
||||
#define OCR_ICON 32641
|
||||
#define OCR_SIZENWSE 32642
|
||||
#define OCR_SIZENESW 32643
|
||||
#define OCR_SIZEWE 32644
|
||||
#define OCR_SIZENS 32645
|
||||
#define OCR_SIZEALL 32646
|
||||
#define OCR_ICOCUR 32647
|
||||
|
||||
#define OIC_SAMPLE 32512
|
||||
#define OIC_HAND 32513
|
||||
#define OIC_QUES 32514
|
||||
#define OIC_BANG 32515
|
||||
#define OIC_NOTE 32516
|
||||
|
||||
/* Stock GDI objects for GetStockObject() */
|
||||
|
||||
#define WHITE_BRUSH 0
|
||||
|
@ -1097,10 +1199,25 @@ enum { WM_NULL, WM_CREATE, WM_DESTROY, WM_MOVE, WM_UNUSED0, WM_SIZE, WM_ACTIVATE
|
|||
|
||||
#define WM_NCCREATE 0x0081
|
||||
#define WM_NCDESTROY 0x0082
|
||||
#define WM_NCCALCSIZE 0x0083
|
||||
#define WM_NCCALCSIZE 0x0083
|
||||
#define WM_NCHITTEST 0x0084
|
||||
#define WM_NCPAINT 0x0085
|
||||
#define WM_NCACTIVATE 0x0086
|
||||
|
||||
#define WM_GETDLGCODE 0x0087
|
||||
|
||||
/* Non-client mouse messages */
|
||||
#define WM_NCMOUSEMOVE 0x00a0
|
||||
#define WM_NCLBUTTONDOWN 0x00a1
|
||||
#define WM_NCLBUTTONUP 0x00a2
|
||||
#define WM_NCLBUTTONDBLCLK 0x00a3
|
||||
#define WM_NCRBUTTONDOWN 0x00a4
|
||||
#define WM_NCRBUTTONUP 0x00a5
|
||||
#define WM_NCRBUTTONDBLCLK 0x00a6
|
||||
#define WM_NCMBUTTONDOWN 0x00a7
|
||||
#define WM_NCMBUTTONUP 0x00a8
|
||||
#define WM_NCMBUTTONDBLCLK 0x00a9
|
||||
|
||||
/* Keyboard messages */
|
||||
#define WM_KEYDOWN 0x0100
|
||||
#define WM_KEYUP 0x0101
|
||||
|
@ -1115,6 +1232,7 @@ enum { WM_NULL, WM_CREATE, WM_DESTROY, WM_MOVE, WM_UNUSED0, WM_SIZE, WM_ACTIVATE
|
|||
|
||||
#define WM_INITDIALOG 0x0110
|
||||
#define WM_COMMAND 0x0111
|
||||
#define WM_SYSCOMMAND 0x0112
|
||||
#define WM_TIMER 0x0113
|
||||
#define WM_SYSTIMER 0x0118
|
||||
|
||||
|
@ -1166,6 +1284,14 @@ enum { WM_NULL, WM_CREATE, WM_DESTROY, WM_MOVE, WM_UNUSED0, WM_SIZE, WM_ACTIVATE
|
|||
#define PM_REMOVE 0x0001
|
||||
#define PM_NOYIELD 0x0002
|
||||
|
||||
#define WM_SHOWWINDOW 0x0018
|
||||
|
||||
/* WM_SHOWWINDOW wParam codes */
|
||||
#define SW_PARENTCLOSING 1
|
||||
#define SW_OTHERMAXIMIZED 2
|
||||
#define SW_PARENTOPENING 3
|
||||
#define SW_OTHERRESTORED 4
|
||||
|
||||
enum { SW_HIDE, SW_SHOWNORMAL, SW_NORMAL, SW_SHOWMINIMIZED, SW_SHOWMAXIMIZED,
|
||||
SW_MAXIMIZE, SW_SHOWNOACTIVATE, SW_SHOW, SW_MINIMIZE,
|
||||
SW_SHOWMINNOACTIVE, SW_SHOWNA, SW_RESTORE };
|
||||
|
@ -1284,9 +1410,7 @@ enum { SW_HIDE, SW_SHOWNORMAL, SW_NORMAL, SW_SHOWMINIMIZED, SW_SHOWMAXIMIZED,
|
|||
#define DT_NOPREFIX 2048
|
||||
#define DT_INTERNAL 4096
|
||||
|
||||
|
||||
|
||||
|
||||
/* Window Styles */
|
||||
#define WS_OVERLAPPED 0x00000000L
|
||||
#define WS_POPUP 0x80000000L
|
||||
#define WS_CHILD 0x40000000L
|
||||
|
@ -2022,7 +2146,7 @@ Fa(WORD,GetPolyFillMode,HDC,a)
|
|||
Fa(WORD,GetRelAbs,HDC,a)
|
||||
Fa(WORD,GetROP2,HDC,a)
|
||||
Fa(WORD,GetStretchBltMode,HDC,a)
|
||||
Fa(int,GetSystemMetrics,short,a)
|
||||
Fa(int,GetSystemMetrics,WORD,a)
|
||||
Fa(int,GetWindowTextLength,HWND,a)
|
||||
Fa(int,RestoreVisRgn,HDC,a)
|
||||
Fa(int,SaveDC,HDC,a)
|
||||
|
@ -2347,7 +2471,7 @@ Fd(int,LoadString,HANDLE,a,WORD,b,LPSTR,c,int,d)
|
|||
Fd(int,MessageBox,HWND,a,LPSTR,b,LPSTR,c,WORD,d)
|
||||
Fd(int,SetScrollPos,HWND,a,int,b,int,c,BOOL,d)
|
||||
Fd(int,SetVoiceNote,int,a,int,b,int,c,int,d)
|
||||
Fd(void,AdjustWindowRectEx,LPRECT,a,LONG,b,BOOL,c,DWORD,d)
|
||||
Fd(void,AdjustWindowRectEx,LPRECT,a,DWORD,b,BOOL,c,DWORD,d)
|
||||
Fd(void,AnimatePalette,HPALETTE,a,WORD,b,WORD,c,LPPALETTEENTRY,d)
|
||||
Fd(void,CheckRadioButton,HWND,a,WORD,b,WORD,c,WORD,d)
|
||||
Fd(void,CreateCaret,HWND,a,HBITMAP,b,short,c,short,d)
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
/* WINEOPTS.H
|
||||
*/
|
||||
|
||||
#ifndef WINEOPTS_H
|
||||
#define WINEOPTS_H
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
FILE *SpyFp;
|
||||
|
||||
#endif /* WINEOPTS_H */
|
|
@ -153,6 +153,7 @@ FindResourceByNumber(struct resource_nameinfo_s *result_p,
|
|||
if (read(ResourceFd, &size_shift, sizeof(size_shift)) !=
|
||||
sizeof(size_shift))
|
||||
{
|
||||
printf("FindResourceByNumber (%s) bad block size !\n", resource_id);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -160,40 +161,38 @@ FindResourceByNumber(struct resource_nameinfo_s *result_p,
|
|||
* Find resource.
|
||||
*/
|
||||
typeinfo.type_id = 0xffff;
|
||||
while (typeinfo.type_id != 0)
|
||||
{
|
||||
while (typeinfo.type_id != 0) {
|
||||
if (read(ResourceFd, &typeinfo, sizeof(typeinfo)) !=
|
||||
sizeof(typeinfo))
|
||||
{
|
||||
sizeof(typeinfo)) {
|
||||
printf("FindResourceByNumber (%X) bad typeinfo size !\n", resource_id);
|
||||
return -1;
|
||||
}
|
||||
if (typeinfo.type_id != 0)
|
||||
{
|
||||
for (i = 0; i < typeinfo.count; i++)
|
||||
{
|
||||
if (read(ResourceFd, &nameinfo, sizeof(nameinfo)) !=
|
||||
sizeof(nameinfo))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if defined(DEBUG_RESOURCE) && defined(VERBOSE_DEBUG)
|
||||
if (type_id == typeinfo.type_id)
|
||||
{
|
||||
printf("FindResource: type id = %d, resource id = %x\n",
|
||||
type_id, nameinfo.id);
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG_RESOURCE
|
||||
printf("FindResourceByNumber type=%X count=%d\n",
|
||||
typeinfo.type_id, typeinfo.count);
|
||||
#endif
|
||||
if ((type_id == -1 || typeinfo.type_id == type_id) &&
|
||||
nameinfo.id == resource_id)
|
||||
{
|
||||
if (typeinfo.type_id == 0) break;
|
||||
if (typeinfo.type_id == type_id || type_id == -1) {
|
||||
for (i = 0; i < typeinfo.count; i++) {
|
||||
if (read(ResourceFd, &nameinfo, sizeof(nameinfo)) !=
|
||||
sizeof(nameinfo)) {
|
||||
printf("FindResourceByNumber (%X) bad nameinfo size !\n", resource_id);
|
||||
return -1;
|
||||
}
|
||||
#ifdef DEBUG_RESOURCE
|
||||
printf("FindResource: search type=%X id=%X // type=%X id=%X\n",
|
||||
type_id, resource_id, typeinfo.type_id, nameinfo.id);
|
||||
#endif
|
||||
if (nameinfo.id == resource_id) {
|
||||
memcpy(result_p, &nameinfo, sizeof(nameinfo));
|
||||
return size_shift;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
lseek(ResourceFd, (typeinfo.count * sizeof(nameinfo)), SEEK_CUR);
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -243,7 +242,7 @@ FindResourceByName(struct resource_nameinfo_s *result_p,
|
|||
return -1;
|
||||
}
|
||||
#ifdef DEBUG_RESOURCE
|
||||
printf("FindResourceByName typeinfo.type_id=%d type_id=%d\n",
|
||||
printf("FindResourceByName typeinfo.type_id=%X type_id=%X\n",
|
||||
typeinfo.type_id, type_id);
|
||||
#endif
|
||||
if (typeinfo.type_id == 0) break;
|
||||
|
@ -269,7 +268,7 @@ FindResourceByName(struct resource_nameinfo_s *result_p,
|
|||
lseek(ResourceFd, old_pos, SEEK_SET);
|
||||
name[nbytes] = '\0';
|
||||
#ifdef DEBUG_RESOURCE
|
||||
printf("FindResourceByName type_id=%d name='%s' resource_name='%s'\n",
|
||||
printf("FindResourceByName type_id=%X name='%s' resource_name='%s'\n",
|
||||
typeinfo.type_id, name, resource_name);
|
||||
#endif
|
||||
if (strcasecmp(name, resource_name) == 0)
|
||||
|
@ -281,7 +280,7 @@ FindResourceByName(struct resource_nameinfo_s *result_p,
|
|||
}
|
||||
else {
|
||||
lseek(ResourceFd, (typeinfo.count * sizeof(nameinfo)), SEEK_CUR);
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
@ -681,9 +680,6 @@ LoadBitmap(HANDLE instance, LPSTR bmp_name)
|
|||
printf("LoadBitmap: instance = %04x, name = %08x\n",
|
||||
instance, bmp_name);
|
||||
#endif
|
||||
printf("LoadBitmap: instance = %04x, name = %08x\n",
|
||||
instance, bmp_name);
|
||||
|
||||
if (instance == (HANDLE)NULL) instance = hSysRes;
|
||||
if (!(hdc = GetDC(GetDesktopWindow()))) return 0;
|
||||
|
||||
|
@ -706,7 +702,6 @@ printf("before GlobalLock\n");
|
|||
else if (*lp == sizeof(BITMAPINFOHEADER))
|
||||
hbitmap = ConvertInfoBitmap( hdc, (BITMAPINFO *) lp );
|
||||
else hbitmap = 0;
|
||||
printf("LoadBitmap %04X\n", hbitmap);
|
||||
GlobalFree(rsc_mem);
|
||||
ReleaseDC( 0, hdc );
|
||||
return hbitmap;
|
||||
|
|
120
loader/wine.c
120
loader/wine.c
|
@ -21,6 +21,9 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
|||
#include "dlls.h"
|
||||
#include "wine.h"
|
||||
#include "windows.h"
|
||||
#include "wineopts.h"
|
||||
|
||||
/* #define DEBUG_FIXUP */
|
||||
|
||||
extern int CallToInit16(unsigned long csip, unsigned long sssp,
|
||||
unsigned short ds);
|
||||
|
@ -46,6 +49,8 @@ HINSTANCE hSysRes;
|
|||
static char *Extensions[] = { "dll", "exe", NULL };
|
||||
static char *WinePath = NULL;
|
||||
|
||||
FILE *SpyFp = NULL;
|
||||
|
||||
/**********************************************************************
|
||||
* DebugPrintString
|
||||
*/
|
||||
|
@ -110,6 +115,19 @@ HINSTANCE LoadImage(char *modulename)
|
|||
unsigned int status;
|
||||
char buffer[256];
|
||||
|
||||
/*
|
||||
* search file
|
||||
*/
|
||||
if (FindFile(buffer, sizeof(buffer), modulename, Extensions, WindowsPath)
|
||||
==NULL)
|
||||
{
|
||||
|
||||
|
||||
fprintf(stderr,"LoadImage: I can't find %s !\n",modulename);
|
||||
return (HINSTANCE) NULL;
|
||||
}
|
||||
fprintf(stderr,"LoadImage: loading %s (%s)\n", modulename, buffer);
|
||||
|
||||
/* First allocate a spot to store the info we collect, and add it to
|
||||
* our linked list.
|
||||
*/
|
||||
|
@ -124,20 +142,6 @@ HINSTANCE LoadImage(char *modulename)
|
|||
};
|
||||
wpnt->next = NULL;
|
||||
|
||||
/*
|
||||
* search file
|
||||
*/
|
||||
|
||||
if (FindFile(buffer, sizeof(buffer), modulename, Extensions, WindowsPath)
|
||||
==NULL)
|
||||
{
|
||||
char temp[256];
|
||||
|
||||
sprintf(temp,"LoadImage: I can't find %s !\n",modulename);
|
||||
myerror(temp);
|
||||
}
|
||||
fprintf(stderr,"LoadImage: loading %s (%s)\n", modulename, buffer);
|
||||
|
||||
/*
|
||||
* Open file for reading.
|
||||
*/
|
||||
|
@ -251,6 +255,31 @@ HINSTANCE LoadImage(char *modulename)
|
|||
return(wpnt->hinstance);
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* ParseArgs
|
||||
*/
|
||||
void
|
||||
ParseArgs(int argc, char **argv)
|
||||
{
|
||||
if (argc < 2)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [-spy FILENAME] FILENAME\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Argc = argc - 1;
|
||||
|
||||
for (Argv = argv + 1; **Argv == '-' && Argc > 0; Argv++)
|
||||
{
|
||||
if (strcmp(*Argv, "-spy") == 0)
|
||||
{
|
||||
if (strcmp(*(++Argv), "-") == 0)
|
||||
SpyFp = stdout;
|
||||
else
|
||||
SpyFp = fopen(*Argv, "a");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* main
|
||||
|
@ -260,6 +289,7 @@ _WinMain(int argc, char **argv)
|
|||
int segment;
|
||||
char *p;
|
||||
char *sysresname;
|
||||
char filename[100];
|
||||
char syspath[256];
|
||||
char exe_path[256];
|
||||
#ifdef WINESTAT
|
||||
|
@ -269,15 +299,8 @@ _WinMain(int argc, char **argv)
|
|||
int cs_reg, ds_reg, ss_reg, ip_reg, sp_reg;
|
||||
int i;
|
||||
int rv;
|
||||
|
||||
Argc = argc - 1;
|
||||
Argv = argv + 1;
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
fprintf(stderr, "usage: %s FILENAME\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ParseArgs(argc, argv);
|
||||
|
||||
p = getenv("WINEPATH");
|
||||
WinePath = malloc(256 + strlen(p));
|
||||
|
@ -285,27 +308,17 @@ _WinMain(int argc, char **argv)
|
|||
strcat(WinePath, ";");
|
||||
strcat(WinePath, p);
|
||||
|
||||
LoadImage(argv[1]);
|
||||
hSysRes = LoadImage("sysres.dll");
|
||||
LoadImage(Argv[0]);
|
||||
|
||||
GetPrivateProfileString("wine", "SystemResources", "sysres.dll",
|
||||
filename, sizeof(filename),
|
||||
WINE_INI);
|
||||
hSysRes = LoadImage(filename);
|
||||
if (hSysRes == (HINSTANCE)NULL)
|
||||
printf("Error Loading System Resources !!!\n");
|
||||
else
|
||||
printf("System Resources Loaded // hSysRes='%04X'\n", hSysRes);
|
||||
|
||||
if(ran_out) exit(1);
|
||||
#ifdef DEBUG
|
||||
{
|
||||
int dummy1, dummy2;
|
||||
|
||||
GetEntryDLLName("USER", "INITAPP", &dummy1, &dummy2);
|
||||
}
|
||||
for(i=0; i<1024; i++) {
|
||||
int j;
|
||||
j = GetEntryPointFromOrdinal(wine_files, i);
|
||||
if(j == 0) break;
|
||||
fprintf(stderr," %d %x\n", i, j);
|
||||
};
|
||||
#endif
|
||||
/*
|
||||
* Fixup references.
|
||||
*/
|
||||
|
@ -442,8 +455,10 @@ FixupSegment(struct w_files * wpnt, int segment_num)
|
|||
seg = &seg_table[segment_num];
|
||||
sel = &selector_table[segment_num];
|
||||
|
||||
fprintf(stderr, "Segment fixups for %s, segment %d, selector %x\n",
|
||||
wpnt->name, segment_num, (int) sel->base_addr >> 16);
|
||||
#ifdef DEBUG_FIXUP
|
||||
printf("Segment fixups for %s, segment %d, selector %x\n",
|
||||
wpnt->name, segment_num, (int) sel->base_addr >> 16);
|
||||
#endif
|
||||
|
||||
if ((seg->seg_data_offset == 0) ||
|
||||
!(seg->seg_flags & NE_SEGFLAGS_RELOC_DATA))
|
||||
|
@ -589,13 +604,6 @@ FixupSegment(struct w_files * wpnt, int segment_num)
|
|||
rep->target1, rep->target2);
|
||||
free(rep1);
|
||||
return -1;
|
||||
#if 0
|
||||
sp = (unsigned short *) ((char *) sel->base_addr + rep->offset);
|
||||
fprintf(stderr, " FIXUP ADDRESS %04.4x:%04.4x\n",
|
||||
(int) sel->base_addr >> 16, rep->offset);
|
||||
WineForceFail = 1;
|
||||
continue;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -619,6 +627,10 @@ FixupSegment(struct w_files * wpnt, int segment_num)
|
|||
{
|
||||
case NE_RADDR_OFFSET16:
|
||||
do {
|
||||
#ifdef DEBUG_FIXUP
|
||||
printf(" %04.4x:%04.4x:%04.4x OFFSET16\n",
|
||||
(unsigned long) sp >> 16, (int) sp & 0xFFFF, *sp);
|
||||
#endif
|
||||
next_addr = *sp;
|
||||
*sp = (unsigned short) address;
|
||||
if (additive == 2)
|
||||
|
@ -631,6 +643,10 @@ FixupSegment(struct w_files * wpnt, int segment_num)
|
|||
|
||||
case NE_RADDR_POINTER32:
|
||||
do {
|
||||
#ifdef DEBUG_FIXUP
|
||||
printf(" %04.4x:%04.4x:%04.4x POINTER32\n",
|
||||
(unsigned long) sp >> 16, (int) sp & 0xFFFF, *sp);
|
||||
#endif
|
||||
next_addr = *sp;
|
||||
*sp = (unsigned short) address;
|
||||
if (additive == 2)
|
||||
|
@ -644,11 +660,15 @@ FixupSegment(struct w_files * wpnt, int segment_num)
|
|||
|
||||
case NE_RADDR_SELECTOR:
|
||||
do {
|
||||
#ifdef DEBUG_FIXUP
|
||||
printf(" %04.4x:%04.4x:%04.4x SELECTOR\n",
|
||||
(unsigned long) sp >> 16, (int) sp & 0xFFFF, *sp);
|
||||
#endif
|
||||
next_addr = *sp;
|
||||
*sp = (unsigned short) selector;
|
||||
sp = (unsigned short *) ((char *) sel->base_addr + next_addr);
|
||||
if (rep->relocation_type == NE_RELTYPE_INT1) break;
|
||||
|
||||
if (rep->relocation_type == NE_RELTYPE_INT1)
|
||||
break;
|
||||
}
|
||||
while (next_addr != 0xffff && !additive);
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
* integer atoms, use the "#1234" form.
|
||||
*/
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
@ -90,7 +91,7 @@ static WORD ATOM_Hash( WORD entries, LPCSTR str, WORD len )
|
|||
{
|
||||
WORD i, hash = 0;
|
||||
|
||||
for (i = 0; i < len; i++) hash ^= str[i] + i;
|
||||
for (i = 0; i < len; i++) hash ^= toupper(str[i]) + i;
|
||||
return hash % entries;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ CFLAGS=$(COPTS) $(DEBUGOPTS) -I../include
|
|||
|
||||
OBJS=kernel.o user.o xt.o rect.o file.o sound.o emulate.o \
|
||||
keyboard.o profile.o lstr.o exec.o message.o int1a.o int21.o \
|
||||
dos_fs.o comm.o
|
||||
dos_fs.o comm.o spy.o
|
||||
|
||||
default: misc.o
|
||||
|
||||
|
|
|
@ -661,7 +661,7 @@ char *WineIniFileName(void)
|
|||
|
||||
char *WinIniFileName()
|
||||
{
|
||||
char name[256];
|
||||
static char name[256];
|
||||
|
||||
strcpy(name,GetDirectUnixFileName(WindowsDirectory));
|
||||
strcat(name,"win.ini");
|
||||
|
|
|
@ -52,7 +52,7 @@ LPSTR lstrcpyn(LPSTR target,LPCSTR source,int n)
|
|||
/* KERNEL.90 */
|
||||
int lstrlen(LPCSTR str)
|
||||
{
|
||||
strlen(str);
|
||||
return strlen(str);
|
||||
}
|
||||
|
||||
/* AnsiUpper USER.431 */
|
||||
|
|
|
@ -125,7 +125,7 @@ static TSecHeader *load (char *file)
|
|||
if (c == ' ' || c == '\t')
|
||||
break;
|
||||
|
||||
if (c == '\n' || overflow) /* Abort Definition */
|
||||
if (c == '\n' || c == ';' || overflow) /* Abort Definition */
|
||||
next = CharBuffer;
|
||||
|
||||
if (c == '=' || overflow){
|
||||
|
|
|
@ -152,8 +152,12 @@ BOOL SubtractRect( LPRECT dest, LPRECT src1, LPRECT src2 )
|
|||
*dest = *src1;
|
||||
if (IntersectRect( &tmp, src1, src2 ))
|
||||
{
|
||||
if (EqualRect( &tmp, dest )) SetRectEmpty( src1 );
|
||||
else if ((tmp.top == dest->top) && (tmp.bottom == dest->bottom))
|
||||
if (EqualRect( &tmp, dest ))
|
||||
{
|
||||
SetRectEmpty( dest );
|
||||
return FALSE;
|
||||
}
|
||||
if ((tmp.top == dest->top) && (tmp.bottom == dest->bottom))
|
||||
{
|
||||
if (tmp.left == dest->left) dest->right = tmp.right;
|
||||
else if (tmp.right == dest->right) dest->left = tmp.left;
|
||||
|
|
|
@ -0,0 +1,257 @@
|
|||
/* SPY.C
|
||||
*
|
||||
* Copyright 1994, Bob Amstadt
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "wineopts.h"
|
||||
#include "windows.h"
|
||||
#include "wine.h"
|
||||
|
||||
#ifndef NOSPY
|
||||
|
||||
#define SPY_MAX_MSGNUM 0x0210
|
||||
|
||||
const char *MessageTypeNames[SPY_MAX_MSGNUM + 1] =
|
||||
{
|
||||
"WM_NULL", /* 0x00 */
|
||||
"WM_CREATE",
|
||||
"WM_DESTROY",
|
||||
"WM_MOVE",
|
||||
"WM_UNUSED0",
|
||||
"WM_SIZE",
|
||||
"WM_ACTIVATE",
|
||||
"WM_SETFOCUS",
|
||||
"WM_KILLFOCUS",
|
||||
"WM_UNUSED1",
|
||||
"WM_ENABLE",
|
||||
"WM_SETREDRAW",
|
||||
"WM_SETTEXT",
|
||||
"WM_GETTEXT",
|
||||
"WM_GETTEXTLENGTH",
|
||||
"WM_PAINT",
|
||||
"WM_CLOSE", /* 0x10 */
|
||||
"WM_QUERYENDSESSION",
|
||||
"WM_QUIT",
|
||||
"WM_QUERYOPEN",
|
||||
"WM_ERASEBKGND",
|
||||
"WM_SYSCOLORCHANGE",
|
||||
"WM_ENDSESSION",
|
||||
"WM_UNUSED2",
|
||||
"WM_SHOWWINDOW",
|
||||
"WM_CTLCOLOR",
|
||||
"WM_WININICHANGE",
|
||||
"WM_DEVMODECHANGE",
|
||||
"WM_ACTIVATEAPP",
|
||||
"WM_FONTCHANGE",
|
||||
"WM_TIMECHANGE",
|
||||
"WM_CANCELMODE",
|
||||
"WM_SETCURSOR", /* 0x20 */
|
||||
"WM_MOUSEACTIVATE",
|
||||
"WM_CHILDACTIVATE",
|
||||
"WM_QUEUESYNC",
|
||||
"WM_GETMINMAXINFO",
|
||||
"WM_UNUSED3",
|
||||
"WM_PAINTICON",
|
||||
"WM_ICONERASEBKGND",
|
||||
"WM_NEXTDLGCTL",
|
||||
"WM_UNUSED4",
|
||||
"WM_SPOOLERSTATUS",
|
||||
"WM_DRAWITEM",
|
||||
"WM_MEASUREITEM",
|
||||
"WM_DELETEITEM",
|
||||
"WM_VKEYTOITEM",
|
||||
"WM_CHARTOITEM",
|
||||
"WM_SETFONT", /* 0x30 */
|
||||
"WM_GETFONT", NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x40 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
"WM_WINDOWPOSCHANGING", /* 0x0046 */
|
||||
"WM_WINDOWPOSCHANGED", /* 0x0047 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0050 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0060 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0070 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
NULL, /* 0x0080 */
|
||||
"WM_NCCREATE", /* 0x0081 */
|
||||
"WM_NCDESTROY", /* 0x0082 */
|
||||
"WM_NCCALCSIZE", /* 0x0083 */
|
||||
NULL, NULL, NULL,
|
||||
"WM_GETDLGCODE", /* 0x0087 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0090 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x00A0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x00B0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x00C0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x00D0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x00E0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x00F0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
"WM_KEYDOWN", /* 0x0100 */
|
||||
"WM_KEYUP", /* 0x0101 */
|
||||
"WM_CHAR", /* 0x0102 */
|
||||
"WM_DEADCHAR", /* 0x0103 */
|
||||
"WM_SYSKEYDOWN", /* 0x0104 */
|
||||
"WM_SYSKEYUP", /* 0x0105 */
|
||||
"WM_SYSCHAR", /* 0x0106 */
|
||||
"WM_SYSDEADCHAR", /* 0x0107 */
|
||||
"WM_KEYLAST", /* 0x0108 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
"WM_INITDIALOG", /* 0x0110 */
|
||||
"WM_COMMAND", /* 0x0111 */
|
||||
NULL,
|
||||
"WM_TIMER", /* 0x0113 */
|
||||
"WM_HSCROLL", /* 0x0114 */
|
||||
"WM_VSCROLL", /* 0x0115 */
|
||||
NULL, NULL,
|
||||
"WM_SYSTIMER", /* 0x0118 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0120 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0130 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0140 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0150 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0160 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0170 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0180 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x0190 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x01A0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x01B0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x01C0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x01D0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x01E0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
/* 0x01F0 */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
|
||||
"WM_MOUSEMOVE", /* 0x0200 */
|
||||
"WM_LBUTTONDOWN", /* 0x0201 */
|
||||
"WM_LBUTTONUP", /* 0x0202 */
|
||||
"WM_LBUTTONDBLCLK", /* 0x0203 */
|
||||
"WM_RBUTTONDOWN", /* 0x0204 */
|
||||
"WM_RBUTTONUP", /* 0x0205 */
|
||||
"WM_RBUTTONDBLCLK", /* 0x0206 */
|
||||
"WM_MBUTTONDOWN", /* 0x0207 */
|
||||
"WM_MBUTTONUP", /* 0x0208 */
|
||||
"WM_MBUTTONDBLCLK", /* 0x0209 */
|
||||
"WM_PARENTNOTIFY", /* 0x0210 */
|
||||
};
|
||||
|
||||
#endif /* NOSPY */
|
||||
|
||||
/**********************************************************************
|
||||
* SpyMessage
|
||||
*/
|
||||
void SpyMessage(HWND hwnd, WORD msg, WORD wParam, LONG lParam)
|
||||
{
|
||||
#ifndef NOSPY
|
||||
if (SpyFp == NULL)
|
||||
return;
|
||||
|
||||
if (msg > SPY_MAX_MSGNUM || MessageTypeNames[msg] == NULL)
|
||||
{
|
||||
fprintf(SpyFp, "%04.4x %04.4x %04.4x %08.8x\n",
|
||||
hwnd, msg, wParam, lParam);
|
||||
}
|
||||
else
|
||||
{
|
||||
fprintf(SpyFp, "%04.4x %20.20s %04.4x %08.8x\n",
|
||||
hwnd, MessageTypeNames[msg], wParam, lParam);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* SpyInit
|
||||
*/
|
||||
void SpyInit(void)
|
||||
{
|
||||
char filename[100];
|
||||
|
||||
if (SpyFp == NULL)
|
||||
return;
|
||||
|
||||
GetPrivateProfileString("spy", "file", "", filename, sizeof(filename),
|
||||
WINE_INI);
|
||||
|
||||
if (strcasecmp(filename, "CON") == 0)
|
||||
SpyFp = stdout;
|
||||
else if (strlen(filename))
|
||||
SpyFp = fopen(filename, "a");
|
||||
else
|
||||
SpyFp = NULL;
|
||||
}
|
|
@ -16,6 +16,7 @@ MDESC *USER_Heap = NULL;
|
|||
|
||||
extern BOOL ATOM_Init();
|
||||
extern BOOL GDI_Init();
|
||||
extern void SYSMETRICS_Init();
|
||||
|
||||
/***********************************************************************
|
||||
* USER_HeapInit
|
||||
|
@ -40,13 +41,16 @@ USER_InitApp(int hInstance)
|
|||
{
|
||||
int queueSize;
|
||||
|
||||
SpyInit();
|
||||
|
||||
/* Global atom table initialisation */
|
||||
if (!ATOM_Init()) return 0;
|
||||
|
||||
/* GDI initialisation */
|
||||
if (!GDI_Init()) return 0;
|
||||
|
||||
/* Initialize system colors */
|
||||
/* Initialize system colors and metrics*/
|
||||
SYSMETRICS_Init();
|
||||
SYSCOLOR_Init();
|
||||
|
||||
/* Create USER heap */
|
||||
|
|
33
misc/xt.c
33
misc/xt.c
|
@ -22,6 +22,8 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
|
||||
Display * XT_display;
|
||||
Screen * XT_screen;
|
||||
Display * display;
|
||||
Screen * screen;
|
||||
XtAppContext XT_app_context;
|
||||
|
||||
static Widget topLevelWidget;
|
||||
|
@ -40,6 +42,8 @@ void main(int argc, char **argv)
|
|||
NULL );
|
||||
XT_display = XtDisplay( topLevelWidget );
|
||||
XT_screen = XtScreen( topLevelWidget );
|
||||
display = XtDisplay( topLevelWidget );
|
||||
screen = XtScreen( topLevelWidget );
|
||||
|
||||
DOS_InitFS();
|
||||
Comm_Init();
|
||||
|
@ -68,32 +72,3 @@ DWORD GetTickCount()
|
|||
struct tms dummy;
|
||||
return (times(&dummy) * 1000) / HZ;
|
||||
}
|
||||
|
||||
|
||||
int GetSystemMetrics( short index )
|
||||
{
|
||||
printf( "GetSystemMetrics: %d\n", index );
|
||||
switch(index)
|
||||
{
|
||||
case SM_CXSCREEN:
|
||||
return DisplayWidth( XT_display, DefaultScreen( XT_display ));
|
||||
|
||||
case SM_CYSCREEN:
|
||||
return DisplayHeight( XT_display, DefaultScreen( XT_display ));
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void AdjustWindowRect( LPRECT rect, DWORD style, BOOL menu )
|
||||
{
|
||||
printf( "AdjustWindowRect: (%d,%d)-(%d,%d) %d %d\n", rect->left, rect->top,
|
||||
rect->right, rect->bottom, style, menu );
|
||||
#ifdef USE_XLIB
|
||||
rect->right += 8;
|
||||
rect->bottom += 34;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,8 +8,6 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
|
||||
#include "gdi.h"
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Screen * XT_screen;
|
||||
|
||||
#define NB_HATCH_STYLES 6
|
||||
|
||||
|
|
|
@ -20,15 +20,22 @@ void CLIPPING_SetDeviceClipping( DC * dc )
|
|||
if (dc->w.hGCClipRgn)
|
||||
{
|
||||
RGNOBJ *obj = (RGNOBJ *) GDI_GetObjPtr(dc->w.hGCClipRgn, REGION_MAGIC);
|
||||
XSetClipMask( XT_display, dc->u.x.gc, obj->region.pixmap );
|
||||
XSetClipOrigin( XT_display, dc->u.x.gc,
|
||||
dc->w.DCOrgX + obj->region.box.left,
|
||||
dc->w.DCOrgY + obj->region.box.top );
|
||||
if (obj->region.pixmap)
|
||||
{
|
||||
XSetClipMask( display, dc->u.x.gc, obj->region.pixmap );
|
||||
XSetClipOrigin( display, dc->u.x.gc,
|
||||
dc->w.DCOrgX + obj->region.box.left,
|
||||
dc->w.DCOrgY + obj->region.box.top );
|
||||
}
|
||||
else /* Clip everything */
|
||||
{
|
||||
XSetClipRectangles( display, dc->u.x.gc, 0, 0, NULL, 0, 0 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
XSetClipMask( XT_display, dc->u.x.gc, None );
|
||||
XSetClipOrigin( XT_display, dc->u.x.gc, dc->w.DCOrgX, dc->w.DCOrgY );
|
||||
XSetClipMask( display, dc->u.x.gc, None );
|
||||
XSetClipOrigin( display, dc->u.x.gc, dc->w.DCOrgX, dc->w.DCOrgY );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ XImage * DIB_DIBmpToImage( BITMAPINFOHEADER * bmp, void * bmpData )
|
|||
XImage * image;
|
||||
int bytesPerLine = (bmp->biWidth * bmp->biBitCount + 31) / 32 * 4;
|
||||
|
||||
image = XCreateImage( XT_display, DefaultVisualOfScreen( XT_screen ),
|
||||
image = XCreateImage( display, DefaultVisualOfScreen( screen ),
|
||||
bmp->biBitCount, ZPixmap, 0, bmpData,
|
||||
bmp->biWidth, bmp->biHeight, 32, bytesPerLine );
|
||||
if (!image) return 0;
|
||||
|
|
|
@ -11,9 +11,6 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
#include <X11/Xatom.h>
|
||||
#include "gdi.h"
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Screen * XT_screen;
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FONT_MatchFont
|
||||
|
|
|
@ -8,8 +8,6 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
|
||||
#include "gdi.h"
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Screen * XT_screen;
|
||||
|
||||
MDESC *GDI_Heap = NULL;
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
static char Copyright[] = "Copyright Bob Amstadt, 1993";
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "win.h"
|
||||
#include "windows.h"
|
||||
|
||||
/**********************************************************************
|
||||
* LineDDA (GDI.100)
|
||||
|
|
|
@ -18,9 +18,6 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
|
||||
#include "gdi.h"
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Screen * XT_screen;
|
||||
|
||||
extern Colormap COLOR_WinColormap;
|
||||
|
||||
GDIOBJHDR * PALETTE_systemPalette;
|
||||
|
@ -36,7 +33,7 @@ BOOL PALETTE_Init()
|
|||
HPALETTE hpalette;
|
||||
LOGPALETTE * palPtr;
|
||||
|
||||
size = DefaultVisual( XT_display, DefaultScreen(XT_display) )->map_entries;
|
||||
size = DefaultVisual( display, DefaultScreen(display) )->map_entries;
|
||||
palPtr = malloc( sizeof(LOGPALETTE) + (size-1)*sizeof(PALETTEENTRY) );
|
||||
if (!palPtr) return FALSE;
|
||||
palPtr->palVersion = 0x300;
|
||||
|
@ -46,7 +43,7 @@ BOOL PALETTE_Init()
|
|||
for (i = 0; i < size; i++)
|
||||
{
|
||||
color.pixel = i;
|
||||
XQueryColor( XT_display, COLOR_WinColormap, &color );
|
||||
XQueryColor( display, COLOR_WinColormap, &color );
|
||||
palPtr->palPalEntry[i].peRed = color.red >> 8;
|
||||
palPtr->palPalEntry[i].peGreen = color.green >> 8;
|
||||
palPtr->palPalEntry[i].peBlue = color.blue >> 8;
|
||||
|
@ -132,7 +129,7 @@ WORD GetNearestPaletteIndex( HPALETTE hpalette, COLORREF color )
|
|||
palPtr = (PALETTEOBJ *) GDI_GetObjPtr( hpalette, PALETTE_MAGIC );
|
||||
if (!palPtr) return 0;
|
||||
|
||||
if ((COLOR_WinColormap != DefaultColormapOfScreen(XT_screen)) &&
|
||||
if ((COLOR_WinColormap != DefaultColormapOfScreen(screen)) &&
|
||||
(hpalette == STOCK_DEFAULT_PALETTE))
|
||||
{
|
||||
if ((color & 0xffffff) == 0) return 0; /* Entry 0 is black */
|
||||
|
|
|
@ -8,9 +8,6 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
|
||||
#include "gdi.h"
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Screen * XT_screen;
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CreatePen (GDI.61)
|
||||
|
|
|
@ -6,15 +6,8 @@
|
|||
|
||||
static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
||||
|
||||
#include <X11/Intrinsic.h>
|
||||
#include <X11/StringDefs.h>
|
||||
#include <X11/Core.h>
|
||||
#include <X11/Shell.h>
|
||||
#include <X11/Xatom.h>
|
||||
|
||||
#include "message.h"
|
||||
#include "callback.h"
|
||||
#include "win.h"
|
||||
#include "gdi.h"
|
||||
|
||||
#define TAB 9
|
||||
|
@ -224,8 +217,8 @@ int DrawText( HDC hdc, LPSTR str, int count, LPRECT rect, WORD flags )
|
|||
|
||||
if (flags & DT_SINGLELINE)
|
||||
{
|
||||
if (flags & DT_VCENTER) y = (rect->top + rect->bottom -
|
||||
size.cy) / 2;
|
||||
if (flags & DT_VCENTER) y = rect->top +
|
||||
(rect->bottom - rect->top) / 2 - size.cy / 2;
|
||||
else if (flags & DT_BOTTOM) y = rect->bottom - size.cy;
|
||||
}
|
||||
|
||||
|
|
BIN
sysres.dll
BIN
sysres.dll
Binary file not shown.
BIN
test/widget.exe
BIN
test/widget.exe
Binary file not shown.
|
@ -2,7 +2,8 @@ CFLAGS=$(COPTS) $(DEBUGOPTS) -I$(INCLUDE_DIR)
|
|||
|
||||
OBJS=class.o dc.o dce.o event.o message.o win.o timer.o graphics.o \
|
||||
clipping.o mapping.o painting.o keyboard.o utility.o syscolor.o \
|
||||
defwnd.o defdlg.o dialog.o focus.o scroll.o caret.o winpos.o
|
||||
defwnd.o defdlg.o dialog.o focus.o scroll.o caret.o winpos.o \
|
||||
sysmetrics.o nonclient.o
|
||||
|
||||
default: windows.o
|
||||
|
||||
|
|
|
@ -6,12 +6,8 @@
|
|||
|
||||
static char Copyright[] = "Copyright David Metcalfe, 1993";
|
||||
|
||||
#include <X11/Intrinsic.h>
|
||||
|
||||
#include "windows.h"
|
||||
|
||||
extern XtAppContext XT_app_context;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
HWND hwnd;
|
||||
|
@ -23,49 +19,46 @@ typedef struct
|
|||
short height;
|
||||
COLORREF color;
|
||||
WORD timeout;
|
||||
XtIntervalId xtid;
|
||||
WORD timerid;
|
||||
} CARET;
|
||||
|
||||
static CARET Caret;
|
||||
static BOOL LockCaret;
|
||||
|
||||
static void CARET_Callback(XtPointer data, XtIntervalId *xtid);
|
||||
static void CARET_HideCaret(CARET *pCaret);
|
||||
static WORD CARET_Callback(HWND hwnd, WORD msg, WORD timerid, LONG ctime);
|
||||
static void CARET_HideCaret();
|
||||
|
||||
|
||||
/*****************************************************************
|
||||
* CARET_Callback
|
||||
*/
|
||||
|
||||
static void CARET_Callback(XtPointer data, XtIntervalId *xtid)
|
||||
static WORD CARET_Callback(HWND hwnd, WORD msg, WORD timerid, LONG ctime)
|
||||
{
|
||||
CARET *pCaret = (CARET *)data;
|
||||
HDC hdc;
|
||||
HBRUSH hBrush;
|
||||
HRGN rgn;
|
||||
|
||||
#ifdef DEBUG_CARET
|
||||
printf("CARET_Callback: LockCaret=%d, hidden=%d, on=%d\n",
|
||||
LockCaret, pCaret->hidden, pCaret->on);
|
||||
printf("CARET_Callback: id=%d: LockCaret=%d, hidden=%d, on=%d\n",
|
||||
timerid, LockCaret, Caret.hidden, Caret.on);
|
||||
#endif
|
||||
if (!LockCaret && (!pCaret->hidden || pCaret->on))
|
||||
if (!LockCaret && (!Caret.hidden || Caret.on))
|
||||
{
|
||||
pCaret->on = (pCaret->on ? FALSE : TRUE);
|
||||
hdc = GetDC(pCaret->hwnd);
|
||||
hBrush = CreateSolidBrush(pCaret->color);
|
||||
Caret.on = (Caret.on ? FALSE : TRUE);
|
||||
hdc = GetDC(Caret.hwnd);
|
||||
hBrush = CreateSolidBrush(Caret.color);
|
||||
SelectObject(hdc, (HANDLE)hBrush);
|
||||
SetROP2(hdc, R2_XORPEN);
|
||||
rgn = CreateRectRgn(pCaret->x, pCaret->y,
|
||||
pCaret->x + pCaret->width,
|
||||
pCaret->y + pCaret->height);
|
||||
rgn = CreateRectRgn(Caret.x, Caret.y,
|
||||
Caret.x + Caret.width,
|
||||
Caret.y + Caret.height);
|
||||
FillRgn(hdc, rgn, hBrush);
|
||||
DeleteObject((HANDLE)rgn);
|
||||
DeleteObject((HANDLE)hBrush);
|
||||
ReleaseDC(pCaret->hwnd, hdc);
|
||||
ReleaseDC(Caret.hwnd, hdc);
|
||||
}
|
||||
|
||||
pCaret->xtid = XtAppAddTimeOut(XT_app_context, pCaret->timeout,
|
||||
CARET_Callback, pCaret);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -73,24 +66,24 @@ static void CARET_Callback(XtPointer data, XtIntervalId *xtid)
|
|||
* CARET_HideCaret
|
||||
*/
|
||||
|
||||
static void CARET_HideCaret(CARET *pCaret)
|
||||
static void CARET_HideCaret()
|
||||
{
|
||||
HDC hdc;
|
||||
HBRUSH hBrush;
|
||||
HRGN rgn;
|
||||
|
||||
pCaret->on = FALSE;
|
||||
hdc = GetDC(pCaret->hwnd);
|
||||
hBrush = CreateSolidBrush(pCaret->color);
|
||||
Caret.on = FALSE;
|
||||
hdc = GetDC(Caret.hwnd);
|
||||
hBrush = CreateSolidBrush(Caret.color);
|
||||
SelectObject(hdc, (HANDLE)hBrush);
|
||||
SetROP2(hdc, R2_XORPEN);
|
||||
rgn = CreateRectRgn(pCaret->x, pCaret->y,
|
||||
pCaret->x + pCaret->width,
|
||||
pCaret->y + pCaret->height);
|
||||
rgn = CreateRectRgn(Caret.x, Caret.y,
|
||||
Caret.x + Caret.width,
|
||||
Caret.y + Caret.height);
|
||||
FillRgn(hdc, rgn, hBrush);
|
||||
DeleteObject((HANDLE)rgn);
|
||||
DeleteObject((HANDLE)hBrush);
|
||||
ReleaseDC(pCaret->hwnd, hdc);
|
||||
ReleaseDC(Caret.hwnd, hdc);
|
||||
}
|
||||
|
||||
|
||||
|
@ -102,6 +95,7 @@ void CreateCaret(HWND hwnd, HBITMAP bitmap, short width, short height)
|
|||
{
|
||||
if (!hwnd) return;
|
||||
|
||||
|
||||
/* if cursor already exists, destroy it */
|
||||
/* if (Caret.hwnd)
|
||||
DestroyCaret();
|
||||
|
@ -131,8 +125,11 @@ void CreateCaret(HWND hwnd, HBITMAP bitmap, short width, short height)
|
|||
Caret.timeout = 750;
|
||||
LockCaret = FALSE;
|
||||
|
||||
Caret.xtid = XtAppAddTimeOut(XT_app_context, Caret.timeout,
|
||||
CARET_Callback, &Caret);
|
||||
Caret.timerid = SetSystemTimer(NULL, 0, Caret.timeout, CARET_Callback);
|
||||
|
||||
#ifdef DEBUG_CARET
|
||||
printf("CreateCaret: hwnd=%d, timerid=%d\n", hwnd, Caret.timerid);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -144,10 +141,14 @@ void DestroyCaret()
|
|||
{
|
||||
/* if (!Caret.hwnd) return;
|
||||
*/
|
||||
XtRemoveTimeOut(Caret.xtid);
|
||||
#ifdef DEBUG_CARET
|
||||
printf("DestroyCaret: timerid\n", Caret.timerid);
|
||||
#endif
|
||||
|
||||
KillSystemTimer(NULL, Caret.timerid);
|
||||
|
||||
if (Caret.on)
|
||||
CARET_HideCaret(&Caret);
|
||||
CARET_HideCaret();
|
||||
|
||||
Caret.hwnd = 0; /* cursor marked as not existing */
|
||||
}
|
||||
|
@ -171,7 +172,7 @@ void SetCaretPos(short x, short y)
|
|||
|
||||
LockCaret = TRUE;
|
||||
if (Caret.on)
|
||||
CARET_HideCaret(&Caret);
|
||||
CARET_HideCaret();
|
||||
|
||||
Caret.x = x;
|
||||
Caret.y = y;
|
||||
|
@ -189,7 +190,7 @@ void HideCaret(HWND hwnd)
|
|||
|
||||
LockCaret = TRUE;
|
||||
if (Caret.on)
|
||||
CARET_HideCaret(&Caret);
|
||||
CARET_HideCaret();
|
||||
|
||||
++Caret.hidden;
|
||||
LockCaret = FALSE;
|
||||
|
@ -221,7 +222,9 @@ void SetCaretBlinkTime(WORD msecs)
|
|||
{
|
||||
if (!Caret.hwnd) return;
|
||||
|
||||
KillSystemTimer(NULL, Caret.timerid);
|
||||
Caret.timeout = msecs;
|
||||
Caret.timerid = SetSystemTimer(NULL, 0, Caret.timeout, CARET_Callback);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -15,8 +15,7 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
|
||||
#define NB_DCE 5 /* Number of DCEs created at startup */
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Screen * XT_screen;
|
||||
extern Display * display;
|
||||
|
||||
static HANDLE firstDCE = 0;
|
||||
static HDC defaultDCstate = 0;
|
||||
|
@ -159,11 +158,11 @@ HDC GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags )
|
|||
IntersectVisRect( hdc, 0, 0, dc->w.DCSizeX, dc->w.DCSizeY );
|
||||
}
|
||||
}
|
||||
else dc->u.x.drawable = DefaultRootWindow( XT_display );
|
||||
else dc->u.x.drawable = DefaultRootWindow( display );
|
||||
|
||||
if (flags & DCX_CLIPCHILDREN)
|
||||
XSetSubwindowMode( XT_display, dc->u.x.gc, ClipByChildren );
|
||||
else XSetSubwindowMode( XT_display, dc->u.x.gc, IncludeInferiors);
|
||||
XSetSubwindowMode( display, dc->u.x.gc, ClipByChildren );
|
||||
else XSetSubwindowMode( display, dc->u.x.gc, IncludeInferiors);
|
||||
|
||||
if ((flags & DCX_INTERSECTRGN) || (flags & DCX_EXCLUDERGN))
|
||||
{
|
||||
|
@ -216,7 +215,7 @@ HDC GetWindowDC( HWND hwnd )
|
|||
int ReleaseDC( HWND hwnd, HDC hdc )
|
||||
{
|
||||
HANDLE hdce;
|
||||
DCE * dce;
|
||||
DCE * dce = NULL;
|
||||
|
||||
#ifdef DEBUG_DC
|
||||
printf( "ReleaseDC: %d %d\n", hwnd, hdc );
|
||||
|
@ -227,11 +226,12 @@ int ReleaseDC( HWND hwnd, HDC hdc )
|
|||
if (!(dce = (DCE *) USER_HEAP_ADDR( hdce ))) return 0;
|
||||
if (dce->inUse && (dce->hdc == hdc)) break;
|
||||
}
|
||||
if (!hdce) return 0;
|
||||
|
||||
if (dce->type == DCE_CACHE_DC)
|
||||
{
|
||||
SetDCState( dce->hdc, defaultDCstate );
|
||||
dce->inUse = FALSE;
|
||||
}
|
||||
return (hdce != 0);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -6,17 +6,19 @@
|
|||
|
||||
static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
||||
|
||||
#ifndef USE_XLIB
|
||||
#include <X11/Intrinsic.h>
|
||||
#include <X11/Shell.h>
|
||||
#endif
|
||||
|
||||
#include "windows.h"
|
||||
#include "win.h"
|
||||
#include "class.h"
|
||||
#include "user.h"
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Display * display;
|
||||
|
||||
extern LONG NC_HandleNCPaint( HWND hwnd, HRGN hrgn );
|
||||
extern LONG NC_HandleNCCalcSize( HWND hwnd, NCCALCSIZE_PARAMS *params );
|
||||
extern LONG NC_HandleNCHitTest( HWND hwnd, POINT pt );
|
||||
extern LONG NC_HandleNCMouseMsg(HWND hwnd, WORD msg, WORD wParam, LONG lParam);
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* DefWindowProc (USER.107)
|
||||
|
@ -26,6 +28,7 @@ LONG DefWindowProc( HWND hwnd, WORD msg, WORD wParam, LONG lParam )
|
|||
CLASS * classPtr;
|
||||
LPSTR textPtr;
|
||||
int len;
|
||||
int tempwidth, tempheight;
|
||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
||||
|
||||
#ifdef DEBUG_MESSAGE
|
||||
|
@ -51,40 +54,19 @@ LONG DefWindowProc( HWND hwnd, WORD msg, WORD wParam, LONG lParam )
|
|||
}
|
||||
|
||||
case WM_NCCALCSIZE:
|
||||
{
|
||||
#ifdef USE_XLIB
|
||||
NCCALCSIZE_PARAMS *params = (NCCALCSIZE_PARAMS *)lParam;
|
||||
if (wndPtr->dwStyle & WS_CHILD)
|
||||
{
|
||||
if (wndPtr->dwStyle & WS_BORDER)
|
||||
{
|
||||
params->rgrc[0].left += 1; /* SM_CXBORDER */
|
||||
params->rgrc[0].top += 1; /* SM_CYBORDER */
|
||||
params->rgrc[0].right -= 1; /* SM_CXBORDER */
|
||||
params->rgrc[0].bottom -= 1; /* SM_CYBORDER */
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
params->rgrc[0].left += 4; /* SM_CXFRAME */
|
||||
params->rgrc[0].top += 30; /* SM_CYFRAME+SM_CYCAPTION */
|
||||
params->rgrc[0].right -= 4; /* SM_CXFRAME */
|
||||
params->rgrc[0].bottom -= 4; /* SM_CYFRAME */
|
||||
if (wndPtr->dwStyle & WS_VSCROLL)
|
||||
{
|
||||
params->rgrc[0].right -= 16; /* SM_CXVSCROLL */
|
||||
}
|
||||
if (wndPtr->dwStyle & WS_HSCROLL)
|
||||
{
|
||||
params->rgrc[0].bottom += 16; /* SM_CYHSCROLL */
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
case WM_CREATE:
|
||||
return 0;
|
||||
return NC_HandleNCCalcSize( hwnd, (NCCALCSIZE_PARAMS *)lParam );
|
||||
|
||||
case WM_NCPAINT:
|
||||
return NC_HandleNCPaint( hwnd, (HRGN)wParam );
|
||||
|
||||
case WM_NCHITTEST:
|
||||
return NC_HandleNCHitTest( hwnd, MAKEPOINT(lParam) );
|
||||
|
||||
case WM_NCLBUTTONDOWN:
|
||||
case WM_NCLBUTTONUP:
|
||||
case WM_NCLBUTTONDBLCLK:
|
||||
case WM_NCMOUSEMOVE:
|
||||
return NC_HandleNCMouseMsg( hwnd, msg, wParam, lParam );
|
||||
|
||||
case WM_NCDESTROY:
|
||||
{
|
||||
|
@ -188,18 +170,42 @@ LONG DefWindowProc( HWND hwnd, WORD msg, WORD wParam, LONG lParam )
|
|||
strlen((LPSTR)lParam) + 1);
|
||||
textPtr = (LPSTR)USER_HEAP_ADDR(wndPtr->hText);
|
||||
strcpy(textPtr, (LPSTR)lParam);
|
||||
#ifdef USE_XLIB
|
||||
XStoreName( XT_display, wndPtr->window, textPtr );
|
||||
#else
|
||||
if (wndPtr->shellWidget)
|
||||
XtVaSetValues( wndPtr->shellWidget, XtNtitle, textPtr, NULL );
|
||||
#endif
|
||||
XStoreName( display, wndPtr->window, textPtr );
|
||||
return (0L);
|
||||
}
|
||||
case WM_SETCURSOR:
|
||||
if (wndPtr->hCursor != (HCURSOR)NULL)
|
||||
SetCursor(wndPtr->hCursor);
|
||||
return 0L;
|
||||
case WM_SYSCOMMAND:
|
||||
switch (wParam)
|
||||
{
|
||||
case SC_CLOSE:
|
||||
ShowWindow(hwnd, SW_MINIMIZE);
|
||||
printf("defdwndproc WM_SYSCOMMAND SC_CLOSE !\n");
|
||||
return SendMessage( hwnd, WM_CLOSE, 0, 0 );
|
||||
case SC_RESTORE:
|
||||
ShowWindow(hwnd, SW_RESTORE);
|
||||
break;
|
||||
case SC_MINIMIZE:
|
||||
ShowWindow(hwnd, SW_MINIMIZE);
|
||||
printf("defdwndproc WM_SYSCOMMAND SC_MINIMIZE !\n");
|
||||
break;
|
||||
case SC_MAXIMIZE:
|
||||
ShowWindow(hwnd, SW_MAXIMIZE);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case WM_SYSKEYDOWN:
|
||||
if (wParam == VK_MENU) {
|
||||
printf("VK_MENU Pressed // hMenu=%04X !\n", GetMenu(hwnd));
|
||||
}
|
||||
break;
|
||||
case WM_SYSKEYUP:
|
||||
if (wParam == VK_MENU) {
|
||||
printf("VK_MENU Released // hMenu=%04X !\n", GetMenu(hwnd));
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -184,11 +184,13 @@ HWND CreateDialogIndirectParam( HINSTANCE hInst, LPCSTR dlgTemplate,
|
|||
HMENU hMenu;
|
||||
HFONT hFont = 0;
|
||||
HWND hwnd;
|
||||
RECT rect;
|
||||
WND * wndPtr;
|
||||
int i;
|
||||
DLGTEMPLATE template;
|
||||
DLGCONTROLHEADER * header;
|
||||
DIALOGINFO * dlgInfo;
|
||||
DWORD exStyle = 0;
|
||||
WORD xUnit = xBaseUnit;
|
||||
WORD yUnit = yBaseUnit;
|
||||
|
||||
|
@ -229,7 +231,7 @@ HWND CreateDialogIndirectParam( HINSTANCE hInst, LPCSTR dlgTemplate,
|
|||
HFONT oldFont;
|
||||
HDC hdc;
|
||||
|
||||
hdc = GetDC(GetDesktopWindow());
|
||||
hdc = GetDC(0);
|
||||
oldFont = SelectObject( hdc, hFont );
|
||||
GetTextMetrics( hdc, &tm );
|
||||
SelectObject( hdc, oldFont );
|
||||
|
@ -241,14 +243,19 @@ HWND CreateDialogIndirectParam( HINSTANCE hInst, LPCSTR dlgTemplate,
|
|||
|
||||
/* Create dialog main window */
|
||||
|
||||
hwnd = CreateWindow( template.className, template.caption,
|
||||
template.header->style,
|
||||
template.header->x * xUnit / 4,
|
||||
template.header->y * yUnit / 8,
|
||||
template.header->cx * xUnit / 4,
|
||||
template.header->cy * yUnit / 8,
|
||||
owner, hMenu, hInst,
|
||||
NULL );
|
||||
rect.left = rect.top = 0;
|
||||
rect.right = template.header->cx * xUnit / 4;
|
||||
rect.bottom = template.header->cy * yUnit / 8;
|
||||
if (template.header->style & DS_MODALFRAME) exStyle |= WS_EX_DLGMODALFRAME;
|
||||
AdjustWindowRectEx( &rect, template.header->style, hMenu, exStyle );
|
||||
|
||||
hwnd = CreateWindowEx( exStyle, template.className, template.caption,
|
||||
template.header->style,
|
||||
rect.left + template.header->x * xUnit / 4,
|
||||
rect.top + template.header->y * yUnit / 8,
|
||||
rect.right - rect.left, rect.bottom - rect.top,
|
||||
owner, hMenu, hInst,
|
||||
NULL );
|
||||
if (!hwnd)
|
||||
{
|
||||
if (hFont) DeleteObject( hFont );
|
||||
|
|
463
windows/event.c
463
windows/event.c
|
@ -6,33 +6,23 @@
|
|||
|
||||
static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
||||
|
||||
#include <X11/Intrinsic.h>
|
||||
#include <X11/StringDefs.h>
|
||||
#include <X11/Core.h>
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
#include "windows.h"
|
||||
#include "win.h"
|
||||
#include "class.h"
|
||||
#include "message.h"
|
||||
|
||||
|
||||
#define NB_BUTTONS 3 /* Windows can handle 3 buttons */
|
||||
static WORD dblclick_time = 300; /* Max. time for a double click (milliseconds) */
|
||||
|
||||
extern Display * XT_display;
|
||||
|
||||
/* Event handlers */
|
||||
static void EVENT_expose();
|
||||
static void EVENT_key();
|
||||
static void EVENT_mouse_motion();
|
||||
static void EVENT_mouse_button();
|
||||
static void EVENT_structure();
|
||||
static void EVENT_focus_change();
|
||||
static void EVENT_enter_notify();
|
||||
extern Display * display;
|
||||
|
||||
/* X context to associate a hwnd to an X window */
|
||||
static XContext winContext = 0;
|
||||
|
||||
/* State variables */
|
||||
static WORD ALTKeyState;
|
||||
static HWND captureWnd = 0;
|
||||
Window winHasCursor = 0;
|
||||
extern HWND hWndFocus;
|
||||
|
@ -118,6 +108,17 @@ static char *event_names[] =
|
|||
};
|
||||
#endif
|
||||
|
||||
/* Event handlers */
|
||||
static void EVENT_key( HWND hwnd, XKeyEvent *event );
|
||||
static void EVENT_ButtonPress( HWND hwnd, XButtonEvent *event );
|
||||
static void EVENT_ButtonRelease( HWND hwnd, XButtonEvent *event );
|
||||
static void EVENT_MotionNotify( HWND hwnd, XMotionEvent *event );
|
||||
static void EVENT_EnterNotify( HWND hwnd, XCrossingEvent *event );
|
||||
static void EVENT_FocusIn( HWND hwnd, XFocusChangeEvent *event );
|
||||
static void EVENT_FocusOut( HWND hwnd, XFocusChangeEvent *event );
|
||||
static void EVENT_Expose( HWND hwnd, XExposeEvent *event );
|
||||
static void EVENT_ConfigureNotify( HWND hwnd, XConfigureEvent *event );
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* EVENT_ProcessEvent
|
||||
|
@ -128,117 +129,72 @@ void EVENT_ProcessEvent( XEvent *event )
|
|||
{
|
||||
HWND hwnd;
|
||||
XPointer ptr;
|
||||
Boolean cont_dispatch = TRUE;
|
||||
|
||||
XFindContext( XT_display, ((XAnyEvent *)event)->window, winContext, &ptr );
|
||||
hwnd = (HWND)ptr & 0xffff;
|
||||
XFindContext( display, ((XAnyEvent *)event)->window, winContext, &ptr );
|
||||
hwnd = (HWND) (int)ptr;
|
||||
|
||||
#ifdef DEBUG_EVENT
|
||||
printf( "Got event %s for hwnd %d\n",
|
||||
event_names[event->type], hwnd );
|
||||
printf( "Got event %s for hwnd %d\n", event_names[event->type], hwnd );
|
||||
#endif
|
||||
|
||||
switch(event->type)
|
||||
{
|
||||
case Expose:
|
||||
EVENT_expose( 0, hwnd, event, &cont_dispatch );
|
||||
break;
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
EVENT_key( hwnd, (XKeyEvent*)event );
|
||||
break;
|
||||
|
||||
case ButtonPress:
|
||||
EVENT_ButtonPress( hwnd, (XButtonEvent*)event );
|
||||
break;
|
||||
|
||||
case KeyPress:
|
||||
case KeyRelease:
|
||||
EVENT_key( 0, hwnd, event, &cont_dispatch );
|
||||
break;
|
||||
case ButtonRelease:
|
||||
EVENT_ButtonRelease( hwnd, (XButtonEvent*)event );
|
||||
break;
|
||||
|
||||
case MotionNotify:
|
||||
EVENT_mouse_motion( 0, hwnd, event, &cont_dispatch );
|
||||
break;
|
||||
case MotionNotify:
|
||||
EVENT_MotionNotify( hwnd, (XMotionEvent*)event );
|
||||
break;
|
||||
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
EVENT_mouse_button( 0, hwnd, event, &cont_dispatch );
|
||||
break;
|
||||
case EnterNotify:
|
||||
EVENT_EnterNotify( hwnd, (XCrossingEvent*)event );
|
||||
break;
|
||||
|
||||
case CirculateNotify:
|
||||
case ConfigureNotify:
|
||||
case MapNotify:
|
||||
case UnmapNotify:
|
||||
EVENT_structure( 0, hwnd, event, &cont_dispatch );
|
||||
break;
|
||||
case FocusIn:
|
||||
EVENT_FocusIn( hwnd, (XFocusChangeEvent*)event );
|
||||
break;
|
||||
|
||||
case FocusIn:
|
||||
case FocusOut:
|
||||
EVENT_focus_change( 0, hwnd, event, &cont_dispatch );
|
||||
break;
|
||||
case FocusOut:
|
||||
EVENT_FocusOut( hwnd, (XFocusChangeEvent*)event );
|
||||
break;
|
||||
|
||||
case EnterNotify:
|
||||
EVENT_enter_notify( 0, hwnd, event, &cont_dispatch );
|
||||
break;
|
||||
case Expose:
|
||||
EVENT_Expose( hwnd, (XExposeEvent*)event );
|
||||
break;
|
||||
|
||||
case ConfigureNotify:
|
||||
EVENT_ConfigureNotify( hwnd, (XConfigureEvent*)event );
|
||||
break;
|
||||
|
||||
#ifdef DEBUG_EVENT
|
||||
default:
|
||||
printf( "Unprocessed event %s for hwnd %d\n",
|
||||
event_names[event->type], hwnd );
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
printf( "Unprocessed event %s for hwnd %d\n",
|
||||
event_names[event->type], hwnd );
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* EVENT_AddHandlers
|
||||
* EVENT_RegisterWindow
|
||||
*
|
||||
* Add the event handlers to the given window
|
||||
* Associate an X window to a HWND.
|
||||
*/
|
||||
#ifdef USE_XLIB
|
||||
void EVENT_AddHandlers( Window w, int hwnd )
|
||||
void EVENT_RegisterWindow( Window w, HWND hwnd )
|
||||
{
|
||||
if (!winContext) winContext = XUniqueContext();
|
||||
XSaveContext( XT_display, w, winContext, (XPointer)hwnd );
|
||||
}
|
||||
#else
|
||||
void EVENT_AddHandlers( Widget w, int hwnd )
|
||||
{
|
||||
XtAddEventHandler(w, ExposureMask, FALSE,
|
||||
EVENT_expose, (XtPointer)hwnd );
|
||||
XtAddEventHandler(w, KeyPressMask | KeyReleaseMask, FALSE,
|
||||
EVENT_key, (XtPointer)hwnd );
|
||||
XtAddEventHandler(w, PointerMotionMask, FALSE,
|
||||
EVENT_mouse_motion, (XtPointer)hwnd );
|
||||
XtAddEventHandler(w, ButtonPressMask | ButtonReleaseMask, FALSE,
|
||||
EVENT_mouse_button, (XtPointer)hwnd );
|
||||
XtAddEventHandler(w, StructureNotifyMask, FALSE,
|
||||
EVENT_structure, (XtPointer)hwnd );
|
||||
XtAddEventHandler(w, FocusChangeMask, FALSE,
|
||||
EVENT_focus_change, (XtPointer)hwnd );
|
||||
XtAddEventHandler(w, EnterWindowMask, FALSE,
|
||||
EVENT_enter_notify, (XtPointer)hwnd );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* EVENT_RemoveHandlers
|
||||
*
|
||||
* Remove the event handlers of the given window
|
||||
*/
|
||||
void EVENT_RemoveHandlers( Widget w, int hwnd )
|
||||
{
|
||||
#ifndef USE_XLIB
|
||||
XtRemoveEventHandler(w, ExposureMask, FALSE,
|
||||
EVENT_expose, (XtPointer)hwnd );
|
||||
XtRemoveEventHandler(w, KeyPressMask | KeyReleaseMask, FALSE,
|
||||
EVENT_key, (XtPointer)hwnd );
|
||||
XtRemoveEventHandler(w, PointerMotionMask, FALSE,
|
||||
EVENT_mouse_motion, (XtPointer)hwnd );
|
||||
XtRemoveEventHandler(w, ButtonPressMask | ButtonReleaseMask, FALSE,
|
||||
EVENT_mouse_button, (XtPointer)hwnd );
|
||||
XtRemoveEventHandler(w, StructureNotifyMask, FALSE,
|
||||
EVENT_structure, (XtPointer)hwnd );
|
||||
XtRemoveEventHandler(w, FocusChangeMask, FALSE,
|
||||
EVENT_focus_change, (XtPointer)hwnd );
|
||||
XtRemoveEventHandler(w, EnterWindowMask, FALSE,
|
||||
EVENT_enter_notify, (XtPointer)hwnd );
|
||||
#endif
|
||||
XSaveContext( display, w, winContext, (XPointer)(int)hwnd );
|
||||
}
|
||||
|
||||
|
||||
|
@ -262,12 +218,9 @@ static WORD EVENT_XStateToKeyState( int state )
|
|||
|
||||
|
||||
/***********************************************************************
|
||||
* EVENT_expose
|
||||
*
|
||||
* Handle a X expose event
|
||||
* EVENT_Expose
|
||||
*/
|
||||
static void EVENT_expose( Widget w, int hwnd, XExposeEvent *event,
|
||||
Boolean *cont_dispatch )
|
||||
static void EVENT_Expose( HWND hwnd, XExposeEvent *event )
|
||||
{
|
||||
RECT rect;
|
||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
||||
|
@ -288,10 +241,8 @@ static void EVENT_expose( Widget w, int hwnd, XExposeEvent *event,
|
|||
*
|
||||
* Handle a X key event
|
||||
*/
|
||||
static void EVENT_key( Widget w, int hwnd, XKeyEvent *event,
|
||||
Boolean *cont_dispatch )
|
||||
static void EVENT_key( HWND hwnd, XKeyEvent *event )
|
||||
{
|
||||
MSG msg;
|
||||
char Str[24];
|
||||
XComposeStatus cs;
|
||||
KeySym keysym;
|
||||
|
@ -350,25 +301,20 @@ static void EVENT_key( Widget w, int hwnd, XKeyEvent *event,
|
|||
|
||||
if (event->type == KeyPress)
|
||||
{
|
||||
msg.hwnd = hwnd;
|
||||
msg.message = WM_KEYDOWN;
|
||||
msg.wParam = vkey;
|
||||
if (vkey == VK_MENU) ALTKeyState = TRUE;
|
||||
keylp.lp1.count = 1;
|
||||
keylp.lp1.code = LOBYTE(event->keycode);
|
||||
keylp.lp1.extended = (extended ? 1 : 0);
|
||||
keylp.lp1.context = (event->state & Mod1Mask ? 1 : 0);
|
||||
keylp.lp1.previous = (KeyDown ? 0 : 1);
|
||||
keylp.lp1.transition = 0;
|
||||
msg.lParam = keylp.lp2;
|
||||
#ifdef DEBUG_KEY
|
||||
printf(" wParam=%X, lParam=%lX\n", msg.wParam, msg.lParam);
|
||||
printf(" wParam=%X, lParam=%lX\n", vkey, keylp.lp2 );
|
||||
#endif
|
||||
msg.time = event->time;
|
||||
msg.pt.x = event->x & 0xffff;
|
||||
msg.pt.y = event->y & 0xffff;
|
||||
|
||||
hardware_event( hwnd, WM_KEYDOWN, vkey, keylp.lp2,
|
||||
event->x & 0xffff, event->y & 0xffff, event->time, 0 );
|
||||
hardware_event( hwnd, ALTKeyState ? WM_SYSKEYDOWN : WM_KEYDOWN,
|
||||
vkey, keylp.lp2,
|
||||
event->x_root & 0xffff, event->y_root & 0xffff,
|
||||
event->time, 0 );
|
||||
KeyDown = TRUE;
|
||||
|
||||
/* The key translation ought to take place in TranslateMessage().
|
||||
|
@ -378,218 +324,145 @@ static void EVENT_key( Widget w, int hwnd, XKeyEvent *event,
|
|||
*/
|
||||
if (count == 1) /* key has an ASCII representation */
|
||||
{
|
||||
msg.hwnd = hwnd;
|
||||
msg.message = WM_CHAR;
|
||||
msg.wParam = (WORD)Str[0];
|
||||
msg.lParam = keylp.lp2;
|
||||
#ifdef DEBUG_KEY
|
||||
printf("WM_CHAR : wParam=%X\n", msg.wParam);
|
||||
printf("WM_CHAR : wParam=%X\n", (WORD)Str[0] );
|
||||
#endif
|
||||
msg.time = event->time;
|
||||
msg.pt.x = event->x & 0xffff;
|
||||
msg.pt.y = event->y & 0xffff;
|
||||
PostMessage( hwnd, WM_CHAR, (WORD)Str[0], keylp.lp2 );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.hwnd = hwnd;
|
||||
msg.message = WM_KEYUP;
|
||||
msg.wParam = vkey;
|
||||
if (vkey == VK_MENU) ALTKeyState = FALSE;
|
||||
keylp.lp1.count = 1;
|
||||
keylp.lp1.code = LOBYTE(event->keycode);
|
||||
keylp.lp1.extended = (extended ? 1 : 0);
|
||||
keylp.lp1.context = (event->state & Mod1Mask ? 1 : 0);
|
||||
keylp.lp1.previous = 1;
|
||||
keylp.lp1.transition = 1;
|
||||
msg.lParam = keylp.lp2;
|
||||
#ifdef DEBUG_KEY
|
||||
printf(" wParam=%X, lParam=%lX\n", msg.wParam, msg.lParam);
|
||||
printf(" wParam=%X, lParam=%lX\n", vkey, keylp.lp2 );
|
||||
#endif
|
||||
msg.time = event->time;
|
||||
msg.pt.x = event->x & 0xffff;
|
||||
msg.pt.y = event->y & 0xffff;
|
||||
|
||||
hardware_event( hwnd, WM_KEYUP, vkey, keylp.lp2,
|
||||
event->x & 0xffff, event->y & 0xffff, event->time, 0 );
|
||||
hardware_event( hwnd,
|
||||
((ALTKeyState || vkey == VK_MENU) ?
|
||||
WM_SYSKEYUP : WM_KEYUP),
|
||||
vkey, keylp.lp2,
|
||||
event->x_root & 0xffff, event->y_root & 0xffff,
|
||||
event->time, 0 );
|
||||
KeyDown = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* EVENT_mouse_motion
|
||||
*
|
||||
* Handle a X mouse motion event
|
||||
* EVENT_MotionNotify
|
||||
*/
|
||||
static void EVENT_mouse_motion( Widget w, int hwnd, XMotionEvent *event,
|
||||
Boolean *cont_dispatch )
|
||||
static void EVENT_MotionNotify( HWND hwnd, XMotionEvent *event )
|
||||
{
|
||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
||||
if (!wndPtr) return;
|
||||
|
||||
/* Position must be relative to client area */
|
||||
event->x -= wndPtr->rectClient.left - wndPtr->rectWindow.left;
|
||||
event->y -= wndPtr->rectClient.top - wndPtr->rectWindow.top;
|
||||
|
||||
hardware_event( hwnd, WM_MOUSEMOVE, EVENT_XStateToKeyState( event->state ),
|
||||
(event->x & 0xffff) | (event->y << 16),
|
||||
event->x & 0xffff, event->y & 0xffff,
|
||||
hardware_event( hwnd, WM_MOUSEMOVE,
|
||||
EVENT_XStateToKeyState( event->state ), 0L,
|
||||
event->x_root & 0xffff, event->y_root & 0xffff,
|
||||
event->time, 0 );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* EVENT_mouse_button
|
||||
*
|
||||
* Handle a X mouse button event
|
||||
* EVENT_ButtonPress
|
||||
*/
|
||||
static void EVENT_mouse_button( Widget w, int hwnd, XButtonEvent *event,
|
||||
Boolean *cont_dispatch )
|
||||
static void EVENT_ButtonPress( HWND hwnd, XButtonEvent *event )
|
||||
{
|
||||
static WORD messages[3][NB_BUTTONS] =
|
||||
{
|
||||
{ WM_LBUTTONDOWN, WM_MBUTTONDOWN, WM_RBUTTONDOWN },
|
||||
{ WM_LBUTTONUP, WM_MBUTTONUP, WM_RBUTTONUP },
|
||||
{ WM_LBUTTONDBLCLK, WM_MBUTTONDBLCLK, WM_RBUTTONDBLCLK }
|
||||
};
|
||||
static unsigned long lastClickTime[NB_BUTTONS] = { 0, 0, 0 };
|
||||
|
||||
int buttonNum, prevTime, type;
|
||||
static WORD messages[NB_BUTTONS] =
|
||||
{ WM_LBUTTONDOWN, WM_MBUTTONDOWN, WM_RBUTTONDOWN };
|
||||
int buttonNum = event->button - 1;
|
||||
|
||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
||||
if (!wndPtr) return;
|
||||
|
||||
/* Position must be relative to client area */
|
||||
event->x -= wndPtr->rectClient.left - wndPtr->rectWindow.left;
|
||||
event->y -= wndPtr->rectClient.top - wndPtr->rectWindow.top;
|
||||
|
||||
buttonNum = event->button-1;
|
||||
if (buttonNum >= NB_BUTTONS) return;
|
||||
if (event->type == ButtonRelease) type = 1;
|
||||
else
|
||||
{ /* Check if double-click */
|
||||
prevTime = lastClickTime[buttonNum];
|
||||
lastClickTime[buttonNum] = event->time;
|
||||
if (event->time - prevTime < dblclick_time)
|
||||
{
|
||||
WND * wndPtr;
|
||||
CLASS * classPtr;
|
||||
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return;
|
||||
if (!(classPtr = CLASS_FindClassPtr( wndPtr->hClass ))) return;
|
||||
type = (classPtr->wc.style & CS_DBLCLKS) ? 2 : 0;
|
||||
}
|
||||
else type = 0;
|
||||
}
|
||||
|
||||
if (buttonNum >= NB_BUTTONS) return;
|
||||
winHasCursor = event->window;
|
||||
|
||||
hardware_event( hwnd, messages[type][buttonNum],
|
||||
EVENT_XStateToKeyState( event->state ),
|
||||
(event->x & 0xffff) | (event->y << 16),
|
||||
event->x & 0xffff, event->y & 0xffff,
|
||||
hardware_event( hwnd, messages[buttonNum],
|
||||
EVENT_XStateToKeyState( event->state ), 0L,
|
||||
event->x_root & 0xffff, event->y_root & 0xffff,
|
||||
event->time, 0 );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* EVENT_structure
|
||||
*
|
||||
* Handle a X StructureNotify event
|
||||
* EVENT_ButtonRelease
|
||||
*/
|
||||
static void EVENT_structure( Widget w, int hwnd, XEvent *event,
|
||||
Boolean *cont_dispatch )
|
||||
static void EVENT_ButtonRelease( HWND hwnd, XButtonEvent *event )
|
||||
{
|
||||
MSG msg;
|
||||
|
||||
msg.hwnd = hwnd;
|
||||
msg.time = GetTickCount();
|
||||
msg.pt.x = 0;
|
||||
msg.pt.y = 0;
|
||||
static const WORD messages[NB_BUTTONS] =
|
||||
{ WM_LBUTTONUP, WM_MBUTTONUP, WM_RBUTTONUP };
|
||||
int buttonNum = event->button - 1;
|
||||
|
||||
switch(event->type)
|
||||
{
|
||||
case ConfigureNotify:
|
||||
{
|
||||
HANDLE handle;
|
||||
NCCALCSIZE_PARAMS *params;
|
||||
XConfigureEvent * evt = (XConfigureEvent *)event;
|
||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
||||
if (!wndPtr) return;
|
||||
wndPtr->rectWindow.left = evt->x;
|
||||
wndPtr->rectWindow.top = evt->y;
|
||||
wndPtr->rectWindow.right = evt->x + evt->width;
|
||||
wndPtr->rectWindow.bottom = evt->y + evt->height;
|
||||
if (buttonNum >= NB_BUTTONS) return;
|
||||
winHasCursor = event->window;
|
||||
hardware_event( hwnd, messages[buttonNum],
|
||||
EVENT_XStateToKeyState( event->state ), 0L,
|
||||
event->x_root & 0xffff, event->y_root & 0xffff,
|
||||
event->time, 0 );
|
||||
}
|
||||
|
||||
/* Send WM_NCCALCSIZE message */
|
||||
handle = GlobalAlloc( GMEM_MOVEABLE, sizeof(*params) );
|
||||
params = (NCCALCSIZE_PARAMS *)GlobalLock( handle );
|
||||
params->rgrc[0] = wndPtr->rectWindow;
|
||||
params->lppos = NULL; /* Should be WINDOWPOS struct */
|
||||
SendMessage( hwnd, WM_NCCALCSIZE, FALSE, params );
|
||||
wndPtr->rectClient = params->rgrc[0];
|
||||
PostMessage( hwnd, WM_MOVE, 0,
|
||||
MAKELONG( wndPtr->rectClient.left,
|
||||
wndPtr->rectClient.top ));
|
||||
PostMessage( hwnd, WM_SIZE, SIZE_RESTORED,
|
||||
MAKELONG(wndPtr->rectClient.right-wndPtr->rectClient.left,
|
||||
wndPtr->rectClient.bottom-wndPtr->rectClient.top));
|
||||
GlobalUnlock( handle );
|
||||
GlobalFree( handle );
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* EVENT_ConfigureNotify
|
||||
*/
|
||||
static void EVENT_ConfigureNotify( HWND hwnd, XConfigureEvent *event )
|
||||
{
|
||||
HANDLE handle;
|
||||
NCCALCSIZE_PARAMS *params;
|
||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
||||
if (!wndPtr) return;
|
||||
wndPtr->rectWindow.left = event->x;
|
||||
wndPtr->rectWindow.top = event->y;
|
||||
wndPtr->rectWindow.right = event->x + event->width;
|
||||
wndPtr->rectWindow.bottom = event->y + event->height;
|
||||
|
||||
/* Send WM_NCCALCSIZE message */
|
||||
handle = GlobalAlloc( GMEM_MOVEABLE, sizeof(*params) );
|
||||
params = (NCCALCSIZE_PARAMS *)GlobalLock( handle );
|
||||
params->rgrc[0] = wndPtr->rectWindow;
|
||||
params->lppos = NULL; /* Should be WINDOWPOS struct */
|
||||
SendMessage( hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)params );
|
||||
wndPtr->rectClient = params->rgrc[0];
|
||||
PostMessage( hwnd, WM_MOVE, 0,
|
||||
MAKELONG( wndPtr->rectClient.left, wndPtr->rectClient.top ));
|
||||
PostMessage( hwnd, WM_SIZE, SIZE_RESTORED,
|
||||
MAKELONG( wndPtr->rectClient.right-wndPtr->rectClient.left,
|
||||
wndPtr->rectClient.bottom-wndPtr->rectClient.top) );
|
||||
GlobalUnlock( handle );
|
||||
GlobalFree( handle );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* EVENT_focus_change
|
||||
*
|
||||
* Handle an X FocusChange event
|
||||
* EVENT_FocusIn
|
||||
*/
|
||||
static void EVENT_focus_change( Widget w, int hwnd, XEvent *event,
|
||||
Boolean *cont_dispatch )
|
||||
static void EVENT_FocusIn( HWND hwnd, XFocusChangeEvent *event )
|
||||
{
|
||||
switch(event->type)
|
||||
{
|
||||
case FocusIn:
|
||||
{
|
||||
PostMessage( hwnd, WM_SETFOCUS, hwnd, 0 );
|
||||
hWndFocus = hwnd;
|
||||
}
|
||||
break;
|
||||
|
||||
case FocusOut:
|
||||
{
|
||||
if (hWndFocus)
|
||||
{
|
||||
PostMessage( hwnd, WM_KILLFOCUS, hwnd, 0 );
|
||||
hWndFocus = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
PostMessage( hwnd, WM_SETFOCUS, hwnd, 0 );
|
||||
hWndFocus = hwnd;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* EVENT_enter_notify
|
||||
*
|
||||
* Handle an X EnterNotify event
|
||||
* EVENT_FocusOut
|
||||
*/
|
||||
static void EVENT_enter_notify( Widget w, int hwnd, XCrossingEvent *event,
|
||||
Boolean *cont_dispatch )
|
||||
static void EVENT_FocusOut( HWND hwnd, XFocusChangeEvent *event )
|
||||
{
|
||||
if (hWndFocus)
|
||||
{
|
||||
PostMessage( hwnd, WM_KILLFOCUS, hwnd, 0 );
|
||||
hWndFocus = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* EVENT_EnterNotify
|
||||
*/
|
||||
static void EVENT_EnterNotify( HWND hwnd, XCrossingEvent *event )
|
||||
{
|
||||
if (captureWnd != 0) return;
|
||||
|
||||
winHasCursor = event->window;
|
||||
|
||||
switch(event->type)
|
||||
{
|
||||
case EnterNotify:
|
||||
PostMessage( hwnd, WM_SETCURSOR, hwnd, 0 );
|
||||
break;
|
||||
}
|
||||
PostMessage( hwnd, WM_SETCURSOR, hwnd, 0 );
|
||||
}
|
||||
|
||||
|
||||
|
@ -604,15 +477,9 @@ HWND SetCapture(HWND wnd)
|
|||
if (wnd_p == NULL)
|
||||
return 0;
|
||||
|
||||
#ifdef USE_XLIB
|
||||
rv = XGrabPointer(XT_display, wnd_p->window, False,
|
||||
rv = XGrabPointer(display, wnd_p->window, False,
|
||||
ButtonPressMask | ButtonReleaseMask | ButtonMotionMask,
|
||||
GrabModeAsync, GrabModeSync, None, None, CurrentTime);
|
||||
#else
|
||||
rv = XtGrabPointer(wnd_p->winWidget, False,
|
||||
ButtonPressMask | ButtonReleaseMask | ButtonMotionMask,
|
||||
GrabModeAsync, GrabModeSync, None, None, CurrentTime);
|
||||
#endif
|
||||
|
||||
if (rv == GrabSuccess)
|
||||
{
|
||||
|
@ -637,12 +504,7 @@ void ReleaseCapture()
|
|||
if (wnd_p == NULL)
|
||||
return;
|
||||
|
||||
#ifdef USE_XLIB
|
||||
XUngrabPointer( XT_display, CurrentTime );
|
||||
#else
|
||||
XtUngrabPointer(wnd_p->winWidget, CurrentTime);
|
||||
#endif
|
||||
|
||||
XUngrabPointer( display, CurrentTime );
|
||||
captureWnd = 0;
|
||||
}
|
||||
|
||||
|
@ -653,24 +515,3 @@ HWND GetCapture()
|
|||
{
|
||||
return captureWnd;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* SetDoubleClickTime (USER.20)
|
||||
*/
|
||||
void SetDoubleClickTime (WORD interval)
|
||||
{
|
||||
if (interval == 0)
|
||||
dblclick_time = 500;
|
||||
else
|
||||
dblclick_time = interval;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* GetDoubleClickTime (USER.21)
|
||||
*/
|
||||
WORD GetDoubleClickTime ()
|
||||
{
|
||||
return ((WORD)dblclick_time);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -27,13 +27,19 @@ HWND SetFocus(HWND hwnd)
|
|||
|
||||
if (hwnd == 0)
|
||||
{
|
||||
XSetInputFocus(XT_display, None, RevertToPointerRoot, CurrentTime);
|
||||
XSetInputFocus(display, None, RevertToPointerRoot, CurrentTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
XWindowAttributes win_attr;
|
||||
wndPtr = WIN_FindWndPtr(hwnd);
|
||||
XSetInputFocus(XT_display, wndPtr->window,
|
||||
RevertToParent, CurrentTime);
|
||||
|
||||
if (XGetWindowAttributes( display, wndPtr->window, &win_attr ))
|
||||
{
|
||||
if (win_attr.map_state == IsViewable)
|
||||
XSetInputFocus(display, wndPtr->window,
|
||||
RevertToParent, CurrentTime);
|
||||
}
|
||||
}
|
||||
|
||||
return hWndPrevFocus;
|
||||
|
|
|
@ -7,7 +7,9 @@
|
|||
static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
#ifndef PI
|
||||
#define PI M_PI
|
||||
#endif
|
||||
|
@ -412,49 +414,45 @@ void DrawFocusRect( HDC hdc, LPRECT rc )
|
|||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* Line (Not a MSWin Call)
|
||||
*/
|
||||
void Line(HDC hDC, int X1, int Y1, int X2, int Y2)
|
||||
{
|
||||
MoveTo(hDC, X1, Y1);
|
||||
LineTo(hDC, X2, Y2);
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* DrawReliefRect (Not a MSWin Call)
|
||||
*/
|
||||
void DrawReliefRect(HDC hDC, RECT rect, int ThickNess, int Mode)
|
||||
void DrawReliefRect( HDC hdc, RECT rect, int thickness, BOOL pressed )
|
||||
{
|
||||
HPEN hWHITEPen;
|
||||
HPEN hDKGRAYPen;
|
||||
HPEN hOldPen;
|
||||
int OldColor;
|
||||
rect.right--; rect.bottom--;
|
||||
hDKGRAYPen = CreatePen(PS_SOLID, 1, 0x00808080L);
|
||||
hWHITEPen = GetStockObject(WHITE_PEN);
|
||||
hOldPen = SelectObject(hDC, hWHITEPen);
|
||||
while(ThickNess > 0) {
|
||||
if (Mode == 0)
|
||||
SelectObject(hDC, hWHITEPen);
|
||||
else
|
||||
SelectObject(hDC, hDKGRAYPen);
|
||||
Line(hDC, rect.left, rect.top, rect.right, rect.top);
|
||||
Line(hDC, rect.left, rect.top, rect.left, rect.bottom + 1);
|
||||
if (Mode == 0)
|
||||
SelectObject(hDC, hDKGRAYPen);
|
||||
else
|
||||
SelectObject(hDC, hWHITEPen);
|
||||
Line(hDC, rect.right, rect.bottom, rect.left, rect.bottom);
|
||||
Line(hDC, rect.right, rect.bottom, rect.right, rect.top - 1);
|
||||
InflateRect(&rect, -1, -1);
|
||||
ThickNess--;
|
||||
HBRUSH hbrushOld, hbrushShadow, hbrushHighlight;
|
||||
int i;
|
||||
|
||||
hbrushShadow = CreateSolidBrush( GetSysColor(COLOR_BTNSHADOW) );
|
||||
hbrushHighlight = CreateSolidBrush( GetSysColor(COLOR_BTNHIGHLIGHT) );
|
||||
|
||||
if (pressed) hbrushOld = SelectObject( hdc, hbrushShadow );
|
||||
else hbrushOld = SelectObject( hdc, hbrushHighlight );
|
||||
|
||||
for (i = 0; i < thickness; i++)
|
||||
{
|
||||
PatBlt( hdc, rect.left + i, rect.top,
|
||||
1, rect.bottom - rect.top - i, PATCOPY );
|
||||
PatBlt( hdc, rect.left, rect.top + i,
|
||||
rect.right - rect.left - i, 1, PATCOPY );
|
||||
}
|
||||
SelectObject(hDC, hOldPen);
|
||||
DeleteObject(hDKGRAYPen);
|
||||
|
||||
if (pressed) hbrushOld = SelectObject( hdc, hbrushHighlight );
|
||||
else hbrushOld = SelectObject( hdc, hbrushShadow );
|
||||
|
||||
for (i = 0; i < thickness; i++)
|
||||
{
|
||||
PatBlt( hdc, rect.right - i - 1, rect.top + i,
|
||||
1, rect.bottom - rect.top - i, PATCOPY );
|
||||
PatBlt( hdc, rect.left + i, rect.bottom - i - 1,
|
||||
rect.right - rect.left - i, 1, PATCOPY );
|
||||
}
|
||||
|
||||
SelectObject( hdc, hbrushOld );
|
||||
DeleteObject( hbrushShadow );
|
||||
DeleteObject( hbrushHighlight );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* Polyline (GDI.37)
|
||||
*/
|
||||
|
|
|
@ -17,15 +17,15 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
|
||||
#include "message.h"
|
||||
#include "win.h"
|
||||
|
||||
#include "wineopts.h"
|
||||
#include "sysmetrics.h"
|
||||
|
||||
#define MAX_QUEUE_SIZE 120 /* Max. size of a message queue */
|
||||
|
||||
extern BOOL TIMER_CheckTimer( DWORD *next ); /* timer.c */
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Screen * XT_screen;
|
||||
extern XtAppContext XT_app_context;
|
||||
extern BOOL TIMER_CheckTimer( DWORD *next ); /* timer.c */
|
||||
extern void EVENT_ProcessEvent( XEvent *event ); /* event.c */
|
||||
|
||||
extern Display * display;
|
||||
|
||||
/* System message queue (for hardware events) */
|
||||
static HANDLE hmemSysMsgQueue = 0;
|
||||
|
@ -35,6 +35,10 @@ static MESSAGEQUEUE * sysMsgQueue = NULL;
|
|||
static HANDLE hmemAppMsgQueue = 0;
|
||||
static MESSAGEQUEUE * appMsgQueue = NULL;
|
||||
|
||||
/* Double-click time */
|
||||
static int doubleClickSpeed = 452;
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MSG_CreateMsgQueue
|
||||
*
|
||||
|
@ -78,7 +82,8 @@ static HANDLE MSG_CreateMsgQueue( int size )
|
|||
/***********************************************************************
|
||||
* MSG_CreateSysMsgQueue
|
||||
*
|
||||
* Create the system message queue. Must be called only once.
|
||||
* Create the system message queue, and set the double-click speed.
|
||||
* Must be called only once.
|
||||
*/
|
||||
BOOL MSG_CreateSysMsgQueue( int size )
|
||||
{
|
||||
|
@ -86,6 +91,7 @@ BOOL MSG_CreateSysMsgQueue( int size )
|
|||
else if (size <= 0) size = 1;
|
||||
if (!(hmemSysMsgQueue = MSG_CreateMsgQueue( size ))) return FALSE;
|
||||
sysMsgQueue = (MESSAGEQUEUE *) GlobalLock( hmemSysMsgQueue );
|
||||
doubleClickSpeed = GetProfileInt( "windows", "DoubleClickSpeed", 452 );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -99,6 +105,8 @@ static int MSG_AddMsg( MESSAGEQUEUE * msgQueue, MSG * msg, DWORD extraInfo )
|
|||
{
|
||||
int pos;
|
||||
|
||||
SpyMessage(msg->hwnd, msg->message, msg->wParam, msg->lParam);
|
||||
|
||||
if (!msgQueue) return FALSE;
|
||||
pos = msgQueue->nextFreeMessage;
|
||||
|
||||
|
@ -183,6 +191,93 @@ static void MSG_RemoveMsg( MESSAGEQUEUE * msgQueue, int pos )
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MSG_TranslateMouseMsg
|
||||
*
|
||||
* Translate an mouse hardware event into a real mouse message.
|
||||
* Actions performed:
|
||||
* - Translate button down messages in double-clicks.
|
||||
* - Send the WM_NCHITTEST message to find where the cursor is.
|
||||
* - Translate the message into a non-client message, or translate
|
||||
* the coordinates to client coordinates.
|
||||
*/
|
||||
static void MSG_TranslateMouseMsg( MSG *msg )
|
||||
{
|
||||
static DWORD lastClickTime = 0;
|
||||
static WORD lastClickMsg = 0;
|
||||
static POINT lastClickPos = { 0, 0 };
|
||||
|
||||
LONG hittest_result = SendMessage( msg->hwnd, WM_NCHITTEST, 0,
|
||||
MAKELONG( msg->pt.x, msg->pt.y ) );
|
||||
|
||||
if ((msg->message == WM_LBUTTONDOWN) ||
|
||||
(msg->message == WM_RBUTTONDOWN) ||
|
||||
(msg->message == WM_MBUTTONDOWN))
|
||||
{
|
||||
BOOL dbl_click = FALSE;
|
||||
|
||||
/* Check for double-click */
|
||||
|
||||
if ((msg->message == lastClickMsg) &&
|
||||
(msg->time - lastClickTime < doubleClickSpeed) &&
|
||||
(abs(msg->pt.x - lastClickPos.x) < SYSMETRICS_CXDOUBLECLK/2) &&
|
||||
(abs(msg->pt.y - lastClickPos.y) < SYSMETRICS_CYDOUBLECLK/2))
|
||||
dbl_click = TRUE;
|
||||
|
||||
if (dbl_click && (hittest_result == HTCLIENT))
|
||||
{
|
||||
/* Check whether window wants the double click message. */
|
||||
WND * wndPtr = WIN_FindWndPtr( msg->hwnd );
|
||||
if (!wndPtr || !(wndPtr->flags & WIN_DOUBLE_CLICKS))
|
||||
dbl_click = FALSE;
|
||||
}
|
||||
|
||||
if (dbl_click) switch(msg->message)
|
||||
{
|
||||
case WM_LBUTTONDOWN: msg->message = WM_LBUTTONDBLCLK; break;
|
||||
case WM_RBUTTONDOWN: msg->message = WM_RBUTTONDBLCLK; break;
|
||||
case WM_MBUTTONDOWN: msg->message = WM_MBUTTONDBLCLK; break;
|
||||
}
|
||||
|
||||
lastClickTime = msg->time;
|
||||
lastClickMsg = msg->message;
|
||||
lastClickPos = msg->pt;
|
||||
}
|
||||
|
||||
msg->lParam = MAKELONG( msg->pt.x, msg->pt.y );
|
||||
if (hittest_result == HTCLIENT)
|
||||
{
|
||||
ScreenToClient( msg->hwnd, (LPPOINT)&msg->lParam );
|
||||
}
|
||||
else
|
||||
{
|
||||
msg->wParam = hittest_result;
|
||||
msg->message += WM_NCLBUTTONDOWN - WM_LBUTTONDOWN;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* SetDoubleClickTime (USER.20)
|
||||
*/
|
||||
void SetDoubleClickTime( WORD interval )
|
||||
{
|
||||
if (interval == 0)
|
||||
doubleClickSpeed = 500;
|
||||
else
|
||||
doubleClickSpeed = interval;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* GetDoubleClickTime (USER.21)
|
||||
*/
|
||||
WORD GetDoubleClickTime()
|
||||
{
|
||||
return (WORD)doubleClickSpeed;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MSG_IncPaintCount
|
||||
*/
|
||||
|
@ -233,6 +328,7 @@ void MSG_DecTimerCount( HANDLE hQueue )
|
|||
* hardware_event
|
||||
*
|
||||
* Add an event to the system message queue.
|
||||
* Note: the position is in screen coordinates.
|
||||
*/
|
||||
void hardware_event( HWND hwnd, WORD message, WORD wParam, LONG lParam,
|
||||
WORD xPos, WORD yPos, DWORD time, DWORD extraInfo )
|
||||
|
@ -325,24 +421,6 @@ BOOL GetInputState()
|
|||
}
|
||||
|
||||
|
||||
#ifndef USE_XLIB
|
||||
static XtIntervalId xt_timer = 0;
|
||||
|
||||
/***********************************************************************
|
||||
* MSG_TimerCallback
|
||||
*/
|
||||
static void MSG_TimerCallback( XtPointer data, XtIntervalId * xtid )
|
||||
{
|
||||
DWORD nextExp;
|
||||
TIMER_CheckTimer( &nextExp );
|
||||
if (nextExp != (DWORD)-1)
|
||||
xt_timer = XtAppAddTimeOut( XT_app_context, nextExp,
|
||||
MSG_TimerCallback, NULL );
|
||||
else xt_timer = 0;
|
||||
}
|
||||
#endif /* USE_XLIB */
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MSG_PeekMessage
|
||||
*/
|
||||
|
@ -351,9 +429,7 @@ static BOOL MSG_PeekMessage( MESSAGEQUEUE * msgQueue, LPMSG msg, HWND hwnd,
|
|||
{
|
||||
int pos, mask;
|
||||
DWORD nextExp; /* Next timer expiration time */
|
||||
#ifdef USE_XLIB
|
||||
XEvent event;
|
||||
#endif
|
||||
|
||||
if (first || last)
|
||||
{
|
||||
|
@ -366,16 +442,11 @@ static BOOL MSG_PeekMessage( MESSAGEQUEUE * msgQueue, LPMSG msg, HWND hwnd,
|
|||
}
|
||||
else mask = QS_MOUSE | QS_KEY | QS_POSTMESSAGE | QS_TIMER | QS_PAINT;
|
||||
|
||||
#ifdef USE_XLIB
|
||||
while (XPending( XT_display ))
|
||||
while (XPending( display ))
|
||||
{
|
||||
XNextEvent( XT_display, &event );
|
||||
XNextEvent( display, &event );
|
||||
EVENT_ProcessEvent( &event );
|
||||
}
|
||||
#else
|
||||
while (XtAppPending( XT_app_context ))
|
||||
XtAppProcessEvent( XT_app_context, XtIMAll );
|
||||
#endif
|
||||
|
||||
while(1)
|
||||
{
|
||||
|
@ -432,6 +503,8 @@ static BOOL MSG_PeekMessage( MESSAGEQUEUE * msgQueue, LPMSG msg, HWND hwnd,
|
|||
msgQueue->GetMessageExtraInfoVal = qmsg->extraInfo;
|
||||
|
||||
if (flags & PM_REMOVE) MSG_RemoveMsg( sysMsgQueue, pos );
|
||||
if ((msg->message >= WM_MOUSEFIRST) &&
|
||||
(msg->message <= WM_MOUSELAST)) MSG_TranslateMouseMsg( msg );
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -447,26 +520,16 @@ static BOOL MSG_PeekMessage( MESSAGEQUEUE * msgQueue, LPMSG msg, HWND hwnd,
|
|||
|
||||
/* Finally handle WM_TIMER messages */
|
||||
if ((msgQueue->status & QS_TIMER) && (mask & QS_TIMER))
|
||||
{
|
||||
BOOL posted = TIMER_CheckTimer( &nextExp );
|
||||
#ifndef USE_XLIB
|
||||
if (xt_timer) XtRemoveTimeOut( xt_timer );
|
||||
if (nextExp != (DWORD)-1)
|
||||
xt_timer = XtAppAddTimeOut( XT_app_context, nextExp,
|
||||
MSG_TimerCallback, NULL );
|
||||
else xt_timer = 0;
|
||||
#endif
|
||||
if (posted) continue; /* Restart the whole thing */
|
||||
}
|
||||
if (TIMER_CheckTimer( &nextExp ))
|
||||
continue; /* Restart the whole search */
|
||||
|
||||
/* Wait until something happens */
|
||||
if (peek) return FALSE;
|
||||
#ifdef USE_XLIB
|
||||
if (!XPending( XT_display ) && (nextExp != -1))
|
||||
if (!XPending( display ) && (nextExp != -1))
|
||||
{
|
||||
fd_set read_set;
|
||||
struct timeval timeout;
|
||||
int fd = ConnectionNumber(XT_display);
|
||||
int fd = ConnectionNumber(display);
|
||||
FD_ZERO( &read_set );
|
||||
FD_SET( fd, &read_set );
|
||||
timeout.tv_sec = nextExp / 1000;
|
||||
|
@ -474,11 +537,8 @@ static BOOL MSG_PeekMessage( MESSAGEQUEUE * msgQueue, LPMSG msg, HWND hwnd,
|
|||
if (select( fd+1, &read_set, NULL, NULL, &timeout ) != 1)
|
||||
continue; /* On timeout or error, restart from the start */
|
||||
}
|
||||
XNextEvent( XT_display, &event );
|
||||
XNextEvent( display, &event );
|
||||
EVENT_ProcessEvent( &event );
|
||||
#else
|
||||
XtAppProcessEvent( XT_app_context, XtIMAll );
|
||||
#endif
|
||||
}
|
||||
|
||||
/* We got a message */
|
||||
|
@ -529,7 +589,11 @@ BOOL PostMessage( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
|||
*/
|
||||
LONG SendMessage( HWND hwnd, WORD msg, WORD wParam, LONG lParam )
|
||||
{
|
||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
||||
WND * wndPtr;
|
||||
|
||||
SpyMessage(hwnd, msg, wParam, lParam);
|
||||
|
||||
wndPtr = WIN_FindWndPtr( hwnd );
|
||||
if (!wndPtr) return 0;
|
||||
return CallWindowProc( wndPtr->lpfnWndProc, hwnd, msg, wParam, lParam );
|
||||
}
|
||||
|
@ -564,7 +628,7 @@ LONG DispatchMessage( LPMSG msg )
|
|||
int painting;
|
||||
|
||||
#ifdef DEBUG_MSG
|
||||
printf( "Dispatch message hwnd=%08x msg=%d w=%d l=%d time=%u pt=%d,%d\n",
|
||||
printf( "Dispatch message hwnd=%08x msg=0x%x w=%d l=%d time=%u pt=%d,%d\n",
|
||||
msg->hwnd, msg->message, msg->wParam, msg->lParam,
|
||||
msg->time, msg->pt.x, msg->pt.y );
|
||||
#endif
|
||||
|
@ -587,7 +651,7 @@ LONG DispatchMessage( LPMSG msg )
|
|||
if (painting && (wndPtr->flags & WIN_NEEDS_BEGINPAINT))
|
||||
{
|
||||
#ifdef DEBUG_WIN
|
||||
printf( "BeginPaint not called on WM_PAINT!\n" );
|
||||
printf( "BeginPaint not called on WM_PAINT for hwnd %d!\n", msg->hwnd);
|
||||
#endif
|
||||
wndPtr->flags &= ~WIN_NEEDS_BEGINPAINT;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,461 @@
|
|||
/*
|
||||
* Non-client area window functions
|
||||
*
|
||||
* Copyright 1994 Alexandre Julliard
|
||||
*/
|
||||
|
||||
static char Copyright[] = "Copyright Alexandre Julliard, 1994";
|
||||
|
||||
#include "win.h"
|
||||
#include "sysmetrics.h"
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NC_AdjustRect
|
||||
*
|
||||
* Compute the size of the window rectangle from the size of the
|
||||
* client rectangle.
|
||||
*/
|
||||
static void NC_AdjustRect( LPRECT rect, DWORD style, BOOL menu, DWORD exStyle )
|
||||
{
|
||||
if ((style & WS_DLGFRAME) &&
|
||||
((exStyle & WS_EX_DLGMODALFRAME) || !(style & WS_BORDER)))
|
||||
InflateRect( rect, SYSMETRICS_CXDLGFRAME, SYSMETRICS_CYDLGFRAME );
|
||||
else if (style & WS_THICKFRAME)
|
||||
InflateRect( rect, SYSMETRICS_CXFRAME, SYSMETRICS_CYFRAME );
|
||||
|
||||
if (style & WS_BORDER)
|
||||
InflateRect( rect, SYSMETRICS_CXBORDER, SYSMETRICS_CYBORDER );
|
||||
|
||||
if ((style & WS_CAPTION) == WS_CAPTION)
|
||||
rect->top -= SYSMETRICS_CYCAPTION - 1;
|
||||
|
||||
if (menu) rect->top -= SYSMETRICS_CYMENU + 1;
|
||||
|
||||
if (style & WS_VSCROLL) rect->right += SYSMETRICS_CXVSCROLL;
|
||||
if (style & WS_HSCROLL) rect->bottom += SYSMETRICS_CYHSCROLL;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* AdjustWindowRect (USER.102)
|
||||
*/
|
||||
void AdjustWindowRect( LPRECT rect, DWORD style, BOOL menu )
|
||||
{
|
||||
AdjustWindowRectEx( rect, style, menu, 0 );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* AdjustWindowRectEx (USER.454)
|
||||
*/
|
||||
void AdjustWindowRectEx( LPRECT rect, DWORD style, BOOL menu, DWORD exStyle )
|
||||
{
|
||||
/* Correct the window style */
|
||||
|
||||
if (!(style & (WS_POPUP | WS_CHILD))) /* Overlapped window */
|
||||
style |= WS_CAPTION;
|
||||
if (exStyle & WS_EX_DLGMODALFRAME) style &= ~WS_THICKFRAME;
|
||||
|
||||
#ifdef DEBUG_NONCLIENT
|
||||
printf( "AdjustWindowRectEx: (%d,%d)-(%d,%d) %08x %d %08x\n",
|
||||
rect->left, rect->top, rect->right, rect->bottom, style, menu, exStyle );
|
||||
#endif
|
||||
|
||||
NC_AdjustRect( rect, style, menu, exStyle );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NC_HandleNCCalcSize
|
||||
*
|
||||
* Handle a WM_NCCALCSIZE message. Called from DefWindowProc().
|
||||
*/
|
||||
LONG NC_HandleNCCalcSize( HWND hwnd, NCCALCSIZE_PARAMS *params )
|
||||
{
|
||||
RECT tmpRect = { 0, 0, 0, 0 };
|
||||
BOOL hasMenu;
|
||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||
|
||||
if (!wndPtr) return 0;
|
||||
|
||||
hasMenu = (!(wndPtr->dwStyle & WS_CHILD)) && (wndPtr->wIDmenu != 0);
|
||||
|
||||
NC_AdjustRect( &tmpRect, wndPtr->dwStyle, hasMenu, wndPtr->dwExStyle );
|
||||
|
||||
params->rgrc[0].left -= tmpRect.left;
|
||||
params->rgrc[0].top -= tmpRect.top;
|
||||
params->rgrc[0].right -= tmpRect.right;
|
||||
params->rgrc[0].bottom -= tmpRect.bottom;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NC_HandleNCHitTest
|
||||
*
|
||||
* Handle a WM_NCHITTEST message. Called from DefWindowProc().
|
||||
*/
|
||||
LONG NC_HandleNCHitTest( HWND hwnd, POINT pt )
|
||||
{
|
||||
RECT rect;
|
||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||
if (!wndPtr) return HTERROR;
|
||||
|
||||
#ifdef DEBUG_NONCLIENT
|
||||
printf( "NC_HandleNCHitTest: hwnd=%x pt=%d,%d\n", hwnd, pt.x, pt.y );
|
||||
#endif
|
||||
|
||||
if (hwnd == GetCapture()) return HTCLIENT;
|
||||
GetWindowRect( hwnd, &rect );
|
||||
if (!PtInRect( &rect, pt )) return HTNOWHERE;
|
||||
ScreenToClient( hwnd, &pt );
|
||||
GetClientRect( hwnd, &rect );
|
||||
|
||||
if (PtInRect( &rect, pt )) return HTCLIENT;
|
||||
|
||||
/* Check vertical scroll bar */
|
||||
if (wndPtr->dwStyle & WS_VSCROLL)
|
||||
{
|
||||
rect.right += SYSMETRICS_CXVSCROLL;
|
||||
if (PtInRect( &rect, pt )) return HTVSCROLL;
|
||||
}
|
||||
|
||||
/* Check horizontal scroll bar */
|
||||
if (wndPtr->dwStyle & WS_HSCROLL)
|
||||
{
|
||||
rect.bottom += SYSMETRICS_CYHSCROLL;
|
||||
if (PtInRect( &rect, pt ))
|
||||
{
|
||||
/* Check size box */
|
||||
if ((wndPtr->dwStyle & WS_VSCROLL) &&
|
||||
(pt.x >= rect.right - SYSMETRICS_CXVSCROLL)) return HTSIZE;
|
||||
return HTHSCROLL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check menu */
|
||||
if ((!(wndPtr->dwStyle & WS_CHILD)) && (wndPtr->wIDmenu != 0))
|
||||
{
|
||||
rect.top -= SYSMETRICS_CYMENU + 1;
|
||||
if (PtInRect( &rect, pt )) return HTMENU;
|
||||
}
|
||||
|
||||
/* Check caption */
|
||||
if ((wndPtr->dwStyle & WS_CAPTION) == WS_CAPTION)
|
||||
{
|
||||
rect.top -= SYSMETRICS_CYCAPTION - 1;
|
||||
if (PtInRect( &rect, pt ))
|
||||
{
|
||||
/* Check system menu */
|
||||
if ((wndPtr->dwStyle & WS_SYSMENU) && (pt.x <= SYSMETRICS_CXSIZE))
|
||||
return HTSYSMENU;
|
||||
/* Check maximize box */
|
||||
if (wndPtr->dwStyle & WS_MAXIMIZEBOX)
|
||||
rect.right -= SYSMETRICS_CXSIZE + 1;
|
||||
if (pt.x >= rect.right) return HTMAXBUTTON;
|
||||
/* Check minimize box */
|
||||
if (wndPtr->dwStyle & WS_MINIMIZEBOX)
|
||||
rect.right -= SYSMETRICS_CXSIZE + 1;
|
||||
if (pt.x >= rect.right) return HTMINBUTTON;
|
||||
return HTCAPTION;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check non-sizing border */
|
||||
if (!(wndPtr->dwStyle & WS_THICKFRAME) ||
|
||||
((wndPtr->dwStyle & (WS_DLGFRAME | WS_BORDER)) == WS_DLGFRAME))
|
||||
return HTBORDER;
|
||||
|
||||
/* Check top sizing border */
|
||||
if (pt.y < rect.top)
|
||||
{
|
||||
if (pt.x < rect.left+SYSMETRICS_CXSIZE) return HTTOPLEFT;
|
||||
if (pt.x >= rect.right-SYSMETRICS_CXSIZE) return HTTOPRIGHT;
|
||||
return HTTOP;
|
||||
}
|
||||
|
||||
/* Check bottom sizing border */
|
||||
if (pt.y >= rect.bottom)
|
||||
{
|
||||
if (pt.x < rect.left+SYSMETRICS_CXSIZE) return HTBOTTOMLEFT;
|
||||
if (pt.x >= rect.right-SYSMETRICS_CXSIZE) return HTBOTTOMRIGHT;
|
||||
return HTBOTTOM;
|
||||
}
|
||||
|
||||
/* Check left sizing border */
|
||||
if (pt.x < rect.left)
|
||||
{
|
||||
if (pt.y < rect.top+SYSMETRICS_CYSIZE) return HTTOPLEFT;
|
||||
if (pt.y >= rect.bottom-SYSMETRICS_CYSIZE) return HTBOTTOMLEFT;
|
||||
return HTLEFT;
|
||||
}
|
||||
|
||||
/* Check right sizing border */
|
||||
if (pt.x >= rect.right)
|
||||
{
|
||||
if (pt.y < rect.top+SYSMETRICS_CYSIZE) return HTTOPRIGHT;
|
||||
if (pt.y >= rect.bottom-SYSMETRICS_CYSIZE) return HTBOTTOMRIGHT;
|
||||
return HTRIGHT;
|
||||
}
|
||||
|
||||
/* Should never get here */
|
||||
return HTERROR;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NC_DrawFrame
|
||||
*
|
||||
* Draw a window frame inside the given rectangle, and update the rectangle.
|
||||
* The correct pen and brush must be selected in the DC.
|
||||
*/
|
||||
static void NC_DrawFrame( HDC hdc, RECT *rect, BOOL dlgFrame )
|
||||
{
|
||||
short width, height, tmp;
|
||||
|
||||
if (dlgFrame)
|
||||
{
|
||||
width = SYSMETRICS_CXDLGFRAME;
|
||||
height = SYSMETRICS_CYDLGFRAME;
|
||||
}
|
||||
else
|
||||
{
|
||||
width = SYSMETRICS_CXFRAME - 1;
|
||||
height = SYSMETRICS_CYFRAME - 1;
|
||||
}
|
||||
|
||||
/* Draw frame */
|
||||
PatBlt( hdc, rect->left, rect->top,
|
||||
rect->right - rect->left, height, PATCOPY );
|
||||
PatBlt( hdc, rect->left, rect->top,
|
||||
width, rect->bottom - rect->top, PATCOPY );
|
||||
PatBlt( hdc, rect->left, rect->bottom,
|
||||
rect->right - rect->left, -height, PATCOPY );
|
||||
PatBlt( hdc, rect->right, rect->top,
|
||||
-width, rect->bottom - rect->top, PATCOPY );
|
||||
|
||||
if (dlgFrame)
|
||||
{
|
||||
InflateRect( rect, -width, -height );
|
||||
return;
|
||||
}
|
||||
|
||||
/* Draw inner rectangle */
|
||||
MoveTo( hdc, rect->left+width, rect->top+height );
|
||||
LineTo( hdc, rect->right-width-1, rect->top+height );
|
||||
LineTo( hdc, rect->right-width-1, rect->bottom-height-1 );
|
||||
LineTo( hdc, rect->left+width, rect->bottom-height-1 );
|
||||
LineTo( hdc, rect->left+width, rect->top+height );
|
||||
|
||||
/* Draw the decorations */
|
||||
tmp = rect->top + SYSMETRICS_CYFRAME + SYSMETRICS_CYSIZE;
|
||||
MoveTo( hdc, rect->left, tmp);
|
||||
LineTo( hdc, rect->left+width, tmp );
|
||||
MoveTo( hdc, rect->right-width-1, tmp );
|
||||
LineTo( hdc, rect->right-1, tmp );
|
||||
|
||||
tmp = rect->bottom - 1 - SYSMETRICS_CYFRAME - SYSMETRICS_CYSIZE;
|
||||
MoveTo( hdc, rect->left, tmp );
|
||||
LineTo( hdc, rect->left+width, tmp );
|
||||
MoveTo( hdc, rect->right-width-1, tmp );
|
||||
LineTo( hdc, rect->right-1, tmp );
|
||||
|
||||
tmp = rect->left + SYSMETRICS_CXFRAME + SYSMETRICS_CXSIZE;
|
||||
MoveTo( hdc, tmp, rect->top );
|
||||
LineTo( hdc, tmp, rect->top+height );
|
||||
MoveTo( hdc, tmp, rect->bottom-height-1 );
|
||||
LineTo( hdc, tmp, rect->bottom-1 );
|
||||
|
||||
tmp = rect->right - 1 - SYSMETRICS_CXFRAME - SYSMETRICS_CYSIZE;
|
||||
MoveTo( hdc, tmp, rect->top );
|
||||
LineTo( hdc, tmp, rect->top+height );
|
||||
MoveTo( hdc, tmp, rect->bottom-height-1 );
|
||||
LineTo( hdc, tmp, rect->bottom-1 );
|
||||
|
||||
InflateRect( rect, -width-1, -height-1 );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NC_DrawCaption
|
||||
*
|
||||
* Draw the window caption.
|
||||
* The correct pen for the window frame must be selected in the DC.
|
||||
*/
|
||||
static void NC_DrawCaption( HDC hdc, RECT *rect, HWND hwnd, DWORD style )
|
||||
{
|
||||
RECT r;
|
||||
HBRUSH hbrushCaption, hbrushButtons;
|
||||
char buffer[256];
|
||||
|
||||
hbrushButtons = CreateSolidBrush( GetSysColor( COLOR_BTNFACE ) );
|
||||
hbrushCaption = CreateSolidBrush( GetSysColor( COLOR_ACTIVECAPTION ) );
|
||||
|
||||
MoveTo( hdc, rect->left, rect->bottom );
|
||||
LineTo( hdc, rect->right-1, rect->bottom );
|
||||
|
||||
/* We should probably use OEM bitmaps (OBM_*) here */
|
||||
if (style & WS_SYSMENU)
|
||||
{
|
||||
r = *rect;
|
||||
r.right = r.left + SYSMETRICS_CYSIZE;
|
||||
FillRect( hdc, &r, hbrushButtons );
|
||||
MoveTo( hdc, r.right, r.top );
|
||||
LineTo( hdc, r.right, r.bottom );
|
||||
rect->left += SYSMETRICS_CXSIZE + 1;
|
||||
}
|
||||
if (style & WS_MAXIMIZEBOX)
|
||||
{
|
||||
r = *rect;
|
||||
r.left = r.right - SYSMETRICS_CXSIZE;
|
||||
FillRect( hdc, &r, hbrushButtons );
|
||||
MoveTo( hdc, r.left-1, r.top );
|
||||
LineTo( hdc, r.left-1, r.bottom );
|
||||
DrawReliefRect( hdc, r, 2, 0 );
|
||||
rect->right -= SYSMETRICS_CXSIZE + 1;
|
||||
}
|
||||
if (style & WS_MINIMIZEBOX)
|
||||
{
|
||||
r = *rect;
|
||||
r.left = r.right - SYSMETRICS_CXSIZE;
|
||||
FillRect( hdc, &r, hbrushButtons );
|
||||
MoveTo( hdc, r.left-1, r.top );
|
||||
LineTo( hdc, r.left-1, r.bottom );
|
||||
DrawReliefRect( hdc, r, 2, 0 );
|
||||
rect->right -= SYSMETRICS_CXSIZE + 1;
|
||||
}
|
||||
|
||||
FillRect( hdc, rect, hbrushCaption );
|
||||
|
||||
if (GetWindowText( hwnd, buffer, 256 ))
|
||||
{
|
||||
SetTextColor( hdc, GetSysColor( COLOR_CAPTIONTEXT ) );
|
||||
SetBkMode( hdc, TRANSPARENT );
|
||||
DrawText( hdc, buffer, -1, rect,
|
||||
DT_SINGLELINE | DT_CENTER | DT_VCENTER );
|
||||
}
|
||||
|
||||
DeleteObject( hbrushButtons );
|
||||
DeleteObject( hbrushCaption );
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NC_HandleNCPaint
|
||||
*
|
||||
* Handle a WM_NCPAINT message. Called from DefWindowProc().
|
||||
*/
|
||||
LONG NC_HandleNCPaint( HWND hwnd, HRGN hrgn )
|
||||
{
|
||||
HDC hdc;
|
||||
RECT rect;
|
||||
HBRUSH hbrushBorder = 0;
|
||||
HPEN hpenFrame = 0;
|
||||
|
||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||
|
||||
#ifdef DEBUG_NONCLIENT
|
||||
printf( "NC_HandleNCPaint: %d %d\n", hwnd, hrgn );
|
||||
#endif
|
||||
|
||||
if (!wndPtr || !hrgn) return 0;
|
||||
if (!(wndPtr->dwStyle & (WS_BORDER | WS_DLGFRAME | WS_THICKFRAME)))
|
||||
return 0; /* Nothing to do! */
|
||||
|
||||
if (hrgn == 1) hdc = GetDCEx( hwnd, 0, DCX_CACHE | DCX_WINDOW );
|
||||
else hdc = GetDCEx( hwnd, hrgn, DCX_CACHE | DCX_WINDOW | DCX_INTERSECTRGN);
|
||||
if (!hdc) return 0;
|
||||
if (ExcludeVisRect( hdc, wndPtr->rectClient.left-wndPtr->rectWindow.left,
|
||||
wndPtr->rectClient.top-wndPtr->rectWindow.top,
|
||||
wndPtr->rectClient.right-wndPtr->rectWindow.left,
|
||||
wndPtr->rectClient.bottom-wndPtr->rectWindow.top )
|
||||
== NULLREGION)
|
||||
{
|
||||
ReleaseDC( hwnd, hdc );
|
||||
return 0;
|
||||
}
|
||||
|
||||
rect.top = rect.left = 0;
|
||||
rect.right = wndPtr->rectWindow.right - wndPtr->rectWindow.left;
|
||||
rect.bottom = wndPtr->rectWindow.bottom - wndPtr->rectWindow.top;
|
||||
|
||||
hpenFrame = CreatePen( PS_SOLID, 1, GetSysColor(COLOR_WINDOWFRAME) );
|
||||
SelectObject( hdc, hpenFrame );
|
||||
hbrushBorder = CreateSolidBrush( GetSysColor(COLOR_ACTIVEBORDER) );
|
||||
SelectObject( hdc, hbrushBorder );
|
||||
|
||||
if ((wndPtr->dwStyle & WS_BORDER) || (wndPtr->dwStyle & WS_DLGFRAME))
|
||||
{
|
||||
MoveTo( hdc, 0, 0 );
|
||||
LineTo( hdc, rect.right-1, 0 );
|
||||
LineTo( hdc, rect.right-1, rect.bottom-1 );
|
||||
LineTo( hdc, 0, rect.bottom-1 );
|
||||
LineTo( hdc, 0, 0 );
|
||||
InflateRect( &rect, -1, -1 );
|
||||
}
|
||||
|
||||
if ((wndPtr->dwStyle & WS_DLGFRAME) &&
|
||||
((wndPtr->dwExStyle & WS_EX_DLGMODALFRAME) ||
|
||||
!(wndPtr->dwStyle & WS_BORDER))) NC_DrawFrame( hdc, &rect, TRUE );
|
||||
else if (wndPtr->dwStyle & WS_THICKFRAME) NC_DrawFrame(hdc, &rect, FALSE);
|
||||
|
||||
if ((wndPtr->dwStyle & WS_CAPTION) == WS_CAPTION)
|
||||
{
|
||||
RECT r = rect;
|
||||
rect.top += SYSMETRICS_CYSIZE + 1;
|
||||
r.bottom = rect.top - 1;
|
||||
if (wndPtr->dwExStyle & WS_EX_DLGMODALFRAME)
|
||||
{
|
||||
HBRUSH hbrushWindow = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
|
||||
HBRUSH hbrushOld = SelectObject( hdc, hbrushWindow );
|
||||
PatBlt( hdc, r.left, r.top, 1, r.bottom-r.top+1, PATCOPY );
|
||||
PatBlt( hdc, r.right-1, r.top, 1, r.bottom-r.top+1, PATCOPY );
|
||||
PatBlt( hdc, r.left, r.top, r.right-r.left, 1, PATCOPY );
|
||||
r.left++;
|
||||
r.right--;
|
||||
r.top++;
|
||||
SelectObject( hdc, hbrushOld );
|
||||
DeleteObject( hbrushWindow );
|
||||
}
|
||||
NC_DrawCaption( hdc, &r, hwnd, wndPtr->dwStyle );
|
||||
}
|
||||
|
||||
if (wndPtr->dwStyle & (WS_VSCROLL | WS_HSCROLL))
|
||||
{
|
||||
HBRUSH hbrushScroll = CreateSolidBrush( GetSysColor(COLOR_SCROLLBAR) );
|
||||
HBRUSH hbrushOld = SelectObject( hdc, hbrushScroll );
|
||||
if (wndPtr->dwStyle & WS_VSCROLL)
|
||||
PatBlt( hdc, rect.right - SYSMETRICS_CXVSCROLL, rect.top,
|
||||
SYSMETRICS_CXVSCROLL, rect.bottom-rect.top, PATCOPY );
|
||||
if (wndPtr->dwStyle & WS_HSCROLL)
|
||||
PatBlt( hdc, rect.left, rect.bottom - SYSMETRICS_CYHSCROLL,
|
||||
rect.right-rect.left, SYSMETRICS_CYHSCROLL, PATCOPY );
|
||||
SelectObject( hdc, hbrushOld );
|
||||
DeleteObject( hbrushScroll );
|
||||
}
|
||||
|
||||
ReleaseDC( hwnd, hdc );
|
||||
if (hbrushBorder) DeleteObject( hbrushBorder );
|
||||
if (hpenFrame) DeleteObject( hpenFrame );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* NC_HandleNCMouseMsg
|
||||
*
|
||||
* Handle a non-client mouse message. Called from DefWindowProc().
|
||||
*/
|
||||
LONG NC_HandleNCMouseMsg( HWND hwnd, WORD msg, WORD wParam, LONG lParam )
|
||||
{
|
||||
switch(wParam) /* Hit test code */
|
||||
{
|
||||
case HTSYSMENU:
|
||||
if (msg == WM_NCLBUTTONDBLCLK)
|
||||
return SendMessage( hwnd, WM_SYSCOMMAND, SC_CLOSE, lParam );
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -21,9 +21,12 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
*/
|
||||
HDC BeginPaint( HWND hwnd, LPPAINTSTRUCT lps )
|
||||
{
|
||||
HRGN hrgnUpdate;
|
||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
||||
if (!wndPtr) return 0;
|
||||
|
||||
hrgnUpdate = wndPtr->hrgnUpdate; /* Save update region */
|
||||
|
||||
if (!(lps->hdc = GetDCEx( hwnd, wndPtr->hrgnUpdate,
|
||||
DCX_INTERSECTRGN | DCX_USESTYLE ))) return 0;
|
||||
GetRgnBox( InquireVisRgn(lps->hdc), &lps->rcPaint );
|
||||
|
@ -35,7 +38,8 @@ HDC BeginPaint( HWND hwnd, LPPAINTSTRUCT lps )
|
|||
MSG_DecPaintCount( wndPtr->hmemTaskQ );
|
||||
}
|
||||
wndPtr->flags &= ~WIN_NEEDS_BEGINPAINT;
|
||||
|
||||
|
||||
SendMessage( hwnd, WM_NCPAINT, hrgnUpdate, 0 );
|
||||
if (!(wndPtr->flags & WIN_ERASE_UPDATERGN)) lps->fErase = TRUE;
|
||||
else lps->fErase = !SendMessage( hwnd, WM_ERASEBKGND, lps->hdc, 0 );
|
||||
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* System metrics functions
|
||||
*
|
||||
* Copyright 1994 Alexandre Julliard
|
||||
*/
|
||||
|
||||
static char Copyright[] = "Copyright Alexandre Julliard, 1994";
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
#include "sysmetrics.h"
|
||||
|
||||
|
||||
short sysMetrics[SM_CMETRICS];
|
||||
|
||||
extern Display * display;
|
||||
|
||||
/***********************************************************************
|
||||
* SYSMETRICS_Init
|
||||
*
|
||||
* Initialisation of the system metrics array.
|
||||
*/
|
||||
void SYSMETRICS_Init()
|
||||
{
|
||||
sysMetrics[SM_CXSCREEN] = DisplayWidth( display, DefaultScreen(display) );
|
||||
sysMetrics[SM_CYSCREEN] = DisplayHeight( display, DefaultScreen(display) );
|
||||
sysMetrics[SM_CXVSCROLL] = SYSMETRICS_CXVSCROLL;
|
||||
sysMetrics[SM_CYHSCROLL] = SYSMETRICS_CYHSCROLL;
|
||||
sysMetrics[SM_CYCAPTION] = SYSMETRICS_CYCAPTION;
|
||||
sysMetrics[SM_CXBORDER] = SYSMETRICS_CXBORDER;
|
||||
sysMetrics[SM_CYBORDER] = SYSMETRICS_CYBORDER;
|
||||
sysMetrics[SM_CXDLGFRAME] = SYSMETRICS_CXDLGFRAME;
|
||||
sysMetrics[SM_CYDLGFRAME] = SYSMETRICS_CYDLGFRAME;
|
||||
sysMetrics[SM_CYVTHUMB] = SYSMETRICS_CYVTHUMB;
|
||||
sysMetrics[SM_CXHTHUMB] = SYSMETRICS_CXHTHUMB;
|
||||
sysMetrics[SM_CXICON] = SYSMETRICS_CXICON;
|
||||
sysMetrics[SM_CYICON] = SYSMETRICS_CYICON;
|
||||
sysMetrics[SM_CXCURSOR] = SYSMETRICS_CXCURSOR;
|
||||
sysMetrics[SM_CYCURSOR] = SYSMETRICS_CYCURSOR;
|
||||
sysMetrics[SM_CYMENU] = SYSMETRICS_CYMENU;
|
||||
sysMetrics[SM_CXFULLSCREEN] = sysMetrics[SM_CXSCREEN];
|
||||
sysMetrics[SM_CYFULLSCREEN] = sysMetrics[SM_CYSCREEN] - sysMetrics[SM_CYCAPTION];
|
||||
sysMetrics[SM_CYKANJIWINDOW] = 0;
|
||||
sysMetrics[SM_MOUSEPRESENT] = 1;
|
||||
sysMetrics[SM_CYVSCROLL] = SYSMETRICS_CYVSCROLL;
|
||||
sysMetrics[SM_CXHSCROLL] = SYSMETRICS_CXHSCROLL;
|
||||
sysMetrics[SM_DEBUG] = 0;
|
||||
sysMetrics[SM_SWAPBUTTON] = 0;
|
||||
sysMetrics[SM_RESERVED1] = 0;
|
||||
sysMetrics[SM_RESERVED2] = 0;
|
||||
sysMetrics[SM_RESERVED3] = 0;
|
||||
sysMetrics[SM_RESERVED4] = 0;
|
||||
sysMetrics[SM_CXMIN] = SYSMETRICS_CXMIN;
|
||||
sysMetrics[SM_CYMIN] = SYSMETRICS_CYMIN;
|
||||
sysMetrics[SM_CXSIZE] = SYSMETRICS_CXSIZE;
|
||||
sysMetrics[SM_CYSIZE] = SYSMETRICS_CYSIZE;
|
||||
sysMetrics[SM_CXFRAME] = GetProfileInt( "windows", "BorderWidth", 4 );
|
||||
sysMetrics[SM_CYFRAME] = sysMetrics[SM_CXFRAME];
|
||||
sysMetrics[SM_CXMINTRACK] = SYSMETRICS_CXMINTRACK;
|
||||
sysMetrics[SM_CYMINTRACK] = SYSMETRICS_CYMINTRACK;
|
||||
sysMetrics[SM_CXDOUBLECLK] = (GetProfileInt( "windows","DoubleClickWidth", 4) + 1) & ~1;
|
||||
sysMetrics[SM_CYDOUBLECLK] = (GetProfileInt( "windows","DoubleClickHeight", 4) + 1) & ~1;
|
||||
sysMetrics[SM_CXICONSPACING] = GetProfileInt( "desktop","IconSpacing", 75);
|
||||
sysMetrics[SM_CYICONSPACING] = GetProfileInt( "desktop","IconVerticalSpacing", 72);
|
||||
sysMetrics[SM_MENUDROPALIGNMENT] = GetProfileInt( "windows","MenuDropAlignment", 0 );
|
||||
sysMetrics[SM_PENWINDOWS] = 0;
|
||||
sysMetrics[SM_DBCSENABLED] = 0;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* GetSystemMetrics (USER.179)
|
||||
*/
|
||||
int GetSystemMetrics( WORD index )
|
||||
{
|
||||
if (index >= SM_CMETRICS) return 0;
|
||||
else return sysMetrics[index];
|
||||
}
|
||||
|
||||
|
||||
|
306
windows/win.c
306
windows/win.c
|
@ -15,11 +15,13 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
#include "win.h"
|
||||
#include "user.h"
|
||||
#include "dce.h"
|
||||
#include "sysmetrics.h"
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Screen * XT_screen;
|
||||
extern Display * display;
|
||||
extern Colormap COLOR_WinColormap;
|
||||
|
||||
extern void EVENT_RegisterWindow( Window w, HWND hwnd ); /* event.c */
|
||||
|
||||
static HWND firstWindow = 0;
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -178,17 +180,22 @@ HWND CreateWindowEx( DWORD exStyle, LPSTR className, LPSTR windowName,
|
|||
CREATESTRUCT *createStruct;
|
||||
HANDLE hcreateStruct;
|
||||
int wmcreate;
|
||||
short newwidth, newheight;
|
||||
XSetWindowAttributes win_attr;
|
||||
Window parentWindow;
|
||||
int x_rel, y_rel;
|
||||
LPPOPUPMENU lpbar;
|
||||
|
||||
#ifdef DEBUG_WIN
|
||||
printf( "CreateWindowEx: %s %s %d,%d %dx%d %08x\n",
|
||||
className, windowName, x, y, width, height, style );
|
||||
printf( "CreateWindowEx: %d '%s' '%s' %d,%d %dx%d %08x %x\n",
|
||||
exStyle, className, windowName, x, y, width, height, style, parent);
|
||||
#endif
|
||||
|
||||
if (x == CW_USEDEFAULT) x = 0;
|
||||
if (y == CW_USEDEFAULT) y = 0;
|
||||
if (width == CW_USEDEFAULT) width = 600;
|
||||
if (height == CW_USEDEFAULT) height = 400;
|
||||
if (x == CW_USEDEFAULT) x = y = 0;
|
||||
if (width == CW_USEDEFAULT)
|
||||
{
|
||||
width = 600;
|
||||
height = 400;
|
||||
}
|
||||
if (width == 0) width = 1;
|
||||
if (height == 0) height = 1;
|
||||
|
||||
|
@ -201,11 +208,18 @@ HWND CreateWindowEx( DWORD exStyle, LPSTR className, LPSTR windowName,
|
|||
if (!parent) return 0;
|
||||
}
|
||||
else if (style & WS_CHILD) return 0; /* WS_CHILD needs a parent */
|
||||
|
||||
|
||||
if (!(class = CLASS_FindClassByName( className, &classPtr ))) {
|
||||
printf("CreateWindow BAD CLASSNAME '%s' !\n", className);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Correct the window style */
|
||||
|
||||
if (!(style & (WS_POPUP | WS_CHILD))) /* Overlapped window */
|
||||
style |= WS_CAPTION | WS_CLIPSIBLINGS;
|
||||
if (exStyle & WS_EX_DLGMODALFRAME) style &= ~WS_THICKFRAME;
|
||||
|
||||
/* Create the window structure */
|
||||
|
||||
hwnd = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(WND)+classPtr->wc.cbWndExtra);
|
||||
|
@ -217,8 +231,8 @@ HWND CreateWindowEx( DWORD exStyle, LPSTR className, LPSTR windowName,
|
|||
wndPtr->hwndNext = 0;
|
||||
wndPtr->hwndChild = 0;
|
||||
wndPtr->dwMagic = WND_MAGIC;
|
||||
wndPtr->hwndParent = parent;
|
||||
wndPtr->hwndOwner = parent; /* What else? */
|
||||
wndPtr->hwndParent = (style & WS_CHILD) ? parent : 0;
|
||||
wndPtr->hwndOwner = (style & WS_CHILD) ? 0 : parent;
|
||||
wndPtr->hClass = class;
|
||||
wndPtr->hInstance = instance;
|
||||
wndPtr->rectWindow.left = x;
|
||||
|
@ -239,9 +253,12 @@ HWND CreateWindowEx( DWORD exStyle, LPSTR className, LPSTR windowName,
|
|||
wndPtr->hCursor = 0;
|
||||
wndPtr->hWndVScroll = 0;
|
||||
wndPtr->hWndHScroll = 0;
|
||||
wndPtr->hWndMenuBar = 0;
|
||||
wndPtr->hWndCaption = 0;
|
||||
|
||||
if (classPtr->wc.cbWndExtra)
|
||||
memset( wndPtr->wExtra, 0, classPtr->wc.cbWndExtra );
|
||||
if (classPtr->wc.style & CS_DBLCLKS) wndPtr->flags |= WIN_DOUBLE_CLICKS;
|
||||
classPtr->cWindows++;
|
||||
|
||||
/* Get class or window DC if needed */
|
||||
|
@ -261,156 +278,32 @@ HWND CreateWindowEx( DWORD exStyle, LPSTR className, LPSTR windowName,
|
|||
|
||||
WIN_LinkWindow( hwnd, HWND_TOP );
|
||||
|
||||
if (!strcasecmp(className, "COMBOBOX"))
|
||||
{
|
||||
height = 16;
|
||||
}
|
||||
|
||||
#ifdef USE_XLIB
|
||||
{
|
||||
XSetWindowAttributes win_attr;
|
||||
Window parentWindow;
|
||||
int x_rel, y_rel;
|
||||
|
||||
win_attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask |
|
||||
PointerMotionMask | ButtonPressMask |
|
||||
ButtonReleaseMask | StructureNotifyMask |
|
||||
FocusChangeMask | EnterWindowMask;
|
||||
win_attr.override_redirect = /*True*/ False;
|
||||
win_attr.colormap = COLOR_WinColormap;
|
||||
if (style & WS_CHILD)
|
||||
{
|
||||
parentWindow = parentPtr->window;
|
||||
x_rel = x + parentPtr->rectClient.left-parentPtr->rectWindow.left;
|
||||
y_rel = y + parentPtr->rectClient.top-parentPtr->rectWindow.top;
|
||||
}
|
||||
else
|
||||
{
|
||||
parentWindow = DefaultRootWindow( XT_display );
|
||||
x_rel = x;
|
||||
y_rel = y;
|
||||
}
|
||||
wndPtr->window = XCreateWindow( XT_display, parentWindow,
|
||||
x_rel, y_rel, width, height, 0,
|
||||
CopyFromParent, InputOutput,
|
||||
CopyFromParent,
|
||||
CWEventMask | CWOverrideRedirect |
|
||||
CWColormap, &win_attr );
|
||||
XStoreName( XT_display, wndPtr->window, windowName );
|
||||
}
|
||||
#else
|
||||
/* Create the widgets */
|
||||
/* Create the X window */
|
||||
|
||||
win_attr.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask |
|
||||
PointerMotionMask | ButtonPressMask |
|
||||
ButtonReleaseMask | StructureNotifyMask |
|
||||
FocusChangeMask | EnterWindowMask;
|
||||
win_attr.override_redirect = /*True*/ False;
|
||||
win_attr.colormap = COLOR_WinColormap;
|
||||
if (style & WS_CHILD)
|
||||
{
|
||||
wndPtr->shellWidget = 0;
|
||||
if (style & (WS_BORDER | WS_DLGFRAME | WS_THICKFRAME))
|
||||
{
|
||||
int borderCol = 0;
|
||||
if (COLOR_WinColormap == DefaultColormapOfScreen(XT_screen))
|
||||
borderCol = BlackPixelOfScreen(XT_screen);
|
||||
wndPtr->winWidget = XtVaCreateManagedWidget(className,
|
||||
compositeWidgetClass,
|
||||
parentPtr->winWidget,
|
||||
XtNx, x,
|
||||
XtNy, y,
|
||||
XtNwidth, width,
|
||||
XtNheight, height,
|
||||
XtNborderColor, borderCol,
|
||||
XtNmappedWhenManaged, FALSE,
|
||||
NULL );
|
||||
}
|
||||
else
|
||||
{
|
||||
wndPtr->winWidget = XtVaCreateManagedWidget(className,
|
||||
compositeWidgetClass,
|
||||
parentPtr->winWidget,
|
||||
XtNx, x,
|
||||
XtNy, y,
|
||||
XtNwidth, width,
|
||||
XtNheight, height,
|
||||
XtNborderWidth, 0,
|
||||
XtNmappedWhenManaged, FALSE,
|
||||
NULL );
|
||||
}
|
||||
parentWindow = parentPtr->window;
|
||||
x_rel = x + parentPtr->rectClient.left - parentPtr->rectWindow.left;
|
||||
y_rel = y + parentPtr->rectClient.top - parentPtr->rectWindow.top;
|
||||
}
|
||||
else
|
||||
{
|
||||
wndPtr->shellWidget = XtVaAppCreateShell(windowName,
|
||||
className,
|
||||
topLevelShellWidgetClass,
|
||||
XT_display,
|
||||
XtNx, x,
|
||||
XtNy, y,
|
||||
XtNcolormap, COLOR_WinColormap,
|
||||
XtNmappedWhenManaged, FALSE,
|
||||
NULL );
|
||||
wndPtr->compositeWidget = XtVaCreateManagedWidget(className,
|
||||
formWidgetClass,
|
||||
wndPtr->shellWidget,
|
||||
NULL );
|
||||
/* wndPtr->winWidget = wndPtr->compositeWidget; */
|
||||
wndPtr->winWidget = wndPtr->shellWidget;
|
||||
if (wndPtr->wIDmenu == 0)
|
||||
{
|
||||
wndPtr->menuBarPtr =
|
||||
MENU_CreateMenuBar(wndPtr->compositeWidget,
|
||||
instance, hwnd,
|
||||
classPtr->wc.lpszMenuName,
|
||||
width);
|
||||
if (wndPtr->menuBarPtr)
|
||||
wndPtr->wIDmenu =
|
||||
GlobalHandleFromPointer(wndPtr->menuBarPtr->firstItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
wndPtr->menuBarPtr = MENU_UseMenu(wndPtr->compositeWidget,
|
||||
instance, hwnd,
|
||||
wndPtr->wIDmenu, width);
|
||||
}
|
||||
|
||||
if (wndPtr->menuBarPtr != NULL)
|
||||
{
|
||||
wndPtr->winWidget =
|
||||
XtVaCreateManagedWidget(className,
|
||||
compositeWidgetClass,
|
||||
wndPtr->compositeWidget,
|
||||
XtNwidth, width,
|
||||
XtNheight, height,
|
||||
XtNfromVert,
|
||||
wndPtr->menuBarPtr->menuBarWidget,
|
||||
XtNvertDistance, 4,
|
||||
NULL );
|
||||
}
|
||||
else
|
||||
{
|
||||
wndPtr->winWidget =
|
||||
XtVaCreateManagedWidget(className,
|
||||
compositeWidgetClass,
|
||||
wndPtr->compositeWidget,
|
||||
XtNwidth, width,
|
||||
XtNheight, height,
|
||||
NULL );
|
||||
}
|
||||
parentWindow = DefaultRootWindow( display );
|
||||
x_rel = x;
|
||||
y_rel = y;
|
||||
}
|
||||
if (wndPtr->shellWidget) XtRealizeWidget( wndPtr->shellWidget );
|
||||
if (wndPtr->compositeWidget) XtRealizeWidget( wndPtr->compositeWidget );
|
||||
XtRealizeWidget( wndPtr->winWidget );
|
||||
wndPtr->window = XtWindow( wndPtr->winWidget );
|
||||
#endif /* USE_XLIB */
|
||||
|
||||
if ((style & WS_VSCROLL) == WS_VSCROLL) {
|
||||
newheight = height - (((style & WS_HSCROLL) == WS_HSCROLL) ? 16 : 0);
|
||||
wndPtr->hWndVScroll = CreateWindow("SCROLLBAR", "",
|
||||
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | SBS_VERT,
|
||||
width - 16, 0, 16, newheight, hwnd, 2, instance, 0L);
|
||||
}
|
||||
if ((style & WS_HSCROLL) == WS_HSCROLL) {
|
||||
newwidth = width - (((style & WS_VSCROLL) == WS_VSCROLL) ? 16 : 0);
|
||||
wndPtr->hWndHScroll = CreateWindow("SCROLLBAR", "",
|
||||
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | SBS_HORZ,
|
||||
0, height - 16, newwidth, 16, hwnd, 3, instance, 0L);
|
||||
}
|
||||
wndPtr->window = XCreateWindow(display, parentWindow,
|
||||
x_rel, y_rel, width, height, 0,
|
||||
CopyFromParent, InputOutput, CopyFromParent,
|
||||
CWEventMask | CWOverrideRedirect |
|
||||
CWColormap, &win_attr );
|
||||
XStoreName( display, wndPtr->window, windowName );
|
||||
|
||||
/* Send the WM_CREATE message */
|
||||
|
||||
|
@ -452,30 +345,56 @@ HWND CreateWindowEx( DWORD exStyle, LPSTR className, LPSTR windowName,
|
|||
|
||||
GlobalUnlock( hcreateStruct );
|
||||
GlobalFree( hcreateStruct );
|
||||
|
||||
|
||||
if (wmcreate == -1)
|
||||
{
|
||||
/* Abort window creation */
|
||||
|
||||
if (parent) parentPtr->hwndChild = wndPtr->hwndNext;
|
||||
else firstWindow = wndPtr->hwndNext;
|
||||
#ifdef USE_XLIB
|
||||
XDestroyWindow( XT_display, wndPtr->window );
|
||||
#else
|
||||
if (wndPtr->shellWidget) XtDestroyWidget( wndPtr->shellWidget );
|
||||
else XtDestroyWidget( wndPtr->winWidget );
|
||||
#endif
|
||||
WIN_UnlinkWindow( hwnd );
|
||||
XDestroyWindow( display, wndPtr->window );
|
||||
if (wndPtr->flags & WIN_OWN_DC) DCE_FreeDCE( wndPtr->hdce );
|
||||
classPtr->cWindows--;
|
||||
USER_HEAP_FREE( hwnd );
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef USE_XLIB
|
||||
EVENT_AddHandlers( wndPtr->window, hwnd );
|
||||
#else
|
||||
EVENT_AddHandlers( wndPtr->winWidget, hwnd );
|
||||
#endif
|
||||
/* Create scrollbars */
|
||||
|
||||
if (windowName != NULL) SetWindowText(hwnd, windowName);
|
||||
if ((style & WS_CAPTION) == WS_CAPTION) {
|
||||
wndPtr->hWndCaption = CreateWindow("CAPTION", "",
|
||||
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
|
||||
0, -20, width, 20, hwnd, 1, instance, 0L);
|
||||
}
|
||||
if (((style & WS_CHILD) != WS_CHILD) && (wndPtr->wIDmenu != 0)) {
|
||||
lpbar = (LPPOPUPMENU) GlobalLock(wndPtr->wIDmenu);
|
||||
if (lpbar != NULL) {
|
||||
lpbar->ownerWnd = hwnd;
|
||||
wndPtr->hWndMenuBar = CreateWindow("POPUPMENU", "",
|
||||
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE,
|
||||
0, 0, width, 20, hwnd, 2, instance, (LPSTR)lpbar);
|
||||
}
|
||||
}
|
||||
if ((style & WS_VSCROLL) == WS_VSCROLL)
|
||||
{
|
||||
wndPtr->hWndVScroll = CreateWindow("SCROLLBAR", "",
|
||||
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | SBS_VERT,
|
||||
wndPtr->rectClient.right-wndPtr->rectClient.left, 0,
|
||||
SYSMETRICS_CXVSCROLL,
|
||||
wndPtr->rectClient.bottom-wndPtr->rectClient.top,
|
||||
hwnd, 3, instance, 0L);
|
||||
}
|
||||
if ((style & WS_HSCROLL) == WS_HSCROLL)
|
||||
{
|
||||
wndPtr->hWndHScroll = CreateWindow("SCROLLBAR", "",
|
||||
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | SBS_HORZ,
|
||||
0, wndPtr->rectClient.bottom-wndPtr->rectClient.top,
|
||||
wndPtr->rectClient.right-wndPtr->rectClient.left,
|
||||
SYSMETRICS_CYHSCROLL,
|
||||
hwnd, 4, instance, 0L);
|
||||
}
|
||||
|
||||
EVENT_RegisterWindow( wndPtr->window, hwnd );
|
||||
|
||||
WIN_SendParentNotify( hwnd, wndPtr, WM_CREATE );
|
||||
|
||||
|
@ -515,12 +434,7 @@ BOOL DestroyWindow( HWND hwnd )
|
|||
|
||||
/* Destroy the window */
|
||||
|
||||
#ifdef USE_XLIB
|
||||
XDestroyWindow( XT_display, wndPtr->window );
|
||||
#else
|
||||
if (wndPtr->shellWidget) XtDestroyWidget( wndPtr->shellWidget );
|
||||
else XtDestroyWidget( wndPtr->winWidget );
|
||||
#endif
|
||||
XDestroyWindow( display, wndPtr->window );
|
||||
if (wndPtr->flags & WIN_OWN_DC) DCE_FreeDCE( wndPtr->hdce );
|
||||
classPtr->cWindows--;
|
||||
USER_HEAP_FREE( hwnd );
|
||||
|
@ -588,49 +502,7 @@ HMENU GetMenu( HWND hwnd )
|
|||
*/
|
||||
BOOL SetMenu(HWND hwnd, HMENU hmenu)
|
||||
{
|
||||
#ifdef USE_XLIB
|
||||
return FALSE;
|
||||
#else
|
||||
WND *wndPtr;
|
||||
wndPtr = WIN_FindWndPtr(hwnd);
|
||||
if (wndPtr == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (wndPtr->dwStyle & WS_CHILD) return FALSE;
|
||||
|
||||
if (wndPtr->menuBarPtr != NULL)
|
||||
{
|
||||
XtVaSetValues(wndPtr->winWidget, XtNfromVert, NULL, NULL);
|
||||
MENU_CollapseMenu(wndPtr->menuBarPtr);
|
||||
}
|
||||
|
||||
wndPtr->menuBarPtr = MENU_UseMenu(wndPtr->compositeWidget,
|
||||
wndPtr->hInstance, hwnd, hmenu,
|
||||
wndPtr->rectClient.right -
|
||||
wndPtr->rectClient.left);
|
||||
|
||||
if (wndPtr->menuBarPtr != NULL)
|
||||
{
|
||||
XtVaSetValues(wndPtr->winWidget,
|
||||
XtNfromVert, wndPtr->menuBarPtr->menuBarWidget,
|
||||
XtNvertDistance, 4,
|
||||
NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wndPtr->wIDmenu != 0)
|
||||
{
|
||||
wndPtr->menuBarPtr = MENU_UseMenu(wndPtr->compositeWidget,
|
||||
wndPtr->hInstance, hwnd,
|
||||
wndPtr->wIDmenu,
|
||||
wndPtr->rectClient.right -
|
||||
wndPtr->rectClient.left);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
#endif /* USE_XLIB */
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,8 +8,7 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
|||
|
||||
#include "win.h"
|
||||
|
||||
extern Display * XT_display;
|
||||
extern Screen * XT_screen;
|
||||
extern Display * display;
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -213,10 +212,8 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, short x, short y,
|
|||
RECT newWindowRect, newClientRect;
|
||||
WND *wndPtr;
|
||||
int calcsize_result = 0;
|
||||
#ifdef USE_XLIB
|
||||
XWindowChanges winChanges;
|
||||
int changeMask = 0;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_WIN
|
||||
printf( "SetWindowPos: %d %d %d,%d %dx%d 0x%x\n",
|
||||
|
@ -311,7 +308,7 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, short x, short y,
|
|||
}
|
||||
|
||||
/* Perform the moving and resizing */
|
||||
#ifdef USE_XLIB
|
||||
|
||||
if (!(winPos->flags & SWP_NOMOVE))
|
||||
{
|
||||
WND * parentPtr;
|
||||
|
@ -343,31 +340,28 @@ BOOL SetWindowPos( HWND hwnd, HWND hwndInsertAfter, short x, short y,
|
|||
}
|
||||
changeMask |= CWStackMode;
|
||||
}
|
||||
if (changeMask) XConfigureWindow( XT_display, wndPtr->window,
|
||||
if (changeMask) XConfigureWindow( display, wndPtr->window,
|
||||
changeMask, &winChanges );
|
||||
#endif
|
||||
|
||||
if (winPos->flags & SWP_SHOWWINDOW)
|
||||
{
|
||||
wndPtr->dwStyle |= WS_VISIBLE;
|
||||
#ifdef USE_XLIB
|
||||
XMapWindow( XT_display, wndPtr->window );
|
||||
#else
|
||||
if (wndPtr->shellWidget) XtMapWidget( wndPtr->shellWidget );
|
||||
else XtMapWidget( wndPtr->winWidget );
|
||||
#endif
|
||||
XMapWindow( display, wndPtr->window );
|
||||
}
|
||||
else if (winPos->flags & SWP_HIDEWINDOW)
|
||||
{
|
||||
wndPtr->dwStyle &= ~WS_VISIBLE;
|
||||
#ifdef USE_XLIB
|
||||
XUnmapWindow( XT_display, wndPtr->window );
|
||||
#else
|
||||
if (wndPtr->shellWidget) XtUnmapWidget( wndPtr->shellWidget );
|
||||
else XtUnmapWidget( wndPtr->winWidget );
|
||||
#endif
|
||||
XUnmapWindow( display, wndPtr->window );
|
||||
}
|
||||
|
||||
/* Send WM_NCPAINT message if needed */
|
||||
if ((winPos->flags & (SWP_FRAMECHANGED | SWP_SHOWWINDOW)) ||
|
||||
(!(winPos->flags & SWP_NOSIZE)) ||
|
||||
(!(winPos->flags & SWP_NOMOVE)) ||
|
||||
(!(winPos->flags & SWP_NOACTIVATE)) ||
|
||||
(!(winPos->flags & SWP_NOZORDER)))
|
||||
SendMessage( hwnd, WM_NCPAINT, 1, 0L );
|
||||
|
||||
/* Finally send the WM_WINDOWPOSCHANGED message */
|
||||
wndPtr->rectWindow = newWindowRect;
|
||||
wndPtr->rectClient = newClientRect;
|
||||
|
|
37
wine.ini
37
wine.ini
|
@ -1,19 +1,32 @@
|
|||
[drives]
|
||||
a=/mnt/fd0
|
||||
c=/dos
|
||||
d=/usr/windows
|
||||
e=/home/bob/Wine/work
|
||||
f=/home/bob/test
|
||||
A=/mnt/fd0
|
||||
C=/dos
|
||||
D=/usr/windows
|
||||
E=/home/bob/Wine/work
|
||||
F=/home/bob/test
|
||||
|
||||
[wine]
|
||||
windows=c:\windows
|
||||
system=c:\windows\system
|
||||
temp=c:\temp
|
||||
path=c:\windows;c:\windows\system;e:\;e:\test;f:\
|
||||
Windows=c:\windows
|
||||
System=c:\windows\system
|
||||
Temp=c:\temp
|
||||
Path=c:\windows;c:\windows\system;e:\;e:\test;f:\
|
||||
SystemResources=sysres.dll
|
||||
; SystemResources=
|
||||
|
||||
[serialports]
|
||||
com1=/dev/cua0
|
||||
com2=/dev/cua1
|
||||
Com1=/dev/cua0
|
||||
Com2=/dev/cua1
|
||||
|
||||
[parallelports]
|
||||
lpt1=/dev/lp0
|
||||
Lpt1=/dev/lp0
|
||||
|
||||
[spy]
|
||||
;;;;; Uncomment the following line to activate spying to the console ;;;;;
|
||||
;File=CON
|
||||
|
||||
;;;;; Uncomment the following line to activate spying to the spy.log ;;;;;
|
||||
;File=spy.log
|
||||
|
||||
;;;;; The following options are not supported yet ;;;;;
|
||||
;Include=
|
||||
;Exclude=
|
||||
|
|
Loading…
Reference in New Issue