diff options
author | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2009-11-18 12:39:40 (GMT) |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2009-11-18 12:39:40 (GMT) |
commit | d46da3a141ad05c9f7cd7ea94e254980748329da (patch) | |
tree | 72beadfabcf66d725b10bbc5ce3d8c38137ed888 | |
parent | 62e641691b9a3eadc8b9fb2e31150cdf5b66115d (diff) | |
parent | 6f6b2ab07c0dbd0ebdb25f1fbe537ea12bdffee4 (diff) | |
download | Qt-d46da3a141ad05c9f7cd7ea94e254980748329da.zip Qt-d46da3a141ad05c9f7cd7ea94e254980748329da.tar.gz Qt-d46da3a141ad05c9f7cd7ea94e254980748329da.tar.bz2 |
Merge remote branch 'mainline/4.6' into 4.6
79 files changed, 1866 insertions, 1150 deletions
diff --git a/demos/qmediaplayer/mediaplayer.cpp b/demos/qmediaplayer/mediaplayer.cpp index 624bab7..267a225 100644 --- a/demos/qmediaplayer/mediaplayer.cpp +++ b/demos/qmediaplayer/mediaplayer.cpp @@ -355,13 +355,13 @@ void MediaPlayer::stateChanged(Phonon::State newstate, Phonon::State oldstate) switch (newstate) { case Phonon::ErrorState: - QMessageBox::warning(this, "Phonon Mediaplayer", m_MediaObject.errorString(), QMessageBox::Close); if (m_MediaObject.errorType() == Phonon::FatalError) { playButton->setEnabled(false); rewindButton->setEnabled(false); } else { m_MediaObject.pause(); } + QMessageBox::warning(this, "Phonon Mediaplayer", m_MediaObject.errorString(), QMessageBox::Close); break; case Phonon::PausedState: case Phonon::StoppedState: @@ -471,6 +471,8 @@ void MediaPlayer::effectChanged() void MediaPlayer::showSettingsDialog() { + playPauseForDialog(); + if (!settingsDialog) initSettingsDialog(); @@ -516,6 +518,8 @@ void MediaPlayer::showSettingsDialog() m_videoWidget->setScaleMode(oldScale); ui->audioEffectsCombo->setCurrentIndex(currentEffect); } + + playPauseForDialog(); } void MediaPlayer::initVideoWindow() @@ -652,10 +656,25 @@ void MediaPlayer::setFile(const QString &fileName) m_MediaObject.play(); } +void MediaPlayer::playPauseForDialog() +{ + // If we're running on a small screen, we want to pause the video + // when popping up dialogs. + if (m_hasSmallScreen && + (Phonon::PlayingState == m_MediaObject.state() || + Phonon::PausedState == m_MediaObject.state())) + playPause(); +} + void MediaPlayer::openFile() { + playPauseForDialog(); + QStringList fileNames = QFileDialog::getOpenFileNames(this, QString(), QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); + + playPauseForDialog(); + m_MediaObject.clearQueue(); if (fileNames.size() > 0) { QString fileName = fileNames[0]; diff --git a/demos/qmediaplayer/mediaplayer.h b/demos/qmediaplayer/mediaplayer.h index 08db0e5..a1c3d92 100644 --- a/demos/qmediaplayer/mediaplayer.h +++ b/demos/qmediaplayer/mediaplayer.h @@ -111,6 +111,8 @@ private slots: void hasVideoChanged(bool); private: + void playPauseForDialog(); + QIcon playIcon; QIcon pauseIcon; QMenu *fileMenu; diff --git a/demos/qtdemo/itemcircleanimation.cpp b/demos/qtdemo/itemcircleanimation.cpp index 8c94eb7..74c3e6a 100644 --- a/demos/qtdemo/itemcircleanimation.cpp +++ b/demos/qtdemo/itemcircleanimation.cpp @@ -302,6 +302,7 @@ void ItemCircleAnimation::setupGuides() int y = 20; this->qtGuide1 = new GuideCircle(QRectF(x, y, 260, 260), -36, 342); + this->currGuide = 0; new GuideLine(QPointF(x + 240, y + 268), this->qtGuide1); new GuideLine(QPointF(x + 265, y + 246), this->qtGuide1); new GuideLine(QPointF(x + 158, y + 134), this->qtGuide1); diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0 index 24d8fc0..3a130ca 100644 --- a/dist/changes-4.6.0 +++ b/dist/changes-4.6.0 @@ -19,14 +19,20 @@ Merge Request: http://qt.gitorious.org * General * **************************************************************************** - - QtDBus - * The minimum required version of the D-Bus reference library is - now 0.93. - * Support for reading and writing of custom property types added. - * Support for getting return arguments in remote method invocation - via QMetaMethod::invokeMethod. +New features +------------ - - [MR#1742] Added new multimedia keys to the Qt::Key enum. + - QState, QStateMachine + * New classes for state machine framework added to QtCore. + + - QAbstractAnimation + * New animation framework added to QtCore + + - QTouchEvent + * New class for handling multitouch events added to QtGui + + - QGesture, QGestureRecognizer + * New gesture framework added to QtGui - QMatrix4x4, QGenericMatrix, QVector2D, QVector3D, QVector4D, QQuaternion * New classes to support 3D applications. @@ -37,7 +43,14 @@ Merge Request: http://qt.gitorious.org - QGraphicsEffect * New classes for applying graphics effects to graphics items and widgets. - - Boxes demo ported to use new 3D math and shader program classes. + - QWebElement + * New class for DOM access added to QtWebKit + + - QAudioInput, QAudioOutput + * New audio input and output classes. + + - QAbstractVideoSurface, QVideoFrame + * New abstract video output classes. - OpenVG graphics system added. @@ -45,28 +58,29 @@ Merge Request: http://qt.gitorious.org - Improved support for input methods in graphics view. - - QAudioInput, QAudioOutput - * New audio input and output classes. - - - QAbstractVideoSurface, QVideoFrame - * New abstract video output classes. + - [MR#1742] Added new multimedia keys to the Qt::Key enum. - - New state machine framework added to QtCore. + - Boxes demo ported to use new 3D math and shader program classes. - QtTest now supports outputting XUnit XML documents, for integrating with existing continuous integration systems. This is enabled by running the test program with the -xunitxml option. -Third party components ----------------------- + - QtDBus + * The minimum required version of the D-Bus reference library is + now 0.93. + * Support for reading and writing of custom property types added. + * Support for getting return arguments in remote method invocation + via QMetaMethod::invokeMethod. - - Updated FreeType to version 2.3.9. - - Updated harfbuzz to the latest version from fd.org. +Optimizations +------------- - - Updated sqlite to version 3.6.19. + - Optimized rendering strategy in QGraphicsView + * See list of Important Behavior Changes below - - Updated libpng to version 1.2.40 + - Improved delivery of posted events on Windows **************************************************************************** @@ -74,6 +88,7 @@ Third party components **************************************************************************** QtCore +------ - QByteArray * New overloads for QByteArray::insert() and QByteArray::prepend(). @@ -170,6 +185,7 @@ QtCore * [256468] Fixed comment indentation. QtGui +----- - Qt::escape * Now escape the double quote ("). @@ -435,6 +451,7 @@ QtGui with Qt::WA_NoSystemBackground and window opacity set. QtDBus +------ - QDBusConnection * Made sending of invalid/incomplete messages consistently fail with error @@ -447,6 +464,7 @@ QtDBus deleted or to change owners. QtNetwork +--------- - QAbstractSocket * Only disconnect from host when all bytes have been written. @@ -483,6 +501,7 @@ QtNetwork cases the connection stalled when a buffer limit was used. QtOpenGL +-------- - QGLColormap * setEntry() was inserting entries instead of replacing them. @@ -531,6 +550,7 @@ QtOpenGL - Added lots of OpenGL autotests. QtScript +-------- - Many optimizations. - Improved ECMA script compliance. @@ -538,6 +558,7 @@ QtScript to a QtScript array index. QtSql +----- - [QTBUG-3162] Views for Sql table models should not reset state on failed queries. @@ -571,6 +592,7 @@ QtSql - Add proper iODBC linking support. QtSvg +----- - QSvgHandler * [245602] [204686] Fixed gradient and solid-color referencing. @@ -582,6 +604,7 @@ QtSvg * [257052] Changed drawImage() to ignore aspect ratio. QtWebKit +-------- - Many bug fixes. @@ -608,67 +631,49 @@ QtWebKit * New functions for defining local URL schemes. - QWebSettings - * New options for text encoding, printing shrink factor and off-line web - application cache (HTML5). + * New options for text encoding and off-line web application cache (HTML5). - QWebView * Support for render hints. QtXml +----- - QDomDocument * Set the codec to UTF-8 if codec not present or unknown. QtXmlPatterns +------------- - QXmlQuery * [245219] Added QXmlQuery::setFocus(const QString &focus). Qt Plugins +---------- - Tiff plugin * [258526] Rotate the image if the tiff file contains an orientation tag. * [254317] Add support for mono and indexed format - - QPlainTextEdit - * Fixed crash when clicking on a text edit which was smaller than the - height of the font used. - - - QPrinter - * [QTBUG-4497] Removed redundant SetPen command in the postscript code - when reusing a QPrinter object. +Third party components +---------------------- + + - Updated FreeType to version 2.3.9. + + - Updated harfbuzz to the latest version from fd.org. + + - Updated sqlite to version 3.6.19. + + - Updated libpng to version 1.2.40 - - QTextLayout - * [QTBUG-4468] Count tabs as multiple characters when applying a fixed - column width. - * [176401] Take into account the negative right bearing of the last - character in an item of text if the glyph extends beyond its ascent. - - - QTextDocument - * [207189] Support setting font size using short hand syntax in the - CSS "font" property. - * [201228] Remove implicit margin on bullet lists when exporting to - HTML. - * [240086] Fixed bug which caused floating objects which span several - pages to float into the second page of the document even when it's - the only existing object, causing the document to contain a blank - first page. - * [240325] Even when wrap mode is set to Qt::TextWordWrap, the layout - would sometimes break outside word boundaries when floating objects - affected the width available to the text. This has been fixed. - - - QFontEngine - * [QTBUG-2354] Support certain 'Microsoft' platform symbol fonts which - also contain a regular unicode table for exactly the symbol range of - code points. - - - QFontMetrics - * [176401] Account for right bearing in bounding rect. **************************************************************************** * Platform Specific Changes * **************************************************************************** + - Added support for the Symbian platform with integration for the S60 + framework. + - Added community supported Qt ports for QNX and VxWorks. See platform notes in the Qt documentation for details. @@ -905,6 +910,60 @@ Qt for Embedded Linux - Add powerpc mkspec and remove "empty" ppc mkspec . +DirectFB +-------- + + - When running Qt/DirectFB the DirectFB window id of a top level QWidget can + be queried using property("_q_DirectFBWindowID") + + - Allow setting the background color of the primary layer in DirectFB with + connect options. QWS_DISPLAY=directfb:bgcolor=red or + QWS_DISPLAY=directfb:bgcolor=\#aabbccdd + + - Add support for rendering mouse cursor using a top level window when cursor + support is not working in IDirectFBDisplayLayer. Define + QT_DIRECTFB_WINDOW_AS_CURSOR to enable. + + - Add experimental support for optimized locking/unlocking of surfaces. Enable + by defining QT_DIRECTFB_SUBSURFACE. + + - Fix a bug to conceptually allow using QDirectFBScreen as a subscreen of a + proxy screen. Don't make QDirectFBScreen::instance() assume that + QScreen::instance() is a QDirectFBScreen. + + - Optimize move/resize operations with DirectFB. With a properly configured + DirectFB these operations are handled for us and we don't need to force a + repaint of the window. + + - Support top level window opacity in DirectFB + + - Fix a bug when loading RGB32 images that would lead to rendering issues. + + - Fix a bug when painting with invalid pens/brushes. + + - Fix a bug that would show up when QWidget::scroll is called. + + - Implement support for loading pixmaps using IDirectFBImageProvider. + + - Disable color table support by default. This seems to work incorrectly on + most boards and loading these images will generally require an image + conversion anyway. + + - Fix a crash when resizing windows. + + - Compile with versions < 1.0. We still recommend using newer versions. + + - Considerable code cleanup + + - Various optimizations regarding painting, loading of images and creation of + surfaces. + + - Allow forcibly falling back to raster engine for painting operations by + exporting QT_DIRECTFB_FORCE_RASTER=1 + + - Reenable support for RGB32 primary surface. + + Qt for Windows CE ----------------- @@ -974,61 +1033,6 @@ Qt for Windows CE **************************************************************************** -* DirectFB * -**************************************************************************** - - - When running Qt/DirectFB the DirectFB window id of a top level QWidget can - be queried using property("_q_DirectFBWindowID") - - - Allow setting the background color of the primary layer in DirectFB with - connect options. QWS_DISPLAY=directfb:bgcolor=red or - QWS_DISPLAY=directfb:bgcolor=\#aabbccdd - - - Add support for rendering mouse cursor using a top level window when cursor - support is not working in IDirectFBDisplayLayer. Define - QT_DIRECTFB_WINDOW_AS_CURSOR to enable. - - - Add experimental support for optimized locking/unlocking of surfaces. Enable - by defining QT_DIRECTFB_SUBSURFACE. - - - Fix a bug to conceptually allow using QDirectFBScreen as a subscreen of a - proxy screen. Don't make QDirectFBScreen::instance() assume that - QScreen::instance() is a QDirectFBScreen. - - - Optimize move/resize operations with DirectFB. With a properly configured - DirectFB these operations are handled for us and we don't need to force a - repaint of the window. - - - Support top level window opacity in DirectFB - - - Fix a bug when loading RGB32 images that would lead to rendering issues. - - - Fix a bug when painting with invalid pens/brushes. - - - Fix a bug that would show up when QWidget::scroll is called. - - - Implement support for loading pixmaps using IDirectFBImageProvider. - - - Disable color table support by default. This seems to work incorrectly on - most boards and loading these images will generally require an image - conversion anyway. - - - Fix a crash when resizing windows. - - - Compile with versions < 1.0. We still recommend using newer versions. - - - Considerable code cleanup - - - Various optimizations regarding painting, loading of images and creation of - surfaces. - - - Allow forcibly falling back to raster engine for painting operations by - exporting QT_DIRECTFB_FORCE_RASTER=1 - - - Reenable support for RGB32 primary surface. - - -**************************************************************************** * Important Behavior Changes * **************************************************************************** diff --git a/doc/src/getting-started/known-issues.qdoc b/doc/src/getting-started/known-issues.qdoc index 0b63423..5c8888d 100644 --- a/doc/src/getting-started/known-issues.qdoc +++ b/doc/src/getting-started/known-issues.qdoc @@ -59,34 +59,6 @@ \section1 Installation Issues - \section2 Building the Source Package on Windows 7 - - \list - \o When building Qt 4.5.0 with Windows 7, the build fails with an error - message regarding failing to embed manifest. This a known issue with - Windows 7, explained in the Windows 7 SDK Beta - \l{http://download.microsoft.com/download/8/8/0/8808A472-6450-4723-9C87-977069714B27/ReleaseNotes.Htm} - {release notes}. A workaround for this issue is to patch the - \bold{embed_manifest_exe.prf} file with the following: - - \code - diff --git a/mkspecs/features/win32/embed_manifest_exe.prf b/mkspecs/features/win32/embed_manifest_exe.prf - index e1747f1..05f116e 100644 - --- a/mkspecs/features/win32/embed_manifest_exe.prf - +++ b/mkspecs/features/win32/embed_manifest_exe.prf - @@ -8,4 +8,9 @@ if(win32-msvc2005|win32-msvc2008):!equals(TEMPLATE_PREFIX, "vc"):equals(TEMPLATE - QMAKE_POST_LINK = $$quote(mt.exe -nologo -manifest \"$$replace(OBJECTS_DIR,/,\\)\\$${NOPATH_TARGET}.intermediate.ma - nifest\" -outputresource:$(DESTDIR_TARGET);1$$escape_expand(\n\t)) - QMAKE_POST_LINK += $$QMAKE_PREV_POST_LINK - QMAKE_CLEAN += \"$$replace(OBJECTS_DIR,/,\\)\\$${NOPATH_TARGET}.intermediate.manifest\" - + isEmpty(RC_FILE) { - + system("echo.>$$replace(OUT_PWD,/,\\)\\$$replace(OBJECTS_DIR,/,\\)\\Windows7WorkAround.rc") - + RC_FILE = $$replace(OUT_PWD,/,\\)\\$$replace(OBJECTS_DIR,/,\\)\\Windows7WorkAround.rc - + } - + - } - \endcode - \section2 Installing the Source Package on Unix systems \o If you download a Zip source package, you will need to convert diff --git a/src/3rdparty/phonon/ds9/backend.cpp b/src/3rdparty/phonon/ds9/backend.cpp index 6ed0145..fbc4bdc 100644 --- a/src/3rdparty/phonon/ds9/backend.cpp +++ b/src/3rdparty/phonon/ds9/backend.cpp @@ -41,6 +41,8 @@ namespace Phonon { namespace DS9 { + QMutex *Backend::directShowMutex = 0; + bool Backend::AudioMoniker::operator==(const AudioMoniker &other) { return other->IsEqual(*this) == S_OK; @@ -50,6 +52,8 @@ namespace Phonon Backend::Backend(QObject *parent, const QVariantList &) : QObject(parent) { + directShowMutex = &m_directShowMutex; + ::CoInitialize(0); //registering meta types @@ -62,11 +66,8 @@ namespace Phonon m_audioOutputs.clear(); m_audioEffects.clear(); ::CoUninitialize(); - } - QMutex *Backend::directShowMutex() - { - return &qobject_cast<Backend*>(qt_plugin_instance())->m_directShowMutex; + directShowMutex = 0; } QObject *Backend::createObject(BackendInterface::Class c, QObject *parent, const QList<QVariant> &args) diff --git a/src/3rdparty/phonon/ds9/backend.h b/src/3rdparty/phonon/ds9/backend.h index 8b020c2..7c3c109 100644 --- a/src/3rdparty/phonon/ds9/backend.h +++ b/src/3rdparty/phonon/ds9/backend.h @@ -64,7 +64,7 @@ namespace Phonon Filter getAudioOutputFilter(int index) const; - static QMutex *directShowMutex(); + static QMutex *directShowMutex; Q_SIGNALS: void objectDescriptionChanged(ObjectDescriptionType); diff --git a/src/3rdparty/phonon/ds9/backendnode.cpp b/src/3rdparty/phonon/ds9/backendnode.cpp index 855357a..3afcafa 100644 --- a/src/3rdparty/phonon/ds9/backendnode.cpp +++ b/src/3rdparty/phonon/ds9/backendnode.cpp @@ -58,7 +58,24 @@ namespace Phonon BackendNode::~BackendNode() { //this will remove the filter from the graph - mediaObjectDestroyed(); + FILTER_INFO info; + for(int i = 0; i < FILTER_COUNT; ++i) { + const Filter &filter = m_filters[i]; + if (!filter) + continue; + filter->QueryFilterInfo(&info); + if (info.pGraph) { + HRESULT hr = info.pGraph->RemoveFilter(filter); + + if (hr == VFW_E_NOT_STOPPED && m_mediaObject) { + m_mediaObject->ensureStopped(); + + hr = info.pGraph->RemoveFilter(filter); + } + Q_ASSERT(SUCCEEDED(hr)); + info.pGraph->Release(); + } + } } void BackendNode::setMediaObject(MediaObject *mo) diff --git a/src/3rdparty/phonon/ds9/mediaobject.cpp b/src/3rdparty/phonon/ds9/mediaobject.cpp index 250b94a..106a4c8 100644 --- a/src/3rdparty/phonon/ds9/mediaobject.cpp +++ b/src/3rdparty/phonon/ds9/mediaobject.cpp @@ -177,7 +177,7 @@ namespace Phonon void WorkerThread::handleTask() { - QMutexLocker locker(Backend::directShowMutex()); + QMutexLocker locker(Backend::directShowMutex); { QMutexLocker locker(&m_mutex); if (m_finished || m_queue.isEmpty()) { diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp index f2efaa0..99e96cd 100644 --- a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp +++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp @@ -109,12 +109,12 @@ void MMF::AbstractMediaPlayer::pause() case GroundState: case LoadingState: case PausedState: - case ErrorState: // Do nothing break; case StoppedState: case PlayingState: + case ErrorState: case BufferingState: doPause(); stopTickTimer(); @@ -289,10 +289,6 @@ void MMF::AbstractMediaPlayer::setNextSource(const MediaSource &source) } -//----------------------------------------------------------------------------- -// VolumeObserver -//----------------------------------------------------------------------------- - void MMF::AbstractMediaPlayer::volumeChanged(qreal volume) { TRACE_CONTEXT(AbstractMediaPlayer::volumeChanged, EAudioInternal); diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.h b/src/3rdparty/phonon/mmf/abstractmediaplayer.h index cff7bab..cb6e437 100644 --- a/src/3rdparty/phonon/mmf/abstractmediaplayer.h +++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.h @@ -56,8 +56,6 @@ public: virtual MediaSource source() const; virtual void setFileSource(const Phonon::MediaSource&, RFile&); virtual void setNextSource(const MediaSource &source); - - // VolumeObserver virtual void volumeChanged(qreal volume); protected: diff --git a/src/3rdparty/phonon/mmf/abstractplayer.cpp b/src/3rdparty/phonon/mmf/abstractplayer.cpp index de2722d..caf4092 100644 --- a/src/3rdparty/phonon/mmf/abstractplayer.cpp +++ b/src/3rdparty/phonon/mmf/abstractplayer.cpp @@ -92,11 +92,6 @@ void MMF::AbstractPlayer::setTransitionTime(qint32 time) m_transitionTime = time; } - -//----------------------------------------------------------------------------- -// VolumeObserver -//----------------------------------------------------------------------------- - void MMF::AbstractPlayer::volumeChanged(qreal volume) { m_volume = volume; @@ -134,7 +129,7 @@ void MMF::AbstractPlayer::setError(Phonon::ErrorType error, Phonon::ErrorType MMF::AbstractPlayer::errorType() const { const Phonon::ErrorType result = (ErrorState == m_state) - ? errorType() : NoError; + ? m_error : NoError; return result; } diff --git a/src/3rdparty/phonon/mmf/abstractplayer.h b/src/3rdparty/phonon/mmf/abstractplayer.h index 66496cc..2e9cfa0 100644 --- a/src/3rdparty/phonon/mmf/abstractplayer.h +++ b/src/3rdparty/phonon/mmf/abstractplayer.h @@ -24,8 +24,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include <QObject> -#include "volumeobserver.h" - #include "videooutput.h" class RFile; @@ -49,7 +47,6 @@ class VideoOutput; * - Video, in which case the implementation is VideoPlayer */ class AbstractPlayer : public QObject - , public VolumeObserver { // Required although this class has no signals or slots // Without this, qobject_cast will fail @@ -85,7 +82,6 @@ public: virtual void setFileSource(const Phonon::MediaSource&, RFile&) = 0; virtual void setNextSource(const Phonon::MediaSource &) = 0; - // VolumeObserver virtual void volumeChanged(qreal volume); void setVideoOutput(VideoOutput* videoOutput); diff --git a/src/3rdparty/phonon/mmf/audiooutput.cpp b/src/3rdparty/phonon/mmf/audiooutput.cpp index 82af9f1..d6e0c13 100644 --- a/src/3rdparty/phonon/mmf/audiooutput.cpp +++ b/src/3rdparty/phonon/mmf/audiooutput.cpp @@ -24,7 +24,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include "defs.h" #include "mediaobject.h" #include "utils.h" -#include "volumeobserver.h" QT_BEGIN_NAMESPACE @@ -41,7 +40,6 @@ using namespace Phonon::MMF; MMF::AudioOutput::AudioOutput(Backend *, QObject *parent) : MediaNode(parent) , m_volume(InitialVolume) - , m_observer(0) { } @@ -59,12 +57,9 @@ qreal MMF::AudioOutput::volume() const void MMF::AudioOutput::setVolume(qreal volume) { TRACE_CONTEXT(AudioOutput::setVolume, EAudioApi); - TRACE_ENTRY("observer 0x%08x volume %f", m_observer, volume); + TRACE_ENTRY("volume %f", volume); if (volume != m_volume) { - if (m_observer) { - m_observer->volumeChanged(volume); - } m_volume = volume; TRACE("emit volumeChanged(%f)", volume) @@ -86,17 +81,12 @@ bool MMF::AudioOutput::setOutputDevice(int index) return true; } -void MMF::AudioOutput::setVolumeObserver(VolumeObserver* observer) -{ - m_observer = observer; - if (m_observer) { - m_observer->volumeChanged(m_volume); - } -} - bool MMF::AudioOutput::activateOnMediaObject(MediaObject *mo) { - setVolumeObserver(mo); + // Ensure that the MediaObject has the correct initial volume + mo->volumeChanged(m_volume); + // Connect MediaObject to receive future volume changes + connect(this, SIGNAL(volumeChanged(qreal)), mo, SLOT(volumeChanged(qreal))); return true; } diff --git a/src/3rdparty/phonon/mmf/audiooutput.h b/src/3rdparty/phonon/mmf/audiooutput.h index d0ba086..1e1e134 100644 --- a/src/3rdparty/phonon/mmf/audiooutput.h +++ b/src/3rdparty/phonon/mmf/audiooutput.h @@ -31,12 +31,11 @@ namespace Phonon namespace MMF { class Backend; -class VolumeObserver; /** * @short AudioOutputInterface implementation for MMF. * - * Forwards volume commands to the VolumeObserver instance, + * Forwards volume commands to the MediaObject instance, * which is provided by the backend when MediaNode objects are * connected. * @@ -82,13 +81,8 @@ Q_SIGNALS: void audioDeviceFailed(); private: - - void setVolumeObserver(VolumeObserver* observer); - qreal m_volume; - // Not owned - VolumeObserver* m_observer; }; } } diff --git a/src/3rdparty/phonon/mmf/backend.cpp b/src/3rdparty/phonon/mmf/backend.cpp index cac27e3..7e3a67f 100644 --- a/src/3rdparty/phonon/mmf/backend.cpp +++ b/src/3rdparty/phonon/mmf/backend.cpp @@ -38,10 +38,6 @@ QT_BEGIN_NAMESPACE using namespace Phonon; using namespace Phonon::MMF; -/*! \class MMF::VolumeObserver - \internal -*/ - /*! \class MMF::Backend \internal */ diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp index f004fd7..e42e0fa 100644 --- a/src/3rdparty/phonon/mmf/mediaobject.cpp +++ b/src/3rdparty/phonon/mmf/mediaobject.cpp @@ -359,11 +359,6 @@ void MMF::MediaObject::setTransitionTime(qint32 time) m_player->setTransitionTime(time); } - -//----------------------------------------------------------------------------- -// VolumeObserver -//----------------------------------------------------------------------------- - void MMF::MediaObject::volumeChanged(qreal volume) { m_player->volumeChanged(volume); diff --git a/src/3rdparty/phonon/mmf/mediaobject.h b/src/3rdparty/phonon/mmf/mediaobject.h index 409918d..ee94ea2 100644 --- a/src/3rdparty/phonon/mmf/mediaobject.h +++ b/src/3rdparty/phonon/mmf/mediaobject.h @@ -30,7 +30,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include "abstractplayer.h" #include "mmf_medianode.h" #include "defs.h" -#include "volumeobserver.h" QT_BEGIN_NAMESPACE @@ -46,7 +45,6 @@ class VideoOutput; */ class MediaObject : public MediaNode , public MediaObjectInterface - , public VolumeObserver { Q_OBJECT Q_INTERFACES(Phonon::MediaObjectInterface) @@ -77,9 +75,6 @@ public: virtual qint32 transitionTime() const; virtual void setTransitionTime(qint32); - // VolumeObserver - void volumeChanged(qreal volume); - /** * This class owns the AbstractPlayer, and will delete it upon * destruction. @@ -90,6 +85,9 @@ public: virtual bool activateOnMediaObject(MediaObject *); +public Q_SLOTS: + void volumeChanged(qreal volume); + Q_SIGNALS: void totalTimeChanged(qint64 length); void hasVideoChanged(bool hasVideo); diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp index ba7d005..2059fbe 100644 --- a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp +++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp @@ -49,7 +49,7 @@ MMF::VideoPlayer::VideoPlayer() , m_screenDevice(*CCoeEnv::Static()->ScreenDevice()) , m_window(0) , m_totalTime(0) - , m_mmfOutputChangePending(false) + , m_pendingChanges(false) { construct(); } @@ -60,7 +60,7 @@ MMF::VideoPlayer::VideoPlayer(const AbstractPlayer& player) , m_screenDevice(*CCoeEnv::Static()->ScreenDevice()) , m_window(0) , m_totalTime(0) - , m_mmfOutputChangePending(false) + , m_pendingChanges(false) { construct(); } @@ -70,24 +70,11 @@ void MMF::VideoPlayer::construct() TRACE_CONTEXT(VideoPlayer::VideoPlayer, EVideoApi); TRACE_ENTRY_0(); - if (m_videoOutput) - m_videoOutput->setObserver(this); + getVideoWindow(); const TInt priority = 0; const TMdaPriorityPreference preference = EMdaPriorityPreferenceNone; - // Ignore return value - first call must always return true - getNativeWindowSystemHandles(); - - // TODO: is this the correct way to handle errors which occur when - // creating a Symbian object in the constructor of a Qt object? - - // TODO: check whether videoOutput is visible? If not, then the - // corresponding window will not be active, meaning that the - // clipping region will be set to empty and the video will not be - // visible. If this is the case, we should set m_mmfOutputChangePending - // and respond to future showEvents from the videoOutput widget. - TRAPD(err, m_player.reset(CVideoPlayerUtility::NewL ( @@ -95,7 +82,7 @@ void MMF::VideoPlayer::construct() priority, preference, m_wsSession, m_screenDevice, *m_window, - m_rect, m_rect + m_videoRect, m_videoRect )) ); @@ -110,8 +97,8 @@ MMF::VideoPlayer::~VideoPlayer() TRACE_CONTEXT(VideoPlayer::~VideoPlayer, EVideoApi); TRACE_ENTRY_0(); - if (m_videoOutput) - m_videoOutput->setObserver(0); + // QObject destructor removes all signal-slot connections involving this + // object, so we do not need to disconnect from m_videoOutput here. TRACE_EXIT_0(); } @@ -124,11 +111,7 @@ void MMF::VideoPlayer::doPlay() { TRACE_CONTEXT(VideoPlayer::doPlay, EVideoApi); - // See comment in updateMmfOutput - if (m_mmfOutputChangePending) { - TRACE_0("MMF output change pending - pushing now"); - updateMmfOutput(); - } + applyPendingChanges(); m_player->Play(); } @@ -255,13 +238,10 @@ void MMF::VideoPlayer::MvpuoPrepareComplete(TInt aError) maxVolumeChanged(m_player->MaxVolume()); if (m_videoOutput) - m_videoOutput->setFrameSize(m_frameSize); + m_videoOutput->setVideoSize(m_videoFrameSize); - // See comment in updateMmfOutput - if (m_mmfOutputChangePending) { - TRACE_0("MMF output change pending - pushing now"); - updateMmfOutput(); - } + updateVideoRect(); + applyPendingChanges(); emit totalTimeChanged(totalTime()); changeState(StoppedState); @@ -279,7 +259,7 @@ void MMF::VideoPlayer::doPrepareCompleteL(TInt aError) // Get frame size TSize size; m_player->VideoFrameSizeL(size); - m_frameSize = QSize(size.iWidth, size.iHeight); + m_videoFrameSize = QSize(size.iWidth, size.iHeight); // Get duration m_totalTime = toMilliSeconds(m_player->DurationL()); @@ -322,27 +302,178 @@ void MMF::VideoPlayer::MvpuoEvent(const TMMFEvent &aEvent) //----------------------------------------------------------------------------- -// VideoOutputObserver +// Video window updates //----------------------------------------------------------------------------- -void MMF::VideoPlayer::videoOutputRegionChanged() +void MMF::VideoPlayer::getVideoWindow() +{ + TRACE_CONTEXT(VideoPlayer::getVideoWindow, EVideoInternal); + TRACE_ENTRY_0(); + + if(m_videoOutput) { + // Dump information to log, only in debug builds + m_videoOutput->dump(); + + initVideoOutput(); + m_window = m_videoOutput->videoWindow(); + updateVideoRect(); + } else + // Top-level window + m_window = QApplication::activeWindow()->effectiveWinId()->DrawableWindow(); + + TRACE_EXIT_0(); +} + +void MMF::VideoPlayer::videoOutputChanged() +{ + TRACE_CONTEXT(VideoPlayer::videoOutputChanged, EVideoInternal); + TRACE_ENTRY_0(); + + if (m_videoOutput) { + initVideoOutput(); + videoWindowChanged(); + } + + TRACE_EXIT_0(); +} + +void MMF::VideoPlayer::initVideoOutput() +{ + m_videoOutput->winId(); + m_videoOutput->setVideoSize(m_videoFrameSize); + + bool connected = connect( + m_videoOutput, SIGNAL(videoWindowChanged()), + this, SLOT(videoWindowChanged()) + ); + Q_ASSERT(connected); + + connected = connect( + m_videoOutput, SIGNAL(aspectRatioChanged()), + this, SLOT(aspectRatioChanged()) + ); + Q_ASSERT(connected); + + connected = connect( + m_videoOutput, SIGNAL(scaleModeChanged()), + this, SLOT(scaleModeChanged()) + ); + Q_ASSERT(connected); + + // Suppress warnings in release builds + Q_UNUSED(connected); +} + +void MMF::VideoPlayer::videoWindowChanged() { TRACE_CONTEXT(VideoPlayer::videoOutputRegionChanged, EVideoInternal); TRACE_ENTRY("state %d", state()); - const bool changed = getNativeWindowSystemHandles(); + m_window = m_videoOutput->videoWindow(); - // See comment in updateMmfOutput - if (changed) { - if (state() == LoadingState) - m_mmfOutputChangePending = true; - else - updateMmfOutput(); + updateVideoRect(); + + TRACE_EXIT_0(); +} + +// Helper function for aspect ratio / scale mode handling +QSize scaleToAspect(const QSize& srcRect, int aspectWidth, int aspectHeight) +{ + const qreal aspectRatio = qreal(aspectWidth) / aspectHeight; + + int width = srcRect.width(); + int height = srcRect.width() / aspectRatio; + if (height > srcRect.height()){ + height = srcRect.height(); + width = srcRect.height() * aspectRatio; } + return QSize(width, height); +} + +void MMF::VideoPlayer::updateVideoRect() +{ + QRect videoRect; + const QRect windowRect = m_videoOutput->videoWindowRect(); + const QSize windowSize = windowRect.size(); + + // Calculate size of smallest rect which contains video frame size + // and conforms to aspect ratio + switch (m_videoOutput->aspectRatio()) { + case Phonon::VideoWidget::AspectRatioAuto: + videoRect.setSize(m_videoFrameSize); + break; + + case Phonon::VideoWidget::AspectRatioWidget: + videoRect.setSize(windowSize); + break; + + case Phonon::VideoWidget::AspectRatio4_3: + videoRect.setSize(scaleToAspect(m_videoFrameSize, 4, 3)); + break; + + case Phonon::VideoWidget::AspectRatio16_9: + videoRect.setSize(scaleToAspect(m_videoFrameSize, 16, 9)); + break; + } + + // Scale to fill the window width + const int windowWidth = windowSize.width(); + const int windowHeight = windowSize.height(); + const qreal windowScaleFactor = qreal(windowWidth) / videoRect.width(); + int videoWidth = windowWidth; + int videoHeight = videoRect.height() * windowScaleFactor; + + const qreal windowToVideoHeightRatio = qreal(windowHeight) / videoHeight; + + switch(m_videoOutput->scaleMode()) { + case Phonon::VideoWidget::ScaleAndCrop: + if(videoHeight < windowHeight) { + videoWidth *= windowToVideoHeightRatio; + videoHeight = windowHeight; + } + break; + case Phonon::VideoWidget::FitInView: + default: + if(videoHeight > windowHeight) { + videoWidth *= windowToVideoHeightRatio; + videoHeight = windowHeight; + } + break; + } + + // Calculate scale factors + m_scaleWidth = 100.0f * videoWidth / m_videoFrameSize.width(); + m_scaleHeight = 100.0f * videoHeight / m_videoFrameSize.height(); + + m_videoRect = qt_QRect2TRect(windowRect); + + if (state() == LoadingState) + m_pendingChanges = true; + else { + applyVideoWindowChange(); + m_pendingChanges = false; + } +} + +void MMF::VideoPlayer::aspectRatioChanged() +{ + TRACE_CONTEXT(VideoPlayer::aspectRatioChanged, EVideoInternal); + TRACE_ENTRY("state %d aspectRatio %d", state()); + + updateVideoRect(); TRACE_EXIT_0(); } +void MMF::VideoPlayer::scaleModeChanged() +{ + TRACE_CONTEXT(VideoPlayer::scaleModeChanged, EVideoInternal); + TRACE_ENTRY("state %d", state()); + + updateVideoRect(); + + TRACE_EXIT_0(); +} #ifndef QT_NO_DEBUG @@ -383,113 +514,61 @@ void getDsaRegion(RWsSession &session, const RWindowBase &window) #endif // _DEBUG -void MMF::VideoPlayer::updateMmfOutput() +void MMF::VideoPlayer::applyPendingChanges() { - TRACE_CONTEXT(VideoPlayer::updateMmfOutput, EVideoInternal); - TRACE_ENTRY_0(); + if(m_pendingChanges) + applyVideoWindowChange(); - // Calling SetDisplayWindowL is a no-op unless the MMF controller has - // been loaded, so we shouldn't do it. Instead, the - // m_mmfOutputChangePending flag is used to record the fact that we - // need to call SetDisplayWindowL, and this is checked in - // MvpuoPrepareComplete, at which point the MMF controller has been - // loaded. + m_pendingChanges = false; +} + +void MMF::VideoPlayer::applyVideoWindowChange() +{ + TRACE_CONTEXT(VideoPlayer::applyVideoWindowChange, EVideoInternal); + TRACE_ENTRY_0(); #ifndef QT_NO_DEBUG getDsaRegion(m_wsSession, *m_window); #endif - TRAPD(err, - m_player->SetDisplayWindowL - ( - m_wsSession, m_screenDevice, - *m_window, - m_rect, m_rect - ) - ); + static const TBool antialias = ETrue; - if (KErrNone != err) { - TRACE("SetDisplayWindowL error %d", err); + TRAPD(err, m_player->SetScaleFactorL(m_scaleWidth, m_scaleHeight, antialias)); + if(KErrNone != err) { + TRACE("SetScaleFactorL (1) err %d", err); setError(NormalError); } - m_mmfOutputChangePending = false; + if(KErrNone == err) { + TRAP(err, + m_player->SetDisplayWindowL + ( + m_wsSession, m_screenDevice, + *m_window, + m_videoRect, m_videoRect + ) + ); + + if (KErrNone != err) { + TRACE("SetDisplayWindowL err %d", err); + setError(NormalError); + } else { + TRAP(err, m_player->SetScaleFactorL(m_scaleWidth, m_scaleHeight, antialias)); + if(KErrNone != err) { + TRACE("SetScaleFactorL (2) err %d", err); + setError(NormalError); + } + } + } TRACE_EXIT_0(); } //----------------------------------------------------------------------------- -// Private functions +// Metadata //----------------------------------------------------------------------------- -void MMF::VideoPlayer::videoOutputChanged() -{ - TRACE_CONTEXT(VideoPlayer::videoOutputChanged, EVideoInternal); - TRACE_ENTRY_0(); - - if (m_videoOutput) { - m_videoOutput->setObserver(this); - m_videoOutput->setFrameSize(m_frameSize); - } - - videoOutputRegionChanged(); - - TRACE_EXIT_0(); -} - -bool MMF::VideoPlayer::getNativeWindowSystemHandles() -{ - TRACE_CONTEXT(VideoPlayer::getNativeWindowSystemHandles, EVideoInternal); - TRACE_ENTRY_0(); - - CCoeControl *control = 0; - - if (m_videoOutput) - // Create native window - control = m_videoOutput->winId(); - else - // Get top-level window - control = QApplication::activeWindow()->effectiveWinId(); - -#ifndef QT_NO_DEBUG - if (m_videoOutput) { - QScopedPointer<ObjectDump::QDumper> dumper(new ObjectDump::QDumper); - dumper->setPrefix("Phonon::MMF"); // to aid searchability of logs - ObjectDump::addDefaultAnnotators(*dumper); - TRACE_0("Dumping VideoOutput:"); - dumper->dumpObject(*m_videoOutput); - } - else { - TRACE_0("m_videoOutput is null - dumping top-level control info:"); - TRACE("control %08x", control); - TRACE("control.parent %08x", control->Parent()); - TRACE("control.isVisible %d", control->IsVisible()); - TRACE("control.rect %d,%d %dx%d", - control->Position().iX, control->Position().iY, - control->Size().iWidth, control->Size().iHeight); - TRACE("control.ownsWindow %d", control->OwnsWindow()); - } -#endif - - RWindowBase *const window = control->DrawableWindow(); - const TRect rect(window->AbsPosition(), window->Size()); - - TRACE("rect %d %d - %d %d", - rect.iTl.iX, rect.iTl.iY, - rect.iBr.iX, rect.iBr.iY); - - bool changed = false; - - if (window != m_window || rect != m_rect) { - m_window = window; - m_rect = rect; - changed = true; - } - - TRACE_RETURN("changed %d", changed); -} - int MMF::VideoPlayer::numberOfMetaDataEntries() const { int numberOfEntries = 0; diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.h b/src/3rdparty/phonon/mmf/mmf_videoplayer.h index fa4e59b..599bb88 100644 --- a/src/3rdparty/phonon/mmf/mmf_videoplayer.h +++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.h @@ -23,7 +23,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include "abstractmediaplayer.h" #include "videooutput.h" -#include "videooutputobserver.h" QT_BEGIN_NAMESPACE @@ -40,7 +39,6 @@ namespace MMF */ class VideoPlayer : public AbstractMediaPlayer , public MVideoPlayerUtilityObserver - , public VideoOutputObserver { Q_OBJECT @@ -70,8 +68,10 @@ public: virtual void MvpuoPlayComplete(TInt aError); virtual void MvpuoEvent(const TMMFEvent &aEvent); - // VideoOutputObserver - virtual void videoOutputRegionChanged(); +public Q_SLOTS: + void videoWindowChanged(); + void aspectRatioChanged(); + void scaleModeChanged(); private: void construct(); @@ -81,10 +81,13 @@ private: // AbstractPlayer virtual void videoOutputChanged(); - // Returns true if handles have changed - bool getNativeWindowSystemHandles(); + void getVideoWindow(); + void initVideoOutput(); - void updateMmfOutput(); + void updateVideoRect(); + + void applyPendingChanges(); + void applyVideoWindowChange(); // AbstractMediaPlayer virtual int numberOfMetaDataEntries() const; @@ -97,12 +100,17 @@ private: RWsSession& m_wsSession; CWsScreenDevice& m_screenDevice; RWindowBase* m_window; - TRect m_rect; - QSize m_frameSize; + /* Extent of the video display - will be clipped to m_windowRect */ + TRect m_videoRect; + + TReal32 m_scaleWidth; + TReal32 m_scaleHeight; + + QSize m_videoFrameSize; qint64 m_totalTime; - bool m_mmfOutputChangePending; + bool m_pendingChanges; }; diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_stub.cpp b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_stub.cpp deleted file mode 100644 index 6207dac..0000000 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_stub.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* This file is part of the KDE project. - -Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - -This library is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 2.1 or 3 of the License. - -This library 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 Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this library. If not, see <http://www.gnu.org/licenses/>. - -*/ - -#include "objectdump.h" - -QT_BEGIN_NAMESPACE - -namespace ObjectDump -{ - -void addDefaultAnnotators_sys(QDumper& /*dumper*/) -{ - -} - -void addDefaultAnnotators_sys(QVisitor& /*visitor*/) -{ - -} - -} // namespace ObjectDump - -QT_END_NAMESPACE - - diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.cpp b/src/3rdparty/phonon/mmf/objectdump.cpp index 9add439..6b6b71e 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.cpp +++ b/src/3rdparty/phonon/mmf/objectdump.cpp @@ -16,6 +16,8 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. */ +#ifndef QT_NO_DEBUG + #include <QByteArray> #include <QDebug> #include <QHash> @@ -523,5 +525,5 @@ void dumpAncestors(const QObject& leaf, QVisitor& visitor) QT_END_NAMESPACE - +#endif diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.h b/src/3rdparty/phonon/mmf/objectdump.h index e94b3ac..e94b3ac 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.h +++ b/src/3rdparty/phonon/mmf/objectdump.h diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_global.h b/src/3rdparty/phonon/mmf/objectdump_global.h index b8987e0..b8987e0 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_global.h +++ b/src/3rdparty/phonon/mmf/objectdump_global.h diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.cpp b/src/3rdparty/phonon/mmf/objectdump_symbian.cpp index 03220a7..41dd240 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.cpp +++ b/src/3rdparty/phonon/mmf/objectdump_symbian.cpp @@ -16,6 +16,8 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. */ +#ifndef QT_NO_DEBUG + #include <QTextStream> #include <QWidget> #include <coecntrl.h> @@ -99,46 +101,39 @@ QList<QByteArray> QAnnotatorWindow::annotation(const QObject& object) if (widget) { const CCoeControl* control = widget->effectiveWinId(); - RDrawableWindow *window = 0; - - if (control && (window = control->DrawableWindow())) { - QByteArray array; - QTextStream stream(&array); + if (control) { + RDrawableWindow *const window = control->DrawableWindow(); + if(window) { + QByteArray array; + QTextStream stream(&array); - stream << "window: "; + stream << "window: "; - // ClientHandle() is available first in 5.0. -#if !defined(__SERIES60_31__) && !defined(__S60_32__) - if (QSysInfo::s60Version() > QSysInfo::SV_S60_3_2) - // Client-side window handle + // Server-side address of CWsWindow object + // This is useful for correlation with the window tree dumped by the window + // server (see RWsSession::LogCommand). // Cast to a void pointer so that log output is in hexadecimal format. - stream << "cli " << reinterpret_cast<const void*>(window->ClientHandle()) << ' '; -#endif + stream << "srv " << reinterpret_cast<const void*>(window->WsHandle()) << ' '; - // Server-side address of CWsWindow object - // This is useful for correlation with the window tree dumped by the window - // server (see RWsSession::LogCommand). - // Cast to a void pointer so that log output is in hexadecimal format. - stream << "srv " << reinterpret_cast<const void*>(window->WsHandle()) << ' '; + stream << "group " << window->WindowGroupId() << ' '; - stream << "group " << window->WindowGroupId() << ' '; - - // Client-side handle to the parent window. - // Cast to a void pointer so that log output is in hexadecimal format. - stream << "parent " << reinterpret_cast<const void*>(window->Parent()) << ' '; + // Client-side handle to the parent window. + // Cast to a void pointer so that log output is in hexadecimal format. + stream << "parent " << reinterpret_cast<const void*>(window->Parent()) << ' '; - stream << window->Position().iX << ',' << window->Position().iY << ' '; - stream << '(' << window->AbsPosition().iX << ',' << window->AbsPosition().iY << ") "; - stream << window->Size().iWidth << 'x' << window->Size().iHeight << ' '; + stream << window->Position().iX << ',' << window->Position().iY << ' '; + stream << '(' << window->AbsPosition().iX << ',' << window->AbsPosition().iY << ") "; + stream << window->Size().iWidth << 'x' << window->Size().iHeight << ' '; - const TDisplayMode displayMode = window->DisplayMode(); - stream << "mode " << displayMode << ' '; + const TDisplayMode displayMode = window->DisplayMode(); + stream << "mode " << displayMode << ' '; - stream << "ord " << window->OrdinalPosition(); + stream << "ord " << window->OrdinalPosition(); - stream.flush(); - result.append(array); + stream.flush(); + result.append(array); + } } } @@ -165,4 +160,5 @@ void addDefaultAnnotators_sys(QVisitor& visitor) QT_END_NAMESPACE +#endif diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.h b/src/3rdparty/phonon/mmf/objectdump_symbian.h index 563c862..563c862 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.h +++ b/src/3rdparty/phonon/mmf/objectdump_symbian.h diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.cpp b/src/3rdparty/phonon/mmf/objecttree.cpp index bc61435..750db22 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.cpp +++ b/src/3rdparty/phonon/mmf/objecttree.cpp @@ -16,6 +16,8 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. */ +#ifndef QT_NO_DEBUG + #include <QTextStream> #include <QWidget> #include "objecttree.h" @@ -98,5 +100,5 @@ AncestorConstIterator::AncestorConstIterator(const QObject& leaf) QT_END_NAMESPACE - +#endif diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.h b/src/3rdparty/phonon/mmf/objecttree.h index 98bdf14..98bdf14 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.h +++ b/src/3rdparty/phonon/mmf/objecttree.h diff --git a/src/3rdparty/phonon/mmf/videooutput.cpp b/src/3rdparty/phonon/mmf/videooutput.cpp index 1b338a2..ddf30de 100644 --- a/src/3rdparty/phonon/mmf/videooutput.cpp +++ b/src/3rdparty/phonon/mmf/videooutput.cpp @@ -19,7 +19,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include "ancestormovemonitor.h" #include "utils.h" #include "videooutput.h" -#include "videooutputobserver.h" #ifndef QT_NO_DEBUG #include "objectdump.h" @@ -30,8 +29,11 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include <QMoveEvent> #include <QResizeEvent> +#include <QtCore/private/qcore_symbian_p.h> // for qt_TRect2QRect #include <QtGui/private/qwidget_p.h> // to access QWExtra +#include <coecntrl.h> + QT_BEGIN_NAMESPACE using namespace Phonon; @@ -42,6 +44,16 @@ using namespace Phonon::MMF; */ //----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- + +static const Phonon::VideoWidget::AspectRatio DefaultAspectRatio = + Phonon::VideoWidget::AspectRatioAuto; +static const Phonon::VideoWidget::ScaleMode DefaultScaleMode = + Phonon::VideoWidget::FitInView; + + +//----------------------------------------------------------------------------- // Constructor / destructor //----------------------------------------------------------------------------- @@ -49,7 +61,8 @@ MMF::VideoOutput::VideoOutput (AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent) : QWidget(parent) , m_ancestorMoveMonitor(ancestorMoveMonitor) - , m_observer(0) + , m_aspectRatio(DefaultAspectRatio) + , m_scaleMode(DefaultScaleMode) { TRACE_CONTEXT(VideoOutput::VideoOutput, EVideoInternal); TRACE_ENTRY("parent 0x%08x", parent); @@ -66,6 +79,7 @@ MMF::VideoOutput::VideoOutput // to be invisible when running on the target device. qt_widget_private(this)->extraData()->disableBlit = true; + getVideoWindowRect(); registerForAncestorMoved(); dump(); @@ -83,33 +97,35 @@ MMF::VideoOutput::~VideoOutput() TRACE_EXIT_0(); } -void MMF::VideoOutput::setFrameSize(const QSize& frameSize) +void MMF::VideoOutput::setVideoSize(const QSize& frameSize) { - TRACE_CONTEXT(VideoOutput::setFrameSize, EVideoInternal); + TRACE_CONTEXT(VideoOutput::setVideoSize, EVideoInternal); TRACE("oldSize %d %d newSize %d %d", - m_frameSize.width(), m_frameSize.height(), + m_videoFrameSize.width(), m_videoFrameSize.height(), frameSize.width(), frameSize.height()); - if (frameSize != m_frameSize) { - m_frameSize = frameSize; + if (frameSize != m_videoFrameSize) { + m_videoFrameSize = frameSize; updateGeometry(); } } -void MMF::VideoOutput::setObserver(VideoOutputObserver* observer) -{ - TRACE_CONTEXT(VideoOutput::setObserver, EVideoInternal); - TRACE("observer 0x%08x", observer); - - m_observer = observer; -} - void MMF::VideoOutput::ancestorMoved() { TRACE_CONTEXT(VideoOutput::ancestorMoved, EVideoInternal); TRACE_ENTRY_0(); - videoOutputRegionChanged(); + RWindowBase *const window = videoWindow(); + + if(window) { + const TPoint newWindowPosSymbian = window->AbsPosition(); + const QPoint newWindowPos(newWindowPosSymbian.iX, newWindowPosSymbian.iY); + + if(newWindowPos != m_videoWindowRect.topLeft()) { + m_videoWindowRect.moveTo(newWindowPos); + emit videoWindowChanged(); + } + } TRACE_EXIT_0(); } @@ -123,9 +139,8 @@ QSize MMF::VideoOutput::sizeHint() const // TODO: replace this with a more sensible default QSize result(320, 240); - if (!m_frameSize.isNull()) { - result = m_frameSize; - } + if (!m_videoFrameSize.isNull()) + result = m_videoFrameSize; return result; } @@ -149,7 +164,10 @@ void MMF::VideoOutput::resizeEvent(QResizeEvent* event) event->oldSize().width(), event->oldSize().height(), event->size().width(), event->size().height()); - videoOutputRegionChanged(); + if(event->size() != event->oldSize()) { + m_videoWindowRect.setSize(event->size()); + emit videoWindowChanged(); + } } void MMF::VideoOutput::moveEvent(QMoveEvent* event) @@ -159,7 +177,10 @@ void MMF::VideoOutput::moveEvent(QMoveEvent* event) event->oldPos().x(), event->oldPos().y(), event->pos().x(), event->pos().y()); - videoOutputRegionChanged(); + if(event->pos() != event->oldPos()) { + m_videoWindowRect.moveTo(event->pos()); + emit videoWindowChanged(); + } } bool MMF::VideoOutput::event(QEvent* event) @@ -168,7 +189,8 @@ bool MMF::VideoOutput::event(QEvent* event) if (event->type() == QEvent::WinIdChange) { TRACE_0("WinIdChange"); - videoOutputRegionChanged(); + getVideoWindowRect(); + emit videoWindowChanged(); return true; } else if (event->type() == QEvent::ParentChange) { // Tell ancestor move monitor to update ancestor list for this widget @@ -180,14 +202,66 @@ bool MMF::VideoOutput::event(QEvent* event) //----------------------------------------------------------------------------- +// Public functions +//----------------------------------------------------------------------------- + +RWindowBase* MMF::VideoOutput::videoWindow() +{ + CCoeControl *control = internalWinId(); + if(!control) + control = effectiveWinId(); + + RWindowBase *window = 0; + if(control) + window = control->DrawableWindow(); + + return window; +} + +const QRect& MMF::VideoOutput::videoWindowRect() const +{ + return m_videoWindowRect; +} + +Phonon::VideoWidget::AspectRatio MMF::VideoOutput::aspectRatio() const +{ + return m_aspectRatio; +} + +void MMF::VideoOutput::setAspectRatio + (Phonon::VideoWidget::AspectRatio aspectRatio) +{ + if(m_aspectRatio != aspectRatio) { + m_aspectRatio = aspectRatio; + emit aspectRatioChanged(); + } +} + +Phonon::VideoWidget::ScaleMode MMF::VideoOutput::scaleMode() const +{ + return m_scaleMode; +} + +void MMF::VideoOutput::setScaleMode + (Phonon::VideoWidget::ScaleMode scaleMode) +{ + if(m_scaleMode != scaleMode) { + m_scaleMode = scaleMode; + emit scaleModeChanged(); + } +} + + +//----------------------------------------------------------------------------- // Private functions //----------------------------------------------------------------------------- -void MMF::VideoOutput::videoOutputRegionChanged() +void MMF::VideoOutput::getVideoWindowRect() { - dump(); - if (m_observer) - m_observer->videoOutputRegionChanged(); + RWindowBase *const window = videoWindow(); + if(window) + m_videoWindowRect = + qt_TRect2QRect(TRect(window->AbsPosition(), window->Size())); } void MMF::VideoOutput::registerForAncestorMoved() @@ -199,15 +273,20 @@ void MMF::VideoOutput::dump() const { #ifndef QT_NO_DEBUG TRACE_CONTEXT(VideoOutput::dump, EVideoInternal); + QScopedPointer<ObjectDump::QVisitor> visitor(new ObjectDump::QVisitor); visitor->setPrefix("Phonon::MMF"); // to aid searchability of logs ObjectDump::addDefaultAnnotators(*visitor); TRACE("Dumping tree from leaf 0x%08x:", this); - //ObjectDump::dumpAncestors(*this, *visitor); ObjectDump::dumpTreeFromLeaf(*this, *visitor); + + QScopedPointer<ObjectDump::QDumper> dumper(new ObjectDump::QDumper); + dumper->setPrefix("Phonon::MMF"); // to aid searchability of logs + ObjectDump::addDefaultAnnotators(*dumper); + TRACE_0("Dumping VideoOutput:"); + dumper->dumpObject(*this); #endif } - QT_END_NAMESPACE diff --git a/src/3rdparty/phonon/mmf/videooutput.h b/src/3rdparty/phonon/mmf/videooutput.h index db4d127..6dfe69d 100644 --- a/src/3rdparty/phonon/mmf/videooutput.h +++ b/src/3rdparty/phonon/mmf/videooutput.h @@ -24,6 +24,11 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include <QRect> #include "defs.h" +#include <Phonon/VideoWidget> + +#include <e32std.h> +class RWindowBase; + QT_BEGIN_NAMESPACE namespace Phonon @@ -31,7 +36,6 @@ namespace Phonon namespace MMF { class AncestorMoveMonitor; -class VideoOutputObserver; class VideoOutput : public QWidget { @@ -41,11 +45,29 @@ public: VideoOutput(AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent); ~VideoOutput(); - void setFrameSize(const QSize& size); - void setObserver(VideoOutputObserver* observer); + // Set size of video frame. Called by VideoPlayer. + void setVideoSize(const QSize& size); + + RWindowBase* videoWindow(); + const QRect& videoWindowRect() const; + Phonon::VideoWidget::AspectRatio aspectRatio() const; + void setAspectRatio(Phonon::VideoWidget::AspectRatio aspectRatio); + + Phonon::VideoWidget::ScaleMode scaleMode() const; + void setScaleMode(Phonon::VideoWidget::ScaleMode scaleMode); + + // Called by AncestorMoveMonitor void ancestorMoved(); + // Debugging output + void dump() const; + +Q_SIGNALS: + void videoWindowChanged(); + void aspectRatioChanged(); + void scaleModeChanged(); + protected: // Override QWidget functions QSize sizeHint() const; @@ -55,19 +77,18 @@ protected: bool event(QEvent* event); private: - void dump() const; - void videoOutputRegionChanged(); - + void getVideoWindowRect(); void registerForAncestorMoved(); private: // Not owned AncestorMoveMonitor* m_ancestorMoveMonitor; - // Not owned - VideoOutputObserver* m_observer; + QSize m_videoFrameSize; + QRect m_videoWindowRect; - QSize m_frameSize; + Phonon::VideoWidget::AspectRatio m_aspectRatio; + Phonon::VideoWidget::ScaleMode m_scaleMode; }; } diff --git a/src/3rdparty/phonon/mmf/videooutputobserver.h b/src/3rdparty/phonon/mmf/videooutputobserver.h deleted file mode 100644 index e3ba305..0000000 --- a/src/3rdparty/phonon/mmf/videooutputobserver.h +++ /dev/null @@ -1,44 +0,0 @@ -/* This file is part of the KDE project. - -Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - -This library is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 2.1 or 3 of the License. - -This library 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 Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this library. If not, see <http://www.gnu.org/licenses/>. - -*/ - -#ifndef PHONON_MMF_VIDEOOUTPUTOBSERVER_H -#define PHONON_MMF_VIDEOOUTPUTOBSERVER_H - -#include <QtGlobal> - -QT_BEGIN_NAMESPACE - -namespace Phonon -{ -namespace MMF -{ -/** - * Interface via which VideoOutput notifies VideoPlayer of changes to the - * video output screen region. - */ -class VideoOutputObserver -{ -public: - virtual void videoOutputRegionChanged() = 0; -}; -} -} - -QT_END_NAMESPACE - -#endif diff --git a/src/3rdparty/phonon/mmf/videowidget.cpp b/src/3rdparty/phonon/mmf/videowidget.cpp index 7d7abf1..bd22307 100644 --- a/src/3rdparty/phonon/mmf/videowidget.cpp +++ b/src/3rdparty/phonon/mmf/videowidget.cpp @@ -35,11 +35,7 @@ using namespace Phonon::MMF; // Constants //----------------------------------------------------------------------------- -static const Phonon::VideoWidget::AspectRatio DefaultAspectRatio = - Phonon::VideoWidget::AspectRatioAuto; static const qreal DefaultBrightness = 1.0; -static const Phonon::VideoWidget::ScaleMode DefaultScaleMode = - Phonon::VideoWidget::FitInView; static const qreal DefaultContrast = 1.0; static const qreal DefaultHue = 1.0; static const qreal DefaultSaturation = 1.0; @@ -52,10 +48,8 @@ static const qreal DefaultSaturation = 1.0; MMF::VideoWidget::VideoWidget (AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent) : MediaNode(parent) - , m_widget(new VideoOutput(ancestorMoveMonitor, parent)) - , m_aspectRatio(DefaultAspectRatio) + , m_videoOutput(new VideoOutput(ancestorMoveMonitor, parent)) , m_brightness(DefaultBrightness) - , m_scaleMode(DefaultScaleMode) , m_contrast(DefaultContrast) , m_hue(DefaultHue) , m_saturation(DefaultSaturation) @@ -81,7 +75,7 @@ MMF::VideoWidget::~VideoWidget() Phonon::VideoWidget::AspectRatio MMF::VideoWidget::aspectRatio() const { - return m_aspectRatio; + return m_videoOutput->aspectRatio(); } void MMF::VideoWidget::setAspectRatio @@ -90,7 +84,7 @@ void MMF::VideoWidget::setAspectRatio TRACE_CONTEXT(VideoWidget::setAspectRatio, EVideoApi); TRACE("aspectRatio %d", aspectRatio); - m_aspectRatio = aspectRatio; + m_videoOutput->setAspectRatio(aspectRatio); } qreal MMF::VideoWidget::brightness() const @@ -108,7 +102,7 @@ void MMF::VideoWidget::setBrightness(qreal brightness) Phonon::VideoWidget::ScaleMode MMF::VideoWidget::scaleMode() const { - return m_scaleMode; + return m_videoOutput->scaleMode(); } void MMF::VideoWidget::setScaleMode(Phonon::VideoWidget::ScaleMode scaleMode) @@ -116,7 +110,7 @@ void MMF::VideoWidget::setScaleMode(Phonon::VideoWidget::ScaleMode scaleMode) TRACE_CONTEXT(VideoWidget::setScaleMode, EVideoApi); TRACE("setScaleMode %d", setScaleMode); - m_scaleMode = scaleMode; + m_videoOutput->setScaleMode(scaleMode); } qreal MMF::VideoWidget::contrast() const @@ -160,17 +154,12 @@ void MMF::VideoWidget::setSaturation(qreal saturation) QWidget* MMF::VideoWidget::widget() { - return m_widget.data(); -} - -VideoOutput& MMF::VideoWidget::videoOutput() -{ - return *static_cast<VideoOutput*>(widget()); + return m_videoOutput.data(); } bool MMF::VideoWidget::activateOnMediaObject(MediaObject *mo) { - mo->setVideoOutput(&videoOutput()); + mo->setVideoOutput(m_videoOutput.data()); return true; } diff --git a/src/3rdparty/phonon/mmf/videowidget.h b/src/3rdparty/phonon/mmf/videowidget.h index 318dfae..2f0978b 100644 --- a/src/3rdparty/phonon/mmf/videowidget.h +++ b/src/3rdparty/phonon/mmf/videowidget.h @@ -20,6 +20,7 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #define PHONON_MMF_VIDEOWIDGET_H #include "mmf_medianode.h" +#include "videooutput.h" #include <QtGui/QWidget> #include <Phonon/VideoWidget> @@ -59,17 +60,13 @@ public: virtual void setSaturation(qreal saturation); virtual QWidget *widget(); - VideoOutput& videoOutput(); - protected: virtual bool activateOnMediaObject(MediaObject *mo); private: - QScopedPointer<QWidget> m_widget; + QScopedPointer<VideoOutput> m_videoOutput; - Phonon::VideoWidget::AspectRatio m_aspectRatio; qreal m_brightness; - Phonon::VideoWidget::ScaleMode m_scaleMode; qreal m_contrast; qreal m_hue; qreal m_saturation; diff --git a/src/3rdparty/phonon/mmf/volumeobserver.h b/src/3rdparty/phonon/mmf/volumeobserver.h deleted file mode 100644 index bedd3de..0000000 --- a/src/3rdparty/phonon/mmf/volumeobserver.h +++ /dev/null @@ -1,44 +0,0 @@ -/* This file is part of the KDE project. - -Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - -This library is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 2.1 or 3 of the License. - -This library 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 Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this library. If not, see <http://www.gnu.org/licenses/>. - -*/ - -#ifndef PHONON_MMF_VOLUMEOBSERVER_H -#define PHONON_MMF_VOLUMEOBSERVER_H - -#include <QtGlobal> - -QT_BEGIN_NAMESPACE - -namespace Phonon -{ -namespace MMF -{ -/** - * Interface used by AudioOutput to pass volume control commands - * back along the audio path to the MediaObject. - */ -class VolumeObserver -{ -public: - virtual void volumeChanged(qreal volume) = 0; -}; -} -} - -QT_END_NAMESPACE - -#endif diff --git a/src/corelib/kernel/qsharedmemory_unix.cpp b/src/corelib/kernel/qsharedmemory_unix.cpp index 40b9f04..a850df0 100644 --- a/src/corelib/kernel/qsharedmemory_unix.cpp +++ b/src/corelib/kernel/qsharedmemory_unix.cpp @@ -49,6 +49,7 @@ #include <errno.h> +#ifndef QT_NO_SHAREDMEMORY #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> @@ -56,6 +57,7 @@ #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> +#endif //QT_NO_SHAREDMEMORY #include "private/qcore_unix_p.h" diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp index 8089b43..d8ae73e 100644 --- a/src/gui/dialogs/qfiledialog_win.cpp +++ b/src/gui/dialogs/qfiledialog_win.cpp @@ -509,7 +509,7 @@ static bool qt_win_set_IFileDialogOptions(IFileDialog *pfd, DWORD newOptions; hr = pfd->GetOptions(&newOptions); if (SUCCEEDED(hr)) { - newOptions |= (FOS_NOCHANGEDIR | FOS_NOREADONLYRETURN); + newOptions |= FOS_NOCHANGEDIR; if (mode == QFileDialog::ExistingFile || mode == QFileDialog::ExistingFiles) newOptions |= (FOS_FILEMUSTEXIST | FOS_PATHMUSTEXIST); diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 3ef311c..3f9f443 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -1517,6 +1517,8 @@ void QGraphicsView::setScene(QGraphicsScene *scene) QEvent windowDeactivate(QEvent::WindowDeactivate); QApplication::sendEvent(d->scene, &windowDeactivate); } + if(hasFocus()) + d->scene->clearFocus(); } // Assign the new scene and update the contents (scrollbars, etc.)). diff --git a/src/gui/image/qpixmap_x11.cpp b/src/gui/image/qpixmap_x11.cpp index 3f297df..7008fbd 100644 --- a/src/gui/image/qpixmap_x11.cpp +++ b/src/gui/image/qpixmap_x11.cpp @@ -416,6 +416,11 @@ void QX11PixmapData::fromImage(const QImage &img, d = img.depth(); is_null = (w <= 0 || h <= 0); + if (is_null) { + w = h = 0; + return; + } + if (defaultScreen >= 0 && defaultScreen != xinfo.screen()) { QX11InfoData* xd = xinfo.getX11Data(true); xd->screen = defaultScreen; diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp index 15db9a6..c6622cb 100644 --- a/src/gui/itemviews/qlistview.cpp +++ b/src/gui/itemviews/qlistview.cpp @@ -972,9 +972,9 @@ void QListView::paintEvent(QPaintEvent *e) option.rect = visualRect(*it); if (flow() == TopToBottom) - option.rect.setWidth(qMin(viewport()->size().width() - 2 * d->spacing(), option.rect.width())); + option.rect.setWidth(qMin(d->contentsSize().width() - 2 * d->spacing(), option.rect.width())); else - option.rect.setHeight(qMin(viewport()->size().height() - 2 * d->spacing(), option.rect.height())); + option.rect.setHeight(qMin(d->contentsSize().height() - 2 * d->spacing(), option.rect.height())); option.state = state; if (selections && selections->isSelected(*it)) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 04e4b31..c7f0c00 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -323,7 +323,6 @@ QSymbianControl::QSymbianControl(QWidget *w) , qwidget(w) , m_longTapDetector(0) , m_ignoreFocusChanged(0) - , m_previousEventLongTap(0) , m_symbianPopupIsOpen(0) { } @@ -362,9 +361,6 @@ QSymbianControl::~QSymbianControl() setFocusSafely(false); S60->appUi()->RemoveFromStack(this); delete m_longTapDetector; - - if(m_previousEventLongTap) - QApplicationPrivate::mouse_buttons = QApplicationPrivate::mouse_buttons & ~Qt::RightButton; } void QSymbianControl::setWidget(QWidget *w) @@ -379,19 +375,11 @@ void QSymbianControl::HandleLongTapEventL( const TPoint& aPenEventLocation, cons alienWidget = qwidget->childAt(widgetPos); if (!alienWidget) alienWidget = qwidget; - QApplicationPrivate::mouse_buttons = QApplicationPrivate::mouse_buttons &(~Qt::LeftButton); - QApplicationPrivate::mouse_buttons = QApplicationPrivate::mouse_buttons | Qt::RightButton; - QMouseEvent mEvent(QEvent::MouseButtonPress, alienWidget->mapFrom(qwidget, widgetPos), globalPos, - Qt::RightButton, QApplicationPrivate::mouse_buttons, Qt::NoModifier); - - bool res = sendMouseEvent(alienWidget, &mEvent); #if !defined(QT_NO_CONTEXTMENU) - QContextMenuEvent contextMenuEvent(QContextMenuEvent::Mouse, widgetPos, globalPos, mEvent.modifiers()); + QContextMenuEvent contextMenuEvent(QContextMenuEvent::Mouse, widgetPos, globalPos, Qt::NoModifier); qt_sendSpontaneousEvent(alienWidget, &contextMenuEvent); #endif - - m_previousEventLongTap = true; } #ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER @@ -515,12 +503,6 @@ void QSymbianControl::HandlePointerEvent(const TPointerEvent& pEvent) mapS60MouseEventTypeToQt(&type, &button, &pEvent); Qt::KeyboardModifiers modifiers = mapToQtModifiers(pEvent.iModifiers); - if (m_previousEventLongTap) - if (type == QEvent::MouseButtonRelease){ - button = Qt::RightButton; - QApplicationPrivate::mouse_buttons = QApplicationPrivate::mouse_buttons & ~Qt::RightButton; - m_previousEventLongTap = false; - } if (type == QMouseEvent::None) return; diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index 89c18fb..e3af683 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -1036,7 +1036,7 @@ QKeySequence QKeySequence::mnemonic(const QString &text) #else found = true; } else { - qWarning(qPrintable(QString::fromLatin1("QKeySequence::mnemonic: \"%1\" contains multiple occurences of '&'").arg(text))); + qWarning("QKeySequence::mnemonic: \"%s\" contains multiple occurences of '&'", qPrintable(text)); #endif } } diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index ec8c9cb..08f8bb5 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -204,7 +204,6 @@ private: QWidget *qwidget; QLongTapTimer* m_longTapDetector; bool m_ignoreFocusChanged : 1; - bool m_previousEventLongTap : 1; bool m_symbianPopupIsOpen : 1; #ifdef Q_WS_S60 diff --git a/src/gui/painting/qblendfunctions.cpp b/src/gui/painting/qblendfunctions.cpp index ba1b642..b92c5c2 100644 --- a/src/gui/painting/qblendfunctions.cpp +++ b/src/gui/painting/qblendfunctions.cpp @@ -227,9 +227,6 @@ void qt_scale_image_16bit(uchar *destPixels, int dbpl, quint32 basex; quint32 srcy; - const int dstx = qCeil((tx1 + 0.5 - qMin(targetRect.left(), targetRect.right())) * ix) - 1; - const int dsty = qCeil((ty1 + 0.5 - qMin(targetRect.top(), targetRect.bottom())) * iy) - 1; - if (sx < 0) { int dstx = qFloor((tx1 + qreal(0.5) - targetRect.right()) * ix) + 1; basex = quint32(srcRect.right() * 65536) + dstx; diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index b640858..d45bd10 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -78,8 +78,8 @@ const char *qt_real_to_string(qreal val, char *buf) { unsigned int ival = (unsigned int) val; qreal frac = val - (qreal)ival; - int ifrac = (int)(frac * 1000000); - if (ifrac == 1000000) { + int ifrac = (int)(frac * 1000000000); + if (ifrac == 1000000000) { ++ival; ifrac = 0; } @@ -90,7 +90,7 @@ const char *qt_real_to_string(qreal val, char *buf) { ++i; ival /= 10; } - int fact = 100000; + int fact = 100000000; if (i == 0) { *(buf++) = '0'; } else { diff --git a/src/gui/styles/qgtkstyle_p.cpp b/src/gui/styles/qgtkstyle_p.cpp index 7119a4f..62d9197 100644 --- a/src/gui/styles/qgtkstyle_p.cpp +++ b/src/gui/styles/qgtkstyle_p.cpp @@ -202,8 +202,12 @@ Ptr_gnome_vfs_init QGtkStylePrivate::gnome_vfs_init = 0; typedef int (*x11ErrorHandler)(Display*, XErrorEvent*); +Q_DECLARE_METATYPE(QGtkStylePrivate*); + static void gtkStyleSetCallback(GtkWidget*, QGtkStylePrivate* stylePrivate) { + qRegisterMetaType<QGtkStylePrivate *>(); + // We have to let this function return and complete the event // loop to ensure that all gtk widgets have been styled before // updating diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 939ea45..7c3e11f 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -783,6 +783,14 @@ void QS60StylePrivate::setThemePaletteHash(QPalette *palette) const widgetPalette.setBrush(QPalette::Window, QBrush()); QApplication::setPalette(widgetPalette, "QScrollArea"); widgetPalette = *palette; + + //Webpages should not use S60 theme colors as they are designed to work + //with themeBackground and do not generally mesh well with web page backgrounds. + QPalette webPalette = *palette; + webPalette.setColor(QPalette::WindowText, Qt::black); + webPalette.setColor(QPalette::Text, Qt::black); + QApplication::setPalette(webPalette, "QWebView"); + QApplication::setPalette(webPalette, "QGraphicsWebView"); } QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlags flags) @@ -2007,7 +2015,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti buttonRect.adjust(0,-newY,0,-newY); painter->save(); - QColor themeColor = d->s60Color(QS60StyleEnums::CL_QsnIconColors, 13, option); + QColor themeColor = d->s60Color(QS60StyleEnums::CL_QsnTextColors, 6, option); QColor buttonTextColor = option->palette.buttonText().color(); if (themeColor != buttonTextColor) painter->setPen(buttonTextColor); diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp index 59210c3..8b40931 100644 --- a/src/gui/styles/qstylesheetstyle.cpp +++ b/src/gui/styles/qstylesheetstyle.cpp @@ -4637,6 +4637,7 @@ int QStyleSheetStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const } break; +#ifndef QT_NO_TABWIDGET case PM_TabBarTabHSpace: case PM_TabBarTabVSpace: subRule = renderRule(w, opt, PseudoElement_TabBarTab); @@ -4660,11 +4661,14 @@ int QStyleSheetStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const return 0; break; - case PM_TabBarBaseOverlap: - if (hasStyleRule(w->parentWidget(), PseudoElement_TabWidgetPane)) { + case PM_TabBarBaseOverlap: { + const QWidget *tabWidget = qobject_cast<const QTabWidget *>(w) ? w : w->parentWidget(); + if (hasStyleRule(tabWidget, PseudoElement_TabWidgetPane)) { return 0; } break; + } +#endif // QT_NO_TABWIDGET case PM_SliderThickness: // horizontal slider's height (sizeHint) case PM_SliderLength: // minimum length of slider diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp index 2ad6512..18e1ffc 100644 --- a/src/gui/text/qtextdocument_p.cpp +++ b/src/gui/text/qtextdocument_p.cpp @@ -1114,9 +1114,11 @@ void QTextDocumentPrivate::endEditBlock() return; if (undoEnabled && undoState > 0) { + const bool wasBlocking = !undoStack[undoState - 1].block_end; if (undoStack[undoState - 1].block_part) { undoStack[undoState - 1].block_end = true; - emit document()->undoCommandAdded(); + if (wasBlocking) + emit document()->undoCommandAdded(); } } diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp index f5dbe1c..9f3fe4f 100644 --- a/src/gui/widgets/qlineedit.cpp +++ b/src/gui/widgets/qlineedit.cpp @@ -1515,7 +1515,8 @@ void QLineEdit::mouseReleaseEvent(QMouseEvent* e) } #endif - d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); + if (!isReadOnly()) + d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); d->clickCausedFocus = 0; } @@ -1594,7 +1595,9 @@ void QLineEdit::keyPressEvent(QKeyEvent *event) && !isReadOnly()) { setEditFocus(true); +#ifndef Q_OS_SYMBIAN clear(); +#endif } else { event->ignore(); return; @@ -1651,7 +1654,9 @@ void QLineEdit::inputMethodEvent(QInputMethodEvent *e) && hasFocus() && !hasEditFocus() && !e->preeditString().isEmpty()) { setEditFocus(true); +#ifndef Q_OS_SYMBIAN selectAll(); // so text is replaced rather than appended to +#endif } #endif diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp index 54d1612..fc88d06 100644 --- a/src/gui/widgets/qmenu.cpp +++ b/src/gui/widgets/qmenu.cpp @@ -1106,6 +1106,7 @@ void QMenuPrivate::_q_actionTriggered() { Q_Q(QMenu); if (QAction *action = qobject_cast<QAction *>(q->sender())) { + QWeakPointer<QAction> actionGuard = action; #ifdef QT3_SUPPORT //we store it here because the action might be deleted/changed by connected slots const int id = q->findIdForAction(action); @@ -1115,7 +1116,7 @@ void QMenuPrivate::_q_actionTriggered() emit q->activated(id); #endif - if (!activationRecursionGuard) { + if (!activationRecursionGuard && actionGuard) { //in case the action has not been activated by the mouse //we check the parent hierarchy QList< QPointer<QWidget> > list; diff --git a/src/gui/widgets/qplaintextedit.cpp b/src/gui/widgets/qplaintextedit.cpp index 18adc6c..c7759e8 100644 --- a/src/gui/widgets/qplaintextedit.cpp +++ b/src/gui/widgets/qplaintextedit.cpp @@ -1966,7 +1966,8 @@ void QPlainTextEdit::mouseReleaseEvent(QMouseEvent *e) d->ensureCursorVisible(); } - d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); + if (!isReadOnly()) + d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); d->clickCausedFocus = 0; } diff --git a/src/gui/widgets/qtextedit.cpp b/src/gui/widgets/qtextedit.cpp index 998ab4f..1c49ef0 100644 --- a/src/gui/widgets/qtextedit.cpp +++ b/src/gui/widgets/qtextedit.cpp @@ -1212,7 +1212,9 @@ void QTextEdit::keyPressEvent(QKeyEvent *e) if (!hasEditFocus() && !(e->modifiers() & Qt::ControlModifier)) { if (e->text()[0].isPrint()) { setEditFocus(true); +#ifndef Q_OS_SYMBIAN clear(); +#endif } else { e->ignore(); return; @@ -1576,7 +1578,8 @@ void QTextEdit::mouseReleaseEvent(QMouseEvent *e) d->autoScrollTimer.stop(); ensureCursorVisible(); } - d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); + if (!isReadOnly()) + d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); d->clickCausedFocus = 0; } @@ -1674,7 +1677,9 @@ void QTextEdit::inputMethodEvent(QInputMethodEvent *e) && QApplication::keypadNavigationEnabled() && !hasEditFocus()) { setEditFocus(true); +#ifndef Q_OS_SYMBIAN selectAll(); // so text is replaced rather than appended to +#endif } #endif d->sendControlEvent(e); diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp index 5de6c70..9645fa8 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp @@ -152,13 +152,23 @@ bool QAudioDeviceInfoInternal::open() { int err = 0; QString dev = device; - if(!dev.contains(QLatin1String("default"))) { + QList<QByteArray> devices = availableDevices(mode); + + if(dev.compare(QLatin1String("default")) == 0) { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QLatin1String(devices.first().constData()); +#else + dev = QLatin1String("hw:0,0"); +#endif + } else { #if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - dev = QString(QLatin1String("default:CARD=%1")).arg(dev); + dev = device; #else int idx = 0; char *name; + QString shortName = device.mid(device.indexOf(QLatin1String("="),0)+1); + while(snd_card_get_name(idx,&name) == 0) { if(dev.contains(QLatin1String(name))) break; @@ -195,16 +205,25 @@ bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const snd_pcm_hw_params_t *params; QString dev = device; - // open() - if(!dev.contains(QLatin1String("default"))) { + QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput); + + if(dev.compare(QLatin1String("default")) == 0) { #if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - dev = QString(QLatin1String("default:CARD=%1")).arg(dev); + dev = QLatin1String(devices.first().constData()); +#else + dev = QLatin1String("hw:0,0"); +#endif + } else { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = device; #else int idx = 0; char *name; - + + QString shortName = device.mid(device.indexOf(QLatin1String("="),0)+1); + while(snd_card_get_name(idx,&name) == 0) { - if(dev.contains(QLatin1String(name))) + if(shortName.compare(QLatin1String(name)) == 0) break; idx++; } @@ -386,6 +405,7 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode) { QList<QByteArray> devices; QByteArray filter; + #if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) // Create a list of all current audio devices that support mode void **hints, **n; @@ -408,12 +428,10 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode) descr = snd_device_name_get_hint(*n, "DESC"); io = snd_device_name_get_hint(*n, "IOID"); if((name != NULL) && (descr != NULL) && ((io == NULL) || (io == filter))) { - QString str = QLatin1String(name); - - if(str.contains(QLatin1String("default"))) { - int pos = str.indexOf(QLatin1String("="),0); - devices.append(str.mid(pos+1).toLocal8Bit().constData()); - } + QString deviceName = QLatin1String(name); + QString deviceDescription = QLatin1String(descr); + if(deviceDescription.contains(QLatin1String("Default Audio Device"))) + devices.append(deviceName.toLocal8Bit().constData()); } if(name != NULL) free(name); @@ -448,7 +466,7 @@ QByteArray QAudioDeviceInfoInternal::defaultInputDevice() if(devices.size() == 0) return QByteArray(); - return QByteArray("default"); + return devices.first(); } QByteArray QAudioDeviceInfoInternal::defaultOutputDevice() @@ -457,7 +475,7 @@ QByteArray QAudioDeviceInfoInternal::defaultOutputDevice() if(devices.size() == 0) return QByteArray(); - return QByteArray("default"); + return devices.first(); } QT_END_NAMESPACE diff --git a/src/multimedia/audio/qaudioinput.cpp b/src/multimedia/audio/qaudioinput.cpp index e794eaf..8b368d5 100644 --- a/src/multimedia/audio/qaudioinput.cpp +++ b/src/multimedia/audio/qaudioinput.cpp @@ -47,7 +47,6 @@ #include "qaudiodevicefactory_p.h" - QT_BEGIN_NAMESPACE /*! diff --git a/src/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/audio/qaudioinput_alsa_p.cpp index 8a8f0db..3dbe66c 100644 --- a/src/multimedia/audio/qaudioinput_alsa_p.cpp +++ b/src/multimedia/audio/qaudioinput_alsa_p.cpp @@ -52,6 +52,7 @@ #include <QtCore/qcoreapplication.h> #include "qaudioinput_alsa_p.h" +#include "qaudiodeviceinfo_alsa_p.h" QT_BEGIN_NAMESPACE @@ -80,8 +81,7 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFor pullMode = true; resuming = false; - QStringList list1 = QString(QLatin1String(device)).split(QLatin1String(":")); - m_device = QByteArray(list1.at(0).toLocal8Bit().constData()); + m_device = device; timer = new QTimer(this); connect(timer,SIGNAL(timeout()),SLOT(userFeed())); @@ -259,22 +259,31 @@ bool QAudioInputPrivate::open() unsigned int freakuency=settings.frequency(); QString dev = QString(QLatin1String(m_device.constData())); - if(!dev.contains(QLatin1String("default"))) { -#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - dev = QString(QLatin1String("default:CARD=%1")).arg(QLatin1String(m_device.constData())); + QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioInput); + if(dev.compare(QLatin1String("default")) == 0) { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QLatin1String(devices.first()); +#else + dev = QLatin1String("hw:0,0"); +#endif + } else { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QLatin1String(m_device); #else int idx = 0; char *name; + QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData()); + while(snd_card_get_name(idx,&name) == 0) { - if(m_device.contains(name)) + if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0) break; idx++; } dev = QString(QLatin1String("hw:%1,0")).arg(idx); #endif } - + // Step 1: try and open the device while((count < 5) && (err < 0)) { err=snd_pcm_open(&handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_CAPTURE,0); @@ -614,7 +623,7 @@ qint64 QAudioInputPrivate::elapsedUSecs() const if (deviceState == QAudio::StoppedState) return 0; -#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) snd_pcm_status_t* status; snd_pcm_status_alloca(&status); diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/audio/qaudiooutput_alsa_p.cpp index e9784d2..020a104 100644 --- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp +++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp @@ -52,6 +52,7 @@ #include <QtCore/qcoreapplication.h> #include "qaudiooutput_alsa_p.h" +#include "qaudiodeviceinfo_alsa_p.h" QT_BEGIN_NAMESPACE @@ -281,21 +282,31 @@ bool QAudioOutputPrivate::open() unsigned int freakuency=settings.frequency(); QString dev = QLatin1String(m_device.constData()); - if(!dev.contains(QLatin1String("default"))) { -#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - dev = QString(QLatin1String("default:CARD=%1")).arg(QLatin1String(m_device.constData())); + QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput); + if(dev.compare(QLatin1String("default")) == 0) { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QLatin1String(devices.first().constData()); +#else + dev = QLatin1String("hw:0,0"); +#endif + } else { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QLatin1String(m_device); #else int idx = 0; char *name; + QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData()); + while(snd_card_get_name(idx,&name) == 0) { - if(m_device.contains(name)) + if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0) break; idx++; } dev = QString(QLatin1String("hw:%1,0")).arg(idx); #endif } + // Step 1: try and open the device while((count < 5) && (err < 0)) { err=snd_pcm_open(&handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0); @@ -666,7 +677,7 @@ qint64 QAudioOutputPrivate::elapsedUSecs() const if (deviceState == QAudio::StoppedState) return 0; -#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) snd_pcm_status_t* status; snd_pcm_status_alloca(&status); diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index f8a2ea4..d5ca218 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -184,8 +184,13 @@ public: engineType = QPaintEngine::OpenGL2; #else // We can't do this in the constructor for this object because it - // needs to be called *before* the QApplication constructor + // needs to be called *before* the QApplication constructor. + // Also check for the FragmentProgram extension in conjunction with + // the 2.0 version flag, to cover the case where we export the display + // from an old GL 1.1 server to a GL 2.x client. In that case we can't + // use GL 2.0. if ((QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0) + && (QGLExtensions::glExtensions & QGLExtensions::FragmentProgram) && qgetenv("QT_GL_USE_OPENGL1ENGINE").isEmpty()) engineType = QPaintEngine::OpenGL2; else @@ -2170,8 +2175,8 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G int tx_h = qt_next_power_of_two(image.height()); QImage img = image; - if (( !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0) && - !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0) ) + if (!(QGLExtensions::glExtensions & QGLExtensions::NPOTTextures) + && !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0) && (target == GL_TEXTURE_2D && (tx_w != image.width() || tx_h != image.height()))) { img = img.scaled(tx_w, tx_h); @@ -2192,9 +2197,9 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G bool genMipmap = false; #endif if (glFormat.directRendering() - && QGLExtensions::glExtensions & QGLExtensions::GenerateMipmap + && (QGLExtensions::glExtensions & QGLExtensions::GenerateMipmap) && target == GL_TEXTURE_2D - && options & QGLContext::MipmapBindOption) + && (options & QGLContext::MipmapBindOption)) { #ifdef QGL_BIND_TEXTURE_DEBUG printf(" - generating mipmaps (%d ms)\n", time.elapsed()); @@ -2220,7 +2225,7 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G bool premul = options & QGLContext::PremultipliedAlphaBindOption; GLenum externalFormat; GLuint pixel_type; - if (QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_1_2) { + if (QGLExtensions::glExtensions & QGLExtensions::BGRATextureFormat) { externalFormat = GL_BGRA; pixel_type = GL_UNSIGNED_INT_8_8_8_8_REV; } else { @@ -4886,54 +4891,59 @@ QGLWidget::QGLWidget(QGLContext *context, QWidget *parent, void QGLExtensions::init_extensions() { - QString extensions = QLatin1String(reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS))); - if (extensions.contains(QLatin1String("texture_rectangle"))) + QList<QByteArray> extensions = QByteArray(reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS))).split(' '); + if (extensions.contains("GL_ARB_texture_rectangle")) glExtensions |= TextureRectangle; - if (extensions.contains(QLatin1String("multisample"))) + if (extensions.contains("GL_ARB_multisample")) glExtensions |= SampleBuffers; - if (extensions.contains(QLatin1String("generate_mipmap"))) + if (extensions.contains("GL_SGIS_generate_mipmap")) glExtensions |= GenerateMipmap; - if (extensions.contains(QLatin1String("texture_compression_s3tc"))) + if (extensions.contains("GL_EXT_texture_compression_s3tc")) glExtensions |= TextureCompression; - if (extensions.contains(QLatin1String("ARB_fragment_program"))) + if (extensions.contains("GL_ARB_fragment_program")) glExtensions |= FragmentProgram; - if (extensions.contains(QLatin1String("mirrored_repeat"))) + if (extensions.contains("GL_ARB_texture_mirrored_repeat")) glExtensions |= MirroredRepeat; - if (extensions.contains(QLatin1String("EXT_framebuffer_object"))) + if (extensions.contains("GL_EXT_framebuffer_object")) glExtensions |= FramebufferObject; - if (extensions.contains(QLatin1String("EXT_stencil_two_side"))) + if (extensions.contains("GL_EXT_stencil_two_side")) glExtensions |= StencilTwoSide; - if (extensions.contains(QLatin1String("EXT_stencil_wrap"))) + if (extensions.contains("GL_EXT_stencil_wrap")) glExtensions |= StencilWrap; - if (extensions.contains(QLatin1String("EXT_packed_depth_stencil"))) + if (extensions.contains("GL_EXT_packed_depth_stencil")) glExtensions |= PackedDepthStencil; - if (extensions.contains(QLatin1String("GL_NV_float_buffer"))) + if (extensions.contains("GL_NV_float_buffer")) glExtensions |= NVFloatBuffer; - if (extensions.contains(QLatin1String("ARB_pixel_buffer_object"))) + if (extensions.contains("GL_ARB_pixel_buffer_object")) glExtensions |= PixelBufferObject; #if defined(QT_OPENGL_ES_2) glExtensions |= FramebufferObject; glExtensions |= GenerateMipmap; #endif #if defined(QT_OPENGL_ES_1) || defined(QT_OPENGL_ES_1_CL) - if (extensions.contains(QLatin1String("OES_framebuffer_object"))) + if (extensions.contains("GL_OES_framebuffer_object")) glExtensions |= FramebufferObject; #endif #if defined(QT_OPENGL_ES) - if (extensions.contains(QLatin1String("OES_packed_depth_stencil"))) + if (extensions.contains("GL_OES_packed_depth_stencil")) glExtensions |= PackedDepthStencil; #endif - if (extensions.contains(QLatin1String("ARB_framebuffer_object"))) { + if (extensions.contains("GL_ARB_framebuffer_object")) { // ARB_framebuffer_object also includes EXT_framebuffer_blit. glExtensions |= FramebufferObject; glExtensions |= FramebufferBlit; } - if (extensions.contains(QLatin1String("EXT_framebuffer_blit"))) + + if (extensions.contains("GL_EXT_framebuffer_blit")) glExtensions |= FramebufferBlit; - if (extensions.contains(QLatin1String("GL_ARB_texture_non_power_of_two"))) + if (extensions.contains("GL_ARB_texture_non_power_of_two")) glExtensions |= NPOTTextures; + if (extensions.contains("GL_EXT_bgra")) + glExtensions |= BGRATextureFormat; + + QGLContext cx(QGLFormat::defaultFormat()); if (glExtensions & TextureCompression) { qt_glCompressedTexImage2DARB = (pfn_glCompressedTexImage2DARB) cx.getProcAddress(QLatin1String("glCompressedTexImage2DARB")); diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 45b2942..8e472e5 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -375,7 +375,8 @@ public: NVFloatBuffer = 0x00000400, PixelBufferObject = 0x00000800, FramebufferBlit = 0x00001000, - NPOTTextures = 0x00002000 + NPOTTextures = 0x00002000, + BGRATextureFormat = 0x00004000 }; Q_DECLARE_FLAGS(Extensions, Extension) diff --git a/src/opengl/qgl_x11.cpp b/src/opengl/qgl_x11.cpp index 899047a..a037282 100644 --- a/src/opengl/qgl_x11.cpp +++ b/src/opengl/qgl_x11.cpp @@ -343,8 +343,8 @@ void* qglx_getProcAddress(const char* procName) static bool triedResolvingGlxGetProcAddress = false; if (!triedResolvingGlxGetProcAddress) { triedResolvingGlxGetProcAddress = true; - QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); - if (glxExt.contains(QLatin1String("GLX_ARB_get_proc_address"))) { + QList<QByteArray> glxExt = QByteArray(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)).split(' '); + if (glxExt.contains("GLX_ARB_get_proc_address")) { #if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) void *handle = dlopen(NULL, RTLD_LAZY); if (handle) { @@ -523,8 +523,8 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) if (!d->gpm) return false; } - QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); - if (glxExt.contains(QLatin1String("GLX_SGI_video_sync"))) { + QList<QByteArray> glxExt = QByteArray(glXQueryExtensionsString(xinfo->display(), xinfo->screen())).split(' '); + if (glxExt.contains("GLX_SGI_video_sync")) { if (d->glFormat.swapInterval() == -1) d->glFormat.setSwapInterval(0); } else { @@ -874,8 +874,9 @@ void QGLContext::swapBuffers() const static qt_glXWaitVideoSyncSGI glXWaitVideoSyncSGI = 0; static bool resolved = false; if (!resolved) { - QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); - if (glxExt.contains(QLatin1String("GLX_SGI_video_sync"))) { + const QX11Info *xinfo = qt_x11Info(d->paintDevice); + QList<QByteArray> glxExt = QByteArray(glXQueryExtensionsString(xinfo->display(), xinfo->screen())).split(' '); + if (glxExt.contains("GLX_SGI_video_sync")) { glXGetVideoSyncSGI = (qt_glXGetVideoSyncSGI)qglx_getProcAddress("glXGetVideoSyncSGI"); glXWaitVideoSyncSGI = (qt_glXWaitVideoSyncSGI)qglx_getProcAddress("glXWaitVideoSyncSGI"); } @@ -1106,8 +1107,8 @@ void *QGLContext::getProcAddress(const QString &proc) const if (resolved && !glXGetProcAddressARB) return 0; if (!glXGetProcAddressARB) { - QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); - if (glxExt.contains(QLatin1String("GLX_ARB_get_proc_address"))) { + QList<QByteArray> glxExt = QByteArray(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)).split(' '); + if (glxExt.contains("GLX_ARB_get_proc_address")) { #if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) void *handle = dlopen(NULL, RTLD_LAZY); if (handle) { @@ -1594,7 +1595,7 @@ typedef void (*qt_glXReleaseTexImageEXT)(Display*, GLXDrawable, int); static qt_glXBindTexImageEXT glXBindTexImageEXT = 0; static qt_glXReleaseTexImageEXT glXReleaseTexImageEXT = 0; -bool qt_resolveTextureFromPixmap() +static bool qt_resolveTextureFromPixmap(QPaintDevice *paintDevice) { static bool resolvedTextureFromPixmap = false; @@ -1607,9 +1608,9 @@ bool qt_resolveTextureFromPixmap() { return false; // Can't use TFP without NPOT } - - QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); - if (glxExt.contains(QLatin1String("GLX_EXT_texture_from_pixmap"))) { + const QX11Info *xinfo = qt_x11Info(paintDevice); + QList<QByteArray> glxExt = QByteArray(glXQueryExtensionsString(xinfo->display(), xinfo->screen())).split(' '); + if (glxExt.contains("GLX_EXT_texture_from_pixmap")) { glXBindTexImageEXT = (qt_glXBindTexImageEXT) qglx_getProcAddress("glXBindTexImageEXT"); glXReleaseTexImageEXT = (qt_glXReleaseTexImageEXT) qglx_getProcAddress("glXReleaseTexImageEXT"); } @@ -1630,7 +1631,7 @@ QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmapData *pmd, con Q_ASSERT(pmd->classId() == QPixmapData::X11Class); - if (!qt_resolveTextureFromPixmap()) + if (!qt_resolveTextureFromPixmap(paintDevice)) return 0; QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pmd); diff --git a/src/opengl/qglpixelbuffer_egl.cpp b/src/opengl/qglpixelbuffer_egl.cpp index 744fbd4..de08655 100644 --- a/src/opengl/qglpixelbuffer_egl.cpp +++ b/src/opengl/qglpixelbuffer_egl.cpp @@ -72,37 +72,53 @@ bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidge return false; } + // Find the shared context. + QEglContext *shareContext = 0; + if (shareWidget && shareWidget->d_func()->glcx) + shareContext = shareWidget->d_func()->glcx->d_func()->eglContext; + // Choose an appropriate configuration. We use the best format // we can find, even if it is greater than the requested format. // We try for a pbuffer that is capable of texture rendering if possible. - QEglProperties configProps; - qt_egl_set_format(configProps, QInternal::Pbuffer, f); - configProps.setRenderableType(ctx->api()); - bool ok = false; + textureFormat = EGL_NONE; + if (shareContext) { + // Use the same configuration as the widget we are sharing with. + ctx->setConfig(shareContext->config()); +#if QGL_RENDER_TEXTURE + EGLint value = EGL_FALSE; + if (ctx->configAttrib(EGL_BIND_TO_TEXTURE_RGBA, &value) && value) + textureFormat = EGL_TEXTURE_RGBA; + else if (ctx->configAttrib(EGL_BIND_TO_TEXTURE_RGB, &value) && value) + textureFormat = EGL_TEXTURE_RGB; +#endif + } else { + QEglProperties configProps; + qt_egl_set_format(configProps, QInternal::Pbuffer, f); + configProps.setRenderableType(ctx->api()); + bool ok = false; #if QGL_RENDER_TEXTURE - textureFormat = EGL_TEXTURE_RGBA; - configProps.setValue(EGL_BIND_TO_TEXTURE_RGBA, EGL_TRUE); - ok = ctx->chooseConfig(configProps, QEgl::BestPixelFormat); - if (!ok) { - // Try again with RGB texture rendering. - textureFormat = EGL_TEXTURE_RGB; - configProps.removeValue(EGL_BIND_TO_TEXTURE_RGBA); - configProps.setValue(EGL_BIND_TO_TEXTURE_RGB, EGL_TRUE); + textureFormat = EGL_TEXTURE_RGBA; + configProps.setValue(EGL_BIND_TO_TEXTURE_RGBA, EGL_TRUE); ok = ctx->chooseConfig(configProps, QEgl::BestPixelFormat); if (!ok) { - // One last try for a pbuffer with no texture rendering. - configProps.removeValue(EGL_BIND_TO_TEXTURE_RGB); - textureFormat = EGL_NONE; + // Try again with RGB texture rendering. + textureFormat = EGL_TEXTURE_RGB; + configProps.removeValue(EGL_BIND_TO_TEXTURE_RGBA); + configProps.setValue(EGL_BIND_TO_TEXTURE_RGB, EGL_TRUE); + ok = ctx->chooseConfig(configProps, QEgl::BestPixelFormat); + if (!ok) { + // One last try for a pbuffer with no texture rendering. + configProps.removeValue(EGL_BIND_TO_TEXTURE_RGB); + textureFormat = EGL_NONE; + } } - } -#else - textureFormat = EGL_NONE; #endif - if (!ok) { - if (!ctx->chooseConfig(configProps, QEgl::BestPixelFormat)) { - delete ctx; - ctx = 0; - return false; + if (!ok) { + if (!ctx->chooseConfig(configProps, QEgl::BestPixelFormat)) { + delete ctx; + ctx = 0; + return false; + } } } @@ -137,9 +153,6 @@ bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidge } // Create a new context for the configuration. - QEglContext *shareContext = 0; - if (shareWidget && shareWidget->d_func()->glcx) - shareContext = shareWidget->d_func()->glcx->d_func()->eglContext; if (!ctx->createContext(shareContext)) { delete ctx; ctx = 0; diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp index c9a010f..021d52e 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp @@ -138,7 +138,7 @@ void QDirectFBWindowSurface::createWindow(const QRect &rect) DFBWindowDescription description; memset(&description, 0, sizeof(DFBWindowDescription)); - description.caps = DWCAPS_NODECORATION|DWCAPS_DOUBLEBUFFER; + description.caps = DWCAPS_NODECORATION; description.flags = DWDESC_CAPS|DWDESC_SURFACE_CAPS|DWDESC_PIXELFORMAT|DWDESC_HEIGHT|DWDESC_WIDTH|DWDESC_POSX|DWDESC_POSY; #if (Q_DIRECTFB_VERSION >= 0x010200) description.flags |= DWDESC_OPTIONS; diff --git a/src/plugins/phonon/mmf/mmf.pro b/src/plugins/phonon/mmf/mmf.pro index ff27ea1..c070605 100644 --- a/src/plugins/phonon/mmf/mmf.pro +++ b/src/plugins/phonon/mmf/mmf.pro @@ -1,4 +1,99 @@ -TEMPLATE = subdirs -SUBDIRS = mmfphonondebug plugin +# MMF Phonon backend + +QT += phonon +TARGET = phonon_mmf +PHONON_MMF_DIR = $$QT_SOURCE_TREE/src/3rdparty/phonon/mmf + +# Uncomment the following line in order to use the CDrmPlayerUtility client +# API for audio playback, rather than CMdaAudioPlayerUtility. +#CONFIG += phonon_mmf_audio_drm + +phonon_mmf_audio_drm { + LIBS += -lDrmAudioPlayUtility + DEFINES += QT_PHONON_MMF_AUDIO_DRM +} else { + LIBS += -lmediaclientaudio +} + +# This is necessary because both epoc32/include and Phonon contain videoplayer.h. +# By making /epoc32/include the first SYSTEMINCLUDE, we ensure that +# '#include <videoplayer.h>' picks up the Symbian header, as intended. +PREPEND_INCLUDEPATH = /epoc32/include + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + +HEADERS += \ + $$PHONON_MMF_DIR/abstractaudioeffect.h \ + $$PHONON_MMF_DIR/abstractmediaplayer.h \ + $$PHONON_MMF_DIR/abstractplayer.h \ + $$PHONON_MMF_DIR/ancestormovemonitor.h \ + $$PHONON_MMF_DIR/audioequalizer.h \ + $$PHONON_MMF_DIR/audiooutput.h \ + $$PHONON_MMF_DIR/audioplayer.h \ + $$PHONON_MMF_DIR/backend.h \ + $$PHONON_MMF_DIR/bassboost.h \ + $$PHONON_MMF_DIR/defs.h \ + $$PHONON_MMF_DIR/dummyplayer.h \ + $$PHONON_MMF_DIR/effectfactory.h \ + $$PHONON_MMF_DIR/mediaobject.h \ + $$PHONON_MMF_DIR/mmf_medianode.h \ + $$PHONON_MMF_DIR/mmf_videoplayer.h \ + $$PHONON_MMF_DIR/objectdump.h \ + $$PHONON_MMF_DIR/objectdump_global.h \ + $$PHONON_MMF_DIR/objecttree.h \ + $$PHONON_MMF_DIR/utils.h \ + $$PHONON_MMF_DIR/videooutput.h \ + $$PHONON_MMF_DIR/videowidget.h + +SOURCES += \ + $$PHONON_MMF_DIR/abstractaudioeffect.cpp \ + $$PHONON_MMF_DIR/abstractmediaplayer.cpp \ + $$PHONON_MMF_DIR/abstractplayer.cpp \ + $$PHONON_MMF_DIR/ancestormovemonitor.cpp \ + $$PHONON_MMF_DIR/audioequalizer.cpp \ + $$PHONON_MMF_DIR/audiooutput.cpp \ + $$PHONON_MMF_DIR/audioplayer.cpp \ + $$PHONON_MMF_DIR/backend.cpp \ + $$PHONON_MMF_DIR/bassboost.cpp \ + $$PHONON_MMF_DIR/dummyplayer.cpp \ + $$PHONON_MMF_DIR/effectfactory.cpp \ + $$PHONON_MMF_DIR/mediaobject.cpp \ + $$PHONON_MMF_DIR/mmf_medianode.cpp \ + $$PHONON_MMF_DIR/mmf_videoplayer.cpp \ + $$PHONON_MMF_DIR/objectdump.cpp \ + $$PHONON_MMF_DIR/objecttree.cpp \ + $$PHONON_MMF_DIR/utils.cpp \ + $$PHONON_MMF_DIR/videooutput.cpp \ + $$PHONON_MMF_DIR/videowidget.cpp + +HEADERS += $$PHONON_MMF_DIR/objectdump_symbian.h +SOURCES += $$PHONON_MMF_DIR/objectdump_symbian.cpp + +LIBS += -lcone +LIBS += -lws32 + +# This is only needed for debug builds, but is always linked against. +LIBS += -lhal + +TARGET.CAPABILITY = all -tcb + +LIBS += -lmediaclientvideo # For CVideoPlayerUtility +LIBS += -lcone # For CCoeEnv +LIBS += -lws32 # For RWindow +LIBS += -lefsrv # For file server +LIBS += -lapgrfx -lapmime # For recognizer +LIBS += -lmmfcontrollerframework # For CMMFMetaDataEntry + +# These are for effects. +LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerBase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect + +# This is needed for having the .qtplugin file properly created on Symbian. +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/phonon_backend + +target.path = $$[QT_INSTALL_PLUGINS]/phonon_backend +INSTALLS += target + +include(../../qpluginbase.pri) + +TARGET.UID3=0x2001E629 -plugin.depends = mmfphonondebug diff --git a/src/plugins/phonon/mmf/mmfphonondebug/mmfphonondebug.pro b/src/plugins/phonon/mmf/mmfphonondebug/mmfphonondebug.pro deleted file mode 100644 index 2cfec15..0000000 --- a/src/plugins/phonon/mmf/mmfphonondebug/mmfphonondebug.pro +++ /dev/null @@ -1,31 +0,0 @@ -TEMPLATE = lib -TARGET = phonon_mmf_debug -OBJECTDUMP_DIR = $$QT_SOURCE_TREE/src/3rdparty/phonon/mmf/mmfphonondebug - -CONFIG += staticlib - -DEFINES += OBJECTDUMP_LIBRARY - -HEADERS += \ - $$OBJECTDUMP_DIR/objectdump_global.h \ - $$OBJECTDUMP_DIR/objectdump.h \ - $$OBJECTDUMP_DIR/objecttree.h - -SOURCES += \ - $$OBJECTDUMP_DIR/objectdump.cpp \ - $$OBJECTDUMP_DIR/objecttree.cpp - -symbian { - HEADERS += $$OBJECTDUMP_DIR/objectdump_symbian.h - SOURCES += $$OBJECTDUMP_DIR/objectdump_symbian.cpp - - LIBS += -lcone - LIBS += -lws32 - - TARGET.CAPABILITY = all -tcb - -} else { - SOURCES += $$OBJECTDUMP_DIR/objectdump_stub.cpp -} - -TARGET.UID3=0x2001E62A diff --git a/src/plugins/phonon/mmf/plugin/plugin.pro b/src/plugins/phonon/mmf/plugin/plugin.pro deleted file mode 100644 index 8a7de98..0000000 --- a/src/plugins/phonon/mmf/plugin/plugin.pro +++ /dev/null @@ -1,91 +0,0 @@ -# MMF Phonon backend - -QT += phonon -TARGET = phonon_mmf -PHONON_MMF_DIR = $$QT_SOURCE_TREE/src/3rdparty/phonon/mmf - -# Uncomment the following line in order to use the CDrmPlayerUtility client -# API for audio playback, rather than CMdaAudioPlayerUtility. -#CONFIG += phonon_mmf_audio_drm - -phonon_mmf_audio_drm { - LIBS += -lDrmAudioPlayUtility - DEFINES += QT_PHONON_MMF_AUDIO_DRM -} else { - LIBS += -lmediaclientaudio -} - -# This is necessary because both epoc32/include and Phonon contain videoplayer.h. -# By making /epoc32/include the first SYSTEMINCLUDE, we ensure that -# '#include <videoplayer.h>' picks up the Symbian header, as intended. -PREPEND_INCLUDEPATH = /epoc32/include - -INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE - -HEADERS += \ - $$PHONON_MMF_DIR/abstractaudioeffect.h \ - $$PHONON_MMF_DIR/abstractmediaplayer.h \ - $$PHONON_MMF_DIR/abstractplayer.h \ - $$PHONON_MMF_DIR/ancestormovemonitor.h \ - $$PHONON_MMF_DIR/audiooutput.h \ - $$PHONON_MMF_DIR/audioequalizer.h \ - $$PHONON_MMF_DIR/audioplayer.h \ - $$PHONON_MMF_DIR/backend.h \ - $$PHONON_MMF_DIR/bassboost.h \ - $$PHONON_MMF_DIR/defs.h \ - $$PHONON_MMF_DIR/dummyplayer.h \ - $$PHONON_MMF_DIR/effectfactory.h \ - $$PHONON_MMF_DIR/mmf_medianode.h \ - $$PHONON_MMF_DIR/mediaobject.h \ - $$PHONON_MMF_DIR/utils.h \ - $$PHONON_MMF_DIR/videooutput.h \ - $$PHONON_MMF_DIR/videooutputobserver.h \ - $$PHONON_MMF_DIR/mmf_videoplayer.h \ - $$PHONON_MMF_DIR/videowidget.h \ - $$PHONON_MMF_DIR/volumeobserver.h - -SOURCES += \ - $$PHONON_MMF_DIR/abstractaudioeffect.cpp \ - $$PHONON_MMF_DIR/abstractmediaplayer.cpp \ - $$PHONON_MMF_DIR/abstractplayer.cpp \ - $$PHONON_MMF_DIR/ancestormovemonitor.cpp \ - $$PHONON_MMF_DIR/audiooutput.cpp \ - $$PHONON_MMF_DIR/audioequalizer.cpp \ - $$PHONON_MMF_DIR/audioplayer.cpp \ - $$PHONON_MMF_DIR/backend.cpp \ - $$PHONON_MMF_DIR/bassboost.cpp \ - $$PHONON_MMF_DIR/dummyplayer.cpp \ - $$PHONON_MMF_DIR/effectfactory.cpp \ - $$PHONON_MMF_DIR/mmf_medianode.cpp \ - $$PHONON_MMF_DIR/mediaobject.cpp \ - $$PHONON_MMF_DIR/utils.cpp \ - $$PHONON_MMF_DIR/videooutput.cpp \ - $$PHONON_MMF_DIR/mmf_videoplayer.cpp \ - $$PHONON_MMF_DIR/videowidget.cpp - -debug { - INCLUDEPATH += $$PHONON_MMF_DIR/mmfphonondebug - LIBS += -lphonon_mmf_debug.lib - LIBS += -lhal -} - -LIBS += -lmediaclientvideo # For CVideoPlayerUtility -LIBS += -lcone # For CCoeEnv -LIBS += -lws32 # For RWindow -LIBS += -lefsrv # For file server -LIBS += -lapgrfx -lapmime # For recognizer -LIBS += -lmmfcontrollerframework # For CMMFMetaDataEntry - -# These are for effects. -LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerBase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect - -# This is needed for having the .qtplugin file properly created on Symbian. -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/phonon_backend - -target.path = $$[QT_INSTALL_PLUGINS]/phonon_backend -INSTALLS += target - -include(../../../qpluginbase.pri) - -TARGET.UID3=0x2001E629 - diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp index 51f850a..6b3227a 100644 --- a/src/tools/rcc/rcc.cpp +++ b/src/tools/rcc/rcc.cpp @@ -709,46 +709,6 @@ bool RCCResourceLibrary::writeHeader() { if (m_format == C_Code) { writeString("/****************************************************************************\n"); - writeString("**\n"); - writeString("** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).\n"); - writeString("** All rights reserved.\n"); - writeString("** Contact: Nokia Corporation (qt-info@nokia.com)\n"); - writeString("**\n"); - writeString("** This file is part of the tools applications of the Qt Toolkit.\n"); - writeString("**\n"); - writeString("** $QT_BEGIN_LICENSE:LGPL$\n"); - writeString("** No Commercial Usage\n"); - writeString("** This file contains pre-release code and may not be distributed.\n"); - writeString("** You may use this file in accordance with the terms and conditions\n"); - writeString("** contained in the Technology Preview License Agreement accompanying\n"); - writeString("** this package.\n"); - writeString("**\n"); - writeString("** GNU Lesser General Public License Usage\n"); - writeString("** Alternatively, this file may be used under the terms of the GNU Lesser\n"); - writeString("** General Public License version 2.1 as published by the Free Software\n"); - writeString("** Foundation and appearing in the file LICENSE.LGPL included in the\n"); - writeString("** packaging of this file. Please review the following information to\n"); - writeString("** ensure the GNU Lesser General Public License version 2.1 requirements\n"); - writeString("** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.\n"); - writeString("**\n"); - writeString("** In addition, as a special exception, Nokia gives you certain additional\n"); - writeString("** rights. These rights are described in the Nokia Qt LGPL Exception\n"); - writeString("** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.\n"); - writeString("**\n"); - writeString("** If you have questions regarding the use of this file, please contact\n"); - writeString("** Nokia at qt-info@nokia.com.\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("** $QT_END_LICENSE$\n"); - writeString("**\n"); - writeString("****************************************************************************/\n"); - writeString("/****************************************************************************\n"); writeString("** Resource object code\n"); writeString("**\n"); writeString("** Created: "); diff --git a/tests/auto/collections/tst_collections.cpp b/tests/auto/collections/tst_collections.cpp index f97805e..84f466b 100644 --- a/tests/auto/collections/tst_collections.cpp +++ b/tests/auto/collections/tst_collections.cpp @@ -3586,7 +3586,7 @@ void tst_Collections::alignment() #else void tst_Collections::alignment() { - QSKIP("Compiler doesn't support necessary extension keywords", SkipAll) + QSKIP("Compiler doesn't support necessary extension keywords", SkipAll); } #endif diff --git a/tests/auto/qfile/qfile.pro b/tests/auto/qfile/qfile.pro index f70f750..33fd2fd 100644 --- a/tests/auto/qfile/qfile.pro +++ b/tests/auto/qfile/qfile.pro @@ -5,5 +5,5 @@ wince*:{ SUBDIRS = test stdinprocess } -SUBDIRS += largefile +!symbian*:SUBDIRS += largefile diff --git a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index 9269164..36ee22c 100644 --- a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -1286,8 +1286,9 @@ void tst_QGraphicsProxyWidget::paintEvent() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); + QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); - QTest::qWait(70); + QTRY_VERIFY(view.isActiveWindow()); SubQGraphicsProxyWidget proxy; @@ -1298,14 +1299,14 @@ void tst_QGraphicsProxyWidget::paintEvent() w->show(); QTest::qWaitForWindowShown(w); QApplication::processEvents(); - QTest::qWait(100); + QTest::qWait(30); proxy.setWidget(w); scene.addItem(&proxy); //make sure we flush all the paint events - QTest::qWait(70); + QTest::qWait(30); QTRY_VERIFY(proxy.paintCount > 1); - QTest::qWait(110); + QTest::qWait(30); proxy.paintCount = 0; w->update(); @@ -2573,20 +2574,22 @@ void tst_QGraphicsProxyWidget::changingCursor_basic() proxy->setWidget(widget); proxy->show(); scene.addItem(proxy); + QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); QApplication::processEvents(); + QTRY_VERIFY(view.isActiveWindow()); // in QTest::mouseMove(view.viewport(), view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); sendMouseMove(view.viewport(), view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); - QTest::qWait(125); - QCOMPARE(view.viewport()->cursor().shape(), Qt::IBeamCursor); + QTest::qWait(12); + QTRY_COMPARE(view.viewport()->cursor().shape(), Qt::IBeamCursor); // out QTest::mouseMove(view.viewport(), QPoint(1, 1)); sendMouseMove(view.viewport(), QPoint(1, 1)); - QTest::qWait(125); - QCOMPARE(view.viewport()->cursor().shape(), Qt::ArrowCursor); + QTest::qWait(12); + QTRY_COMPARE(view.viewport()->cursor().shape(), Qt::ArrowCursor); #endif } @@ -2746,10 +2749,12 @@ void tst_QGraphicsProxyWidget::windowOpacity() widget->resize(100, 100); QGraphicsProxyWidget *proxy = scene.addWidget(widget); proxy->setCacheMode(QGraphicsItem::ItemCoordinateCache); + + QApplication::setActiveWindow(&view); view.show(); QTest::qWaitForWindowShown(&view); QApplication::sendPostedEvents(); - QTest::qWait(150); + QTRY_VERIFY(view.isActiveWindow()); qRegisterMetaType<QList<QRectF> >("QList<QRectF>"); QSignalSpy signalSpy(&scene, SIGNAL(changed(const QList<QRectF> &))); diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp index 9a561eb..a49c2c1 100644 --- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp @@ -3983,20 +3983,28 @@ void tst_QGraphicsScene::isActive() QVERIFY(!scene1.isActive()); //it is hidden; QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view1->show(); QVERIFY(scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view2->hide(); QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); toplevel1.hide(); - QTest::qWait(12); + QTest::qWait(50); QTRY_VERIFY(!scene1.isActive()); QTRY_VERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); toplevel1.show(); QApplication::setActiveWindow(&toplevel1); @@ -4005,14 +4013,21 @@ void tst_QGraphicsScene::isActive() QTRY_VERIFY(scene1.isActive()); QTRY_VERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view2->show(); QVERIFY(scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); } QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); + { QWidget toplevel2; @@ -4025,6 +4040,8 @@ void tst_QGraphicsScene::isActive() QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); toplevel2.show(); QApplication::setActiveWindow(&toplevel2); @@ -4033,66 +4050,89 @@ void tst_QGraphicsScene::isActive() QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view2->setScene(&scene2); QVERIFY(scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view1->setScene(&scene2); QVERIFY(!scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view1->hide(); QVERIFY(!scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view1->setScene(&scene1); QVERIFY(!scene1.isActive()); QVERIFY(scene2.isActive()); - - view1->show(); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view1->show(); QVERIFY(scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view2->hide(); QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); QGraphicsView topLevelView; topLevelView.show(); QApplication::setActiveWindow(&topLevelView); + topLevelView.setFocus(); QTest::qWaitForWindowShown(&topLevelView); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&topLevelView)); QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); topLevelView.setScene(&scene1); QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view2->show(); QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view1->hide(); QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); QApplication::setActiveWindow(&toplevel2); QTRY_COMPARE(QApplication::activeWindow(), &toplevel2); QVERIFY(!scene1.isActive()); QVERIFY(scene2.isActive()); - - + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); } QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); { QWidget toplevel3; @@ -4104,6 +4144,9 @@ void tst_QGraphicsScene::isActive() QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); + toplevel3.show(); QApplication::setActiveWindow(&toplevel3); @@ -4112,23 +4155,30 @@ void tst_QGraphicsScene::isActive() QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); layout->addWidget(view2); QApplication::processEvents(); QVERIFY(scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view1->setParent(0); QVERIFY(!scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); delete view1; } QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); } - QTEST_MAIN(tst_QGraphicsScene) #include "tst_qgraphicsscene.moc" diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index f07453c..1ff06c2 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -3600,6 +3600,7 @@ void tst_QGraphicsView::inputMethodSensitivity() item->setFlag(QGraphicsItem::ItemIsFocusable); scene.addItem(item); scene.setFocusItem(item); + QCOMPARE(scene.focusItem(), item); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), true); item->setFlag(QGraphicsItem::ItemAcceptsInputMethod, false); @@ -3614,27 +3615,35 @@ void tst_QGraphicsView::inputMethodSensitivity() scene.addItem(item2); scene.setFocusItem(item2); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), false); + QCOMPARE(scene.focusItem(), item2); scene.setFocusItem(item); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), true); + QCOMPARE(scene.focusItem(), item); view.setScene(0); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), false); + QCOMPARE(scene.focusItem(), item); view.setScene(&scene); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), true); + QCOMPARE(scene.focusItem(), item); scene.setFocusItem(item2); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), false); + QCOMPARE(scene.focusItem(), item2); view.setScene(0); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), false); + QCOMPARE(scene.focusItem(), item2); scene.setFocusItem(item); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), false); + QCOMPARE(scene.focusItem(), item); view.setScene(&scene); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), true); + QCOMPARE(scene.focusItem(), item); } class InputContextTester : public QInputContext diff --git a/tests/auto/qlibrary/lib2/lib2.pro b/tests/auto/qlibrary/lib2/lib2.pro index 436d7ba..fc00af8 100644 --- a/tests/auto/qlibrary/lib2/lib2.pro +++ b/tests/auto/qlibrary/lib2/lib2.pro @@ -37,9 +37,9 @@ symbian-abld: { symbian-sbsv2: { TARGET.CAPABILITY=ALL -TCB QMAKE_POST_LINK = \ - $(GNUCP) $${EPOCROOT}epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $${EPOCROOT}epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dl2 && \ - $(GNUCP) $${EPOCROOT}epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $${EPOCROOT}epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/system.trolltech.test.mylib.dll && \ - if test $(PLATFORM) != WINSCW;then $(GNUCP) $${EPOCROOT}epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $${PWD}/../tst/mylib.dl2; fi + $(GNUCP) $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dl2 && \ + $(GNUCP) $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/system.trolltech.test.mylib.dll && \ + if test $(PLATFORM) != WINSCW;then $(GNUCP) $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $${PWD}/../tst/mylib.dl2; fi } #no special install rule for the library used by test diff --git a/tests/auto/qmenu/tst_qmenu.cpp b/tests/auto/qmenu/tst_qmenu.cpp index f12fa92..f0f69a4 100644 --- a/tests/auto/qmenu/tst_qmenu.cpp +++ b/tests/auto/qmenu/tst_qmenu.cpp @@ -101,11 +101,13 @@ private slots: void menuSizeHint(); void task258920_mouseBorder(); void setFixedWidth(); + void deleteActionInTriggered(); protected slots: void onActivated(QAction*); void onHighlighted(QAction*); void onStatusMessageChanged(const QString &); void onStatusTipTimer(); + void deleteAction(QAction *a) { delete a; } private: void createActions(); QMenu *menus[2], *lastMenu; @@ -858,6 +860,17 @@ void tst_QMenu::setFixedWidth() QCOMPARE(menu.sizeHint().width(), menu.minimumWidth()); } +void tst_QMenu::deleteActionInTriggered() +{ + // should not crash + QMenu m; + QObject::connect(&m, SIGNAL(triggered(QAction*)), this, SLOT(deleteAction(QAction*))); + QWeakPointer<QAction> a = m.addAction("action"); + a.data()->trigger(); + QVERIFY(!a); +} + + QTEST_MAIN(tst_QMenu) diff --git a/tests/auto/qtextdocument/tst_qtextdocument.cpp b/tests/auto/qtextdocument/tst_qtextdocument.cpp index 1d54409..11e32b0 100644 --- a/tests/auto/qtextdocument/tst_qtextdocument.cpp +++ b/tests/auto/qtextdocument/tst_qtextdocument.cpp @@ -2615,6 +2615,17 @@ void tst_QTextDocument::testUndoCommandAdded() cf.setFontItalic(true); cursor.mergeCharFormat(cf); QCOMPARE(spy.count(), 1); + + spy.clear(); + doc->undo(); + QCOMPARE(spy.count(), 0); + doc->undo(); + QCOMPARE(spy.count(), 0); + spy.clear(); + doc->redo(); + QCOMPARE(spy.count(), 0); + doc->redo(); + QCOMPARE(spy.count(), 0); } void tst_QTextDocument::testUndoBlocks() diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp index 58f059b..4fc6dd3 100644 --- a/tests/auto/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/qtreeview/tst_qtreeview.cpp @@ -3653,7 +3653,9 @@ void tst_QTreeView::doubleClickedWithSpans() view.setModel(&model); view.setFirstColumnSpanned(0, QModelIndex(), true); view.show(); + QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); + QTRY_VERIFY(view.isActiveWindow()); QPoint p(10, 10); QCOMPARE(view.indexAt(p), model.index(0, 0)); diff --git a/translations/assistant_de.ts b/translations/assistant_de.ts index 027c566..b020003 100644 --- a/translations/assistant_de.ts +++ b/translations/assistant_de.ts @@ -79,7 +79,7 @@ <context> <name>BookmarkManager</name> <message> - <location line="+434"/> + <location line="+435"/> <source>Bookmarks</source> <translation>Lesezeichen</translation> </message> @@ -103,7 +103,7 @@ <context> <name>BookmarkWidget</name> <message> - <location line="-416"/> + <location line="-417"/> <source>Filter:</source> <translation>Filter:</translation> </message> @@ -130,7 +130,7 @@ <message> <location line="+1"/> <source>Show Bookmark in New Tab</source> - <translation>Lesezeichen in neuem Tab öffnen</translation> + <translation>Lesezeichen in neuem Reiter öffnen</translation> </message> <message> <location line="+3"/> @@ -151,7 +151,7 @@ <context> <name>CentralWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+238"/> + <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+239"/> <source>Add new page</source> <translation>Neue Seite hinzufügen</translation> </message> @@ -166,7 +166,7 @@ <translation>Drucken</translation> </message> <message> - <location line="+148"/> + <location line="+130"/> <location line="+2"/> <source>unknown</source> <translation>unbekannt</translation> @@ -192,7 +192,7 @@ <translation>Lesezeichen für diese Seite hinzufügen ...</translation> </message> <message> - <location line="+255"/> + <location line="+235"/> <source>Search</source> <translation>Suchen</translation> </message> @@ -207,7 +207,7 @@ <message> <location line="+1"/> <source>Open Link in New Tab</source> - <translation>Link in neuem Tab öffnen</translation> + <translation>Link in neuem Reiter öffnen</translation> </message> </context> <context> @@ -226,7 +226,7 @@ <context> <name>FindWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-955"/> + <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-918"/> <source>Previous</source> <translation>Zurück</translation> </message> @@ -282,7 +282,7 @@ <context> <name>HelpViewer</name> <message> - <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+492"/> + <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+489"/> <source>Help</source> <translation>Hilfe</translation> </message> @@ -304,12 +304,12 @@ <message> <location line="+3"/> <source>Open Link in New Tab Ctrl+LMB</source> - <translation>Link in neuem Tab öffnen </translation> + <translation>Link in neuem Reiter öffnen </translation> </message> <message> <location line="-275"/> <source>Open Link in New Tab</source> - <translation>Link in neuem Tab öffnen</translation> + <translation>Link in neuem Reiter öffnen</translation> </message> <message> <location line="+209"/> @@ -334,7 +334,7 @@ <message> <location line="+1"/> <source>Open Link in New Tab</source> - <translation>Link in neuem Tab öffnen</translation> + <translation>Link in neuem Reiter öffnen</translation> </message> </context> <context> @@ -392,7 +392,7 @@ <message> <location line="+37"/> <source>Download failed: Downloaded file is corrupted.</source> - <translation>Herunterladen fehlgeschlagen: Die Datei ist warscheinlich beschädigt.</translation> + <translation>Herunterladen fehlgeschlagen: Die Datei ist wahrscheinlich beschädigt.</translation> </message> <message> <location line="+2"/> @@ -441,19 +441,19 @@ <name>MainWindow</name> <message> <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+110"/> - <location line="+391"/> + <location line="+383"/> <source>Index</source> <translation>Index</translation> </message> <message> - <location line="-385"/> - <location line="+383"/> + <location line="-377"/> + <location line="+375"/> <source>Contents</source> <translation>Inhalt</translation> </message> <message> - <location line="-378"/> - <location line="+382"/> + <location line="-370"/> + <location line="+374"/> <source>Bookmarks</source> <translation>Lesezeichen</translation> </message> @@ -463,14 +463,14 @@ <translation>Suchen</translation> </message> <message> - <location line="-372"/> - <location line="+215"/> - <location line="+512"/> + <location line="-364"/> + <location line="+207"/> + <location line="+514"/> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> - <location line="-544"/> + <location line="-546"/> <location line="+5"/> <source>Unfiltered</source> <translation>Ohne Filter</translation> @@ -493,12 +493,12 @@ <message> <location line="+7"/> <source>New &Tab</source> - <translation>Neuer &Tab</translation> + <translation>Neuer &Reiter</translation> </message> <message> <location line="+3"/> <source>&Close Tab</source> - <translation>Tab &schließen</translation> + <translation>Reiter &schließen</translation> </message> <message> <location line="+4"/> @@ -516,7 +516,12 @@ <translation>&Textsuche ...</translation> </message> <message> - <location line="+6"/> + <location line="+2"/> + <source>&Find</source> + <translation>&Suchen</translation> + </message> + <message> + <location line="+4"/> <source>Find &Next</source> <translation>&Weitersuchen</translation> </message> @@ -583,10 +588,15 @@ <message> <location line="+6"/> <source>Sync with Table of Contents</source> - <translation>Seite mit Inhalt-Tab abgleichen</translation> + <translation>Seite mit Inhaltsangabe abgleichen</translation> </message> <message> - <location line="+7"/> + <location line="+2"/> + <source>Sync</source> + <translation>Synchronisieren</translation> + </message> + <message> + <location line="+5"/> <source>Next Page</source> <translation>Nächste Seite</translation> </message> @@ -636,7 +646,7 @@ <translation>Filter:</translation> </message> <message> - <location line="+23"/> + <location line="+25"/> <source>Address Toolbar</source> <translation>Adressleiste</translation> </message> @@ -661,7 +671,7 @@ <translation>Suchindex wird aufgebaut</translation> </message> <message> - <location line="-638"/> + <location line="-640"/> <source>Looking for Qt Documentation...</source> <translation>Suche nach Qt-Dokumentation ...</translation> </message> @@ -963,7 +973,7 @@ <translation>Qt Assistant</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/main.cpp" line="+217"/> + <location filename="../tools/assistant/tools/assistant/main.cpp" line="+225"/> <source>Could not register documentation file %1 @@ -1023,7 +1033,7 @@ Grund: <context> <name>SearchWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+195"/> + <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+196"/> <source>&Copy</source> <translation>&Kopieren</translation> </message> @@ -1035,7 +1045,7 @@ Grund: <message> <location line="+4"/> <source>Open Link in New Tab</source> - <translation>Link in neuem Tab öffnen</translation> + <translation>Link in neuem Reiter öffnen</translation> </message> <message> <location line="+8"/> diff --git a/translations/designer_de.ts b/translations/designer_de.ts index 638a8b4..76ccbfb 100644 --- a/translations/designer_de.ts +++ b/translations/designer_de.ts @@ -702,7 +702,7 @@ <context> <name>ConnectionDelegate</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+643"/> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+644"/> <source><object></source> <translation><Objekt></translation> </message> @@ -4446,8 +4446,8 @@ Möchten Sie sie überschreiben?</translation> <location line="+6"/> <source>Customized (%n roles)</source> <translation> - <numerusform>Angepaßt (eine Rolle)</numerusform> - <numerusform>Angepaßt (%n Rollen)</numerusform> + <numerusform>Angepasst (eine Rolle)</numerusform> + <numerusform>Angepasst (%n Rollen)</numerusform> </translation> </message> <message> @@ -4689,7 +4689,7 @@ Möchten Sie sie überschreiben?</translation> <message> <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="+185"/> <source><Filter></source> - <translation><FIlter></translation> + <translation><Filter></translation> </message> </context> <context> @@ -5550,18 +5550,15 @@ Please select another name.</source> <context> <name>qdesigner_internal::ObjectInspector</name> <message> - <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="+754"/> - <source>&Find in Text...</source> - <translation>&Suchen...</translation> - </message> -</context> -<context> - <name>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate</name> - <message> - <location line="-438"/> + <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="+316"/> <source>Change Current Page</source> <translation>Seite wechseln</translation> </message> + <message> + <location line="+438"/> + <source>&Find in Text...</source> + <translation>&Suchen...</translation> + </message> </context> <context> <name>qdesigner_internal::OrderDialog</name> @@ -5747,7 +5744,7 @@ Please select another name.</source> <message> <location line="+55"/> <source>New custom widget plugins have been found.</source> - <translation>Es wurden neuinstallierten Plugins mit benutzerdefinierten Widgets gefunden.</translation> + <translation>Es wurden neu installierte Plugins mit benutzerdefinierten Widgets gefunden.</translation> </message> </context> <context> @@ -5775,9 +5772,6 @@ Please select another name.</source> <source>Browse...</source> <translation>Durchsuchen...</translation> </message> -</context> -<context> - <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name> <message> <location line="+118"/> <source>Load Custom Device Skin</source> diff --git a/translations/linguist_de.ts b/translations/linguist_de.ts index 25f35ef..9362811 100644 --- a/translations/linguist_de.ts +++ b/translations/linguist_de.ts @@ -4,7 +4,7 @@ <context> <name>AboutDialog</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1357"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1358"/> <source>Qt Linguist</source> <translation>Qt Linguist</translation> </message> @@ -109,11 +109,17 @@ </message> <message> <location line="+4"/> + <location line="+8"/> <source><p>[more duplicates omitted]</source> <translation><p>[weitere mehrfach vorhandene Nachrichten weggelassen]</translation> </message> <message> - <location line="+3"/> + <location line="-5"/> + <source><p>* ID: %1</source> + <translation><p>* ID: %1</translation> + </message> + <message> + <location line="+8"/> <source><p>* Context: %1<br>* Source: %2</source> <translation><p>* Kontext: %1<br>* Quelle: %2</translation> </message> @@ -123,7 +129,7 @@ <translation><br>* Kommentar: %3</translation> </message> <message> - <location line="+70"/> + <location line="+71"/> <source>Linguist does not know the plural rules for '%1'. Will assume a single universal form.</source> <translation>Die Regeln zur Pluralbildung der Sprache '%1' sind in Linguist nicht definiert. @@ -311,7 +317,7 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <context> <name>LRelease</name> <message numerus="yes"> - <location filename="../tools/linguist/shared/qm.cpp" line="+747"/> + <location filename="../tools/linguist/shared/qm.cpp" line="+761"/> <source>Dropped %n message(s) which had no ID.</source> <translation> <numerusform>Es wurde ein Eintrag ohne Bezeichner gelöscht.</numerusform> @@ -908,7 +914,7 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <translation>Freigeben unter ...</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2004"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2005"/> <source></source> <comment>This is the application's main window.</comment> <translation></translation> @@ -926,17 +932,17 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> </message> <message> <location line="-2"/> - <location line="+62"/> + <location line="+63"/> <source>Context</source> <translation>Kontext</translation> </message> <message> - <location line="-61"/> + <location line="-62"/> <source>Items</source> <translation>Einträge</translation> </message> <message> - <location line="+78"/> + <location line="+79"/> <source>This panel lists the source contexts.</source> <translation>Dieser Bereich zeigt die Kontexte an.</translation> </message> @@ -1391,7 +1397,7 @@ Alle Dateien (*)</translation> <message> <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Open/Refresh Form &Preview</source> - <translation>Die &Vorschau öffnen/&aktualisieren</translation> + <translation>&Vorschau öffnen/aktualisieren</translation> </message> <message> <location/> @@ -1801,8 +1807,8 @@ Zeile: %2</translation> <translation>Alle Dateien (*)</translation> </message> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1118"/> - <location line="+18"/> + <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1127"/> + <location line="+27"/> <location line="+67"/> <location line="+39"/> <location line="+17"/> diff --git a/translations/qt_de.ts b/translations/qt_de.ts index 0d329e5..81968fb 100644 --- a/translations/qt_de.ts +++ b/translations/qt_de.ts @@ -4,7 +4,7 @@ <context> <name>CloseButton</name> <message> - <location filename="../src/gui/widgets/qtabbar.cpp" line="+2245"/> + <location filename="../src/gui/widgets/qtabbar.cpp" line="+2262"/> <source>Close Tab</source> <translation>Schließen</translation> </message> @@ -12,7 +12,7 @@ <context> <name>FakeReply</name> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2191"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2198"/> <source>Fake error !</source> <translation>Fake error !</translation> </message> @@ -58,7 +58,7 @@ <context> <name>Phonon::AudioOutput</name> <message> - <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+377"/> + <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+385"/> <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> <translation><html>Das Audiogerät <b>%1</b> funktioniert nicht.<br/>Es wird stattdessen <b>%2</b> verwendet.</html></translation> </message> @@ -76,7 +76,7 @@ <context> <name>Phonon::Gstreamer::Backend</name> <message> - <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+171"/> + <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+182"/> <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.</source> <translation>Achtung: Das Paket gstreamer0.10-plugins-good ist nicht installiert. @@ -96,10 +96,11 @@ Die Audio- und Video-Unterstützung steht nicht zur Verfügung.</translation> <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/> <source>Cannot start playback. -Check your Gstreamer installation and make sure you +Check your GStreamer installation and make sure you have libgstreamer-plugins-base installed.</source> - <translation>Die Wiedergabe kann nicht gestartet werden. -Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Paket libgstreamer-plugins-base installiert ist.</translation> + <translation>Das Abspielen konnte nicht gestartet werden. + +Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass das Paket libgstreamer-plugins-base installiert ist.</translation> </message> <message> <location line="+113"/> @@ -107,10 +108,10 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa <translation>Es sind nicht alle erforderlichen Codecs installiert. Um diesen Inhalt abzuspielen, muss der folgende Codec installiert werden: %0</translation> </message> <message> - <location line="+681"/> + <location line="+702"/> <location line="+8"/> <location line="+15"/> - <location line="+22"/> + <location line="+26"/> <location line="+6"/> <location line="+19"/> <location line="+339"/> @@ -119,12 +120,12 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa <translation>Die Medienquelle konnte nicht geöffnet werden.</translation> </message> <message> - <location line="-420"/> + <location line="-424"/> <source>Invalid source type.</source> <translation>Ungültiger Typ der Medienquelle.</translation> </message> <message> - <location line="+394"/> + <location line="+398"/> <source>Could not locate media source.</source> <translation>Die Medienquelle konnte nicht gefunden werden.</translation> </message> @@ -142,7 +143,7 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa <context> <name>Phonon::MMF</name> <message> - <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+110"/> + <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+108"/> <source>Audio Output</source> <translation>Audio-Ausgabe</translation> </message> @@ -164,13 +165,13 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa <name>Phonon::MMF::EffectFactory</name> <message> <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+65"/> - <source>audio equalizer</source> + <source>Audio Equalizer</source> <translation>Audio-Equalizer</translation> </message> <message> <location line="+2"/> - <source>Bass boost</source> - <translation>Hervorhebung der Bässe</translation> + <source>Bass Boost</source> + <translation>Bass-Boost</translation> </message> <message> <location line="+2"/> @@ -200,6 +201,14 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa </message> </context> <context> + <name>Phonon::MMF::MediaObject</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+291"/> + <source>Media type could not be determined</source> + <translation>Der Typ des Mediums konnte nicht bestimmt werden</translation> + </message> +</context> +<context> <name>Phonon::VolumeSlider</name> <message> <location filename="../src/3rdparty/phonon/phonon/volumeslider.cpp" line="+42"/> @@ -903,8 +912,8 @@ nach <context> <name>QAbstractSocket</name> <message> - <location filename="../src/network/socket/qabstractsocket.cpp" line="+890"/> - <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+633"/> + <location filename="../src/network/socket/qabstractsocket.cpp" line="+899"/> + <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+643"/> <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+661"/> <location line="+26"/> <source>Host not found</source> @@ -923,8 +932,8 @@ nach <translation>Das Zeitlimit für die Verbindung wurde überschritten</translation> </message> <message> - <location line="-548"/> - <location line="+789"/> + <location line="-555"/> + <location line="+805"/> <location line="+208"/> <source>Operation on socket is not supported</source> <translation>Diese Socket-Operation wird nicht unterstützt</translation> @@ -964,9 +973,17 @@ nach </message> </context> <context> + <name>QAccessibleButton</name> + <message> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+250"/> + <source>Press</source> + <translation>Drücken</translation> + </message> +</context> +<context> <name>QApplication</name> <message> - <location filename="../src/gui/kernel/qapplication.cpp" line="+2290"/> + <location filename="../src/gui/kernel/qapplication.cpp" line="+2279"/> <source>QT_LAYOUT_DIRECTION</source> <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> <translation>LTR</translation> @@ -1018,7 +1035,7 @@ nach <context> <name>QCheckBox</name> <message> - <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+114"/> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-136"/> <source>Uncheck</source> <translation>Löschen</translation> </message> @@ -1276,7 +1293,7 @@ nach <message> <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1872"/> <location line="+464"/> - <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+606"/> + <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+622"/> <source>OK</source> <translation>OK</translation> </message> @@ -1580,12 +1597,12 @@ nach <translation>S&peichern</translation> </message> <message> - <location line="+1807"/> + <location line="+1801"/> <source>Recent Places</source> <translation>Zuletzt besucht</translation> </message> <message> - <location line="-2517"/> + <location line="-2511"/> <source>&Rename</source> <translation>&Umbenennen</translation> </message> @@ -1793,7 +1810,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> </message> <message> <location line="+1"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+1"/> <source>%1 bytes</source> <translation>%1 Byte</translation> </message> @@ -1844,60 +1860,65 @@ Möchten Sie die Datei trotzdem löschen?</translation> <source>Computer</source> <translation>Computer</translation> </message> + <message> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+1"/> + <source>%1 byte(s)</source> + <translation>%1 byte</translation> + </message> </context> <context> <name>QFontDatabase</name> <message> <location filename="../src/gui/text/qfontdatabase.cpp" line="+102"/> - <location line="+1335"/> + <location line="+1342"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location line="-1332"/> + <location line="-1339"/> <location line="+12"/> - <location line="+1308"/> + <location line="+1315"/> <source>Bold</source> <translation>Fett</translation> </message> <message> - <location line="-1317"/> - <location line="+1319"/> + <location line="-1324"/> + <location line="+1326"/> <source>Demi Bold</source> <translation>Halbfett</translation> </message> <message> - <location line="-1316"/> + <location line="-1323"/> <location line="+18"/> - <location line="+1294"/> + <location line="+1301"/> <source>Black</source> <translation>Schwarz</translation> </message> <message> - <location line="-1304"/> + <location line="-1311"/> <source>Demi</source> <translation>Semi</translation> </message> <message> <location line="+6"/> - <location line="+1304"/> + <location line="+1311"/> <source>Light</source> <translation>Leicht</translation> </message> <message> - <location line="-1158"/> - <location line="+1161"/> + <location line="-1165"/> + <location line="+1168"/> <source>Italic</source> <translation>Kursiv</translation> </message> <message> - <location line="-1158"/> - <location line="+1160"/> + <location line="-1165"/> + <location line="+1167"/> <source>Oblique</source> <translation>Schräggestellt</translation> </message> <message> - <location line="+703"/> + <location line="+704"/> <source>Any</source> <translation>Alle</translation> </message> @@ -2061,6 +2082,11 @@ Möchten Sie die Datei trotzdem löschen?</translation> <source>Runic</source> <translation>Runen</translation> </message> + <message> + <location line="+3"/> + <source>N'Ko</source> + <translation>N'Ko</translation> + </message> </context> <context> <name>QFontDialog</name> @@ -2201,7 +2227,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Changing directory failed: %1</source> - <translation>Ändern des Verzeichnises schlug fehl: + <translation>Ändern des Verzeichnisses schlug fehl: %1</translation> </message> <message> @@ -2233,7 +2259,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Creating directory failed: %1</source> - <translation>Erstellen des Verzeichnises schlug fehl: + <translation>Erstellen des Verzeichnisses schlug fehl: %1</translation> </message> <message> @@ -2241,7 +2267,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Removing directory failed: %1</source> - <translation>Löschen des Verzeichnises schlug fehl: + <translation>Löschen des Verzeichnisses schlug fehl: %1</translation> </message> <message> @@ -2260,7 +2286,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QHostInfo</name> <message> - <location filename="../src/network/kernel/qhostinfo_p.h" line="+183"/> + <location filename="../src/network/kernel/qhostinfo_p.h" line="+185"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> @@ -2304,13 +2330,13 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QHttp</name> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+569"/> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+578"/> <location filename="../src/qt3support/network/q3http.cpp" line="+1835"/> <source>Connection refused</source> <translation>Verbindung verweigert</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="+2634"/> + <location filename="../src/network/access/qhttp.cpp" line="+2639"/> <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-4"/> <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> <source>Host %1 not found</source> @@ -2388,7 +2414,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Der Server hat die Verbindung unerwartet geschlossen</translation> </message> <message> - <location line="+151"/> + <location line="+172"/> <location filename="../src/qt3support/network/q3http.cpp" line="+113"/> <source>Invalid HTTP response header</source> <translation>Der Kopfteil der HTTP-Antwort ist ungültig</translation> @@ -2447,7 +2473,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Es wurde ein unbekanntes Protokoll angegeben</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="-138"/> + <location filename="../src/network/access/qhttp.cpp" line="-159"/> <source>Connection refused (or timed out)</source> <translation>Verbindung verweigert oder Zeitlimit überschritten</translation> </message> @@ -2621,7 +2647,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QIODevice</name> <message> - <location filename="../src/corelib/global/qglobal.cpp" line="+2058"/> + <location filename="../src/corelib/global/qglobal.cpp" line="+2072"/> <source>Permission denied</source> <translation>Zugriff verweigert</translation> </message> @@ -2705,7 +2731,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Operation unmap fehlgeschlagen für '%1': %2</translation> </message> <message> - <location line="+341"/> + <location line="+344"/> <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> <translation>Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (%2.%3.%4) [%5]</translation> </message> @@ -2739,13 +2765,13 @@ Möchten Sie die Datei trotzdem löschen?</translation> <location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+236"/> <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+87"/> <source>Cannot load library %1: %2</source> - <translation>Die Library %1 kann nicht geladen werden: %2</translation> + <translation>Die Bibliothek %1 kann nicht geladen werden: %2</translation> </message> <message> <location line="+17"/> <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+22"/> <source>Cannot unload library %1: %2</source> - <translation>Die Library %1 kann nicht entladen werden: %2</translation> + <translation>Die Bibliothek %1 kann nicht entladen werden: %2</translation> </message> <message> <location line="+34"/> @@ -2757,7 +2783,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QLineEdit</name> <message> - <location filename="../src/gui/widgets/qlineedit.cpp" line="+2012"/> + <location filename="../src/gui/widgets/qlineedit.cpp" line="+2035"/> <source>Select All</source> <translation>Alles auswählen</translation> </message> @@ -2796,7 +2822,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <name>QLocalServer</name> <message> <location filename="../src/network/socket/qlocalserver.cpp" line="+224"/> - <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+256"/> + <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+246"/> <source>%1: Name error</source> <translation>%1: Fehlerhafter Name</translation> </message> @@ -3101,7 +3127,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMenuBar</name> <message> - <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+404"/> + <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+410"/> <source>Actions</source> <translation>Optionen</translation> </message> @@ -3183,7 +3209,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <message> <location line="+3"/> <source>Out of resources</source> - <translation>Keine Resourcen verfügbar</translation> + <translation>Keine Ressourcen verfügbar</translation> </message> <message> <location line="+3"/> @@ -3320,27 +3346,30 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkAccessFileBackend</name> <message> + <location filename="../src/network/access/qfilenetworkreply.cpp" line="+83"/> <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+100"/> <source>Request for opening non-local file %1</source> <translation>Anforderung zum Öffnen einer Datei über Netzwerk %1</translation> </message> <message> - <location line="+45"/> + <location line="+31"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+45"/> <source>Error opening %1: %2</source> <translation>%1 konnte nicht geöffnet werden: %2</translation> </message> <message> - <location line="+38"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+38"/> <source>Write error writing to %1: %2</source> <translation>Fehler beim Schreiben zur Datei %1: %2</translation> </message> <message> - <location line="+48"/> + <location filename="../src/network/access/qfilenetworkreply.cpp" line="-11"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+48"/> <source>Cannot open %1: Path is a directory</source> <translation>%1 kann nicht geöffnet werden: Der Pfad spezifiziert ein Verzeichnis</translation> </message> <message> - <location line="+21"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+21"/> <source>Read error reading from %1: %2</source> <translation>Beim Lesen von der Datei %1 trat ein Fehler auf: %2</translation> </message> @@ -3406,7 +3435,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QOCIDriver</name> <message> - <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2076"/> + <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2083"/> <source>Unable to logon</source> <translation>Logon-Vorgang fehlgeschlagen</translation> </message> @@ -3435,8 +3464,8 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QOCIResult</name> <message> - <location line="-972"/> - <location line="+161"/> + <location line="-979"/> + <location line="+168"/> <location line="+15"/> <source>Unable to bind column for batch execute</source> <translation>Die Spalte konnte nicht für den Stapelverarbeitungs-Befehl gebunden werden</translation> @@ -3599,7 +3628,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QPPDOptionsModel</name> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1198"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1197"/> <source>Name</source> <translation>Name</translation> </message> @@ -3785,7 +3814,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Alias: %1</translation> </message> <message> - <location line="+223"/> + <location line="+225"/> <location line="+199"/> <source>unknown</source> <translation>unbekannt</translation> @@ -3968,12 +3997,12 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Drucken</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-357"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-359"/> <source>Print To File ...</source> <translation>In Datei drucken ...</translation> </message> <message> - <location line="+80"/> + <location line="+82"/> <source>File %1 is not writable. Please choose a different file name.</source> <translation>Die Datei %1 ist schreibgeschützt. @@ -4164,7 +4193,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Benutzerdefiniert</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-524"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-523"/> <location line="+68"/> <source>&Options >></source> <translation>&Einstellungen >></translation> @@ -4471,7 +4500,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QProcess</name> <message> - <location filename="../src/corelib/io/qprocess_unix.cpp" line="+402"/> + <location filename="../src/corelib/io/qprocess_unix.cpp" line="+406"/> <location filename="../src/corelib/io/qprocess_win.cpp" line="+137"/> <source>Could not open input redirection for reading</source> <translation>Die Eingabeumleitung konnte nicht zum Lesen geöffnet werden</translation> @@ -4488,7 +4517,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Ressourcenproblem ("fork failure"): %1</translation> </message> <message> - <location line="+252"/> + <location line="+258"/> <location line="+52"/> <location line="+74"/> <location line="+66"/> @@ -4652,7 +4681,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSQLiteDriver</name> <message> - <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+544"/> + <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+540"/> <source>Error opening database</source> <translation>Die Datenbankverbindung konnte nicht geöffnet werden</translation> </message> @@ -4680,8 +4709,8 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSQLiteResult</name> <message> - <location line="-408"/> - <location line="+66"/> + <location line="-404"/> + <location line="+62"/> <location line="+8"/> <source>Unable to fetch row</source> <translation>Der Datensatz konnte nicht abgeholt werden</translation> @@ -4707,7 +4736,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Die Anzahl der Parameter ist falsch</translation> </message> <message> - <location line="-204"/> + <location line="-200"/> <source>No query</source> <translation>Kein Abfrage</translation> </message> @@ -5155,7 +5184,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </message> <message> <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+83"/> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+80"/> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+79"/> <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/> <source>%1: permission denied</source> <translation>%1: Zugriff verweigert</translation> @@ -5375,7 +5404,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Hilfe</translation> </message> <message> - <location line="+3"/> + <location line="+5"/> <source>Back</source> <translation>Zurück</translation> </message> @@ -5570,6 +5599,451 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>(F) starten</translation> </message> <message> + <location line="+1"/> + <source>Monitor Brightness Up</source> + <translation>Monitor heller</translation> + </message> + <message> + <location line="+1"/> + <source>Monitor Brightness Down</source> + <translation>Monitor dunkler</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Light On/Off</source> + <translation>Tastaturbeleuchtung Ein/Aus</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Brightness Up</source> + <translation>Tastaturbeleuchtung heller</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Brightness Down</source> + <translation>Tastaturbeleuchtung dunkler</translation> + </message> + <message> + <location line="+1"/> + <source>Power Off</source> + <translation>Ausschalten</translation> + </message> + <message> + <location line="+1"/> + <source>Wake Up</source> + <translation>Aufwecken</translation> + </message> + <message> + <location line="+1"/> + <source>Eject</source> + <translation>Auswerfen</translation> + </message> + <message> + <location line="+1"/> + <source>Screensaver</source> + <translation>Bildschirmschoner</translation> + </message> + <message> + <location line="+1"/> + <source>WWW</source> + <translation>Internet</translation> + </message> + <message> + <location line="+1"/> + <source>Sleep</source> + <translation>Schlafmodus</translation> + </message> + <message> + <location line="+1"/> + <source>LightBulb</source> + <translation>Beleuchtung</translation> + </message> + <message> + <location line="+1"/> + <source>Shop</source> + <translation>Shop</translation> + </message> + <message> + <location line="+1"/> + <source>History</source> + <translation>Verlauf</translation> + </message> + <message> + <location line="+1"/> + <source>Add Favorite</source> + <translation>Lesezeichen hinzufügen</translation> + </message> + <message> + <location line="+1"/> + <source>Hot Links</source> + <translation>Empfohlene Verweise</translation> + </message> + <message> + <location line="+1"/> + <source>Adjust Brightness</source> + <translation>Helligkeit einstellen</translation> + </message> + <message> + <location line="+1"/> + <source>Finance</source> + <translation>Finanzen</translation> + </message> + <message> + <location line="+1"/> + <source>Community</source> + <translation>Community</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Rewind</source> + <translation>Audio rückspulen</translation> + </message> + <message> + <location line="+1"/> + <source>Back Forward</source> + <translation>Hinterstes nach vorn</translation> + </message> + <message> + <location line="+1"/> + <source>Application Left</source> + <translation>Anwendung links</translation> + </message> + <message> + <location line="+1"/> + <source>Application Right</source> + <translation>Anwendung rechts</translation> + </message> + <message> + <location line="+1"/> + <source>Book</source> + <translation>Buch</translation> + </message> + <message> + <location line="+1"/> + <source>CD</source> + <translation>CD</translation> + </message> + <message> + <location line="+1"/> + <source>Calculator</source> + <translation>Rechner</translation> + </message> + <message> + <location line="+1"/> + <source>Clear</source> + <translation>Löschen</translation> + </message> + <message> + <location line="+1"/> + <source>Clear Grab</source> + <translation>Zugriff löschen</translation> + </message> + <message> + <location line="+1"/> + <source>Close</source> + <translation>Schließen</translation> + </message> + <message> + <location line="+1"/> + <source>Copy</source> + <translation>Kopieren</translation> + </message> + <message> + <location line="+1"/> + <source>Cut</source> + <translation>Ausschneiden</translation> + </message> + <message> + <location line="+1"/> + <source>Display</source> + <translation>Anzeigen</translation> + </message> + <message> + <location line="+1"/> + <source>DOS</source> + <translation>DOS</translation> + </message> + <message> + <location line="+1"/> + <source>Documents</source> + <translation>Dokumente</translation> + </message> + <message> + <location line="+1"/> + <source>Spreadsheet</source> + <translation>Spreadsheet</translation> + </message> + <message> + <location line="+1"/> + <source>Browser</source> + <translation>Browser</translation> + </message> + <message> + <location line="+1"/> + <source>Game</source> + <translation>Spiel</translation> + </message> + <message> + <location line="+1"/> + <source>Go</source> + <translation>Los</translation> + </message> + <message> + <location line="+1"/> + <source>iTouch</source> + <translation>iTouch</translation> + </message> + <message> + <location line="+1"/> + <source>Logoff</source> + <translation>Logoff</translation> + </message> + <message> + <location line="+1"/> + <source>Market</source> + <translation>Markt</translation> + </message> + <message> + <location line="+1"/> + <source>Meeting</source> + <translation>Versammlung</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Menu</source> + <translation>Tastaturmenü</translation> + </message> + <message> + <location line="+1"/> + <source>Menu PB</source> + <translation>Menü PB</translation> + </message> + <message> + <location line="+1"/> + <source>My Sites</source> + <translation>Meine Orte</translation> + </message> + <message> + <location line="+1"/> + <source>News</source> + <translation>Nachrichten</translation> + </message> + <message> + <location line="+1"/> + <source>Home Office</source> + <translation>Home Office</translation> + </message> + <message> + <location line="+1"/> + <source>Option</source> + <translation>Option</translation> + </message> + <message> + <location line="+1"/> + <source>Paste</source> + <translation>Einfügen</translation> + </message> + <message> + <location line="+1"/> + <source>Phone</source> + <translation>Telefon</translation> + </message> + <message> + <location line="+1"/> + <source>Reply</source> + <translation>Antworten</translation> + </message> + <message> + <location line="+1"/> + <source>Reload</source> + <translation>Neu laden</translation> + </message> + <message> + <location line="+1"/> + <source>Rotate Windows</source> + <translation>Fenster rotieren</translation> + </message> + <message> + <location line="+1"/> + <source>Rotation PB</source> + <translation>Rotation PB</translation> + </message> + <message> + <location line="+1"/> + <source>Rotation KB</source> + <translation>Rotation KB</translation> + </message> + <message> + <location line="+1"/> + <source>Save</source> + <translation>Speichern</translation> + </message> + <message> + <location line="+1"/> + <source>Send</source> + <translation>Senden</translation> + </message> + <message> + <location line="+1"/> + <source>Spellchecker</source> + <translation>Rechtschreibprüfung</translation> + </message> + <message> + <location line="+1"/> + <source>Split Screen</source> + <translation>Bildschirm teilen</translation> + </message> + <message> + <location line="+1"/> + <source>Support</source> + <translation>Hilfe</translation> + </message> + <message> + <location line="+1"/> + <source>Task Panel</source> + <translation>Task-Leiste</translation> + </message> + <message> + <location line="+1"/> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <location line="+1"/> + <source>Tools</source> + <translation>Werkzeuge</translation> + </message> + <message> + <location line="+1"/> + <source>Travel</source> + <translation>Reise</translation> + </message> + <message> + <location line="+1"/> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <location line="+1"/> + <source>Word Processor</source> + <translation>Textverarbeitung</translation> + </message> + <message> + <location line="+1"/> + <source>XFer</source> + <translation>XFer</translation> + </message> + <message> + <location line="+1"/> + <source>Zoom In</source> + <translation>Vergrößern</translation> + </message> + <message> + <location line="+1"/> + <source>Zoom Out</source> + <translation>Verkleinern</translation> + </message> + <message> + <location line="+1"/> + <source>Away</source> + <translation>Abwesend</translation> + </message> + <message> + <location line="+1"/> + <source>Messenger</source> + <translation>Messenger</translation> + </message> + <message> + <location line="+1"/> + <source>WebCam</source> + <translation>WebCam</translation> + </message> + <message> + <location line="+1"/> + <source>Mail Forward</source> + <translation>Weiterleitung</translation> + </message> + <message> + <location line="+1"/> + <source>Pictures</source> + <translation>Bilder</translation> + </message> + <message> + <location line="+1"/> + <source>Music</source> + <translation>Musik</translation> + </message> + <message> + <location line="+1"/> + <source>Battery</source> + <translation>Batterie</translation> + </message> + <message> + <location line="+1"/> + <source>Bluetooth</source> + <translation>Bluetooth</translation> + </message> + <message> + <location line="+1"/> + <source>Wireless</source> + <translation>Drahtlos</translation> + </message> + <message> + <location line="+1"/> + <source>Ultra Wide Band</source> + <translation>Ultra Wide Band</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Forward</source> + <translation>Audio vorspulen</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Repeat</source> + <translation>Audio wiederholen</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Random Play</source> + <translation>Audio zufällige Auswahl spielen</translation> + </message> + <message> + <location line="+1"/> + <source>Subtitle</source> + <translation>Untertitel</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Cycle Track</source> + <translation>Audiospur wechseln</translation> + </message> + <message> + <location line="+1"/> + <source>Time</source> + <translation>Zeit</translation> + </message> + <message> + <location line="+2"/> + <source>View</source> + <translation>Ansicht</translation> + </message> + <message> + <location line="+1"/> + <source>Top Menu</source> + <translation>Hauptmenü</translation> + </message> + <message> + <location line="+1"/> + <source>Suspend</source> + <translation>Pause</translation> + </message> + <message> + <location line="+1"/> + <source>Hibernate</source> + <translation>Hibernate</translation> + </message> + <message> <location line="+4"/> <source>Print Screen</source> <translation>Bildschirm drucken</translation> @@ -5625,7 +6099,8 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>System Request</translation> </message> <message> - <location line="+4"/> + <location line="-18"/> + <location line="+22"/> <source>Select</source> <translation>Auswählen</translation> </message> @@ -5675,7 +6150,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Umdrehen</translation> </message> <message> - <location line="+561"/> + <location line="+573"/> <location line="+135"/> <source>Ctrl</source> <translation>Strg</translation> @@ -5709,7 +6184,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>F%1</translation> </message> <message> - <location line="-767"/> + <location line="-869"/> <source>Home Page</source> <translation>Startseite</translation> </message> @@ -5810,7 +6285,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Unbekannten Fehlercode vom SOCKSv5-Proxy-Server erhalten: 0x%1</translation> </message> <message> - <location line="+685"/> + <location line="+689"/> <source>Network operation timed out</source> <translation>Das Zeitlimit für die Operation wurde überschritten</translation> </message> @@ -5818,7 +6293,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSoftKeyManager</name> <message> - <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+78"/> + <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+79"/> <source>Ok</source> <translation>Ok</translation> </message> @@ -5843,7 +6318,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Abbrechen</translation> </message> <message> - <location line="+151"/> + <location line="+172"/> <source>Exit</source> <translation>Beenden</translation> </message> @@ -5946,7 +6421,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Ungültige oder leere Schlüsselliste (%1)</translation> </message> <message> - <location line="+62"/> + <location line="+42"/> + <source>Private key does not certify public key, %1</source> + <translation>Der private Schlüssel passt nicht zum öffentlichen Schlüssel, %1</translation> + </message> + <message> + <location line="+20"/> <source>Error creating SSL session, %1</source> <translation>Es konnte keine SSL-Sitzung erzeugt werden, %1</translation> </message> @@ -5971,15 +6451,125 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Der private Schlüssel konnte nicht geladen werden, %1</translation> </message> <message> - <location line="+7"/> - <source>Private key does not certificate public key, %1</source> - <translation>Die Zertifizierung des öffentlichen Schlüssels durch den privaten Schlüssel schlug fehl, %1</translation> + <location filename="../src/network/ssl/qsslerror.cpp" line="+213"/> + <source>No error</source> + <translation>Kein Fehler</translation> + </message> + <message> + <location line="+3"/> + <source>The issuer certificate could not be found</source> + <translation>Das Zertifikat des Ausstellers konnte nicht gefunden werden</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate signature could not be decrypted</source> + <translation>Die Signatur des Zertifikats konnte nicht entschlüsselt werden</translation> + </message> + <message> + <location line="+3"/> + <source>The public key in the certificate could not be read</source> + <translation>Der öffentliche Schlüssel konnte nicht gelesen werden</translation> + </message> + <message> + <location line="+3"/> + <source>The signature of the certificate is invalid</source> + <translation>Die Signatur des Zertifikats ist ungültig</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate is not yet valid</source> + <translation>Das Zertifikat ist noch nicht gültig</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate has expired</source> + <translation>Die Gültigkeit des Zertifikats ist abgelaufen</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate's notBefore field contains an invalid time</source> + <translation>Das Feld 'notBefore' des Zertifikats enthält eine ungültige Zeit</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate's notAfter field contains an invalid time</source> + <translation>Das Feld 'notAfter' des Zertifikats enthält eine ungültige Zeit</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate is self-signed, and untrusted</source> + <translation>Das Zertifikat ist selbstsigniert und daher nicht vertrauenswürdig</translation> + </message> + <message> + <location line="+3"/> + <source>The root certificate of the certificate chain is self-signed, and untrusted</source> + <translation>Das oberste Zertifikat der Kette ist selbstsigniert und daher nicht vertrauenswürdig</translation> + </message> + <message> + <location line="+3"/> + <source>The issuer certificate of a locally looked up certificate could not be found</source> + <translation>Das Zertifikat des Ausstellers eines lokal gefundenen Zertifikats konnte nicht gefunden werden</translation> + </message> + <message> + <location line="+3"/> + <source>No certificates could be verified</source> + <translation>Keines der Zertifikate konnte verifiziert werden</translation> + </message> + <message> + <location line="+3"/> + <source>One of the CA certificates is invalid</source> + <translation>Eines der Zertifikate der Zertifizierungsstelle ist ungültig</translation> + </message> + <message> + <location line="+3"/> + <source>The basicConstraints path length parameter has been exceeded</source> + <translation>Die Länge des basicConstraints-Pfades wurde überschritten</translation> + </message> + <message> + <location line="+3"/> + <source>The supplied certificate is unsuitable for this purpose</source> + <translation>Das angegebene Zertifikat kann in diesem Fall nicht verwendet werden</translation> + </message> + <message> + <location line="+3"/> + <source>The root CA certificate is not trusted for this purpose</source> + <translation>Das oberste Zertifikat der Zertifizierungsstelle ist für diesen Fall nicht vertrauenswürdig</translation> + </message> + <message> + <location line="+3"/> + <source>The root CA certificate is marked to reject the specified purpose</source> + <translation>Das oberste Zertifikat der Zertifizierungsstelle weist diesen Fall auf Grund einer speziellen Kennzeichnung zurück</translation> + </message> + <message> + <location line="+3"/> + <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source> + <translation>Das Zertifikat des betrachteten Ausstellers wurde zurückgewiesen da sein Subjektname nicht dem Namen des Austellers des aktuellen Zertifikats entspricht</translation> + </message> + <message> + <location line="+4"/> + <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source> + <translation>Das Zertifikat des betrachteten Ausstellers wurde zurückgewiesen da Ausstellername und Seriennummer vorhanden sind und nicht dem Bezeichner der Zertifizierungsstelle des aktuellen Zertifikats entsprechen</translation> + </message> + <message> + <location line="+5"/> + <source>The peer did not present any certificate</source> + <translation>Die Gegenstelle hat kein Zertifikat angegeben</translation> + </message> + <message> + <location line="+3"/> + <source>The host name did not match any of the valid hosts for this certificate</source> + <translation>Der Name des Hosts ist keiner aus der Liste der für dieses Zertifikat gültigen Hosts</translation> + </message> + <message> + <location line="+6"/> + <source>Unknown error</source> + <translation>Unbekannter Fehler</translation> </message> </context> <context> <name>QStateMachine</name> <message> - <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+998"/> + <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+1028"/> <source>Missing initial state in compound state '%1'</source> <translation>Der Anfangszustand des zusammengesetzten Zustands '%1' fehlt</translation> </message> @@ -6033,7 +6623,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QTDSDriver</name> <message> - <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+584"/> + <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+595"/> <source>Unable to open connection</source> <translation>Die Datenbankverbindung kann nicht geöffnet werden</translation> </message> @@ -6067,7 +6657,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QTextControl</name> <message> - <location filename="../src/gui/text/qtextcontrol.cpp" line="+2007"/> + <location filename="../src/gui/text/qtextcontrol.cpp" line="+2024"/> <source>&Undo</source> <translation>&Rückgängig</translation> </message> @@ -6110,7 +6700,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QToolButton</name> <message> - <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+254"/> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+310"/> <location line="+6"/> <source>Press</source> <translation>Drücken</translation> @@ -6167,7 +6757,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QUnicodeControlCharacterMenu</name> <message> - <location filename="../src/gui/text/qtextcontrol.cpp" line="+884"/> + <location filename="../src/gui/text/qtextcontrol.cpp" line="+899"/> <source>LRM Left-to-right mark</source> <translation>LRM Left-to-right mark</translation> </message> @@ -6225,7 +6815,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWebFrame</name> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+704"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+712"/> <source>Request cancelled</source> <translation>Anfrage wurde abgebrochen</translation> </message> @@ -6258,7 +6848,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWebPage</name> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+41"/> + <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/> <source>Submit</source> <comment>default label for Submit buttons in forms on web pages</comment> <translation>Senden</translation> @@ -6276,7 +6866,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Rücksetzen</translation> </message> <message> - <location line="+15"/> + <location line="+16"/> <source>Choose File</source> <comment>title for file button used in HTML forms</comment> <translation>Durchsuchen</translation> @@ -6774,7 +7364,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Unbekannt</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+170"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+167"/> <source>Web Inspector - %2</source> <translation>Web Inspector - %2</translation> </message> @@ -6785,7 +7375,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>%1 (%2x%3 Pixel)</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+416"/> + <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+412"/> <source>Bad HTTP request</source> <translation>Ungültige HTTP-Anforderung</translation> </message> @@ -6870,7 +7460,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1727"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1822"/> <source>JavaScript Alert - %1</source> <translation>JavaScript-Hinweis - %1</translation> </message> @@ -6895,7 +7485,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Das Skript dieser Webseite ist fehlerhaft. Möchten Sie es anhalten?</translation> </message> <message> - <location line="+383"/> + <location line="+381"/> <source>Move the cursor to the next character</source> <translation>Positionsmarke auf folgendes Zeichen setzen</translation> </message> @@ -6972,7 +7562,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+3"/> <source>Select to the next word</source> - <translation>Bis zum nachsten Wort markieren</translation> + <translation>Bis zum nächsten Wort markieren</translation> </message> <message> <location line="+3"/> @@ -7116,7 +7706,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWidget</name> <message> - <location filename="../src/gui/kernel/qwidget.cpp" line="+5666"/> + <location filename="../src/gui/kernel/qwidget.cpp" line="+5720"/> <source>*</source> <translation>*</translation> </message> @@ -7648,7 +8238,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>%1 ist ein unbekannter Schema-Typ.</translation> </message> <message> - <location line="-7041"/> + <location line="-7254"/> + <source>A template with name %1 has already been declared.</source> + <translation>Eine Vorlage des Namens %1 existiert bereits.</translation> + </message> + <message> + <location line="+213"/> <source>Only one %1 declaration can occur in the query prolog.</source> <translation>Der Anfrage-Prolog darf nur eine %1-Deklaration enthalten.</translation> </message> @@ -7703,12 +8298,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Modul-Import wird nicht unterstützt</translation> </message> <message> - <location line="+52"/> - <source>No value is available for the external variable by name %1.</source> - <translation>Für die externe Variable des Namens %1 ist kein Wert verfügbar.</translation> - </message> - <message> - <location line="+126"/> + <location line="+178"/> <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source> <translation>Der Namensraum einer nutzerdefinierten Funktion aus einem Bibliotheksmodul muss dem Namensraum des Moduls entsprechen (%1 anstatt %2) </translation> </message> @@ -7723,27 +8313,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Externe Funktionen werden nicht unterstützt. Alle unterstützten Funktionen können direkt verwendet werden, ohne sie als extern zu deklarieren</translation> </message> <message> - <location line="+37"/> - <source>An argument by name %1 has already been declared. Every argument name must be unique.</source> - <translation>Es existiert bereits ein Argument mit dem Namen %1. Die Namen der Argumente müssen eindeutig sein.</translation> - </message> - <message> - <location line="+1672"/> + <location line="+1709"/> <source>The %1-axis is unsupported in XQuery</source> <translation>Die %1-Achse wird in XQuery nicht unterstützt</translation> </message> <message> - <location line="-5464"/> - <source>No variable by name %1 exists</source> - <translation>Es existiert keine Variable mit dem Namen %1</translation> - </message> - <message> - <location line="+5797"/> - <source>No function by name %1 is available.</source> - <translation>Es existiert keine Funktion mit dem Namen %1.</translation> - </message> - <message> - <location line="+102"/> + <location line="+435"/> <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source> <translation>Der Namensraum-URI darf nicht leer sein, wenn er an den Präfix %1 gebunden ist.</translation> </message> @@ -7760,7 +8335,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+30"/> <source>Two namespace declaration attributes have the same name: %1.</source> - <translation>Es wurden zwei Namenraum-Deklarationsattribute gleichen Namens (%1) gefunden.</translation> + <translation>Es wurden zwei Namensraum-Deklarationsattribute gleichen Namens (%1) gefunden.</translation> </message> <message> <location line="+89"/> @@ -7768,12 +8343,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Ein Namensraum-URI muss eine Konstante sein und darf keine eingebetteten Ausdrücke verwenden.</translation> </message> <message> - <location line="+16"/> - <source>An attribute by name %1 has already appeared on this element.</source> - <translation>Das Element hat bereits ein Attribut mit dem Namen %1.</translation> - </message> - <message> - <location line="+683"/> + <location line="+699"/> <location line="+71"/> <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source> <translation>%1 befindet sich nicht unter den Attributdeklarationen im Bereich. Schema-Import wird nicht unterstützt.</translation> @@ -7975,7 +8545,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Ein positionales Prädikat muss sich als einfacher, numerischer Wert auswerten lassen.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+137"/> + <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+113"/> + <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid.</source> + <translation>Der Zielname einer Processing-Anweisung kann nicht %1 (unabhängig von Groß/Kleinschreibung sein). %2 ist daher ungültig.</translation> + </message> + <message> + <location line="+24"/> <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source> <translation>%1 ist kein gültiger Zielname einer Processing-Anweisung, es muss ein %2 Wert wie zum Beispiel %3 sein.</translation> </message> @@ -8065,17 +8640,32 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Das Schlüsselwort %1 kann nicht mit einem anderen Modusnamen zusammen verwendet werden.</translation> </message> <message> - <location line="+29"/> - <source>The value of attribute %1 must of type %2, which %3 isn't.</source> - <translation>Der Wert des Attributs %1 muss vom Typ %2 sein. %3 ist kein gültiger Wert.</translation> + <location line="-3117"/> + <source>No variable with name %1 exists</source> + <translation>Es existiert keine Variable des Namens %1</translation> </message> <message> - <location line="+387"/> - <source>A variable by name %1 has already been declared.</source> - <translation>Es wurde bereits eine Variable mit dem Namen %1 deklariert.</translation> + <location line="+3146"/> + <source>The value of attribute %1 must be of type %2, which %3 isn't.</source> + <translation>Der Wert des Attributs %1 muss vom Typ %2 sein, was bei %3 nicht der Fall ist.</translation> </message> <message> - <location line="+135"/> + <location line="+75"/> + <source>The prefix %1 cannot be bound. By default, it is already bound to the namespace %2.</source> + <translation>Der Präfix %1 kann nicht gebunden werden. Er ist bereits per Vorgabe an den Namensraum %2 gebunden.</translation> + </message> + <message> + <location line="+312"/> + <source>A variable with name %1 has already been declared.</source> + <translation>Eine Variable des Namens %1 wurde bereits deklariert.</translation> + </message> + <message> + <location line="+39"/> + <source>No value is available for the external variable with name %1.</source> + <translation>Es ist kein Wert für die externe Variable des Namens %1 verfügbar.</translation> + </message> + <message> + <location line="+96"/> <source>A stylesheet function must have a prefixed name.</source> <translation>Der Name einer Stylesheet-Funktion muss einen Präfix haben.</translation> </message> @@ -8085,14 +8675,19 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Der Namensraum %1 ist reserviert und kann daher von nutzerdefinierten Funktionen nicht verwendet werden (für diesen Zweck gibt es den vordefinierten Präfix %2).</translation> </message> <message> - <location line="+285"/> + <location line="+106"/> + <source>An argument with name %1 has already been declared. Every argument name must be unique.</source> + <translation>Es wurde bereits ein Argument des Namens %1 deklariert. Argumentnamen müssen eindeutig sein.</translation> + </message> + <message> + <location line="+179"/> <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source> - <translation>Bei der Verwendung der Funktion %1 zur Auswertung innerhalb eines Suchmusters muss das Argument eine Variablenreferenz oder ein String-Literal sein.</translation> + <translation>Bei der Verwendung der Funktion %1 zur Auswertung innerhalb eines Suchmusters muss das Argument eine Variablenreferenz oder ein Zeichenketten-Literal sein.</translation> </message> <message> <location line="+11"/> <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source> - <translation>Bei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein String-Literal sein.</translation> + <translation>Bei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein Zeichenketten-Literal sein.</translation> </message> <message> <location line="+14"/> @@ -8140,7 +8735,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Die Namen von Vorlagenparametern müssen eindeutig sein, %1 existiert bereits.</translation> </message> <message> - <location line="-5773"/> + <location line="+462"/> + <source>No function with name %1 is available.</source> + <translation>Es ist keine Funktion des Namens %1 verfügbar.</translation> + </message> + <message> + <location line="-6235"/> <source>%1 is not a valid numeric literal.</source> <translation>%1 ist kein gültiger numerischer Literal.</translation> </message> @@ -8160,12 +8760,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Es wurde ein Sprachkonstrukt angetroffen, was in der aktuellen Sprache (%1) nicht erlaubt ist.</translation> </message> <message> - <location line="+3804"/> - <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source> - <translation>Der Präfix %1 kann nicht gebunden werden. Er ist bereits durch Vorgabe an den Namensraum %2 gebunden.</translation> - </message> - <message> - <location line="+2698"/> + <location line="+6502"/> <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> <translation>Der Namensraum %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert.</translation> </message> @@ -8175,7 +8770,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Der Präfix %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert.</translation> </message> <message> - <location line="+181"/> + <location line="+120"/> + <source>An attribute with name %1 has already appeared on this element.</source> + <translation>Das Element hat bereits ein Attribut des Namens %1.</translation> + </message> + <message> + <location line="+61"/> <source>A direct element constructor is not well-formed. %1 is ended with %2.</source> <translation>Es wurde ein fehlerhafter direkter Element-Konstruktor gefunden. %1 endet mit %2.</translation> </message> @@ -8197,7 +8797,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+76"/> <source>%1 is not a valid name for a processing-instruction.</source> - <translation>%1 ist kein gültiger Name für eine Prozessing-Instruktion.</translation> + <translation>%1 ist kein gültiger Name für eine Processing-Instruktion.</translation> </message> <message> <location line="+188"/> @@ -8239,11 +8839,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <source>Modulus division (%1) by zero (%2) is undefined.</source> <translation>Die Modulo-Division (%1) durch Null (%2) ist nicht definiert.</translation> </message> - <message> - <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="-24"/> - <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source> - <translation>%2 ist kein gültiger Zielname einer Processing-Anweisung, da dieser nicht %1 sein darf (ungeachtet der Groß/Kleinschreibung).</translation> - </message> <message numerus="yes"> <location filename="../src/xmlpatterns/functions/qabstractfunctionfactory.cpp" line="+77"/> <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source> @@ -8277,19 +8872,14 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Die Deklaration des Default-Namensraums muss vor Funktions-, Variablen- oder Optionsdeklaration erfolgen.</translation> </message> <message> - <location line="-3458"/> - <source>A template by name %1 has already been declared.</source> - <translation>Es existiert bereits eine Vorlage des Namens %1.</translation> - </message> - <message> - <location line="+3468"/> + <location line="+10"/> <source>Namespace declarations must occur before function, variable, and option declarations.</source> <translation>Namensraums-Deklarationen müssen vor Funktions- Variablen- oder Optionsdeklarationen stehen.</translation> </message> <message> <location line="+11"/> <source>Module imports must occur before function, variable, and option declarations.</source> - <translation>Modul-Importe müssen vor Funktions- Variablen- oder Optionsdeklarationen stehen.</translation> + <translation>Modul-Importe müssen vor Funktions-, Variablen- oder Optionsdeklarationen stehen.</translation> </message> <message> <location filename="../src/xmlpatterns/functions/qtimezonefns.cpp" line="+12"/> @@ -8429,7 +9019,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+31"/> <source>At least one %1-element must occur inside %2.</source> - <translation>In %2 muss mindenstens ein %1-Element stehen.</translation> + <translation>In %2 muss mindestens ein %1-Element stehen.</translation> </message> <message> <location line="+58"/> @@ -8887,7 +9477,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+18"/> <source>processContent of base wildcard must be weaker than derived wildcard.</source> - <translation>Das 'processContent'-Attribut des Basisuchmusters muss schwächer sein als das des abgeleiteten Suchmusters.</translation> + <translation>Das 'processContent'-Attribut des Basissuchmusters muss schwächer sein als das des abgeleiteten Suchmusters.</translation> </message> <message> <location line="+39"/> @@ -8918,7 +9508,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </message> <message> <location line="+5"/> - <source>Derived attribute %1 does not exists in the base definition.</source> + <source>Derived attribute %1 does not exist in the base definition.</source> <translation>Das abgeleitete Attribut %1 existiert in der Basisdefinition nicht.</translation> </message> <message> @@ -9011,7 +9601,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+279"/> <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> - <translation>Das Inhaltsmodell des komplexen Typs %1enthält ein Element '%2'; es kann daher nicht durch Erweiterung von einem nichtleeren Typ abgeleitet werden.</translation> + <translation>Das Inhaltsmodell des komplexen Typs %1enthält ein Element '%2'; es kann daher nicht durch Erweiterung von einem Typ abgeleitet werden, der nicht leer ist.</translation> </message> <message> <location line="+6"/> @@ -9116,7 +9706,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location filename="../src/xmlpatterns/schema/qxsdparticlechecker.cpp" line="+165"/> <source>Empty particle cannot be derived from non-empty particle.</source> - <translation>Von einem nichtleeren Partikel kann kein leerer Partikel abgeleitet werden.</translation> + <translation>Es kann kein leerer Partikel von einem Partikel abgeleitet werden, der nicht leer ist.</translation> </message> <message> <location line="+15"/> @@ -9370,8 +9960,8 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </message> <message> <location line="+131"/> - <source>Component with id %1 has been defined previously.</source> - <translation>Die Komponente mit der Id %1 ist bereits definiert.</translation> + <source>Component with ID %1 has been defined previously.</source> + <translation>Es wurde bereits eine Komponente mit der ID %1 definiert.</translation> </message> <message> <location line="+17"/> @@ -9775,7 +10365,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+8"/> <source>Attribute %1 contains invalid data: %2</source> - <translation>Das Attribut %1 enthält ungültigeDaten: %2</translation> + <translation>Das Attribut %1 enthält ungültige Daten: %2</translation> </message> <message> <location line="+8"/> @@ -9784,11 +10374,16 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </message> <message> <location line="+6"/> - <source>Fixed value constrained not allowed if element is nillable.</source> - <translation>Eine feste Einschränkung des Werts ist nicht zulässig, wenn das Element 'nillable' spezifiert.</translation> + <source>Fixed value constraint not allowed if element is nillable.</source> + <translation>Eine Beschränkung auf einen festen Wert ist nicht zulässig, wenn das Element 'nillable' spezifiziert.</translation> </message> <message> - <location line="+32"/> + <location line="+230"/> + <source>Element %1 cannot contain other elements, as it has a fixed content.</source> + <translation>Das Element %1 kann keine anderen Element enthalten, da sein Inhalt festgelegt ist.</translation> + </message> + <message> + <location line="-198"/> <source>Specified type %1 is not validly substitutable with element type %2.</source> <translation>Der angebenene Typ %1 kann nicht durch den Elementtyp %2 substituiert werden.</translation> </message> @@ -9832,12 +10427,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Das Element %1 enthält unzulässigen Textinhalt.</translation> </message> <message> - <location line="+18"/> - <source>Element %1 can not contain other elements, as it has a fixed content.</source> - <translation>Das Element %1 darf kann keine Unterelemente haben, da es festen Inhalt enthält.</translation> - </message> - <message> - <location line="+43"/> + <location line="+61"/> <source>Element %1 is missing required attribute %2.</source> <translation>Bei dem Element %1 fehlt ein erforderliches Attribut %2.</translation> </message> diff --git a/translations/qt_help_de.ts b/translations/qt_help_de.ts index b1b7c76..f64e741 100644 --- a/translations/qt_help_de.ts +++ b/translations/qt_help_de.ts @@ -33,32 +33,52 @@ <name>QHelpCollectionHandler</name> <message> <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/> - <source>The collection file is not set up yet!</source> - <translation>Die Katalogdatei ist noch nicht eingerichtet.</translation> + <source>The collection file '%1' is not set up yet!</source> + <translation>Die Katalogdatei '%1' ist noch nicht eingerichtet.</translation> </message> <message> - <location line="+22"/> + <location line="+23"/> <source>Cannot load sqlite database driver!</source> <translation>Der Datenbanktreiber für SQLite kann nicht geladen werden.</translation> </message> <message> <location line="+11"/> - <location line="+48"/> + <location line="+49"/> <source>Cannot open collection file: %1</source> <translation>Katalogdatei kann nicht geöffnet werden: %1</translation> </message> <message> - <location line="-39"/> + <location line="-40"/> <source>Cannot create tables in file %1!</source> <translation>In Datei %1 können keine Tabellen angelegt werden.</translation> </message> <message> <location line="+16"/> - <source>The specified collection file already exists!</source> - <translation>Die angegebene Katalogdatei existiert bereits.</translation> + <source>The collection file '%1' already exists!</source> + <translation>Die Katalogdatei '%1' existiert bereits.</translation> </message> <message> - <location line="+5"/> + <location line="+148"/> + <source>Unknown filter '%1'!</source> + <translation>Unbekannter Filter '%1'.</translation> + </message> + <message> + <location line="+105"/> + <source>Invalid documentation file '%1'!</source> + <translation>Ungültige Dokumentationsdatei '%1'.</translation> + </message> + <message> + <location line="+167"/> + <source>Cannot register namespace '%1'!</source> + <translation>Der Namensraum '%1' kann nicht registriert werden.</translation> + </message> + <message> + <location line="+24"/> + <source>Cannot open database '%1' to optimize!</source> + <translation>Die Datenbank '%1' kann nicht zur Optimierung geöffnet werden.</translation> + </message> + <message> + <location line="-438"/> <source>Cannot create directory: %1</source> <translation>Das Verzeichnis kann nicht angelegt werden: %1</translation> </message> @@ -68,12 +88,7 @@ <translation>Die Katalogdatei kann nicht kopiert werden: %1</translation> </message> <message> - <location line="+119"/> - <source>Unknown filter!</source> - <translation>Unbekannter Filter.</translation> - </message> - <message> - <location line="+55"/> + <location line="+174"/> <source>Cannot register filter %1!</source> <translation>Der Filter kann nicht registriert werden: %1</translation> </message> @@ -83,12 +98,7 @@ <translation>Die Dokumentationsdatei kann nicht geöffnet werden: %1</translation> </message> <message> - <location line="+6"/> - <source>Invalid documentation file!</source> - <translation>Ungültige Dokumentationsdatei.</translation> - </message> - <message> - <location line="+34"/> + <location line="+40"/> <source>The namespace %1 was not registered!</source> <translation>Der Namensraum %1 wurde nicht registriert.</translation> </message> @@ -97,16 +107,6 @@ <source>Namespace %1 already exists!</source> <translation>Der Namensraum %1 existiert bereits.</translation> </message> - <message> - <location line="+13"/> - <source>Cannot register namespace!</source> - <translation>Der Namensraum kann nicht registriert werden.</translation> - </message> - <message> - <location line="+24"/> - <source>Cannot open database to optimize!</source> - <translation>Die Datenbank kann nicht zur Optimierung geöffnet werden.</translation> - </message> </context> <context> <name>QHelpDBReader</name> @@ -120,7 +120,7 @@ <context> <name>QHelpEngineCore</name> <message> - <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+524"/> + <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+523"/> <source>The specified namespace does not exist!</source> <translation>Der angegebene Namensraum existiert nicht.</translation> </message> @@ -128,7 +128,7 @@ <context> <name>QHelpEngineCorePrivate</name> <message> - <location line="-402"/> + <location line="-401"/> <source>Cannot open documentation file %1: %2!</source> <translation>Die Dokumentationsdatei %1 kann nicht geöffnet werden: %2.</translation> </message> @@ -318,11 +318,6 @@ <context> <name>QObject</name> <message> - <location filename="../tools/assistant/lib/qhelp_global.h" line="+83"/> - <source>Untitled</source> - <translation>Ohne Titel</translation> - </message> - <message> <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+85"/> <source>Unknown token.</source> <translation>Unbekanntes Token.</translation> |