XWinderTM Window Manipulation Utility

v1.53  December 9th, 2004
for Mac OS
® X, Windows® 2000 & XP

Table of Contents

Changes and New Features

Intro to XWinder

System Requirements

Enabling XWinder Chords

General Usage

on Windows 2000/XP...

on Mac OS X...

Source File List


Copyright (c) 2003-2004 FingerWorks, Inc. All rights reserved. Most files in thisproject are subject to the MPL 1.1/GPL 2.0/LGPL 2.1 open-source tri-license(The License), but see individual source files for license details. You maynot use these files except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/

Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for thespecific language governing rights and limitations under the License.

Introduction to XWinderTM

With XWinder, FingerWorks introduces another fundamental advance in human-computer interaction--a simple utility that simultaneously moves and resizes application windows via intuitive motions of BOTH hands.  When TouchStream customers drop 3 fingers of both hands on the surface simultaneously, their left hand drags the upper-left window corner while their right hand drags the lower-right window corner.  Thus by 'grabbing' opposite window corners with 3 fingers, customers can move and resize applications windows in one intuitive step!  Once again, the power of multi-finger gestures eliminates several separate title-bar-click, title-bar-drag, grow-area-point, grow-area-drag steps!

TouchStream and iGesture customers can also move/resize windows with special chords of one hand.  With these chords, hand translation moves thewindow while, hand scaling motions resize the window, and hand rotation motions vary the window's aspect ratio (ratio of width to height).

Several animated demos of these XWinder capabilities our available on the FingerWorks website:


FingerWorks provides the XWinder source code under the MPL/GPL/LGPL open-source tri-license.  This means Linux,  BeOS, BSD, and other operating system enthusiasts can easily port XWinder to their favorite operating system or windowing system.

XWinder also demonstrates the power of FingerWorks' FWHID Hand Tracking SDK.  This SDK will allow developers to design their applications forhighly intuitive two-handed manipulations, like panning/zooming a CAD drawing with the left hand while the right hand draws or drags objects over large distances and scales.  With the FingerWorks HID Hand Tracking SDK, applications can receive Hand Motion Events, an extended form of mouse event that includes chording, translation/rotation/scaling motion and hand source data.  These rich, two-handed manipulations are simply impossible through the standard mouse/keyboard APIs provided by existing operating systems.

System Requirements

MultiTouch Firmware v1.52 (run the Device Firmware Upgrade in MultiTouch Utilities!)

Microsoft Windows® XP or Windows 2000

Mac OS X 10.2 Jaguar   --OR--   Mac OS X 10.3 Panther  

Third party Mac OS X mouse drivers like USB Overdrive must be UNINSTALLED, not just disabled, for HID Manager drivers used by Hand Motion SDK to work!

Linux -- Not yet implemented!

Impatient developers should look up the XWindows Window Manager APIs for grabbing the window under the pointer and changing application window bounds. Then try to reimplement src/win32/XWinderShell.c with appropriate XWindows, Linux, Gnome, and/or KDE APIs.

Enabling Hand Motion Events from your FingerWorks Product

For XWinder to receive any hand motion from your FingerWorks Product, you must:

  1. Upgrade your FingerWorks product to Firmware v1.52 or higher with the MultiTouch Utilities.
  2. Enable one or more XWinder hand event chords in the Feature Selector.

The XWinder chord options are: 

-- Thumb+Index+Pinky  --  One-handed operation by either hand.  

+   --  Must touch 3 fingers from both hands simultaneously (bimanual).

The MyGesture Editor lets you add Hand Motion Events to any other chords you like so long as you remove any mouse/key/macro gestures already assigned to those chords.  But XWinder will only respond to hand motion events from other chords if you modify the chord selection filters in XWinderCalcs.c.

XWinder General Usage

By default XWinder uses the "focus follows mouse" paradigm to grab windows.  This means when you start an XWinder hand motion chord, XWinder won't necessarily grab the topmost, "keyboard focus" window.  It will grab whatever window the mouse pointer is over.  This allows you to move/resize windows behind the topmost window, without bringing them to the front.  If you want to bring them to the front, click on them.

Once you've grabbed a window with one of the XWinder Chords that you enabled in the Feature Selector, the window won't be released until ALL fingers lift off the surface.  So you can keep dragging with just one finger, or all five if you like.

Some people find the one-handed chord (thumb+index+pinky) somewhat awkward to use.  In this case just lift index finger after the initial chord selection for comfortable rotation and scaling with just thumb and pinky.

XWinder behavior changes slightly if you drop all five fingers to the surface (after starting with thumb+index+pinky).  Hand expansions then vary window width instead of window size, and hand rotations vary window height instead of window aspect ratio.

XWinder also makes good use of taps of the one-handed XWinder chords (thumb+index+pinky):

XWinderTM on Windows® XP/2000

Configuring and Launching 

The MultiTouch Utilities installation should have put XWinder in yourStartup Folder, so it will start each time you reboot your system. If ithasn't started, you can run it by clicking on Start->Programs->FingerWorks->XWinder.exe

Once launched, XWinder does not appear as a full application with itsown windows and menus.  It just appears as this icon:

(FingerWorks hand with X)

in the Windows task/status bar (usually lower righthand corner of your screen). 

Clicking the XWinder Status icon pops up a menu with a few simple options:

Rebuilding XWinder on Windows XP or Windows 2000

To build the XWinder project, it should be kept in a sibling directory of the "FWHID_HandTracking" project.

