Hello community,

here is the log from the commit of package qmmp for openSUSE:Factory checked in 
at 2018-07-22 23:05:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/qmmp (Old)
 and      /work/SRC/openSUSE:Factory/.qmmp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "qmmp"

Sun Jul 22 23:05:14 2018 rev:60 rq:624407 version:1.2.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/qmmp/qmmp.changes        2018-06-02 
12:14:42.502355826 +0200
+++ /work/SRC/openSUSE:Factory/.qmmp.new/qmmp.changes   2018-07-22 
23:05:27.512903402 +0200
@@ -1,0 +2,12 @@
+Sat Jul 21 08:19:53 UTC 2018 - [email protected]
+
+- Update to version 1.2.3:
+  * Add Qmmp 0.12/1.3 config compatibility.
+  * Disable global shortcuts during configuration.
+  * Improve global hotkey plugin.
+  * Fix some gcc warnings.
+  * Fix metadata updating issue.
+  * Fix an issue caused by sending same metadata several times in a
+    row.
+
+-------------------------------------------------------------------

Old:
----
  qmmp-1.2.2.tar.bz2

New:
----
  qmmp-1.2.3.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ qmmp.spec ++++++
--- /var/tmp/diff_new_pack.UAzphx/_old  2018-07-22 23:05:30.324902358 +0200
+++ /var/tmp/diff_new_pack.UAzphx/_new  2018-07-22 23:05:30.328902356 +0200
@@ -20,7 +20,7 @@
 %bcond_with faad
 %bcond_with restricted
 Name:           qmmp
-Version:        1.2.2
+Version:        1.2.3
 Release:        0
 Summary:        Qt-based Multimedia Player
 License:        GPL-2.0-or-later
@@ -81,7 +81,7 @@
 Requires:       %{name}(%{sover})(Output)
 Requires:       %{name}(%{sover})(Ui)
 %if 0%{?suse_version} < 1500
-BuildRequires:  desktop-file-utils
+BuildRequires:  update-desktop-files
 %endif
 %if %{with faad}
 BuildRequires:  libfaad-devel

++++++ qmmp-1.2.2.tar.bz2 -> qmmp-1.2.3.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/CMakeLists.txt 
new/qmmp-1.2.3/CMakeLists.txt
--- old/qmmp-1.2.2/CMakeLists.txt       2018-05-31 18:53:29.000000000 +0200
+++ new/qmmp-1.2.3/CMakeLists.txt       2018-07-20 18:09:37.000000000 +0200
@@ -54,6 +54,7 @@
 find_package(Qt5DBus 5.4.0)
 find_package(Qt5Multimedia 5.4.0)
 ADD_DEFINITIONS(-DQMMP_WS_X11)
+SET(CMAKE_CXX_STANDARD 11)
 
 get_target_property(QT_LRELEASE_EXECUTABLE Qt5::lrelease IMPORTED_LOCATION)
 
@@ -198,11 +199,11 @@
 PRINT_SUMMARY ("Lyrics support ...................." USE_LYRICS 1)
 PRINT_SUMMARY ("HAL support ......................." USE_HAL Qt5DBus_FOUND)
 PRINT_SUMMARY ("UDisks2 support ..................." USE_UDISKS2 Qt5DBus_FOUND)
-PRINT_SUMMARY ("Global hotkey support ............." USE_HOTKEY X11_FOUND AND 
Qt5X11Extras_FOUND)
+PRINT_SUMMARY ("Global hotkey support ............." USE_HOTKEY X11_FOUND AND 
XCB_H_FOUND AND Qt5X11Extras_FOUND)
 PRINT_SUMMARY ("GNOME/Cinnamon hotkey support ....." USE_GNOMEHOTKEY 
Qt5DBus_FOUND)
 PRINT_SUMMARY ("File operations ..................." USE_FILEOPS 1)
 PRINT_SUMMARY ("Cover manager ....................." USE_COVER 1)
