diff --git a/src/iptux/AppIndicator.cpp b/src/iptux/AppIndicator.cpp index e66a9197..80df3aaf 100644 --- a/src/iptux/AppIndicator.cpp +++ b/src/iptux/AppIndicator.cpp @@ -4,14 +4,11 @@ #include #include -#include "iptux/Application.h" -#include "iptux/UiCoreThread.h" - namespace iptux { class IptuxAppIndicatorPrivate { public: - IptuxAppIndicatorPrivate(Application* app) : app(app) {} + IptuxAppIndicatorPrivate(IptuxAppIndicator* owner) : owner(owner) {} ~IptuxAppIndicatorPrivate() { if (indicator) { g_object_unref(indicator); @@ -20,18 +17,17 @@ class IptuxAppIndicatorPrivate { g_object_unref(menuBuilder); } } - Application* app; + IptuxAppIndicator* owner; AppIndicator* indicator; GtkBuilder* menuBuilder; static void onScrollEvent(IptuxAppIndicatorPrivate* self) { - g_action_group_activate_action(G_ACTION_GROUP(self->app->getApp()), - "open_main_window", NULL); + self->owner->sigActivateMainWindow.emit(); } }; -IptuxAppIndicator::IptuxAppIndicator(Application* app) { - this->priv = std::make_shared(app); +IptuxAppIndicator::IptuxAppIndicator(GActionGroup* action_group) { + this->priv = std::make_shared(this); // app_indicator_new is deprecated since 0.5.94, and prefer // libayatana-appindicator-glib-dev, but unfortunately it's still not stable @@ -52,16 +48,12 @@ IptuxAppIndicator::IptuxAppIndicator(Application* app) { GtkMenu* menu = GTK_MENU(gtk_menu_new_from_model(G_MENU_MODEL( gtk_builder_get_object(priv->menuBuilder, "app-indicator-menu")))); - gtk_widget_insert_action_group(GTK_WIDGET(menu), "app", - G_ACTION_GROUP(app->getApp())); + gtk_widget_insert_action_group(GTK_WIDGET(menu), "app", action_group); app_indicator_set_menu(priv->indicator, menu); g_signal_connect_swapped(priv->indicator, "scroll-event", G_CALLBACK(IptuxAppIndicatorPrivate::onScrollEvent), priv.get()); - - app->getCoreThread()->sigUnreadMsgCountUpdated.connect( - sigc::mem_fun(*this, &IptuxAppIndicator::SetUnreadCount)); } void IptuxAppIndicator::SetUnreadCount(int i) { diff --git a/src/iptux/AppIndicator.h b/src/iptux/AppIndicator.h index 33af5c31..8e3a6a1b 100644 --- a/src/iptux/AppIndicator.h +++ b/src/iptux/AppIndicator.h @@ -1,14 +1,19 @@ #pragma once -#include "iptux/Application.h" +#include +#include + +#include namespace iptux { class IptuxAppIndicatorPrivate; class IptuxAppIndicator { public: - IptuxAppIndicator(Application* app); + IptuxAppIndicator(GActionGroup* action_group); void SetUnreadCount(int count); + sigc::signal sigActivateMainWindow; + private: std::shared_ptr priv; }; diff --git a/src/iptux/AppIndicatorDummy.cpp b/src/iptux/AppIndicatorDummy.cpp index e725d982..5fa6ca09 100644 --- a/src/iptux/AppIndicatorDummy.cpp +++ b/src/iptux/AppIndicatorDummy.cpp @@ -1,7 +1,11 @@ #include "AppIndicator.h" namespace iptux { -IptuxAppIndicator::IptuxAppIndicator(Application*) { +IptuxAppIndicator::IptuxAppIndicator(GActionGroup*) { + // Dummy implementation +} + +void IptuxAppIndicator::SetUnreadCount(int) { // Dummy implementation } } // namespace iptux diff --git a/src/iptux/Application.cpp b/src/iptux/Application.cpp index 5f7c14e5..4f5616ab 100644 --- a/src/iptux/Application.cpp +++ b/src/iptux/Application.cpp @@ -126,7 +126,14 @@ void Application::onStartup(Application& self) { self.menuBuilder = gtk_builder_new_from_resource(IPTUX_RESOURCE "gtk/menus.ui"); if (self.enable_app_indicator_) { - self.app_indicator = make_shared(&self); + self.app_indicator = + make_shared(G_ACTION_GROUP(self.app)); + self.app_indicator->sigActivateMainWindow.connect([&self]() { + g_action_group_activate_action(G_ACTION_GROUP(self.app), + "open_main_window", NULL); + }); + self.cthrd->sigUnreadMsgCountUpdated.connect( + sigc::mem_fun(*self.app_indicator, &IptuxAppIndicator::SetUnreadCount)); } bool use_app_menu = true;