Up und Down Tasten funktionieren im Menü-Screen nicht

  • Hallo zusammen,


    Ich habe ein kleines Plugin geschrieben, was wunderbar funktioniert. Ich starte es vom Hauptmenü aus und irgendwann wird es mit close() beendet und ich lande wieder im Hauptmenü. Mit Up und Down Tasten funktioniert die Navigation weiterhin wie gewohnt. Nun beende ich das Menü mit Exit-Taste und gehe dann wieder ins Menü. Nun funktionieren die Up und Down Tasten nicht mehr. Zahlen-Tasten, Exit und Ok Tasten funktionieren jedoch weiterhin. Hat evtl. einer einen Tipp wo ich suchen soll?

  • Ja, das Schliessen ist kein Problem. Nur nach dem erneuten Öffnen gehen die hoch und runter Tasten nicht mehr.

  • Ja... ich wende da aber nichts illegales an... Kann man irgendwie tracen, warum das Signal nicht bis zu der Menu-Klasse durchdringt? In der Menu.py gibt es auch keinen Handler für hoch und runter Tasten, sondern nur für ok, cancel, menu und Zahlen (was ja auch weiterhin funktioniert). Und irgendwie weiß ich nicht, wo normalerweise hoch und runter gehandelt werden...

  • Das kann imho nur passieren, wenn du in deinem Plugin globale Actions überschreibst. Kannst ja mal e2 mitloggen und schauen, was es meint.

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • Das habe ich auch schon kontrolliert. Die globalActionMap fasse ich nicht an.
    BTW weißt du, an welcher Stelle Aktionen für Up/Down in der globalActionMap gesetzt werden? Bisher habe ich nur was für volumeUp/volumeDown/volumeMute und power gefunden...

  • Da der Fehler durch dein Plugin verursacht wird, wäre es hilfreicher, wenn du deinen Code zeigen würdest

    Gruss
    Dre


    Boxen (im Einsatz): DM920, DM900, DMOne
    Developer Project Merlin - we are OpenSource

  • Das sind 75 Dateien mit knapp 600KB an Quellcode. Also wenn du Zeit hast dich da einzuarbeiten kann ich das gerne tun.
    Ich habe jetzt die globalActionMap.actions vor und nach Pluginausführung verglichen. Ohne Veränderung. Mir ist immer noch nicht klar, an welcher Stelle up/down Aktionen der Liste im Menü abgewickelt werden...

  • Ja, ich habe da Actions drin (alles ActionMap). Wie kann ich denn da was überschreiben? Alle Actions werden ja durch den Aufruf von "execEnd" beim Schliessen aus e2 entbunden.

  • execEnd finde ich in meinem plugin nicht.

    Du rufst doch irgendwann close() auf, um das Plugin zu beenden oder? Diese Methode sorgt dann letztendlich dafür, dass für jede aktive Komponente ein execEnd aufgerufen wird. Die ActionMap führt in diesem Fall ein unbindAction druch.

  • ja, close rufe ich natuerlich auf... hab mir aber noch nie gedanken gemacht, was da alles passiert.
    aber alle tasten haben hinterher immer noch funktioniert :smiling_face:



    3 Mal editiert, zuletzt von alpha ()

  • Hallo zusammen,


    das Problem habe ich gefunden. Wollte kurz die Ursache beschreiben, evtl. hilft das dem einen oder dem anderen bei der Fehlersuche. Und zwar: jede Listbox bindet beim Erstellen ihre eigene Action und ist somit in der Lage per Default auf Tasten zu reagieren.

    Code
    ePtr<eActionMap> ptr;
    eActionMap::getInstance(ptr);
    ptr->bindAction("ListboxActions", 0, 0, this);

    Mit dem Destruktor wird diese Action entfernt.

    Code
    eListbox::~eListbox()
    {
    if (m_scrollbar)
    delete m_scrollbar;
    
    ePtr<eActionMap> ptr;
    eActionMap::getInstance(ptr);
    ptr->unbindAction(this, 0);
    }


    In meinem Code hatte ich eine zirkuläre Abhängigkeit zwischen den Objekten. Dies führte dazu, dass Python mit seinem Reference Counter die Objekte nicht sofort entfernt hat. Also blieb meine Listbox weiterhin im Speicher und der Destruktor wurde nicht aufgerufen. Sie bekam weiterhin die Action-Events und die anderen Listboxen gingen leer aus.