-PRINT_SUMMARY ("KDE4 notifications support ........" USE_KDENOTIFY 
Qt5DBus_FOUND)
+PRINT_SUMMARY ("KDE notifications support ........." USE_KDENOTIFY 
Qt5DBus_FOUND)
 PRINT_SUMMARY ("Audio converter ..................." USE_CONVERTER 
TAGLIB_FOUND)
 PRINT_SUMMARY ("ReplayGain Scanner ................" USE_RGSCAN TAGLIB_FOUND)
 PRINT_SUMMARY ("Stream browser ...................." USE_SB 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/ChangeLog new/qmmp-1.2.3/ChangeLog
--- old/qmmp-1.2.2/ChangeLog    2018-05-31 18:53:29.000000000 +0200
+++ new/qmmp-1.2.3/ChangeLog    2018-07-20 18:09:37.000000000 +0200
@@ -1369,3 +1369,12 @@
 Version 1.2.2
 * fixed build with Qt 5.11
 * fixed memory leaks
+
+Version 1.2.3
+* added qmmp 0.12/1.3 config compatibility
+* disabling global shortcuts during configuration
+* improved global hotkey plugin
+* fixed some gcc warnings
+* fixed metadata updating issue
+* fixed build for windows
+* fixed issue caused by sending same metadata several times in a row
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/ChangeLog.rus new/qmmp-1.2.3/ChangeLog.rus
--- old/qmmp-1.2.2/ChangeLog.rus        2018-05-31 18:53:29.000000000 +0200
+++ new/qmmp-1.2.3/ChangeLog.rus        2018-07-20 18:09:37.000000000 +0200
@@ -1371,3 +1371,13 @@
 Версия 1.2.2
 * исправлена сборка с Qt 5.11
 * исправлены утечки памяти
+
+Версия 1.2.3
+* добавлена совместимость с файлом конфигурации qmmp 0.12/1.3
+* отключение глобальных клавиш во время настройки
+* улучшен модуль горячих клавиш
+* исправлены предупреждения gcc
+* исправлено обновление метаданных
+* исправлена сборка для windows
+* исправлена проблема, связанная с отправкой одинаковых метаданных несколько
+  раз подряд
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/ChangeLog.svn new/qmmp-1.2.3/ChangeLog.svn
--- old/qmmp-1.2.2/ChangeLog.svn        2018-05-31 18:53:29.000000000 +0200
+++ new/qmmp-1.2.3/ChangeLog.svn        2018-07-20 18:09:37.000000000 +0200
@@ -1,4 +1,73 @@
 ------------------------------------------------------------------------
+r8160 | trialuser02 | 2018-07-17 21:48:53 +0300 (Вт., 17 июля 2018) | 1 line
+
+fixed changelogs
+------------------------------------------------------------------------
+r8149 | trialuser02 | 2018-07-15 15:04:45 +0300 (Вс., 15 июля 2018) | 2 lines
+
+fixed issue with ogg stream recording (#950)
+
+------------------------------------------------------------------------
+r8148 | trialuser02 | 2018-07-14 01:05:07 +0300 (Сб., 14 июля 2018) | 1 line
+
+fixed README
+------------------------------------------------------------------------
+r8143 | trialuser02 | 2018-07-14 00:18:05 +0300 (Сб., 14 июля 2018) | 1 line
+
+updated changelogs
+------------------------------------------------------------------------
+r8131 | trialuser02 | 2018-07-08 22:01:53 +0300 (Вс., 08 июля 2018) | 1 line
+
+changed configuration summary
+------------------------------------------------------------------------
+r8128 | trialuser02 | 2018-07-08 21:55:23 +0300 (Вс., 08 июля 2018) | 1 line
+
+enabled c++11 for qmake
+------------------------------------------------------------------------
+r8126 | trialuser02 | 2018-07-08 21:50:06 +0300 (Вс., 08 июля 2018) | 1 line
+
+fixed build regression
+------------------------------------------------------------------------
+r8125 | trialuser02 | 2018-07-08 21:20:23 +0300 (Вс., 08 июля 2018) | 1 line
+
+sync hotkey plugin with trunk
+------------------------------------------------------------------------
+r8124 | trialuser02 | 2018-07-08 21:15:02 +0300 (Вс., 08 июля 2018) | 1 line
+
+sync hotkey plugin with trunk
+------------------------------------------------------------------------
+r8123 | trialuser02 | 2018-07-08 19:49:44 +0300 (Вс., 08 июля 2018) | 1 line
+
+fixed win32 build
+------------------------------------------------------------------------
+r8104 | trialuser02 | 2018-07-04 22:47:55 +0300 (Ср., 04 июля 2018) | 1 line
+
+fixed metadata updating issue
+------------------------------------------------------------------------
+r8098 | trialuser02 | 2018-07-03 12:43:06 +0300 (Вт., 03 июля 2018) | 1 line
+
+version bump
+------------------------------------------------------------------------
+r8093 | trialuser02 | 2018-07-02 22:27:34 +0300 (Пн., 02 июля 2018) | 1 line
+
+fixed gcc warnings
+------------------------------------------------------------------------
+r8066 | trialuser02 | 2018-06-27 22:06:04 +0300 (Ср., 27 июня 2018) | 1 line
+
+added qmmp-1.3 playlist format support
+------------------------------------------------------------------------
+r8064 | trialuser02 | 2018-06-26 17:48:10 +0300 (Вт., 26 июня 2018) | 1 line
+
+fixed build regression
+------------------------------------------------------------------------
+r8042 | trialuser02 | 2018-06-17 16:27:26 +0300 (Вс., 17 июня 2018) | 1 line
+
+removed unneeded includes (patch by Matteo Cypriani, fixes #963)
+------------------------------------------------------------------------
+r8009 | trialuser02 | 2018-06-10 00:04:24 +0300 (Вс., 10 июня 2018) | 1 line
+
+wavpack: fixed memory leak (backported from trunk)
+------------------------------------------------------------------------
 r7992 | trialuser02 | 2018-05-31 14:12:51 +0300 (Чт., 31 мая 2018) | 1 line
 
 updated changelogs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/README new/qmmp-1.2.3/README
--- old/qmmp-1.2.2/README       2018-05-31 18:53:29.000000000 +0200
+++ new/qmmp-1.2.3/README       2018-07-20 18:09:37.000000000 +0200
@@ -110,6 +110,7 @@
 - libarchive >= 3.2.0 (optional)
 - libshout (optional)
 - mplayer (optional)
+- libx11, libxcb, xorgproto (optional)
 - cmake >= 2.8.11 (for build only)
 
 Attention! Qmmp build needs lrelease installed.
@@ -155,7 +156,7 @@
 To enable it, run 'cmake ./ -DUSE_OSS:BOOL=TRUE' before compilation.
 
 UDisks2 support and FreeBSD.
-Under FreeBSD you are able to use UDisks2 plugin. Also, you should install 
port sysutils/bsdisks. 
+Under FreeBSD you are able to use UDisks2 plugin. Also, you should install 
port sysutils/bsdisks.
 Bsdisks is an implementation of UDisks2 service for FreeBSD.
 
 In some cases, you can use qmake for building and installation.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/README.RUS new/qmmp-1.2.3/README.RUS
--- old/qmmp-1.2.2/README.RUS   2018-05-31 18:53:29.000000000 +0200
+++ new/qmmp-1.2.3/README.RUS   2018-07-20 18:09:37.000000000 +0200
@@ -109,6 +109,7 @@
 - libarchive >= 3.2.0 (опционально)
 - libshout (опционально)
 - mplayer (опционально)
+- libx11, libxcb, xorgproto (опционально)
 - cmake >= 2.8.11 (только для сборки)
 
 Внимание! Для сборки Qmmp нужна утилита lrelease.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/README.UKR new/qmmp-1.2.3/README.UKR
--- old/qmmp-1.2.2/README.UKR   2018-05-31 18:53:29.000000000 +0200
+++ new/qmmp-1.2.3/README.UKR   2018-07-20 18:09:37.000000000 +0200
@@ -98,6 +98,7 @@
 - libprojectM >= 2.0.0 (Опціонально)
 - libenca >= 1.9 (Опціонально)
 - mplayer (Опціонально)
+- libx11, libxcb, xorgproto (Опціонально)
 - cmake >= 2.8.6 (тільки для компіляції)
 
 Увага! Для компіляції Qmmp потрібна утиліта lrelease. Дуже часто вона 
знаходиться в пакеті libqt4-devel.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/qmmp.pri new/qmmp-1.2.3/qmmp.pri
--- old/qmmp-1.2.2/qmmp.pri     2018-05-31 18:53:29.000000000 +0200
+++ new/qmmp-1.2.3/qmmp.pri     2018-07-20 18:09:37.000000000 +0200
@@ -13,17 +13,18 @@
 #Defines
 
 DEFINES += QT_NO_CAST_FROM_BYTEARRAY QT_STRICT_ITERATORS
-DEFINES += QMMP_WS_X11
+unix:DEFINES += QMMP_WS_X11
 DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x050400
 
 #Configuration
 
 CONFIG -= depend_includepath
+CONFIG += c++11
 QT += widgets
 
 #Version
 
-QMMP_VERSION = 1.2.2
+QMMP_VERSION = 1.2.3
 
 #Comment/uncomment this if you want to change plugins list
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/app/app.pro 
new/qmmp-1.2.3/src/app/app.pro
--- old/qmmp-1.2.2/src/app/app.pro      2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/app/app.pro      2018-07-20 18:09:35.000000000 +0200
@@ -45,7 +45,7 @@
 }
 
 win32 {
-    LIBS += -lqmmp0 -lqmmpui0
+    LIBS += -lqmmp1 -lqmmpui1
     QMAKE_LIBDIR += ../../bin
     RC_FILE = qmmp.rc
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/app/qmmp.rc 
new/qmmp-1.2.3/src/app/qmmp.rc
--- old/qmmp-1.2.2/src/app/qmmp.rc      2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/app/qmmp.rc      2018-07-20 18:09:35.000000000 +0200
@@ -1,7 +1,7 @@
 #include <winver.h>
 
-#define QMMP_FILEVERSION 1,2,2,0
-#define QMMP_PRODUCTVERSION "1.2.2.0"
+#define QMMP_FILEVERSION 1,2,3,0
+#define QMMP_PRODUCTVERSION "1.2.3.0"
 
 IDI_ICON1              ICON            DISCARDABLE     "images\\ico\\qmmp.ico"
 IDI_ICON2              ICON            DISCARDABLE     
"images\\ico\\qmmp_file.ico"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/plugins/General/General.pro 
new/qmmp-1.2.3/src/plugins/General/General.pro
--- old/qmmp-1.2.2/src/plugins/General/General.pro      2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/General.pro      2018-07-20 
18:09:35.000000000 +0200
@@ -8,9 +8,9 @@
            covermanager \
            streambrowser \
            trackchange \
-           hotkey \
            copypaste \
-           rgscan
+           rgscan \
+           hotkey
 unix:SUBDIRS += mpris \
                 kdenotify \
                 converter \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/General/copypaste/copypaste.cpp 
new/qmmp-1.2.3/src/plugins/General/copypaste/copypaste.cpp
--- old/qmmp-1.2.2/src/plugins/General/copypaste/copypaste.cpp  2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/copypaste/copypaste.cpp  2018-07-20 
18:09:36.000000000 +0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2013 by Ilya Kotov                                      *
+ *   Copyright (C) 2013-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -21,7 +21,6 @@
 #include <QAction>
 #include <QSettings>
 #include <QApplication>
-#include <QSignalMapper>
 #include <QProgressDialog>
 #include <QMessageBox>
 #include <QFile>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/plugins/General/hotkey/CMakeLists.txt 
new/qmmp-1.2.3/src/plugins/General/hotkey/CMakeLists.txt
--- old/qmmp-1.2.2/src/plugins/General/hotkey/CMakeLists.txt    2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/hotkey/CMakeLists.txt    2018-07-20 
18:09:36.000000000 +0200
@@ -12,12 +12,8 @@
 link_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../qmmpui)
 link_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../qmmp)
 
-# xkb
-CHECK_INCLUDE_FILE(X11/XKBlib.h XKBLIB_H_FOUND)
-IF(XKBLIB_H_FOUND)
-ADD_DEFINITIONS(-DHAVE_XKBLIB_H)
-SET(CMAKE_REQUIRED_DEFINITIONS -DHAVE_XKBLIB_H)
-ENDIF(XKBLIB_H_FOUND)
+# xcb
+CHECK_INCLUDE_FILE(xcb/xcb.h XCB_H_FOUND)
 
 SET(libhotkey_SRCS
     settingsdialog.cpp
@@ -46,10 +42,10 @@
 # the UI file won't be wrapped!
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 
-IF(X11_FOUND)
+IF(X11_FOUND AND XCB_H_FOUND)
 set_property(SOURCE hotkeymanager_x11.cpp PROPERTY SKIP_AUTOMOC ON)
 ADD_LIBRARY(hotkey MODULE ${libhotkey_SRCS} ${libhotkey_UIS_H} 
${libhotkey_RCC_SRCS})
 add_dependencies(hotkey qmmpui)
 target_link_libraries(hotkey Qt5::Widgets Qt5::X11Extras -lqmmpui -lqmmp 
${X11_LDFLAGS})
 install(TARGETS hotkey DESTINATION ${LIB_DIR}/qmmp/General)
-ENDIF(X11_FOUND)
+ENDIF(X11_FOUND AND XCB_H_FOUND)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/plugins/General/hotkey/hotkey.pro 
new/qmmp-1.2.3/src/plugins/General/hotkey/hotkey.pro
--- old/qmmp-1.2.2/src/plugins/General/hotkey/hotkey.pro        2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/hotkey/hotkey.pro        2018-07-20 
18:09:36.000000000 +0200
@@ -24,6 +24,5 @@
     target.path = $$LIB_DIR/qmmp/General
     INSTALLS += target
     PKGCONFIG += x11
-    DEFINES += HAVE_XKBLIB_H
     QT += x11extras
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeydialog.cpp 
new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeydialog.cpp
--- old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeydialog.cpp  2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeydialog.cpp  2018-07-20 
18:09:36.000000000 +0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2009-2012 by Ilya Kotov                                 *
+ *   Copyright (C) 2009-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -25,27 +25,29 @@
 HotkeyDialog::HotkeyDialog(quint32 key, quint32 mod, QWidget *parent)
         : QDialog(parent)
 {
-    ui.setupUi(this);
+    m_ui.setupUi(this);
     m_key = key;
     m_modifiers = mod;
-    ui.keyLineEdit->setText(HotkeyManager::getKeyString(m_key, m_modifiers));
-    grabKeyboard();
+    m_ui.keyLineEdit->setText(HotkeyManager::getKeyString(m_key, m_modifiers));
 }
 
 HotkeyDialog::~HotkeyDialog()
-{
-    releaseKeyboard();
-}
+{}
 
 void HotkeyDialog::keyPressEvent (QKeyEvent *event)
 {
     m_key = HotkeyManager::keycodeToKeysym(event->nativeScanCode ());
     m_modifiers = event->nativeModifiers ();
     foreach(long mask_mod, HotkeyManager::ignModifiersList())
-        m_modifiers &= ~mask_mod; //remove ignoried modifiers (num lock, caps 
lock, etc)
+        m_modifiers &= ~mask_mod; //remove ignored modifiers (num lock, caps 
lock, etc)
 
-    ui.keyLineEdit->setText(HotkeyManager::getKeyString(m_key, m_modifiers));
-    QWidget::keyPressEvent(event);
+    m_ui.keyLineEdit->setText(HotkeyManager::getKeyString(m_key, m_modifiers));
+    QDialog::keyPressEvent(event);
+}
+
+void HotkeyDialog::showEvent(QShowEvent *)
+{
+    grabKeyboard();
 }
 
 quint32 HotkeyDialog::nativeModifiers () const
