<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://wearables.unisa.edu.au/mpx" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>MPX: The Multi-Pointer X Server - </title>
 <link>http://wearables.unisa.edu.au/mpx</link>
 <description>asdfasdf</description>
 <language>en</language>
<item>
 <title>Last day at Uni - shifting the blog</title>
 <link>http://wearables.unisa.edu.au/mpx/?q=node/149</link>
 <description>&lt;p&gt;Today was my last day at uni. Working here was great, since the team in the lab was not only quite knowledgable, they were also a lot of fun to hang out with. Likewise, thanks to the University I was able to publish all the code I wrote during my PhD candidature as open source, which will eventually benefit (or annoy) a lot of people. Thanks to all who helped me over the years.&lt;/p&gt;
&lt;p&gt;As part of cleaning out my desk I am shifting this blog to&lt;br /&gt;
  &lt;a href=&quot;http://who-t.blogspot.com&quot;&gt;http://who-t.blogspot.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Consider this blog to be discontinued.&lt;/p&gt;
&lt;p&gt;Likewise, in the foreseeable future, my email peter@cs... will be shut down. Please update to peter.hutterer, at the domain who-t.net.&lt;/p&gt;
&lt;br class=&quot;clear&quot; /&gt;</description>
 <comments>http://wearables.unisa.edu.au/mpx/?q=node/149#comment</comments>
 <pubDate>Mon, 30 Jun 2008 16:32:01 +0930</pubDate>
 <dc:creator>peter</dc:creator>
 <guid isPermaLink="false">149 at http://wearables.unisa.edu.au/mpx</guid>
</item>
<item>
 <title>DiamondTouch 0.3.0</title>
 <link>http://wearables.unisa.edu.au/mpx/?q=node/148</link>
 <description>&lt;p&gt;xf86-input-diamondtouch 0.3.0 is out.&lt;/p&gt;
&lt;p&gt;This is basically just to tie up some loose ends, the driver was broken since I had to orphan the blob branch. 0.3.0 builds against current master, all blob stuff is deactivated.&lt;/p&gt;
&lt;p&gt;The driver now supports multi-device hotplugging through the option &quot;NumDevices&quot;. This enables users to let the DT be hotplugged through HAL, but still create up to 4 devices in the X server to represent the required number of users.&lt;/p&gt;
&lt;p&gt;Look at &lt;a&gt;the HOTPLUG.README&lt;/a&gt; to get hotpluggy goodness.&lt;/p&gt;
&lt;p&gt;Get it while it&#039;s fresh.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://people.freedesktop.org/~whot/diamondtouch/xf86-input-diamondtouch-0.3.0.tar.bz2&quot;&gt;http://people.freedesktop.org/~whot/diamondtouch/xf86-input-diamondtouch-0.3.0.tar.bz2&lt;/a&gt;&lt;br /&gt;
MD5: 5b6f3ae84cfd38bca2c3e6fdf9057ee1  xf86-input-diamondtouch-0.3.0.tar.bz2&lt;br /&gt;
SHA1: b42e1dd23ecbcf833899d36027435b120aa65e71  xf86-input-diamondtouch-0.3.0.tar.bz2&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://people.freedesktop.org/~whot/diamondtouch/xf86-input-diamondtouch-0.3.0.tar.gz&quot;&gt;http://people.freedesktop.org/~whot/diamondtouch/xf86-input-diamondtouch-0.3.0.tar.gz&lt;/a&gt;&lt;br /&gt;
MD5: a4e97ff3407efb907b1a699949745e8d  xf86-input-diamondtouch-0.3.0.tar.gz&lt;br /&gt;
SHA1: d05a6db882c6113ab8076ffe0f8f9ef70b1ca1e0  xf86-input-diamondtouch-0.3.0.tar.gz&lt;/p&gt;
&lt;br class=&quot;clear&quot; /&gt;</description>
 <comments>http://wearables.unisa.edu.au/mpx/?q=node/148#comment</comments>
 <pubDate>Wed, 25 Jun 2008 18:00:53 +0930</pubDate>
 <dc:creator>peter</dc:creator>
 <guid isPermaLink="false">148 at http://wearables.unisa.edu.au/mpx</guid>
</item>
<item>
 <title>Multi-touch? or multi-point?</title>
 <link>http://wearables.unisa.edu.au/mpx/?q=node/147</link>
 <description>&lt;p&gt;Increasingly I get as whether MPX allows multi-touch. The answer is neither yes nor no.&lt;/p&gt;
