diff options
Diffstat (limited to 'nx-X11/lib/windows')
-rw-r--r-- | nx-X11/lib/windows/Imakefile | 34 | ||||
-rwxr-xr-x | nx-X11/lib/windows/WindowsWM-def.cpp | 13 | ||||
-rw-r--r-- | nx-X11/lib/windows/WindowsWM.man | 340 | ||||
-rwxr-xr-x | nx-X11/lib/windows/windowswm.c | 386 | ||||
-rwxr-xr-x | nx-X11/lib/windows/windowswm.h | 195 | ||||
-rwxr-xr-x | nx-X11/lib/windows/windowswmstr.h | 169 |
6 files changed, 1137 insertions, 0 deletions
diff --git a/nx-X11/lib/windows/Imakefile b/nx-X11/lib/windows/Imakefile new file mode 100644 index 000000000..84e456ba6 --- /dev/null +++ b/nx-X11/lib/windows/Imakefile @@ -0,0 +1,34 @@ +#define DoNormalLib NormalLibWindowsWM +#define DoSharedLib SharedLibWindowsWM +#define DoDebugLib DebugLibWindowsWM +#define DoProfileLib ProfileLibWindowsWM +#define LibName WindowsWM +#define SoRev SOWINDOWSWMREV +#define IncSubdir X11 +#define IncSubSubdir extensions + +#include <Threads.tmpl> + +#ifdef SharedWindowsWMReqs +REQUIREDLIBS = SharedWindowsWMReqs +#endif + +#if Malloc0ReturnsNull +ALLOC_DEFINES = -DMALLOC_0_RETURNS_NULL +#endif + + DEFINES = $(ALLOC_DEFINES) + INCLUDES = -I$(XLIBSRC) -I$(EXTINCSRC) + SRCS = windowswm.c + OBJS = windowswm.o + LINTLIBS = $(LINTXLIB) + +HEADERS = windowswm.h windowswmstr.h + +#include <Library.tmpl> + +MANSUFFIX = $(LIBMANSUFFIX) + +InstallManPage(WindowsWM,$(LIBMANDIR)) + +DependTarget() diff --git a/nx-X11/lib/windows/WindowsWM-def.cpp b/nx-X11/lib/windows/WindowsWM-def.cpp new file mode 100755 index 000000000..e6a9e57a0 --- /dev/null +++ b/nx-X11/lib/windows/WindowsWM-def.cpp @@ -0,0 +1,13 @@ +LIBRARY windows +VERSION LIBRARY_VERSION +EXPORTS +XWindowsWMQueryExtension +XWindowsWMQueryVersion +XWindowsWMDisableUpdate +XWindowsWMReenableUpdate +XWindowsWMSelectInput +XWindowsWMSetFrontProcess +XWindowsWMFrameGetRect +XWindowsWMFrameHitTest +XWindowsWMFrameDraw +XWindowsWMFrameSetTitle diff --git a/nx-X11/lib/windows/WindowsWM.man b/nx-X11/lib/windows/WindowsWM.man new file mode 100644 index 000000000..7ca9e3c8f --- /dev/null +++ b/nx-X11/lib/windows/WindowsWM.man @@ -0,0 +1,340 @@ +.\" +.\" $XFree86: xc/lib/apple/AppleWM.man,v 1.2 2003/09/16 00:36:08 torrey Exp $ +.\" +.\" Copyright (c) 2002 Apple Computer, Inc. All Rights Reserved. +.\" Copyright (c) 2003 Torrey T. Lyons. All Rights Reserved. +.\" +.\" Permission is hereby granted, free of charge, to any person obtaining a +.\" copy of this software and associated documentation files (the +.\" "Software"), to deal in the Software without restriction, including +.\" without limitation the rights to use, copy, modify, merge, publish, +.\" distribute, sub license, and/or sell copies of the Software, and to +.\" permit persons to whom the Software is furnished to do so, subject to +.\" the following conditions: +.\" +.\" The above copyright notice and this permission notice (including the +.\" next paragraph) shall be included in all copies or substantial portions +.\" of the Software. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +.\" IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +.\" ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +.\" +.de TQ +.br +.ns +.TP \\$1 +.. +.TH APPLEWM 3 "Version 1.0" "XFree86" + +.SH NAME + AppleWM \- Apple rootless window management extension. +.SH SYNTAX +\&#include <X11/extensions/applewm.h> +.nf +.sp +Bool XAppleWMQueryExtension \^(\^Display *\fIdpy\fP, + int *\fIevent_basep\fP, int *\fIerror_basep\fP\^); +.sp +Status XAppleWMQueryVersion \^(\^Display *\fIdpy\fP, + int *\fImajor_versionp\fP, int *\fIminor_versionp\fP\^); +.sp +Bool XAppleWMDisableUpdate \^(\^Display *\fIdpy\fP, int \fIscreen\fP\^); +.sp +Bool XAppleWMReenableUpdate \^(\^Display *\fIdpy\fP, int \fIscreen\fP\^); +.sp +Bool XAppleWMSelectInput \^(\^Display *\fIdpy\fP, unsigned long \fImask\fP\^); +.sp +Bool XAppleWMSetWindowMenu \^(\^Display *\fIdpy\fP, int \fInitems\fP, + const char **\fIitems\fP\^); +.sp +Bool XAppleWMSetWindowMenuWithShortcuts \^(\^Display *\fIdpy\fP, + int \fInitems\fP, const char **\fIitems\fP, + const char *\fIshortcuts\fP\^); +.sp +Bool XAppleWMSetWindowMenuCheck \^(\^Display *\fIdpy\fP, int \fIindex\fP\^); +.sp +Bool XAppleWMSetFrontProcess \^(\^Display *\fIdpy\fP\^); +.sp +Bool XAppleWMSetWindowLevel \^(\^Display *\fIdpy\fP, Window \fIwindow\fP, + int \fIlevel\fP\^); +.sp +Bool XAppleWMSetCanQuit \^(\^Display *\fIdpy\fP, Bool \fIstate\fP\^); +.sp +Bool XAppleWMFrameGetRect \^(\^Display *\fIdpy\fP, + unsigned int \fIframe_class\fP, + unsigned int \fIframe_rect\fP, + short \fIinner_x\fP, short \fIinner_y\fP, + short \fIinner_w\fP, short \fIinner_h\fP, + short \fIouter_x\fP, short \fIouter_y\fP, + short \fIouter_w\fP, short \fIouter_h\fP, + short *\fIret_x\fP, short *\fIret_y\fP, + short *\fIret_w\fP, short *\fIret_h\fP\^); +.sp +unsigned int XAppleWMFrameHitTest \^(\^Display *\fIdpy\fP, + unsigned int \fIframe_class\fP, + short \fIpoint_x\fP, short \fIpoint_y\fP, + short \fIinner_x\fP, short \fIinner_y\fP, + short \fIinner_w\fP, short \fIinner_h\fP, + short \fIouter_x\fP, short \fIouter_y\fP, + short \fIouter_w\fP, short \fIouter_h\fP\^); +.sp +Bool XAppleWMFrameDraw \^(\^Display *\fIdpy\fP, int \fIscreen\fP, + Window \fIwindow\fP, + unsigned int \fIframe_class\fP, + unsigned int \fIframe_attr\fP, + short \fIinner_x\fP, short \fIinner_y\fP, + short \fIinner_w\fP, short \fIinner_h\fP, + short \fIouter_x\fP, short \fIouter_y\fP, + short \fIouter_w\fP, short \fIouter_h\fP, + unsigned int \fItitle_length\fP, + const unsigned char *\fItitle_bytes\fP); +.fi +.SH ARGUMENTS +.IP \fIdpy\fP 1i +Specifies the connection to the X server. +.IP \fIscreen\fP 1i +Specifies which screen. +.IP \fImask\fP 1i +Mask of event types the client is interested in. +.IP \fIwindow\fP 1i +Specifies which window. +.IP \fIlevel\fP 1i +Specifies the window level. +.IP \fIframe_class\fP 1i +Specifies the class of window frame decoration. +.IP \fIframe_rect\fP 1i +Specifies which rectangle to return from the window frame decoration. +.IP \fIframe_attr\fP 1i +A mask specifying the attributes of the window frame decoration. +.IP \fIinner_x\fP,\fIinner_y\fP,\fIinner_w\fP,\fIinner_h\fP 1i +Rectangle of the window content inside the window frame decoration. +.IP \fIouter_x\fP,\fIouter_y\fP,\fIouter_w\fP,\fIouter_h\fP 1i +Rectangle of the outer border of the window frame decoration. +.IP \fIpoint_x\fP,\fIpoint_y\fP 1i +Specifies the coordinates of the mouse up event. + +.SH DATATYPES + +.PP +.B Events +.nf +typedef struct { + int type; \/* of event *\/ + unsigned long serial; \/* # of last request processed by server *\/ + Bool send_event; \/* true if came from a SendEvent request *\/ + Display *display; \/* Display the event was read from *\/ + Window window; \/* window of event *\/ + Time time; \/* server timestamp when event happened *\/ + int kind; \/* subtype of event *\/ + int arg; +} XAppleWMNotifyEvent; +.fi +.B XAppleWMNotifyEvent +is sent to a client who has requested notification of AppleWM events with +\fBXAppleWMSelectInput\fP. + +.PP +Event types: +.nf +\&#define AppleWMControllerNotify 0 +\&#define AppleWMActivationNotify 1 +\&#define AppleWMPasteboardNotify 2 +.fi +.PP +Event masks: +.nf +\&#define AppleWMControllerNotifyMask (1L << 0) +\&#define AppleWMActivationNotifyMask (1L << 1) +\&#define AppleWMPasteboardNotifyMask (1L << 2) +.fi +.PP +Kinds of ControllerNotify events: +.nf +\&#define AppleWMMinimizeWindow 0 +\&#define AppleWMZoomWindow 1 +\&#define AppleWMCloseWindow 2 +\&#define AppleWMBringAllToFront 3 +\&#define AppleWMHideWindow 4 +\&#define AppleWMHideAll 5 +\&#define AppleWMShowAll 6 +\&#define AppleWMWindowMenuItem 9 +\&#define AppleWMWindowMenuNotify 10 +\&#define AppleWMNextWindow 11 +\&#define AppleWMPreviousWindow 12 +.fi +.PP +Kinds of ActivationNotify events: +.nf +\&#define AppleWMIsActive 0 +\&#define AppleWMIsInactive 1 +.fi +.PP +Kinds of PasteboardNotify events: +.nf +\&#define AppleWMCopyToPasteboard 0 +.sp +.fi +.PP +.B Window Parameters +.PP +Window level ids for \fBXAppleWMSetWindowLevel\fP: +.nf +\&#define AppleWMWindowLevelNormal 0 +\&#define AppleWMWindowLevelFloating 1 +\&#define AppleWMWindowLevelTornOff 2 +\&#define AppleWMWindowLevelDock 3 +\&#define AppleWMWindowLevelDesktop 4 +\&#define AppleWMNumWindowLevels 5 +.fi +.PP +Values for \fIframe_rect\fP argument to \fBXAppleWMFrameGetRect\fP: +.nf +\&#define AppleWMFrameRectTitleBar 1 +\&#define AppleWMFrameRectTracking 2 +\&#define AppleWMFrameRectGrowBox 3 +.fi +.PP +Window frame classes: +.nf +\&#define AppleWMFrameClassDocument 1 << 0 +\&#define AppleWMFrameClassDialog 1 << 1 +\&#define AppleWMFrameClassModalDialog 1 << 2 +\&#define AppleWMFrameClassSystemModalDialog 1 << 3 +\&#define AppleWMFrameClassUtility 1 << 4 +\&#define AppleWMFrameClassToolbar 1 << 5 +\&#define AppleWMFrameClassMenu 1 << 6 +\&#define AppleWMFrameClassSplash 1 << 7 +\&#define AppleWMFrameClassBorderless 1 << 8 +.fi +.PP +Window frame attributes: +.nf +\&#define AppleWMFrameActive 0x0001 +\&#define AppleWMFrameUrgent 0x0002 +\&#define AppleWMFrameTitle 0x0004 +\&#define AppleWMFramePrelight 0x0008 +\&#define AppleWMFrameShaded 0x0010 +\&#define AppleWMFrameCloseBox 0x0100 +\&#define AppleWMFrameCollapseBox 0x0200 +\&#define AppleWMFrameZoomBox 0x0400 +\&#define AppleWMFrameAnyBox 0x0700 +\&#define AppleWMFrameCloseBoxClicked 0x0800 +\&#define AppleWMFrameCollapseBoxClicked 0x1000 +\&#define AppleWMFrameZoomBoxClicked 0x2000 +\&#define AppleWMFrameAnyBoxClicked 0x3800 +\&#define AppleWMFrameGrowBox 0x4000 +.fi + +.SH DESCRIPTION +.B AppleWM +is a simple library designed to interface with the Apple-WM extension. +This extension allows X window managers to better interact with +the Mac OS X Aqua user interface when running X11 in a rootless mode. +.PP +A more complete description will be forthcoming eventually. + +.SH FUNCTIONS +.B XAppleWMDisableUpdate +causes any updates to the windows on the screen to be queued until updates +are reenabled with \fBXAppleWMReenableUpdate\fP. This is useful to avoid +intermediate redraws to the screen if a number of changes are going to be +made at once. Updates should only be disabled temporarily while drawing +to a window. These calls may be nested and each call to +\fBXAppleWMDisableUpdate\fP must be paired with a subsequent call to +\fBXAppleWMReenableUpdate\fP. Updating is not reenabled until the last +unnested call to \fBXAppleWMReenableUpdate\fP. Disabling updates applies +to window content; however, it is implementation dependent whether window +size and position changes are disabled as well. +.PP +.B XAppleWMSelectInput +is used to request that a client receive notification of the +.B AppleWM +events listed above. The event mask specifies the event types the client is +interested in receiving. Passing an event mask of 0 stops notification of +events. +.PP +.B XAppleWMSetWindowMenu +and +.B XAppleWMSetWindowMenuWithShortcuts +set the list of windows displayed in the X server's "Window" menu in the +Aqua menu bar. Other items may be listed in this menu by the X server, but +a part of this menu is set aside for use by the Apple-WM extension. This +is intended to be used to set a list of important top-level X11 windows. +.PP +One item of the X server's "Window" menu can have a checkmark beside it to +indicate it is the active or front most window. +.B XAppleWMSetWindowMenuCheck +can be used to set the item number to put a checkmark beside. +.PP +.B XAppleWMSetFrontProcess +directs the X server to make itself the front most application among all +the other Mac OS X applications. This causes X11 windows to move above +other applications' windows and for the X server to start receiving +keyboard and mouse events. +.PP +Windows can be placed into different Aqua window levels with +\fBXAppleWMSetWindowLevel\fP. The stacking of window levels takes precedence +over the stacking of windows within a level. Thus the bottom window in a level +will obscure even the top most window of a lower window level. By default all +windows are placed in the lowest window level, AppleWMWindowLevelNormal. When +a window is moved to a new level, it is ordered in front of all of its peers +at the new level. \fINote, X11 does not have the concept of window levels and +this function does not change the X11 window order. The result of trying to +reorder an X11 window above another window of higher level is undefined. +This should probably be changed.\fP +.PP +By default, the X server will ask for confirmation whenever the user requests +that it quit from the Aqua UI. +.B XAppleWMSetCanQuit +can be used to change this behavior. If a \fIstate\fP of TRUE is passed, the +X server will quit without confirmation when requested. If FALSE is passed, +the default behavior is used. +.PP +.B XAppleWMFrameDraw +can be used to decorate a top-level window with the standard Aqua window +frame and widgets. The \fIframe_class\fP controls the overall look of the +window frame and \fIframe_attr\fP specifies the details of how the various +UI elements should be drawn. The dimensions of the X11 window content are +passed as the \fIinner_*\fP rectangle and the dimensions of the Aqua window +frame are passed as the \fIouter_*\fP rectangle. +.B XAppleWMFrameGetRect +is used to calculate the size of the outer rectangle from the size of the +window content, which is being reparented. +.PP +.B XAppleWMFrameGetRect +returns a rectangle that encloses an element of the window frame decoration. +The \fIframe_rect\fP argument specifies the element of interest. The +\fIinner_*\fP and \fIouter_*\fP rectangles (as described above) specify the +window geometry. If AppleWMFrameRectTitleBar is passed for \fIframe_rect\fP, +the \fIinner_*\fP parameters are ignored. The returned rectangle has the +dimensions of the \fIouter_*\fP rectangle except that its height is equal +to the constant title bar height for the specified \fIframe_class\fP. The +proper outer rectangle for a given window content size is the union of inner +rectangle and the title bar rectangle. The AppleWMFrameRectTracking and +AppleWMFrameRectGrowBox rectangles are primarily intended to be used by the +window manager to determine the correct placement for child windows to +receive events. The tracking rectangle is the area of the window containing +the close, collapse and zoom boxes. Typically when the cursor is over this +area, the window manager will highlight the close, collapse, and zoom +buttons to conform to the standard Aqua interface. +.PP +If a mouse up or down event is received in the tracking rectangle, +.B XAppleWMFrameHitTest +is used to determine which button was clicked. +.B XAppleWMFrameHitTest +returns AppleWMFrameCloseBox, AppleWMFrameCollapseBox, or AppleWMFrameZoomBox +to indicate which button was clicked. If no button was clicked, 0 will be +returned. +.PP +Other functions include: \fBXAppleWMQueryExtension\fP, which returns the event +and error base codes and \fBXAppleWMQueryVersion\fP, which returns the current +version of the extension. (This information is cached by the library.) + +.SH RESTRICTIONS +.B AppleWM +is only intended to be used on Mac OS X when running a rootless X server. diff --git a/nx-X11/lib/windows/windowswm.c b/nx-X11/lib/windows/windowswm.c new file mode 100755 index 000000000..5d2a285ff --- /dev/null +++ b/nx-X11/lib/windows/windowswm.c @@ -0,0 +1,386 @@ +/* + * WindowsWM extension is based on AppleWM extension + * Authors: Kensuke Matsuzaki + */ +/************************************************************************** + +Copyright (c) 2002 Apple Computer, Inc. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sub license, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice (including the +next paragraph) shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +**************************************************************************/ + +/* THIS IS NOT AN X CONSORTIUM STANDARD */ + +#define NEED_EVENTS +#define NEED_REPLIES +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include <X11/Xlibint.h> +#include <X11/extensions/windowswmstr.h> +#include <X11/extensions/Xext.h> +#include <X11/extensions/extutil.h> +#include <stdio.h> + +static XExtensionInfo _windowswm_info_data; +static XExtensionInfo *windowswm_info = &_windowswm_info_data; +static char *windowswm_extension_name = WINDOWSWMNAME; + +#define WindowsWMCheckExtension(dpy,i,val) \ + XextCheckExtension (dpy, i, windowswm_extension_name, val) + +/***************************************************************************** + * * + * private utility routines * + * * + *****************************************************************************/ + +static int close_display (Display *dpy, XExtCodes *extCodes); +static Bool wire_to_event (); +static Status event_to_wire (); + +static /* const */ XExtensionHooks windowswm_extension_hooks = { + NULL, /* create_gc */ + NULL, /* copy_gc */ + NULL, /* flush_gc */ + NULL, /* free_gc */ + NULL, /* create_font */ + NULL, /* free_font */ + close_display, /* close_display */ + wire_to_event, /* wire_to_event */ + event_to_wire, /* event_to_wire */ + NULL, /* error */ + NULL, /* error_string */ +}; + +static XEXT_GENERATE_FIND_DISPLAY (find_display, windowswm_info, + windowswm_extension_name, + &windowswm_extension_hooks, + WindowsWMNumberEvents, NULL); + +static XEXT_GENERATE_CLOSE_DISPLAY (close_display, windowswm_info); + +static Bool +wire_to_event (Display *dpy, XEvent *re, xEvent *event) +{ + XExtDisplayInfo *info = find_display (dpy); + XWindowsWMNotifyEvent *se; + xWindowsWMNotifyEvent *sevent; + + WindowsWMCheckExtension (dpy, info, False); + + switch ((event->u.u.type & 0x7f) - info->codes->first_event) + { + case WindowsWMControllerNotify: + case WindowsWMActivationNotify: + se = (XWindowsWMNotifyEvent *) re; + sevent = (xWindowsWMNotifyEvent *) event; + se->type = sevent->type & 0x7f; + se->serial = _XSetLastRequestRead(dpy,(xGenericReply *) event); + se->send_event = (sevent->type & 0x80) != 0; + se->display = dpy; + se->window = sevent->window; + se->time = sevent->time; + se->kind = sevent->kind; + se->arg = sevent->arg; + se->x = sevent->x; + se->y = sevent->y; + se->w = sevent->w; + se->h = sevent->h; + return True; + } + return False; +} + +static Status +event_to_wire (Display *dpy, XEvent *re, xEvent *event) +{ + XExtDisplayInfo *info = find_display (dpy); + XWindowsWMNotifyEvent *se; + xWindowsWMNotifyEvent *sevent; + + WindowsWMCheckExtension (dpy, info, False); + + switch ((re->type & 0x7f) - info->codes->first_event) + { + case WindowsWMControllerNotify: + case WindowsWMActivationNotify: + se = (XWindowsWMNotifyEvent *) re; + sevent = (xWindowsWMNotifyEvent *) event; + sevent->type = se->type | (se->send_event ? 0x80 : 0); + sevent->sequenceNumber = se->serial & 0xffff; + sevent->window = se->window; + sevent->kind = se->kind; + sevent->arg = se->arg; + sevent->time = se->time; + sevent->x = se->x; + sevent->y = se->y; + sevent->w = se->w; + sevent->h = se->h; + return 1; + } + return 0; +} + +/***************************************************************************** + * * + * public Windows-WM Extension routines * + * * + *****************************************************************************/ + +#if 0 +#include <stdio.h> +#define TRACE(msg) fprintf(stderr, "WindowsWM%s\n", msg); +#else +#define TRACE(msg) +#endif + + +Bool +XWindowsWMQueryExtension (Display *dpy, + int *event_basep, int *error_basep) +{ + XExtDisplayInfo *info = find_display (dpy); + + TRACE("QueryExtension..."); + if (XextHasExtension(info)) + { + *event_basep = info->codes->first_event; + *error_basep = info->codes->first_error; + TRACE("QueryExtension... return True"); + return True; + } + else + { + TRACE("QueryExtension... return False"); + return False; + } +} + +Bool +XWindowsWMQueryVersion (Display* dpy, int* majorVersion, + int* minorVersion, int* patchVersion) +{ + XExtDisplayInfo *info = find_display (dpy); + xWindowsWMQueryVersionReply rep; + xWindowsWMQueryVersionReq *req; + + TRACE("QueryVersion..."); + WindowsWMCheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(WindowsWMQueryVersion, req); + req->reqType = info->codes->major_opcode; + req->wmReqType = X_WindowsWMQueryVersion; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) + { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("QueryVersion... return False"); + return False; + } + *majorVersion = rep.majorVersion; + *minorVersion = rep.minorVersion; + *patchVersion = rep.patchVersion; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("QueryVersion... return True"); + return True; +} + +Bool +XWindowsWMDisableUpdate (Display* dpy, int screen) +{ + XExtDisplayInfo *info = find_display (dpy); + xWindowsWMDisableUpdateReq *req; + + TRACE("DisableUpdate..."); + WindowsWMCheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(WindowsWMDisableUpdate, req); + req->reqType = info->codes->major_opcode; + req->wmReqType = X_WindowsWMDisableUpdate; + req->screen = screen; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("DisableUpdate... return True"); + return True; +} + +Bool +XWindowsWMReenableUpdate (Display* dpy, int screen) +{ + XExtDisplayInfo *info = find_display (dpy); + xWindowsWMReenableUpdateReq *req; + + TRACE("ReenableUpdate..."); + WindowsWMCheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(WindowsWMReenableUpdate, req); + req->reqType = info->codes->major_opcode; + req->wmReqType = X_WindowsWMReenableUpdate; + req->screen = screen; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("ReenableUpdate... return True"); + return True; +} + +Bool +XWindowsWMSelectInput (Display* dpy, unsigned long mask) +{ + XExtDisplayInfo *info = find_display (dpy); + xWindowsWMSelectInputReq *req; + + TRACE("SelectInput..."); + WindowsWMCheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(WindowsWMSelectInput, req); + req->reqType = info->codes->major_opcode; + req->wmReqType = X_WindowsWMSelectInput; + req->mask = mask; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("SetlectInput... return True"); + return True; +} + + +Bool +XWindowsWMSetFrontProcess (Display* dpy) +{ + XExtDisplayInfo *info = find_display (dpy); + xWindowsWMSetFrontProcessReq *req; + + TRACE("SetFrontProcess..."); + WindowsWMCheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(WindowsWMSetFrontProcess, req); + req->reqType = info->codes->major_opcode; + req->wmReqType = X_WindowsWMSetFrontProcess; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("SetFrontProcess... return True"); + return True; +} + +Bool +XWindowsWMFrameGetRect (Display* dpy, unsigned int frame_style, + unsigned int frame_style_ex, unsigned int frame_rect, + short ix, short iy, short iw, short ih, + short *rx, short *ry, short *rw, short *rh) +{ + XExtDisplayInfo *info = find_display (dpy); + xWindowsWMFrameGetRectReply rep; + xWindowsWMFrameGetRectReq *req; + + TRACE("FrameGetRect..."); + WindowsWMCheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(WindowsWMFrameGetRect, req); + req->reqType = info->codes->major_opcode; + req->wmReqType = X_WindowsWMFrameGetRect; + req->frame_style = frame_style; + req->frame_style_ex = frame_style_ex; + req->frame_rect = frame_rect; + req->ix = ix; + req->iy = iy; + req->iw = iw; + req->ih = ih; + rep.x = rep.y = rep.w = rep.h = 0; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) + { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("FrameGetRect... return False"); + return False; + } + *rx = rep.x; *ry = rep.y; + *rw = rep.w; *rh = rep.h; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("FrameGetRect... return True"); + return True; +} + +Bool +XWindowsWMFrameDraw (Display* dpy, int screen, Window window, + unsigned int frame_style, unsigned int frame_style_ex, + short ix, short iy, short iw, short ih) +{ + XExtDisplayInfo *info = find_display (dpy); + xWindowsWMFrameDrawReq *req; + + TRACE("FrameDraw..."); + WindowsWMCheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(WindowsWMFrameDraw, req); + req->reqType = info->codes->major_opcode; + req->wmReqType = X_WindowsWMFrameDraw; + req->screen = screen; + req->window = window; + req->frame_style = frame_style; + req->frame_style_ex = frame_style_ex; + req->ix = ix; + req->iy = iy; + req->iw = iw; + req->ih = ih; + + UnlockDisplay(dpy); + SyncHandle(); + TRACE("FrameDraw... return True"); + return True; +} + +Bool +XWindowsWMFrameSetTitle (Display* dpy, int screen, Window window, + unsigned int title_length, const char *title_bytes) +{ + XExtDisplayInfo *info = find_display (dpy); + xWindowsWMFrameSetTitleReq *req; + + TRACE("FrameSetTitle..."); + WindowsWMCheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(WindowsWMFrameSetTitle, req); + req->reqType = info->codes->major_opcode; + req->wmReqType = X_WindowsWMFrameSetTitle; + req->screen = screen; + req->window = window; + req->title_length = title_length; + + req->length += (title_length + 3)>>2; + Data (dpy, title_bytes, title_length); + + UnlockDisplay(dpy); + SyncHandle(); + TRACE("FrameSetTitle... return True"); + return True; +} diff --git a/nx-X11/lib/windows/windowswm.h b/nx-X11/lib/windows/windowswm.h new file mode 100755 index 000000000..2c3379f6e --- /dev/null +++ b/nx-X11/lib/windows/windowswm.h @@ -0,0 +1,195 @@ +/* + * WindowsWM extension is based on AppleWM extension + * Authors: Kensuke Matsuzaki + */ +/************************************************************************** + +Copyright (c) 2002 Apple Computer, Inc. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sub license, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice (including the +next paragraph) shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +**************************************************************************/ + +#ifndef _WINDOWSWM_H_ +#define _WINDOWSWM_H_ + +#include <X11/Xfuncproto.h> + +#define X_WindowsWMQueryVersion 0 +#define X_WindowsWMFrameGetRect 1 +#define X_WindowsWMFrameDraw 2 +#define X_WindowsWMFrameSetTitle 3 +#define X_WindowsWMDisableUpdate 4 +#define X_WindowsWMReenableUpdate 5 +#define X_WindowsWMSelectInput 6 +#define X_WindowsWMSetFrontProcess 7 + +/* Events */ +#define WindowsWMControllerNotify 0 +#define WindowsWMActivationNotify 1 +#define WindowsWMNumberEvents 2 + +#define WindowsWMControllerNotifyMask (1L << 0) +#define WindowsWMActivationNotifyMask (1L << 1) + +/* "Kinds" of ControllerNotify events */ +#define WindowsWMMinimizeWindow 0 +#define WindowsWMMaximizeWindow 1 +#define WindowsWMRestoreWindow 2 +#define WindowsWMCloseWindow 3 +#define WindowsWMBringAllToFront 4 +#define WindowsWMHideWindow 5 +#define WindowsWMMoveWindow 6 +#define WindowsWMResizeWindow 7 +#define WindowsWMActivateWindow 8 + +/* "Kinds" of ActivationNotify events */ +#define WindowsWMIsActive 0 +#define WindowsWMIsInactive 1 + +/* Errors */ +#define WindowsWMClientNotLocal 0 +#define WindowsWMOperationNotSupported 1 +#define WindowsWMNumberErrors (WindowsWMOperationNotSupported + 1) + +/* Possible value for frame_rect argument to XWindowsWMFrameGetRect() */ +#define WindowsWMFrameRectTitleBar 1 +#define WindowsWMFrameRectTracking 2 +#define WindowsWMFrameRectGrowBox 3 + +/* Window frame styles */ +#define WindowsWMFrameStyleBorder 0x800000 +#define WindowsWMFrameStyleCaption 0xc00000 +#define WindowsWMFrameStyleChild 0x40000000 +#define WindowsWMFrameStyleChildWindow 0x40000000 +#define WindowsWMFrameStyleClipChildren 0x2000000 +#define WindowsWMFrameStyleClipSiblings 0x4000000 +#define WindowsWMFrameStyleDisabled 0x8000000 +#define WindowsWMFrameStyleDlgFrame 0x400000 +#define WindowsWMFrameStyleGroup 0x20000 +#define WindowsWMFrameStyleHScroll 0x100000 +#define WindowsWMFrameStyleIconic 0x20000000 +#define WindowsWMFrameStyleMaximize 0x1000000 +#define WindowsWMFrameStyleMaximizeBox 0x10000 +#define WindowsWMFrameStyleMinimize 0x20000000 +#define WindowsWMFrameStyleMinimizeBox 0x20000 +#define WindowsWMFrameStyleOverlapped 0 +#define WindowsWMFrameStyleOverlappedWindow 0xcf0000 +#define WindowsWMFrameStylePopup 0x80000000 +#define WindowsWMFrameStylePopupWindow 0x80880000 +#define WindowsWMFrameStyleSizeBox 0x40000 +#define WindowsWMFrameStyleSysMenu 0x80000 +#define WindowsWMFrameStyleTabStop 0x10000 +#define WindowsWMFrameStyleThickFrame 0x40000 +#define WindowsWMFrameStyleTiled 0 +#define WindowsWMFrameStyleTiledWindow 0xcf0000 +#define WindowsWMFrameStyleVisible 0x10000000 +#define WindowsWMFrameStyleVScroll 0x200000 + +/* Window frame Ex-styles */ +#define WindowsWMFrameStyleExAcceptFiles 16 +#define WindowsWMFrameStyleExAppWindow 0x40000 +#define WindowsWMFrameStyleExClientEdge 512 +#define WindowsWMFrameStyleExComposited 0x2000000 +#define WindowsWMFrameStyleExContextHelp 0x400 +#define WindowsWMFrameStyleExControlParent 0x10000 +#define WindowsWMFrameStyleExDlgModalFrame 1 +#define WindowsWMFrameStyleExLayered 0x80000 +#define WindowsWMFrameStyleExLayoutRtl 0x400000 +#define WindowsWMFrameStyleExLeft 0 +#define WindowsWMFrameStyleExLeftScrollBar 0x4000 +#define WindowsWMFrameStyleExLtrReading 0 +#define WindowsWMFrameStyleExMDIChild 64 +#define WindowsWMFrameStyleExNoActivate 0x8000000 +#define WindowsWMFrameStyleExNoInheritLayout 0x100000 +#define WindowsWMFrameStyleExNoParentNotify 4 +#define WindowsWMFrameStyleExOverlappedWindow 0x300 +#define WindowsWMFrameStyleExPaletteWindow 0x188 +#define WindowsWMFrameStyleExRight 0x1000 +#define WindowsWMFrameStyleExRightScrollBar 0 +#define WindowsWMFrameStyleExRtlReading 0x2000 +#define WindowsWMFrameStyleExStaticEdge 0x20000 +#define WindowsWMFrameStyleExToolWindow 128 +#define WindowsWMFrameStyleExTopMost 8 +#define WindowsWMFrameStyleExTransparent 32 +#define WindowsWMFrameStyleExWindowEdge 256 + +#define WINDOWSWM_RAISE_ON_CLICK "_WINDOWSWM_RAISE_ON_CLICK" +#define WINDOWSWM_MOUSE_ACTIVATE "_WINDOWSWM_MOUSE_ACTIVATE" +#define WINDOWSWM_CLIENT_WINDOW "_WINDOWSWM_CLIENT_WINDOW" +#define WINDOWSWM_NATIVE_HWND "_WINDOWSWM_NATIVE_HWND" + +#ifndef _WINDOWSWM_SERVER_ + +typedef struct { + int type; /* of event */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came frome a SendEvent request */ + Display *display; /* Display the event was read from */ + Window window; /* window of event */ + Time time; /* server timestamp when event happened */ + int kind; /* subtype of event */ + int arg; + int x; + int y; + int w; + int h; +} XWindowsWMNotifyEvent; + +_XFUNCPROTOBEGIN + +Bool XWindowsWMQueryExtension (Display *dpy, int *event_base, int *error_base); + +Bool XWindowsWMQueryVersion (Display *dpy, int *majorVersion, + int *minorVersion, int *patchVersion); + +Bool XWindowsWMDisableUpdate (Display *dpy, int screen); + +Bool XWindowsWMReenableUpdate (Display *dpy, int screen); + +Bool XWindowsWMSelectInput (Display *dpy, unsigned long mask); + +Bool XWindowsWMSetFrontProcess (Display *dpy); + +Bool XWindowsWMFrameGetRect (Display *dpy, + unsigned int frame_style, + unsigned int frame_style_ex, + unsigned int frame_rect, + short inner_x, short inner_y, + short inner_w, short inner_h, + short *ret_x, short *ret_y, + short *ret_w, short *ret_h); + +Bool XWindowsWMFrameDraw (Display *dpy, int screen, Window window, + unsigned int frame_style, + unsigned int frame_style_ex, + short inner_x, short inner_y, + short inner_w, short inner_h); + +Bool XWindowsWMFrameSetTitle (Display *dpy, int screen, Window window, + unsigned int title_length, + const char * title_bytes); + +_XFUNCPROTOEND + +#endif /* _WINDOWSWM_SERVER_ */ +#endif /* _WINDOWSWM_H_ */ diff --git a/nx-X11/lib/windows/windowswmstr.h b/nx-X11/lib/windows/windowswmstr.h new file mode 100755 index 000000000..37ceb535a --- /dev/null +++ b/nx-X11/lib/windows/windowswmstr.h @@ -0,0 +1,169 @@ +/* + * WindowsWM extension is based on AppleWM extension + * Authors: Kensuke Matsuzaki + */ +/************************************************************************** + +Copyright (c) 2002 Apple Computer, Inc. +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sub license, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice (including the +next paragraph) shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +**************************************************************************/ + +#ifndef _WINDOWSWMSTR_H_ +#define _WINDOWSWMSTR_H_ + +#include <X11/extensions/windowswm.h> +#include <X11/X.h> +#include <X11/Xmd.h> + +#define WINDOWSWMNAME "Windows-WM" + +#define WINDOWS_WM_MAJOR_VERSION 1 /* current version numbers */ +#define WINDOWS_WM_MINOR_VERSION 0 +#define WINDOWS_WM_PATCH_VERSION 0 + +typedef struct _WindowsWMQueryVersion { + CARD8 reqType; /* always WMReqCode */ + CARD8 wmReqType; /* always X_WMQueryVersion */ + CARD16 length B16; +} xWindowsWMQueryVersionReq; +#define sz_xWindowsWMQueryVersionReq 4 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 majorVersion B16; /* major version of WM protocol */ + CARD16 minorVersion B16; /* minor version of WM protocol */ + CARD32 patchVersion B32; /* patch version of WM protocol */ + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xWindowsWMQueryVersionReply; +#define sz_xWindowsWMQueryVersionReply 32 + +typedef struct _WindowsWMDisableUpdate { + CARD8 reqType; /* always WMReqCode */ + CARD8 wmReqType; /* always X_WMDisableUpdate */ + CARD16 length B16; + CARD32 screen B32; +} xWindowsWMDisableUpdateReq; +#define sz_xWindowsWMDisableUpdateReq 8 + +typedef struct _WindowsWMReenableUpdate { + CARD8 reqType; /* always WMReqCode */ + CARD8 wmReqType; /* always X_WMReenableUpdate */ + CARD16 length B16; + CARD32 screen B32; +} xWindowsWMReenableUpdateReq; +#define sz_xWindowsWMReenableUpdateReq 8 + +typedef struct _WindowsWMSelectInput { + CARD8 reqType; /* always WMReqCode */ + CARD8 wmReqType; /* always X_WMSelectInput */ + CARD16 length B16; + CARD32 mask B32; +} xWindowsWMSelectInputReq; +#define sz_xWindowsWMSelectInputReq 8 + +typedef struct _WindowsWMNotify { + BYTE type; /* always eventBase + event type */ + BYTE kind; + CARD16 sequenceNumber B16; + Window window B32; + Time time B32; /* time of change */ + CARD16 pad1 B16; + CARD32 arg B32; + INT16 x B16; + INT16 y B16; + CARD16 w B16; + CARD16 h B16; +} xWindowsWMNotifyEvent; +#define sz_xWindowsWMNotifyEvent 28 + +typedef struct _WindowsWMSetFrontProcess { + CARD8 reqType; /* always WMReqCode */ + CARD8 wmReqType; /* always X_WMSetFrontProcess */ + CARD16 length B16; +} xWindowsWMSetFrontProcessReq; +#define sz_xWindowsWMSetFrontProcessReq 4 + +typedef struct _WindowsWMFrameGetRect { + CARD8 reqType; /* always WMReqCode */ + CARD8 wmReqType; /* always X_WMFrameGetRect */ + CARD16 length B16; + CARD32 frame_style B32; + CARD32 frame_style_ex B32; + CARD16 frame_rect B16; + INT16 ix B16; + INT16 iy B16; + CARD16 iw B16; + CARD16 ih B16; + CARD16 pad1 B16; +} xWindowsWMFrameGetRectReq; +#define sz_xWindowsWMFrameGetRectReq 24 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + INT16 x B16; + INT16 y B16; + CARD16 w B16; + CARD16 h B16; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xWindowsWMFrameGetRectReply; +#define sz_xWindowsWMFrameGetRectReply 32 + +typedef struct _WindowsWMFrameDraw { + CARD8 reqType; /* always WMReqCode */ + CARD8 wmReqType; /* always X_WMFrameDraw */ + CARD16 length B16; + CARD32 screen B32; + CARD32 window B32; + CARD32 frame_style B32; + CARD32 frame_style_ex B32; + INT16 ix B16; + INT16 iy B16; + CARD16 iw B16; + CARD16 ih B16; +} xWindowsWMFrameDrawReq; +#define sz_xWindowsWMFrameDrawReq 28 + +typedef struct _WindowsWMFrameSetTitle { + CARD8 reqType; /* always WMReqCode */ + CARD8 wmReqType; /* always X_WMFrameSetTitle */ + CARD16 length B16; + CARD32 screen B32; + CARD32 window B32; + CARD32 title_length B32; +} xWindowsWMFrameSetTitleReq; +#define sz_xWindowsWMFrameSetTitleReq 16 + +#endif /* _WINDOWSWMSTR_H_ */ |