Как отключить Quick Access TextField в приложении Eclipse RCP

Сегодня я изменил мою Eclipse IDE с 3.7 на 4.2, и у моего плагина-проекта появилась новая функция в строке состояния пользовательского интерфейса, называемая QuickAccess. Но мне это не нужно, так как я могу отключить эту функцию, потому что позиция моей панели кнопок изменилась...

5 ответов

Решение

Перейдите в Справка -> Установить новое программное обеспечение https://raw.github.com/atlanto/eclipse-4.x-filler/master/pdt_tools.eclipse-4.x-filler.update/

Установите этот плагин и перезапустите Eclipse. Быстрый доступ автоматически скрывается. или же у вас есть возможность скрыть Окно -> Скрыть быстрый доступ.

Всем, у кого такая же проблема, кажется, что эта новая функция жестко запрограммирована и не может быть отключена: / https://bugs.eclipse.org/bugs/show_bug.cgi?id=362420

Ларс Фогель только что сообщил в своем блоге " Перенос приложения RCP Eclipse 3.x на Eclipse 4.4 - теперь без коробки QuickAccess ":

Ошибка 411821 ([ QuickAccess ] Делать вклад SearchField через фрагмент или другие средства) теперь решено.
Благодаря Рене Брандштеттер:

Если приложение RCP не предоставляет элемент QuickAccess в своей модели, он не будет виден. Значит по умолчанию нет QuickAcces, достаточно просто?:)

Смотрите коммит 839ee2 для более подробной информации.

Обеспечить " QuickAccess "через фрагмент модели приложения e4 внутри" org.eclipse.ui.ide.application ".
Это удаляет QuickAccess "поле поиска от каждого нет" org.eclipse.ui.ide.application ".

Вот пост, который показывает способ скрыть это с помощью CSS. Проверено с Eclipse 4.3

Вы также можете скрыть это и заставить его работать сравнимо с тем, как он работал в Eclipse3.7: когда пользователь нажимает функциональность быстрого доступа ctrl+3 (в Eclipse4.3 по-прежнему доступен ярлык ctrl+3).

Пример кода, который вы можете добавить в свою реализацию WorkbenchWindowAdvisor (для приложения Rcl Eclipse4.3)

private IHandlerActivation quickAccessHandlerActivation;

@Override
public void postWindowOpen() {
    hideQuickAccess();
}

private void hideQuickAccess() {
    IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    setQuickAccessVisible(window, false);

    final IHandlerService service = (IHandlerService) window.getService(IHandlerService.class);
    quickAccessHandlerActivation = service.activateHandler(QUICK_ACCESS_COMMAND_ID, new CustomQuickAccessHandler());
}

private void setQuickAccessVisible(IWorkbenchWindow window, boolean visible) {
    if (window instanceof WorkbenchWindow) {
        MTrimBar topTrim = ((WorkbenchWindow) window).getTopTrim();

        for (MTrimElement element : topTrim.getChildren()) {
            if (QUICK_ACCESS_ELEMENT_ID.equals(element.getElementId())) {
                element.setVisible(visible);
                if (visible) {
                    Composite control = (Composite) element.getWidget();
                    control.getChildren()[0].addFocusListener(new QuickAccessFocusListener());
                }
                break;
            }
        }
    }
}

private class QuickAccessFocusListener implements FocusListener {

    @Override
    public void focusGained(FocusEvent e) {
        //not interested
    }

    @Override
    public void focusLost(FocusEvent e) {
        ((Control) e.widget).removeFocusListener(this);
        hideQuickAccess();
    }

}

private class CustomQuickAccessHandler extends AbstractHandler {
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
        final IHandlerService service = (IHandlerService) window.getService(IHandlerService.class);
        setQuickAccessVisible(window, true);
        if (quickAccessHandlerActivation != null) {
            service.deactivateHandler(quickAccessHandlerActivation);

            try {
                return service.executeCommand(QUICK_ACCESS_COMMAND_ID, null);
            } catch (NotDefinedException e) {

            } catch (NotEnabledException e) {

            } catch (NotHandledException e) {

            }
        }

        return null;
    }

}
Другие вопросы по тегам