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
|
|
|
|
2010-02-20 09:57:07 +01:00
|
|
|
#define WINE_XDND_VERSION 4
|
|
|
|
|
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;
|
|
|
|
|
2012-10-25 21:21:41 +02:00
|
|
|
struct x11drv_gamma_ramp
|
|
|
|
{
|
|
|
|
WORD red[256];
|
|
|
|
WORD green[256];
|
|
|
|
WORD blue[256];
|
|
|
|
};
|
|
|
|
|
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 */
|
|
|
|
|
2011-07-13 14:56:12 +02:00
|
|
|
extern BOOL X11DRV_Arc( PHYSDEV dev, INT left, INT top, INT right,
|
|
|
|
INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_Chord( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
|
|
|
|
INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_Ellipse( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
|
|
|
|
extern INT X11DRV_EnumICMProfiles( PHYSDEV dev, ICMENUMPROCW proc, LPARAM lparam ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_ExtFloodFill( PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_GetDeviceGammaRamp( PHYSDEV dev, LPVOID ramp ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_GetICMProfile( PHYSDEV dev, LPDWORD size, LPWSTR filename ) DECLSPEC_HIDDEN;
|
2012-05-23 23:36:20 +02:00
|
|
|
extern DWORD X11DRV_GetImage( PHYSDEV dev, BITMAPINFO *info,
|
2011-07-21 11:17:13 +02:00
|
|
|
struct gdi_image_bits *bits, struct bitblt_coords *src ) DECLSPEC_HIDDEN;
|
2011-07-13 14:56:12 +02:00
|
|
|
extern COLORREF X11DRV_GetNearestColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
|
|
|
extern UINT X11DRV_GetSystemPaletteEntries( PHYSDEV dev, UINT start, UINT count, LPPALETTEENTRY entries ) DECLSPEC_HIDDEN;
|
2011-11-30 13:09:08 +01:00
|
|
|
extern BOOL X11DRV_GradientFill( PHYSDEV dev, TRIVERTEX *vert_array, ULONG nvert,
|
|
|
|
void *grad_array, ULONG ngrad, ULONG mode ) DECLSPEC_HIDDEN;
|
2011-07-13 14:56:12 +02:00
|
|
|
extern BOOL X11DRV_LineTo( PHYSDEV dev, INT x, INT y) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_PaintRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_PatBlt( PHYSDEV dev, struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_Pie( PHYSDEV dev, INT left, INT top, INT right,
|
|
|
|
INT bottom, INT xstart, INT ystart, INT xend, INT yend ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_Polygon( PHYSDEV dev, const POINT* pt, INT count ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_PolyPolygon( PHYSDEV dev, const POINT* pt, const INT* counts, UINT polygons) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_PolyPolyline( PHYSDEV dev, const POINT* pt, const DWORD* counts, DWORD polylines) DECLSPEC_HIDDEN;
|
2012-05-23 23:36:20 +02:00
|
|
|
extern DWORD X11DRV_PutImage( PHYSDEV dev, HRGN clip, BITMAPINFO *info,
|
2011-07-21 18:49:47 +02:00
|
|
|
const struct gdi_image_bits *bits, struct bitblt_coords *src,
|
|
|
|
struct bitblt_coords *dst, DWORD rop ) DECLSPEC_HIDDEN;
|
2011-07-13 14:56:12 +02:00
|
|
|
extern UINT X11DRV_RealizeDefaultPalette( PHYSDEV dev ) DECLSPEC_HIDDEN;
|
|
|
|
extern UINT X11DRV_RealizePalette( PHYSDEV dev, HPALETTE hpal, BOOL primary ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_RoundRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom,
|
|
|
|
INT ell_width, INT ell_height ) DECLSPEC_HIDDEN;
|
2011-12-29 19:49:41 +01:00
|
|
|
extern HBRUSH X11DRV_SelectBrush( PHYSDEV dev, HBRUSH hbrush, const struct brush_pattern *pattern ) DECLSPEC_HIDDEN;
|
2011-12-29 20:16:46 +01:00
|
|
|
extern HPEN X11DRV_SelectPen( PHYSDEV dev, HPEN hpen, const struct brush_pattern *pattern ) DECLSPEC_HIDDEN;
|
2011-07-13 14:56:12 +02:00
|
|
|
extern COLORREF X11DRV_SetDCBrushColor( PHYSDEV dev, COLORREF crColor ) DECLSPEC_HIDDEN;
|
|
|
|
extern COLORREF X11DRV_SetDCPenColor( PHYSDEV dev, COLORREF crColor ) DECLSPEC_HIDDEN;
|
2011-12-06 13:15:35 +01:00
|
|
|
extern void X11DRV_SetDeviceClipping( PHYSDEV dev, HRGN rgn ) DECLSPEC_HIDDEN;
|
2011-07-13 14:56:12 +02:00
|
|
|
extern BOOL X11DRV_SetDeviceGammaRamp( PHYSDEV dev, LPVOID ramp ) DECLSPEC_HIDDEN;
|
|
|
|
extern COLORREF X11DRV_SetPixel( PHYSDEV dev, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL X11DRV_StretchBlt( PHYSDEV dst_dev, struct bitblt_coords *dst,
|
|
|
|
PHYSDEV src_dev, struct bitblt_coords *src, DWORD rop ) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL 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
|
|
|
|
|
|
|
extern const int X11DRV_XROPfunction[];
|
|
|
|
|
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;
|
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;
|
2014-05-27 02:22:07 +02:00
|
|
|
extern HANDLE X11DRV_CLIPBOARD_ImportSelection(Display *d, Atom target, Window w, Atom prop, UINT *windowsFormat) 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;
|
|
|
|
extern void X11DRV_PALETTE_ComputeColorShifts(ColorShifts *shifts, unsigned long redMask, unsigned long greenMask, unsigned long blueMask) 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 */
|
|
|
|
};
|
|
|
|
|
1999-04-01 10:16:08 +02:00
|
|
|
/**************************************************************************
|
|
|
|
* X11 USER driver
|
|
|
|
*/
|
|
|
|
|
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 */
|
2005-03-27 19:58:41 +02:00
|
|
|
Window grab_window; /* 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 */
|
2008-12-17 17:12:51 +01:00
|
|
|
HKL kbd_layout; /* active keyboard layout */
|
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;
|
|
|
|
int xi2_core_pointer; /* XInput2 core pointer id */
|
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
|
|
|
{
|
2008-06-26 15:08:08 +02:00
|
|
|
return TlsGetValue( thread_data_tls_index );
|
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;
|
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;
|
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,
|
|
|
|
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,
|
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,
|
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_XdndTarget,
|
|
|
|
XATOM_XdndTypeList,
|
2009-11-22 21:30:18 +01:00
|
|
|
XATOM_HTML_Format,
|
2011-03-03 21:27:34 +01:00
|
|
|
XATOM_WCF_BITMAP,
|
2004-02-20 06:43:00 +01:00
|
|
|
XATOM_WCF_DIB,
|
2011-03-03 21:27:34 +01:00
|
|
|
XATOM_WCF_DIBV5,
|
|
|
|
XATOM_WCF_DIF,
|
|
|
|
XATOM_WCF_DSPBITMAP,
|
|
|
|
XATOM_WCF_DSPENHMETAFILE,
|
|
|
|
XATOM_WCF_DSPMETAFILEPICT,
|
|
|
|
XATOM_WCF_DSPTEXT,
|
|
|
|
XATOM_WCF_ENHMETAFILE,
|
|
|
|
XATOM_WCF_HDROP,
|
|
|
|
XATOM_WCF_LOCALE,
|
|
|
|
XATOM_WCF_METAFILEPICT,
|
|
|
|
XATOM_WCF_OEMTEXT,
|
|
|
|
XATOM_WCF_OWNERDISPLAY,
|
|
|
|
XATOM_WCF_PALETTE,
|
|
|
|
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 */
|
|
|
|
|
2005-02-26 18:49:38 +01:00
|
|
|
typedef void (*x11drv_event_handler)( HWND hwnd, XEvent *event );
|
|
|
|
|
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
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void X11DRV_ButtonPress( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_ButtonRelease( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_MotionNotify( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_EnterNotify( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_KeyEvent( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_KeymapNotify( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_DestroyNotify( HWND hwnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_SelectionRequest( HWND hWnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_SelectionClear( HWND hWnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_MappingNotify( HWND hWnd, XEvent *event ) DECLSPEC_HIDDEN;
|
|
|
|
extern void 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
|
|
|
|
{
|
2005-03-09 19:46:13 +01:00
|
|
|
WM_X11DRV_ACQUIRE_SELECTION = 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,
|
|
|
|
WM_X11DRV_CLIP_CURSOR
|
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 */
|
|
|
|
Colormap colormap; /* colormap if non-default visual */
|
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 */
|
2005-03-25 17:47:04 +01:00
|
|
|
RECT window_rect; /* USER window rectangle relative to parent */
|
|
|
|
RECT whole_rect; /* X window rectangle for the whole window relative to parent */
|
2008-01-22 20:08:56 +01:00
|
|
|
RECT client_rect; /* client area relative to parent */
|
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? */
|
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;
|
|
|
|
|
2012-09-04 15:03:04 +02:00
|
|
|
extern void sync_gl_drawable( HWND hwnd, const RECT *visible_rect, const RECT *client_rect ) 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;
|
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;
|
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;
|
2013-01-23 13:35:30 +01:00
|
|
|
extern Window create_client_window( struct x11drv_win_data *data, const XVisualInfo *visual ) DECLSPEC_HIDDEN;
|
2012-09-26 13:12:17 +02:00
|
|
|
extern void set_window_visual( struct x11drv_win_data *data, const XVisualInfo *vis ) 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;
|
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 int CDECL X11DRV_AcquireClipboard(HWND hWndClipWindow) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_ResetSelectionOwner(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;
|
|
|
|
extern LRESULT clip_cursor_notify( HWND hwnd, HWND new_clip_hwnd ) DECLSPEC_HIDDEN;
|
|
|
|
extern void ungrab_clipping_window(void) DECLSPEC_HIDDEN;
|
|
|
|
extern void reset_clipping_window(void) DECLSPEC_HIDDEN;
|
|
|
|
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;
|
|
|
|
extern void X11DRV_X_to_window_rect( struct x11drv_win_data *data, 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;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void xinerama_init( unsigned int width, unsigned int height ) DECLSPEC_HIDDEN;
|
|
|
|
|
2012-07-03 12:59:43 +02:00
|
|
|
struct x11drv_mode_info
|
|
|
|
{
|
|
|
|
unsigned int width;
|
|
|
|
unsigned int height;
|
|
|
|
unsigned int bpp;
|
|
|
|
unsigned int refresh_rate;
|
|
|
|
};
|
|
|
|
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void X11DRV_init_desktop( Window win, unsigned int width, unsigned int height ) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_resize_desktop(unsigned int width, unsigned int height) DECLSPEC_HIDDEN;
|
2013-10-16 12:13:50 +02:00
|
|
|
extern BOOL is_desktop_fullscreen(void) DECLSPEC_HIDDEN;
|
|
|
|
extern BOOL create_desktop_win_data( Window win ) DECLSPEC_HIDDEN;
|
2011-05-13 18:52:35 +02:00
|
|
|
extern void X11DRV_Settings_AddDepthModes(void) DECLSPEC_HIDDEN;
|
|
|
|
extern void X11DRV_Settings_AddOneMode(unsigned int width, unsigned int height, unsigned int bpp, unsigned int freq) DECLSPEC_HIDDEN;
|
|
|
|
unsigned int X11DRV_Settings_GetModeCount(void) DECLSPEC_HIDDEN;
|
|
|
|
void X11DRV_Settings_Init(void) DECLSPEC_HIDDEN;
|
2012-07-03 12:59:43 +02:00
|
|
|
struct x11drv_mode_info *X11DRV_Settings_SetHandlers(const char *name,
|
|
|
|
int (*pNewGCM)(void),
|
|
|
|
LONG (*pNewSCM)(int),
|
|
|
|
unsigned int nmodes,
|
|
|
|
int reserve_depths) 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
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline BOOL is_window_rect_fullscreen( const RECT *rect )
|
|
|
|
{
|
2013-10-14 14:59:01 +02:00
|
|
|
RECT primary_rect = get_primary_monitor_rect();
|
|
|
|
return (rect->left <= primary_rect.left && rect->right >= primary_rect.right &&
|
|
|
|
rect->top <= primary_rect.top && rect->bottom >= primary_rect.bottom);
|
2013-10-14 14:38:58 +02:00
|
|
|
}
|
|
|
|
|
1998-12-07 10:13:40 +01:00
|
|
|
#endif /* __WINE_X11DRV_H */
|