diff --git a/.travis/cirp/install.sh b/.travis/cirp/install.sh
index 009aab7dd..242da9935 100644
--- a/.travis/cirp/install.sh
+++ b/.travis/cirp/install.sh
@@ -28,7 +28,7 @@ else
python3 --version || true
pyenv versions || true
- pyenv global 3.6
+ pyenv global 3.7
fi
pip install --upgrade pip
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e472f04aa..aa91c4552 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -526,9 +526,6 @@ set(${PROJECT_NAME}_SOURCES
src/widget/splitterrestorer.h
src/widget/style.cpp
src/widget/style.h
- src/widget/systemtrayicon.cpp
- src/widget/systemtrayicon.h
- src/widget/systemtrayicon_private.h
src/widget/tool/activatedialog.cpp
src/widget/tool/activatedialog.h
src/widget/tool/adjustingscrollarea.cpp
@@ -628,59 +625,12 @@ if (NOT DEFINED ENABLE_STATUSNOTIFIER AND UNIX AND NOT APPLE)
set(ENABLE_STATUSNOTIFIER True)
endif()
-if(${ENABLE_STATUSNOTIFIER})
- search_dependency(GDK_PIXBUF PACKAGE gdk-pixbuf-2.0 OPTIONAL)
- search_dependency(GLIB PACKAGE glib-2.0 OPTIONAL)
- search_dependency(GTK PACKAGE gtk+-2.0 OPTIONAL)
-
- if(GDK_PIXBUF_FOUND AND GLIB_FOUND AND GTK_FOUND)
- set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
- src/platform/statusnotifier/closures.c
- src/platform/statusnotifier/closures.h
- src/platform/statusnotifier/enums.c
- src/platform/statusnotifier/enums.h
- src/platform/statusnotifier/interfaces.h
- src/platform/statusnotifier/statusnotifier.c
- src/platform/statusnotifier/statusnotifier.h)
- add_definitions(-DENABLE_SYSTRAY_STATUSNOTIFIER_BACKEND=1)
- endif()
-endif()
-
if(AVFOUNDATION_FOUND)
set(${PROJECT_NAME}_SOURCES ${${PROJECT_NAME}_SOURCES}
src/platform/camera/avfoundation.mm
src/platform/camera/avfoundation.h)
endif()
-if (NOT DEFINED ENABLE_APPINDICATOR AND UNIX AND NOT APPLE)
- set(ENABLE_APPINDICATOR False)
-endif()
-
-if(${ENABLE_APPINDICATOR})
- search_dependency(APPINDICATOR PACKAGE appindicator-0.1)
- search_dependency(GDK_PIXBUF PACKAGE gdk-pixbuf-2.0)
- search_dependency(GLIB PACKAGE glib-2.0)
- search_dependency(GTK PACKAGE gtk+-2.0)
-
- if(APPINDICATOR_FOUND)
- add_definitions(-DENABLE_SYSTRAY_UNITY_BACKEND=1)
- endif()
-endif()
-
-if (NOT DEFINED ENABLE_GTK_SYSTRAY AND UNIX AND NOT APPLE)
- set(ENABLE_GTK_SYSTRAY True)
-endif()
-
-if(${ENABLE_GTK_SYSTRAY})
- if(NOT GTK_FOUND)
- search_dependency(GTK PACKAGE gtk+-2.0 OPTIONAL)
- endif()
-
- if(GTK_FOUND)
- add_definitions(-DENABLE_SYSTRAY_GTK_BACKEND=1)
- endif()
-endif()
-
if(${USE_FILTERAUDIO})
search_dependency(FILTERAUDIO LIBRARY filteraudio HEADER filter_audio.h OPTIONAL)
if(${FILTERAUDIO_FOUND})
diff --git a/INSTALL.md b/INSTALL.md
index d40e003d2..45ea8c3d9 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -87,36 +87,6 @@ of spell check).
Disabled if dependencies are missing during compilation.
-#### KDE Status Notifier / GTK tray backend
-
-| Name | Version |
-|-------------|---------|
-| [Atk] | >= 2.14 |
-| [Cairo] | |
-| [GdkPixbuf] | >= 2.31 |
-| [GLib] | >= 2.0 |
-| [GTK+] | >= 2.0 |
-| [Pango] | >= 1.18 |
-
-To disable: `-DENABLE_STATUSNOTIFIER=False -DENABLE_GTK_SYSTRAY=False`
-
-#### Unity tray backend
-
-Disabled by default.
-
-| Name | Version |
-|-------------------|-----------|
-| [Atk] | >= 2.14 |
-| [Cairo] | |
-| [DBus Menu] | >= 0.6 |
-| [GdkPixbuf] | >= 2.31 |
-| [GLib] | >= 2.0 |
-| [GTK+] | >= 2.0 |
-| [libappindicator] | >= 0.4.92 |
-| [Pango] | >= 1.18 |
-
-To enable: `-DENABLE_APPINDICATOR=True`
-
#### Snorenotify desktop notification backend
Disabled by default
@@ -772,10 +742,6 @@ Switches:
[DBus Menu]: https://launchpad.net/libdbusmenu
[FFmpeg]: https://www.ffmpeg.org/
[GCC]: https://gcc.gnu.org/
-[GdkPixbuf]: https://developer.gnome.org/gdk-pixbuf/
-[GLib]: https://wiki.gnome.org/Projects/GLib
-[GTK+]: https://www.gtk.org/
-[libappindicator]: https://launchpad.net/libappindicator
[libX11]: https://www.x.org/wiki/
[libXScrnSaver]: https://www.x.org/wiki/Releases/ModuleVersions/
[MinGW]: http://www.mingw.org/
diff --git a/src/widget/systemtrayicon.cpp b/src/widget/systemtrayicon.cpp
deleted file mode 100644
index 623f32cd1..000000000
--- a/src/widget/systemtrayicon.cpp
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- Copyright © 2015-2019 by The qTox Project Contributors
-
- This file is part of qTox, a Qt-based graphical interface for Tox.
-
- qTox is libre software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- qTox is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with qTox. If not, see .
-*/
-
-
-#include "systemtrayicon.h"
-#include "src/persistence/settings.h"
-#include
-#include
-#include
-#include
-#include
-
-SystemTrayIcon::SystemTrayIcon()
-{
- QString desktop = getenv("XDG_CURRENT_DESKTOP");
- if (desktop.isEmpty())
- desktop = getenv("DESKTOP_SESSION");
- desktop = desktop.toLower();
- if (false)
- ;
-#ifdef ENABLE_SYSTRAY_UNITY_BACKEND
- else if (desktop == "unity") {
- qDebug() << "Using Unity backend";
- gtk_init(nullptr, nullptr);
- QString settingsDir = Settings::getInstance().getSettingsDirPath();
- QFile iconFile(settingsDir + "/icon.png");
- if (iconFile.open(QIODevice::Truncate | QIODevice::WriteOnly)) {
- QFile resIconFile(":/img/icon.png");
- if (resIconFile.open(QIODevice::ReadOnly))
- iconFile.write(resIconFile.readAll());
- resIconFile.close();
- iconFile.close();
- }
- backendType = SystrayBackendType::Unity;
- unityMenu = gtk_menu_new();
- const std::string settingsDirString = settingsDir.toStdString();
- unityIndicator =
- app_indicator_new_with_path("qTox", "icon", APP_INDICATOR_CATEGORY_APPLICATION_STATUS,
- settingsDirString.c_str());
- app_indicator_set_menu(unityIndicator, GTK_MENU(unityMenu));
- }
-#endif
-#ifdef ENABLE_SYSTRAY_GTK_BACKEND
- else if (desktop == "xfce" || desktop.contains("gnome") || desktop == "mate"
- || desktop == "x-cinnamon") {
- qDebug() << "Using GTK backend";
- backendType = SystrayBackendType::GTK;
- gtk_init(nullptr, nullptr);
-
- gtkIcon = gtk_status_icon_new();
-
- gtkMenu = gtk_menu_new();
-
- void (*callbackTrigger)(GtkStatusIcon*, gpointer) = [](GtkStatusIcon*, gpointer data) {
- static_cast(data)->activated(QSystemTrayIcon::Trigger);
- };
- g_signal_connect(gtkIcon, "activate", G_CALLBACK(callbackTrigger), this);
- void (*callbackButtonClick)(GtkStatusIcon*, GdkEvent*,
- gpointer) = [](GtkStatusIcon*, GdkEvent* event, gpointer data) {
- if (event->button.button == 2)
- static_cast(data)->activated(QSystemTrayIcon::MiddleClick);
- };
- g_signal_connect(gtkIcon, "button-release-event", G_CALLBACK(callbackButtonClick), this);
- }
-#endif
- else {
- qDebug() << "Using the Qt backend";
- qtIcon = new QSystemTrayIcon;
- backendType = SystrayBackendType::Qt;
- connect(qtIcon, &QSystemTrayIcon::activated, this, &SystemTrayIcon::activated);
- }
-}
-
-SystemTrayIcon::~SystemTrayIcon()
-{
- qDebug() << "Deleting SystemTrayIcon";
- delete qtIcon;
-}
-
-QString SystemTrayIcon::extractIconToFile(QIcon icon, QString name)
-{
- QString iconPath;
- (void)icon;
- (void)name;
-#ifdef ENABLE_SYSTRAY_UNITY_BACKEND
- iconPath = Settings::getInstance().getSettingsDirPath() + "/" + name + ".png";
- QSize iconSize = icon.actualSize(QSize{64, 64});
- icon.pixmap(iconSize).save(iconPath);
-#endif
- return iconPath;
-}
-
-#if defined(ENABLE_SYSTRAY_GTK_BACKEND) || defined(ENABLE_SYSTRAY_STATUSNOTIFIER_BACKEND)
-GdkPixbuf* SystemTrayIcon::convertQIconToPixbuf(const QIcon& icon)
-{
- void (*callbackFreeImage)(guchar*, gpointer) = [](guchar* image_bytes, gpointer) {
- delete[] image_bytes;
- };
- QImage image = icon.pixmap(64, 64).toImage();
- if (image.format() != QImage::Format_RGBA8888_Premultiplied)
- image = image.convertToFormat(QImage::Format_RGBA8888_Premultiplied);
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
- guchar* image_bytes = new guchar[image.sizeInBytes()];
- memcpy(image_bytes, image.bits(), image.sizeInBytes());
-#else
- guchar* image_bytes = new guchar[image.byteCount()];
- memcpy(image_bytes, image.bits(), image.byteCount());
-#endif
- return gdk_pixbuf_new_from_data(image_bytes, GDK_COLORSPACE_RGB, image.hasAlphaChannel(), 8,
- image.width(), image.height(), image.bytesPerLine(),
- callbackFreeImage, nullptr);
-}
-#endif
-
-void SystemTrayIcon::setContextMenu(QMenu* menu)
-{
- if (false)
- ;
-#ifdef ENABLE_SYSTRAY_STATUSNOTIFIER_BACKEND
- else if (backendType == SystrayBackendType::StatusNotifier) {
- void (*callbackClick)(StatusNotifier*, gint, gint, gpointer) = [](StatusNotifier*, gint,
- gint, gpointer data) {
- static_cast(data)->activated(QSystemTrayIcon::Trigger);
- };
- g_signal_connect(statusNotifier, "activate", G_CALLBACK(callbackClick), this);
- void (*callbackMiddleClick)(StatusNotifier*, gint, gint,
- gpointer) = [](StatusNotifier*, gint, gint, gpointer data) {
- static_cast(data)->activated(QSystemTrayIcon::MiddleClick);
- };
- g_signal_connect(statusNotifier, "secondary_activate", G_CALLBACK(callbackMiddleClick), this);
-
- for (QAction* a : menu->actions()) {
- const std::string aText = a->text().replace('&', "").toStdString();
- GtkWidget* item;
- if (a->isSeparator())
- item = gtk_menu_item_new();
- else if (a->icon().isNull())
- item = gtk_menu_item_new_with_label(aText.c_str());
- else {
- GdkPixbuf* pixbuf = convertQIconToPixbuf(a->icon());
- item = gtk_image_menu_item_new_with_label(aText.c_str());
- gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
- gtk_image_new_from_pixbuf(pixbuf));
- gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(item), TRUE);
- g_object_unref(pixbuf);
- }
- gtk_menu_shell_append(GTK_MENU_SHELL(snMenu), item);
- void (*callback)(GtkMenu*, gpointer data) = [](GtkMenu*, gpointer a) {
- ((QAction*)a)->activate(QAction::Trigger);
- };
- g_signal_connect(item, "activate", G_CALLBACK(callback), a);
- gtk_widget_show(item);
- }
- void (*callbackMenu)(StatusNotifier*, gint, gint, gpointer) = [](StatusNotifier*, gint,
- gint, gpointer data) {
- gtk_widget_show_all(static_cast(data)->snMenu);
- gtk_menu_popup(GTK_MENU(static_cast(data)->snMenu), 0, 0, 0, 0, 3,
- gtk_get_current_event_time());
- };
- g_signal_connect(statusNotifier, "context-menu", G_CALLBACK(callbackMenu), this);
- }
-#endif
-#ifdef ENABLE_SYSTRAY_GTK_BACKEND
- else if (backendType == SystrayBackendType::GTK) {
- for (QAction* a : menu->actions()) {
- const std::string aText = a->text().replace('&', "").toStdString();
- GtkWidget* item;
- if (a->isSeparator())
- item = gtk_menu_item_new();
- else if (a->icon().isNull())
- item = gtk_menu_item_new_with_label(aText.c_str());
- else {
- GdkPixbuf* pixbuf = convertQIconToPixbuf(a->icon());
- item = gtk_image_menu_item_new_with_label(aText.c_str());
- gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item),
- gtk_image_new_from_pixbuf(pixbuf));
- gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(item), TRUE);
- g_object_unref(pixbuf);
- }
- gtk_menu_shell_append(GTK_MENU_SHELL(gtkMenu), item);
- void (*callback)(GtkMenu*, gpointer data) = [](GtkMenu*, gpointer a) {
- ((QAction*)a)->activate(QAction::Trigger);
- };
- g_signal_connect(item, "activate", G_CALLBACK(callback), a);
- gtk_widget_show(item);
- }
- void (*callbackMenu)(GtkMenu*, gint, gint, gpointer) = [](GtkMenu*, gint, gint, gpointer data) {
- gtk_widget_show_all(static_cast(data)->gtkMenu);
- gtk_menu_popup(GTK_MENU(static_cast(data)->gtkMenu), 0, 0, 0, 0, 3,
- gtk_get_current_event_time());
- };
- g_signal_connect(gtkIcon, "popup-menu", G_CALLBACK(callbackMenu), this);
- }
-#endif
-#ifdef ENABLE_SYSTRAY_UNITY_BACKEND
- else if (backendType == SystrayBackendType::Unity) {
- for (QAction* a : menu->actions()) {
- const std::string aText = a->text().replace('&', "").toStdString();
- GtkWidget* item;
- if (a->isSeparator())
- item = gtk_menu_item_new();
- else if (a->icon().isNull())
- item = gtk_menu_item_new_with_label(aText.c_str());
- else {
- const std::string iconPath =
- extractIconToFile(a->icon(), "iconmenu" + a->icon().name()).toStdString();
- GtkWidget* image = gtk_image_new_from_file(iconPath.c_str());
- item = gtk_image_menu_item_new_with_label(aText.c_str());
- gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
- gtk_image_menu_item_set_always_show_image(GTK_IMAGE_MENU_ITEM(item), TRUE);
- }
- gtk_menu_shell_append(GTK_MENU_SHELL(unityMenu), item);
- void (*callback)(GtkMenu*, gpointer data) = [](GtkMenu*, gpointer a) {
- static_cast(a)->activate(QAction::Trigger);
- };
- g_signal_connect(item, "activate", G_CALLBACK(callback), a);
- gtk_widget_show(item);
- }
- app_indicator_set_menu(unityIndicator, GTK_MENU(unityMenu));
- DbusmenuServer* menuServer;
- DbusmenuMenuitem* rootMenuItem;
- g_object_get(unityIndicator, "dbus-menu-server", &menuServer, nullptr);
- g_object_get(menuServer, "root-node", &rootMenuItem, nullptr);
- void (*callback)(DbusmenuMenuitem*, gpointer) = [](DbusmenuMenuitem*, gpointer data) {
- static_cast(data)->activated(QSystemTrayIcon::Unknown);
- };
- g_signal_connect(rootMenuItem, "about-to-show", G_CALLBACK(callback), this);
- }
-#endif
- else if (backendType == SystrayBackendType::Qt) {
- qtIcon->setContextMenu(menu);
- }
-}
-
-void SystemTrayIcon::show()
-{
- setVisible(true);
-}
-
-void SystemTrayIcon::hide()
-{
- setVisible(false);
-}
-
-void SystemTrayIcon::setVisible(bool newState)
-{
- if (false)
- ;
-#ifdef ENABLE_SYSTRAY_STATUSNOTIFIER_BACKEND
- else if (backendType == SystrayBackendType::StatusNotifier) {
- if (newState)
- status_notifier_set_status(statusNotifier, STATUS_NOTIFIER_STATUS_ACTIVE);
- else
- status_notifier_set_status(statusNotifier, STATUS_NOTIFIER_STATUS_PASSIVE);
- }
-#endif
-#ifdef ENABLE_SYSTRAY_GTK_BACKEND
- else if (backendType == SystrayBackendType::GTK) {
- if (newState)
- gtk_status_icon_set_visible(gtkIcon, true);
- else
- gtk_status_icon_set_visible(gtkIcon, false);
- }
-#endif
-#ifdef ENABLE_SYSTRAY_UNITY_BACKEND
- else if (backendType == SystrayBackendType::Unity) {
- if (newState)
- app_indicator_set_status(unityIndicator, APP_INDICATOR_STATUS_ACTIVE);
- else
- app_indicator_set_status(unityIndicator, APP_INDICATOR_STATUS_PASSIVE);
- }
-#endif
- else if (backendType == SystrayBackendType::Qt) {
- if (newState)
- qtIcon->show();
- else
- qtIcon->hide();
- }
-}
-
-void SystemTrayIcon::setIcon(QIcon& icon)
-{
- if (false)
- ;
-#ifdef ENABLE_SYSTRAY_STATUSNOTIFIER_BACKEND
- else if (backendType == SystrayBackendType::StatusNotifier) {
- GdkPixbuf* pixbuf = convertQIconToPixbuf(icon);
- status_notifier_set_from_pixbuf(statusNotifier, STATUS_NOTIFIER_ICON, pixbuf);
- g_object_unref(pixbuf);
- }
-#endif
-#ifdef ENABLE_SYSTRAY_GTK_BACKEND
- else if (backendType == SystrayBackendType::GTK) {
- GdkPixbuf* pixbuf = convertQIconToPixbuf(icon);
- gtk_status_icon_set_from_pixbuf(gtkIcon, pixbuf);
- g_object_unref(pixbuf);
- }
-#endif
-#ifdef ENABLE_SYSTRAY_UNITY_BACKEND
- else if (backendType == SystrayBackendType::Unity) {
- // Alternate file names or appindicator will not reload the icon
- if (app_indicator_get_icon(unityIndicator) == QString("icon2")) {
- extractIconToFile(icon, "icon");
- app_indicator_set_icon_full(unityIndicator, "icon", "qtox");
- } else {
- extractIconToFile(icon, "icon2");
- app_indicator_set_icon_full(unityIndicator, "icon2", "qtox");
- }
- }
-#endif
- else if (backendType == SystrayBackendType::Qt) {
- qtIcon->setIcon(icon);
- }
-}
-
-SystrayBackendType SystemTrayIcon::backend() const
-{
- return backendType;
-}
diff --git a/src/widget/systemtrayicon.h b/src/widget/systemtrayicon.h
deleted file mode 100644
index eca0c14bf..000000000
--- a/src/widget/systemtrayicon.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- Copyright © 2015-2019 by The qTox Project Contributors
-
- This file is part of qTox, a Qt-based graphical interface for Tox.
-
- qTox is libre software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- qTox is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with qTox. If not, see .
-*/
-
-
-#ifndef SYSTEMTRAYICON_H
-#define SYSTEMTRAYICON_H
-
-#include "systemtrayicon_private.h"
-#include
-
-class QSystemTrayIcon;
-class QMenu;
-
-class SystemTrayIcon : public QObject
-{
- Q_OBJECT
-public:
- SystemTrayIcon();
- ~SystemTrayIcon();
- void setContextMenu(QMenu* menu);
- void show();
- void hide();
- void setVisible(bool);
- void setIcon(QIcon& icon);
- SystrayBackendType backend() const;
-
-signals:
- void activated(QSystemTrayIcon::ActivationReason);
-
-private:
- QString extractIconToFile(QIcon icon, QString name = "icon");
-#if defined(ENABLE_SYSTRAY_GTK_BACKEND) || defined(ENABLE_SYSTRAY_STATUSNOTIFIER_BACKEND)
- static GdkPixbuf* convertQIconToPixbuf(const QIcon& icon);
-#endif
-
-private:
- SystrayBackendType backendType;
- QSystemTrayIcon* qtIcon = nullptr;
-
-#ifdef ENABLE_SYSTRAY_UNITY_BACKEND
- AppIndicator* unityIndicator;
- GtkWidget* unityMenu;
-#endif
-#ifdef ENABLE_SYSTRAY_STATUSNOTIFIER_BACKEND
- StatusNotifier* statusNotifier;
- GtkWidget* snMenu;
-#endif
-#ifdef ENABLE_SYSTRAY_GTK_BACKEND
- GtkStatusIcon* gtkIcon;
- GtkWidget* gtkMenu;
-#endif
-};
-
-#endif // SYSTEMTRAYICON_H
diff --git a/src/widget/systemtrayicon_private.h b/src/widget/systemtrayicon_private.h
deleted file mode 100644
index 516b8b767..000000000
--- a/src/widget/systemtrayicon_private.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- Copyright © 2015-2019 by The qTox Project Contributors
-
- This file is part of qTox, a Qt-based graphical interface for Tox.
-
- qTox is libre software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- qTox is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with qTox. If not, see .
-*/
-
-
-#ifndef SYSTEMTRAYICON_PRIVATE_H
-#define SYSTEMTRAYICON_PRIVATE_H
-
-#include
-
-#ifdef ENABLE_SYSTRAY_STATUSNOTIFIER_BACKEND
-#ifdef signals
-#undef signals
-#endif
-extern "C" {
-#include "src/platform/statusnotifier/statusnotifier.h"
-#include
-#include
-#include
-#include
-#include
-}
-#define signals public
-#endif
-
-#ifdef ENABLE_SYSTRAY_UNITY_BACKEND
-#ifdef signals
-#undef signals
-#endif
-extern "C" {
-#include
-#include
-#include
-}
-#define signals public
-#endif
-
-#ifdef ENABLE_SYSTRAY_GTK_BACKEND
-#ifdef signals
-#undef signals
-#endif
-extern "C" {
-#include
-}
-#define signals public
-#endif
-
-enum class SystrayBackendType
-{
- Qt,
- Unity,
- StatusNotifier,
- GTK
-};
-
-#endif // SYSTEMTRAYICON_PRIVATE_H
diff --git a/src/widget/widget.cpp b/src/widget/widget.cpp
index 812fa5c49..89a072a60 100644
--- a/src/widget/widget.cpp
+++ b/src/widget/widget.cpp
@@ -46,7 +46,6 @@
#include "groupwidget.h"
#include "maskablepixmapwidget.h"
#include "splitterrestorer.h"
-#include "systemtrayicon.h"
#include "form/groupchatform.h"
#include "src/audio/audio.h"
#include "src/chatlog/content/filetransferwidget.h"
@@ -584,7 +583,6 @@ Widget::~Widget()
delete form;
}
- delete icon;
delete profileForm;
delete profileInfo;
delete addFriendForm;
@@ -2251,7 +2249,7 @@ void Widget::onTryCreateTrayIcon()
static int32_t tries = 15;
if (!icon && tries--) {
if (QSystemTrayIcon::isSystemTrayAvailable()) {
- icon = new SystemTrayIcon();
+ icon = std::unique_ptr(new QSystemTrayIcon);
updateIcons();
trayMenu = new QMenu(this);
@@ -2266,9 +2264,7 @@ void Widget::onTryCreateTrayIcon()
trayMenu->addAction(actionQuit);
icon->setContextMenu(trayMenu);
- // don't activate qTox widget on tray icon click in Unity backend (see #3419)
- if (icon->backend() != SystrayBackendType::Unity)
- connect(icon, &SystemTrayIcon::activated, this, &Widget::onIconClick);
+ connect(icon.get(), &QSystemTrayIcon::activated, this, &Widget::onIconClick);
if (settings.getShowSystemTray()) {
icon->show();
diff --git a/src/widget/widget.h b/src/widget/widget.h
index ed77ad45a..e5a77d7c3 100644
--- a/src/widget/widget.h
+++ b/src/widget/widget.h
@@ -277,7 +277,7 @@ private:
void cleanupNotificationSound();
private:
- SystemTrayIcon* icon = nullptr;
+ std::unique_ptr icon;
QMenu* trayMenu;
QAction* statusOnline;
QAction* statusAway;