/*************************************************************************** * Copyright (C) 2008-2021 by Ilya Kotov * * forkotov02@ya.ru * * * * This program is free 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 2 of the License, or * * (at your option) any later version. * * * * This program 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 this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include #include #include #include #include #include #include #include "qmmptrayicon.h" #ifdef QMMP_WS_X11 #include "statusiconpopupwidget.h" #endif QmmpTrayIcon::QmmpTrayIcon(QObject *parent) : QSystemTrayIcon(parent) {} QmmpTrayIcon::~QmmpTrayIcon() { } void QmmpTrayIcon::setToolTip(const QString &tip) { #ifdef QMMP_WS_X11 if(hasToolTipEvent()) { m_message = tip; if(m_popupWidget) showToolTip(); } else QSystemTrayIcon::setToolTip(tip); #else QSystemTrayIcon::setToolTip(tip); #endif } #ifdef QMMP_WS_X11 bool QmmpTrayIcon::event(QEvent *e) { if (e->type() == QEvent::Wheel ) { wheelEvent(dynamic_cast(e)); e->accept(); return true; } if (e->type() == QEvent::ToolTip) { showToolTip(); e->accept(); return true; } return QSystemTrayIcon::event(e); } bool QmmpTrayIcon::hasToolTipEvent() { //checking for XEmbed system tray implementation //only this implementation is able to send QHelpEvent const QWindowList windowList = qApp->allWindows(); return std::any_of(windowList.cbegin(), windowList.cend(), [](QWindow *w){ return w->objectName() == "QSystemTrayIconSysWindow"; }); } void QmmpTrayIcon::wheelEvent(QWheelEvent *e) { SoundCore::instance()->changeVolume(e->delta()/20); } void QmmpTrayIcon::showToolTip() { if(m_popupWidget.isNull()) { m_popupWidget = new StatusIconPopupWidget(); } m_popupWidget->showInfo(geometry().x(),geometry().y(), m_message); } #endif