diff options
author | torrey <torrey> | 2003-09-16 00:36:05 +0000 |
---|---|---|
committer | torrey <torrey> | 2003-09-16 00:36:05 +0000 |
commit | dab99fe37dd41463271d47c81e35b50c2e59efda (patch) | |
tree | 85fcf48d6e843fda199d60fbec43a9259222bc24 /lib | |
parent | 243d432be526b50dd2de09a835501fd66d53e8dd (diff) |
XDarwin cleanup and improvements:
- Load bundle at runtime for chosen Quartz mode: xpr, cr, or fullscreen.
- AppleWM extension has been generalized to work with any Quartz mode.
Currently only the xpr implementation is complete.
- Wrote a man page for AppleWM.
- Moved hw/darwin/quartz/aqua* files that contained code to protect
the alpha channel to miext/rootless/safeAlpha.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/apple/AppleWM.man | 295 | ||||
-rw-r--r-- | lib/apple/applewm.h | 34 | ||||
-rw-r--r-- | lib/apple/applewmstr.h | 26 |
3 files changed, 322 insertions, 33 deletions
diff --git a/lib/apple/AppleWM.man b/lib/apple/AppleWM.man index 36bd31d03..9a0419bd7 100644 --- a/lib/apple/AppleWM.man +++ b/lib/apple/AppleWM.man @@ -1,8 +1,8 @@ .\" -.\" $XFree86: xc/lib/Xrandr/Xrandr.man,v 1.6 2003/06/12 14:12:28 eich Exp $ +.\" $XFree86: xc/lib/apple/AppleWM.man,v 1.1 2003/08/12 23:47:10 torrey Exp $ .\" -.\" Copyright (c) 2002 Apple Computer, Inc. -.\" All Rights Reserved. +.\" 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 @@ -35,13 +35,200 @@ AppleWM \- Apple rootless window management extension. .SH SYNTAX \&#include <X11/extensions/applewm.h> -.br -\&#include <X11/extensions/applewmstr.h> .nf .sp -List of functions will go here. +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 @@ -52,7 +239,101 @@ the Mac OS X Aqua user interface when running X11 in a rootless mode. A more complete description will be forthcoming eventually. .SH FUNCTIONS -Detailed description of functions will go here. +.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 diff --git a/lib/apple/applewm.h b/lib/apple/applewm.h index f3580138e..884d5cb91 100644 --- a/lib/apple/applewm.h +++ b/lib/apple/applewm.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/dri/xf86dri.h,v 1.7 2000/12/07 20:26:02 dawes Exp $ */ +/* $XFree86: xc/lib/apple/applewm.h,v 1.1 2003/08/12 23:47:10 torrey Exp $ */ /************************************************************************** Copyright (c) 2002 Apple Computer, Inc. @@ -87,6 +87,38 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define AppleWMWindowLevelDesktop 4 #define AppleWMNumWindowLevels 5 +/* Possible value for frame_rect argument to XAppleWMFrameGetRect() */ +#define AppleWMFrameRectTitleBar 1 +#define AppleWMFrameRectTracking 2 +#define AppleWMFrameRectGrowBox 3 + +/* Window frame classes */ +#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 + +/* Window frame attributes */ +#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 + #ifndef _APPLEWM_SERVER_ typedef struct { diff --git a/lib/apple/applewmstr.h b/lib/apple/applewmstr.h index f0c027ac5..392eaa885 100644 --- a/lib/apple/applewmstr.h +++ b/lib/apple/applewmstr.h @@ -1,4 +1,4 @@ -/* $XFree86: xc/lib/GL/dri/xf86dristr.h,v 1.9 2001/03/21 16:01:08 dawes Exp $ */ +/* $XFree86: xc/lib/apple/applewmstr.h,v 1.1 2003/08/12 23:47:10 torrey Exp $ */ /************************************************************************** Copyright (c) 2002 Apple Computer, Inc. @@ -223,28 +223,4 @@ typedef struct _AppleWMFrameDraw { } xAppleWMFrameDrawReq; #define sz_xAppleWMFrameDrawReq 36 -#ifdef _APPLEWM_SERVER_ - -void AppleWMExtensionInit( -#if NeedFunctionPrototypes - void -#endif -); - -void AppleWMSendEvent ( -#if NeedFunctionPrototypes - int /* type */, - unsigned int /* mask */, - int /* which */, - int /* arg */ -#endif -); - -unsigned int AppleWMSelectedEvents ( -#if NeedFunctionPrototypes - void -#endif -); - -#endif /* _APPLEWM_SERVER_ */ #endif /* _APPLEWMSTR_H_ */ |