&lt;p&gt;There is a bit of confusion out there as to what constitutes multi-touch. The simple answer &quot;deals with multiple touch points&quot; isn&#039;t quite that simple.&lt;/p&gt;
&lt;p&gt;What is &quot;touch&quot;? In user interfaces, it usually means being able to manipulate an object by touching a sensitive surface. This can be done indirectly (touchpad on the laptop) or directly (touch screens).&lt;/p&gt;
&lt;p&gt;To the X server, whether it&#039;s direct or indirect manipulation is irrelevant. What does matter though is the data the touch-device provides. Many devices reduce the touch point to a simple x/y coordinate (e.g. Wacom tablets, most touchscreens in public places, and AFAIK even the iPhone do essentially that [1]). From the X server&#039;s point, there is no difference between a mouse and such a touch device. MPX is multi-point, i.e. if your device supports multiple touch points, or you have multiple such devices, you have already won. Use them. Write software for them.&lt;/p&gt;
&lt;p&gt;But - and here&#039;s the big difference: some devices can detect the area of touch, rather than a single point. And here&#039;s where it gets interesting, as this allows gestures. Touch with a flat hand is different to the side of hand, is different to the thumb, is different to a finger. This is true &quot;touch support&quot;, and by far not commonplace yet. One of the prominent examples that supports true multi-touch is MS Surface.&lt;/p&gt;
&lt;p&gt;MPX doesn&#039;t do multi-touch. But it turns out that multi-point is the hard thing and multi-touch is quite easy (once you have multi-point) [2]. The only difference is that you have to get the information to the clients. The X server doesn&#039;t have appropriate events to send the data and last year, I dabbled with this for a few weeks [3]. The result were the BlobEvents [4], but that branch hasn&#039;t seen many updates since, mainly due to lack of time. It will come back, once I find the time to merge the blob branch into current master, clean it out, and get some public review.&lt;/p&gt;
&lt;p&gt;But for now - multi-point. Not multi-touch.&lt;/p&gt;
&lt;p&gt;[1] there are exceptions, some provide pressure on the point, wacom tablets provide tilt, etc.&lt;br /&gt;
[2] From a technical perspective. Semantically, it&#039;s quite hard to get it right.&lt;br /&gt;
[3] http://wearables.unisa.edu.au/mpx/?q=node/86&lt;br /&gt;
[4] http://wearables.unisa.edu.au/mpx/?q=node/88&lt;/p&gt;
&lt;br class=&quot;clear&quot; /&gt;</description>
 <comments>http://wearables.unisa.edu.au/mpx/?q=node/147#comment</comments>
 <category domain="http://wearables.unisa.edu.au/mpx/?q=taxonomy/term/4">General information</category>
 <pubDate>Thu, 12 Jun 2008 23:13:10 +0930</pubDate>
 <dc:creator>peter</dc:creator>
 <guid isPermaLink="false">147 at http://wearables.unisa.edu.au/mpx</guid>
</item>
<item>
 <title>So you want to build a multi-device aware application?</title>
 <link>http://wearables.unisa.edu.au/mpx/?q=tutorial</link>
 <description>&lt;p&gt;The use of Xlib for XInput has changed a bit, but not that much. This mini-tutorial shows you how to get the list of devices and how to register for events. For many applications, this is pretty much all you need.&lt;/p&gt;
