Autor Thema: Wohin mit dem virtual keycode? Wie vom Treiber zum Programm?  (Gelesen 6770 mal)

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
Hi
Ich beschäftige mich jetzt schon einige tage mit der Frage, wie ich den im Treiber verarbeiteten Tastendruck zu dem richtige Programm bekomme.

Folgende Situation:
Programm A möchte eine Taste einlesen, Programm B ebenfalls.
Der User drückt 'x' - woher weiß ich jetzt zu welchen Programm das x gehört?

Das ganze mal anhand von Linux:
Linux läuft, mit KDE und 2 Terminal-fenster.

der User drückt 'x'
was passiert jetzt mit dem 'x'?
Wird 'x' jetzt erst zu dem entsprechenden tty geschickt, von tty7 dann nach KDE, von KDE dann zu dem im Vordergrund liegenden Terminal, und dieser dann an den zuletzt ausgeführten Prozess?

Demnach müssten ALLE Programme eine Art Fenster/Prozessverwaltung implementiert haben, damit diese wissen an welches Programm (child) das 'x' weiter zureichen ist!?

Mich quälen im Moment 2 Fragen:
1. Welche Methode? Taste senden, oder buffern (die Anwendung holt sich also die Taste selber)?
2. Woher weiß ich, welches Programm diese Taste bekommen soll?

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 03. March 2010, 16:42 »
Unter Linux wird ein Tastaturinterrupt ausgelöst, der erstmal an den Kernel weitergereicht wird. Der wiederum weiß, welches Programm im Vordergrund läuft (d.h. welches vituelle Terminal gerade den Fokus hat) und leitet das dorthin weiter.

Dort läuft ein X-Server, der das an das Fenster weiterleitet, welches gerade den Fokus hat. Ist normalerweise das Fenster, wo der Mauszeiger drüber schwebt, aber ein Window-Manager verwaltet das (sofern einer läuft, also quasi immer).

Zu 1.: Je nachdem, wie du deine RPC eingerichtet hast; unter Windows wird eine Message an das Handle geschickt. Wenn die Anwendung sich das selbst holen muss, endet das am Ende im Polling und damit in CPU-Last... von daher solltest du die interruptgesteuerte Art beibehalten.

Zu 2.: Dein Kernel leitet es an die Vordergrundanwendung weiter, was die damit macht, bleibt ihr überlassen. Und wenn sie selbst mehrere Fenster unterstützt, muss sie das dann halt selbst entscheiden. Für den Fokus gibt es mehrere Modelle, von "Fokus folgt Mauszeiger" bis "das zuletzt gestartete Fenster". Das kannst du dann auch wieder implementieren, wie du möchtest.

Hoffe, geholfen zu haben;

Gruß,
Svenska

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« Antwort #2 am: 03. March 2010, 17:06 »
Ok
Also entscheidet der parent-prozess darüber an welchen child-prozess die taste geschickt wird.

Danke für die ausführliche Antwort

 

Einloggen