Um nochmal auf die Buffer zu kommen. Die beiden Varianten Buffer (des Fensters) im Graka oder normalen RAM sind mir klar, aber gibt es auch GUIs die direkt in den Frame-Buffer (damit meine ich direkt den Buffer den die Graka dann als nächsten Frame darstellt) schreiben? Weil ich da dann halt das Problem sehe, das dieser Buffer nicht zusammenhängend sein kann. Dafür gibt es mehrere Gründe z.B. dass das Fenster nicht den ganzen Bildschirm einnimmt oder der Offscreen-Speicher (sprich eine Zeile nimmt mehr Speicher ein als sie eigentlich müsste).
Beachte, dass du systemweite Shortcuts auch definieren können solltest.
Was genau meinst du damit? Meinst du damit sowas wie STRG+ALT+ENTF, das dann der Taskmanager aufgerufen wird oder das die Windows-Taste das Startmenü öffnet?
Solche Events würde ich gar nicht erst an ein Fenster weitersenden (oder doch?).
Außerdem sinnvoll wäre, dass du vom Fenster eine Rückmeldung bekommst, ob das Ereignis auch verarbeitet werden konnte (bzw. Fenster müssen Ereignisse zum Empfang anmelden).
Meinst du sowas wie eine Empfangsbestätigung? Wenn ja, das würde den IPC-Overhead ganz schön in die Höhe treiben und man müsste dann festlegen was eine angemessene Zeitspanne (für alle Systeme!) ist um eine Bestätigung zu bekommen.
Welchen Vorteil siehst du darin, wenn Fenster Ereignisse erst zum Empfang anmelden müssen (du meinst ja sicherlich, das sie nur Events bekommen, die sie auch bekommen wollen?)?
Spontan sehe ich nur den Vorteil, das ein wenig IPC wegfällt.
Wenn du als Hauptprogramm ein kleines Unterfenster erzeugst, dann möchtest du nicht einen vollständigen Event-Handler da reinbauen, sondern dich nebenbei auch darum kümmern können. Das heißt, dein GUI-Server leitet das an das Fenster weiter, welches das Ereignis möchte. Will es das nicht, geht das Ereignis an das nächsthöhere Fenster, bis du schlussendlich beim Root-Fenster ankommst. Beispiel: Widgets reagieren nicht auf Rechtsklick, da soll dann das System-Kontextmenü kommen. Oder so ähnlich.
Also erstmal gutes Bsp. mit den Unterfenstern, daran habe ich noch gar nicht gedacht
Meine momentane Planung sieht es vor dass das alles vom Clienten gemacht werden muss (warum auch nicht, passiert ja schließlich innerhalb seines Fensters), aber da sehe ich dann jetzt spontan Probleme mit der Konsistenz des Designs.
Wenn ich sowas aber zulassen würde, öffnet das dem Prinzip "alles ist ein Fenster" wieder die Türen und das wollte ich eigentlich vermeiden.
Ich denke, das sollte der Anwendung überlassen werden, wie sie darauf reagiert. Grundsätzlich klingt das gut.
Ich bin mir nicht sicher ob ich verstanden habe was du meinst, aber ich meinte damit das meine Standard-Bibliotheken das so handhaben sollen. Dem Programmierer steht es frei komplett alles von Hand zu schreiben, aber meine Bibliotheken werden es dann so machen.
Manche Steuerelemente haben halt einen Zustandsautomaten (du nanntest Tab-Container) und stellen selbst wieder Fenster dar.
Naja, so sehe ich das halt (noch) nicht. Bei mir gibt es per Anwendung nur ein Fenster alles was da drin ist, sind Objekte und interessieren den GUI-Server nicht mehr.
Warum nicht?
Mein momentanes Problem mit "alles ist ein Fenster" ist, das jedes Fenster einen IPC-Port hat, wo dann Events hingeschickt werden und unter Umständen können das miteinmal verdammt viele Ports werden (was auch Kernel-Speicher kostet, den ich eigentlich nicht auslagern können will) und ich brauche für viele andere Dinge auch noch Ports und wenn ich mir da z.B. so ne Webpage angucke, wo man dann ja auch sagen könnte, ok jeder Button ist ein Fenster, dann jede TextArea usw. Da kommt man schnell auf verdammt viele Ports (vorallem wenn man dann viele Tabs offen hat) und da ich ja meine Ports auch noch beschränke (128k) könnte das problematisch werden.