&lt;p&gt;Let&#039;s get started. The two most important changes to previous versions of XInput are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;applications have to announce support for XI 2 (MPX).&lt;/li&gt;
&lt;li&gt;the list of input devices contains multiple core devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Announcing support for XI 2 is easy, just issue an &lt;i&gt;XQueryInputVersion()&lt;/i&gt; &lt;b&gt;before&lt;/b&gt; you use any other XI requests. The reason why this is necessary is simple: the behaviour of XInput has changed, and the server must know which clients suports XI 1.x, and which clients support XI 2. This way, it can change some replies accordingly to make XI 1.x clients not break. In practice, your code should look something like this:&lt;/p&gt;
&lt;pre&gt;
int main (int argc, char* * argv) {
    Display * dpy;

    dpy = XOpenDisplay(NULL);
    XQueryInputVersion(dpy, XI_2_Major, XI_2_Minor);

    /* do stuff */

    XCloseDisplay(dpy);
    return 0;
}
&lt;/pre&gt;&lt;p&gt;
Next, we want to know which devices are actually available. &lt;i&gt;XListInputDevices()&lt;/i&gt; does this for us. It returns an array with &lt;i&gt;XDeviceInfo&lt;/i&gt; structs, each of which specifies the name, id and the capabilities of the devices. In addition, the &lt;i&gt;XDeviceInfo&lt;/i&gt; also contains a &quot;use&quot; field, which is of some importance. The use field can have one of 5 values: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;IsXPointer&lt;/i&gt; for any master pointer (i.e. cursor). &lt;/li&gt;
&lt;li&gt;&lt;i&gt;IsXKeyboard&lt;/i&gt; for any master keyboard (i.e. keyboard focus)&lt;/li&gt;
&lt;li&gt;&lt;i&gt;IsXExtensionPointer&lt;/i&gt; for any physical pointer device.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;IsXExtensionKeyboard&lt;/i&gt; for any physical keyboard device.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;IsXExtensionDevice&lt;/i&gt; for any physical device that is neither pointer nor keyboard (this is fairly uncommon).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As a rule, you &lt;b&gt;never register for events on the physical devices&lt;/b&gt;. Really. The cursor and the keyboard focus are the user&#039;s input points, so focus on them. Only special applications like the GIMP or configuration apps have to worry about the others. Again some code:&lt;/p&gt;
&lt;pre&gt;
XDeviceInfo* info;
int ndevices;
int i;

info = XListInputDevices(dpy, &amp;ndevices);

for (i = 0; i &lt; ndevices; i++) {
    XDeviceInfo* current = &amp;info[i];
    printf(&quot;Found device: %s (%d)\n&quot;, current-&gt;name, current-&gt;id);
    switch(current-&gt;use) {
        case IsXExtensionPointer:
        case IsXExtensionKeyboard:
        case IsXExtensionDevice:
                /* foo() */
                break;
        case IsXPointer:
        case IsXKeyboard:
                /* bar() */
                break;
    }
}

XFreeDeviceList(info);
&lt;/pre&gt;&lt;p&gt;
Try calling &lt;i&gt;XListInputDevices&lt;/i&gt; before and after a call to &lt;i&gt;XQueryInputVersion()&lt;/i&gt;.You&#039;ll notice that the device list is significantly shorter if the server thinks you do not support XI 2.&lt;/p&gt;
&lt;p&gt;Ok. Now we know the devices, let&#039;s start using them. Writing most multi-device apps is incredibly easy: Open the device, register for events, wait for events to roll in.&lt;/p&gt;
&lt;pre&gt;
XDevice *pointer1;
XDevice *pointer2;
XEvent ev;

pointer1 = XOpenDevice(id1); /* get the ID from ListInputDevices */
pointer2 = XOpenDevice(id2);

/* register for events, see below */

while(1) {
   XNextEvent(dpy, &amp;ev);
   printf(&quot;Event type %d received\n&quot;, ev.type);
}

&lt;/pre&gt;&lt;p&gt;
Now, I left out the registering for event for now because this is historically painful. You see, the X Protocol specification requires that extension event codes are dynamically assigned at runtime. That is, while the core protocol&#039;s type &lt;i&gt;ButtonPress&lt;/i&gt; is always the same, the XI type &lt;i&gt;DeviceButtonPress&lt;/i&gt; can change from server to server (and even when you restart the server). So we need to get the type.  In addition, because we only want to register for certain device&#039;s events, we need to get the EventClass. It&#039;s easiest to think of the EventClass as the mask to register for a specific event on a specific device. Xlib provides some macros for us here:&lt;/p&gt;
&lt;pre&gt;
int type_bpress;
XEventClass cls[2];

