summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKensuke Matsuzaki <zakki@peppermint.jp>2003-12-05 03:37:26 +0000
committerKensuke Matsuzaki <zakki@peppermint.jp>2003-12-05 03:37:26 +0000
commit6dd56e797fdb340a29b8cd9141ba59da27119e7f (patch)
tree9891158b1d408042837b4db32d981fa8fa90b95c
file WindowsWM.man was initially added on branch CYGWIN.XACE-SELINUX-MERGE
-rw-r--r--.cvsignore19
-rw-r--r--AUTHORS3
-rw-r--r--COPYING22
-rw-r--r--ChangeLog37
-rw-r--r--Makefile.am28
-rw-r--r--NEWS0
-rw-r--r--README0
-rwxr-xr-xautogen.sh12
-rw-r--r--configure.ac48
-rw-r--r--man/.cvsignore2
-rw-r--r--man/Makefile.am24
-rw-r--r--man/WindowsWM.3340
-rw-r--r--src/.cvsignore6
-rw-r--r--src/Makefile.am9
-rwxr-xr-xsrc/windowswm.c386
-rw-r--r--windowswm.pc.in11
16 files changed, 947 insertions, 0 deletions
diff --git a/.cvsignore b/.cvsignore
new file mode 100644
index 0000000..7e2ca73
--- /dev/null
+++ b/.cvsignore
@@ -0,0 +1,19 @@
+Makefile
+Makefile.in
+aclocal.m4
+autom4te.cache
+compile
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.sub
+configure
+depcomp
+install-sh
+libtool
+ltmain.sh
+missing
+stamp-h1
+windowswm.pc
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..e7ef607
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,3 @@
+Kensuke Matsuzaki
+
+Based on the AppleWM extension, written by Apple Computer Corporation.
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..98a5f3b
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,22 @@
+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.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..bd61d05
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,37 @@
+2005-12-14 Kevin E. Martin <kem-at-freedesktop-dot-org>
+
+ * configure.ac:
+ Update package version number for final X11R7 release candidate.
+
+2005-12-05 Kevin E. Martin <kem-at-freedesktop-dot-org>
+
+ * configure.ac:
+ Add missing XORG_RELEASE_VERSION to configure.ac.
+
+2005-12-03 Kevin E. Martin <kem-at-freedesktop-dot-org>
+
+ * configure.ac:
+ Update package version number for X11R7 RC3 release.
+
+2005-12-02 Kevin E. Martin <kem-at-freedesktop-dot-org>
+
+ * configure.ac:
+ * src/Makefile.am:
+ Add check and cflags for malloc(0) returning NULL.
+
+2005-11-19 Kevin E. Martin <kem-at-freedesktop-dot-org>
+
+ * windowswm.pc.in:
+ Update pkgconfig files to separate library build-time dependencies
+ from application build-time dependencies.
+ * configure.ac:
+ Update dependencies to work with separate build roots.
+
+2005-11-09 Adam Jackson <ajax@freedesktop.org>
+
+ * configure.ac:
+ * NEWS:
+ * README:
+ * man/Makefile.am:
+ * src/Makefile.am:
+ Build fixes. Version bump for RC2 release.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..2984394
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,28 @@
+#
+# Copyright 2005 Red Hat, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Red Hat not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. Red Hat makes no
+# representations about the suitability of this software for any purpose. It
+# is provided "as is" without express or implied warranty.
+#
+# RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+SUBDIRS = src man
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = windowswm.pc
+
+EXTRA_DIST = windowswm.pc.in autogen.sh
+
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/NEWS
diff --git a/README b/README
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/README
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..904cd67
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+ORIGDIR=`pwd`
+cd $srcdir
+
+autoreconf -v --install || exit 1
+cd $ORIGDIR || exit $?
+
+$srcdir/configure --enable-maintainer-mode "$@"
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..d0f1f95
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,48 @@
+
+dnl Copyright 2005 Red Hat, Inc.
+dnl
+dnl Permission to use, copy, modify, distribute, and sell this software and its
+dnl documentation for any purpose is hereby granted without fee, provided that
+dnl the above copyright notice appear in all copies and that both that
+dnl copyright notice and this permission notice appear in supporting
+dnl documentation, and that the name of Red Hat not be used in
+dnl advertising or publicity pertaining to distribution of the software without
+dnl specific, written prior permission. Red Hat makes no
+dnl representations about the suitability of this software for any purpose. It
+dnl is provided "as is" without express or implied warranty.
+dnl
+dnl RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+dnl EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+dnl PERFORMANCE OF THIS SOFTWARE.
+dnl
+dnl Process this file with autoconf to create configure.
+
+AC_PREREQ([2.57])
+
+AC_INIT(libWindowsWM, 1.0.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], libWindowsWM)
+AM_INIT_AUTOMAKE([dist-bzip2])
+AM_MAINTAINER_MODE
+
+AM_CONFIG_HEADER(config.h)
+
+# Check for progs
+AC_PROG_CC
+AC_PROG_LIBTOOL
+
+# Check for dependencies
+PKG_CHECK_MODULES(WINDOWSWM, x11 xext xextproto windowswmproto)
+
+AC_SUBST(WINDOWSWM_CFLAGS)
+AC_SUBST(WINDOWSWM_LIBS)
+
+XORG_CHECK_MALLOC_ZERO
+XORG_RELEASE_VERSION
+
+AC_OUTPUT([Makefile
+ src/Makefile
+ man/Makefile
+ windowswm.pc])
diff --git a/man/.cvsignore b/man/.cvsignore
new file mode 100644
index 0000000..282522d
--- /dev/null
+++ b/man/.cvsignore
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/man/Makefile.am b/man/Makefile.am
new file mode 100644
index 0000000..4217bfe
--- /dev/null
+++ b/man/Makefile.am
@@ -0,0 +1,24 @@
+# Copyright 2005 Red Hat, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of Red Hat not be used in
+# advertising or publicity pertaining to distribution of the software without
+# specific, written prior permission. Red Hat makes no representations about
+# the suitability of this software for any purpose. It is provided "as is" without
+# express or implied warranty.
+#
+# RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+
+man3_MANS = \
+ WindowsWM.3
+EXTRA_DIST = $(man3_MANS)
diff --git a/man/WindowsWM.3 b/man/WindowsWM.3
new file mode 100644
index 0000000..7ca9e3c
--- /dev/null
+++ b/man/WindowsWM.3
@@ -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/src/.cvsignore b/src/.cvsignore
new file mode 100644
index 0000000..9730646
--- /dev/null
+++ b/src/.cvsignore
@@ -0,0 +1,6 @@
+.deps
+.libs
+Makefile
+Makefile.in
+*.la
+*.lo
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..f52da02
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,9 @@
+lib_LTLIBRARIES = libWindowsWM.la
+
+libWindowsWM_la_SOURCES = \
+ windowswm.c
+
+libWindowsWM_la_CFLAGS = @WINDOWSWM_CFLAGS@ @MALLOC_ZERO_CFLAGS@
+libWindowsWM_la_LIBADD = @WINDOWSWM_LIBS@
+
+libWindowsWM_la_LDFLAGS = -version-info 7:0:0 -no-undefined
diff --git a/src/windowswm.c b/src/windowswm.c
new file mode 100755
index 0000000..5d2a285
--- /dev/null
+++ b/src/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/windowswm.pc.in b/windowswm.pc.in
new file mode 100644
index 0000000..779c908
--- /dev/null
+++ b/windowswm.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: WindowsWM
+Description: The WindowsWM Library
+Version: @PACKAGE_VERSION@
+Requires.private: x11 xext
+Cflags: -I${includedir}
+Libs: -L${libdir} -lWindowsWM