1996-08-24 20:26:35 +02:00
|
|
|
/*
|
1999-04-01 10:16:08 +02:00
|
|
|
* X11 driver definitions
|
2002-03-10 00:29:33 +01:00
|
|
|
*
|
|
|
|
* Copyright 1996 Alexandre Julliard
|
|
|
|
* Copyright 1999 Patrik Stridvall
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
2006-05-18 14:49:52 +02:00
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
1996-08-24 20:26:35 +02:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __WINE_X11DRV_H
|
|
|
|
#define __WINE_X11DRV_H
|
|
|
|
|
2002-06-01 01:06:46 +02:00
|
|
|
#ifndef __WINE_CONFIG_H
|
|
|
|
# error You must include config.h to use this header
|
|
|
|
#endif
|
1998-12-26 13:00:43 +01:00
|
|
|
|
2012-04-16 17:49:05 +02:00
|
|
|
#include <limits.h>
|
2003-09-06 01:08:26 +02:00
|
|
|
#include <stdarg.h>
|
1998-12-26 13:00:43 +01:00
|
|
|
#include <X11/Xlib.h>
|
|
|
|
#include <X11/Xresource.h>
|
|
|
|
#include <X11/Xutil.h>
|
|
|
|
#include <X11/Xatom.h>
|
2002-09-13 00:28:01 +02:00
|
|
|
|
2005-04-14 14:48:11 +02:00
|
|
|
#define BOOL X_BOOL
|
|
|
|
#define BYTE X_BYTE
|
|
|
|
#define INT8 X_INT8
|
|
|
|
#define INT16 X_INT16
|
|
|
|
#define INT32 X_INT32
|
|
|
|
#define INT64 X_INT64
|
|
|
|
#include <X11/Xmd.h>
|
|
|
|
#include <X11/Xproto.h>
|
|
|
|
#undef BOOL
|
|
|
|
#undef BYTE
|
|
|
|
#undef INT8
|
|
|
|
#undef INT16
|
|
|
|
#undef INT32
|
|
|
|
#undef INT64
|
|
|
|
#undef LONG64
|
|
|
|
|
2002-09-13 00:28:01 +02:00
|
|
|
#undef Status /* avoid conflict with wintrnl.h */
|
|
|
|
typedef int Status;
|
1998-12-07 10:13:40 +01:00
|
|
|
|
1999-03-14 17:35:05 +01:00
|
|
|
#include "windef.h"
|
2000-06-08 06:57:22 +02:00
|
|
|
#include "winbase.h"
|
2005-01-17 20:17:47 +01:00
|
|
|
#include "wingdi.h"
|
|
|
|
#include "winuser.h"
|
2011-07-07 12:43:51 +02:00
|
|
|
#include "wine/gdi_driver.h"
|
2005-04-20 18:24:13 +02:00
|
|
|
#include "wine/list.h"
|
1999-02-04 15:05:38 +01:00
|
|
|
|
2007-07-19 04:40:24 +02:00
|
|
|
#define MAX_DASHLEN 16
|
1999-09-03 18:49:17 +02:00
|
|
|
|
2015-03-02 05:32:08 +01:00
|
|
|
#define WINE_XDND_VERSION 5
|
2010-02-20 09:57:07 +01:00
|
|
|
|
1996-08-24 20:26:35 +02:00
|
|
|
/* X physical pen */
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
int style;
|
Release 971221
Fri Dec 19 10:50:46 1997 Douglas Ridgway <ridgway@winehq.com>
* [Make.rules.in] [Makefile.in] [documentation/Makefile.in]
[documentation/README.documentation]
First cut at Wine API documentation. No longer install reference
manual by default.
Wed Dec 17 21:32:23 1997 Andreas Mohr <100.30936@germany.net>
* [files/file.c]
Fixed GetTempFileName16() to use current path of requested drive
as needed.
* [if1632/Makefile.in] [if1632/builtin.c] [if1632/dciman32.spec]
[if1632/msvfw32.spec] [if1632/tapi32.spec] [if1632/wow32.spec]
Added misc DLLs needed by various apps.
Wed Dec 17 12:01:50 1997 Morten Eriksen <mortene@sim.no>
* [if1632/gdi32.spec] [include/windows.h] [objects/palette.c]
Inserted empty stub for CreateHalftonePalette.
Tue Dec 16 22:08:06 1997 Huw D M Davies <h.davies1@physics.oxford.ac.uk>
* [windows/mdi.c]
Use VK_TAB instead of VK_SEPARATOR in TranslateMDISysAccel().
* [graphics/metafiledrv/init.c]
DeleteDC() on a MetaDC doesn't do anything - it shouldn't. Therefore
fix cleanup of MetaDCs in CloseMetaFile(); they now actually get
removed from the GDI heap!
* [graphics/x11drv/xfont.c]
Preserve FO_MATCH_XYINDEP flag in XFONT_MatchFIList(). Should reduce
the number of bold-italic matches.
Tue Dec 16 20:11:43 1997 Bertho Stultiens <bertho@panter.soci.aau.dk>
* [graphics/painting.c]
Included an implementation of DrawState
* [if1632/thunk.c]
Changed many fprintfs into dprintf_thunk
* [include/cache.h] [graphics/cache.c]
New files to hold cached handles to regulary used GDI object.
* [include/windows.h]
Added DRAWSTATExx typedefs
Added DSS_DEFAULT define for DrawState
* [objects/text.c]
New implementation of GrayString()
* [controls/uitools.c]
Implemented DrawFrameControl() functions
Changed DrawEdge() behaviour to win95 implementation
Mon Dec 15 23:43:01 1997 Martin Boehme <boehme@informatik.mu-luebeck.de>
* [graphics/path.c] [include/path.h] [graphics/painting.c]
[if1632/gdi32.spec] [include/gdi.h] [include/windows.h]
[objects/dc.c]
Added preliminary support for GDI paths.
* [objects/dc.c]
Added DC_Init_DC_INFO function for initializing WIN_DC_INFO
structure.
* [include/windows.h] [include/gdi.h] [objects/gdiobj.c]
Added DEFAULT_GUI_FONT.
* [include/winerror.h]
Added a few error codes.
* [memory/heap.c]
Changed HeapAlloc to make the correct calls to SetLastError
(now conforms to NT's behaviour).
* [windows/win.c]
Changed WIN_CreateWindowEx to allow child windows with zero
width / height.
Sun Dec 14 12:01:07 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [if1632/*] [relay32/*]
Moved all 32-bit relay stuff to relay32/
* [fi1632/thunk.c] [win32/kernel32.c]
Moved all KERNEL32 ordinal functions to kernel32.c
* [memory/selector.c]
Initialize selectors in AllocSelectorArray.
* [tools/build.c]
Generate C instead of assembly for Win32 relays.
Fixed stack corruption in CallTo16 functions, found by Bertho
Stultiens.
Sun Dec 14 10:55:00 1997 Andreas Mohr <100.30936@germany.net>
* [if1632/Makefile.in] [if1632/builtin.c] [if1632/ole2thk.spec]
Added built-in OLE2THK.DLL.
* [if1632/toolhelp.spec] [include/toolhelp.h] [memory/selector.c]
[misc/toolhelp.c]
Added stubs for StackTraceFirst(), StackTraceCSIPFirst(),
StackTraceNext(), UTSelectorOffsetToLinear()
and UTLinearToSelectorOffset().
Sat Dec 13 17:26:41 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [misc/winsock.c]
32-bit API fixes for reported problems (thanks to Marcus
and David).
* [graphics/x11drv/xfont.c]
Little tweak in point size calculation.
* [windows/defwnd.c] [windows/dce.c] [windows/winhelp.c]
[windows/winproc.c] [windows/win.c]
Bug fixes.
Sat Dec 13 16:35:14 1997 Kai Morich <kai.morich@rhein-neckar.netsurf.de>
* [files/dos_fs.c]
OpenFile with empty filename and OF_PARSE returns current dir.
* [misc/commdlg.c]
Ignore initial dir if bogus.
* [files/file.c]
Locking an identic region in a file must not be an error.
* [misc/lstr.c]
Use wide char ctype functions.
Fri Dec 12 23:46:22 1997 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [file/drive.c]
First attempt for GetDiskFreeSpaceEx.
Fri Dec 12 23:18:41 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_resource.c]
Fixed wrongly appearing menus problem (only use default lookups in
last resource subtree).
* [multimedia/*.c]
Added win32 support for time* and joy* lowlevel drivers,
(not excessively tested), some misc fixes and cleanups.
* [misc/shellord.c][misc/shell.c][ole/folders.c][ole/ifs.c]
[include/interfaces.h][include/shlobj.h]
Added some more undocumented SHELL32 functions, some shell folder
interface stubs added, SHGetMalloc, SHGetDesktopFolder,
SHGetSpecialFolderLocation, SHGetPathFromIDList stubs added,
IMalloc, IUnknown implemented.
* [windows/msgbox.c]
Implemented MessageBoxIndirect*, some internal changes.
* [if1632/thunk.c]
KERNEL_431 implemented.
* [objects/gdiobj.c]
GetCurrentObject implemented.
Wed Dec 3 01:09:17 1997 Gordon Chaffee <chaffee@apu.cs.berkeley.edu>
* [objects/dib.c]
Fix a couple small DIB problems.
* [controls/edit.c]
Fix a typo.
* [files/dos_fs.c]
Try normal readdir in case fs is specified as vfat but isn't.
* [files/profile.c]
Implementation of WritePrivateProfileSection32A from Uwe Bonnes.
* [misc/printdrv.c]
OpenPrinter32A stub, helps Word97 start.
* [objects/text.c]
Fixup implementation of GetTextCharsetInfo.
* [scheduler/process.c]
Fix environment variable expansion.
* [win32/code_page.c]
Make MultiByteToWideChar and WideCharToMultiByte conform in return
values and error conditions to those in Windows NT 4.0.
* [windows/message.c]
Fix broadcasting problems in Win32. The Win32 docs say to use
HWND_TOPMOST to broadcast to all Win32 Windows.
* [memory/virtual.c] [loader/pe_image.c]
Do not map in VirtualAlloc if address is specified and space is
not available. This is required by Win32.
* [include/pen.h] [include/x11drv.h] [objects/dc.c]
[objects/pen.c] [graphics/x11drv/pen.c]
Support for ExtCreatePen.
Tue Dec 2 20:22:06 1997 Morten Welinder <terra@diku.dk>
* [*/*.c] [*/*.h]
Add lots of prototypes.
* [if1632/kernel32.spec][include/windows.h][include/winnt.h]
[misc/cpu.c]
Define IsProcessorFeaturePresent.
* [misc/crtdll.c]
(CRTDLL__getcwd): Allocate enough memory for the terminating zero.
* [misc/ver.c]
Improve check for null component in _find_data[AW]. Plug leaks
in VerQueryValue*.
* [win32/console.c][if1632/kernel32.spec]
Add stubs for GetConsoleCursorInfo32, SetConsoleCursorInfo32.
* [windows/message.c][if1632/user32.spec][include/windows.h]
Define SendMessageTimeout*.
* [graphics/x11drv/xfont.c]
Change algorithm of __genericCheckSum to be alignment safe.
* [misc/main.c] [misc/winsock.c] [misc/winsock_dns.c]
Include winsock.h early to avoid Solaris problem.
* [include/windows.h]
Undef FSHIFT before we define it.
* [rc/winerc.c]
Include <fcntl.h> instead of <sys/fcntl.h>.
* [files/file.c]
Use strerror in FILE_SetDosError if available.
* [include/config.h.in] [configure.in]
Check for strerror.
* [objects/gdiobj.c]
Make static font structures aligned.
Mon Dec 1 10:10:21 1997 Karl Garrison <karlos@eznet.net>
* [win32/console.c] [if1632/kernel32.spec] [include/windows.h]
Added stub for GetNumberOfConsoleMouseButtons.
Added stub for PeekConsoleInput(A,W).
Fixed parameter list for WriteConsole(A,W).
GetNumberOfConsoleInputEvents now returns 0 events instead of 1
(since low-level console functions are not yet supported).
GetConsoleMode no longer returns ENABLE_WINDOW_INPUT and
ENABLE_MOUSE_INPUT since these are not currently implemented.
1997-12-21 20:17:50 +01:00
|
|
|
int endcap;
|
|
|
|
int linejoin;
|
1996-08-24 20:26:35 +02:00
|
|
|
int pixel;
|
|
|
|
int width;
|
2007-07-19 04:40:24 +02:00
|
|
|
char dashes[MAX_DASHLEN];
|
1996-08-24 20:26:35 +02:00
|
|
|
int dash_len;
|
Release 980628
Sun Jun 28 18:37:02 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [if1632/signal.c] [miscemu/instr.c] [memory/virtual.c]
Moved page-fault handling to INSTR_EmulateInstruction.
* [scheduler/thread.c]
Added locking and check for own thread in Suspend/ResumeThread.
Sat Jun 27 21:25:21 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [objects/dib.c] [objects/bitmap.c] [objects/oembitmap.c]
[graphics/x11drv/bitblt.c] [include/bitmap.h]
Improved DIB section handling using page fault handlers.
(Note: This patch includes code contributed by Matthew J. Francis.)
* [memory/virtual.c] [if1632/signal.c] [include/global.h]
Page Fault handler support added.
* [if1632/signal.c] [loader/signal.c] [tools/build.c] [misc/system.c]
[misc/winsock_dns.c] [include/sig_context.h] [include/thread.h]
16-bit %fs handling improved: Always preserve 16-bit %fs value,
always restore 32-bit %fs value for signal handlers.
* [if1632/thunk.c] [loader/module.c] [misc/callback.c] [windows/user.c]
[loader/ne/resource.c] [include/callback.h] [include/module.h]
[if1632/kernel.spec] [if1632/wprocs.spec]
Resource Handler function pointer stored as 16-bit SEGPTR.
* [loader/task.c] [windows/win.c] [windows/winpos.c] [if1632/user.spec]
[if1632/kernel.spec] [loader/ne/module.c]
Some minor incompatibilities fixed (Win32s relies on those):
GetExePtr, IsWindow16 should set ES on return; WINPOS_SendNCCalcSize
should cope with having the WINDOWPOS structure trashed;
the OFSTRUCT in the NE module image should be placed *last*.
* [include/windows.h]
Missing prototype for FlushViewOfFile.
* [loader/task.c]
Bugfix: Command line should *not* start with a blank.
* [loader/ne/segment.c]
Bugfix: Fixups to offset 0 were never applied.
* [misc/lstr.c]
Use debugstr_a in OutputDebugString16.
* [msdos/dpmi.c]
Stub for int 31 BL=2f AX=7a20 (NetWare: Get VLM Call Address) added.
* [msdos/int21.c]
Stub for int 21 AX=440d CL=6f (get drive map information) added.
Fri Jun 26 18:08:30 1998 Rein Klazes <rklazes@casema.net>
* [windows/winpos.c]
Fix small buglet that mixed up maximized and minimized windows.
* [include/x11drv.h] [objects/dc.c] [graphics/x11drv/pen.c]
[graphics/x11drv/graphics.c]
Fix some bugs with lines joining styles. Draws rectangles
with thick pens now correctly.
Fri Jun 26 16:22:23 1998 James Juran <jrj120@psu.edu>
* [misc/shell.c]
Fixed bug I introduced last release in InternalExtractIcon.
* [win32/file.c]
Added documentation for CreateFile32A.
* [documentation/wine.man]
Updated manpage.
* [ChangeLog]
Added my entry from last release.
Fri Jun 26 13:33:30 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*] [if1632/wineps.spec] [include/psdrv.h]
[include/print.h] [objects/gdiobj.c]
First stages of an internal Postscript driver. See
graphics/psdrv/README . Should print text (badly) from win3.1 notepad,
write and winword6.
* [documentation/printing]
Some notes on printing.
* [controls/edit.c]
Strip off WS_BORDER in WM_NCREATE, edit draws its own rectangle.
EC_USEFONTINFO seems to be used as a left/right value for EM_SETMARGINS
and not as an action as the docs say. This actually makes more sense.
Scroll the caret back to zero after a WM_SETTEXT.
Fri Jun 26 10:56:25 1998 Marcus Meissner <marcus@jet.franken.de>
* [if1632/snoop.c]
Added win16 inter-dll snooping.
* [win32/ordinals.c]
KERNEL_485 is GetProcessDword.
* [include/xmalloc.h][include/bitmap.h][misc/xmalloc.c]
Added xcalloc so we 0 initialize XImages.
Fixes/Hides the 'junk around MOPYFish'.
* [misc/ntdll.c]
Some stubs added.
Thu Jun 25 15:22:43 1998 Adrian Harvey <adrian@select.com.au>
* [scheduler/thread.c]
Implemented SuspendThread and ResumeThread.
Thu Jun 25 00:55:03 1998 Peter Hunnisett <hunnise@nortel.ca>
* [include/debug.h,dplay.h,dsound.h][multimedia/dsound.c,dplay.c]
[relay32/dplayx.spec,dplay.spec][multimedia/Makefile.in]
[documentation/status/directplay]
Added preliminary support for DirectPlay & DirectPlayLobby. Moved the
preliminary stubs put in the dsound files into two new files
dplay.h and dplay.c.
Added new debug channel (dplay) for this.
Created new document to keep track of implementation.
* [include/winioctl.h][win32/device.c]
Added some framework in DeviceIoControl to, in the future, support
the "builtin" windows dwIoControlCodes. Added new header file
winioctl.h .
* [multimedia/mmsystem.c]
Added slightly improved debugging information for PlaySound.
Wed Jun 24 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [files/profile.c][graphics/x11drv/xfont.c][loader/module.c]
Changed lstrcmpi32A to strcasecmp, lstrncmpi32A to strncasecmp,
lstrcpy32A to strcpy, lstrlen32A to strlen, lstrcmp32A to strcmp
because it's not necessary to support locale on such places.
It causes a huge overhead and even fails sometimes
* [include/oleauto.h][include/winerror.h]
Added some ole-related constants.
* [misc/shell.c]
SHELL32_DllGetClassObject, SHGetSpecialFolderLocation,
SHGetPathFromIDList improved the stubs
* [ole/folders.c]
IShellFolder* functions rewrote the stubs so don't crash and give
something sensible back, started implementation of.
* [ole/typelib.c][relay32/oleaut32.spec]
LoadTypeLib32, RegisterTypeLib stub.
* [ole/ole2nls.c]
Fixed a buffer overrun in CompareString32A.
Test for a bad pointer in LCMapString32A (happens
in winhlp32 while building a index for searching).
* [relay32/oleaut32.spec] [ole/typelib.c]
Added stub for LoadTypeLib (ole32) to make excel95 happy.
Tue Jun 23 22:47:09 1998 Alex Priem <alexp@sci.kun.nl>
* [files/profile.c] [relay32/kernel32.spec]
Added WritePrivateProfileStructA, GetPrivateProfileStructA,
GetPrivateProfileSectionNames16.
Tue Jun 23 01:34:43 1998 Pascal Cuoq <pcuoq@ens-lyon.fr>
* [ole/ole2nls.c]
GetStringTypeEx32A: Implemented CT_CTYPE2 and CT_CTYPE3 cases.
LCMapString32A: Map final '\0' for '\0'-terminated strings.
* [misc/shellord.c] [files/profile.c] [graphics/driver.c]
[loader/module.c] [msdos/int21.c] [windows/driver.c] [files/drive.c]
Changed lstrcmpi32A -> strcasecmp. Should be OK in these places.
Sat Jun 20 23:40:00 1998 Bertho Stultiens <bertho@akhphd.au.dk>
* [tools/wrc/]
Wrc version 1.0.2 (20-Jun-1998). Please revert to
the file tools/wrc/CHANGES for details.
Sat Jun 20 14:58:00 1998 Marcel Baur <mbaur@g26.ethz.ch>
* [ole/ole2nls.c] [ole/nls/*]
Added the first 57 nls files, most are not yet complete.
Wed Jun 17 11:16:54 1998 David Luyer <luyer@ucs.uwa.edu.au>
* [relay32/relay386.c] [if1632/relay.c]
Move debug_relay_(include|exclude)_list handling into
seperate function RELAY_ShowDebugmsgsRelay(). Include
checking of this for 16 bit calls (originally only
32-bit calls).
* [relay32/snoop.c] [misc/main.c]
Add debug_snoop_(include|exclude)_list as per the relay stuff.
Fix typo and add information on -debugmsg +/-relay=... in
help on -debugmsg. Refer to availability of snoop too.
Tue Jun 10 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [controls/header.c][include/header.h][include/commctrl.h]
Added owner draw support.
* [windows/nonclient.c][windows/sysmetics.c]
Fixed menu bar height for Win95 look.
Split NC_AdjustRect95() into NC_AdjustRectOuter95() and
NC_AdjustRectInner95 to fix a menu bar bug.
Improved Win95 look.
* [controls/progress.c]
Improved drawing code. Borders will be drawn by non-client code.
* [controls/updown.c]
Changed memory allocation and fixed some bugs.
* [controls/toolbar.c]
Fixed TB_BUTTONSTRUCTSIZE bug in MFC programs.
Several improvements.
* [misc/shell.c]
Added stub for BrowseForFoldersA().
* [misc/shellord.c]
Added stub for SHELL32_147().
* [controls/comctl32undoc.c]
Minor changes.
* [documentation/common_controls]
New File: Documentation about development status, undocumented
features and functions of the common controls.
1998-06-28 20:40:26 +02:00
|
|
|
int type; /* GEOMETRIC || COSMETIC */
|
2007-07-19 04:40:24 +02:00
|
|
|
int ext; /* extended pen - 1, otherwise - 0 */
|
1996-08-24 20:26:35 +02:00
|
|
|
} X_PHYSPEN;
|
|
|
|
|
|
|
|
/* X physical brush */
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
int style;
|
|
|
|
int fillStyle;
|
|
|
|
int pixel;
|
|
|
|
Pixmap pixmap;
|
|
|
|
} X_PHYSBRUSH;
|
|
|
|
|
2009-09-01 20:50:48 +02:00
|
|
|
typedef struct {
|
|
|
|
int shift;
|
|
|
|
int scale;
|
|
|
|
int max;
|
|
|
|
} ChannelShift;
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
2011-09-26 16:56:55 +02:00
|
|
|
ChannelShift physicalRed, physicalGreen, physicalBlue;
|
|
|
|
ChannelShift logicalRed, logicalGreen, logicalBlue;
|
2009-09-01 20:50:48 +02:00
|
|
|
} ColorShifts;
|
|
|
|
|
1996-08-24 20:26:35 +02:00
|
|
|
/* X physical device */
|
|
|
|
typedef struct
|
|
|
|
{
|
2011-03-18 12:59:26 +01:00
|
|
|
struct gdi_physdev dev;
|
1996-08-24 20:26:35 +02:00
|
|
|
GC gc; /* X Window GC */
|
|
|
|
Drawable drawable;
|
2006-12-07 16:43:59 +01:00
|
|
|
RECT dc_rect; /* DC rectangle relative to drawable */
|
2012-04-25 13:18:28 +02:00
|
|
|
RECT *bounds; /* Graphics bounds */
|
2006-12-07 16:43:59 +01:00
|
|
|
HRGN region; /* Device region (visible region & clip region) */
|
1996-08-24 20:26:35 +02:00
|
|
|
X_PHYSPEN pen;
|
|
|
|
X_PHYSBRUSH brush;
|
2004-01-18 23:20:17 +01:00
|
|
|
int depth; /* bit depth of the DC */
|
2009-09-01 21:48:29 +02:00
|
|
|
ColorShifts *color_shifts; /* color shifts of the DC */
|
2001-06-11 22:24:57 +02:00
|
|
|
int exposures; /* count of graphics exposures operations */
|
1996-08-24 20:26:35 +02:00
|
|
|
} X11DRV_PDEVICE;
|
|
|
|
|
2018-05-28 10:26:42 +02:00
|
|
|
#define GAMMA_RAMP_SIZE 256
|
|
|
|
|
2012-10-25 21:21:41 +02:00
|
|
|
struct x11drv_gamma_ramp
|
|
|
|
{
|
2018-05-28 10:26:42 +02:00
|
|
|
WORD red[GAMMA_RAMP_SIZE];
|
|
|
|
WORD green[GAMMA_RAMP_SIZE];
|
|
|
|
WORD blue[GAMMA_RAMP_SIZE];
|
2012-10-25 21:21:41 +02:00
|
|
|
};
|
|
|
|
|
2011-07-08 15:55:11 +02:00
|
|
|
static inline X11DRV_PDEVICE *get_x11drv_dev( PHYSDEV dev )
|
|
|
|
{
|
|
|
|
return (X11DRV_PDEVICE *)dev;
|
|
|
|
}
|
|
|
|
|
2012-04-16 17:49:05 +02:00
|
|
|
static inline void reset_bounds( RECT *bounds )
|
|
|
|
{
|
|
|
|
bounds->left = bounds->top = INT_MAX;
|
|
|
|
bounds->right = bounds->bottom = INT_MIN;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void add_bounds_rect( RECT *bounds, const RECT *rect )
|
|
|
|
{
|
|
|
|
if (rect->left >= rect->right || rect->top >= rect->bottom) return;
|
|
|
|
bounds->left = min( bounds->left, rect->left );
|
|
|
|
bounds->top = min( bounds->top, rect->top );
|
|
|
|
bounds->right = max( bounds->right, rect->right );
|
|
|
|
bounds->bottom = max( bounds->bottom, rect->bottom );
|
|
|
|
}
|
|
|
|
|
1996-08-24 20:26:35 +02:00
|
|
|
/* Wine driver X11 functions */
|
|
|
|
|
2019-07-06 20:45:50 +02:00
|
|
|
extern BOOL CDECL X11DRV_Arc( PHYSDEV dev, INT left, INT top, INT right,
|
|
|
|
INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
|
|
|
|
INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
|
2019-10-22 10:39:16 +02:00
|
|
|
extern NTSTATUS CDECL X11DRV_D3DKMTCheckVidPnExclusiveOwnership( const D3DKMT_CHECKVIDPNEXCLUSIVEOWNERSHIP *desc ) DECLSPEC_HIDDEN;
|
2019-10-22 10:39:06 +02:00
|
|
|
extern NTSTATUS CDECL X11DRV_D3DKMTSetVidPnSourceOwner( const D3DKMT_SETVIDPNSOURCEOWNER *desc ) DECLSPEC_HIDDEN;
|
2019-07-06 20:45:50 +02:00
|
|
|
extern BOOL CDECL X11DRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
|
|
|
|
extern INT CDECL X11DRV_EnumICMProfiles( PHYSDEV dev, ICMENUMPROCW proc, LPARAM lparam ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_FillPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_GetDeviceGammaRamp( PHYSDEV dev, LPVOID ramp ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_GetICMProfile( PHYSDEV dev, LPDWORD size, LPWSTR filename ) DECLSPEC_HIDDEN;
|
|
|
|
extern DWORD CDECL X11DRV_GetImage( PHYSDEV dev, BITMAPINFO *info,
|
|
|
|
struct gdi_image_bits *bits, struct bitblt_coords *src ) DECLSPEC_HIDDEN;
|
|
|
|
extern COLORREF CDECL X11DRV_GetNearestColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
|
|
|
extern UINT CDECL X11DRV_GetSystemPaletteEntries( PHYSDEV dev, UINT start, UINT count, LPPALETTEENTRY entries ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert,
|
|
|
|
void *grad_array, ULONG ngrad, ULONG mode ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_LineTo( PHYSDEV dev, INT x, INT y) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_PaintRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_PatBlt( PHYSDEV dev, struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_Pie( PHYSDEV dev, INT left, INT top, INT right,
|
|
|
|
INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_Polygon( PHYSDEV dev, const POINT* pt, INT count ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_PolyPolygon( PHYSDEV dev, const POINT* pt, const INT* counts, UINT polygons) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_PolyPolyline( PHYSDEV dev, const POINT* pt, const DWORD* counts, DWORD polylines) DECLSPEC_HIDDEN;
|
|
|
|
extern DWORD CDECL X11DRV_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
|
|
|
|
const struct gdi_image_bits *bits, struct bitblt_coords *src,
|
|
|
|
struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN;
|
|
|
|
extern UINT CDECL X11DRV_RealizeDefaultPalette( PHYSDEV dev ) DECLSPEC_HIDDEN;
|
|
|
|
extern UINT CDECL X11DRV_RealizePalette( PHYSDEV dev, HPALETTE hpal, BOOL primary ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_RoundRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
|
|
|
|
INT ell_width, INT ell_height ) DECLSPEC_HIDDEN;
|
|
|
|
extern HBRUSH CDECL X11DRV_SelectBrush( PHYSDEV dev, HBRUSH hbrush, const struct brush_pattern *pattern ) DECLSPEC_HIDDEN;
|
|
|
|
extern HPEN CDECL X11DRV_SelectPen( PHYSDEV dev, HPEN hpen, const struct brush_pattern *pattern ) DECLSPEC_HIDDEN;
|
|
|
|
extern COLORREF CDECL X11DRV_SetDCBrushColor( PHYSDEV dev, COLORREF crColor ) DECLSPEC_HIDDEN;
|
|
|
|
extern COLORREF CDECL X11DRV_SetDCPenColor( PHYSDEV dev, COLORREF crColor ) DECLSPEC_HIDDEN;
|
|
|
|
extern void CDECL X11DRV_SetDeviceClipping( PHYSDEV dev, HRGN rgn ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_SetDeviceGammaRamp( PHYSDEV dev, LPVOID ramp ) DECLSPEC_HIDDEN;
|
|
|
|
extern COLORREF CDECL X11DRV_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
|
|
|
|
PHYSDEV src_dev, struct bitblt_coords *src, DWORD rop ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_StrokeAndFillPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_StrokePath( PHYSDEV dev ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL CDECL X11DRV_UnrealizePalette( HPALETTE hpal ) DECLSPEC_HIDDEN;
|
2000-05-12 22:18:14 +02:00
|
|
|
|
1997-02-02 20:01:52 +01:00
|
|
|
/* X11 driver internal functions */
|
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void X11DRV_Xcursor_Init(void) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_XInput2_Init(void) DECLSPEC_HIDDEN;
|
|
|
|
|
2011-09-19 17:46:33 +02:00
|
|
|
extern DWORD copy_image_bits( BITMAPINFO *info, BOOL is_r8g8b8, XImage *image,
|
|
|
|
const struct gdi_image_bits *src_bits, struct gdi_image_bits *dst_bits,
|
|
|
|
struct bitblt_coords *coords, const int *mapping, unsigned int zeropad_mask ) DECLSPEC_HIDDEN;
|
2012-05-11 13:48:19 +02:00
|
|
|
extern Pixmap create_pixmap_from_image( HDC hdc, const XVisualInfo *vis, const BITMAPINFO *info,
|
|
|
|
const struct gdi_image_bits *bits, UINT coloruse ) DECLSPEC_HIDDEN;
|
2012-05-11 11:49:20 +02:00
|
|
|
extern DWORD get_pixmap_image( Pixmap pixmap, int width, int height, const XVisualInfo *vis,
|
|
|
|
BITMAPINFO *info, struct gdi_image_bits *bits ) DECLSPEC_HIDDEN;
|
2012-09-27 20:47:08 +02:00
|
|
|
extern struct window_surface *create_surface( Window window, const XVisualInfo *vis, const RECT *rect,
|
|
|
|
COLORREF color_key, BOOL use_alpha ) DECLSPEC_HIDDEN;
|
2012-09-12 16:00:18 +02:00
|
|
|
extern void set_surface_color_key( struct window_surface *window_surface, COLORREF color_key ) DECLSPEC_HIDDEN;
|
2012-12-03 15:27:04 +01:00
|
|
|
extern HRGN expose_surface( struct window_surface *window_surface, const RECT *rect ) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
|
|
|
|
extern RGNDATA *X11DRV_GetRegionData( HRGN hrgn, HDC hdc_lptodp ) DECLSPEC_HIDDEN;
|
2011-12-06 14:00:14 +01:00
|
|
|
extern BOOL add_extra_clipping_region( X11DRV_PDEVICE *dev, HRGN rgn ) DECLSPEC_HIDDEN;
|
|
|
|
extern void restore_clipping_region( X11DRV_PDEVICE *dev ) DECLSPEC_HIDDEN;
|
2012-04-16 17:49:05 +02:00
|
|
|
extern void add_device_bounds( X11DRV_PDEVICE *dev, const RECT *rect ) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
|
2011-09-15 12:49:08 +02:00
|
|
|
extern void execute_rop( X11DRV_PDEVICE *physdev, Pixmap src_pixmap, GC gc, const RECT *visrect, DWORD rop ) DECLSPEC_HIDDEN;
|
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern BOOL X11DRV_SetupGCForPatBlt( X11DRV_PDEVICE *physDev, GC gc, BOOL fMapColors ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_SetupGCForBrush( X11DRV_PDEVICE *physDev ) DECLSPEC_HIDDEN;
|
2011-09-12 13:27:31 +02:00
|
|
|
extern INT X11DRV_XWStoDS( HDC hdc, INT width ) DECLSPEC_HIDDEN;
|
|
|
|
extern INT X11DRV_YWStoDS( HDC hdc, INT height ) DECLSPEC_HIDDEN;
|
1998-11-22 18:45:06 +01:00
|
|
|
|
2013-11-29 12:33:09 +01:00
|
|
|
extern BOOL client_side_graphics DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL client_side_with_render DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL shape_layered_windows DECLSPEC_HIDDEN;
|
2011-09-12 11:39:17 +02:00
|
|
|
extern const struct gdi_dc_funcs *X11DRV_XRender_Init(void) DECLSPEC_HIDDEN;
|
2002-01-29 04:07:21 +01:00
|
|
|
|
2012-10-02 22:05:57 +02:00
|
|
|
extern struct opengl_funcs *get_glx_driver(UINT) DECLSPEC_HIDDEN;
|
2018-02-26 19:42:16 +01:00
|
|
|
extern const struct vulkan_funcs *get_vulkan_driver(UINT) DECLSPEC_HIDDEN;
|
2002-11-15 05:16:38 +01:00
|
|
|
|
2008-04-02 17:13:59 +02:00
|
|
|
/* IME support */
|
2012-01-09 08:36:10 +01:00
|
|
|
extern void IME_SetOpenStatus(BOOL fOpen) DECLSPEC_HIDDEN;
|
|
|
|
extern void IME_SetCompositionStatus(BOOL fOpen) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern INT IME_GetCursorPos(void) DECLSPEC_HIDDEN;
|
|
|
|
extern void IME_SetCursorPos(DWORD pos) DECLSPEC_HIDDEN;
|
|
|
|
extern void IME_UpdateAssociation(HWND focus) DECLSPEC_HIDDEN;
|
2008-04-02 17:13:59 +02:00
|
|
|
extern BOOL IME_SetCompositionString(DWORD dwIndex, LPCVOID lpComp,
|
|
|
|
DWORD dwCompLen, LPCVOID lpRead,
|
2011-05-13 18:52:35 +02:00
|
|
|
DWORD dwReadLen) DECLSPEC_HIDDEN;
|
|
|
|
extern void IME_SetResultString(LPWSTR lpResult, DWORD dwResultlen) DECLSPEC_HIDDEN;
|
2004-01-21 03:22:26 +01:00
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void X11DRV_XDND_EnterEvent( HWND hWnd, XClientMessageEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_XDND_PositionEvent( HWND hWnd, XClientMessageEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_XDND_DropEvent( HWND hWnd, XClientMessageEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_XDND_LeaveEvent( HWND hWnd, XClientMessageEvent *event ) DECLSPEC_HIDDEN;
|
2016-09-22 06:07:44 +02:00
|
|
|
extern void X11DRV_CLIPBOARD_ImportSelection( Display *display, Window win, Atom selection,
|
|
|
|
Atom *targets, UINT count,
|
|
|
|
void (*callback)( Atom, UINT, HANDLE )) DECLSPEC_HIDDEN;
|
2003-11-20 23:09:51 +01:00
|
|
|
|
1999-04-01 10:16:08 +02:00
|
|
|
/**************************************************************************
|
|
|
|
* X11 GDI driver
|
|
|
|
*/
|
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern Display *gdi_display DECLSPEC_HIDDEN; /* display to use for all GDI functions */
|
2001-05-11 02:17:47 +02:00
|
|
|
|
1999-04-01 10:16:08 +02:00
|
|
|
/* X11 GDI palette driver */
|
|
|
|
|
2000-09-23 00:37:56 +02:00
|
|
|
#define X11DRV_PALETTE_FIXED 0x0001 /* read-only colormap - have to use XAllocColor (if not virtual) */
|
1999-04-01 10:16:08 +02:00
|
|
|
#define X11DRV_PALETTE_VIRTUAL 0x0002 /* no mapping needed - pixel == pixel color */
|
|
|
|
|
|
|
|
#define X11DRV_PALETTE_PRIVATE 0x1000 /* private colormap, identity mapping */
|
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern UINT16 X11DRV_PALETTE_PaletteFlags DECLSPEC_HIDDEN;
|
1999-04-01 10:16:08 +02:00
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern int *X11DRV_PALETTE_PaletteToXPixel DECLSPEC_HIDDEN;
|
|
|
|
extern int *X11DRV_PALETTE_XPixelToPalette DECLSPEC_HIDDEN;
|
|
|
|
extern ColorShifts X11DRV_PALETTE_default_shifts DECLSPEC_HIDDEN;
|
1999-04-01 10:16:08 +02:00
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern int X11DRV_PALETTE_mapEGAPixel[16] DECLSPEC_HIDDEN;
|
1999-04-01 10:16:08 +02:00
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern int X11DRV_PALETTE_Init(void) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_IsSolidColor(COLORREF color) DECLSPEC_HIDDEN;
|
1999-04-01 10:16:08 +02:00
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern COLORREF X11DRV_PALETTE_ToLogical(X11DRV_PDEVICE *physDev, int pixel) DECLSPEC_HIDDEN;
|
|
|
|
extern int X11DRV_PALETTE_ToPhysical(X11DRV_PDEVICE *physDev, COLORREF color) DECLSPEC_HIDDEN;
|
|
|
|
extern COLORREF X11DRV_PALETTE_GetColor( X11DRV_PDEVICE *physDev, COLORREF color ) DECLSPEC_HIDDEN;
|
2019-12-19 17:48:24 +01:00
|
|
|
extern int *get_window_surface_mapping( int bpp, int *mapping ) DECLSPEC_HIDDEN;
|
1999-04-01 10:16:08 +02:00
|
|
|
|
2002-03-23 22:43:56 +01:00
|
|
|
/* GDI escapes */
|
|
|
|
|
|
|
|
#define X11DRV_ESCAPE 6789
|
|
|
|
enum x11drv_escape_codes
|
|
|
|
{
|
2004-01-14 05:53:11 +01:00
|
|
|
X11DRV_SET_DRAWABLE, /* set current drawable for a DC */
|
2012-06-27 13:57:26 +02:00
|
|
|
X11DRV_GET_DRAWABLE, /* get current drawable for a DC */
|
2004-01-14 05:53:11 +01:00
|
|
|
X11DRV_START_EXPOSURES, /* start graphics exposures */
|
|
|
|
X11DRV_END_EXPOSURES, /* end graphics exposures */
|
2007-10-10 17:33:35 +02:00
|
|
|
X11DRV_FLUSH_GL_DRAWABLE /* flush changes made to the gl drawable */
|
2004-01-14 05:53:11 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
struct x11drv_escape_set_drawable
|
|
|
|
{
|
|
|
|
enum x11drv_escape_codes code; /* escape code (X11DRV_SET_DRAWABLE) */
|
|
|
|
Drawable drawable; /* X drawable */
|
|
|
|
int mode; /* ClipByChildren or IncludeInferiors */
|
2006-12-07 16:43:59 +01:00
|
|
|
RECT dc_rect; /* DC rectangle relative to drawable */
|
2002-03-23 22:43:56 +01:00
|
|
|
};
|
|
|
|
|
2012-06-27 13:57:26 +02:00
|
|
|
struct x11drv_escape_get_drawable
|
|
|
|
{
|
|
|
|
enum x11drv_escape_codes code; /* escape code (X11DRV_GET_DRAWABLE) */
|
|
|
|
Drawable drawable; /* X drawable */
|
|
|
|
Drawable gl_drawable; /* GL drawable */
|
|
|
|
int pixel_format; /* internal GL pixel format */
|
|
|
|
};
|
|
|
|
|
2012-10-02 21:50:54 +02:00
|
|
|
struct x11drv_escape_flush_gl_drawable
|
|
|
|
{
|
|
|
|
enum x11drv_escape_codes code; /* escape code (X11DRV_FLUSH_GL_DRAWABLE) */
|
|
|
|
Drawable gl_drawable; /* GL drawable */
|
2018-03-16 11:08:28 +01:00
|
|
|
BOOL flush; /* flush X11 before copying */
|
2012-10-02 21:50:54 +02:00
|
|
|
};
|
|
|
|
|
1999-04-01 10:16:08 +02:00
|
|
|
/**************************************************************************
|
|
|
|
* X11 USER driver
|
|
|
|
*/
|
|
|
|
|
2017-02-08 01:50:31 +01:00
|
|
|
struct x11drv_valuator_data
|
|
|
|
{
|
|
|
|
double min;
|
|
|
|
double max;
|
|
|
|
int number;
|
|
|
|
};
|
|
|
|
|
2001-05-16 21:52:29 +02:00
|
|
|
struct x11drv_thread_data
|
|
|
|
{
|
|
|
|
Display *display;
|
2008-03-13 13:35:02 +01:00
|
|
|
XEvent *current_event; /* event currently being processed */
|
2016-03-10 14:03:02 +01:00
|
|
|
HWND grab_hwnd; /* window that currently grabs the mouse */
|
2002-09-19 01:09:50 +02:00
|
|
|
HWND last_focus; /* last window that had focus */
|
2003-01-23 02:28:12 +01:00
|
|
|
XIM xim; /* input method */
|
2010-07-23 15:21:58 +02:00
|
|
|
HWND last_xic_hwnd; /* last xic window */
|
2008-10-18 16:03:48 +02:00
|
|
|
XFontSet font_set; /* international text drawing font set */
|
2005-03-07 20:31:46 +01:00
|
|
|
Window selection_wnd; /* window used for selection interactions */
|
2011-05-16 14:33:32 +02:00
|
|
|
unsigned long warp_serial; /* serial number of last pointer warp request */
|
2011-04-14 12:04:45 +02:00
|
|
|
Window clip_window; /* window used for cursor clipping */
|
2011-04-22 16:58:20 +02:00
|
|
|
HWND clip_hwnd; /* message window stored in desktop while clipping is active */
|
2011-05-11 12:30:03 +02:00
|
|
|
DWORD clip_reset; /* time when clipping was last reset */
|
2011-04-13 20:18:30 +02:00
|
|
|
enum { xi_unavailable = -1, xi_unknown, xi_disabled, xi_enabled } xi2_state; /* XInput2 state */
|
2012-08-15 21:21:20 +02:00
|
|
|
void *xi2_devices; /* list of XInput2 devices (valid when state is enabled) */
|
|
|
|
int xi2_device_count;
|
2017-02-08 01:50:31 +01:00
|
|
|
struct x11drv_valuator_data x_rel_valuator;
|
|
|
|
struct x11drv_valuator_data y_rel_valuator;
|
2012-08-15 21:21:20 +02:00
|
|
|
int xi2_core_pointer; /* XInput2 core pointer id */
|
2017-02-08 01:50:31 +01:00
|
|
|
int xi2_current_slave; /* Current slave driving the Core pointer */
|
2001-05-16 21:52:29 +02:00
|
|
|
};
|
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern struct x11drv_thread_data *x11drv_init_thread_data(void) DECLSPEC_HIDDEN;
|
|
|
|
extern DWORD thread_data_tls_index DECLSPEC_HIDDEN;
|
2001-05-16 21:52:29 +02:00
|
|
|
|
2007-03-17 11:47:28 +01:00
|
|
|
static inline struct x11drv_thread_data *x11drv_thread_data(void)
|
2001-05-16 21:52:29 +02:00
|
|
|
{
|
2017-11-16 22:30:17 +01:00
|
|
|
DWORD err = GetLastError(); /* TlsGetValue always resets last error */
|
|
|
|
struct x11drv_thread_data *data = TlsGetValue( thread_data_tls_index );
|
|
|
|
SetLastError( err );
|
|
|
|
return data;
|
2001-05-16 21:52:29 +02:00
|
|
|
}
|
|
|
|
|
2008-06-26 16:47:42 +02:00
|
|
|
/* retrieve the thread display, or NULL if not created yet */
|
|
|
|
static inline Display *thread_display(void)
|
|
|
|
{
|
|
|
|
struct x11drv_thread_data *data = x11drv_thread_data();
|
|
|
|
if (!data) return NULL;
|
|
|
|
return data->display;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* retrieve the thread display, creating it if needed */
|
|
|
|
static inline Display *thread_init_display(void)
|
|
|
|
{
|
|
|
|
return x11drv_init_thread_data()->display;
|
|
|
|
}
|
2001-05-16 21:52:29 +02:00
|
|
|
|
2008-04-07 11:41:54 +02:00
|
|
|
static inline size_t get_property_size( int format, unsigned long count )
|
|
|
|
{
|
|
|
|
/* format==32 means long, which can be 64 bits... */
|
|
|
|
if (format == 32) return count * sizeof(long);
|
|
|
|
return count * (format / 8);
|
|
|
|
}
|
|
|
|
|
2012-09-25 15:51:03 +02:00
|
|
|
extern XVisualInfo default_visual DECLSPEC_HIDDEN;
|
2012-09-26 13:12:17 +02:00
|
|
|
extern XVisualInfo argb_visual DECLSPEC_HIDDEN;
|
2012-09-26 12:53:16 +02:00
|
|
|
extern Colormap default_colormap DECLSPEC_HIDDEN;
|
2011-07-06 12:38:31 +02:00
|
|
|
extern XPixmapFormatValues **pixmap_formats DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern Window root_window DECLSPEC_HIDDEN;
|
2013-11-29 12:33:09 +01:00
|
|
|
extern BOOL clipping_cursor DECLSPEC_HIDDEN;
|
2019-08-30 12:17:59 +02:00
|
|
|
extern BOOL keyboard_grabbed DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern unsigned int screen_bpp DECLSPEC_HIDDEN;
|
2013-11-29 12:33:09 +01:00
|
|
|
extern BOOL use_xkb DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL usexrandr DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL usexvidmode DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern BOOL ximInComposeMode DECLSPEC_HIDDEN;
|
2013-11-29 12:33:09 +01:00
|
|
|
extern BOOL use_take_focus DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL use_primary_selection DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL use_system_cursors DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL show_systray DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL grab_pointer DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL grab_fullscreen DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL usexcomposite DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL managed_mode DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL decorated_mode DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL private_color_map DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern int primary_monitor DECLSPEC_HIDDEN;
|
|
|
|
extern int copy_default_colors DECLSPEC_HIDDEN;
|
|
|
|
extern int alloc_system_colors DECLSPEC_HIDDEN;
|
|
|
|
extern int xrender_error_base DECLSPEC_HIDDEN;
|
|
|
|
extern HMODULE x11drv_module DECLSPEC_HIDDEN;
|
2017-07-17 11:12:48 +02:00
|
|
|
extern char *process_name DECLSPEC_HIDDEN;
|
2016-09-26 14:06:14 +02:00
|
|
|
extern Display *clipboard_display DECLSPEC_HIDDEN;
|
2000-03-25 15:05:06 +01:00
|
|
|
|
2003-11-20 05:24:18 +01:00
|
|
|
/* atoms */
|
2001-06-04 23:55:17 +02:00
|
|
|
|
2003-11-20 05:24:18 +01:00
|
|
|
enum x11drv_atoms
|
2003-06-24 01:02:02 +02:00
|
|
|
{
|
2003-11-20 05:24:18 +01:00
|
|
|
FIRST_XATOM = XA_LAST_PREDEFINED + 1,
|
|
|
|
XATOM_CLIPBOARD = FIRST_XATOM,
|
|
|
|
XATOM_COMPOUND_TEXT,
|
2008-10-31 04:18:00 +01:00
|
|
|
XATOM_INCR,
|
2010-11-01 19:57:12 +01:00
|
|
|
XATOM_MANAGER,
|
2003-11-20 05:24:18 +01:00
|
|
|
XATOM_MULTIPLE,
|
|
|
|
XATOM_SELECTION_DATA,
|
|
|
|
XATOM_TARGETS,
|
|
|
|
XATOM_TEXT,
|
2016-09-28 04:38:47 +02:00
|
|
|
XATOM_TIMESTAMP,
|
2003-11-20 05:24:18 +01:00
|
|
|
XATOM_UTF8_STRING,
|
|
|
|
XATOM_RAW_ASCENT,
|
|
|
|
XATOM_RAW_DESCENT,
|
|
|
|
XATOM_RAW_CAP_HEIGHT,
|
2012-08-15 22:05:07 +02:00
|
|
|
XATOM_Rel_X,
|
|
|
|
XATOM_Rel_Y,
|
2003-11-20 05:24:18 +01:00
|
|
|
XATOM_WM_PROTOCOLS,
|
|
|
|
XATOM_WM_DELETE_WINDOW,
|
2008-02-27 19:11:43 +01:00
|
|
|
XATOM_WM_STATE,
|
2003-11-20 05:24:18 +01:00
|
|
|
XATOM_WM_TAKE_FOCUS,
|
|
|
|
XATOM_DndProtocol,
|
|
|
|
XATOM_DndSelection,
|
2008-03-05 15:57:39 +01:00
|
|
|
XATOM__ICC_PROFILE,
|
2003-11-20 05:24:18 +01:00
|
|
|
XATOM__MOTIF_WM_HINTS,
|
2009-01-06 19:59:07 +01:00
|
|
|
XATOM__NET_STARTUP_INFO_BEGIN,
|
|
|
|
XATOM__NET_STARTUP_INFO,
|
2008-03-12 17:29:28 +01:00
|
|
|
XATOM__NET_SUPPORTED,
|
2006-08-23 02:14:11 +02:00
|
|
|
XATOM__NET_SYSTEM_TRAY_OPCODE,
|
|
|
|
XATOM__NET_SYSTEM_TRAY_S0,
|
2012-10-01 15:59:49 +02:00
|
|
|
XATOM__NET_SYSTEM_TRAY_VISUAL,
|
2010-04-16 16:23:33 +02:00
|
|
|
XATOM__NET_WM_ICON,
|
2004-08-19 01:47:48 +02:00
|
|
|
XATOM__NET_WM_MOVERESIZE,
|
2006-06-19 19:25:54 +02:00
|
|
|
XATOM__NET_WM_NAME,
|
2003-11-20 05:24:18 +01:00
|
|
|
XATOM__NET_WM_PID,
|
|
|
|
XATOM__NET_WM_PING,
|
2006-06-19 19:25:54 +02:00
|
|
|
XATOM__NET_WM_STATE,
|
2007-10-31 18:13:20 +01:00
|
|
|
XATOM__NET_WM_STATE_ABOVE,
|
2015-10-13 07:52:37 +02:00
|
|
|
XATOM__NET_WM_STATE_DEMANDS_ATTENTION,
|
2006-06-19 19:25:54 +02:00
|
|
|
XATOM__NET_WM_STATE_FULLSCREEN,
|
2008-03-01 13:30:58 +01:00
|
|
|
XATOM__NET_WM_STATE_MAXIMIZED_HORZ,
|
|
|
|
XATOM__NET_WM_STATE_MAXIMIZED_VERT,
|
2007-10-11 11:40:55 +02:00
|
|
|
XATOM__NET_WM_STATE_SKIP_PAGER,
|
|
|
|
XATOM__NET_WM_STATE_SKIP_TASKBAR,
|
2010-06-29 11:08:51 +02:00
|
|
|
XATOM__NET_WM_USER_TIME,
|
|
|
|
XATOM__NET_WM_USER_TIME_WINDOW,
|
2008-09-12 15:54:02 +02:00
|
|
|
XATOM__NET_WM_WINDOW_OPACITY,
|
2003-12-04 22:54:13 +01:00
|
|
|
XATOM__NET_WM_WINDOW_TYPE,
|
2006-10-11 17:32:22 +02:00
|
|
|
XATOM__NET_WM_WINDOW_TYPE_DIALOG,
|
|
|
|
XATOM__NET_WM_WINDOW_TYPE_NORMAL,
|
2003-12-04 22:54:13 +01:00
|
|
|
XATOM__NET_WM_WINDOW_TYPE_UTILITY,
|
2008-10-01 21:00:18 +02:00
|
|
|
XATOM__NET_WORKAREA,
|
2020-06-30 11:56:53 +02:00
|
|
|
XATOM__GTK_WORKAREAS_D0,
|
2010-11-01 19:45:12 +01:00
|
|
|
XATOM__XEMBED,
|
2006-08-23 02:14:11 +02:00
|
|
|
XATOM__XEMBED_INFO,
|
2003-11-20 23:09:51 +01:00
|
|
|
XATOM_XdndAware,
|
|
|
|
XATOM_XdndEnter,
|
|
|
|
XATOM_XdndPosition,
|
|
|
|
XATOM_XdndStatus,
|
|
|
|
XATOM_XdndLeave,
|
|
|
|
XATOM_XdndFinished,
|
|
|
|
XATOM_XdndDrop,
|
|
|
|
XATOM_XdndActionCopy,
|
|
|
|
XATOM_XdndActionMove,
|
|
|
|
XATOM_XdndActionLink,
|
|
|
|
XATOM_XdndActionAsk,
|
|
|
|
XATOM_XdndActionPrivate,
|
|
|
|
XATOM_XdndSelection,
|
|
|
|
XATOM_XdndTypeList,
|
2009-11-22 21:30:18 +01:00
|
|
|
XATOM_HTML_Format,
|
2011-03-03 21:27:34 +01:00
|
|
|
XATOM_WCF_DIF,
|
|
|
|
XATOM_WCF_ENHMETAFILE,
|
|
|
|
XATOM_WCF_HDROP,
|
|
|
|
XATOM_WCF_PENDATA,
|
|
|
|
XATOM_WCF_RIFF,
|
|
|
|
XATOM_WCF_SYLK,
|
|
|
|
XATOM_WCF_TIFF,
|
|
|
|
XATOM_WCF_WAVE,
|
|
|
|
XATOM_image_bmp,
|
2003-11-20 05:24:18 +01:00
|
|
|
XATOM_image_gif,
|
2009-06-19 20:54:33 +02:00
|
|
|
XATOM_image_jpeg,
|
2009-06-19 20:46:57 +02:00
|
|
|
XATOM_image_png,
|
2003-11-20 23:09:51 +01:00
|
|
|
XATOM_text_html,
|
|
|
|
XATOM_text_plain,
|
2003-11-20 05:24:18 +01:00
|
|
|
XATOM_text_rtf,
|
|
|
|
XATOM_text_richtext,
|
2007-06-27 09:50:35 +02:00
|
|
|
XATOM_text_uri_list,
|
2003-11-20 05:24:18 +01:00
|
|
|
NB_XATOMS
|
|
|
|
};
|
2003-06-24 01:02:02 +02:00
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern Atom X11DRV_Atoms[NB_XATOMS - FIRST_XATOM] DECLSPEC_HIDDEN;
|
|
|
|
extern Atom systray_atom DECLSPEC_HIDDEN;
|
2003-11-20 05:24:18 +01:00
|
|
|
|
|
|
|
#define x11drv_atom(name) (X11DRV_Atoms[XATOM_##name - FIRST_XATOM])
|
|
|
|
|
1998-12-07 10:13:40 +01:00
|
|
|
/* X11 event driver */
|
|
|
|
|
2016-08-23 15:13:26 +02:00
|
|
|
typedef BOOL (*x11drv_event_handler)( HWND hwnd, XEvent *event );
|
2005-02-26 18:49:38 +01:00
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void X11DRV_register_event_handler( int type, x11drv_event_handler handler, const char *name ) DECLSPEC_HIDDEN;
|
2005-02-26 18:49:38 +01:00
|
|
|
|
2016-08-23 15:13:26 +02:00
|
|
|
extern BOOL X11DRV_ButtonPress( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_ButtonRelease( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_MotionNotify( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_EnterNotify( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_KeyEvent( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_KeymapNotify( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_DestroyNotify( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_SelectionRequest( HWND hWnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_SelectionClear( HWND hWnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_MappingNotify( HWND hWnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_GenericEvent( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
1999-12-12 20:42:47 +01:00
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern int xinput2_opcode DECLSPEC_HIDDEN;
|
|
|
|
extern Bool (*pXGetEventData)( Display *display, XEvent /*XGenericEventCookie*/ *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void (*pXFreeEventData)( Display *display, XEvent /*XGenericEventCookie*/ *event ) DECLSPEC_HIDDEN;
|
2011-04-12 21:16:15 +02:00
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern DWORD EVENT_x11_time_to_win32_time(Time time) DECLSPEC_HIDDEN;
|
2004-01-09 01:03:00 +01:00
|
|
|
|
2005-03-07 20:31:46 +01:00
|
|
|
/* X11 driver private messages, must be in the range 0x80001000..0x80001fff */
|
|
|
|
enum x11drv_window_messages
|
|
|
|
{
|
2016-09-26 13:27:40 +02:00
|
|
|
WM_X11DRV_UPDATE_CLIPBOARD = 0x80001000,
|
2008-09-08 15:51:08 +02:00
|
|
|
WM_X11DRV_SET_WIN_REGION,
|
2010-04-29 02:23:05 +02:00
|
|
|
WM_X11DRV_RESIZE_DESKTOP,
|
2011-04-22 16:22:09 +02:00
|
|
|
WM_X11DRV_SET_CURSOR,
|
2020-10-01 22:24:30 +02:00
|
|
|
WM_X11DRV_CLIP_CURSOR_NOTIFY,
|
|
|
|
WM_X11DRV_CLIP_CURSOR_REQUEST
|
2005-03-07 20:31:46 +01:00
|
|
|
};
|
|
|
|
|
2007-10-11 11:38:59 +02:00
|
|
|
/* _NET_WM_STATE properties that we keep track of */
|
2008-02-27 18:01:31 +01:00
|
|
|
enum x11drv_net_wm_state
|
2007-10-11 11:38:59 +02:00
|
|
|
{
|
2008-02-27 18:01:31 +01:00
|
|
|
NET_WM_STATE_FULLSCREEN,
|
|
|
|
NET_WM_STATE_ABOVE,
|
2008-03-01 13:30:58 +01:00
|
|
|
NET_WM_STATE_MAXIMIZED,
|
2008-02-27 18:01:31 +01:00
|
|
|
NET_WM_STATE_SKIP_PAGER,
|
|
|
|
NET_WM_STATE_SKIP_TASKBAR,
|
|
|
|
NB_NET_WM_STATES
|
2007-10-11 11:38:59 +02:00
|
|
|
};
|
|
|
|
|
2001-06-04 23:55:17 +02:00
|
|
|
/* x11drv private window data */
|
|
|
|
struct x11drv_win_data
|
|
|
|
{
|
2012-09-21 16:29:24 +02:00
|
|
|
Display *display; /* display connection for the thread owning the window */
|
2012-09-26 12:19:37 +02:00
|
|
|
XVisualInfo vis; /* X visual used by this window */
|
2019-09-19 04:44:19 +02:00
|
|
|
Colormap whole_colormap; /* colormap if non-default visual */
|
|
|
|
Colormap client_colormap; /* colormap for the client window */
|
2005-03-25 17:47:04 +01:00
|
|
|
HWND hwnd; /* hwnd that this private data belongs to */
|
|
|
|
Window whole_window; /* X window for the complete window */
|
2013-01-23 13:35:30 +01:00
|
|
|
Window client_window; /* X window for the client area */
|
2020-11-17 10:05:33 +01:00
|
|
|
RECT window_rect; /* USER window rectangle relative to win32 parent window client area */
|
|
|
|
RECT whole_rect; /* X window rectangle for the whole window relative to win32 parent window client area */
|
|
|
|
RECT client_rect; /* client area relative to win32 parent window client area */
|
2005-03-25 17:47:04 +01:00
|
|
|
XIC xic; /* X input context */
|
2008-01-23 12:28:32 +01:00
|
|
|
BOOL managed : 1; /* is window managed? */
|
|
|
|
BOOL mapped : 1; /* is window mapped? (in either normal or iconic state) */
|
2008-02-28 17:01:10 +01:00
|
|
|
BOOL iconic : 1; /* is window in iconic state? */
|
2008-04-09 15:46:33 +02:00
|
|
|
BOOL embedded : 1; /* is window an XEMBED client? */
|
2008-04-29 12:46:16 +02:00
|
|
|
BOOL shaped : 1; /* is window using a custom region shape? */
|
2012-10-29 14:37:56 +01:00
|
|
|
BOOL layered : 1; /* is window layered and with valid attributes? */
|
2018-01-26 13:39:03 +01:00
|
|
|
BOOL use_alpha : 1; /* does window use an alpha channel? */
|
2008-02-27 19:11:43 +01:00
|
|
|
int wm_state; /* current value of the WM_STATE property */
|
2008-02-27 18:01:31 +01:00
|
|
|
DWORD net_wm_state; /* bit mask of active x11drv_net_wm_state values */
|
2010-11-01 19:45:12 +01:00
|
|
|
Window embedder; /* window id of embedder */
|
2010-01-04 17:56:32 +01:00
|
|
|
unsigned long configure_serial; /* serial number of last configure request */
|
2012-09-06 12:39:34 +02:00
|
|
|
struct window_surface *surface;
|
2012-09-21 11:52:29 +02:00
|
|
|
Pixmap icon_pixmap;
|
|
|
|
Pixmap icon_mask;
|
|
|
|
unsigned long *icon_bits;
|
|
|
|
unsigned int icon_size;
|
2001-06-04 23:55:17 +02:00
|
|
|
};
|
|
|
|
|
2012-09-17 13:03:52 +02:00
|
|
|
extern struct x11drv_win_data *get_win_data( HWND hwnd ) DECLSPEC_HIDDEN;
|
|
|
|
extern void release_win_data( struct x11drv_win_data *data ) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern Window X11DRV_get_whole_window( HWND hwnd ) DECLSPEC_HIDDEN;
|
|
|
|
extern XIC X11DRV_get_ic( HWND hwnd ) DECLSPEC_HIDDEN;
|
|
|
|
|
2019-04-10 21:04:18 +02:00
|
|
|
extern void sync_gl_drawable( HWND hwnd, BOOL known_child ) DECLSPEC_HIDDEN;
|
2012-10-10 10:46:16 +02:00
|
|
|
extern void set_gl_drawable_parent( HWND hwnd, HWND parent ) DECLSPEC_HIDDEN;
|
2012-08-31 12:22:03 +02:00
|
|
|
extern void destroy_gl_drawable( HWND hwnd ) DECLSPEC_HIDDEN;
|
2018-06-13 22:08:20 +02:00
|
|
|
extern void wine_vk_surface_destroy( HWND hwnd ) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
|
2012-09-13 20:08:01 +02:00
|
|
|
extern void wait_for_withdrawn_state( HWND hwnd, BOOL set ) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern Window init_clip_window(void) DECLSPEC_HIDDEN;
|
|
|
|
extern void update_user_time( Time time ) DECLSPEC_HIDDEN;
|
2015-07-01 20:43:48 +02:00
|
|
|
extern void read_net_wm_states( Display *display, struct x11drv_win_data *data ) DECLSPEC_HIDDEN;
|
2012-09-21 16:29:24 +02:00
|
|
|
extern void update_net_wm_states( struct x11drv_win_data *data ) DECLSPEC_HIDDEN;
|
2012-10-01 15:59:49 +02:00
|
|
|
extern void make_window_embedded( struct x11drv_win_data *data ) DECLSPEC_HIDDEN;
|
2021-05-03 12:26:27 +02:00
|
|
|
extern Window create_dummy_client_window(void) DECLSPEC_HIDDEN;
|
2018-02-12 15:49:23 +01:00
|
|
|
extern Window create_client_window( HWND hwnd, const XVisualInfo *visual ) DECLSPEC_HIDDEN;
|
2018-01-26 13:39:03 +01:00
|
|
|
extern void set_window_visual( struct x11drv_win_data *data, const XVisualInfo *vis, BOOL use_alpha ) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void change_systray_owner( Display *display, Window systray_window ) DECLSPEC_HIDDEN;
|
|
|
|
extern void update_systray_balloon_position(void) DECLSPEC_HIDDEN;
|
|
|
|
extern HWND create_foreign_window( Display *display, Window window ) DECLSPEC_HIDDEN;
|
2016-09-26 13:27:40 +02:00
|
|
|
extern BOOL update_clipboard( HWND hwnd ) DECLSPEC_HIDDEN;
|
2008-02-27 19:13:09 +01:00
|
|
|
|
2010-10-04 20:41:11 +02:00
|
|
|
static inline void mirror_rect( const RECT *window_rect, RECT *rect )
|
|
|
|
{
|
|
|
|
int width = window_rect->right - window_rect->left;
|
|
|
|
int tmp = rect->left;
|
|
|
|
rect->left = width - rect->right;
|
|
|
|
rect->right = width - tmp;
|
|
|
|
}
|
|
|
|
|
2005-01-28 18:25:50 +01:00
|
|
|
/* X context to associate a hwnd to an X window */
|
2011-05-13 18:52:35 +02:00
|
|
|
extern XContext winContext DECLSPEC_HIDDEN;
|
2012-08-15 15:51:06 +02:00
|
|
|
/* X context to associate a struct x11drv_win_data to an hwnd */
|
|
|
|
extern XContext win_data_context DECLSPEC_HIDDEN;
|
|
|
|
/* X context to associate an X cursor to a Win32 cursor handle */
|
|
|
|
extern XContext cursor_context DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
|
|
|
|
extern void X11DRV_InitClipboard(void) DECLSPEC_HIDDEN;
|
|
|
|
extern void CDECL X11DRV_SetFocus( HWND hwnd ) DECLSPEC_HIDDEN;
|
|
|
|
extern void set_window_cursor( Window window, HCURSOR handle ) DECLSPEC_HIDDEN;
|
|
|
|
extern void sync_window_cursor( Window window ) DECLSPEC_HIDDEN;
|
2019-09-16 10:00:18 +02:00
|
|
|
extern LRESULT clip_cursor_notify( HWND hwnd, HWND prev_clip_hwnd, HWND new_clip_hwnd ) DECLSPEC_HIDDEN;
|
2020-10-01 22:24:31 +02:00
|
|
|
extern LRESULT clip_cursor_request( HWND hwnd, BOOL fullscreen, BOOL reset ) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void ungrab_clipping_window(void) DECLSPEC_HIDDEN;
|
|
|
|
extern void reset_clipping_window(void) DECLSPEC_HIDDEN;
|
winex11.drv: Retry last ClipCursor when grab is released.
As we ignore these NotifyGrab / NotifyUngrab w.r.t focus decisions,
some applications are unaware of mouse grabs being lost and sometimes
cursor clipping is lost. We have to keep the last clip rectangle and
restore it when grab is released.
This has been squashed with the foreground window check from
Zhiyi Zhang <zzhang@codeweavers.com> to fix an issue that happens when
switching from a fullscreen window - because there's some additional
focus events involved - but in general, if the window that is getting
focus cannot be activated:
When FocusIn/NotifyWhileGrabbed is received, SetForegroundWindow is not
called if the window cannot be activated. When the FocusIn/NotifyUngrab
event arrives for the same window, we have to check the foreground
window before restoring cursor clipping rectangle.
For reference, the event sequence when pressing Alt-Tab - for WMs that
grab the keyboard - is the following:
1. FocusOut/NotifyGrab, when WM grabs the keyboard.
2. FocusOut/NotifyWhileGrabbed, while WM switches windows, this calls
SetForegroundWindow(GetDesktopWindow()).
The event sequence for normal windows ends here, but for fullscreen
windows, there may be these additional events:
3. FocusIn/NotifyWhileGrabbed, which may not change Wine foreground
window if it cannot be activated.
4. FocusIn/NotifyUnGrab, when WM releases the keyboard while switching
windows, this is ignored but it should not retry to grab the cursor,
because window is not foreground.
5. FocusOut/NotifyNormal, when WM finishes switching the windows.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2019-08-30 12:18:00 +02:00
|
|
|
extern void retry_grab_clipping_window(void) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern BOOL clip_fullscreen_window( HWND hwnd, BOOL reset ) DECLSPEC_HIDDEN;
|
2012-09-13 20:08:01 +02:00
|
|
|
extern void move_resize_window( HWND hwnd, int dir ) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void X11DRV_InitKeyboard( Display *display ) DECLSPEC_HIDDEN;
|
2008-12-16 15:32:08 +01:00
|
|
|
extern DWORD CDECL X11DRV_MsgWaitForMultipleObjectsEx( DWORD count, const HANDLE *handles, DWORD timeout,
|
2011-05-13 18:52:35 +02:00
|
|
|
DWORD mask, DWORD flags ) DECLSPEC_HIDDEN;
|
2001-05-16 21:52:29 +02:00
|
|
|
|
2002-04-24 23:32:11 +02:00
|
|
|
typedef int (*x11drv_error_callback)( Display *display, XErrorEvent *event, void *arg );
|
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void X11DRV_expect_error( Display *display, x11drv_error_callback callback, void *arg ) DECLSPEC_HIDDEN;
|
|
|
|
extern int X11DRV_check_error(void) DECLSPEC_HIDDEN;
|
2018-08-23 10:50:47 +02:00
|
|
|
extern void X11DRV_X_to_window_rect( struct x11drv_win_data *data, RECT *rect, int x, int y, int cx, int cy ) DECLSPEC_HIDDEN;
|
2020-08-25 09:20:48 +02:00
|
|
|
extern BOOL is_window_rect_full_screen( const RECT *rect ) DECLSPEC_HIDDEN;
|
2013-10-14 14:20:08 +02:00
|
|
|
extern POINT virtual_screen_to_root( INT x, INT y ) DECLSPEC_HIDDEN;
|
|
|
|
extern POINT root_to_virtual_screen( INT x, INT y ) DECLSPEC_HIDDEN;
|
2013-10-14 14:38:58 +02:00
|
|
|
extern RECT get_virtual_screen_rect(void) DECLSPEC_HIDDEN;
|
2013-10-14 14:59:01 +02:00
|
|
|
extern RECT get_primary_monitor_rect(void) DECLSPEC_HIDDEN;
|
2019-11-05 14:05:10 +01:00
|
|
|
extern RECT get_host_primary_monitor_rect(void) DECLSPEC_HIDDEN;
|
2020-06-30 11:56:21 +02:00
|
|
|
extern RECT get_work_area( const RECT *monitor_rect ) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void xinerama_init( unsigned int width, unsigned int height ) DECLSPEC_HIDDEN;
|
|
|
|
|
2020-07-22 09:24:41 +02:00
|
|
|
#define DEPTH_COUNT 3
|
|
|
|
extern const unsigned int *depths DECLSPEC_HIDDEN;
|
|
|
|
|
2020-07-22 09:24:30 +02:00
|
|
|
/* Required functions for changing and enumerating display settings */
|
|
|
|
struct x11drv_settings_handler
|
|
|
|
{
|
|
|
|
/* A name to tell what host driver is used */
|
|
|
|
const char *name;
|
|
|
|
|
|
|
|
/* Higher priority can override handlers with a lower priority */
|
|
|
|
UINT priority;
|
|
|
|
|
|
|
|
/* get_id() will be called to map a device name, e.g., \\.\DISPLAY1 to a driver specific id.
|
|
|
|
* Following functions use this id to identify the device.
|
|
|
|
*
|
2020-07-24 15:53:20 +02:00
|
|
|
* Return FALSE if the device cannot be found and TRUE on success */
|
2020-07-22 09:24:30 +02:00
|
|
|
BOOL (*get_id)(const WCHAR *device_name, ULONG_PTR *id);
|
|
|
|
|
2020-07-22 09:24:41 +02:00
|
|
|
/* get_modes() will be called to get a list of supported modes of the device of id in modes
|
|
|
|
* with respect to flags, which could be 0, EDS_RAWMODE or EDS_ROTATEDMODE. If the implementation
|
|
|
|
* uses dmDriverExtra then every DEVMODEW in the list must have the same dmDriverExtra value
|
|
|
|
*
|
|
|
|
* Following fields in DEVMODE must be valid:
|
|
|
|
* dmSize, dmDriverExtra, dmFields, dmDisplayOrientation, dmBitsPerPel, dmPelsWidth, dmPelsHeight,
|
|
|
|
* dmDisplayFlags and dmDisplayFrequency
|
|
|
|
*
|
|
|
|
* Return FALSE on failure with parameters unchanged and error code set. Return TRUE on success */
|
|
|
|
BOOL (*get_modes)(ULONG_PTR id, DWORD flags, DEVMODEW **modes, UINT *mode_count);
|
|
|
|
|
|
|
|
/* free_modes() will be called to free the mode list returned from get_modes() */
|
|
|
|
void (*free_modes)(DEVMODEW *modes);
|
|
|
|
|
2020-07-22 09:24:30 +02:00
|
|
|
/* get_current_mode() will be called to get the current display mode of the device of id
|
|
|
|
*
|
|
|
|
* Following fields in DEVMODE must be valid:
|
|
|
|
* dmFields, dmDisplayOrientation, dmBitsPerPel, dmPelsWidth, dmPelsHeight, dmDisplayFlags,
|
|
|
|
* dmDisplayFrequency and dmPosition
|
|
|
|
*
|
|
|
|
* Return FALSE on failure with parameters unchanged and error code set. Return TRUE on success */
|
|
|
|
BOOL (*get_current_mode)(ULONG_PTR id, DEVMODEW *mode);
|
2020-07-22 09:25:08 +02:00
|
|
|
|
|
|
|
/* set_current_mode() will be called to change the display mode of the display device of id.
|
|
|
|
* mode must be a valid mode from get_modes() with optional fields, such as dmPosition set.
|
|
|
|
*
|
|
|
|
* Return DISP_CHANGE_*, same as ChangeDisplaySettingsExW() return values */
|
|
|
|
LONG (*set_current_mode)(ULONG_PTR id, DEVMODEW *mode);
|
2020-07-22 09:24:30 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
extern void X11DRV_Settings_SetHandler(const struct x11drv_settings_handler *handler) DECLSPEC_HIDDEN;
|
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void X11DRV_init_desktop( Window win, unsigned int width, unsigned int height ) DECLSPEC_HIDDEN;
|
2020-05-11 10:55:38 +02:00
|
|
|
extern void X11DRV_resize_desktop(BOOL) DECLSPEC_HIDDEN;
|
2020-08-17 10:36:33 +02:00
|
|
|
extern void init_registry_display_settings(void) DECLSPEC_HIDDEN;
|
2019-11-05 14:04:07 +01:00
|
|
|
extern BOOL is_virtual_desktop(void) DECLSPEC_HIDDEN;
|
2013-10-16 12:13:50 +02:00
|
|
|
extern BOOL is_desktop_fullscreen(void) DECLSPEC_HIDDEN;
|
2020-05-26 10:35:39 +02:00
|
|
|
extern BOOL is_detached_mode(const DEVMODEW *) DECLSPEC_HIDDEN;
|
2013-10-16 12:13:50 +02:00
|
|
|
extern BOOL create_desktop_win_data( Window win ) DECLSPEC_HIDDEN;
|
2020-05-26 10:35:09 +02:00
|
|
|
extern BOOL get_primary_adapter(WCHAR *) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
void X11DRV_Settings_Init(void) DECLSPEC_HIDDEN;
|
2003-10-16 02:21:42 +02:00
|
|
|
|
2012-07-08 16:06:38 +02:00
|
|
|
void X11DRV_XF86VM_Init(void) DECLSPEC_HIDDEN;
|
2012-07-08 16:06:39 +02:00
|
|
|
void X11DRV_XRandR_Init(void) DECLSPEC_HIDDEN;
|
2012-07-08 16:06:38 +02:00
|
|
|
|
2019-06-10 16:07:02 +02:00
|
|
|
/* X11 display device handler. Used to initialize display device registry data */
|
|
|
|
|
2019-06-10 16:07:14 +02:00
|
|
|
/* Represent a physical GPU in the PCI slots */
|
|
|
|
struct x11drv_gpu
|
|
|
|
{
|
|
|
|
/* ID to uniquely identify a GPU in handler */
|
|
|
|
ULONG_PTR id;
|
|
|
|
/* Name */
|
|
|
|
WCHAR name[128];
|
|
|
|
/* PCI ID */
|
|
|
|
UINT vendor_id;
|
|
|
|
UINT device_id;
|
|
|
|
UINT subsys_id;
|
|
|
|
UINT revision_id;
|
2020-06-17 14:02:04 +02:00
|
|
|
/* Vulkan device UUID */
|
|
|
|
GUID vulkan_uuid;
|
2019-06-10 16:07:14 +02:00
|
|
|
};
|
|
|
|
|
2019-06-10 16:07:23 +02:00
|
|
|
/* Represent an adapter in EnumDisplayDevices context */
|
|
|
|
struct x11drv_adapter
|
|
|
|
{
|
|
|
|
/* ID to uniquely identify an adapter in handler */
|
|
|
|
ULONG_PTR id;
|
|
|
|
/* as StateFlags in DISPLAY_DEVICE struct */
|
|
|
|
DWORD state_flags;
|
|
|
|
};
|
|
|
|
|
2019-06-10 16:07:34 +02:00
|
|
|
/* Represent a monitor in EnumDisplayDevices context */
|
|
|
|
struct x11drv_monitor
|
|
|
|
{
|
|
|
|
/* Name */
|
|
|
|
WCHAR name[128];
|
2019-06-25 10:38:38 +02:00
|
|
|
/* RcMonitor in MONITORINFO struct */
|
|
|
|
RECT rc_monitor;
|
2019-06-25 10:39:01 +02:00
|
|
|
/* RcWork in MONITORINFO struct */
|
|
|
|
RECT rc_work;
|
2019-06-10 16:07:34 +02:00
|
|
|
/* StateFlags in DISPLAY_DEVICE struct */
|
|
|
|
DWORD state_flags;
|
|
|
|
};
|
|
|
|
|
2019-06-10 16:07:02 +02:00
|
|
|
/* Required functions for display device registry initialization */
|
|
|
|
struct x11drv_display_device_handler
|
|
|
|
{
|
|
|
|
/* A name to tell what host driver is used */
|
|
|
|
const char *name;
|
|
|
|
|
2019-10-25 15:40:09 +02:00
|
|
|
/* Higher priority can override handlers with lower priority */
|
2019-06-10 16:07:02 +02:00
|
|
|
INT priority;
|
2019-06-10 16:07:14 +02:00
|
|
|
|
2019-10-25 15:40:09 +02:00
|
|
|
/* get_gpus will be called to get a list of GPUs. First GPU has to be where the primary adapter is.
|
2019-06-10 16:07:14 +02:00
|
|
|
*
|
|
|
|
* Return FALSE on failure with parameters unchanged */
|
2019-10-25 15:40:09 +02:00
|
|
|
BOOL (*get_gpus)(struct x11drv_gpu **gpus, int *count);
|
2019-06-10 16:07:14 +02:00
|
|
|
|
2019-10-25 15:40:09 +02:00
|
|
|
/* get_adapters will be called to get a list of adapters in EnumDisplayDevices context under a GPU.
|
2019-06-10 16:07:23 +02:00
|
|
|
* The first adapter has to be primary if GPU is primary.
|
|
|
|
*
|
|
|
|
* Return FALSE on failure with parameters unchanged */
|
2019-10-25 15:40:09 +02:00
|
|
|
BOOL (*get_adapters)(ULONG_PTR gpu_id, struct x11drv_adapter **adapters, int *count);
|
2019-06-10 16:07:23 +02:00
|
|
|
|
2019-10-25 15:40:09 +02:00
|
|
|
/* get_monitors will be called to get a list of monitors in EnumDisplayDevices context under an adapter.
|
2019-06-10 16:07:34 +02:00
|
|
|
* The first monitor has to be primary if adapter is primary.
|
|
|
|
*
|
|
|
|
* Return FALSE on failure with parameters unchanged */
|
2019-10-25 15:40:09 +02:00
|
|
|
BOOL (*get_monitors)(ULONG_PTR adapter_id, struct x11drv_monitor **monitors, int *count);
|
2019-06-10 16:07:34 +02:00
|
|
|
|
2019-10-25 15:40:09 +02:00
|
|
|
/* free_gpus will be called to free a GPU list from get_gpus */
|
|
|
|
void (*free_gpus)(struct x11drv_gpu *gpus);
|
2019-06-10 16:07:23 +02:00
|
|
|
|
2019-10-25 15:40:09 +02:00
|
|
|
/* free_adapters will be called to free an adapter list from get_adapters */
|
|
|
|
void (*free_adapters)(struct x11drv_adapter *adapters);
|
2019-06-10 16:07:34 +02:00
|
|
|
|
2019-10-25 15:40:09 +02:00
|
|
|
/* free_monitors will be called to free a monitor list from get_monitors */
|
|
|
|
void (*free_monitors)(struct x11drv_monitor *monitors);
|
2019-11-01 14:20:21 +01:00
|
|
|
|
|
|
|
/* register_event_handlers will be called to register event handlers.
|
|
|
|
* This function pointer is optional and can be NULL when driver doesn't support it */
|
|
|
|
void (*register_event_handlers)(void);
|
2019-06-10 16:07:02 +02:00
|
|
|
};
|
|
|
|
|
2020-06-11 11:22:09 +02:00
|
|
|
extern HANDLE get_display_device_init_mutex(void) DECLSPEC_HIDDEN;
|
2020-08-17 10:36:23 +02:00
|
|
|
extern BOOL get_host_primary_gpu(struct x11drv_gpu *gpu) DECLSPEC_HIDDEN;
|
2020-06-11 11:22:09 +02:00
|
|
|
extern void release_display_device_init_mutex(HANDLE) DECLSPEC_HIDDEN;
|
2019-06-10 16:07:02 +02:00
|
|
|
extern void X11DRV_DisplayDevices_SetHandler(const struct x11drv_display_device_handler *handler) DECLSPEC_HIDDEN;
|
2019-06-10 16:07:46 +02:00
|
|
|
extern void X11DRV_DisplayDevices_Init(BOOL force) DECLSPEC_HIDDEN;
|
2019-11-01 14:20:21 +01:00
|
|
|
extern void X11DRV_DisplayDevices_RegisterEventHandlers(void) DECLSPEC_HIDDEN;
|
2020-05-11 10:55:27 +02:00
|
|
|
extern void X11DRV_DisplayDevices_Update(BOOL) DECLSPEC_HIDDEN;
|
2019-11-05 14:04:27 +01:00
|
|
|
/* Display device handler used in virtual desktop mode */
|
|
|
|
extern struct x11drv_display_device_handler desktop_handler DECLSPEC_HIDDEN;
|
2019-06-10 16:07:02 +02:00
|
|
|
|
2008-04-04 13:44:36 +02:00
|
|
|
/* XIM support */
|
2008-12-16 15:02:52 +01:00
|
|
|
extern BOOL X11DRV_InitXIM( const char *input_style ) DECLSPEC_HIDDEN;
|
|
|
|
extern XIC X11DRV_CreateIC(XIM xim, struct x11drv_win_data *data) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_SetupXIM(void) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_XIMLookupChars( const char *str, DWORD count ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_ForceXIMReset(HWND hwnd) DECLSPEC_HIDDEN;
|
2012-01-09 08:36:10 +01:00
|
|
|
extern void X11DRV_SetPreeditState(HWND hwnd, BOOL fOpen) DECLSPEC_HIDDEN;
|
2008-04-04 13:44:36 +02:00
|
|
|
|
2008-04-09 15:46:33 +02:00
|
|
|
#define XEMBED_MAPPED (1 << 0)
|
|
|
|
|
2013-10-14 14:38:58 +02:00
|
|
|
static inline BOOL is_window_rect_mapped( const RECT *rect )
|
|
|
|
{
|
|
|
|
RECT virtual_rect = get_virtual_screen_rect();
|
|
|
|
return (rect->left < virtual_rect.right &&
|
|
|
|
rect->top < virtual_rect.bottom &&
|
|
|
|
max( rect->right, rect->left + 1 ) > virtual_rect.left &&
|
|
|
|
max( rect->bottom, rect->top + 1 ) > virtual_rect.top);
|
|
|
|
}
|
|
|
|
|
1998-12-07 10:13:40 +01:00
|
|
|
#endif /* __WINE_X11DRV_H */
|