Blackberry: Compile with lastest event filter API changes

Change-Id: I4eb7ddf050cd8ef34df4547482f53f7372584221
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Reviewed-by: David Faure <faure@kde.org>
This commit is contained in:
Thomas McGuire
2012-07-23 11:17:42 +02:00
committed by Qt by Nokia
parent ae728a4b1e
commit ace2c75167
2 changed files with 53 additions and 71 deletions

View File

@@ -66,29 +66,6 @@ QT_BEGIN_NAMESPACE
static int idCounter = 0; static int idCounter = 0;
static bool s_eventFilterInstalled = 0;
static QAbstractEventDispatcher::EventFilter s_previousEventFilter = 0;
static QHash< int, BbMediaPlayerControl* > s_idToPlayerMap;
static bool s_eventFilter(void *message)
{
bps_event_t * const event = static_cast<bps_event_t *>(message);
if (event &&
(bps_event_get_domain(event) == mmrenderer_get_domain() ||
bps_event_get_domain(event) == screen_get_domain() )) {
const int id = mmrenderer_event_get_userdata(event);
BbMediaPlayerControl * const control = s_idToPlayerMap.value(id);
if (control)
control->bpsEventHandler(event);
}
if (s_previousEventFilter)
return s_previousEventFilter(message);
else
return false;
}
BbMediaPlayerControl::BbMediaPlayerControl(QObject *parent) BbMediaPlayerControl::BbMediaPlayerControl(QObject *parent)
: QMediaPlayerControl(parent), : QMediaPlayerControl(parent),
m_connection(0), m_connection(0),
@@ -107,12 +84,7 @@ BbMediaPlayerControl::BbMediaPlayerControl(QObject *parent)
m_stopEventsToIgnore(0), m_stopEventsToIgnore(0),
m_bufferStatus(0) m_bufferStatus(0)
{ {
if (!s_eventFilterInstalled) { QCoreApplication::eventDispatcher()->installNativeEventFilter(this);
s_eventFilterInstalled = true;
s_previousEventFilter =
QCoreApplication::eventDispatcher()->setEventFilter(s_eventFilter);
}
openConnection(); openConnection();
} }
@@ -121,6 +93,7 @@ BbMediaPlayerControl::~BbMediaPlayerControl()
stop(); stop();
detach(); detach();
closeConnection(); closeConnection();
QCoreApplication::eventDispatcher()->removeNativeEventFilter(this);
} }
void BbMediaPlayerControl::openConnection() void BbMediaPlayerControl::openConnection()
@@ -142,7 +115,6 @@ void BbMediaPlayerControl::openConnection()
return; return;
} }
s_idToPlayerMap.insert(m_id, this);
m_eventMonitor = mmrenderer_request_events(m_contextName.toLatin1(), 0, m_id); m_eventMonitor = mmrenderer_request_events(m_contextName.toLatin1(), 0, m_id);
if (!m_eventMonitor) { if (!m_eventMonitor) {
qBbMediaDebug() << "Unable to request multimedia events"; qBbMediaDebug() << "Unable to request multimedia events";
@@ -152,7 +124,6 @@ void BbMediaPlayerControl::openConnection()
void BbMediaPlayerControl::closeConnection() void BbMediaPlayerControl::closeConnection()
{ {
s_idToPlayerMap.remove(m_id);
if (m_eventMonitor) { if (m_eventMonitor) {
mmrenderer_stop_events(m_eventMonitor); mmrenderer_stop_events(m_eventMonitor);
m_eventMonitor = 0; m_eventMonitor = 0;
@@ -527,14 +498,21 @@ void BbMediaPlayerControl::setVideoControl(BbVideoWindowControl *videoControl)
m_videoControl = videoControl; m_videoControl = videoControl;
} }
void BbMediaPlayerControl::bpsEventHandler(bps_event_t *event) bool BbMediaPlayerControl::nativeEventFilter(const QByteArray &eventType, void *message, long *result)
{ {
Q_UNUSED(eventType);
Q_UNUSED(result);
bps_event_t * const event = static_cast<bps_event_t *>(message);
if (!event ||
(bps_event_get_domain(event) != mmrenderer_get_domain() &&
bps_event_get_domain(event) != screen_get_domain()))
return false;
if (m_videoControl) if (m_videoControl)
m_videoControl->bpsEventHandler(event); m_videoControl->bpsEventHandler(event);
if (bps_event_get_domain(event) != mmrenderer_get_domain()) if (bps_event_get_domain(event) == mmrenderer_get_domain()) {
return;
if (bps_event_get_code(event) == MMRENDERER_STATE_CHANGE) { if (bps_event_get_code(event) == MMRENDERER_STATE_CHANGE) {
const mmrenderer_state_t newState = mmrenderer_event_get_state(event); const mmrenderer_state_t newState = mmrenderer_event_get_state(event);
if (newState == MMR_STOPPED) { if (newState == MMR_STOPPED) {
@@ -547,7 +525,7 @@ void BbMediaPlayerControl::bpsEventHandler(bps_event_t *event)
--m_stopEventsToIgnore; --m_stopEventsToIgnore;
else else
stopInternal(IgnoreMmRenderer); stopInternal(IgnoreMmRenderer);
return; return false;
} }
} }
@@ -556,7 +534,7 @@ void BbMediaPlayerControl::bpsEventHandler(bps_event_t *event)
// Prevent spurious position change events from overriding our own position, for example // Prevent spurious position change events from overriding our own position, for example
// when setting the position to 0 in stop(). // when setting the position to 0 in stop().
if (m_state != QMediaPlayer::PlayingState) if (m_state != QMediaPlayer::PlayingState)
return; return false;
const qint64 newPosition = QString::fromLatin1(mmrenderer_event_get_position(event)).toLongLong(); const qint64 newPosition = QString::fromLatin1(mmrenderer_event_get_position(event)).toLongLong();
if (newPosition != 0 && newPosition != m_position) { if (newPosition != 0 && newPosition != m_position) {
@@ -575,6 +553,9 @@ void BbMediaPlayerControl::bpsEventHandler(bps_event_t *event)
} }
} }
} }
}
return false;
} }
void BbMediaPlayerControl::updateMetaData() void BbMediaPlayerControl::updateMetaData()

View File

@@ -43,6 +43,7 @@
#include "bbmetadata.h" #include "bbmetadata.h"
#include <qmediaplayercontrol.h> #include <qmediaplayercontrol.h>
#include <QtCore/qabstractnativeeventfilter.h>
#include <QtCore/qpointer.h> #include <QtCore/qpointer.h>
struct bps_event_t; struct bps_event_t;
@@ -54,7 +55,7 @@ QT_BEGIN_NAMESPACE
class BbVideoWindowControl; class BbVideoWindowControl;
class BbMediaPlayerControl : public QMediaPlayerControl class BbMediaPlayerControl : public QMediaPlayerControl, public QAbstractNativeEventFilter
{ {
Q_OBJECT Q_OBJECT
public: public:
@@ -97,7 +98,7 @@ public:
void stop(); void stop();
void setVideoControl(BbVideoWindowControl *videoControl); void setVideoControl(BbVideoWindowControl *videoControl);
void bpsEventHandler(bps_event_t *event); bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
private Q_SLOTS: private Q_SLOTS:
void continueLoadMedia(); void continueLoadMedia();