DeviceButtonPress(pointer1, type_bpress, cls[0]);
DeviceButtonPress(pointer2, type_bpress, cls[1]);
&lt;/pre&gt;&lt;p&gt;
Now, &lt;i&gt;type_bpress&lt;/i&gt; is set to the event type for &lt;i&gt;DeviceButtonPress&lt;/i&gt; events. We can pass the same variable in both times since the type remains static for the lifetime of the server. The class however is device-specific. (Oh - and by the way, the macros re-use the arguments twice, so don&#039;t try to pass in something like (evclass++), it can be pain to debug...)&lt;/p&gt;
&lt;p&gt;Now we can complete the above example:&lt;/p&gt;
&lt;pre&gt;
XDevice *pointer1;
XDevice *pointer2;
XEvent ev;
int type_bpress;
XEventClass cls[2];

pointer1 = XOpenDevice(id1); /* get the ID from ListInputDevices */
pointer2 = XOpenDevice(id2);

/* register for events */
DeviceButtonPress(pointer1, type_bpress, cls[0]);
DeviceButtonPress(pointer2, type_bpress, cls[1]);
XSelectExtensionEvent(dpy, myWindow, cls, 2);

while(1) {
   XNextEvent(dpy, &amp;ev);
   printf(&quot;Event type %d received\n&quot;, ev.type);
   if (ev.type == type_bpress)
   {
        XDeviceButtonEvent* bev = (XDeviceButtonEvent*)&amp;ev;
        printf(&quot;Press received by device %d\n&quot;, bev-&gt;deviceid);
   }
}

&lt;/pre&gt;&lt;p&gt;Here&#039;s another important change in XI 2. Events always contain coordinates in the screen&#039;s coordinate system, only valuators are device-specific. So for most apps, you don&#039;t have to worry about coordinate conversion, just use x_root, y_root  or x/y of the XDeviceButtonEvent structure.&lt;/p&gt;
&lt;p&gt;That&#039;s it for now. There&#039;s a number of other macros such as &lt;i&gt;DeviceMotionNotify&lt;/i&gt;, all to be found in &lt;/i&gt;XInput.h&lt;/i&gt;. All the functions described here have man pages that explain the parameters better than I can.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://wearables.unisa.edu.au/mpx/?q=xi2_sample&quot;&gt;Click here to see the full source.&lt;/a&gt;&lt;/p&gt;
&lt;br class=&quot;clear&quot; /&gt;</description>
 <comments>http://wearables.unisa.edu.au/mpx/?q=tutorial#comment</comments>
 <category domain="http://wearables.unisa.edu.au/mpx/?q=taxonomy/term/4">General information</category>
 <pubDate>Thu, 05 Jun 2008 10:38:41 +0930</pubDate>
 <dc:creator>peter</dc:creator>
 <guid isPermaLink="false">146 at http://wearables.unisa.edu.au/mpx</guid>
</item>
<item>
 <title>MPX has been merged.</title>
 <link>http://wearables.unisa.edu.au/mpx/?q=node/144</link>
 <description>&lt;p&gt;&lt;a href=&quot;http://lists.freedesktop.org/archives/xorg/2008-May/035641.html&quot;&gt;http://lists.freedesktop.org/archives/xorg/2008-May/035641.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For those of you watching xorg-commits, you may have noticed that MPX has been&lt;br /&gt;
merged into master [1].&lt;br /&gt;
The client-side libraries and protocol headers have been merged quietly last&lt;br /&gt;
week already, this time is just the xserver itself.&lt;/p&gt;
&lt;p&gt;A change in the previously proposed schedule [2]: the XKB rework didn&#039;t make&lt;br /&gt;
it.  With the recent SSL issue and other workloads, Daniel wasn&#039;t able to get&lt;br /&gt;
it ready in time. We agreed on merging MPX without it, as it should not affect&lt;br /&gt;
XKB much anyway.&lt;/p&gt;
&lt;p&gt;A number of changes went in since the announce, the most important being the&lt;br /&gt;
return of input device cordinate scaling. Tablets can thus be used. Thanks to&lt;br /&gt;
Magnus Vigerloef for his help on this matter.&lt;/p&gt;
&lt;p&gt;The input ABI has been bumped and all the input drivers on fdo have been&lt;br /&gt;
updated to compile with the new API. You will need to get the latest version&lt;br /&gt;
however. I don&#039;t think the ABI will remain stable until the next release, but&lt;br /&gt;
I figured input modules not loading encourages people to fetch the latest&lt;br /&gt;
release rather than complaining about them not compiling anymore.&lt;/p&gt;
&lt;p&gt;The video ABI has not been bumped yet, but you _must recompile_ your video&lt;br /&gt;
driver. No API changes, a recompile is enough.&lt;/p&gt;
&lt;p&gt;As previously mentioned, existing setups should not be affected and anything&lt;br /&gt;
that changes is most likely a bug. Unless you create additional cursors/foci,&lt;br /&gt;
in which case the border between bug and broken UI paradigm is somewhat&lt;br /&gt;
blurry.&lt;/p&gt;
&lt;p&gt;For the impatient, run the following commands:&lt;br /&gt;
Update xorg/app/xinput to the most recent version.&lt;/p&gt;
&lt;p&gt;xinput --list --short&lt;br /&gt;
xinput --create-master &quot;foobar&quot;&lt;br /&gt;
xinput --reattach &quot;MyMouse&quot; &quot;foobar pointer&quot;&lt;br /&gt;
xinput --reattach &quot;MyKeyboard&quot; &quot;foobar keyboard&quot;&lt;/p&gt;
&lt;p&gt;It is at this point you have a second set of devices that work independently.&lt;br /&gt;
It is at this point that you may realise that neither GNOME, KDE, nor any&lt;br /&gt;
other environment actually works decently with multiple devices. So start&lt;br /&gt;
fixing them right now.&lt;/p&gt;
&lt;p&gt;To go back to a standard setup:&lt;/p&gt;
&lt;p&gt;xinput --reattach &quot;MyMouse&quot; &quot;Virtual core pointer&quot;&lt;br /&gt;
xinput --reattach &quot;MyKeyboard&quot; &quot;Virtual core keyboard&quot;&lt;br /&gt;
xinput --remove-master &quot;foobar pointer&quot;&lt;/p&gt;
&lt;p&gt;Have fun. Input bugs that result from the MPX merge can be assigned to me.&lt;br /&gt;
So long, and thanks for all the mice.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;br /&gt;
  Peter&lt;/p&gt;
&lt;p&gt;[1] http://lists.freedesktop.org/archives/xorg-commit/2008-May/016662.html&lt;br /&gt;
[2] http://lists.freedesktop.org/archives/xorg/2008-May/035225.html&lt;/p&gt;
&lt;br class=&quot;clear&quot; /&gt;</description>
 <comments>http://wearables.unisa.edu.au/mpx/?q=node/144#comment</comments>
 <category domain="http://wearables.unisa.edu.au/mpx/?q=taxonomy/term/2">MPX updates</category>
 <pubDate>Tue, 27 May 2008 14:32:08 +0930</pubDate>
 <dc:creator>peter</dc:creator>
 <guid isPermaLink="false">144 at http://wearables.unisa.edu.au/mpx</guid>
</item>
<item>
 <title>Tablet support is back</title>
 <link>http://wearables.unisa.edu.au/mpx/?q=node/143</link>
 <description>&lt;p&gt;With the great help of Magnus Vigerlof, plenty of emails back and forth to understand it, and finally Pippa and Ben Avery who lent me their wacom tablet over the weekend I&#039;m happy to announce that tablet support (i.e. scaling of input coordinates) is back. This was the last big chunk missing.&lt;/p&gt;
&lt;p&gt;The coordinate handling to the client is:&lt;br /&gt;
rootx/y and eventx/y of a DeviceXXXEvent are now always in screen coordinates. This eases the development of XI clients that don&#039;t really care about device coordinates.&lt;/p&gt;
&lt;p&gt;valuators0...32 are always in device coordinates, and the coordinates depend on the device mode. If the device is mode relative, the valuators are relative, if the device is mode absolute, the coordinates are absolute.&lt;/p&gt;
&lt;p&gt;One thing that we need to think about is whether we introduce a ReportingMode in addition to the device mode. ATM, it is not possible to have a device report relative coordinates if it is in absolute mode.&lt;/p&gt;
&lt;br class=&quot;clear&quot; /&gt;</description>
 <comments>http://wearables.unisa.edu.au/mpx/?q=node/143#comment</comments>
 <category domain="http://wearables.unisa.edu.au/mpx/?q=taxonomy/term/2">MPX updates</category>
 <pubDate>Sat, 24 May 2008 11:42:00 +0930</pubDate>
 <dc:creator>peter</dc:creator>
 <guid isPermaLink="false">143 at http://wearables.unisa.edu.au/mpx</guid>
</item>
<item>
 <title>MPX merge coming up</title>
 <link>http://wearables.unisa.edu.au/mpx/?q=node/142</link>
 <description>&lt;p&gt;The MPX merge has been announced.&lt;br /&gt;
&lt;a href=&quot;http://lists.freedesktop.org/archives/xorg/2008-May/035225.html&quot;&gt;http://lists.freedesktop.org/archives/xorg/2008-May/035225.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;br /&gt;
After over two years of development, MPX will be merged into master in the&lt;br /&gt;
week following the 25th of May.&lt;/p&gt;
&lt;p&gt;Any yays and nays need to be expressed ASAP.&lt;/p&gt;
&lt;p&gt;=== Stability ===&lt;br /&gt;
I&#039;m using it on my laptop and on my box at home. Most of the recent patches&lt;br /&gt;
were cleanups, and I haven&#039;t had any issues with it.&lt;br /&gt;
With the most recent patch to HW-render the cursor, I cannot tell the&lt;br /&gt;
difference between master and mpx.&lt;/p&gt;
&lt;p&gt;== Schedule ==&lt;br /&gt;
daniel is working on an xkb cleanup right now. mpx will be merged into this&lt;br /&gt;
xkb cleanup, and the combination will be merged into master.&lt;/p&gt;
&lt;p&gt;xkb-mpx merge to happen in the week of the 19th to 25th, drop onto master&lt;br /&gt;
after testing.&lt;/p&gt;
&lt;p&gt;This includes changes to x11proto, xextproto, inputproto, libXi, libX11,&lt;br /&gt;
libXext, xinput, and xserver.&lt;/p&gt;
&lt;p&gt;I also need to get a simple patch into libxcb. This must be done first, w/o&lt;br /&gt;
the libxcb patch I cannot merge.&lt;/p&gt;
&lt;p&gt;== Changes and possible issues ==&lt;br /&gt;
If you only ever use one cursor and one keyboard focus, you should not notice&lt;br /&gt;
any differences. If you do, please file a bug.&lt;/p&gt;
&lt;p&gt;The story is different for multiple input devices. Now, as far as I can tell&lt;br /&gt;
this is the first time ever anyone has had native support for multiple&lt;br /&gt;
independent input devices on the GUI. So a number of basic UI-paradigms just&lt;br /&gt;
curl up and weep when you start juggling three mice and four keyboards. &lt;/p&gt;
&lt;p&gt;I spent a lot of time trying to make the server behave well, even if the&lt;br /&gt;
application doesn&#039;t support multiple input devices. But, nothing is perfect&lt;br /&gt;
and there are some cases where the behaviour may seem weird. These behaviours&lt;br /&gt;
however should be deterministic and thus you can get used to them until the&lt;br /&gt;
applications are fixed up and actually support XI.&lt;/p&gt;
&lt;p&gt;One thing that will get lost for the time being is support for tablets. Magnus&lt;br /&gt;
is working on that, and it may be in mpx before the merge happens.&lt;/p&gt;
&lt;p&gt;== XI v2.0 ==&lt;br /&gt;
Due to the changes in server behaviour, XI will be bumped to v2.0. XI 1 is&lt;br /&gt;
still supported, albeit the server does some tricks here to not screw up your&lt;br /&gt;
settings.&lt;/p&gt;
&lt;p&gt;Any comments - please put them forward NOW before it is too late! &lt;/i&gt;&lt;/p&gt;
&lt;br class=&quot;clear&quot; /&gt;</description>
 <comments>http://wearables.unisa.edu.au/mpx/?q=node/142#comment</comments>
 <category domain="http://wearables.unisa.edu.au/mpx/?q=taxonomy/term/2">MPX updates</category>
 <pubDate>Mon, 12 May 2008 09:47:12 +0930</pubDate>
 <dc:creator>peter</dc:creator>
 <guid isPermaLink="false">142 at http://wearables.unisa.edu.au/mpx</guid>
</item>
<item>
 <title>HW rendered cursors are back.</title>
 <link>http://wearables.unisa.edu.au/mpx/?q=node/141</link>
 <description>&lt;p&gt;Pushed a simple but quite important fix yesterday.&lt;/p&gt;
&lt;p&gt;As you may know, cursors are rendered in HW these days. One benefit of this is that the cursor doesn&#039;t flicker when it is moved around. Another one is that the cursor is responsive even when the computer is under load. (This has to do with the server implementation, not with the hardware. HW cursors are updated during SIGIO handling, not during event processing, hence the responsiveness)&lt;/p&gt;
&lt;p&gt;Unfortunately, current hardware can&#039;t render arbitrary numbers of cursors, and although anholt claims that he has ideas of how to render two cursors in HW, I understand we&#039;ll be stuck with SW rendering for a while (cursors, DRI works nonetheless). SW cursors are bad, since they can be laggy. I&#039;ve been using it for a while at home, and it can be quite annoying.&lt;/p&gt;
&lt;p&gt;The solution: MPX now switches between HW and SW rendering. As long as we have only a single cursor, we use HW rendering. When the second cursor is created, the server switches to SW cursors, and then back again to HW when only one cursor is left.&lt;/p&gt;
&lt;p&gt;The side-effect: I could now drop MPX onto your machine and you wouldn&#039;t even notice that it&#039;s there until you start creating new devices. Yay.&lt;/p&gt;
&lt;br class=&quot;clear&quot; /&gt;</description>
 <comments>http://wearables.unisa.edu.au/mpx/?q=node/141#comment</comments>
 <category domain="http://wearables.unisa.edu.au/mpx/?q=taxonomy/term/2">MPX updates</category>
 <pubDate>Wed, 07 May 2008 13:58:22 +0930</pubDate>
 <dc:creator>peter</dc:creator>
 <guid isPermaLink="false">141 at http://wearables.unisa.edu.au/mpx</guid>
</item>
<item>
 <title>GIMP support is back...</title>
 <link>http://wearables.unisa.edu.au/mpx/?q=node/140</link>
 <description>&lt;p&gt;Well, that&#039;s just one of the changes, but the most visible one.&lt;/p&gt;
&lt;p&gt;In the past, the GIMP didn&#039;t work. Simply because the new device semantics state that if you grab an attached slave device, it will be detached and set to floating automatically until you ungrab again. Now, the GIMP always grabbed all extension devices, leaving you with nothing to actually control the cursor.&lt;/p&gt;
&lt;p&gt;So, one of the changes I did over the last weekend was to get some versioning support into XI. The previous one was weak, as it didn&#039;t allow the client to tell the server what it supported. A new XQueryInputVersion() call in libXi can do that now, unless this call is issued we assume that the client supports XI v1.x. &lt;/p&gt;
&lt;p&gt;For those clients that only support 1.x, we don&#039;t return the full device list but rather only the virtual core pointer, the virtual core keyboard and finally all floating extension devices. This essentially resembles a XI setup pre-MPX. As a result, the GIMP only tries to open extension devices that are already floating, leaving you with the ability to control your cursor normally. &lt;/p&gt;
&lt;p&gt;This isn&#039;t a perfect solution, as some other semantics change too but it works alright so far.&lt;/p&gt;
&lt;p&gt;Other than that, it was mainly cleanup. Including the transition of libXi to docbook xml based manpages, which should make it easier to actually write manpages now.&lt;/p&gt;
&lt;p&gt;To update, pull inputproto, libXi and xserver.&lt;/p&gt;
&lt;br class=&quot;clear&quot; /&gt;</description>
 <comments>http://wearables.unisa.edu.au/mpx/?q=node/140#comment</comments>
 <category domain="http://wearables.unisa.edu.au/mpx/?q=taxonomy/term/2">MPX updates</category>
 <pubDate>Mon, 28 Apr 2008 15:18:05 +0930</pubDate>
 <dc:creator>peter</dc:creator>
 <guid isPermaLink="false">140 at http://wearables.unisa.edu.au/mpx</guid>
</item>
<item>
 <title>Fixing some issues</title>
 <link>http://wearables.unisa.edu.au/mpx/?q=node/139</link>
 <description>&lt;p&gt;Had some fun over the weekend. Turns out the wireless desktop I bought the other day is ... well, special. The evdev driver doesn&#039;t just register a mouse, the multimedia keys on the keyboard are registered as key class on the mouse. When you press any of them, the X server thinks the mouse just pressed a key.&lt;/p&gt;
&lt;p&gt;Now as it happens, MPX wasn&#039;t really set up to cater with devices that are both mice and keyboards simultaneously. Even worse, the class copying MPX needs to do each time you change devices was quite expensive. So I&#039;ve implemented some workarounds for all that and MPX now works smoothly and stable on my home machine.&lt;/p&gt;
&lt;p&gt;I think it&#039;s getting close to being merge-able now, so please give the current version a good testing.&lt;/p&gt;
&lt;br class=&quot;clear&quot; /&gt;</description>
 <comments>http://wearables.unisa.edu.au/mpx/?q=node/139#comment</comments>
 <category domain="http://wearables.unisa.edu.au/mpx/?q=taxonomy/term/2">MPX updates</category>
 <pubDate>Tue, 15 Apr 2008 16:13:40 +0930</pubDate>
 <dc:creator>peter</dc:creator>
 <guid isPermaLink="false">139 at http://wearables.unisa.edu.au/mpx</guid>
</item>
</channel>
</rss>
