Korrektur von Fehlern von X Window Clients und Servern

Die Anweisung

workarounds {[+|-]absoluteInputDeviceMode
|[+|-]activeDrawInWindow
|[+|-]exposeAfterGraphicsExpose
|[+|-]exposeBeforeGraphicsExpose
|[+|-]exposeInsteadOfGraphicsExpose
|[+|-]fixPointerCoordinates
|[+|-]forgetBitGravity
|[+|-]mapDiscardExpose
|[+|-]refreshBitGravity
|[+|-]wmIgnoresMoveWindow
|[+|-]wmIncludesDecoration|none}...

dient zur Behebung von Fehlern einiger X Window Clients und Server, die bei bestimmten Konfigurationen von XmetaX auftreten, oder zur Erweiterung der Funktionalität. Diese Korrekturen sind zwar nicht immer konform zum X11-Protokoll, beeinflussen jedoch nicht das Verhalten korrekter Clients.

Die folgenden Abschnitte stellen die Probleme und die Lösungen exemplarisch dar.

Aktives Zeichnen

Ein X Window Client sollte nie aktiv zeichnen, sondern erst auf Expose- oder GraphicsExpose-Ereignisse entsprechend reagieren. Insbesondere einige Windowmanager befolgen diese Regel nicht. Sie veranlassen einen Server Grab, zeichnen aktiv und ignorieren einen oder alle Expose-Ereignisse bis zur Auflösung des Server Grabs. Ein X Window Client, der in dieser Situation keinen Server Grab veranlaßt, würde auch ohne XmetaX nicht korrekt funktionieren.

Wird ein Fenster interaktiv bewegt oder seine Größe verändert, so gibt der Windowmanager meist eine visuelle Rückmeldung, indem er wiederholt den Umriss des Fensters zeichnet. Dies geschieht mit dem Grafikoperator GXxor, damit durch erneutes Zeichnen der Umriss wieder verschwindet.

Wird in dieser Situation die Position des Screens verändert, weil er der Maus folgt (Variable Position eines Screens), wird ein Bereich des Meta-Screens sichtbar, in dem der Umriss noch nicht gezeichnet wurde. Die nun folgende Zeichenoperation, die den Umriss löschen soll, zeichnet ihn in diesem neu sichtbaren Bereich.

Diese Probleme treten bei den Windowmanagern von OpenWindows (olwm), OSF/Motif (mwm) und CDE (dtwm) auf. Jeder dieser Windowmanager kann so konfiguriert werden, daß er anstelle des Umrisses das gesamte Fenster bewegt. Allerdings gilt dies nicht für die Veränderung der Größe eines Fensters.

Das xmetax-Programm kann mit der Anweisung

workarounds activeDrawInWindow

dazu veranlaßt werden, die sichtbar gewordenen Flächen zu aktualisieren, wenn der Server Grab aufgelöst wird. Dadurch werden die falschen Reste der Umrisse beseitigt.

Ignorieren von Expose-Ereignissen

Wenn der OpenWindows-Windowmanager olwm beendet wird, zeichnet er aktiv einen Bestätigungs-Dialog. Dabei ignoriert er das erste Expose-Ereignis nach der MapWindow-Anweisung.

Ist der Bereich des Meta-Screens, in dem der Dialog erscheinen sollte, gerade nicht sichtbar, gehen die Zeichenoperationen ins Leere. Wird dann der Screen verschoben, um das Dialogfeld sichtbar zu machen, werden Expose-Ereignisse erzeugt, deren erster von olwm ignoriert wird.

Die Anweisung

workarounds mapDiscardExpose

veranlaßt das xmetax-Programm, ein zusätzliches Expose-Ereignis an den Client zu senden.

Ignorieren von GraphicsExpose-Ereignissen

Einige wenige X Window Clients ignorieren fälschlicherweise GraphicsExpose-Ereignisse in der Annahme, daß ihre Fenster stets ganz sichtbar sind. Wird etwa der Inhalt eines scrollenden Fensters immer aktiv gezeichnet statt als Reaktion auf Expose- und GraphicsExpose-Ereignisse, werden neu sichtbare Bereiche des Fensters unter Umständen nicht korrekt aktualisiert.

Die Anweisungen

workarounds exposeAfterGraphicsExpose
workarounds exposeBeforeGraphicsExpose
workarounds exposeInsteadOfGraphicsExpose

veranlassen das xmetax-Programm, für jedes GraphicsExpose-Ereignis ein Expose-Ereignis an den Client zu senden, und zwar nach, vor beziehungsweise anstelle des GraphicsExpose-Ereignisses. Das Expose-Ereignis soll das Zeichnen des neuen Fensterinhalts bewirken.

Fehlerhafte Implementierung des Konzepts der Bit Gravity

Manche X Window Clients nutzen das Konzept der Bit Gravity aus, um die neu zu zeichnenden Flächen zu minimieren. Nicht alle X Window Server implementieren dieses Konzept korrekt.

Die Anweisung

workarounds forgetBitGravity

läßt die Bit Gravity stets ausgeschaltet, und die Anweisung

workarounds refreshBitGravity

veranlaßt das xmetax-Programm, nach jeder Änderung der Größe eines Fensters dessen Inhalt vollständig zu aktualisieren.

Falsche Zeigerkoordinaten

Manche X Window Server liefern in bestimmten Situationen falsche Mauskoordinaten. Die Anweisung

workarounds fixPointerCoordinates

veranlaßt das xmetax-Programm, Mausbewegungsereignisse mit unsinnigen Koordinaten zu ignorieren und die Rückgabewerte der XQueryPointer-Anweisung zu korrigieren.

Falscher Zeigerkoordinaten-Modus

Soll ein Screen-Inhalt rotiert werden (Drehen eines Screens), versucht der XmetaX-Proxy auf einigen Architekturen (Konfiguration der X Window Server), für die direkte Steuerung des Mausabbilds ein virtuelles Eingabegerät zu verwenden. Manche X Window Server liefern fälschlicherweise absolute statt relativer Zeigerkoordinaten.

Die Anweisung

workarounds absoluteInputDeviceMode

läßt das xmetax-Programm die Zeigerkoordinaten relativ statt absolut interpretieren.

Fehlerhafter Windowmanager

Für die korrekte Funktion der Anweisung keepWindowsVisible (Größe eines Meta-Screens) mit einem fehlerhaften Windowmanager ist unter Umständen eine oder beide der folgenden Fehlerbehebungen notwendig.

Sollte der Windowmanager die Positionierung eines Fensters nach ICCCM (Inter-Client Communication Conventions Manual) verweigern, veranlaßt die Anweisung

workarounds wmIgnoresMoveWindow

den XmetaX-Proxy, das Fenster direkt zu bewegen.

Erscheint das sichtbare Fenster um die Breite der Fensterdekoration falsch positioniert, dann hilft die Anweisung

workarounds wmIncludesDecoration

Teilweise Implementierung der Protokoll-Erweiterung GLX Version 1.3

Copyright © 2018 X-Software GmbH
info@x-software.com