Titelzeile von Firefox auslese

Anfängerfragen zum Programmieren mit PureBasic.
Dark
Beiträge: 93
Registriert: 24.08.2007 20:36
Kontaktdaten:

Re: Titelzeile von Firefox auslese

Beitrag von Dark »

teamO hat geschrieben:ganz verstanden hab ich aber noch nicht, was da abgeht. kommen die Funktionen mit dem X am anfang von dem XServer
Um zu verstehen wie das ganze funktioniert, sollte man verstehen wie der XServer aufgebaut ist. Die Entwicklung des X Servers begann 1984 als Speicherplatz noch kostbar war. Man wollte aus diesem Grund den Code zum Zeichnen nicht in jedes Programm herein packen. Damals unterstütze Unix jedoch noch keine shared Libraries, also war die Lösung des Problems, ein Programm zu erschaffen (den XServer), welches den ganzen Code für die Zeichenbefehle enthält. In jedes Programm sollte dann nur noch eine kleine Library gelinkt werden, welche eine Verbindung zu diesem Programm aufbaut. Dieser Aufbau ermöglicht es außerdem zwischen dem Server und der Client Library eine Remote Verbindungen über ein Netzwerk herzustellen.

Nun zu meinem Programm:
Mein Code öffnet mit XOpenDisplay() eine Verbindung zu dem Server (welcher in der Enviroment Variable DISPLAY definiert ist) und frägt mit XInternAtom() den Wert einiger Konstanten ab.
Mit XDefaultRootWindow() bekomme ich das Hauptfenster in dem sich alle Fenster befinden. Dieses übergebe ich dann an die Funktion Enumerate(), welche für das Angegebene Fenster alle Child Windows rekursiv mit Hilfe der Funktion XQueryTree() abfrägt. Meine selbst geschriebene Funktion GetWindowName() ermittelt dann den Namen des Fensters.
Da der XServer nun einige Jahre Entwicklung hinter sich hat, wurde dieser auch immer mehr erweitert. So kann ein Programm zum Beispiel mehrere Titel für ein Fenster eintragen. Es kann ein Titel eingetragen werden, den der Window Manager anzeigen soll und ein anderer, mit dessen Hilfe andere Programme dieses Fenster wieder finden können. Jedoch kann jedes Programm entscheiden ob es nur den normalen Titel setzt oder ob es auch eine dieser Erweiterungen nutzt. Daher frage ich Prioritätsmäßig bei GetWindowName() erst die Erweiterungen ab und danach den Standard Titel.
Zum Schluß schließe ich noch die Verbindung zum Server mit XCloseDisplay().

Mehr Informationen zu den Befehlen findest du unter http://tronche.com/gui/x/xlib/.

Da ich gerade schon angefangen habe die Geschichte vom X Server zu erzählen beende ich sie auch noch :wink:.
Der XServer an sich beinhaltet jede Menge Funktionen um Linien zu Zeichnen, Farbverläufe zu malen usw. Nun, nach fast 30 Jahren hat sich die ganze Situation geändert und alle Programme haben ihre eigenen Zeichen Routinen. Es wird nur noch das fertig gezeichnete Bild an den XServer übergeben. Teilweise enthält der Code zum Zeichnen sogar Bugs, die Jahre lang nicht entdeckt werden, da schlicht weg niemand diesen Code Teil benutzt.

Daher überlegt man momentan den XServer zu ersetzen. Man hat aus diesem Grund ein Projekt namens Wayland geschaffen, welches nur noch die nötigsten Befehle enthält damit Programme ein fertig gezeichnetes Bild anzeigen können. Der Code soll damit simpler und weniger Anfällig für Bugs sein. Es gibt noch viele andere Gründe warum man den XServer ersetzen sollte, z.B. das der XServer eigene Treiber benötigt usw. Ich möchte hier jedoch nicht noch weiter vom Thema abweichen.

Mfg,
Dark
Antworten