Desktop
Der Desktop ist die Oberfläche, auf der alle Applikationen optisch
aufsetzen. Allerdings stehen seine Funktionen dem Programmierer nicht
bibliotheksartig zur Verfügung. Vielmehr handelt es sich um eine
eigenständige Anwendung. Die Besonderheit des Desktops liegt darin,
daß es das erste Applikationsprogramm ist, das gestartet wird und damit
die grafische Oberfläche initialisiert. Ferner wird der physikalische
Bildschirm mehr oder weniger deutlich als Fenster des Desktops betrachtet,
in dem sämtliche Applikationen ihre Fenster quasi als Unterfenster
aufbauen.
In seiner Funktion als Elternprozeß aller Applikationen hat der Desktop
zusätzlich eine wichtige Funktion als Kommunikationspartner der Anwendung.
Eine Sonderstellung hat der Desktop des X Window Systems, wo er
Window-Manager
genannt wird. Dieser übernimmt die Rahmengestaltung der Fenster,
die damit nicht direkt durch das Programm beeinflußt werden kann. Da es
unterschiedliche Window-Manager
gibt,
ist die Unterstützung der Rahmenelemente verschieden.
Wegen der Austauschbarkeit des Window-Managers gibt es sogar die
Möglichkeit, daß der X-Server nur ein Anwendungsprogramm eines anderen
Systems ist. Für OS/2 wird ein solches Programm mit dem
TCP/IP-Kommunikationspaket mitgeliefert. Dabei übernimmt der Presentation
Manager die Aufgaben des Window-Managers. Damit laufen
X-Window-Programme parallel zu PM-Anwendungen in einem gewöhnlichen
PM-Fensterrahmen.
Bei Macintosh und GEM ist der Desktop vergleichbar mit der Shell unter
UNIX. Von ihm aus werden die Programme gestartet. Zusätzlich integriert er
einen Datei-Manager, mit dem die alltäglichen Arbeiten, wie Kopieren und
Löschen von Dateien ausgeführt werden.
Anatomie des X Window Systems
Die Anatomie des X Window Systems unterscheidet sich an einigen Stellen
nicht unerheblich von denen der anderen Oberflächen. Der Grund liegt
einmal in der Netzwerkfähigkeit von X und andererseits in der Verwendung
der Widget-Sets.
X-Server
Der X-Server ist ein eigenständiges Programm, das die
Hardware-Abhängigkeiten eines X-Terminals verbirgt und über das
X-Protokoll angesprochen wird. Dieses Protokoll kann auf einer
Interprozeß-Kommunikation oder auf einem Netzwerkprotokoll basieren.
Der X-Server erhält alle Anforderungen zur Ausgabe über das X-Protokoll
von der Anwendung, die in diesem Zusammenhang als X-Client bezeichnet
wird. Neben dem Bildschirm verwaltet der X-Server die Tastatur und die
Maus. Jede der Aktionen, die von dort ausgehen, sendet der X-Server
wiederum an den Client. Da alle Aktionen über das Protokoll erfolgen, kann
der X-Server sowohl auf der gleichen Maschine wie der X-Client laufen oder
auf einem beliebigen anderen Computer im Netzwerk. Dabei muß der X-Server
nicht einmal das gleiche Betriebssystem benutzen wie der X-Client.
Xlib
Eine Anwendung unter X muß das X-Protokoll selbst gar nicht
beherrschen. Typischerweise wendet es sich dazu an die Xlib. Die Xlib
enthält alle Bestandteile, die zu einer normalen Grafikschicht gehören.
Alle Grafikausgaben werden über das X-Protokoll an den X-Server versandt.
Die Xlib verfügt aber auch über einige Objekte. So kennt die Xlib
beispielsweise Fenster und Mauszeiger. Die Xlib empfängt auch die
Ereignisse vom X-Server und verteilt diese bereits auf die angemeldeten
Fenster. Es ist möglich, Applikationen zu schreiben, die allein auf der
Xlib basieren. Ein Beispiel dafür ist xcalc, der Taschenrechner, der bei
jeder X-Auslieferung zum Standardumfang gehört.
X Toolkit Intrinsics
Die Intrinsics ist eine Bibliothek, die auf der Xlib aufsetzt und die
Verwaltung von Widgets übernimmt. Sie stellt selbst keinen Widget-Set zur
Verfügung, sondern nur die Grundwidgets und die Grundfunktionen zur
Erstellung eines Sets. Daneben verwaltet sie die Eigenschaften der Widgets
und stellt dem Anwendungsprogrammierer die Funktionen zum Erzeugen,
Darstellen und Entfernen von Widgets zur Verfügung.
Eine besondere Aufgabe liegt in der Verwaltung der Widget-Eigenschaften,
der sogenannten
Ressourcen.
Die Eigenschaften der Widgets, wie Farbe, Ausdehnung, Beschriftung und
Ereignisauslösung, können durch frei editierbare Dateien, die
sogenannten Ressourcedateien, verändert
werden. Die Verwaltung dieser Einstellungen wird durch die Intrinsics
übernommen.
Widget-Sets
Bei X findet der Programmierer noch eine weitere Schicht in Form der
Widgets vor. Diese bestehen aus Datenstrukturen und eingebauten
Funktionen. Während die Kontrollelemente bei den meisten
Oberflächen
eng mit dem restlichen System verknüpft sind, werden diese bei X aus einem
Rechteck aufgebaut, das die in seinem Geltungsbereich auftretenden
Ereignisse empfängt. Durch Zusatz von Eigenschaften wie Aussehen und
Reaktion auf die Ereignisse können neue Objekte erstellt werden. Dazu
erhalten diese zusätzliche Datenstrukturen, um zum Beispiel das geänderte
Aussehen festzulegen, und zusätzliche Routinen, die die hinzugekommene
Funktionalität realisieren. Auf diese Weise ``kennt'' jedes Widget sein
Aussehen und kann es jederzeit rekonstruieren.
Zu den Kontrollelementen kommen noch Management Objekte hinzu, die
Kontrollelemente und untergeordnete Management Widgets nach verschiedenen
Strategien
anordnen. All diese Objekte werden zu einer Widgetklasse zusammengenommen
und bilden die Schnittstelle des Anwendungsprogrammierers.
Zum Beispiel kann man einen Menübalken als eine Leiste
von Knöpfen betrachten. Bei Drücken eines solchen Knopfes wird dann
wiederum eine diesmal senkrechte Leiste erstellt, in der sich wiederum
Knöpfe befinden. Natürlich kommen ein paar Besonderheiten hinzu, wie zum
Beispiel die Frage, wann das Klappmenü wieder verschwindet. Aber
prinzipiell ist ein Menü nicht viel mehr als die Zusammenstellung von
Druckknöpfen.
Die ungeheure Flexibilität dieses Ansatzes hat mehrere solcher
Objektklassen entstehen lassen. Lange Zeit schien sich OSF/Motif als
Widgetklasse durchzusetzen. Es gibt daneben aber auch andere Klassen, wie
etwa die
Athena Widget Class, die zum
Standardlieferumfang von X gehört.
Ein Programm unter X basiert im Normalfall
auf einer solchen Objektklasse, die damit zum wichtigen Bestandteil der
Schnittstelle wird.
Da aber Motif lizenzpflichtig ist, setzte es im unter Linux nie durch.
Aus diesem Grund litt Linux lange unter der Unklarheit seiner grafischen
API, die das Entstehen von Anwendungsprogrammen nachhaltig verzögerte.
Man kann sicher sein, daß die Festlegung, die nun unter Linux getroffen
wird, auch bald Standard bei anderen UNIX-Systemen sein wird.
Nomenklatur
Die Widgetklassen bestehen in erster Linie aus Datenobjekten, die nicht
immer einer besonderen Nomenklatur folgen. Die von außen zugreifbaren
Funktionen werden üblicherweise nach ihren
Widgetklassen benannt. So haben Objekte und Funktionen des OSF/Motif den
Präfix Xm und
Funktionen des Athena Widget Set
Das Thema Farbe bietet ein gutes Beispiel für die Verwendung der falschen
Systemebene. Der Atari bietet eine XBIOS-Funktion Getrez an, die
die Auflösung des Bildschirms liefert. Dabei bedeutet
der Rückgabewert 0 eine Auflösung von 320 x 200 Pixel in 16 Farben, 1
eine Auflösung von 640 x 200 Pixeln in 4 Farben und 2 eine Auflösung
von 640 x 400 Pixeln monochrom.
Im Modus 1 verzerrt die Bildschirmausgabe, so daß ein Quadrat entsteht,
wenn die Waagerechten doppelt so lang sind wie die Senkrechten. Die
neueren Modelle von Atari haben inzwischen wesentlich leistungsfähigere
Bildschirmmodi und selbst bei älteren Geräten ist eine
Grafikerweiterung für wenig Geld erhältlich, die den Monochrommodus
auf ca. 700 x 440 - je nach Leistung des Monitors - erweitert. Wendet sich
das Programm an die Grafikschicht, wird es die genaue Auflösung,
die Farbtiefe und das Größenverhältnis zwischen X- und Y-Achse präzise
erfahren können. Entgegen der XBIOS-Routine sind diese Informationen nach
wie vor für alle Geräte gültig.
Ein weiteres typisches Beispiel ist die Verwendung der MS-DOS-Funktionen
zur Speicherverwaltung aus MS-Windows-Programmen. Da MS-DOS selbst nur den
Speicher innerhalb der unteren 640KByte verwalten kann, stellt MS-Windows
eigene Funktionen zur Verfügung, die auch auf den Rest des Speichers
zugreifen kann. Damit eine vernünftige Speicherauslastung stattfinden
kann, sollten die Speicheranforderungen an MS-Windows gerichtet werden.
Das Vorhandensein von gleichartigen Funktionen auf verschiedenen Ebenen
sollte den erfahrenen
Programmierer dazu verleiten, die Funktion der höheren Ebene zu verwenden.