Почему браузер eclipse swt не сфокусирован? - PullRequest
0 голосов
/ 28 мая 2020

Я работаю над приложением eclipse RCP. У меня есть страница настроек, унаследованная от IWorkbenchPreferencePage. На страницах настроек у меня есть кнопка, при нажатии на которую появляется оболочка. Оболочка всегда не в фокусе, и с ней нельзя взаимодействовать, пока не будет удалена страница настроек.

Есть ли способ установить фокус на оболочке?

Вот некоторый псевдокод страница prefence:

public class PreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

  AuthenticationManager authenticationManager = new AuthenticationManager();

  @Override
  protected void createFieldEditors() {
    final Button login = new Button(getFieldEditorParent(), SWT.PUSH);
    login.setText("Login")
    login.addSelectionListener(new SelectionListener() {
      @Override
      public void widgetSelected(final SelectionEvent se) {
        authenticationManager.run(getShell().getDisplay());
      }
    }
  }
}

public AuthenticationManager {
  public void run(@Nullable Display optionalDisplay) {
    display.asyncExec(() -> {
      // set the url & add listeners
    }
  }
}

Спасибо!

1 Ответ

0 голосов
/ 05 июня 2020

Я решил эту проблему, передав оболочку вместо отображения. Я до сих пор не могу найти соответствующую документацию по swt, объясняющую, почему это работает, но в любом случае вот как выглядит мое решение:

public class PreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

  AuthenticationManager authenticationManager = new AuthenticationManager();

  @Override
  protected void createFieldEditors() {
    final Button login = new Button(getFieldEditorParent(), SWT.PUSH);
    login.setText("Login")
    login.addSelectionListener(new SelectionListener() {
      @Override
      public void widgetSelected(final SelectionEvent se) {
        authenticationManager.run(getShell());
      }
    }
  }
}

public AuthenticationManager {
  public void run(@Nullable Shell optionalShell) {
    final Display display;
    if (optionalShell == null) {
        if (PlatformUI.isWorkbenchRunning()) {
            display = PlatformUI.getWorkbench().getDisplay();
        } else {
            display = null;
        }
    } else {
        display = optionalShell.getDisplay();
    }


    display.syncExec(() -> {
      // set the url & add listeners
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...