aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General/notifier
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2016-11-05 13:55:28 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2016-11-05 13:55:28 +0000
commit0a144e8fedc0b258ecc91c834ae89bb7d63d9889 (patch)
tree6d4e7b2c61b96294dff378b7e5827afd9c609866 /src/plugins/General/notifier
parenta97fb9120aa7c177cc7018c64cbc4153a5234ae8 (diff)
downloadqmmp-0a144e8fedc0b258ecc91c834ae89bb7d63d9889.tar.gz
qmmp-0a144e8fedc0b258ecc91c834ae89bb7d63d9889.tar.bz2
qmmp-0a144e8fedc0b258ecc91c834ae89bb7d63d9889.zip
added feature to disable notifications when another app is in full
screen mode git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6868 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/General/notifier')
-rw-r--r--src/plugins/General/notifier/notifier.cpp64
-rw-r--r--src/plugins/General/notifier/notifier.h8
-rw-r--r--src/plugins/General/notifier/settingsdialog.cpp2
-rw-r--r--src/plugins/General/notifier/settingsdialog.ui64
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>