vlc | branch: master | Francois Cartegnie <[email protected]> | Sat Sep 15 14:19:43 2012 +0200| [7fab4e77c663e0bcd348fb35170186912145963a] | committer: Francois Cartegnie
Qt: Remove event deduplication (fix #7390). No way to reproduce bug case. Fixing by removing all the code. This reverts commit ddf9e6da14762a84d5c64eecd25015daef388098. This reverts commit c7ab9f113d6a3e788d05a45ad2ccd31527901d88. This reverts commit 541c1d97c0087c5de559b9793f42ea698f8c284e. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7fab4e77c663e0bcd348fb35170186912145963a --- modules/gui/qt4/Modules.am | 3 -- modules/gui/qt4/input_manager.cpp | 19 +-------- modules/gui/qt4/input_manager.hpp | 13 +----- modules/gui/qt4/util/uniqueevent.cpp | 78 ---------------------------------- modules/gui/qt4/util/uniqueevent.hpp | 57 ------------------------- 5 files changed, 4 insertions(+), 166 deletions(-) diff --git a/modules/gui/qt4/Modules.am b/modules/gui/qt4/Modules.am index b88055b..334c534 100644 --- a/modules/gui/qt4/Modules.am +++ b/modules/gui/qt4/Modules.am @@ -73,7 +73,6 @@ nodist_SOURCES_qt4 = \ util/qmenuview.moc.cpp \ util/qvlcapp.moc.cpp \ util/pictureflow.moc.cpp \ - util/uniqueevent.moc.cpp \ util/buttons/RoundButton.moc.cpp \ util/buttons/DeckButtonsLayout.moc.cpp \ util/buttons/BrowseButton.moc.cpp \ @@ -313,7 +312,6 @@ SOURCES_qt4 = qt4.cpp \ util/qmenuview.cpp \ util/qt_dirs.cpp \ util/pictureflow.cpp \ - util/uniqueevent.cpp \ util/buttons/BrowseButton.cpp \ util/buttons/DeckButtonsLayout.cpp \ util/buttons/RoundButton.cpp \ @@ -393,7 +391,6 @@ noinst_HEADERS = \ util/qt_dirs.hpp \ util/registry.hpp \ util/pictureflow.hpp \ - util/uniqueevent.hpp \ util/singleton.hpp \ util/buttons/RoundButton.hpp \ util/buttons/DeckButtonsLayout.hpp \ diff --git a/modules/gui/qt4/input_manager.cpp b/modules/gui/qt4/input_manager.cpp index db05853..5107f5a 100644 --- a/modules/gui/qt4/input_manager.cpp +++ b/modules/gui/qt4/input_manager.cpp @@ -87,14 +87,12 @@ InputManager::InputManager( QObject *parent, intf_thread_t *_p_intf) : timeA = 0; timeB = 0; f_cache = -1.; /* impossible initial value, different from all */ - rateLimitedEventPoster = new RateLimitedEventPoster(); registerAndCheckEventIds( IMEvent::PositionUpdate, IMEvent::FullscreenControlPlanHide ); registerAndCheckEventIds( PLEvent::PLItemAppended, PLEvent::PLEmpty ); } InputManager::~InputManager() { - delete rateLimitedEventPoster; delInput(); } @@ -179,11 +177,6 @@ void InputManager::delInput() emit cachingChanged( 1 ); } -void InputManager::postUniqueEvent( QObject *target, UniqueEvent *e ) -{ - rateLimitedEventPoster->postEvent( e, target ); -} - /* Convert the event from the callbacks in actions */ void InputManager::customEvent( QEvent *event ) { @@ -300,7 +293,7 @@ static int ItemChanged( vlc_object_t *p_this, const char *psz_var, input_item_t *p_item = static_cast<input_item_t *>(newval.p_address); IMEvent *event = new IMEvent( IMEvent::ItemChanged, p_item ); - im->postUniqueEvent( im, event ); + QApplication::postEvent( im, event ); return VLC_SUCCESS; } @@ -311,7 +304,6 @@ static int InputEvent( vlc_object_t *p_this, const char *, InputManager *im = (InputManager*)param; IMEvent *event; - bool b_unified = false; switch( newval.i_int ) { @@ -350,14 +342,12 @@ static int InputEvent( vlc_object_t *p_this, const char *, break; case INPUT_EVENT_ITEM_META: /* Codec MetaData + Art */ - b_unified = true; event = new IMEvent( IMEvent::MetaChanged ); break; case INPUT_EVENT_ITEM_INFO: /* Codec Info */ event = new IMEvent( IMEvent::InfoChanged ); break; case INPUT_EVENT_ITEM_NAME: - b_unified = true; event = new IMEvent( IMEvent::NameChanged ); break; @@ -398,12 +388,7 @@ static int InputEvent( vlc_object_t *p_this, const char *, } if( event ) - { - if ( b_unified ) - im->postUniqueEvent( im, event ); - else - QApplication::postEvent( im, event ); - } + QApplication::postEvent( im, event ); return VLC_SUCCESS; } diff --git a/modules/gui/qt4/input_manager.hpp b/modules/gui/qt4/input_manager.hpp index fd1e967..33648a3 100644 --- a/modules/gui/qt4/input_manager.hpp +++ b/modules/gui/qt4/input_manager.hpp @@ -33,7 +33,6 @@ #include "qt4.hpp" #include "util/singleton.hpp" -#include "util/uniqueevent.hpp" #include "variables.hpp" #include <QObject> @@ -44,7 +43,7 @@ enum { NORMAL, /* loop: 0, repeat: 0 */ REPEAT_ALL,/* loop: 1, repeat: 0 */ }; -class IMEvent : public UniqueEvent +class IMEvent : public QEvent { public: enum event_types { @@ -78,7 +77,7 @@ public: }; IMEvent( event_types type, input_item_t *p_input = NULL ) - : UniqueEvent( (QEvent::Type)(type) ) + : QEvent( (QEvent::Type)(type) ) { if( (p_item = p_input) != NULL ) vlc_gc_incref( p_item ); @@ -92,12 +91,6 @@ public: input_item_t *item() const { return p_item; }; - virtual bool equals(UniqueEvent *e) const - { - IMEvent *ev = static_cast<IMEvent *>(e); - return ( ev->item() == p_item && ev->type() == type() ); - } - private: input_item_t *p_item; }; @@ -153,7 +146,6 @@ public: QString getName() { return oldName; } static const QString decodeArtURL( input_item_t *p_item ); - void postUniqueEvent( QObject *, UniqueEvent * ); private: intf_thread_t *p_intf; @@ -169,7 +161,6 @@ private: mtime_t timeA, timeB; void customEvent( QEvent * ); - RateLimitedEventPoster *rateLimitedEventPoster; void addCallbacks(); void delCallbacks(); diff --git a/modules/gui/qt4/util/uniqueevent.cpp b/modules/gui/qt4/util/uniqueevent.cpp deleted file mode 100644 index 7dade60..0000000 --- a/modules/gui/qt4/util/uniqueevent.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/***************************************************************************** - * Copyright © 2012 VideoLAN - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. - *****************************************************************************/ - -#include "uniqueevent.hpp" -#include "qt4.hpp" - -#include <QTimer> -#include <QApplication> -#include <QMutex> - -RateLimitedEventPoster::RateLimitedEventPoster( int i_millisec_interval ) -{ - timer = new QTimer(); - mutex = new QMutex(); - timer->setSingleShot( true ); - /* Assuming a 24fps event loop, delays at least events to the next frame */ - if ( i_millisec_interval < 1 ) - i_millisec_interval = 1000 / 48; - timer->setInterval( i_millisec_interval ); - CONNECT( timer, timeout(), this, commit() ); -} - -RateLimitedEventPoster::~RateLimitedEventPoster() -{ - timer->stop(); - commit(); - delete timer; - delete mutex; -} - -void RateLimitedEventPoster::postEvent( UniqueEvent *e, QObject *target ) -{ - event_tuple newtuple = { target, e }; - mutex->lock(); - foreach( const event_tuple & tuple, eventsList ) - { - if ( target == tuple.target && tuple.event->equals( e ) ) - { - delete e; - mutex->unlock(); - return; - } - } - eventsList << newtuple; - mutex->unlock(); - if ( eventsList.count() >= 100 ) /* limit lookup time */ - { - timer->stop(); - commit(); - } - if ( !timer->isActive() ) timer->start(); -} - -void RateLimitedEventPoster::commit() -{ - mutex->lock(); - foreach( const event_tuple & tuple, eventsList ) - { - QApplication::postEvent( tuple.target, tuple.event ); - } - eventsList.clear(); - mutex->unlock(); -} diff --git a/modules/gui/qt4/util/uniqueevent.hpp b/modules/gui/qt4/util/uniqueevent.hpp deleted file mode 100644 index 5065441..0000000 --- a/modules/gui/qt4/util/uniqueevent.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/***************************************************************************** - * Copyright © 2012 VideoLAN - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. - *****************************************************************************/ -#ifndef UNIQUEEVENT_HPP -#define UNIQUEEVENT_HPP - -#include <QObject> -#include <QEvent> -#include <QList> -class QTimer; -class QMutex; - -class UniqueEvent : public QEvent -{ -public: - UniqueEvent( QEvent::Type type ) : QEvent( type ) {}; - virtual bool equals( UniqueEvent *e ) const = 0; -}; - -class RateLimitedEventPoster : public QObject -{ - Q_OBJECT - -public: - RateLimitedEventPoster( int i_millisec_interval = -1 ); - ~RateLimitedEventPoster(); - void postEvent( UniqueEvent *e, QObject *target ); - -private slots: - void commit(); - -private: - struct event_tuple - { - QObject *target; - UniqueEvent *event; - }; - QList<event_tuple> eventsList; - QTimer *timer; - QMutex *mutex; -}; - -#endif // UNIQUEEVENT_HPP _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
