ESC-Taste im ersten Menüfenster ignorieren



  • Ich möchte, dass bei einem Menü auf der ersten Seite die Taste ESC ignoriert wird. Auf den anderen Seiten geht man im Menü mit ESC eine Ebene höher, aber auf der ersten Seite wird damit das Menü abgeschossen. Ich habe dazu folgenden Code implementiert:

      bool KeyPress(unsigned key_code) noexcept override {
        CancelTimer();
        
      /* ignore escape key at first menu page */
        switch (key_code) {
        case KEY_ESCAPE:
          StartXCSoar();
          break;
    
        default:
          return false;
        }
        return RowFormWidget::KeyPress(key_code);
      }
    

    Die Funktion StartXCSoar(); hab eich nur drin, damit ich feststellen kann, ob ich in die Bedingung reinkomme. So startet also nach dem Drücken der ESC-Taste XCSoar.- Aber nach dem Beenden von XCSoar hängt der ESC-Befehl noch in der "Warteschleife" und wird ausgeführt. Ich müsste also an der Stelle den ESC-Befehl durch einen "harmlosen" überschreiben, so dass ESC ignoriert wird. Wie könnte ich das umsetzen?



  • Überlege mal, was der Aufruf RowFormWidget::KeyPress(key_code) macht.



  • Stimmt, das war unüberlegt. Aber wie es aussieht scheint das Problem tiefer zu liegen. Ich habe nun dieses ausprobiert:

      bool KeyPress(unsigned key_code) noexcept override {
        CancelTimer();
    
      /* ignore escape key at first menu page */
        if (key_code != KEY_ESCAPE) {
    	    return RowFormWidget::KeyPress(key_code);
    	}
    	else {
            return false;
    	}
      }
    

    Das Menü beendet sich weiterhin beim Drucken der ESC-Taste. Dann habe ich geschaut, was passiert, wenn ich diesen Code leicht abändere, und die Zeile auskommentiere:

    //return RowFormWidget::KeyPress(key_code);
    

    Dann reagiert das Menü wie zu erwarten auf keinen Tastendruck, aber das Menü beendet sich dann mit jedem beliebigen Tastendruck, was es nicht tut, wenn die Taste korrekt zurück gegeben wird.



  • Vllt. solltest du dann true zurückgeben?



  • Ja, das wars. Ich dachte die ganze Zeit, es reicht, wenn KeyPress nicht mehr zurück gegeben wird, oder wenn ich den Wert für key_code verändere, so dass da kein ESC mehr interpretiert wird. Danke!!!



  • Ich glaube, der Rückgabewert true soll hier signalisieren/angeben, dass das Ereignis korrekt behandelt wurde, sprich "geerntet" wurde. Also das, was du offenbar möchtest.



  • Danke für die Erklärung!!


Anmelden zum Antworten