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 \