@@ -60,10 +62,17 @@
 
 void HotkeyDialog::accept()
 {
-    if (ui.keyLineEdit->text().isEmpty()) //clear key & modifiers
+    if (m_ui.keyLineEdit->text().isEmpty()) //clear key & modifiers
     {
         m_key = 0;
         m_modifiers = 0;
     }
+    releaseKeyboard();
     QDialog::accept();
 }
+
+void HotkeyDialog::reject()
+{
+    releaseKeyboard();
+    QDialog::reject();
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeydialog.h 
new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeydialog.h
--- old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeydialog.h    2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeydialog.h    2018-07-20 
18:09:36.000000000 +0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2009 by Ilya Kotov                                      *
+ *   Copyright (C) 2009-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -41,15 +41,15 @@
     quint32 keySym () const;
 
 public slots:
-    virtual void accept();
-
-protected:
-    virtual void keyPressEvent (QKeyEvent *event);
+    void accept();
+    void reject();
 
 private:
-    Ui::HotkeyDialog ui;
-    quint32 m_key, m_modifiers;
+    void keyPressEvent (QKeyEvent *event);
+    void showEvent(QShowEvent *);
 
+    Ui::HotkeyDialog m_ui;
+    quint32 m_key, m_modifiers;
 };
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeyfactory.cpp 
new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeyfactory.cpp
--- old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeyfactory.cpp 2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeyfactory.cpp 2018-07-20 
18:09:36.000000000 +0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2009-2012 by Ilya Kotov                                 *
+ *   Copyright (C) 2009-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -18,9 +18,9 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-
 #include <QMessageBox>
 #include <qmmp/qmmp.h>
+#include <qmmpui/general.h>
 #include "settingsdialog.h"
 #include "hotkeymanager.h"
 #include "hotkeyfactory.h"
@@ -43,7 +43,13 @@
 
 QDialog *HotkeyFactory::createConfigDialog(QWidget *parent)
 {
-    return new SettingsDialog(parent);
+    SettingsDialog *dialog = new SettingsDialog(parent);
+    if(General::isEnabled(this))
+    {
+        General::setEnabled(this, false);
+        connect(dialog, &QDialog::finished, [this] { 
General::setEnabled(this); });
+    }
+    return dialog;
 }
 
 void HotkeyFactory::showAbout(QWidget *parent)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeymanager.h 
new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeymanager.h
--- old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeymanager.h   2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeymanager.h   2018-07-20 
18:09:36.000000000 +0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2009-2013 by Ilya Kotov                                 *
+ *   Copyright (C) 2009-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -24,11 +24,12 @@
 #include <QString>
 #include <QTableWidgetItem>
 #include <QList>
+#include <QAbstractNativeEventFilter>
+#ifdef Q_OS_WIN
+#include <windows.h>
+#endif
 #include <qmmpui/general.h>
 
-class QEvent;
-class QWidget;
-
 /**
     @author Ilya Kotov <[email protected]>
 */
@@ -53,23 +54,19 @@
         VOLUME_MUTE
     };
 
-    Hotkey()
-    {
-        action = PLAY;
-        key = 0;
-        mod = 0;
-        code = 0;
-    }
-
-    quint32 mod;
-    quint32 key;
-    int action;
-    int code;
+    quint32 mod = 0;
+    quint32 key = 0;
+    int action = PLAY;
+    int code = 0;
+#ifdef Q_OS_WIN
+    UINT mods = 0;
+    WPARAM id = 0;
+#endif
     quint32 defaultKey();
     static quint32 defaultKey(int act);
 };
 
-class HotkeyManager : public QObject
+class HotkeyManager : public QObject, public QAbstractNativeEventFilter
 {
     Q_OBJECT
 public:
@@ -81,26 +78,9 @@
     static QList<long> ignModifiersList();
     static quint32 keycodeToKeysym(quint32 keycode);
 
-#ifdef QMMP_WS_X11
-protected:
-    virtual bool eventFilter(QObject* o, QEvent* e);
-#endif
-
 private:
-#ifdef QMMP_WS_X11
-    static void ensureModifiers();
+    bool nativeEventFilter(const QByteArray &eventType, void *message, long 
*result);
     QList <Hotkey *> m_grabbedKeys;
-    static long m_alt_mask;
-    static long m_meta_mask;
-    static long m_super_mask;
-    static long m_hyper_mask;
-    static long m_numlock_mask;
-    static bool m_haveMods;
-#endif
-
-#ifdef Q_OS_WIN
-    QList<QWidget *> m_filters;
-#endif
 };
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeymanager_win.cpp 
new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeymanager_win.cpp
--- old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeymanager_win.cpp     
2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeymanager_win.cpp     
2018-07-20 18:09:36.000000000 +0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2013-2016 by Ilya Kotov                                 *
+ *   Copyright (C) 2013-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -21,12 +21,7 @@
 #include <QtGlobal>
 #ifdef Q_OS_WIN
 #include <QSettings>
-#include <QX11Info>
-#include <QEvent>
-#include <QKeyEvent>
-#include <QCoreApplication>
 #include <QApplication>
-#include <QDesktopWidget>
 #include <windows.h>
 #include <winuser.h>
 #include <commctrl.h>
@@ -98,113 +93,9 @@
     return keyMap[act];
 }
 
-class KeyFilterWidget : public QWidget
-{
-public:
-    KeyFilterWidget(const Hotkey &hotkey)
-    {
-        m_hotkey = hotkey;
-        m_mods = 0;
-        m_id = 0;
-
-        if(m_hotkey.mod & HOTKEYF_CONTROL)
-            m_mods |= MOD_CONTROL;
-        if(m_hotkey.mod & HOTKEYF_SHIFT)
-            m_mods |= MOD_SHIFT;
-        if(m_hotkey.mod & HOTKEYF_ALT)
-            m_mods |= MOD_ALT;
-        if(m_hotkey.mod & HOTKEYF_EXT)
-            m_mods |= MOD_WIN;
-
-
-        if(RegisterHotKey(winId(), m_mods^m_hotkey.key,  m_mods, m_hotkey.key))
-        {
-            m_id = m_mods^m_hotkey.key;
-            qDebug("KeyFilterWidget: registered key=0x%x, mod=0x%x", 
hotkey.key, m_mods);
-        }
-        else
-            qWarning("KeyFilterWidget: unable to register key=0x%x, mod=0x%x", 
hotkey.key, m_mods);
-    }
-
-    ~KeyFilterWidget()
-    {
-        if(m_id)
-            UnregisterHotKey(winId(), m_id);
-    }
-
-    bool winEvent(MSG* m, long* result)
-    {
-        if (m->message == WM_HOTKEY && m->wParam == m_id)
-        {
-            SoundCore *core = SoundCore::instance();
-            MediaPlayer *player = MediaPlayer::instance();
-            qDebug("KeyFilterWidget: [%s] pressed",
-                   qPrintable(HotkeyManager::getKeyString(m_hotkey.key, 
m_hotkey.mod)));
-
-            switch (m_hotkey.action)
-            {
-            case Hotkey::PLAY:
-                player->play();
-                break;
-            case Hotkey::STOP:
-                player->stop();
-                break;
-            case Hotkey::PAUSE:
-                core->pause();
-                break;
-            case Hotkey::PLAY_PAUSE:
-                if (core->state() == Qmmp::Stopped)
-                    player->play();
-                else if (core->state() != Qmmp::FatalError)
-                    core->pause();
-                break;
-            case Hotkey::NEXT:
-                player->next();
-                break;
-            case Hotkey::PREVIOUS:
-                player->previous();
-                break;
-            case Hotkey::SHOW_HIDE:
-                UiHelper::instance()->toggleVisibility();
-                break;
-            case Hotkey::VOLUME_UP:
-                core->volumeUp();
-                break;
-            case Hotkey::VOLUME_DOWN:
-                core->volumeDown();
-                break;
-            case Hotkey::FORWARD:
-                core->seek(core->elapsed() + 5000);
-                break;
-            case Hotkey::REWIND:
-                core->seek(qMax(qint64(0), core->elapsed() - 5000));
-                break;
-            case Hotkey::JUMP_TO_TRACK:
-                UiHelper::instance()->jumpToTrack();
-                break;
-            case Hotkey::VOLUME_MUTE:
-                
SoundCore::instance()->setMuted(!SoundCore::instance()->isMuted());
-                break;
-            }
-            qApp->processEvents();
-            return true;
-        }
-        return QWidget::winEvent(m, result);
-    }
-
-private:
-    Hotkey m_hotkey;
-    UINT m_mods;
-    WPARAM m_id;
-
-
-};
-
 HotkeyManager::HotkeyManager(QObject *parent) : QObject(parent)
 {
-    QCoreApplication::instance()->installEventFilter(this);
-
-
+    qApp->installNativeEventFilter(this);
     QSettings settings(Qmmp::configFile(), QSettings::IniFormat); //load 
settings
     settings.beginGroup("Hotkey");
     for (int i = Hotkey::PLAY; i <= Hotkey::JUMP_TO_TRACK; ++i)
@@ -214,14 +105,34 @@
 
         if (key)
         {
-            Hotkey hotkey;
-            hotkey.action = i;
-            hotkey.key = key;
-            hotkey.code = MapVirtualKey(key, 0);
-            hotkey.mod = mod;
+            Hotkey *hotkey = new Hotkey;
+            hotkey->action = i;
+            hotkey->key = key;
+            hotkey->code = MapVirtualKey(key, 0);
+            hotkey->mod = mod;
+
+            if(hotkey->mod & HOTKEYF_CONTROL)
+                hotkey->mods |= MOD_CONTROL;
+            if(hotkey->mod & HOTKEYF_SHIFT)
+                hotkey->mods |= MOD_SHIFT;
+            if(hotkey->mod & HOTKEYF_ALT)
+                hotkey->mods |= MOD_ALT;
+            if(hotkey->mod & HOTKEYF_EXT)
+                hotkey->mods |= MOD_WIN;
+
+            hotkey->id = hotkey->mods^hotkey->key;
+
+            if(RegisterHotKey(NULL, hotkey->id,  hotkey->mods, hotkey->key))
+            {
+                qDebug("HotkeyManager: registered key=0x%x, mod=0x%x", 
hotkey->key, hotkey->mods);
+            }
+            else
+            {
+                hotkey->id = 0;
+                qWarning("HotkeyManager: unable to register key=0x%x, 
mod=0x%x", hotkey->key, hotkey->mods);
+            }
 
-            KeyFilterWidget *filerWidget = new KeyFilterWidget(hotkey);
-            m_filters << filerWidget;
+            m_grabbedKeys << hotkey;
         }
     }
     settings.endGroup();
@@ -229,7 +140,14 @@
 
 HotkeyManager::~HotkeyManager()
 {
-    qDeleteAll(m_filters);
+    qApp->removeNativeEventFilter(this);
+    while(!m_grabbedKeys.isEmpty())
+    {
+        Hotkey *key = m_grabbedKeys.takeFirst ();
+        if(key->id)
+             UnregisterHotKey(NULL, key->id);
+        delete key;
+    }
 }
 
 const QString HotkeyManager::getKeyString(quint32 key, quint32 modifiers)
@@ -299,6 +217,74 @@
     return MapVirtualKey(keycode, 1);
 }
 
+bool HotkeyManager::nativeEventFilter(const QByteArray &eventType, void 
*message, long *result)
+{
+    Q_UNUSED(eventType);
+    Q_UNUSED(result);
+    MSG *m = static_cast<MSG*>(message);
+    if (m->message == WM_HOTKEY)
+    {
+        qDebug("++");
+        SoundCore *core = SoundCore::instance();
+        MediaPlayer *player = MediaPlayer::instance();
+        foreach(Hotkey *hotkey, m_grabbedKeys)
+        {
+            if(hotkey->id != m->wParam)
+                continue;
+
+            qDebug("KeyFilterWidget: [%s] pressed",
+                   qPrintable(HotkeyManager::getKeyString(hotkey->key, 
hotkey->mod)));
+
+            switch (hotkey->action)
+            {
+            case Hotkey::PLAY:
+                player->play();
+                break;
+            case Hotkey::STOP:
+                player->stop();
+                break;
+            case Hotkey::PAUSE:
+                core->pause();
+                break;
+            case Hotkey::PLAY_PAUSE:
+                if (core->state() == Qmmp::Stopped)
+                    player->play();
+                else if (core->state() != Qmmp::FatalError)
+                    core->pause();
+                break;
+            case Hotkey::NEXT:
+                player->next();
+                break;
+            case Hotkey::PREVIOUS:
+                player->previous();
+                break;
+            case Hotkey::SHOW_HIDE:
+                UiHelper::instance()->toggleVisibility();
+                break;
+            case Hotkey::VOLUME_UP:
+                core->volumeUp();
+                break;
+            case Hotkey::VOLUME_DOWN:
+                core->volumeDown();
+                break;
+            case Hotkey::FORWARD:
+                core->seek(core->elapsed() + 5000);
+                break;
+            case Hotkey::REWIND:
+                core->seek(qMax(qint64(0), core->elapsed() - 5000));
+                break;
+            case Hotkey::JUMP_TO_TRACK:
+                UiHelper::instance()->jumpToTrack();
+                break;
+            case Hotkey::VOLUME_MUTE:
+                
SoundCore::instance()->setMuted(!SoundCore::instance()->isMuted());
+                break;
+            }
+        }
+    }
+    return false;
+}
+
 #include "moc_hotkeymanager.cpp"
 
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeymanager_x11.cpp 
new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeymanager_x11.cpp
--- old/qmmp-1.2.2/src/plugins/General/hotkey/hotkeymanager_x11.cpp     
2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/hotkey/hotkeymanager_x11.cpp     
2018-07-20 18:09:36.000000000 +0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2009-2015 by Ilya Kotov                                 *
+ *   Copyright (C) 2009-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   Copyright (C) 2003-2007 by Justin Karneges and Michail Pishchagin     *
@@ -24,21 +24,19 @@
 #ifdef QMMP_WS_X11
 #include <QSettings>
 #include <QX11Info>
+#include <QtDebug>
 #include <QEvent>
 #include <QKeyEvent>
 #include <QCoreApplication>
 #include <QApplication>
-#include <QDesktopWidget>
+#include <QAbstractEventDispatcher>
 #define Visual XVisual
-extern "C"
-{
+extern "C" {
 #include <X11/X.h>
-#include <X11/Xlib.h>
 #include <X11/keysym.h>
 #include <X11/XF86keysym.h>
-#ifdef HAVE_XKBLIB_H
 #include <X11/XKBlib.h>
-#endif
+#include <xcb/xcb.h>
 }
 #undef CursorShape
 #undef Status
@@ -80,14 +78,8 @@
 
 HotkeyManager::HotkeyManager(QObject *parent) : QObject(parent)
 {
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 9, 0))
-    //Workaround Qt regression of no longer delivering events for the root 
window
-    //See qtbase commit 2b34aefcf02f09253473b096eb4faffd3e62b5f4
-    //More information: https://bugs.kde.org/show_bug.cgi?id=360841
-    qApp->desktop()->winId();
-#endif
     QCoreApplication::instance()->installEventFilter(this);
-    WId rootWindow = QX11Info::appRootWindow();
+    WId rootWindow = DefaultRootWindow(QX11Info::display());
     QSettings settings(Qmmp::configFile(), QSettings::IniFormat); //load 
settings
     settings.beginGroup("Hotkey");
     for (int i = Hotkey::PLAY, j = 0; i <= Hotkey::VOLUME_MUTE; ++i, ++j)
@@ -105,7 +97,8 @@
                 hotkey->code = XKeysymToKeycode(QX11Info::display(), 
hotkey->key);
                 if(!hotkey->code)
                     continue;
-                XGrabKey(QX11Info::display(),  hotkey->code, mod | mask_mod, 
rootWindow, False,
+
+                XGrabKey(QX11Info::display(),  hotkey->code, mod | mask_mod, 
rootWindow, True,
                          GrabModeAsync, GrabModeAsync);
                 hotkey->mod = mod | mask_mod;
                 m_grabbedKeys << hotkey;
@@ -114,18 +107,19 @@
     }
     settings.endGroup();
     XSync(QX11Info::display(), False);
-    //         XSetErrorHandler();
+    qApp->installNativeEventFilter(this);
 }
 
 HotkeyManager::~HotkeyManager()
 {
-    foreach(Hotkey *key, m_grabbedKeys)
+    qApp->removeNativeEventFilter(this);
+    while(!m_grabbedKeys.isEmpty())
     {
+        Hotkey *key = m_grabbedKeys.takeFirst ();
         if(key->code)
             XUngrabKey(QX11Info::display(), key->code, key->mod, 
QX11Info::appRootWindow());
+        delete key;
     }
-    while (!m_grabbedKeys.isEmpty())
-        delete m_grabbedKeys.takeFirst ();
 }
 
 const QString HotkeyManager::getKeyString(quint32 key, quint32 modifiers)
@@ -142,13 +136,17 @@
     return keyStr;
 }
 
-bool HotkeyManager::eventFilter(QObject* o, QEvent* e)
+bool HotkeyManager::nativeEventFilter(const QByteArray &eventType, void 
*message, long *result)
 {
-    if (e->type() == QEvent::KeyPress)
+    Q_UNUSED(eventType);
+    Q_UNUSED(result);
+    xcb_generic_event_t *e = static_cast<xcb_generic_event_t*>(message);
+
+    if(e->response_type == XCB_KEY_PRESS)
     {
-        QKeyEvent* k = static_cast<QKeyEvent*>(e);
-        quint32 key = keycodeToKeysym(k->nativeScanCode());
-        quint32 mod = k->nativeModifiers ();
+        xcb_key_press_event_t *ke = (xcb_key_press_event_t*)e;
+        quint32 key = keycodeToKeysym(ke->detail);
+        quint32 mod = ke->state;
         SoundCore *core = SoundCore::instance();
         MediaPlayer *player = MediaPlayer::instance();
         foreach(Hotkey *hotkey, m_grabbedKeys)
@@ -201,125 +199,21 @@
             case Hotkey::VOLUME_MUTE:
                 
SoundCore::instance()->setMuted(!SoundCore::instance()->isMuted());
                 break;
-
-            }
-            return true;
-        }
-    }
-    return QObject::eventFilter(o, e);
-}
-long HotkeyManager::m_alt_mask = 0;
-long HotkeyManager::m_meta_mask = 0;
-long HotkeyManager::m_super_mask = 0;
-long HotkeyManager::m_hyper_mask = 0;
-long HotkeyManager::m_numlock_mask = 0;
-bool HotkeyManager::m_haveMods = false;
-
-//copied from globalshortcutmanager_x11.cpp by Justin Karneges and Michail 
Pishchagin (Psi project)
-void HotkeyManager::ensureModifiers()
-{
-    if (m_haveMods)
-        return;
-
-    Display* appDpy = QX11Info::display();
-    XModifierKeymap* map = XGetModifierMapping(appDpy);
-    if (map)
-    {
-        // XkbKeycodeToKeysym helper code adapeted from xmodmap
-        int min_keycode, max_keycode, keysyms_per_keycode = 1;
-        XDisplayKeycodes (appDpy, &min_keycode, &max_keycode);
-        XFree(XGetKeyboardMapping (appDpy, min_keycode, (max_keycode - 
min_keycode + 1), &keysyms_per_keycode));
-
-        int i, maskIndex = 0, mapIndex = 0;
-        for (maskIndex = 0; maskIndex < 8; maskIndex++)
-        {
-            for (i = 0; i < map->max_keypermod; i++)
-            {
-                if (map->modifiermap[mapIndex])
-                {
-                    KeySym sym;
-                    int symIndex = 0;
-                    do
-                    {
-#ifdef HAVE_XKBLIB_H
-                        sym = XkbKeycodeToKeysym(appDpy, 
map->modifiermap[mapIndex], symIndex, 0);
-#else
-                        sym = XKeycodeToKeysym(appDpy, 
map->modifiermap[mapIndex], symIndex);
-#endif
-                        symIndex++;
-                    }
-                    while ( !sym && symIndex < keysyms_per_keycode);
-                    if (!m_alt_mask && (sym == XK_Alt_L || sym == XK_Alt_R))
-                    {
-                        m_alt_mask = 1 << maskIndex;
-                    }
-                    if (!m_meta_mask && (sym == XK_Meta_L || sym == XK_Meta_R))
-                    {
-                        m_meta_mask = 1 << maskIndex;
-                    }
-                    if (!m_super_mask && (sym == XK_Super_L || sym == 
XK_Super_R))
-                    {
-                        m_super_mask = 1 << maskIndex;
-                    }
-                    if (!m_hyper_mask && (sym == XK_Hyper_L || sym == 
XK_Hyper_R))
-                    {
-                        m_hyper_mask = 1 << maskIndex;
-                    }
-                    if (!m_numlock_mask && (sym == XK_Num_Lock))
-                    {
-                        m_numlock_mask = 1 << maskIndex;
-                    }
-                }
-                mapIndex++;
-            }
-        }
-
-        XFreeModifiermap(map);
-
-        // logic from qt source see gui/kernel/qkeymapper_x11.cpp
-        if (!m_meta_mask || m_meta_mask == m_alt_mask)
-        {
-            // no meta keys... s,meta,super,
-            m_meta_mask = m_super_mask;
-            if (!m_meta_mask || m_meta_mask == m_alt_mask)
-            {
-                // no super keys either? guess we'll use hyper then
-                m_meta_mask = m_hyper_mask;
             }
         }
     }
-    else
-    {
-        // assume defaults
-        m_alt_mask = Mod1Mask;
-        m_meta_mask = Mod4Mask;
-    }
-
-    m_haveMods = true;
+    return false;
 }
 
 QList<long> HotkeyManager::ignModifiersList()
 {
-    ensureModifiers();
-    QList<long> ret;
-    if (m_numlock_mask)
-    {
-        ret << 0 << LockMask << m_numlock_mask << (LockMask | m_numlock_mask);
-    }
-    else
-    {
-        ret << 0 << LockMask;
-    }
+    QList<long> ret = { 0, Mod2Mask, LockMask, (Mod2Mask | LockMask) };
     return ret;
 }
 
 quint32 HotkeyManager::keycodeToKeysym(quint32 keycode)
 {
-#ifdef HAVE_XKBLIB_H
     return XkbKeycodeToKeysym(QX11Info::display(), keycode, 0, 0);
-#else
-    return XKeycodeToKeysym(QX11Info::display(), keycode,0);
-#endif
 }
 
 #include "moc_hotkeymanager.cpp"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/General/trackchange/trackchange.cpp 
new/qmmp-1.2.3/src/plugins/General/trackchange/trackchange.cpp
--- old/qmmp-1.2.2/src/plugins/General/trackchange/trackchange.cpp      
2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/trackchange/trackchange.cpp      
2018-07-20 18:09:36.000000000 +0200
@@ -21,7 +21,6 @@
 #include <QAction>
 #include <QSettings>
 #include <QApplication>
-#include <QSignalMapper>
 #include <QProgressDialog>
 #include <QMessageBox>
 #include <QFile>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/General/trackchange/trackchange.pro 
new/qmmp-1.2.3/src/plugins/General/trackchange/trackchange.pro
--- old/qmmp-1.2.2/src/plugins/General/trackchange/trackchange.pro      
2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/General/trackchange/trackchange.pro      
2018-07-20 18:09:36.000000000 +0200
@@ -8,9 +8,7 @@
 
 
 TEMPLATE = lib
-unix : LIBS += -lqmmpui -lqmmp
-
-win32 : LIBS += -lqmmpui0 -lqmmp0
+LIBS += $${QMMPUI_LIB}
 
 RESOURCES = translations/translations.qrc
 unix {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/Input/wavpack/decoderwavpackfactory.cpp 
new/qmmp-1.2.3/src/plugins/Input/wavpack/decoderwavpackfactory.cpp
--- old/qmmp-1.2.2/src/plugins/Input/wavpack/decoderwavpackfactory.cpp  
2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/Input/wavpack/decoderwavpackfactory.cpp  
2018-07-20 18:09:35.000000000 +0200
@@ -94,7 +94,8 @@
         cue_len = WavpackGetTagItem (ctx, "cuesheet", NULL, 0);
         if (cue_len)
         {
-            char *value = (char*)malloc (cue_len * 2 + 1);
+            char value[cue_len + 1];
+            memset(value, 0, cue_len + 1);
             WavpackGetTagItem (ctx, "cuesheet", value, cue_len + 1);
             CUEParser parser(value, fileName);
             list = parser.createPlayList();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/Output/directsound/outputdirectsound.cpp 
new/qmmp-1.2.3/src/plugins/Output/directsound/outputdirectsound.cpp
--- old/qmmp-1.2.2/src/plugins/Output/directsound/outputdirectsound.cpp 
2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/Output/directsound/outputdirectsound.cpp 
2018-07-20 18:09:35.000000000 +0200
@@ -20,6 +20,7 @@
 
 #include <QObject>
 #include <QSettings>
+#include <QMessageBox>
 #include <string.h>
 #include <iostream>
 #include <unistd.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/Output/directsound/outputdirectsound.h 
new/qmmp-1.2.3/src/plugins/Output/directsound/outputdirectsound.h
--- old/qmmp-1.2.2/src/plugins/Output/directsound/outputdirectsound.h   
2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/Output/directsound/outputdirectsound.h   
2018-07-20 18:09:35.000000000 +0200
@@ -21,6 +21,7 @@
 #ifndef OUTPUTDIRECTSOUND_H
 #define OUTPUTDIRECTSOUND_H
 
+#include <QTranslator>
 #include <stdio.h>
 #include <windows.h>
 #include <ksmedia.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/Output/directsound/outputdirectsoundfactory.cpp 
new/qmmp-1.2.3/src/plugins/Output/directsound/outputdirectsoundfactory.cpp
--- old/qmmp-1.2.2/src/plugins/Output/directsound/outputdirectsoundfactory.cpp  
2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/Output/directsound/outputdirectsoundfactory.cpp  
2018-07-20 18:09:35.000000000 +0200
@@ -18,7 +18,7 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-
+#include <QMessageBox>
 #include "outputdirectsound.h"
 #include "outputdirectsoundfactory.h"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/Output/waveout/outputwaveout.cpp 
new/qmmp-1.2.3/src/plugins/Output/waveout/outputwaveout.cpp
--- old/qmmp-1.2.2/src/plugins/Output/waveout/outputwaveout.cpp 2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/Output/waveout/outputwaveout.cpp 2018-07-20 
18:09:35.000000000 +0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2009-2017 by Ilya Kotov                                 *
+ *   Copyright (C) 2009-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -236,7 +236,7 @@
     if (dev)
     {
         waveOutReset(dev); // reset the device
-        while (ScheduledBlocks > 0);
+        while (ScheduledBlocks > 0)
             Sleep (10);
 
         while (PlayedWaveHeadersCount > 0)         // free used blocks ...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/Output/waveout/outputwaveoutfactory.cpp 
new/qmmp-1.2.3/src/plugins/Output/waveout/outputwaveoutfactory.cpp
--- old/qmmp-1.2.2/src/plugins/Output/waveout/outputwaveoutfactory.cpp  
2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/Output/waveout/outputwaveoutfactory.cpp  
2018-07-20 18:09:35.000000000 +0200
@@ -18,7 +18,7 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-
+#include <QMessageBox>
 #include "outputwaveout.h"
 #include "outputwaveoutfactory.h"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qmmp-1.2.2/src/plugins/Output/waveout/outputwaveoutfactory.h 
new/qmmp-1.2.3/src/plugins/Output/waveout/outputwaveoutfactory.h
--- old/qmmp-1.2.2/src/plugins/Output/waveout/outputwaveoutfactory.h    
2018-05-31 18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/Output/waveout/outputwaveoutfactory.h    
2018-07-20 18:09:35.000000000 +0200
@@ -24,6 +24,7 @@
 #include <QString>
 #include <QIODevice>
 #include <QWidget>
+#include <QTranslator>
 #include <qmmp/output.h>
 #include <qmmp/outputfactory.h>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/plugins/Ui/skinned/mainwindow.cpp 
new/qmmp-1.2.3/src/plugins/Ui/skinned/mainwindow.cpp
--- old/qmmp-1.2.2/src/plugins/Ui/skinned/mainwindow.cpp        2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/Ui/skinned/mainwindow.cpp        2018-07-20 
18:09:35.000000000 +0200
@@ -23,7 +23,6 @@
 #include <QAction>
 #include <QMenu>
 #include <QDesktopWidget>
-#include <QSignalMapper>
 #include <math.h>
 #include <qmmp/soundcore.h>
 #include <qmmp/visual.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/plugins/Ui/skinned/skin.cpp 
new/qmmp-1.2.3/src/plugins/Ui/skinned/skin.cpp
--- old/qmmp-1.2.2/src/plugins/Ui/skinned/skin.cpp      2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/plugins/Ui/skinned/skin.cpp      2018-07-20 
18:09:35.000000000 +0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2007-2017 by Ilya Kotov                                 *
+ *   Copyright (C) 2007-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   Based on Promoe, an XMMS2 Client                                      *
@@ -630,10 +630,10 @@
 {
     QPixmap *img = getPixmap("text");
 
-    QList<QList<QPixmap> > (letters);
+    QList<QList<QPixmap> > letters;
     for (int i = 0; i < 3; i++)
     {
-        QList<QPixmap> (l);
+        QList<QPixmap> l;
         for (int j = 0; j < 31; j++)
         {
             l.append (img->copy (j*5, i*6, 5, 6));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/plugins/plugins.pri 
new/qmmp-1.2.3/src/plugins/plugins.pri
--- old/qmmp-1.2.2/src/plugins/plugins.pri      2018-05-31 18:53:28.000000000 
+0200
+++ new/qmmp-1.2.3/src/plugins/plugins.pri      2018-07-20 18:09:35.000000000 
+0200
@@ -5,8 +5,8 @@
 win32 {
     QMAKE_LIBDIR += ../../../../bin
     PLUGINS_PREFIX=../../../../../bin/plugins
-    LIBS += -lqmmp0
-    QMMPUI_LIB = -lqmmpui0
+    LIBS += -lqmmp1
+    QMMPUI_LIB = -lqmmpui1
 }
 
 unix {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/qmmp/qmmp.h 
new/qmmp-1.2.3/src/qmmp/qmmp.h
--- old/qmmp-1.2.2/src/qmmp/qmmp.h      2018-05-31 18:53:29.000000000 +0200
+++ new/qmmp-1.2.3/src/qmmp/qmmp.h      2018-07-20 18:09:37.000000000 +0200
@@ -24,7 +24,7 @@
 
 #define QMMP_VERSION_MAJOR 1
 #define QMMP_VERSION_MINOR 2
-#define QMMP_VERSION_PATCH 2
+#define QMMP_VERSION_PATCH 3
 #define QMMP_VERSION_STABLE 1
 
 #define QMMP_VERSION_INT (QMMP_VERSION_MAJOR<<16 | QMMP_VERSION_MINOR<<8 | 
QMMP_VERSION_PATCH)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/qmmp/qmmpaudioengine.cpp 
new/qmmp-1.2.3/src/qmmp/qmmpaudioengine.cpp
--- old/qmmp-1.2.2/src/qmmp/qmmpaudioengine.cpp 2018-05-31 18:53:28.000000000 
+0200
+++ new/qmmp-1.2.3/src/qmmp/qmmpaudioengine.cpp 2018-07-20 18:09:35.000000000 
+0200
@@ -389,15 +389,15 @@
         {
             QMap<Qmmp::MetaData, QString> m = m_decoder->takeMetaData();
             m[Qmmp::URL] = m_inputs[m_decoder]->url();
-            StateHandler::instance()->dispatch(m);
-            m_metaData = QSharedPointer<QMap<Qmmp::MetaData, QString> >(new 
QMap<Qmmp::MetaData, QString>(m));
+            if(StateHandler::instance()->dispatch(m))
+                m_metaData = QSharedPointer<QMap<Qmmp::MetaData, QString> 
>(new QMap<Qmmp::MetaData, QString>(m));
         }
         if(m_inputs[m_decoder]->hasMetaData())
         {
             QMap<Qmmp::MetaData, QString> m = 
m_inputs[m_decoder]->takeMetaData();
             m[Qmmp::URL] = m_inputs[m_decoder]->url();
-            StateHandler::instance()->dispatch(m);
-            m_metaData = QSharedPointer<QMap<Qmmp::MetaData, QString> >(new 
QMap<Qmmp::MetaData, QString>(m));
+            if(StateHandler::instance()->dispatch(m))
+                m_metaData = QSharedPointer<QMap<Qmmp::MetaData, QString> 
>(new QMap<Qmmp::MetaData, QString>(m));
         }
         if(m_inputs[m_decoder]->hasStreamInfo())
             
StateHandler::instance()->dispatch(m_inputs[m_decoder]->takeStreamInfo());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/qmmp/statehandler.cpp 
new/qmmp-1.2.3/src/qmmp/statehandler.cpp
--- old/qmmp-1.2.2/src/qmmp/statehandler.cpp    2018-05-31 18:53:28.000000000 
+0200
+++ new/qmmp-1.2.3/src/qmmp/statehandler.cpp    2018-07-20 18:09:35.000000000 
+0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2008-2017 by Ilya Kotov                                 *
+ *   Copyright (C) 2008-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -92,9 +92,9 @@
     m_mutex.unlock();
 }
 
-void StateHandler::dispatch(const QMap<Qmmp::MetaData, QString> &metaData)
+bool StateHandler::dispatch(const QMap<Qmmp::MetaData, QString> &metaData)
 {
-    m_mutex.lock();
+    QMutexLocker locker(&m_mutex);
     QMap<Qmmp::MetaData, QString> tmp = metaData;
     foreach(QString value, tmp.values()) //remove empty keys
     {
@@ -104,14 +104,12 @@
     if(tmp.isEmpty() || tmp.value(Qmmp::URL).isEmpty()) //skip empty tags
     {
         qWarning("StateHandler: empty metadata");
-        m_mutex.unlock();
-        return;
+        return false;
     }
     if(m_state != Qmmp::Playing && m_state != Qmmp::Paused)
     {
         qWarning("StateHandler: metadata is ignored");
-        m_mutex.unlock();
-        return;
+        return false;
     }
 
     if(m_metaData.isEmpty() || m_metaData.value(Qmmp::URL) == 
metaData.value(Qmmp::URL))
@@ -120,9 +118,10 @@
         {
             m_metaData = tmp;
             qApp->postEvent(parent(), new MetaDataChangedEvent(m_metaData));
+            return true;
         }
     }
-    m_mutex.unlock();
+    return false;
 }
 
 void StateHandler::dispatch(const QHash<QString, QString> &info)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/qmmp/statehandler.h 
new/qmmp-1.2.3/src/qmmp/statehandler.h
--- old/qmmp-1.2.2/src/qmmp/statehandler.h      2018-05-31 18:53:28.000000000 
+0200
+++ new/qmmp-1.2.3/src/qmmp/statehandler.h      2018-07-20 18:09:35.000000000 
+0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2008-2017 by Ilya Kotov                                 *
+ *   Copyright (C) 2008-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -61,9 +61,10 @@
      */
     void dispatch(qint64 length);
     /*!
-     * Sends metadata \b metaData
+     * Sends metadata \b metaData. Returns \b true if metadata has been
+     * accepted, otherwise returns \b false
      */
-    void dispatch(const QMap<Qmmp::MetaData, QString> &metaData);
+    bool dispatch(const QMap<Qmmp::MetaData, QString> &metaData);
     /*!
      * Sends stream information \b info
      */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/qmmpui/detailsdialog.cpp 
new/qmmp-1.2.3/src/qmmpui/detailsdialog.cpp
--- old/qmmp-1.2.2/src/qmmpui/detailsdialog.cpp 2018-05-31 18:53:28.000000000 
+0200
+++ new/qmmp-1.2.3/src/qmmpui/detailsdialog.cpp 2018-07-20 18:09:35.000000000 
+0200
@@ -89,6 +89,13 @@
     }
     else
         reject();
+
+    //close all files before closing dialog
+    if(m_metaDataModel)
+    {
+        delete m_metaDataModel;
+        m_metaDataModel = 0;
+    }
 }
 
 void DetailsDialog::on_tabWidget_currentChanged(int index)
@@ -115,6 +122,16 @@
     updatePage();
 }
 
+void DetailsDialog::closeEvent(QCloseEvent *)
+{
+    //close all files before closing dialog
+    if(m_metaDataModel)
+    {
+        delete m_metaDataModel;
+        m_metaDataModel = 0;
+    }
+}
+
 void DetailsDialog::updatePage()
 {
     if(m_metaDataModel)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/qmmpui/detailsdialog.h 
new/qmmp-1.2.3/src/qmmpui/detailsdialog.h
--- old/qmmp-1.2.2/src/qmmpui/detailsdialog.h   2018-05-31 18:53:28.000000000 
+0200
+++ new/qmmp-1.2.3/src/qmmpui/detailsdialog.h   2018-07-20 18:09:35.000000000 
+0200
@@ -61,6 +61,7 @@
 
 private:
     Ui::DetailsDialog *m_ui;
+    void closeEvent(QCloseEvent *);
     void updatePage();
     void printInfo();
     QString formatRow(const QString key, const QString value);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/qmmpui/playlistmanager.cpp 
new/qmmp-1.2.3/src/qmmpui/playlistmanager.cpp
--- old/qmmp-1.2.2/src/qmmpui/playlistmanager.cpp       2018-05-31 
18:53:28.000000000 +0200
+++ new/qmmp-1.2.3/src/qmmpui/playlistmanager.cpp       2018-07-20 
18:09:35.000000000 +0200
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2009-2017 by Ilya Kotov                                 *
+ *   Copyright (C) 2009-2018 by Ilya Kotov                                 *
  *   [email protected]                                                      *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -302,6 +302,8 @@
             tracks.last()->insert(Qmmp::DISCNUMBER, value);
         else if (param == "length")
             tracks.last()->setLength(value.toInt());
+        else if (param == "duration")
+            tracks.last()->setLength(value.toInt() / 1000);    
     }
     buffer.close();
     if(m_models.isEmpty())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qmmp-1.2.2/src/qmmpui/qmmpui.pro 
new/qmmp-1.2.3/src/qmmpui/qmmpui.pro
--- old/qmmp-1.2.2/src/qmmpui/qmmpui.pro        2018-05-31 18:53:28.000000000 
+0200
+++ new/qmmp-1.2.3/src/qmmpui/qmmpui.pro        2018-07-20 18:09:35.000000000 
+0200
@@ -22,7 +22,7 @@
 
 win32 {
     TARGET = ../../../bin/qmmpui
-    LIBS += -L../../bin -lqmmp0 -lole32
+    LIBS += -L../../bin -lqmmp1 -lole32
     HEADERS += winfileassoc.h \
                winfileassocpage_p.h
     SOURCES += winfileassoc.cpp \


Reply via email to