Подключение сигнала «нажал» к индикатору - PullRequest
1 голос
/ 12 апреля 2020

Я написал производный от PanelMenu.Button класс для оболочки 3.36, следуя инструкции по адресу:

https://wiki.gnome.org/Projects/GnomeShell/Extensions/Writing

Все работает (после нескольких 3.36- Мне нужно было сделать несколько настроек, но теперь я хотел бы, чтобы один клик левой кнопкой мыши показывал / скрывал приложение, а один клик правой кнопкой мыши открывал меню. Для этого я хотел поймать сигнал «нажал», но PanelMenu.Button испускает только menu-set. Мне нужно что-то вроде этого:

indicator.connect("clicked", () => GLib.spawn_command_line_async("my_app"));

Есть ли виджет, который поддерживает сигнал "нажал"?

1 Ответ

1 голос
/ 12 апреля 2020

Я думаю, что поиск другого виджета может оказаться более трудоемким, чем он того стоит. Если вы посмотрите здесь на реализацию, на самом деле они просто переопределяют event vfun c, чтобы открыть меню.

vfunc_event(event) {
    if (this.menu &&
        (event.type() == Clutter.EventType.TOUCH_BEGIN ||
         event.type() == Clutter.EventType.BUTTON_PRESS))
        this.menu.toggle();

    return Clutter.EVENT_PROPAGATE;
}

Если вы подклассифицировали себя и не Если вам не нужно меню, вы можете просто сделать то же самое, просто переопределив виртуальную функцию следующим образом (просто поместите это в свой подкласс как обычную функцию):

vfunc_event() {
    if ((event.type() == Clutter.EventType.TOUCH_BEGIN ||
         event.type() == Clutter.EventType.BUTTON_PRESS))
        GLib.spawn_command_line_async("my_app");

    return Clutter.EVENT_PROPAGATE;
}

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

...