GXT: как перехватить ctrl-f4 - PullRequest
       11

GXT: как перехватить ctrl-f4

0 голосов
/ 23 августа 2011

Я бы хотел перехватить Ctrl + F4 , чтобы закрыть вкладки TabPanel, а не вкладку браузера, в которой запущено мое приложение. Следующий код работает, если я сначала щелкните внутри панели вкладок:

    Viewport v = new Viewport();
    v.setLayout(new FitLayout());

    v.add(panel);
    v.addListener(Events.KeyDown, new Listener<BaseEvent>() {
        public void handleEvent(BaseEvent be) {
            KeyEvent ce = (KeyEvent)be;
            if (ce.isControlKey()) {
                if (ce.getKeyCode() == 115) {
                    System.out.println(ce.getKeyCode() + " Ctrl-f4");
                    ce.preventDefault();
                    ce.stopEvent();
                }
            }
        };
    });

Самое смешное, что если фокус находится за пределами TabPanel (которая, очевидно, находится внутри области просмотра), событие не срабатывает.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

ctrl-f4 относится к конкретным окнам, поэтому на него не следует полагаться.

Вместо этого, чтобы поймать закрывающее окно пользователя / вкладку, используйте Window.ClosingHandler:

     Window.addWindowClosingHandler(new Window.ClosingHandler() {
        @Override
        public void onWindowClosing(ClosingEvent closingEvent) {
            closingEvent.setMessage("Closing? Really?")
        }
    });

Появится диалоговое окно браузера с вашим сообщением и кнопки подтверждения.

0 голосов
/ 24 августа 2011

Вы можете использовать ClosingHandler, чтобы перехватить событие закрытия окна и запросить у пользователя подтверждение. Однако нельзя полностью заблокировать закрытие окна / вкладки - браузер этого не допустит. Вам нужно будет выбрать другое сочетание клавиш.

После выбора ярлыка используйте NativePreviewHandler для его обнаружения:

Event.addNativePreviewHandler(new NativePreviewHandler() {
  @Override
  public void onPreviewNativeEvent(NativePreviewEvent event) {
    if (event.getTypeInt() == Event.ONKEYDOWN) {
      NativeEvent ne = event.getNativeEvent();

      if (ne.getKeyCode() == 't' && ne.getCtrlKey()) {
        // ...
      }
    }
  }
});
...