Skip to content
Snippets Groups Projects
Commit dd12601c authored by Sébastien Blin's avatar Sébastien Blin Committed by Adrien Béraud
Browse files

systray: fix systray on ubuntu

XDG_CURRENT_DESKTOP is not Unity anymore but Ubuntu:gnome.
Now use libayatana if built with. Else, fallback on deprecated
GtkStatusIcon.

Issue: #983
Change-Id: Ifeb661963243b853cac7d06e0d06a6c4f5d7321a
parent dcc6c718
Branches
No related tags found
No related merge requests found
......@@ -231,6 +231,8 @@ on_close_window(GtkWidget *window, G_GNUC_UNUSED GdkEvent *event, RingClient *cl
}
}
#if !HAVE_APPINDICATOR
static void
popup_menu(GtkStatusIcon *self,
guint button,
......@@ -243,6 +245,8 @@ popup_menu(GtkStatusIcon *self,
G_GNUC_END_IGNORE_DEPRECATIONS
}
#endif
static void
init_systray(RingClient *client)
{
......@@ -269,40 +273,29 @@ init_systray(RingClient *client)
gtk_widget_show_all(priv->icon_menu);
}
gboolean use_appinidcator = FALSE;
#if HAVE_APPINDICATOR
/* only use AppIndicator in Unity (Tuleap: #1440) */
const auto desktop = g_getenv("XDG_CURRENT_DESKTOP");
if (g_strcmp0("Unity", desktop) == 0 || g_strcmp0("KDE", desktop) == 0) {
use_appinidcator = TRUE;
auto indicator = app_indicator_new("jami", "jami", APP_INDICATOR_CATEGORY_COMMUNICATIONS);
app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE);
app_indicator_set_title(indicator, "jami");
/* app indicator requires a menu */
app_indicator_set_menu(indicator, GTK_MENU(priv->icon_menu));
priv->systray_icon = indicator;
auto indicator = app_indicator_new("jami", "jami", APP_INDICATOR_CATEGORY_COMMUNICATIONS);
app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE);
app_indicator_set_title(indicator, "Jami");
/* app indicator requires a menu */
app_indicator_set_menu(indicator, GTK_MENU(priv->icon_menu));
priv->systray_icon = indicator;
#else
GError *error = NULL;
GdkPixbuf* icon = gdk_pixbuf_new_from_resource("/net/jami/JamiGnome/jami-symbol-blue", &error);
if (icon == nullptr) {
g_debug("Could not load icon: %s", error->message);
g_clear_error(&error);
} else {
G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GtkStatusIcon is deprecated since 3.14, but we fallback on it
auto status_icon = gtk_status_icon_new_from_pixbuf(icon);
gtk_status_icon_set_title(status_icon, "jami");
G_GNUC_END_IGNORE_DEPRECATIONS
g_signal_connect_swapped(status_icon, "activate", G_CALLBACK(ring_window_show), client);
g_signal_connect(status_icon, "popup-menu", G_CALLBACK(popup_menu), client);
priv->systray_icon = status_icon;
}
#endif
if (!use_appinidcator) {
GError *error = NULL;
GdkPixbuf* icon = gdk_pixbuf_new_from_resource("/net/jami/JamiGnome/jami-symbol-blue", &error);
if (icon == nullptr) {
g_debug("Could not load icon: %s", error->message);
g_clear_error(&error);
} else {
G_GNUC_BEGIN_IGNORE_DEPRECATIONS // GtkStatusIcon is deprecated since 3.14, but we fallback on it
auto status_icon = gtk_status_icon_new_from_pixbuf(icon);
gtk_status_icon_set_title(status_icon, "jami");
G_GNUC_END_IGNORE_DEPRECATIONS
g_signal_connect_swapped(status_icon, "activate", G_CALLBACK(ring_window_show), client);
g_signal_connect(status_icon, "popup-menu", G_CALLBACK(popup_menu), client);
priv->systray_icon = status_icon;
}
}
}
static void
......@@ -353,7 +346,7 @@ ring_client_activate(GApplication *app)
// TODO add some args!
static void
ring_client_open(GApplication *app, GFile **file, gint /*arg3*/, const gchar* /*arg4*/)
ring_client_open(GApplication *app, GFile ** /*file*/, gint /*arg3*/, const gchar* /*arg4*/)
{
ring_client_activate(app);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment