summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authortorrey <torrey>2003-09-16 00:36:05 +0000
committertorrey <torrey>2003-09-16 00:36:05 +0000
commitdab99fe37dd41463271d47c81e35b50c2e59efda (patch)
tree85fcf48d6e843fda199d60fbec43a9259222bc24 /lib
parent243d432be526b50dd2de09a835501fd66d53e8dd (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.man295
-rw-r--r--lib/apple/applewm.h34
-rw-r--r--lib/apple/applewmstr.h26
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_ */