From 642fd48af10ac29e63b33eab4545805e93a195af Mon Sep 17 00:00:00 2001 From: Aleksei Bavshin Date: Fri, 14 Jun 2019 06:44:11 -0700 Subject: [PATCH] fix(tray): restore Activate support for compliant SNI implementation Set ItemIsMenu to true by default because libappindicator supports neither ItemIsMenu nor Activate method and compiant SNI implementations are expected to reset the flag during initial property fetch. To be revisited if anyone finds the implementation that has Activate but does not set ItemIsMenu. --- include/modules/sni/item.hpp | 7 ++++++- src/modules/sni/item.cpp | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/modules/sni/item.hpp b/include/modules/sni/item.hpp index c8f835bd..a6180db1 100644 --- a/include/modules/sni/item.hpp +++ b/include/modules/sni/item.hpp @@ -46,7 +46,12 @@ class Item : public sigc::trackable { std::string menu; DbusmenuGtkMenu* dbus_menu = nullptr; Gtk::Menu* gtk_menu = nullptr; - bool item_is_menu = false; + /** + * ItemIsMenu flag means that the item only supports the context menu. + * Default value is true because libappindicator supports neither ItemIsMenu nor Activate method + * while compliant SNI implementation would always reset the flag to desired value. + */ + bool item_is_menu = true; private: void proxyReady(Glib::RefPtr& result); diff --git a/src/modules/sni/item.cpp b/src/modules/sni/item.cpp index 0d7ab695..51f97894 100644 --- a/src/modules/sni/item.cpp +++ b/src/modules/sni/item.cpp @@ -334,7 +334,7 @@ void Item::makeMenu(GdkEventButton* const& ev) { bool Item::handleClick(GdkEventButton* const& ev) { auto parameters = Glib::VariantContainerBase::create_tuple( {Glib::Variant::create(ev->x), Glib::Variant::create(ev->y)}); - if ((ev->button == 1 && (item_is_menu || !menu.empty())) || ev->button == 3) { + if ((ev->button == 1 && item_is_menu) || ev->button == 3) { makeMenu(ev); if (gtk_menu != nullptr) { #if GTK_CHECK_VERSION(3, 22, 0)