diff options
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/General/notifier/notifier.cpp | 64 | ||||
| -rw-r--r-- | src/plugins/General/notifier/notifier.h | 8 | ||||
| -rw-r--r-- | src/plugins/General/notifier/settingsdialog.cpp | 2 | ||||
| -rw-r--r-- | src/plugins/General/notifier/settingsdialog.ui | 64 |
4 files changed, 105 insertions, 33 deletions
diff --git a/src/plugins/General/notifier/notifier.cpp b/src/plugins/General/notifier/notifier.cpp index a12034b16..212f8bab1 100644 --- a/src/plugins/General/notifier/notifier.cpp +++ b/src/plugins/General/notifier/notifier.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2013 by Ilya Kotov * + * Copyright (C) 2008-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -22,7 +22,17 @@ #include <QFile> #include <QDir> #include <QSettings> +#define Visual VisualQmmp #include <qmmp/soundcore.h> +#undef Visual + +#ifdef Q_WS_X11 +#include <QX11Info> +#include <X11/X.h> +#include <X11/Xatom.h> +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#endif #include "popupwidget.h" #include "notifier.h" @@ -39,6 +49,7 @@ Notifier::Notifier(QObject *parent) : QObject(parent) m_resumeNotification = settings.value("resume_notification", false).toBool(); m_showVolume = settings.value("volume_notification", true).toBool(); m_psi = settings.value("psi_notification", false).toBool(); + m_disableForFullScreen = settings.value("disable_fullscreen", false).toBool(); settings.endGroup(); m_core = SoundCore::instance(); connect (m_core, SIGNAL(metaDataChanged ()), SLOT(showMetaData())); @@ -108,7 +119,7 @@ void Notifier::setState(Qmmp::State state) void Notifier::showMetaData() { - if (m_desktop) + if (m_desktop && !hasFullscreenWindow()) { if (!m_popupWidget) m_popupWidget = new PopupWidget(); @@ -135,7 +146,6 @@ void Notifier::showMetaData() file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate); file.write(data); file.close(); - continue; } } @@ -143,7 +153,7 @@ void Notifier::showVolume(int l, int r) { if (((m_l != l) || (m_r != r)) && m_showVolume) { - if (m_l >= 0) + if (m_l >= 0 && !hasFullscreenWindow()) { if (!m_popupWidget) m_popupWidget = new PopupWidget(); @@ -162,3 +172,49 @@ void Notifier::removePsiTuneFiles() QFile::remove(path); } } + +#ifdef Q_WS_X11 +bool Notifier::hasFullscreenWindow() const +{ + if(m_disableForFullScreen) + return false; + Atom type = None; + int format = 0; + unsigned long nitems = 0, bytes_after = 0; + unsigned char *prop; + + Display *display = QX11Info::display(); + + Atom filter = XInternAtom(display, "_NET_WM_STATE_FULLSCREEN", False); + Atom net_wm_state = XInternAtom(display, "_NET_WM_STATE", False); + + Window window; + int ret; + XGetInputFocus(display, &window, &ret); + + + int status = XGetWindowProperty(display, window, net_wm_state, 0, 256, + False, XA_ATOM, &type, &format, &nitems, + &bytes_after, &prop); + if(status != Success || type == None) + return false; + + Atom *atoms = (Atom *)prop; + + for (unsigned long i = 0; i < nitems; i++) + { + if (atoms[i] == filter) + { + XFree(prop); + return true; + } + } + XFree(prop); + return false; +} +#else +bool Notifier::hasFullscreenWindow() const +{ + return false; +} +#endif diff --git a/src/plugins/General/notifier/notifier.h b/src/plugins/General/notifier/notifier.h index 2576a9b86..ba5bc8b23 100644 --- a/src/plugins/General/notifier/notifier.h +++ b/src/plugins/General/notifier/notifier.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2013 by Ilya Kotov * + * Copyright (C) 2008-2016 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -46,13 +46,17 @@ private slots: void setState(Qmmp::State state); private: - QPointer<PopupWidget> m_popupWidget; void removePsiTuneFiles(); +#ifdef Q_WS_X11 + bool hasFullscreenWindow() const; +#endif + QPointer<PopupWidget> m_popupWidget; bool m_desktop, m_showVolume; bool m_psi; int m_l, m_r; bool m_isPaused; bool m_resumeNotification; + bool m_disableForFullScreen; SoundCore *m_core; QStringList m_psiTuneFiles; diff --git a/src/plugins/General/notifier/settingsdialog.cpp b/src/plugins/General/notifier/settingsdialog.cpp index 672ab7c51..6adeaf03e 100644 --- a/src/plugins/General/notifier/settingsdialog.cpp +++ b/src/plugins/General/notifier/settingsdialog.cpp @@ -50,6 +50,7 @@ SettingsDialog::SettingsDialog(QWidget *parent) m_ui.resumeCheckBox->setChecked(settings.value("resume_notification", false).toBool()); m_ui.songCheckBox->setChecked(settings.value("song_notification", true).toBool()); m_ui.volumeCheckBox->setChecked(settings.value("volume_notification", true).toBool()); + m_ui.disableForFScheckBox->setChecked(settings.value("disable_fullscreen", false).toBool()); m_ui.transparencySlider->setValue(100 - settings.value("opacity", 1.0).toDouble()*100); QString fontname = settings.value ("font").toString(); m_ui.coverSizeSlider->setValue(settings.value ("cover_size", 64).toInt()); @@ -82,6 +83,7 @@ void SettingsDialog::accept() settings.setValue("resume_notification", m_ui.resumeCheckBox->isChecked()); settings.setValue("song_notification", m_ui.songCheckBox->isChecked()); settings.setValue("volume_notification", m_ui.volumeCheckBox->isChecked()); + settings.setValue("disable_fullscreen", m_ui.disableForFScheckBox->isChecked()); settings.setValue("opacity", 1.0 - (double)m_ui.transparencySlider->value()/100); settings.setValue("font", m_ui.fontLabel->font().toString()); settings.setValue("cover_size", m_ui.coverSizeSlider->value()); diff --git a/src/plugins/General/notifier/settingsdialog.ui b/src/plugins/General/notifier/settingsdialog.ui index 9a4ca4e4f..f500dd840 100644 --- a/src/plugins/General/notifier/settingsdialog.ui +++ b/src/plugins/General/notifier/settingsdialog.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>309</width> - <height>459</height> + <width>310</width> + <height>512</height> </rect> </property> <property name="windowTitle"> @@ -35,14 +35,24 @@ <string>Desktop Notification</string> </property> <layout class="QGridLayout" name="gridLayout_2"> - <item row="3" column="0"> + <item row="7" column="1"> + <widget class="QSlider" name="transparencySlider"> + <property name="maximum"> + <number>90</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + </widget> + </item> + <item row="4" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> <string>Font:</string> </property> </widget> </item> - <item row="3" column="1"> + <item row="4" column="1"> <widget class="QLabel" name="fontLabel"> <property name="frameShape"> <enum>QFrame::StyledPanel</enum> @@ -55,28 +65,28 @@ </property> </widget> </item> - <item row="3" column="2"> + <item row="4" column="2"> <widget class="QToolButton" name="fontButton"> <property name="text"> <string>...</string> </property> </widget> </item> - <item row="5" column="2"> + <item row="6" column="2"> <widget class="QLabel" name="coverSizeLabel"> <property name="text"> <string>0</string> </property> </widget> </item> - <item row="6" column="0"> + <item row="7" column="0"> <widget class="QLabel" name="label_4"> <property name="text"> <string>Transparency:</string> </property> </widget> </item> - <item row="7" column="1" rowspan="3" colspan="2"> + <item row="8" column="1" rowspan="3" colspan="2"> <layout class="QGridLayout" name="gridLayout"> <property name="spacing"> <number>3</number> @@ -213,14 +223,14 @@ </item> </layout> </item> - <item row="8" column="0"> + <item row="9" column="0"> <widget class="QLabel" name="label"> <property name="text"> <string>Position</string> </property> </widget> </item> - <item row="9" column="0"> + <item row="10" column="0"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -233,7 +243,7 @@ </property> </spacer> </item> - <item row="10" column="0" colspan="3"> + <item row="11" column="0" colspan="3"> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> <widget class="QPushButton" name="templateButton"> @@ -257,17 +267,7 @@ </item> </layout> </item> - <item row="6" column="1"> - <widget class="QSlider" name="transparencySlider"> - <property name="maximum"> - <number>90</number> - </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - </widget> - </item> - <item row="6" column="2"> + <item row="7" column="2"> <widget class="QLabel" name="trasparencyLabel"> <property name="minimumSize"> <size> @@ -280,7 +280,7 @@ </property> </widget> </item> - <item row="7" column="0"> + <item row="8" column="0"> <spacer name="verticalSpacer_2"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -293,14 +293,14 @@ </property> </spacer> </item> - <item row="5" column="0"> + <item row="6" column="0"> <widget class="QLabel" name="label_5"> <property name="text"> <string>Cover size:</string> </property> </widget> </item> - <item row="5" column="1"> + <item row="6" column="1"> <widget class="QSlider" name="coverSizeSlider"> <property name="minimum"> <number>32</number> @@ -326,7 +326,7 @@ </property> </widget> </item> - <item row="4" column="0"> + <item row="5" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> <string>Delay (ms):</string> @@ -336,7 +336,7 @@ </property> </widget> </item> - <item row="4" column="1"> + <item row="5" column="1"> <widget class="QSpinBox" name="messageDelaySpinBox"> <property name="minimum"> <number>100</number> @@ -369,6 +369,16 @@ </property> </widget> </item> + <item row="3" column="0" colspan="3"> + <widget class="QCheckBox" name="disableForFScheckBox"> + <property name="toolTip"> + <string>Disable notifications when another application is in the Full Screen Mode</string> + </property> + <property name="text"> + <string>Disable for full screen windows</string> + </property> + </widget> + </item> </layout> </widget> </item> |