Next open "XWinder/msdev_net/XWinder.sln" with Microsoft Visual Studio and select the XWinder on XP build target.  Click build. This should re-create XWinder/bin/XWinder.exe

For build to succeed, you may need to update "FWHID_HandTracking" header & library paths in Xcode. The build must have valid references to:

On Windows XP you can also rebuild the Hand Motion API library by opening "FWHID_HandTracking/msdev_net/fwhand.sln" with Microsoft Visual Studio and selecting the LibWinXP build target.  Click build. This should create the "FWHID_HandTracking/lib/fwhandxp.lib" static link library.  Then have XWinder link with fwhandxp.lib instead of  fwtrack.lib.

XWinder on Mac OS X

Limitations of this Version

This Mac OS X implementation of XWinder relies on the Accessibility APIs introduced in Jaguar to move and resize the selected windows.  Unfortunately, the Accessibility APIs are not as efficient  at moving/resizing asthe normal title-bar and grow-area drag mechanisms orchestrated by Mac OSX.  Depending on your processor speed, larger, more complicated applicationwindows may resize sluggishly. 

Also, some applications may not 'like' having their windows moved viathe Accessibility APIs. For instance, Microsoft Word for Mac OS X does notredraw documents properly after document windows have been moved with theAccessibility APIs. Therefore XWinder does NOT try to grab and move MicrosoftWord windows.  XWinder Beta testers should check that each of their applications redraw properly before using XWinder heavily.  If you findan application that does not play well with XWinder, please report it toFingerWorks Support so XWinder can be updated to ignore that application'swindows.

FingerWorks preliminary testing indicates that XWinder works fine with these applications:

PhotoShop Elements
Microsoft Excel
Microsoft PowerPoint

With Safari 1.2, Grab Window Under Pointer may not work with some portions (e.g. rules and table borders) of Safari browser windows. Choose Grab Key Focus Window option or put pointer over browser text before grabbing.

Carbon applications do not mind being moved by XWinder, but do not resize their internal contents when the window frame is resized by XWinder.   DreamWeaver, Internet Explorer, MyGesture Editor, and other applicationswith Java or Carbon window implementations fall in this category.

If you want better XWinder performance on Mac OS X, lobby Apple to build XWinder into Mac OS X, or to expose a high-performance Public API that utilities such as XWinder and virtual desktops can use to move/resize applicationwindows efficiently.

Configuring and Launching on Mac OS X

The MultiTouch Utilities installation should have put XWinder in your Startup Folder, so it will start each time you reboot your system. If ithasn't started, you can run it by clicking on /Applications/FingerWorks/XWinder.app

Once launched, XWinder does not appear as a full application with itsown windows and menus.  It just appears as this icon:

 (oval with omni-directional arrows)

in the status bar, next to the clock and volume status icons. 

Clicking the XWinder Status icon pops down a menu with a few simple options:

In this beta version, changes you've made to these options are NOT remembered if you restart XWinder. 

Rebuilding XWinder on Mac OS X

To build the XWinder project, it should be kept in a sibling directory of the "FWHID_HandTracking" project.

Open "XWinder.xcode" with XCode, Panther's new IDE.

For build to succeed, you may need to update "FWHID_HandTracking" header & library paths in Xcode. The build must have valid referencesto:

Inspecting Grabbed Windows on Mac OS X

The XWinder project was originally adapted from Apple's "UIElementInspector" Accessibility API sample application, available at:


These "UIElementInspector" source files implement a floating inspector window that can print various debugging information about the windows grabbed by XWinder:


These files were modified slightly from the Apple originals to work with XWinder. To enable the inspector windows for your debugging pleasure:

  1. Open MainMenu.nib in Interface Buider.
  2. Click on the 'Panel' instance.
  3. Click the 'Tools->Show Info' application menu.
  4. Check the 'Visible at Launch Time' attribute.
  5. Save MainMenu.nib and rebuild XWinder.

XWinder Source & Product File Descriptions

msdev_net/XWinder.sln  ----   Microsoft Visual Studio Solution file
msdev_net/XWinder.vcproj  ----   Microsoft Visual StudioProject file
XWinder.xcode  ----   Apple Xcode IDE Project file

include/XWinderCalcs.h   ----   Platform-independent XWinder API declarations.
src/common/XWinderCalcs.c   ----   Platform-independent computation of window motion from hand motion events

src/macosx/XWinder_Prefix.pch  ----  Precompilation header for Cocoa and Carbon includes.
src/macosx/XWinderShell.h   ----   Objective-C declarations for  XWinderShell class
src/macosx/XWinderShell.m   ----   Objective-C class that uses Accesibility API to grab, move, and resize windows

src/macosx/main.m  ----  application entry point for Cocoa
src/macosx/Info.plist ----  XWinder.app properties list file

src/win32/XWinderShell.c  ----   WinXP implementation of taskbar shell and Win32 windowmove/resize  calls
src/win32/resource.h  ----   XWinder Resources header file
src/win32/XWinder.rc  ----   XWinder Resource File (for icons, status menu, and About Dialog)

icons/   ---- XWinder icon files in various sizes and formats.

bin/XWinder.app   ---- The XWinder build product on Mac OS X.
bin/XWinder.exe   ---- The XWinder build product on Windows.


Any suggestions and/or bugs can be posted in the FingerWorks Forums, XWinder threads:


or directed to FingerWorks support at: support.html

XWinder, iGesture, TouchStream and MacNTouch are trademarks of FingerWorks, Inc.  
Microsoft® and Windows® are registered trademarks of Microsoft Corporation.  
Mac OS® is a registered trademark of  Apple Computer, Inc.