mir fiel gerade ein sehr seltsames Verhalten von XbpMenuBar() bzw. XbpMenu() auf.
Im Rahmen eines Auftrags suche ich nach ein paar Möglichkeiten, das Menü-System ein wenig aufzubohren. Ein erster Ansatzpunkt war der Callback :itemMarked.
Ich lasse also mein Programm über XppDbg laufen - in dem Moment, wo ich das erste Element des XbpMenu() mit der Maus "berühre" (nicht: klicke!) hält der Debugger in meiner Funktion an, die ich im Callback-Slot eingetragen habe, da ein Menü-Eintrag "marked" ist. Aber das Menü wird weiterhin bedient, d.h. ich kann mit der Maus drüberfahren, andere Untermenüs aufmachen, sogar einen Eintrag auswählen, während das Programm im Debugger steht.
Ich habe sogar die Thread-IDs in Main() und in meiner Funktion abgerufen, um sicherzustellen, dass meine Funktion nicht in einem anderen Thread ausgeführt wird. (Da es sich noch um einen Test handelt, verwende ich aktuell keine Threads.)
Meine Vermutung ist, dass grosse Teile der XbpMenuBar()/XbpMenu() NICHT über den Event-Loop laufen, sondern nur eine Handvoll Ereignisse tatsächlich durch den Event-Loop laufen, darunter :itemMarked.
Sobald ich übrigens im Debugger F5 drücke, wird die Funktion ausgeführt, die ich - während der Debugger in der Callback-Funktion stand - ausgewählt habe.
Also, das Programm steht quasi in dieser Anweisung:
Code: Alles auswählen
oXbp:handleEvent(nEvent, mp1, mp2)
Hat einer von Euch eine Erklärung?