summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/3rdparty/phonon/gstreamer/mediaobject.cpp22
-rw-r--r--src/gui/kernel/qapplication.cpp2
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp9
-rw-r--r--tests/auto/qwidget/tst_qwidget.cpp82
-rw-r--r--tools/linguist/lconvert/main.cpp8
-rw-r--r--tools/linguist/lupdate/main.cpp9
6 files changed, 120 insertions, 12 deletions
diff --git a/src/3rdparty/phonon/gstreamer/mediaobject.cpp b/src/3rdparty/phonon/gstreamer/mediaobject.cpp
index 13f9734..5dcbd42 100644
--- a/src/3rdparty/phonon/gstreamer/mediaobject.cpp
+++ b/src/3rdparty/phonon/gstreamer/mediaobject.cpp
@@ -369,6 +369,11 @@ bool MediaObject::createPipefromURL(const QUrl &url)
if (!m_datasource)
return false;
+ // Set the device for MediaSource::Disc
+ QByteArray mediaDevice = QFile::encodeName(m_source.deviceName());
+ if (!mediaDevice.isEmpty())
+ g_object_set (m_datasource, "device", mediaDevice.constData(), (const char*)NULL);
+
// Link data source into pipeline
gst_bin_add(GST_BIN(m_pipeline), m_datasource);
if (!gst_element_link(m_datasource, m_decodebin)) {
@@ -904,8 +909,21 @@ void MediaObject::setSource(const MediaSource &source)
case MediaSource::Disc: // CD tracks can be specified by setting the url in the following way uri=cdda:4
{
- QUrl cdurl(QLatin1String("cdda://"));
- if (createPipefromURL(cdurl))
+ QUrl url;
+ switch (source.discType()) {
+ case Phonon::Cd:
+ url = QUrl(QLatin1String("cdda://"));
+ break;
+ case Phonon::Dvd:
+ url = QUrl(QLatin1String("dvd://"));
+ break;
+ case Phonon::Vcd:
+ url = QUrl(QLatin1String("vcd://"));
+ break;
+ default:
+ break;
+ }
+ if (!url.isEmpty() && createPipefromURL(url))
m_loading = true;
else
setError(tr("Could not open media source."));
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 1332545..044fedd 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -3071,7 +3071,7 @@ void QApplicationPrivate::sendSyntheticEnterLeave(QWidget *widget)
qt_button_down = 0;
// Send enter/leave events followed by a mouse move on the entered widget.
- QMouseEvent e(QEvent::MouseMove, pos, globalPos, Qt::NoButton, mouse_buttons, modifier_buttons);
+ QMouseEvent e(QEvent::MouseMove, pos, globalPos, Qt::NoButton, Qt::NoButton, Qt::NoModifier);
sendMouseEvent(widgetUnderCursor, &e, widgetUnderCursor, tlw, &qt_button_down, qt_last_mouse_receiver);
#endif // QT_NO_CURSOR
}
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index 27c0ed4..1124337 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -191,6 +191,15 @@ void QHttpNetworkConnectionPrivate::prepareRequest(HttpMessagePair &messagePair)
request.d->autoDecompress = false;
#endif
}
+
+ // some websites mandate an accept-language header and fail
+ // if it is not sent. This is a problem with the website and
+ // not with us, but we work around this by setting a
+ // universal one always.
+ value = request.headerField("accept-language");
+ if (value.isEmpty())
+ request.setHeaderField("accept-language", "en,*");
+
// set the User Agent
value = request.headerField("user-agent");
if (value.isEmpty())
diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp
index e4608b2..22aedc5 100644
--- a/tests/auto/qwidget/tst_qwidget.cpp
+++ b/tests/auto/qwidget/tst_qwidget.cpp
@@ -355,6 +355,7 @@ private slots:
void maskedUpdate();
#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS)
void syntheticEnterLeave();
+ void taskQTBUG_4055_sendSyntheticEnterLeave();
#endif
void windowFlags();
void initialPosForDontShowOnScreenWidgets();
@@ -8977,6 +8978,87 @@ void tst_QWidget::syntheticEnterLeave()
QCOMPARE(window.numEnterEvents, 0);
QCOMPARE(child1->numEnterEvents, 1);
}
+
+void tst_QWidget::taskQTBUG_4055_sendSyntheticEnterLeave()
+{
+ class SELParent : public QWidget
+ {
+ public:
+ SELParent(QWidget *parent = 0): QWidget(parent) { }
+
+ void mousePressEvent(QMouseEvent *) { child->show(); }
+ QWidget *child;
+ };
+
+ class SELChild : public QWidget
+ {
+ public:
+ SELChild(QWidget *parent = 0) : QWidget(parent), numEnterEvents(0), numMouseMoveEvents(0) {}
+ void enterEvent(QEvent *) { ++numEnterEvents; }
+ void mouseMoveEvent(QMouseEvent *event)
+ {
+ QCOMPARE(event->button(), Qt::NoButton);
+ QCOMPARE(event->buttons(), Qt::MouseButtons(Qt::NoButton));
+ ++numMouseMoveEvents;
+ }
+ void reset() { numEnterEvents = numMouseMoveEvents = 0; }
+ int numEnterEvents, numMouseMoveEvents;
+ };
+
+ SELParent parent;
+ parent.resize(200, 200);
+ SELChild child(&parent);
+ child.resize(200, 200);
+ parent.show();
+ #ifdef Q_WS_X11
+ qt_x11_wait_for_window_manager(&parent);
+ #endif
+ QTest::qWait(100);
+
+ QCursor::setPos(child.mapToGlobal(QPoint(100, 100)));
+ QTest::qWait(100);
+ // Make sure the cursor has entered the child.
+ QVERIFY(child.numEnterEvents > 0);
+
+ child.hide();
+ child.reset();
+ child.show();
+
+ // Make sure the child gets enter event and no mouse move event.
+ QCOMPARE(child.numEnterEvents, 1);
+ QCOMPARE(child.numMouseMoveEvents, 0);
+
+ child.hide();
+ child.reset();
+ child.setMouseTracking(true);
+ child.show();
+
+ // Make sure the child gets enter event and mouse move event.
+ // Note that we verify event->button() and event->buttons()
+ // in SELChild::mouseMoveEvent().
+ QCOMPARE(child.numEnterEvents, 1);
+ QCOMPARE(child.numMouseMoveEvents, 1);
+
+ // Sending synthetic enter/leave trough the parent's mousePressEvent handler.
+ parent.child = &child;
+
+ child.hide();
+ child.reset();
+ QTest::mouseClick(&parent, Qt::LeftButton);
+
+ // Make sure the child gets enter event and one mouse move event.
+ QCOMPARE(child.numEnterEvents, 1);
+ QCOMPARE(child.numMouseMoveEvents, 1);
+
+ child.hide();
+ child.reset();
+ child.setMouseTracking(false);
+ QTest::mouseClick(&parent, Qt::LeftButton);
+
+ // Make sure the child gets enter event and no mouse move event.
+ QCOMPARE(child.numEnterEvents, 1);
+ QCOMPARE(child.numMouseMoveEvents, 0);
+ }
#endif
void tst_QWidget::windowFlags()
diff --git a/tools/linguist/lconvert/main.cpp b/tools/linguist/lconvert/main.cpp
index 67553a0..6f5f86a 100644
--- a/tools/linguist/lconvert/main.cpp
+++ b/tools/linguist/lconvert/main.cpp
@@ -234,10 +234,6 @@ int main(int argc, char *argv[])
return usage(args);
tr.setLanguageCode(Translator::guessLanguageCodeFromFileName(inFiles[0].name));
- if (!targetLanguage.isEmpty())
- tr.setLanguageCode(targetLanguage);
- if (!sourceLanguage.isEmpty())
- tr.setSourceLanguageCode(sourceLanguage);
if (!tr.load(inFiles[0].name, cd, inFiles[0].format)) {
qWarning() << qPrintable(cd.error());
@@ -256,6 +252,10 @@ int main(int argc, char *argv[])
tr.replaceSorted(tr2.message(j));
}
+ if (!targetLanguage.isEmpty())
+ tr.setLanguageCode(targetLanguage);
+ if (!sourceLanguage.isEmpty())
+ tr.setSourceLanguageCode(sourceLanguage);
if (noObsolete)
tr.stripObsoleteMessages();
if (noFinished)
diff --git a/tools/linguist/lupdate/main.cpp b/tools/linguist/lupdate/main.cpp
index e8cf121..6b554e0 100644
--- a/tools/linguist/lupdate/main.cpp
+++ b/tools/linguist/lupdate/main.cpp
@@ -114,12 +114,11 @@ static void printUsage()
" Name of a .pro file. Useful for files with .pro\n"
" file syntax but different file suffix\n"
" -source-language <language>[_<region>]\n"
- " Specify/override the language of the source strings. Defaults to\n"
- " POSIX if not specified and the file does not name it yet.\n"
+ " Specify the language of the source strings for new files.\n"
+ " Defaults to POSIX if not specified.\n"
" -target-language <language>[_<region>]\n"
- " Specify/override the language of the translation.\n"
- " The target language is guessed from the file name if this option\n"
- " is not specified and the file contents name no language yet.\n"
+ " Specify the language of the translations for new files.\n"
+ " Guessed from the file name if not specified.\n"
" -version\n"
" Display the version of lupdate and exit.\n"
).arg(m_defaultExtensions));