diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2011-12-21 09:35:37 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2011-12-21 09:35:37 (GMT) |
commit | e97471c4d6294794b01c96a3f0aead2a3e6ee45f (patch) | |
tree | aaaf6d7ebd7c8cdddcc4392551bf70f0040afe70 | |
parent | b5fc0b789039c425ca41dd8b466d4cbb355c886b (diff) | |
parent | e22d40a6143709da6ee26c2f8e1b6a05904fd9b4 (diff) | |
download | Qt-e97471c4d6294794b01c96a3f0aead2a3e6ee45f.zip Qt-e97471c4d6294794b01c96a3f0aead2a3e6ee45f.tar.gz Qt-e97471c4d6294794b01c96a3f0aead2a3e6ee45f.tar.bz2 |
Merge branch 'master' of git://scm.dev.nokia.troll.no/qt/qt-qa-team
* 'master' of git://scm.dev.nokia.troll.no/qt/qt-qa-team: (29 commits)
Add dita_docs target to generate DITA output.
Fix missing part from commit dae052cb11c0018121f2c4028aed9db17769fd77
Fix a bug where 'int' is not printed in snippets.
SSL: fix build with -openssl-linked for OpenSSL 0.9.8*
Fix m_longTapDetector causing crash.
Fixes to czech translation
Fix crash in positionInLigature
Fix to incorrect ApplicationActivate event in QtOpenGL
Symbian - Fix QFile::map with non page aligned offsets
Update czech translation
Symbian: fix tst_QMenuBar::task256322_highlight() regression
I18n: Updates galician translation (4.8)
Fix Memoy leak relateded to contextmenu.
Set execution bits for .test files.
Default to QDir::homePath() in Symbian native file dialogs
directfb: Backport the work from QtBase to Qt 4.8
[blitter] Work on tst_QPixmap::clear()
[blitter] Use QScopedPointer for the engine and blittable
[blitter] Generate a new serial number when resizing the
[blitter] Fix memory leak in the blitter paintengine
...
60 files changed, 2421 insertions, 648 deletions
diff --git a/doc/doc.pri b/doc/doc.pri index c51a621..ea2fb2e 100644 --- a/doc/doc.pri +++ b/doc/doc.pri @@ -36,6 +36,7 @@ $$unixstyle { DEMOSMANIFESTTARGET = $$replace(DEMOSMANIFESTTARGET, "/", "\\") } ADP_DOCS_QDOCCONF_FILE = qt-build-docs-online.qdocconf +DITA_DOCS_QDOCCONF_FILE = qt-ditaxml.qdocconf QT_DOCUMENTATION = ($$QDOC qt-api-only.qdocconf assistant.qdocconf designer.qdocconf \ linguist.qdocconf qmake.qdocconf qdeclarative.qdocconf) && \ (cd $$QT_BUILD_TREE && \ @@ -69,6 +70,8 @@ win32-g++*:isEmpty(QMAKE_SH) { # Build rules: adp_docs.commands = ($$QDOC $$ADP_DOCS_QDOCCONF_FILE && $$QMAKE_COPY_DIR $$COPYWEBKITGUIDE $$COPYWEBKITTARGB) adp_docs.depends += sub-qdoc3 # qdoc3 +dita_docs.commands = ($$QDOC $$DITA_DOCS_QDOCCONF_FILE) +dita_docs.depends += sub-qdoc3 # qdoc3 qch_docs.commands = $$QT_DOCUMENTATION qch_docs.depends += sub-qdoc3 @@ -103,5 +106,5 @@ docimages.path = $$[QT_INSTALL_DOCS]/src sub-qdoc3.depends = sub-corelib sub-xml sub-qdoc3.commands += (cd tools/qdoc3 && $(MAKE)) -QMAKE_EXTRA_TARGETS += sub-qdoc3 adp_docs qch_docs docs docs_zh_CN docs_ja_JP +QMAKE_EXTRA_TARGETS += sub-qdoc3 adp_docs dita_docs qch_docs docs docs_zh_CN docs_ja_JP INSTALLS += htmldocs qchdocs docimages examplesmanifest demosmanifest diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index cc32f8d..5077be5 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -650,7 +650,11 @@ void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t foreach(QString targetItem, project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_TARGETS.") + item)) { // Make sure targetpath is absolute QString absoluteTarget = QDir::cleanPath(outputDir.absoluteFilePath(targetItem)); +#if defined(Q_OS_WIN) + if (allPreDeps.contains(absoluteTarget, Qt::CaseInsensitive)) { +#else if (allPreDeps.contains(absoluteTarget)) { +#endif QStringList deps = project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_DEPS.") + item + targetItem); QString commandItem = project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_CMD.") + item + targetItem).join(" "); diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index 4961722..781a5f0 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -1058,22 +1058,24 @@ uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size, QFile::MemoryMapFla TInt nativeMapError = KErrNone; RFileMap mapping; TUint mode(EFileMapRemovableMedia); + TUint64 nativeOffset = offset & ~(mapping.PageSizeInBytes() - 1); + //If the file was opened for write or read/write, then open the map for read/write if (openMode & QIODevice::WriteOnly) mode |= EFileMapWrite; if (symbianFile.SubSessionHandle()) { - nativeMapError = mapping.Open(symbianFile, offset, size, mode); + nativeMapError = mapping.Open(symbianFile, nativeOffset, size, mode); } else { //map file by name if we don't have a native handle QString fn = QFileSystemEngine::absoluteName(fileEntry).nativeFilePath(); TUint filemode = EFileShareReadersOrWriters | EFileRead; if (openMode & QIODevice::WriteOnly) filemode |= EFileWrite; - nativeMapError = mapping.Open(qt_s60GetRFs(), qt_QString2TPtrC(fn), filemode, offset, size, mode); + nativeMapError = mapping.Open(qt_s60GetRFs(), qt_QString2TPtrC(fn), filemode, nativeOffset, size, mode); } if (nativeMapError == KErrNone) { QScopedResource<RFileMap> ptr(mapping); //will call Close if adding to mapping throws an exception - uchar *address = mapping.Base(); + uchar *address = mapping.Base() + (offset - nativeOffset); maps[address] = mapping; ptr.take(); return address; diff --git a/src/corelib/thread/qwaitcondition_symbian.cpp b/src/corelib/thread/qwaitcondition_symbian.cpp index c6414e8..ed1011c 100644 --- a/src/corelib/thread/qwaitcondition_symbian.cpp +++ b/src/corelib/thread/qwaitcondition_symbian.cpp @@ -112,7 +112,10 @@ public: --wakeups; } - mutex.Signal(); + // if err is KErrGeneral it signals that the RCondVar is closed along with the mutex and that this has been deleted + // we must not access any member variables in this case + if (err != KErrGeneral) + mutex.Signal(); if (err && err != KErrTimedOut) report_error(err, "QWaitCondition::wait()", "cv wait"); diff --git a/src/gui/dialogs/qfiledialog_symbian.cpp b/src/gui/dialogs/qfiledialog_symbian.cpp index 1ffbf1d..01c7b9b 100644 --- a/src/gui/dialogs/qfiledialog_symbian.cpp +++ b/src/gui/dialogs/qfiledialog_symbian.cpp @@ -143,8 +143,8 @@ static QString launchSymbianDialog(const QString dialogCaption, const QString st tryCount = 0; } else { // Symbian native file dialog doesn't allow accessing files outside C:/Data - // It will always leave in that case, so default into QDir::rootPath() in error cases. - QString dir = QDir::toNativeSeparators(QDir::rootPath()); + // It will always leave in that case, so default into QDir::homePath() in error cases. + QString dir = QDir::toNativeSeparators(QDir::homePath()); startFolder = qt_QString2TPtrC(dir); } } diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index f3a4318..c73e6a9 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -57,7 +57,8 @@ QT_BEGIN_NAMESPACE static int global_ser_no = 0; QBlittablePixmapData::QBlittablePixmapData() - : QPixmapData(QPixmapData::PixmapType,BlitterClass), m_engine(0), m_blittable(0) + : QPixmapData(QPixmapData::PixmapType,BlitterClass) + , m_alpha(false) #ifdef QT_BLITTER_RASTEROVERLAY ,m_rasterOverlay(0), m_unmergedCopy(0) #endif //QT_BLITTER_RASTEROVERLAY @@ -67,8 +68,6 @@ QBlittablePixmapData::QBlittablePixmapData() QBlittablePixmapData::~QBlittablePixmapData() { - delete m_blittable; - delete m_engine; #ifdef QT_BLITTER_RASTEROVERLAY delete m_rasterOverlay; delete m_unmergedCopy; @@ -79,31 +78,30 @@ QBlittable *QBlittablePixmapData::blittable() const { if (!m_blittable) { QBlittablePixmapData *that = const_cast<QBlittablePixmapData *>(this); - that->m_blittable = this->createBlittable(QSize(w,h)); + that->m_blittable.reset(this->createBlittable(QSize(w,h), m_alpha)); } - return m_blittable; + return m_blittable.data(); } void QBlittablePixmapData::setBlittable(QBlittable *blittable) { resize(blittable->size().width(),blittable->size().height()); - m_blittable = blittable; + m_blittable.reset(blittable); } void QBlittablePixmapData::resize(int width, int height) { - delete m_blittable; - m_blittable = 0; - delete m_engine; - m_engine = 0; + m_blittable.reset(0); + m_engine.reset(0); #ifdef Q_WS_QPA d = QApplicationPrivate::platformIntegration()->screens().at(0)->depth(); #endif w = width; h = height; is_null = (w <= 0 || h <= 0); + setSerialNumber(++global_ser_no); } int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const @@ -139,7 +137,16 @@ void QBlittablePixmapData::fill(const QColor &color) if (color.alpha() == 255 && blittable()->capabilities() & QBlittable::SolidRectCapability) { blittable()->unlock(); blittable()->fillRect(QRectF(0,0,w,h),color); - }else { + } else { + // Need to be backed with an alpha channel now. It would be nice + // if we could just change the format, e.g. when going from + // RGB32 -> ARGB8888. + if (color.alpha() != 255 && !hasAlphaChannel()) { + m_blittable.reset(0); + m_engine.reset(0); + m_alpha = true; + } + uint pixel; switch (blittable()->lock()->format()) { case QImage::Format_ARGB32_Premultiplied: @@ -185,6 +192,7 @@ bool QBlittablePixmapData::hasAlphaChannel() const void QBlittablePixmapData::fromImage(const QImage &image, Qt::ImageConversionFlags flags) { + m_alpha = image.hasAlphaChannel(); resize(image.width(),image.height()); markRasterOverlay(QRect(0,0,w,h)); QImage *thisImg = buffer(); @@ -208,9 +216,9 @@ QPaintEngine *QBlittablePixmapData::paintEngine() const { if (!m_engine) { QBlittablePixmapData *that = const_cast<QBlittablePixmapData *>(this); - that->m_engine = new QBlitterPaintEngine(that); + that->m_engine.reset(new QBlitterPaintEngine(that)); } - return m_engine; + return m_engine.data(); } #ifdef QT_BLITTER_RASTEROVERLAY diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h index 07791e5..4742a83 100644 --- a/src/gui/image/qpixmap_blitter_p.h +++ b/src/gui/image/qpixmap_blitter_p.h @@ -55,7 +55,7 @@ public: QBlittablePixmapData(); ~QBlittablePixmapData(); - virtual QBlittable *createBlittable(const QSize &size) const = 0; + virtual QBlittable *createBlittable(const QSize &size, bool alpha) const = 0; QBlittable *blittable() const; void setBlittable(QBlittable *blittable); @@ -83,8 +83,9 @@ public: #endif //QT_BLITTER_RASTEROVERLAY protected: - QBlitterPaintEngine *m_engine; - QBlittable *m_blittable; + QScopedPointer<QBlitterPaintEngine> m_engine; + QScopedPointer<QBlittable> m_blittable; + bool m_alpha; #ifdef QT_BLITTER_RASTEROVERLAY QImage *m_rasterOverlay; diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 3bcac62..02bc4d0 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -1388,15 +1388,25 @@ void QCoeFepInputContext::StartFepInlineEditL(const TDesC& aInitialInlineText, // but FEP requires that selected text is always removed at StartFepInlineEditL. // Let's remove the selected text if aInitialInlineText is empty and there is selected text if (m_preeditString.isEmpty()) { - int anchor = w->inputMethodQuery(Qt::ImAnchorPosition).toInt(); - int cursorPos = w->inputMethodQuery(Qt::ImCursorPosition).toInt(); - int replacementLength = qAbs(cursorPos-anchor); - if (replacementLength > 0) { - int replacementStart = cursorPos < anchor ? 0 : -replacementLength; - QList<QInputMethodEvent::Attribute> clearSelectionAttributes; - QInputMethodEvent clearSelectionEvent(QLatin1String(""), clearSelectionAttributes); - clearSelectionEvent.setCommitString(QLatin1String(""), replacementStart, replacementLength); + QString currentSelection = w->inputMethodQuery(Qt::ImCurrentSelection).toString(); + if (!currentSelection.isEmpty()) { + // To correctly remove selection in cases where we have multiple lines selected, + // we must rely on the control's own selection removal mechanism, as surrounding + // text contains only one line. It's also impossible to accurately detect + // these overselection cases as the anchor and cursor positions are limited to the + // surrounding text. + // Solution is to clear the selection by faking a preedit. Use a dummy character + // from the current selection just to be safe. + QString dummyText = currentSelection.left(1); + QList<QInputMethodEvent::Attribute> attributes; + QInputMethodEvent clearSelectionEvent(dummyText, attributes); + clearSelectionEvent.setCommitString(QLatin1String(""), 0, 0); sendEvent(clearSelectionEvent); + + // Now that selection is taken care of, clear the fake preedit. + QInputMethodEvent clearPreeditEvent(QLatin1String(""), attributes); + clearPreeditEvent.setCommitString(QLatin1String(""), 0, 0); + sendEvent(clearPreeditEvent); } } diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 587c0f2..1518d2d 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -552,11 +552,13 @@ void QSymbianControl::ConstructL(bool isWindowOwning, bool desktop) // the control's window qwidget->d_func()->createExtra(); - SetFocusing(true); - m_longTapDetector = QLongTapTimer::NewL(this); - m_doubleClickTimer.invalidate(); + if (!qwidget->d_func()->isGLGlobalShareWidget) { + SetFocusing(true); + m_longTapDetector = QLongTapTimer::NewL(this); + m_doubleClickTimer.invalidate(); - DrawableWindow()->SetPointerGrab(ETrue); + DrawableWindow()->SetPointerGrab(ETrue); + } } #ifdef Q_SYMBIAN_TRANSITION_EFFECTS @@ -590,25 +592,27 @@ void QSymbianControl::ConstructL(bool isWindowOwning, bool desktop) QSymbianControl::~QSymbianControl() { - // Ensure backing store is deleted before the top-level - // window is destroyed - QT_TRY { - qt_widget_private(qwidget)->topData()->backingStore.destroy(); - } QT_CATCH(const std::exception&) { - // ignore exceptions, nothing can be done - } - - if (S60->curWin == this) - S60->curWin = 0; - if (!QApplicationPrivate::is_app_closing) { + if (!qwidget->d_func()->isGLGlobalShareWidget) { // GLGlobalShareWidget doesn't interact with scene + // Ensure backing store is deleted before the top-level + // window is destroyed QT_TRY { - setFocusSafely(false); + qt_widget_private(qwidget)->topData()->backingStore.destroy(); } QT_CATCH(const std::exception&) { // ignore exceptions, nothing can be done } + + if (S60->curWin == this) + S60->curWin = 0; + if (!QApplicationPrivate::is_app_closing) { + QT_TRY { + setFocusSafely(false); + } QT_CATCH(const std::exception&) { + // ignore exceptions, nothing can be done + } + } + S60->appUi()->RemoveFromStack(this); + delete m_longTapDetector; } - S60->appUi()->RemoveFromStack(this); - delete m_longTapDetector; } void QSymbianControl::setWidget(QWidget *w) @@ -826,7 +830,8 @@ void QSymbianControl::HandlePointerEventL(const TPointerEvent& pEvent) const TPointerEvent *pointerEvent = eventData.Pointer(i); const TAdvancedPointerEvent *advEvent = pointerEvent->AdvancedPointerEvent(); if (!advEvent || advEvent->PointerNumber() == 0) { - m_longTapDetector->PointerEventL(*pointerEvent); + if (m_longTapDetector) + m_longTapDetector->PointerEventL(*pointerEvent); QT_TRYCATCH_LEAVING(HandlePointerEvent(*pointerEvent)); } } @@ -843,8 +848,8 @@ void QSymbianControl::HandlePointerEventL(const TPointerEvent& pEvent) } } #endif - - m_longTapDetector->PointerEventL(pEvent); + if (m_longTapDetector) + m_longTapDetector->PointerEventL(pEvent); QT_TRYCATCH_LEAVING(HandlePointerEvent(pEvent)); } @@ -1535,6 +1540,10 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */) if (m_ignoreFocusChanged || (qwidget->windowType() & Qt::WindowType_Mask) == Qt::Desktop) return; + // just in case + if (qwidget->d_func()->isGLGlobalShareWidget) + return; + #ifdef Q_WS_S60 if (S60->splitViewLastWidget) return; @@ -1710,7 +1719,8 @@ void QSymbianControl::HandleResourceChange(int resourceType) } void QSymbianControl::CancelLongTapTimer() { - m_longTapDetector->Cancel(); + if (m_longTapDetector) + m_longTapDetector->Cancel(); } TTypeUid::Ptr QSymbianControl::MopSupplyObject(TTypeUid id) @@ -1723,6 +1733,9 @@ TTypeUid::Ptr QSymbianControl::MopSupplyObject(TTypeUid id) void QSymbianControl::setFocusSafely(bool focus) { + if (qwidget->d_func()->isGLGlobalShareWidget) + return; + // The stack hack in here is very unfortunate, but it is the only way to ensure proper // focus in Symbian. If this is not executed, the control which happens to be on // the top of the stack may randomly be assigned focus by Symbian, for example diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 7055c6b..bceda66 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -314,6 +314,7 @@ QWidgetPrivate::QWidgetPrivate(int version) #elif defined(Q_OS_SYMBIAN) , symbianScreenNumber(0) , fixNativeOrientationCalled(false) + , isGLGlobalShareWidget(0) #endif { if (!qApp) { diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 9ac9479..94c1d63 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -916,6 +916,7 @@ public: void reparentChildren(); void registerTouchWindow(); QList<WId> widCleanupList; + uint isGLGlobalShareWidget : 1; #endif }; diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index a37c265..fefa781 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -393,16 +393,18 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de stackingFlags = ECoeStackFlagStandard; } control->MakeVisible(false); - QT_TRAP_THROWING(control->ControlEnv()->AppUi()->AddToStackL(control.data(), ECoeStackPriorityDefault, stackingFlags)); - // Avoid keyboard focus to a hidden window. - control->setFocusSafely(false); - RDrawableWindow *const drawableWindow = control->DrawableWindow(); - // Request mouse move events. - drawableWindow->PointerFilter(EPointerFilterEnterExit - | EPointerFilterMove | EPointerFilterDrag, 0); - drawableWindow->EnableVisibilityChangeEvents(); + if (!isGLGlobalShareWidget) { + QT_TRAP_THROWING(control->ControlEnv()->AppUi()->AddToStackL(control.data(), ECoeStackPriorityDefault, stackingFlags)); + // Avoid keyboard focus to a hidden window. + control->setFocusSafely(false); + RDrawableWindow *const drawableWindow = control->DrawableWindow(); + // Request mouse move events. + drawableWindow->PointerFilter(EPointerFilterEnterExit + | EPointerFilterMove | EPointerFilterDrag, 0); + drawableWindow->EnableVisibilityChangeEvents(); + } } q->setAttribute(Qt::WA_WState_Created); diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 75efa20..69f0301 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -198,8 +198,8 @@ public: hasXForm(false) { - raster = new QRasterPaintEngine(p->buffer()); - capabillities = new CapabilitiesToStateMask(pmData->blittable()->capabilities()); + raster.reset(new QRasterPaintEngine(p->buffer())); + capabillities.reset(new CapabilitiesToStateMask(pmData->blittable()->capabilities())); } inline void lock() { @@ -279,12 +279,12 @@ public: raster->d_func()->systemStateChanged(); } - QRasterPaintEngine *raster; + QScopedPointer<QRasterPaintEngine> raster; QBlittablePixmapData *pmData; bool isBlitterLocked; - CapabilitiesToStateMask *capabillities; + QScopedPointer<CapabilitiesToStateMask> capabillities; uint hasXForm; }; @@ -655,7 +655,7 @@ void QBlitterPaintEngine::setState(QPainterState *s) inline QRasterPaintEngine *QBlitterPaintEngine::raster() const { Q_D(const QBlitterPaintEngine); - return d->raster; + return d->raster.data(); } QT_END_NAMESPACE diff --git a/src/gui/text/qfontdatabase_mac.cpp b/src/gui/text/qfontdatabase_mac.cpp index 81500c7..a96224c 100644 --- a/src/gui/text/qfontdatabase_mac.cpp +++ b/src/gui/text/qfontdatabase_mac.cpp @@ -84,6 +84,46 @@ qDebug() << "first char" << hex << unicodeRange[0]; for (int i = 0; i < systems.count(); ++i) family->writingSystems[systems.at(i)] = QtFontFamily::Supported; } +#else +// this could become a list of all languages used for each writing +// system, instead of using the single most common language. +static const char *languageForWritingSystem[] = { + 0, // Any + "en", // Latin + "el", // Greek + "ru", // Cyrillic + "hy", // Armenian + "he", // Hebrew + "ar", // Arabic + "syr", // Syriac + "div", // Thaana + "hi", // Devanagari + "bn", // Bengali + "pa", // Gurmukhi + "gu", // Gujarati + "or", // Oriya + "ta", // Tamil + "te", // Telugu + "kn", // Kannada + "ml", // Malayalam + "si", // Sinhala + "th", // Thai + "lo", // Lao + "bo", // Tibetan + "my", // Myanmar + "ka", // Georgian + "km", // Khmer + "zh-cn", // SimplifiedChinese + "zh-tw", // TraditionalChinese + "ja", // Japanese + "ko", // Korean + "vi", // Vietnamese + 0, // Symbol + 0, // Ogham + 0, // Runic + 0 // N'Ko +}; +enum { LanguageCount = sizeof(languageForWritingSystem) / sizeof(const char *) }; #endif static void initializeDb() @@ -107,8 +147,18 @@ if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_5) { QCFString family_name = (CFStringRef)CTFontDescriptorCopyLocalizedAttribute(font, kCTFontFamilyNameAttribute, NULL); QCFString style_name = (CFStringRef)CTFontDescriptorCopyLocalizedAttribute(font, kCTFontStyleNameAttribute, NULL); QtFontFamily *family = db->family(family_name, true); - for(int ws = 1; ws < QFontDatabase::WritingSystemsCount; ++ws) - family->writingSystems[ws] = QtFontFamily::Supported; + + if (QCFType<CFArrayRef> languages = (CFArrayRef) CTFontDescriptorCopyAttribute(font, kCTFontLanguagesAttribute)) { + CFIndex length = CFArrayGetCount(languages); + for (int i = 1; i < LanguageCount; ++i) { + if (!languageForWritingSystem[i]) + continue; + QCFString lang = CFStringCreateWithCString(NULL, languageForWritingSystem[i], kCFStringEncodingASCII); + if (CFArrayContainsValue(languages, CFRangeMake(0, length), lang)) + family->writingSystems[i] = QtFontFamily::Supported; + } + } + QtFontFoundry *foundry = family->foundry(foundry_name, true); QtFontStyle::Key styleKey; diff --git a/src/gui/text/qfontengine_coretext.mm b/src/gui/text/qfontengine_coretext.mm index 153451e..154c44f 100644 --- a/src/gui/text/qfontengine_coretext.mm +++ b/src/gui/text/qfontengine_coretext.mm @@ -97,6 +97,7 @@ QCoreTextFontEngineMulti::QCoreTextFontEngineMulti(const QCFString &name, const if (fontDef.stretch != 100) { transform = CGAffineTransformMakeScale(float(fontDef.stretch) / float(100), 1); } + transformAdvances = QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7; QCFType<CTFontDescriptorRef> descriptor = CTFontDescriptorCreateWithNameAndSize(name, fontDef.pixelSize); QCFType<CTFontRef> baseFont = CTFontCreateWithFontDescriptor(descriptor, fontDef.pixelSize, &transform); @@ -225,6 +226,7 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay Q_ASSERT((CTRunGetStatus(run) & kCTRunStatusRightToLeft) == rtl); CFRange stringRange = CTRunGetStringRange(run); + CGAffineTransform textMatrix = CTRunGetTextMatrix(run); int prepend = 0; #if MAC_OS_X_VERSION_MAX_ALLOWED == MAC_OS_X_VERSION_10_5 UniChar beginGlyph = CFStringGetCharacterAtIndex(cfstring, stringRange.location); @@ -319,9 +321,13 @@ bool QCoreTextFontEngineMulti::stringToCMap(const QChar *str, int len, QGlyphLay for (CFIndex i = 0; i < glyphCount - 1; ++i) { int idx = rtlOffset + rtlSign * i; outGlyphs[idx] = tmpGlyphs[i] | fontIndex; - outAdvances_x[idx] = QFixed::fromReal(tmpPoints[i + 1].x - tmpPoints[i].x); + CGSize advance = CGSizeMake(tmpPoints[i + 1].x - tmpPoints[i].x, tmpPoints[i].y - tmpPoints[i + 1].y); + if (transformAdvances) + advance = CGSizeApplyAffineTransform(advance, textMatrix); + + outAdvances_x[idx] = QFixed::fromReal(advance.width); // Use negative y advance for flipped coordinate system - outAdvances_y[idx] = QFixed::fromReal(tmpPoints[i].y - tmpPoints[i + 1].y); + outAdvances_y[idx] = QFixed::fromReal(advance.height); if (fontDef.styleStrategy & QFont::ForceIntegerMetrics) { outAdvances_x[idx] = outAdvances_x[idx].round(); diff --git a/src/gui/text/qfontengine_coretext_p.h b/src/gui/text/qfontengine_coretext_p.h index 4bd80be..495e638 100644 --- a/src/gui/text/qfontengine_coretext_p.h +++ b/src/gui/text/qfontengine_coretext_p.h @@ -146,6 +146,7 @@ private: mutable QCFType<CFMutableDictionaryRef> attributeDict; CGAffineTransform transform; friend class QFontDialogPrivate; + bool transformAdvances; }; CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef); diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 2fc1dbd..71cb0e7 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -2912,7 +2912,7 @@ int QTextEngine::positionInLigature(const QScriptItem *si, int end, closestItem--; int pos = si->position + clusterStart + closestItem; // Jump to the next charStop - while (!attrs[pos].charStop && pos < end) + while (pos < end && !attrs[pos].charStop) pos++; return pos; } diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp index a490286..eb57caa 100644 --- a/src/gui/widgets/qmenu.cpp +++ b/src/gui/widgets/qmenu.cpp @@ -513,7 +513,7 @@ void QMenuPrivate::hideMenu(QMenu *menu, bool justRegister) menu->blockSignals(false); #endif // QT_NO_EFFECTS if (!justRegister) - menu->hide(); + menu->close(); } void QMenuPrivate::popupAction(QAction *action, int delay, bool activateFirst) diff --git a/src/gui/widgets/qmenubar.cpp b/src/gui/widgets/qmenubar.cpp index 3e5365c..ec79237 100644 --- a/src/gui/widgets/qmenubar.cpp +++ b/src/gui/widgets/qmenubar.cpp @@ -1111,8 +1111,10 @@ void QMenuBar::setVisible(bool visible) #else #if defined(Q_WS_MAC) || defined(Q_OS_WINCE) || defined(Q_WS_S60) if (isNativeMenuBar()) { +#ifndef Q_WS_S60 if (!visible) QWidget::setVisible(false); +#endif return; } #endif diff --git a/src/network/access/qnetworkaccessauthenticationmanager.cpp b/src/network/access/qnetworkaccessauthenticationmanager.cpp index 1b15cf9..b618ccc 100644 --- a/src/network/access/qnetworkaccessauthenticationmanager.cpp +++ b/src/network/access/qnetworkaccessauthenticationmanager.cpp @@ -283,9 +283,12 @@ QNetworkAccessAuthenticationManager::fetchCachedCredentials(const QUrl &url, QNetworkAuthenticationCache *auth = static_cast<QNetworkAuthenticationCache *>(authenticationCache.requestEntryNow(cacheKey)); - QNetworkAuthenticationCredential cred = *auth->findClosestMatch(url.path()); + QNetworkAuthenticationCredential *cred = auth->findClosestMatch(url.path()); + QNetworkAuthenticationCredential ret; + if (cred) + ret = *cred; authenticationCache.releaseEntry(cacheKey); - return cred; + return ret; } void QNetworkAccessAuthenticationManager::clearCache() diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index 0423e22..7b63567 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -220,12 +220,6 @@ void QAuthenticator::setUser(const QString &user) d->userDomain = user.left(separatorPosn); d->extractedUser = user.mid(separatorPosn + 1); d->user = user; - } else if((separatorPosn = user.indexOf(QLatin1String("@"))) != -1) { - //domain name is present - d->realm.clear(); - d->userDomain = user.mid(separatorPosn + 1); - d->extractedUser = user.left(separatorPosn); - d->user = user; } else { d->extractedUser = user; d->user = user; @@ -1381,8 +1375,9 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas int offset = QNtlmPhase3BlockBase::Size; Q_ASSERT(QNtlmPhase3BlockBase::Size == sizeof(QNtlmPhase3BlockBase)); - - if(ctx->userDomain.isEmpty()) { + + // for kerberos style user@domain logins, NTLM domain string should be left empty + if (ctx->userDomain.isEmpty() && !ctx->extractedUser.contains(QLatin1Char('@'))) { offset = qEncodeNtlmString(pb.domain, offset, ch.targetNameStr, unicode); pb.domainStr = ch.targetNameStr; } else { diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 872b19c..652bcbd 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -451,11 +451,7 @@ init_context: if (!ace.isEmpty() && !QHostAddress().setAddress(tlsHostName) && !(configuration.sslOptions & QSsl::SslOptionDisableServerNameIndication)) { -#if OPENSSL_VERSION_NUMBER >= 0x10000000L if (!q_SSL_ctrl(ssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, ace.data())) -#else - if (!q_SSL_ctrl(ssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, ace.constData())) -#endif qWarning("could not set SSL_CTRL_SET_TLSEXT_HOSTNAME, Server Name Indication disabled"); } } diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index 51ecf5d..f01f66e 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -210,11 +210,7 @@ DEFINEFUNC(int, SSL_library_init, void, DUMMYARG, return -1, return) DEFINEFUNC(void, SSL_load_error_strings, void, DUMMYARG, return, DUMMYARG) DEFINEFUNC(SSL *, SSL_new, SSL_CTX *a, a, return 0, return) #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) -#if OPENSSL_VERSION_NUMBER >= 0x10000000L DEFINEFUNC4(long, SSL_ctrl, SSL *a, a, int cmd, cmd, long larg, larg, void *parg, parg, return -1, return) -#else -DEFINEFUNC4(long, SSL_ctrl, SSL *a, a, int cmd, cmd, long larg, larg, const void *parg, parg, return -1, return) -#endif #endif DEFINEFUNC3(int, SSL_read, SSL *a, a, void *b, b, int c, c, return -1, return) DEFINEFUNC3(void, SSL_set_bio, SSL *a, a, BIO *b, b, BIO *c, c, return, DUMMYARG) diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h index 0381c4f..29934d1 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -318,11 +318,7 @@ int q_SSL_library_init(); void q_SSL_load_error_strings(); SSL *q_SSL_new(SSL_CTX *a); #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) -#if OPENSSL_VERSION_NUMBER >= 0x10000000L long q_SSL_ctrl(SSL *ssl,int cmd, long larg, void *parg); -#else -long q_SSL_ctrl(SSL *ssl,int cmd, long larg, const void *parg); -#endif #endif int q_SSL_read(SSL *a, void *b, int c); void q_SSL_set_bio(SSL *a, BIO *b, BIO *c); diff --git a/src/opengl/qgl_egl.cpp b/src/opengl/qgl_egl.cpp index 0b96350..21047d7 100644 --- a/src/opengl/qgl_egl.cpp +++ b/src/opengl/qgl_egl.cpp @@ -64,6 +64,25 @@ void qt_eglproperties_set_glformat(QEglProperties& eglProperties, const QGLForma int stencilSize = glFormat.stencilBufferSize(); int sampleCount = glFormat.samples(); +#ifdef Q_OS_SYMBIAN + // on Symbian we prefer 32-bit configs + if (glFormat.alpha() && alphaSize <= 0) + alphaSize = 8; + if (glFormat.depth() && depthSize <= 0) + depthSize = 24; + if (glFormat.stencil() && stencilSize <= 0) + stencilSize = 8; + if (glFormat.sampleBuffers() && sampleCount <= 0) + sampleCount = 1; + + redSize = redSize > 0 ? redSize : 8; + greenSize = greenSize > 0 ? greenSize : 8; + blueSize = blueSize > 0 ? blueSize : 8; + alphaSize = alphaSize > 0 ? alphaSize : 8; + depthSize = depthSize > 0 ? depthSize : 24; + stencilSize = stencilSize > 0 ? stencilSize : 8; + sampleCount = sampleCount > 0 ? sampleCount : 4; +#else // QGLFormat uses a magic value of -1 to indicate "don't care", even when a buffer of that // type has been requested. So we must check QGLFormat's booleans too if size is -1: if (glFormat.alpha() && alphaSize <= 0) @@ -101,6 +120,7 @@ void qt_eglproperties_set_glformat(QEglProperties& eglProperties, const QGLForma depthSize = depthSize > 0 ? depthSize : 0; stencilSize = stencilSize > 0 ? stencilSize : 0; sampleCount = sampleCount > 0 ? sampleCount : 0; +#endif eglProperties.setValue(EGL_RED_SIZE, redSize); eglProperties.setValue(EGL_GREEN_SIZE, greenSize); diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index df09dfd..89153d9 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -106,6 +106,10 @@ class QMacWindowChangeEvent; class QWSGLWindowSurface; #endif +#ifdef Q_OS_SYMBIAN +extern bool qt_initializing_gl_share_widget(); +#endif + #ifndef QT_NO_EGL class QEglContext; #endif @@ -183,6 +187,10 @@ public: #endif { isGLWidget = 1; +#if defined(Q_OS_SYMBIAN) + if (qt_initializing_gl_share_widget()) + isGLGlobalShareWidget = 1; +#endif } ~QGLWidgetPrivate() {} diff --git a/src/opengl/qgl_symbian.cpp b/src/opengl/qgl_symbian.cpp index 0148304..7d343f6 100644 --- a/src/opengl/qgl_symbian.cpp +++ b/src/opengl/qgl_symbian.cpp @@ -181,14 +181,19 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) // almost same as d->ownsEglContext = true; d->eglContext->setApi(QEgl::OpenGL); - // Allow apps to override ability to use multisampling by setting an environment variable. Eg: - // qputenv("QT_SYMBIAN_DISABLE_GL_MULTISAMPLE", "1"); - // Added to allow camera app to start with limited memory. - if (!QSymbianGraphicsSystemEx::hasBCM2727() && !qgetenv("QT_SYMBIAN_DISABLE_GL_MULTISAMPLE").toInt()) { - // Most likely we have hw support for multisampling - // so let's enable it. - d->glFormat.setSampleBuffers(1); - d->glFormat.setSamples(4); + if (d->glFormat.samples() == EGL_DONT_CARE) { + // Allow apps to override ability to use multisampling by setting an environment variable. Eg: + // qputenv("QT_SYMBIAN_DISABLE_GL_MULTISAMPLE", "1"); + // Added to allow camera app to start with limited memory. + if (!QSymbianGraphicsSystemEx::hasBCM2727() && !qgetenv("QT_SYMBIAN_DISABLE_GL_MULTISAMPLE").toInt()) { + // Most likely we have hw support for multisampling + // so let's enable it. + d->glFormat.setSampleBuffers(1); + d->glFormat.setSamples(4); + } else { + d->glFormat.setSampleBuffers(0); + d->glFormat.setSamples(1); + } } // If the device is a widget with WA_TranslucentBackground set, make sure the glFormat diff --git a/src/opengl/qgltexturepool.cpp b/src/opengl/qgltexturepool.cpp index d19b1db..9ad66f2 100644 --- a/src/opengl/qgltexturepool.cpp +++ b/src/opengl/qgltexturepool.cpp @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE Q_OPENGL_EXPORT extern QGLWidget* qt_gl_share_widget(); -Q_GLOBAL_STATIC(QGLTexturePool, qt_gl_texture_pool) +static QGLTexturePool *qt_gl_texture_pool = 0; class QGLTexturePoolPrivate { @@ -69,7 +69,9 @@ QGLTexturePool::~QGLTexturePool() QGLTexturePool *QGLTexturePool::instance() { - return qt_gl_texture_pool(); + if (!qt_gl_texture_pool) + qt_gl_texture_pool = new QGLTexturePool(); + return qt_gl_texture_pool; } GLuint QGLTexturePool::createTexture(GLenum target, diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index a15084b..d512946 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -184,28 +184,29 @@ QGLGraphicsSystem::QGLGraphicsSystem(bool useX11GL) class QGLGlobalShareWidget { public: - QGLGlobalShareWidget() : widget(0), initializing(false) { + QGLGlobalShareWidget() : widget(0), init(false) { created = true; } QGLWidget *shareWidget() { - if (!initializing && !widget && !cleanedUp) { - initializing = true; + if (!init && !widget && !cleanedUp) { + init = true; widget = new QGLWidget(QGLFormat(QGL::SingleBuffer | QGL::NoDepthBuffer | QGL::NoStencilBuffer)); #ifdef Q_OS_SYMBIAN if (!widget->context()->isValid()) { delete widget; widget = 0; - initializing = false; + init = false; return 0; } #endif + widget->resize(1, 1); // We don't need this internal widget to appear in QApplication::topLevelWidgets() if (QWidgetPrivate::allWidgets) QWidgetPrivate::allWidgets->remove(widget); - initializing = false; + init = false; } return widget; } @@ -232,12 +233,17 @@ public: cleanedUp = false; } + bool initializing() + { + return init; + } + static bool cleanedUp; static bool created; private: QGLWidget *widget; - bool initializing; + bool init; }; bool QGLGlobalShareWidget::cleanedUp = false; @@ -268,6 +274,13 @@ void qt_destroy_gl_share_widget() _qt_gl_share_widget()->destroy(); } +bool qt_initializing_gl_share_widget() +{ + if (QGLGlobalShareWidget::created) + return _qt_gl_share_widget()->initializing(); + return false; +} + const QGLContext *qt_gl_share_context() { QGLWidget *widget = qt_gl_share_widget(); diff --git a/src/opengl/qwindowsurface_gl_p.h b/src/opengl/qwindowsurface_gl_p.h index 91d1f9e..6c8b71f 100644 --- a/src/opengl/qwindowsurface_gl_p.h +++ b/src/opengl/qwindowsurface_gl_p.h @@ -68,6 +68,7 @@ struct QGLWindowSurfacePrivate; Q_OPENGL_EXPORT QGLWidget* qt_gl_share_widget(); Q_OPENGL_EXPORT void qt_destroy_gl_share_widget(); +bool qt_initializing_gl_share_widget(); class QGLWindowSurfaceGLPaintDevice : public QGLPaintDevice { diff --git a/src/openvg/qvgimagepool.cpp b/src/openvg/qvgimagepool.cpp index cd1caf4..3a187b0 100644 --- a/src/openvg/qvgimagepool.cpp +++ b/src/openvg/qvgimagepool.cpp @@ -44,7 +44,7 @@ QT_BEGIN_NAMESPACE -Q_GLOBAL_STATIC(QVGImagePool, qt_vg_image_pool) +static QVGImagePool *qt_vg_image_pool = 0; class QVGImagePoolPrivate { @@ -66,7 +66,16 @@ QVGImagePool::~QVGImagePool() QVGImagePool *QVGImagePool::instance() { - return qt_vg_image_pool(); + if (!qt_vg_image_pool) + qt_vg_image_pool = new QVGImagePool(); + return qt_vg_image_pool; +} + +void QVGImagePool::setImagePool(QVGImagePool *pool) +{ + if (qt_vg_image_pool != pool) + delete qt_vg_image_pool; + qt_vg_image_pool = pool; } VGImage QVGImagePool::createTemporaryImage(VGImageFormat format, diff --git a/src/openvg/qvgimagepool_p.h b/src/openvg/qvgimagepool_p.h index e4fd4e1..07c57bf 100644 --- a/src/openvg/qvgimagepool_p.h +++ b/src/openvg/qvgimagepool_p.h @@ -69,6 +69,10 @@ public: static QVGImagePool *instance(); + // This function can be used from system-specific graphics system + // plugins to alter the image allocation strategy. + static void setImagePool(QVGImagePool *pool); + // Create a new VGImage from the pool with the specified parameters // that is not associated with a pixmap. The VGImage is returned to // the pool when releaseImage() is called. diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro index 65c49e3..aaf4057 100644 --- a/src/plugins/platforms/directfb/directfb.pro +++ b/src/plugins/platforms/directfb/directfb.pro @@ -20,7 +20,8 @@ SOURCES = main.cpp \ qdirectfbinput.cpp \ qdirectfbcursor.cpp \ qdirectfbwindow.cpp \ - qdirectfbglcontext.cpp + qdirectfbglcontext.cpp \ + qdirectfbscreen.cpp HEADERS = qdirectfbintegration.h \ qdirectfbwindowsurface.h \ qdirectfbblitter.h \ @@ -28,7 +29,8 @@ HEADERS = qdirectfbintegration.h \ qdirectfbinput.h \ qdirectfbcursor.h \ qdirectfbwindow.h \ - qdirectfbglcontext.h + qdirectfbglcontext.h \ + qdirectfbscreen.h include(../fontdatabases/genericunix/genericunix.pri) target.path += $$[QT_INSTALL_PLUGINS]/platforms diff --git a/src/plugins/platforms/directfb/main.cpp b/src/plugins/platforms/directfb/main.cpp index 312fc41..da37b0a 100644 --- a/src/plugins/platforms/directfb/main.cpp +++ b/src/plugins/platforms/directfb/main.cpp @@ -44,6 +44,16 @@ QT_BEGIN_NAMESPACE +#ifdef DIRECTFB_GL_EGL +#define QT_EGL_BACKEND_STRING(list) list << "directfbegl"; +#define QT_EGL_BACKEND_CREATE(list, out) \ + if (list.toLower() == "directfbegl") \ + out = new QDirectFbIntegrationEGL; +#else +#define QT_EGL_BACKEND_STRING(list) +#define QT_EGL_BACKEND_CREATE(system, out) +#endif + class QDirectFbIntegrationPlugin : public QPlatformIntegrationPlugin { public: @@ -55,16 +65,24 @@ QStringList QDirectFbIntegrationPlugin::keys() const { QStringList list; list << "directfb"; + QT_EGL_BACKEND_STRING(list); return list; } QPlatformIntegration * QDirectFbIntegrationPlugin::create(const QString& system, const QStringList& paramList) { Q_UNUSED(paramList); + QDirectFbIntegration *integration = 0; + if (system.toLower() == "directfb") - return new QDirectFbIntegration; + integration = new QDirectFbIntegration; + QT_EGL_BACKEND_CREATE(system, integration) + + if (!integration) + return 0; - return 0; + integration->initialize(); + return integration; } Q_EXPORT_PLUGIN2(directfb, QDirectFbIntegrationPlugin) diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.cpp b/src/plugins/platforms/directfb/qdirectfbblitter.cpp index 86a8bf7..af060aa 100644 --- a/src/plugins/platforms/directfb/qdirectfbblitter.cpp +++ b/src/plugins/platforms/directfb/qdirectfbblitter.cpp @@ -45,48 +45,79 @@ #include <QtGui/private/qpixmap_blitter_p.h> #include <QDebug> +#include <QFile> #include <directfb.h> +QT_BEGIN_NAMESPACE + +static QBlittable::Capabilities dfb_blitter_capabilities() +{ + return QBlittable::Capabilities(QBlittable::SolidRectCapability + |QBlittable::SourcePixmapCapability + |QBlittable::SourceOverPixmapCapability + |QBlittable::SourceOverScaledPixmapCapability); +} + QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, IDirectFBSurface *surface) - : QBlittable(rect, QBlittable::Capabilities(QBlittable::SolidRectCapability - |QBlittable::SourcePixmapCapability - |QBlittable::SourceOverPixmapCapability - |QBlittable::SourceOverScaledPixmapCapability)) + : QBlittable(rect, dfb_blitter_capabilities()) + , m_surface(surface) { - if (surface) { - m_surface = surface; - } else { - DFBSurfaceDescription surfaceDesc; - memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription)); - surfaceDesc.width = rect.width(); - surfaceDesc.height = rect.height(); + m_surface->AddRef(m_surface.data()); +} + +QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, bool alpha) + : QBlittable(rect, dfb_blitter_capabilities()) +{ + DFBSurfaceDescription surfaceDesc; + memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription)); + surfaceDesc.width = rect.width(); + surfaceDesc.height = rect.height(); + + if (alpha) { surfaceDesc.caps = DSCAPS_PREMULTIPLIED; - surfaceDesc.pixelformat = DSPF_ARGB; + surfaceDesc.pixelformat = QDirectFbBlitter::alphaPixmapFormat(); surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS | DSDESC_PIXELFORMAT); - - IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); - dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); - m_surface->Clear(m_surface,0,0,0,0); + } else { + surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT); + surfaceDesc.pixelformat = QDirectFbBlitter::pixmapFormat(); } + + IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); + dfb->CreateSurface(dfb , &surfaceDesc, m_surface.outPtr()); + m_surface->Clear(m_surface.data(), 0, 0, 0, 0); } QDirectFbBlitter::~QDirectFbBlitter() { unlock(); - m_surface->Release(m_surface); +} + +DFBSurfacePixelFormat QDirectFbBlitter::alphaPixmapFormat() +{ + return DSPF_ARGB; +} + +DFBSurfacePixelFormat QDirectFbBlitter::pixmapFormat() +{ + return DSPF_RGB32; +} + +DFBSurfacePixelFormat QDirectFbBlitter::selectPixmapFormat(bool withAlpha) +{ + return withAlpha ? alphaPixmapFormat() : pixmapFormat(); } void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) { - m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha()); + m_surface->SetColor(m_surface.data(), color.red(), color.green(), color.blue(), color.alpha()); // When the blitter api supports non opaque blits, also remember to change // qpixmap_blitter.cpp::fill // DFBSurfaceDrawingFlags drawingFlags = color.alpha() ? DSDRAW_BLEND : DSDRAW_NOFX; // m_surface->SetDrawingFlags(m_surface, drawingFlags); - m_surface->SetDrawingFlags(m_surface, DSDRAW_NOFX); - m_surface->FillRectangle(m_surface, rect.x(), rect.y(), + m_surface->SetDrawingFlags(m_surface.data(), DSDRAW_NOFX); + m_surface->FillRectangle(m_surface.data(), rect.x(), rect.y(), rect.width(), rect.height()); } @@ -99,7 +130,7 @@ void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, con QDirectFbBlitter *dfbBlitter = static_cast<QDirectFbBlitter *>(blitPm->blittable()); dfbBlitter->unlock(); - IDirectFBSurface *s = dfbBlitter->m_surface; + IDirectFBSurface *s = dfbBlitter->m_surface.data(); DFBSurfaceBlittingFlags blittingFlags = DSBLIT_NOFX; DFBSurfacePorterDuffRule porterDuff = DSPD_SRC; @@ -108,18 +139,18 @@ void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, con porterDuff = DSPD_SRC_OVER; } - m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); - m_surface->SetPorterDuff(m_surface,porterDuff); - m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA); + m_surface->SetBlittingFlags(m_surface.data(), DFBSurfaceBlittingFlags(blittingFlags)); + m_surface->SetPorterDuff(m_surface.data(), porterDuff); + m_surface->SetDstBlendFunction(m_surface.data(), DSBF_INVSRCALPHA); const DFBRectangle sRect = { srcRect.x(), srcRect.y(), srcRect.width(), srcRect.height() }; DFBResult result; if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) - result = m_surface->Blit(m_surface, s, &sRect, rect.x(), rect.y()); + result = m_surface->Blit(m_surface.data(), s, &sRect, rect.x(), rect.y()); else { const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() }; - result = m_surface->StretchBlit(m_surface, s, &sRect, &dRect); + result = m_surface->StretchBlit(m_surface.data(), s, &sRect, &dRect); } if (result != DFB_OK) DirectFBError("QDirectFBBlitter::drawPixmap()", result); @@ -132,15 +163,15 @@ QImage *QDirectFbBlitter::doLock() void *mem; int bpl; - const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast<void**>(&mem), &bpl); + const DFBResult result = m_surface->Lock(m_surface.data(), DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast<void**>(&mem), &bpl); if (result == DFB_OK) { DFBSurfacePixelFormat dfbFormat; DFBSurfaceCapabilities dfbCaps; - m_surface->GetPixelFormat(m_surface,&dfbFormat); - m_surface->GetCapabilities(m_surface,&dfbCaps); + m_surface->GetPixelFormat(m_surface.data(), &dfbFormat); + m_surface->GetCapabilities(m_surface.data(), &dfbCaps); QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps); int w, h; - m_surface->GetSize(m_surface,&w,&h); + m_surface->GetSize(m_surface.data(), &w, &h); m_image = QImage(static_cast<uchar *>(mem),w,h,bpl,format); } else { DirectFBError("Failed to lock image", result); @@ -149,7 +180,97 @@ QImage *QDirectFbBlitter::doLock() return &m_image; } +bool QDirectFbBlitterPlatformPixmap::fromDataBufferDescription(const DFBDataBufferDescription &dataBufferDescription) +{ + DFBResult result; + IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); + + // Create a data buffer + QDirectFBPointer<IDirectFBDataBuffer> dataBuffer; + result = dfb->CreateDataBuffer(dfb, &dataBufferDescription, dataBuffer.outPtr()); + if (result != DFB_OK) { + DirectFBError(QDFB_PRETTY, result); + return false; + } + + // Create the image provider + QDirectFBPointer<IDirectFBImageProvider> provider; + result = dataBuffer->CreateImageProvider(dataBuffer.data(), provider.outPtr()); + if (result != DFB_OK) { + DirectFBError(QDFB_PRETTY, result); + return false; + } + + // Extract image information + DFBImageDescription imageDescription; + result = provider->GetImageDescription(provider.data(), &imageDescription); + if (result != DFB_OK) { + DirectFBError(QDFB_PRETTY, result); + return false; + } + + // Can we handle this directlu? + if (imageDescription.caps & DICAPS_COLORKEY) + return false; + + DFBSurfaceDescription surfaceDescription; + result = provider->GetSurfaceDescription(provider.data(), &surfaceDescription); + if (result != DFB_OK) { + DirectFBError(QDFB_PRETTY, result); + return false; + } + + m_alpha = imageDescription.caps & DICAPS_ALPHACHANNEL; + resize(surfaceDescription.width, surfaceDescription.height); + // TODO: FIXME; update d + + + result = provider->RenderTo(provider.data(), dfbBlitter()->dfbSurface(), 0); + if (result != DFB_OK) { + DirectFBError(QDFB_PRETTY, result); + return false; + } + + return true; +} + +bool QDirectFbBlitterPlatformPixmap::fromFile(const QString &filename, const char *format, + Qt::ImageConversionFlags flags) +{ + // If we can't find the file, pass it on to the base class as it is + // trying harder by appending various extensions to the path. + if (!QFile::exists(filename)) + return QBlittablePixmapData::fromFile(filename, format, flags); + + // Stop if there is a requirement for colors + if (flags != Qt::AutoColor) + return QBlittablePixmapData::fromFile(filename, format, flags); + + // Deal with resources + if (filename.startsWith(QLatin1Char(':'))) { // resource + QFile file(filename); + if (!file.open(QIODevice::ReadOnly)) + return false; + const QByteArray data = file.readAll(); + file.close(); + return fromData(reinterpret_cast<const uchar*>(data.constData()), data.size(), format, flags); + } + + // Try to use directfb to load it. + DFBDataBufferDescription description; + description.flags = DBDESC_FILE; + const QByteArray fileNameData = filename.toLocal8Bit(); + description.file = fileNameData.constData(); + if (fromDataBufferDescription(description)) + return true; + + // Fallback + return QBlittablePixmapData::fromFile(filename, format, flags); +} + void QDirectFbBlitter::doUnlock() { - m_surface->Unlock(m_surface); + m_surface->Unlock(m_surface.data()); } + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.h b/src/plugins/platforms/directfb/qdirectfbblitter.h index 16d7599..fe39aaf 100644 --- a/src/plugins/platforms/directfb/qdirectfbblitter.h +++ b/src/plugins/platforms/directfb/qdirectfbblitter.h @@ -48,29 +48,63 @@ #include <directfb.h> +QT_BEGIN_NAMESPACE + class QDirectFbBlitter : public QBlittable { public: - QDirectFbBlitter(const QSize &size, IDirectFBSurface *surface = 0); + QDirectFbBlitter(const QSize &size, IDirectFBSurface *surface); + QDirectFbBlitter(const QSize &size, bool alpha); virtual ~QDirectFbBlitter(); virtual void fillRect(const QRectF &rect, const QColor &color); virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); + IDirectFBSurface *dfbSurface() const; + + static DFBSurfacePixelFormat alphaPixmapFormat(); + static DFBSurfacePixelFormat pixmapFormat(); + static DFBSurfacePixelFormat selectPixmapFormat(bool withAlpha); + protected: virtual QImage *doLock(); virtual void doUnlock(); - IDirectFBSurface *m_surface; + QDirectFBPointer<IDirectFBSurface> m_surface; QImage m_image; friend class QDirectFbConvenience; }; -class QDirectFbBlitterPixmapData : public QBlittablePixmapData +class QDirectFbBlitterPlatformPixmap : public QBlittablePixmapData { public: - QBlittable *createBlittable(const QSize &size) const { return new QDirectFbBlitter(size); } + QBlittable *createBlittable(const QSize &size, bool alpha) const; + + QDirectFbBlitter *dfbBlitter() const; + + virtual bool fromFile(const QString &filename, const char *format, + Qt::ImageConversionFlags flags); + +private: + bool fromDataBufferDescription(const DFBDataBufferDescription &); }; +inline QBlittable *QDirectFbBlitterPlatformPixmap::createBlittable(const QSize& size, bool alpha) const +{ + return new QDirectFbBlitter(size, alpha); +} + +inline QDirectFbBlitter *QDirectFbBlitterPlatformPixmap::dfbBlitter() const +{ + return static_cast<QDirectFbBlitter*>(blittable()); +} + +inline IDirectFBSurface *QDirectFbBlitter::dfbSurface() const +{ + return m_surface.data(); +} + +QT_END_NAMESPACE + #endif // QDIRECTFBBLITTER_H diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.cpp b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp index 37810dc..83c71b3 100644 --- a/src/plugins/platforms/directfb/qdirectfbconvenience.cpp +++ b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp @@ -41,16 +41,22 @@ #include "qdirectfbconvenience.h" #include "qdirectfbblitter.h" +#include "qdirectfbscreen.h" #include <private/qpixmap_blitter_p.h> +#include <QtGui/QWidget> +#include <QtGui/QScreen> + +QT_BEGIN_NAMESPACE + IDirectFB *QDirectFbConvenience::dfbInterface() { static IDirectFB *dfb = 0; if (!dfb) { DFBResult result = DirectFBCreate(&dfb); if (result != DFB_OK) { - DirectFBError("QDirectFBConvenience: error creating DirectFB interface",result); + DirectFBErrorFatal("QDirectFBConvenience: error creating DirectFB interface", result); return 0; } } @@ -61,10 +67,9 @@ IDirectFBDisplayLayer *QDirectFbConvenience::dfbDisplayLayer(int display) { IDirectFBDisplayLayer *layer; DFBResult result = QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),display,&layer); - if (result != DFB_OK) { - DirectFBError("QDirectFbConvenience: " - "Unable to get primary display layer!", result); - } + if (result != DFB_OK) + DirectFBErrorFatal("QDirectFbConvenience: " + "Unable to get primary display layer!", result); return layer; } @@ -106,13 +111,17 @@ int QDirectFbConvenience::colorDepthForSurface(const DFBSurfacePixelFormat forma return ((0x1f << 7) & format) >> 7; } -IDirectFBSurface *QDirectFbConvenience::dfbSurfaceForPixmapData(QPixmapData *pixmapData) +/** + * This is borrowing the reference of the QDirectFbBlitter. You may not store this + * pointer as a class member but must only use it locally. + */ +IDirectFBSurface *QDirectFbConvenience::dfbSurfaceForPlatformPixmap(QPixmapData *handle) { - QBlittablePixmapData *blittablePmData = static_cast<QBlittablePixmapData *>(pixmapData); + QBlittablePixmapData *blittablePmData = static_cast<QBlittablePixmapData *>(handle); if (blittablePmData) { QBlittable *blittable = blittablePmData->blittable(); QDirectFbBlitter *dfbBlitter = static_cast<QDirectFbBlitter *>(blittable); - return dfbBlitter->m_surface; + return dfbBlitter->m_surface.data(); } return 0; } @@ -374,3 +383,15 @@ QDirectFbKeyMap::QDirectFbKeyMap() insert(DIKS_CURLY_BRACKET_RIGHT , Qt::Key_BraceRight); insert(DIKS_TILDE , Qt::Key_AsciiTilde); } + +QDirectFbScreen *toDfbScreen(QWidget *window) +{ + return static_cast<QDirectFbScreen*>(QPlatformScreen::platformScreenForWidget(window)); +} + +IDirectFBDisplayLayer *toDfbLayer(QPlatformScreen *screen) +{ + return static_cast<QDirectFbScreen*>(screen)->dfbLayer(); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.h b/src/plugins/platforms/directfb/qdirectfbconvenience.h index c82bea8..d009393 100644 --- a/src/plugins/platforms/directfb/qdirectfbconvenience.h +++ b/src/plugins/platforms/directfb/qdirectfbconvenience.h @@ -49,6 +49,11 @@ #include <directfb.h> +QT_BEGIN_NAMESPACE + +class QDirectFbScreen; +class QPlatformScreen; + class QDirectFbKeyMap: public QHash<DFBInputDeviceKeySymbol, Qt::Key> { public: @@ -67,7 +72,7 @@ public: static IDirectFB *dfbInterface(); static IDirectFBDisplayLayer *dfbDisplayLayer(int display = DLID_PRIMARY); - static IDirectFBSurface *dfbSurfaceForPixmapData(QPixmapData *); + static IDirectFBSurface *dfbSurfaceForPlatformPixmap(QPixmapData *); static Qt::MouseButton mouseButton(DFBInputDeviceButtonIdentifier identifier); static Qt::MouseButtons mouseButtons(DFBInputDeviceButtonMask mask); @@ -81,4 +86,41 @@ private: friend class QDirectFbIntegration; }; +template <typename T> struct QDirectFBInterfaceCleanupHandler +{ + static void cleanup(T *t) + { + if (!t) + return; + t->Release(t); + } +}; + +template <typename T> +class QDirectFBPointer : public QScopedPointer<T, QDirectFBInterfaceCleanupHandler<T> > +{ +public: + QDirectFBPointer(T *t = 0) + : QScopedPointer<T, QDirectFBInterfaceCleanupHandler<T> >(t) + {} + + T** outPtr() + { + this->reset(0); + return &this->d; + } +}; + +// Helper conversions from internal to DFB types +QDirectFbScreen *toDfbScreen(QWidget *window); +IDirectFBDisplayLayer *toDfbLayer(QPlatformScreen *screen); + +#define QDFB_STRINGIFY(x) #x +#define QDFB_TOSTRING(x) QDFB_STRINGIFY(x) +#define QDFB_PRETTY \ + (__FILE__ ":" QDFB_TOSTRING(__LINE__)) + +QT_END_NAMESPACE + + #endif // QDIRECTFBCONVENIENCE_H diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.cpp b/src/plugins/platforms/directfb/qdirectfbcursor.cpp index 8a38bc4..ea9be84 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.cpp +++ b/src/plugins/platforms/directfb/qdirectfbcursor.cpp @@ -42,26 +42,25 @@ #include "qdirectfbcursor.h" #include "qdirectfbconvenience.h" +QT_BEGIN_NAMESPACE -QDirectFBCursor::QDirectFBCursor(QPlatformScreen* screen) : - QPlatformCursor(screen), surface(0) +QDirectFBCursor::QDirectFBCursor(QPlatformScreen *screen) + : QPlatformCursor(screen) { - QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY, &m_layer); - image = new QPlatformCursorImage(0, 0, 0, 0, 0, 0); + m_image.reset(new QPlatformCursorImage(0, 0, 0, 0, 0, 0)); } -void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) +void QDirectFBCursor::changeCursor(QCursor *cursor, QWidget *) { - Q_UNUSED(widget); int xSpot; int ySpot; QPixmap map; if (cursor->shape() != Qt::BitmapCursor) { - image->set(cursor->shape()); - xSpot = image->hotspot().x(); - ySpot = image->hotspot().y(); - QImage *i = image->image(); + m_image->set(cursor->shape()); + xSpot = m_image->hotspot().x(); + ySpot = m_image->hotspot().y(); + QImage *i = m_image->image(); map = QPixmap::fromImage(*i); } else { QPoint point = cursor->hotSpot(); @@ -70,11 +69,18 @@ void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) map = cursor->pixmap(); } - IDirectFBSurface *surface = QDirectFbConvenience::dfbSurfaceForPixmapData(map.pixmapData()); + DFBResult res; + IDirectFBDisplayLayer *layer = toDfbLayer(screen); + IDirectFBSurface* surface(QDirectFbConvenience::dfbSurfaceForPlatformPixmap(map.pixmapData())); - if (m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE) != DFB_OK) { + res = layer->SetCooperativeLevel(layer, DLSCL_ADMINISTRATIVE); + if (res != DFB_OK) { + DirectFBError("Failed to set DLSCL_ADMINISTRATIVE", res); return; } - m_layer->SetCursorShape( m_layer, surface, xSpot, ySpot); - m_layer->SetCooperativeLevel(m_layer, DLSCL_SHARED); + + layer->SetCursorShape(layer, surface, xSpot, ySpot); + layer->SetCooperativeLevel(layer, DLSCL_SHARED); } + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h index b148de5..2f8efba 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.h +++ b/src/plugins/platforms/directfb/qdirectfbcursor.h @@ -44,20 +44,24 @@ #include <QPlatformCursor> #include <directfb.h> + +#include "qdirectfbconvenience.h" + +QT_BEGIN_NAMESPACE + class QDirectFbScreen; class QDirectFbBlitter; class QDirectFBCursor : public QPlatformCursor { public: - QDirectFBCursor(QPlatformScreen *screem); - void changeCursor(QCursor * cursor, QWidget * widget); + QDirectFBCursor(QPlatformScreen *screen); + void changeCursor(QCursor *cursor, QWidget *window); private: - IDirectFBDisplayLayer * m_layer; - IDirectFBSurface * surface; - QPlatformCursorImage * image; - QDirectFbBlitter *blitter; + QScopedPointer<QPlatformCursorImage> m_image; }; +QT_END_NAMESPACE + #endif // QDIRECTFBCURSOR_H diff --git a/src/plugins/platforms/directfb/qdirectfbglcontext.cpp b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp index aca28f1..4111774 100644 --- a/src/plugins/platforms/directfb/qdirectfbglcontext.cpp +++ b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp @@ -45,6 +45,8 @@ #include <QDebug> +QT_BEGIN_NAMESPACE + QDirectFbGLContext::QDirectFbGLContext(IDirectFBGL *glContext) : m_dfbGlContext(glContext) { @@ -99,3 +101,5 @@ QPlatformWindowFormat QDirectFbGLContext::platformWindowFormat() const { return m_windowFormat; } + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp index d35cea5..34dbc9d 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.cpp +++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp @@ -47,65 +47,71 @@ #include <QWindowSystemInterface> #include <QMouseEvent> #include <QEvent> -#include <QApplication> #include <directfb.h> -QDirectFbInput::QDirectFbInput(QObject *parent) - : QObject(parent), m_shouldStop(false) -{ - m_dfbInterface = QDirectFbConvenience::dfbInterface(); +QT_BEGIN_NAMESPACE - DFBResult ok = m_dfbInterface->CreateEventBuffer(m_dfbInterface,&m_eventBuffer); +QDirectFbInput::QDirectFbInput(IDirectFB *dfb, IDirectFBDisplayLayer *dfbLayer) + : m_dfbInterface(dfb) + , m_dfbDisplayLayer(dfbLayer) + , m_shouldStop(false) +{ + DFBResult ok = m_dfbInterface->CreateEventBuffer(m_dfbInterface, m_eventBuffer.outPtr()); if (ok != DFB_OK) DirectFBError("Failed to initialise eventbuffer", ok); - - m_dfbInterface->GetDisplayLayer(m_dfbInterface,DLID_PRIMARY, &m_dfbDisplayLayer); - } -void QDirectFbInput::runInputEventLoop() +void QDirectFbInput::run() { - while (true) { - m_eventBuffer->WaitForEvent(m_eventBuffer); - if (m_shouldStop) { - m_waitStop.release(); - break; - } - handleEvents(); + while (!m_shouldStop) { + if (m_eventBuffer->WaitForEvent(m_eventBuffer.data()) == DFB_OK) + handleEvents(); } } void QDirectFbInput::stopInputEventLoop() { m_shouldStop = true; - m_waitStop.acquire(); + m_eventBuffer->WakeUp(m_eventBuffer.data()); } -void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) +void QDirectFbInput::addWindow(IDirectFBWindow *window, QWidget *platformWindow) { - m_tlwMap.insert(id,tlw); - IDirectFBWindow *window; - m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer,id,&window); + DFBResult res; + DFBWindowID id; - window->AttachEventBuffer(window,m_eventBuffer); + res = window->GetID(window, &id); + if (res != DFB_OK) { + DirectFBError("QDirectFbInput::addWindow", res); + return; + } + + m_tlwMap.insert(id, platformWindow); + window->AttachEventBuffer(window, m_eventBuffer.data()); } -void QDirectFbInput::removeWindow(WId wId) +void QDirectFbInput::removeWindow(IDirectFBWindow *window) { - IDirectFBWindow *window; - m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer,wId, &window); + DFBResult res; + DFBWindowID id; - window->DetachEventBuffer(window,m_eventBuffer); - m_tlwMap.remove(wId); + res = window->GetID(window, &id); + if (res != DFB_OK) { + DirectFBError("QDirectFbInput::removeWindow", res); + return; + } + + window->DetachEventBuffer(window, m_eventBuffer.data()); + m_tlwMap.remove(id); } void QDirectFbInput::handleEvents() { - DFBResult hasEvent = m_eventBuffer->HasEvent(m_eventBuffer); + DFBResult hasEvent = m_eventBuffer->HasEvent(m_eventBuffer.data()); while(hasEvent == DFB_OK){ DFBEvent event; - DFBResult ok = m_eventBuffer->GetEvent(m_eventBuffer,&event); + DFBResult ok = m_eventBuffer->GetEvent(m_eventBuffer.data(), &event); if (ok != DFB_OK) DirectFBError("Failed to get event",ok); if (event.clazz == DFEC_WINDOW) { @@ -131,7 +137,7 @@ void QDirectFbInput::handleEvents() } - hasEvent = m_eventBuffer->HasEvent(m_eventBuffer); + hasEvent = m_eventBuffer->HasEvent(m_eventBuffer.data()); } } @@ -141,17 +147,12 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) QPoint globalPos = globalPoint(event); Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); - IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); - IDirectFBWindow *window; - layer->GetWindow(layer,event.window.window_id,&window); + QDirectFBPointer<IDirectFBDisplayLayer> layer(QDirectFbConvenience::dfbDisplayLayer()); + QDirectFBPointer<IDirectFBWindow> window; + layer->GetWindow(layer.data(), event.window.window_id, window.outPtr()); long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - if (event.window.type == DWET_BUTTONDOWN) { - window->GrabPointer(window); - } else if (event.window.type == DWET_BUTTONUP) { - window->UngrabPointer(window); - } QWidget *tlw = m_tlwMap.value(event.window.window_id); QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons); } @@ -199,10 +200,11 @@ void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) inline QPoint QDirectFbInput::globalPoint(const DFBEvent &event) const { - IDirectFBWindow *window; - m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer,event.window.window_id,&window); + QDirectFBPointer<IDirectFBWindow> window; + m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer, event.window.window_id, window.outPtr()); int x,y; - window->GetPosition(window,&x,&y); + window->GetPosition(window.data(), &x, &y); return QPoint(event.window.cx +x, event.window.cy + y); } +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h index 3b8008f..698ee3a 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.h +++ b/src/plugins/platforms/directfb/qdirectfbinput.h @@ -42,30 +42,30 @@ #ifndef QDIRECTFBINPUT_H #define QDIRECTFBINPUT_H -#include <QSemaphore> -#include <QObject> +#include <QThread> #include <QHash> #include <QPoint> #include <QEvent> #include <QtGui/qwindowdefs.h> -#include <directfb.h> +#include "qdirectfbconvenience.h" -class QDirectFbInput : public QObject +class QDirectFbInput : public QThread { Q_OBJECT public: - QDirectFbInput(QObject *parent); - void addWindow(DFBWindowID id, QWidget *tlw); - void removeWindow(WId wId); + QDirectFbInput(IDirectFB *dfb, IDirectFBDisplayLayer *dfbLayer); + void addWindow(IDirectFBWindow *window, QWidget *platformWindow); + void removeWindow(IDirectFBWindow *window); -public slots: - void runInputEventLoop(); void stopInputEventLoop(); - void handleEvents(); + +protected: + void run(); private: + void handleEvents(); void handleMouseEvents(const DFBEvent &event); void handleWheelEvent(const DFBEvent &event); void handleKeyEvents(const DFBEvent &event); @@ -75,11 +75,9 @@ private: IDirectFB *m_dfbInterface; IDirectFBDisplayLayer *m_dfbDisplayLayer; - IDirectFBEventBuffer *m_eventBuffer; + QDirectFBPointer<IDirectFBEventBuffer> m_eventBuffer; bool m_shouldStop; - QSemaphore m_waitStop; - QHash<DFBWindowID,QWidget *>m_tlwMap; }; diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index 06b0b51..15f0036 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -46,43 +46,27 @@ #include "qdirectfbcursor.h" #include "qdirectfbwindow.h" -#include "qgenericunixfontdatabase.h" - -#include <private/qwindowsurface_raster_p.h> -#include <private/qpixmap_raster_p.h> - #include <QtGui/private/qpixmap_blitter_p.h> -#include <QtGui/private/qpixmapdata_p.h> +#include <QtGui/private/qpixmap_raster_p.h> #include <QtCore/QCoreApplication> #include <QtCore/QThread> -QT_BEGIN_NAMESPACE - -QDirectFbScreen::QDirectFbScreen(int display) - :QPlatformScreen() -{ - m_layer = QDirectFbConvenience::dfbDisplayLayer(display); - m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); - - DFBDisplayLayerConfig config; - m_layer->GetConfiguration(m_layer, &config); +#include "qgenericunixfontdatabase.h" - m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); - m_geometry = QRect(0,0,config.width,config.height); - const int dpi = 72; - const qreal inch = 25.4; - m_depth = QDirectFbConvenience::colorDepthForSurface(config.pixelformat); - m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); +QT_BEGIN_NAMESPACE - cursor = new QDirectFBCursor(this); -} +QDirectFbIntegration::QDirectFbIntegration() + : m_fontDb(new QGenericUnixFontDatabase()) +{} -QDirectFbScreen::~QDirectFbScreen() +void QDirectFbIntegration::initialize() { + initializeDirectFB(); + initializeScreen(); + initializeInput(); } -QDirectFbIntegration::QDirectFbIntegration() - : mFontDb(new QGenericUnixFontDatabase()) +void QDirectFbIntegration::initializeDirectFB() { const QStringList args = QCoreApplication::arguments(); int argc = args.size(); @@ -96,26 +80,31 @@ QDirectFbIntegration::QDirectFbIntegration() DirectFBError("QDirectFBScreen: error initializing DirectFB", result); } + + for (int i = 0; i < argc; ++i) + delete[] argv[i]; delete[] argv; + // This must happen after DirectFBInit. + m_dfb.reset(QDirectFbConvenience::dfbInterface()); +} - QDirectFbScreen *primaryScreen = new QDirectFbScreen(0); - mScreens.append(primaryScreen); +void QDirectFbIntegration::initializeScreen() +{ + m_primaryScreen.reset(new QDirectFbScreen(0)); + mScreens.append(m_primaryScreen.data()); +} - mInputRunner = new QThread; - mInput = new QDirectFbInput(0); - mInput->moveToThread(mInputRunner); - QObject::connect(mInputRunner,SIGNAL(started()),mInput,SLOT(runInputEventLoop())); - mInputRunner->start(); +void QDirectFbIntegration::initializeInput() +{ + m_input.reset(new QDirectFbInput(m_dfb.data(), m_primaryScreen->dfbLayer())); + m_input->start(); } QDirectFbIntegration::~QDirectFbIntegration() { - mInput->stopInputEventLoop(); - mInputRunner->quit(); - mInputRunner->wait(); - delete mInputRunner; - delete mInput; + m_input->stopInputEventLoop(); + m_input->wait(); } QPixmapData *QDirectFbIntegration::createPixmapData(QPixmapData::PixelType type) const @@ -123,24 +112,22 @@ QPixmapData *QDirectFbIntegration::createPixmapData(QPixmapData::PixelType type) if (type == QPixmapData::BitmapType) return new QRasterPixmapData(type); else - return new QDirectFbBlitterPixmapData; + return new QDirectFbBlitterPlatformPixmap; } -QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWidget *widget, WId winId) const +QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWidget *window, WId) const { - Q_UNUSED(winId); - QDirectFbInput *input = const_cast<QDirectFbInput *>(mInput);//gah - return new QDirectFbWindow(widget,input); + return new QDirectFbWindow(window,m_input.data()); } -QWindowSurface *QDirectFbIntegration::createWindowSurface(QWidget *widget, WId winId) const +QWindowSurface *QDirectFbIntegration::createWindowSurface(QWidget *window, WId) const { - return new QDirectFbWindowSurface(widget,winId); + return new QDirectFbWindowSurface(window); } QPlatformFontDatabase *QDirectFbIntegration::fontDatabase() const { - return mFontDb; + return m_fontDb.data(); } QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h index 0e8337a..93e3d60 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.h +++ b/src/plugins/platforms/directfb/qdirectfbintegration.h @@ -43,6 +43,7 @@ #define QPLATFORMINTEGRATION_DIRECTFB_H #include "qdirectfbinput.h" +#include "qdirectfbscreen.h" #include <QtGui/QPlatformIntegration> #include <directfb.h> @@ -51,32 +52,6 @@ QT_BEGIN_NAMESPACE class QThread; -class QDirectFBCursor; - -class QDirectFbScreen : public QPlatformScreen -{ -Q_OBJECT -public: - QDirectFbScreen(int display); - ~QDirectFbScreen(); - - QRect geometry() const { return m_geometry; } - int depth() const { return m_depth; } - QImage::Format format() const { return m_format; } - QSize physicalSize() const { return m_physicalSize; } - -public: - QRect m_geometry; - int m_depth; - QImage::Format m_format; - QSize m_physicalSize; - - IDirectFBDisplayLayer *m_layer; - -private: - QDirectFBCursor * cursor; - -}; class QDirectFbIntegration : public QPlatformIntegration { @@ -92,11 +67,20 @@ public: QPlatformFontDatabase *fontDatabase() const; -private: + void initialize(); + +protected: + virtual void initializeDirectFB(); + virtual void initializeScreen(); + virtual void initializeInput(); + +protected: QList<QPlatformScreen *> mScreens; - QDirectFbInput *mInput; - QThread *mInputRunner; - QPlatformFontDatabase *mFontDb; + QDirectFBPointer<IDirectFB> m_dfb; + QScopedPointer<QDirectFbScreen> m_primaryScreen; + QScopedPointer<QDirectFbInput> m_input; + QScopedPointer<QThread> m_inputRunner; + QScopedPointer<QPlatformFontDatabase> m_fontDb; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbscreen.cpp b/src/plugins/platforms/directfb/qdirectfbscreen.cpp new file mode 100644 index 0000000..1d4b701 --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbscreen.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qdirectfbscreen.h" +#include "qdirectfbcursor.h" + +QT_BEGIN_NAMESPACE + +QDirectFbScreen::QDirectFbScreen(int display) + : QPlatformScreen() + , m_layer(QDirectFbConvenience::dfbDisplayLayer(display)) +{ + m_layer->SetCooperativeLevel(m_layer.data(), DLSCL_SHARED); + + DFBDisplayLayerConfig config; + m_layer->GetConfiguration(m_layer.data(), &config); + + m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); + m_geometry = QRect(0, 0, config.width, config.height); + const int dpi = 72; + const qreal inch = 25.4; + m_depth = QDirectFbConvenience::colorDepthForSurface(config.pixelformat); + m_physicalSize = QSize(config.width, config.height) * inch / dpi; + + m_cursor.reset(new QDirectFBCursor(this)); +} + +IDirectFBDisplayLayer *QDirectFbScreen::dfbLayer() const +{ + return m_layer.data(); +} + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbscreen.h b/src/plugins/platforms/directfb/qdirectfbscreen.h new file mode 100644 index 0000000..1ec3a48 --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbscreen.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDIRECTFBSCREEN_H +#define QDIRECTFBSCREEN_H + +#include "qdirectfbconvenience.h" +#include "qdirectfbcursor.h" + +#include <QtGui/QPlatformIntegration> + +#include <directfb.h> + +QT_BEGIN_NAMESPACE + + +class QDirectFbScreen : public QPlatformScreen +{ +public: + QDirectFbScreen(int display); + + QRect geometry() const { return m_geometry; } + int depth() const { return m_depth; } + QImage::Format format() const { return m_format; } + QSize physicalSize() const { return m_physicalSize; } + + // DirectFb helpers + IDirectFBDisplayLayer *dfbLayer() const; + +public: + QRect m_geometry; + int m_depth; + QImage::Format m_format; + QSize m_physicalSize; + + QDirectFBPointer<IDirectFBDisplayLayer> m_layer; + +private: + QScopedPointer<QDirectFBCursor> m_cursor; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.cpp b/src/plugins/platforms/directfb/qdirectfbwindow.cpp index d2c411e..0b6be91 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindow.cpp @@ -40,21 +40,23 @@ ****************************************************************************/ #include "qdirectfbwindow.h" +#include "qdirectfbwindowsurface.h" #include "qdirectfbinput.h" -#include "qdirectfbglcontext.h" - -#include <QWidget> +#include "qdirectfbscreen.h" -#include "qdirectfbwindowsurface.h" #include <directfb.h> +QT_BEGIN_NAMESPACE + QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler) - : QPlatformWindow(tlw), m_inputHandler(inputhandler), m_context(0) + : QPlatformWindow(tlw), m_inputHandler(inputhandler) { - IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); DFBDisplayLayerConfig layerConfig; - layer->GetConfiguration(layer,&layerConfig); + IDirectFBDisplayLayer *layer; + + layer = toDfbScreen(tlw)->dfbLayer(); + toDfbScreen(tlw)->dfbLayer()->GetConfiguration(layer, &layerConfig); DFBWindowDescription description; memset(&description,0,sizeof(DFBWindowDescription)); @@ -63,10 +65,10 @@ QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler) |DWDESC_OPTIONS #endif |DWDESC_CAPS); - description.width = tlw->rect().width(); - description.height = tlw->rect().height(); - description.posx = tlw->rect().x(); - description.posy = tlw->rect().y(); + description.width = tlw->width(); + description.height = tlw->height(); + description.posx = tlw->x(); + description.posy = tlw->y(); if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED) description.surface_caps = DSCAPS_PREMULTIPLIED; @@ -78,34 +80,32 @@ QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler) description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); description.surface_caps = DSCAPS_PREMULTIPLIED; - DFBResult result = layer->CreateWindow(layer,&description,&m_dfbWindow); + DFBResult result = layer->CreateWindow(layer, &description, m_dfbWindow.outPtr()); if (result != DFB_OK) { DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); } - m_dfbWindow->SetOpacity(m_dfbWindow,0xff); + m_dfbWindow->SetOpacity(m_dfbWindow.data(), 0xff); setVisible(widget()->isVisible()); - DFBWindowID id; - m_dfbWindow->GetID(m_dfbWindow, &id); - m_inputHandler->addWindow(id,tlw); + m_inputHandler->addWindow(m_dfbWindow.data(), tlw); } QDirectFbWindow::~QDirectFbWindow() { - m_inputHandler->removeWindow(winId()); - m_dfbWindow->Destroy(m_dfbWindow); + m_inputHandler->removeWindow(m_dfbWindow.data()); + m_dfbWindow->Destroy(m_dfbWindow.data()); } void QDirectFbWindow::setGeometry(const QRect &rect) { bool isMoveOnly = (rect.topLeft() != geometry().topLeft()) && (rect.size() == geometry().size()); + QPlatformWindow::setGeometry(rect); if (widget()->isVisible() && !(widget()->testAttribute(Qt::WA_DontShowOnScreen))) { - m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), + m_dfbWindow->SetBounds(m_dfbWindow.data(), rect.x(),rect.y(), rect.width(), rect.height()); - //Hack. When moving since the WindowSurface of a window becomes invalid when moved if (isMoveOnly) { //if resize then windowsurface is updated. widget()->windowSurface()->resize(rect.size()); @@ -117,7 +117,7 @@ void QDirectFbWindow::setGeometry(const QRect &rect) void QDirectFbWindow::setOpacity(qreal level) { const quint8 windowOpacity = quint8(level * 0xff); - m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); + m_dfbWindow->SetOpacity(m_dfbWindow.data(), windowOpacity); } void QDirectFbWindow::setVisible(bool visible) @@ -125,14 +125,14 @@ void QDirectFbWindow::setVisible(bool visible) if (visible) { int x = geometry().x(); int y = geometry().y(); - m_dfbWindow->MoveTo(m_dfbWindow,x,y); + m_dfbWindow->MoveTo(m_dfbWindow.data(), x, y); } else { - IDirectFBDisplayLayer *displayLayer; - QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer); + QDirectFBPointer<IDirectFBDisplayLayer> displayLayer; + QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(), DLID_PRIMARY, displayLayer.outPtr()); DFBDisplayLayerConfig config; - displayLayer->GetConfiguration(displayLayer,&config); - m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1); + displayLayer->GetConfiguration(displayLayer.data(), &config); + m_dfbWindow->MoveTo(m_dfbWindow.data(), config. width + 1, config.height + 1); } } @@ -141,51 +141,73 @@ Qt::WindowFlags QDirectFbWindow::setWindowFlags(Qt::WindowFlags flags) switch (flags & Qt::WindowType_Mask) { case Qt::ToolTip: { DFBWindowOptions options; - m_dfbWindow->GetOptions(m_dfbWindow,&options); + m_dfbWindow->GetOptions(m_dfbWindow.data(), &options); options = DFBWindowOptions(options | DWOP_GHOST); - m_dfbWindow->SetOptions(m_dfbWindow,options); + m_dfbWindow->SetOptions(m_dfbWindow.data(), options); break; } default: break; } - m_dfbWindow->SetStackingClass(m_dfbWindow, flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE); + m_dfbWindow->SetStackingClass(m_dfbWindow.data(), flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE); return flags; } void QDirectFbWindow::raise() { - m_dfbWindow->RaiseToTop(m_dfbWindow); + m_dfbWindow->RaiseToTop(m_dfbWindow.data()); } void QDirectFbWindow::lower() { - m_dfbWindow->LowerToBottom(m_dfbWindow); + m_dfbWindow->LowerToBottom(m_dfbWindow.data()); } WId QDirectFbWindow::winId() const { DFBWindowID id; - m_dfbWindow->GetID(m_dfbWindow, &id); + m_dfbWindow->GetID(m_dfbWindow.data(), &id); return WId(id); } -QPlatformGLContext *QDirectFbWindow::glContext() const +bool QDirectFbWindow::setKeyboardGrabEnabled(bool grab) { - if (!m_context) { - IDirectFBSurface *surface; - DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&surface); - if (result != DFB_OK) { - qWarning("could not retrieve surface in QDirectFbWindow::glContext()"); - return 0; - } - IDirectFBGL *gl; - result = surface->GetGL(surface,&gl); - if (result != DFB_OK) { - qWarning("could not retrieve IDirectFBGL in QDirectFbWindow::glContext()"); - return 0; - } - const_cast<QDirectFbWindow *>(this)->m_context = new QDirectFbGLContext(gl); + DFBResult res; + + if (grab) + res = m_dfbWindow->GrabKeyboard(m_dfbWindow.data()); + else + res = m_dfbWindow->UngrabKeyboard(m_dfbWindow.data()); + + return res == DFB_OK; +} + +bool QDirectFbWindow::setMouseGrabEnabled(bool grab) +{ + DFBResult res; + + if (grab) + res = m_dfbWindow->GrabPointer(m_dfbWindow.data()); + else + res = m_dfbWindow->UngrabPointer(m_dfbWindow.data()); + + return res == DFB_OK; +} + +IDirectFBWindow *QDirectFbWindow::dfbWindow() const +{ + return m_dfbWindow.data(); +} + +IDirectFBSurface *QDirectFbWindow::dfbSurface() +{ + if (!m_dfbSurface) { + DFBResult res = m_dfbWindow->GetSurface(m_dfbWindow.data(), m_dfbSurface.outPtr()); + if (res != DFB_OK) + DirectFBError(QDFB_PRETTY, res); } - return m_context; + + return m_dfbSurface.data(); } + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h index 4f839a0..349d8c8 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.h +++ b/src/plugins/platforms/directfb/qdirectfbwindow.h @@ -61,17 +61,21 @@ public: void setVisible(bool visible); Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); + bool setKeyboardGrabEnabled(bool grab); + bool setMouseGrabEnabled(bool grab); void raise(); void lower(); WId winId() const; - QPlatformGLContext *glContext() const; + IDirectFBWindow *dfbWindow() const; + + // helper to get access to DirectFB types + IDirectFBSurface *dfbSurface(); private: - IDirectFBWindow *m_dfbWindow; + QDirectFBPointer<IDirectFBSurface> m_dfbSurface; + QDirectFBPointer<IDirectFBWindow> m_dfbWindow; QDirectFbInput *m_inputHandler; - - QPlatformGLContext *m_context; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp index 730f01f..bf98e1d 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp @@ -43,39 +43,29 @@ #include "qdirectfbintegration.h" #include "qdirectfbblitter.h" #include "qdirectfbconvenience.h" +#include "qdirectfbwindow.h" #include <private/qpixmap_blitter_p.h> #include <QtCore/qdebug.h> QT_BEGIN_NAMESPACE -QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window, WId wId) - : QWindowSurface(window), m_pixmap(0), m_pmdata(0), m_dfbSurface(0) +QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) + : QWindowSurface(window), m_pixmap(0), m_pmdata(0) { + IDirectFBWindow *dfbWindow = static_cast<QDirectFbWindow *>(window->platformWindow())->dfbWindow(); + dfbWindow->GetSurface(dfbWindow, m_dfbSurface.outPtr()); - IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); - - DFBWindowID id(wId); - IDirectFBWindow *dfbWindow; - - layer->GetWindow(layer,id,&dfbWindow); - - dfbWindow->GetSurface(dfbWindow,&m_dfbSurface); //WRONGSIZE - QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect().size(), m_dfbSurface); - m_pmdata = new QDirectFbBlitterPixmapData; + QDirectFbBlitter *blitter = new QDirectFbBlitter(window->size(), m_dfbSurface.data()); + m_pmdata = new QDirectFbBlitterPlatformPixmap; m_pmdata->setBlittable(blitter); - m_pixmap = new QPixmap(m_pmdata); -} - -QDirectFbWindowSurface::~QDirectFbWindowSurface() -{ - delete m_pixmap; + m_pixmap.reset(new QPixmap(m_pmdata)); } QPaintDevice *QDirectFbWindowSurface::paintDevice() { - return m_pixmap; + return m_pixmap.data(); } void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) @@ -87,17 +77,13 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const for (int i = 0 ; i < rects.size(); i++) { const QRect rect = rects.at(i); DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()}; - m_dfbSurface->Flip(m_dfbSurface, &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC)); + m_dfbSurface->Flip(m_dfbSurface.data(), &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC)); } } void QDirectFbWindowSurface::resize(const QSize &size) { - QWindowSurface::resize(size); - - //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable - m_dfbSurface->AddRef(m_dfbSurface); - QDirectFbBlitter *blitter = new QDirectFbBlitter(size,m_dfbSurface); + QDirectFbBlitter *blitter = new QDirectFbBlitter(size, m_dfbSurface.data()); m_pmdata->setBlittable(blitter); } @@ -115,14 +101,14 @@ bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) if (!m_dfbSurface || area.isEmpty()) return false; - m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX); + m_dfbSurface->SetBlittingFlags(m_dfbSurface.data(), DSBLIT_NOFX); if (area.rectCount() == 1) { - scrollSurface(m_dfbSurface, area.boundingRect(), dx, dy); + scrollSurface(m_dfbSurface.data(), area.boundingRect(), dx, dy); } else { const QVector<QRect> rects = area.rects(); const int n = rects.size(); for (int i=0; i<n; ++i) { - scrollSurface(m_dfbSurface, rects.at(i), dx, dy); + scrollSurface(m_dfbSurface.data(), rects.at(i), dx, dy); } } return true; diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.h b/src/plugins/platforms/directfb/qdirectfbwindowsurface.h index 7f1140d..dd0354d 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindowsurface.h +++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.h @@ -44,16 +44,16 @@ #include <QtGui/private/qwindowsurface_p.h> #include <private/qpixmap_blitter_p.h> - #include <directfb.h> +#include "qdirectfbconvenience.h" + QT_BEGIN_NAMESPACE class QDirectFbWindowSurface : public QWindowSurface { public: - QDirectFbWindowSurface(QWidget *window, WId wid); - ~QDirectFbWindowSurface(); + QDirectFbWindowSurface(QWidget *window); QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); @@ -66,10 +66,9 @@ public: private: void lockSurfaceToImage(); - QPixmap *m_pixmap; + QScopedPointer<QPixmap> m_pixmap; QBlittablePixmapData *m_pmdata; - - IDirectFBSurface *m_dfbSurface; + QDirectFBPointer<IDirectFBSurface> m_dfbSurface; }; QT_END_NAMESPACE diff --git a/src/s60installs/bwins/QtOpenVGu.def b/src/s60installs/bwins/QtOpenVGu.def index dc1ddce..547931e 100644 --- a/src/s60installs/bwins/QtOpenVGu.def +++ b/src/s60installs/bwins/QtOpenVGu.def @@ -159,7 +159,7 @@ EXPORTS ?hibernate@QVGImagePool@@UAEXXZ @ 158 NONAME ; void QVGImagePool::hibernate(void) ?qt_vg_destroy_context@@YAXPAVQEglContext@@H@Z @ 159 NONAME ; void qt_vg_destroy_context(class QEglContext *, int) ??0QVGImagePool@@QAE@XZ @ 160 NONAME ; QVGImagePool::QVGImagePool(void) - ?setImagePool@QVGImagePool@@SAXPAV1@@Z @ 161 NONAME ABSENT ; void QVGImagePool::setImagePool(class QVGImagePool *) + ?setImagePool@QVGImagePool@@SAXPAV1@@Z @ 161 NONAME ; void QVGImagePool::setImagePool(class QVGImagePool *) ?pixmapLRU@QVGImagePool@@IAEPAVQVGPixmapData@@XZ @ 162 NONAME ; class QVGPixmapData * QVGImagePool::pixmapLRU(void) ?qt_vg_create_context@@YAPAVQEglContext@@PAVQPaintDevice@@H@Z @ 163 NONAME ; class QEglContext * qt_vg_create_context(class QPaintDevice *, int) ?reclaimImages@QVGPixmapData@@UAEXXZ @ 164 NONAME ; void QVGPixmapData::reclaimImages(void) diff --git a/src/s60installs/eabi/QtOpenVGu.def b/src/s60installs/eabi/QtOpenVGu.def index f87c71d..a66df98 100644 --- a/src/s60installs/eabi/QtOpenVGu.def +++ b/src/s60installs/eabi/QtOpenVGu.def @@ -176,7 +176,7 @@ EXPORTS _ZN12QVGImagePool11detachImageEP13QVGPixmapData @ 175 NONAME _ZN12QVGImagePool12reclaimSpaceE13VGImageFormatllP13QVGPixmapData @ 176 NONAME _ZN12QVGImagePool12releaseImageEP13QVGPixmapDatam @ 177 NONAME - _ZN12QVGImagePool12setImagePoolEPS_ @ 178 NONAME ABSENT + _ZN12QVGImagePool12setImagePoolEPS_ @ 178 NONAME _ZN12QVGImagePool13removeFromLRUEP13QVGPixmapData @ 179 NONAME _ZN12QVGImagePool15moveToHeadOfLRUEP13QVGPixmapData @ 180 NONAME _ZN12QVGImagePool20createImageForPixmapE13VGImageFormatllmP13QVGPixmapData @ 181 NONAME diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp index e3e32a0..06f7e8b 100644 --- a/tools/qdoc3/ditaxmlgenerator.cpp +++ b/tools/qdoc3/ditaxmlgenerator.cpp @@ -3492,7 +3492,8 @@ void DitaXmlGenerator::writeText(const QString& markedCode, addLink(link, arg); } else { - link = arg.toString(); + //Encountered in snippets for example. Where the text should not be a link. + writeCharacters(arg.toString()); } } else { diff --git a/translations/assistant_cs.ts b/translations/assistant_cs.ts index be54f86..fa923a5 100644 --- a/translations/assistant_cs.ts +++ b/translations/assistant_cs.ts @@ -273,6 +273,10 @@ Grund: <translation>Adresa</translation> </message> <message> + <source>Toolbar Menu</source> + <translation>Nabídka nástrojového pruhu</translation> + </message> + <message> <source>Bookmarks Menu</source> <translation>Nabídka se záložkami</translation> </message> @@ -324,11 +328,11 @@ Grund: <name>CentralWidget</name> <message> <source>Add new page</source> - <translation>Přidat novou stranu</translation> + <translation type="obsolete">Přidat novou stranu</translation> </message> <message> <source>Close current page</source> - <translation>Zavřít současnou stranu</translation> + <translation type="obsolete">Zavřít současnou stranu</translation> </message> <message> <source>Print Document</source> @@ -336,27 +340,27 @@ Grund: </message> <message> <source>unknown</source> - <translation>Neznámý</translation> + <translation type="obsolete">Neznámý</translation> </message> <message> <source>Add New Page</source> - <translation>Přidat novou stranu</translation> + <translation type="obsolete">Přidat novou stranu</translation> </message> <message> <source>Close This Page</source> - <translation>Zavřít tuto stranu</translation> + <translation type="obsolete">Zavřít tuto stranu</translation> </message> <message> <source>Close Other Pages</source> - <translation>Zavřít jiné strany</translation> + <translation type="obsolete">Zavřít jiné strany</translation> </message> <message> <source>Add Bookmark for this Page...</source> - <translation>Přidat záložku pro tuto stranu...</translation> + <translation type="obsolete">Přidat záložku pro tuto stranu...</translation> </message> <message> <source>Search</source> - <translation>Hledat</translation> + <translation type="obsolete">Hledat</translation> </message> </context> <context> @@ -392,7 +396,35 @@ Grund: status message. -help Displays this help. </source> - <translation type="unfinished"></translation> + <translation>Použití: assistant [volby] + +-collectionFile file Použije zadaný soubor se sbírkou + namísto výchozího souboru +-showUrl url Ukáže dokument s adresou + (URL). +-enableRemoteControl Povolí, aby byl Assistant + ovládán vzdáleně. +-show widget Ukáže zadaný panelový prvek, + což může být "obsah", "rejstřík", + "záložky" nebo "hledání". +-activate widget Zapne zadaný panelový prvek, + což může být "obsah", "rejstřík", + "záložky" nebo "hledání". +-hide widget Skryje zadaný panelový prvek, + což může být "obsah", "rejstřík", + "záložky" nebo "hledání". +-register helpFile Registers the specified help file + (.qch) in the given collection + file. +-unregister helpFile Odregistruje zadaný soubor s nápovědou + (.qch) ze souboru se sbírkou. +-setCurrentFilter filter Nastaví filtr jako aktivní filtr. +-remove-search-index Odstraní rejstřík hledání v celém textu. +-rebuild-search-index Přestaví rejstřík hledání v celém textu (může to být pomalé). +-quiet Nezobrazí žádnou chybu nebo + zprávu o stavu. +-help Zobrazí tuto nápovědu. +</translation> </message> <message> <source>Unknown option: %1</source> @@ -672,6 +704,49 @@ Grund: </message> </context> <context> + <name>GlobalActions</name> + <message> + <source>&Back</source> + <translation>&Zpět</translation> + </message> + <message> + <source>&Forward</source> + <translation>&Dopředu</translation> + </message> + <message> + <source>&Home</source> + <translation>&Začáteční strana</translation> + </message> + <message> + <source>ALT+Home</source> + <translation>ALT+Home</translation> + </message> + <message> + <source>Zoom &in</source> + <translation>&Přiblížit</translation> + </message> + <message> + <source>Zoom &out</source> + <translation>&Oddálit</translation> + </message> + <message> + <source>&Copy selected Text</source> + <translation>&Kopírovat vybraný text</translation> + </message> + <message> + <source>&Print...</source> + <translation>&Tisk...</translation> + </message> + <message> + <source>&Find in Text...</source> + <translation>&Najít v textu...</translation> + </message> + <message> + <source>&Find</source> + <translation>&Najít</translation> + </message> +</context> +<context> <name>HelpEngineWrapper</name> <message> <source>Unfiltered</source> @@ -704,16 +779,28 @@ Grund: <translation><title>Chyba 404 ...</title><div align="center"><br><br><h1>Stranu se nepodařilo najít.</h1><br><h3>'%1'</h3></div></translation> </message> <message> + <source>Open Link</source> + <translation>Otevřít adresu odkazu</translation> + </message> + <message> <source>Copy &Link Location</source> <translation>&Kopírovat adresu odkazu</translation> </message> <message> + <source>Copy</source> + <translation>Kopírovat</translation> + </message> + <message> + <source>Reload</source> + <translation>Nahrát znovu</translation> + </message> + <message> <source>Open Link in New Tab Ctrl+LMB</source> <translation>Otevřít odkaz v nové kartě Ctrl+LMB</translation> </message> <message> <source>Open Link in New Tab</source> - <translation>Otevřít odkaz v nové kartě</translation> + <translation type="obsolete">Otevřít odkaz v nové kartě</translation> </message> <message> <source>Unable to launch external application. @@ -721,6 +808,10 @@ Grund: <translation type="obsolete">Chyba při spouštění vnější aplikace. </translation> </message> + <message> + <source>Open Link in New Page</source> + <translation>Otevřít odkazu na nové straně</translation> + </message> </context> <context> <name>HelpWindow</name> @@ -931,7 +1022,7 @@ Grund: </message> <message> <source>&Print...</source> - <translation>&Tisk...</translation> + <translation type="obsolete">&Tisk...</translation> </message> <message> <source>New &Tab</source> @@ -951,15 +1042,15 @@ Grund: </message> <message> <source>&Copy selected Text</source> - <translation>&Kopírovat vybraný text</translation> + <translation type="obsolete">&Kopírovat vybraný text</translation> </message> <message> <source>&Find in Text...</source> - <translation>&Najít v textu...</translation> + <translation type="obsolete">&Najít v textu...</translation> </message> <message> <source>&Find</source> - <translation>&Najít</translation> + <translation type="obsolete">&Najít</translation> </message> <message> <source>Find &Next</source> @@ -975,11 +1066,11 @@ Grund: </message> <message> <source>Zoom &in</source> - <translation>&Zvětšit</translation> + <translation type="obsolete">&Zvětšit</translation> </message> <message> <source>Zoom &out</source> - <translation>&Zmenšit</translation> + <translation type="obsolete">&Zmenšit</translation> </message> <message> <source>Normal &Size</source> @@ -1003,15 +1094,15 @@ Grund: </message> <message> <source>&Home</source> - <translation>&Začáteční strana</translation> + <translation type="obsolete">&Začáteční strana</translation> </message> <message> <source>&Back</source> - <translation>&Zpět</translation> + <translation type="obsolete">&Zpět</translation> </message> <message> <source>&Forward</source> - <translation>&Dopředu</translation> + <translation type="obsolete">&Dopředu</translation> </message> <message> <source>Sync with Table of Contents</source> @@ -1110,10 +1201,22 @@ Grund: <translation>Zvětšení</translation> </message> <message> + <source>Open Pages</source> + <translation>Otevřít strany</translation> + </message> + <message> + <source>Bookmark Toolbar</source> + <translation>Nástrojový pruh záložek</translation> + </message> + <message> <source>&File</source> <translation>&Soubor</translation> </message> <message> + <source>E&xit</source> + <translation>&Ukončit</translation> + </message> + <message> <source>&Edit</source> <translation>&Úpravy</translation> </message> @@ -1122,12 +1225,16 @@ Grund: <translation>&Pohled</translation> </message> <message> + <source>ALT+P</source> + <translation>ALT+P</translation> + </message> + <message> <source>&Go</source> <translation>&Jít na</translation> </message> <message> <source>ALT+Home</source> - <translation>ALT+Home</translation> + <translation type="obsolete">ALT+Home</translation> </message> <message> <source>&Bookmarks</source> @@ -1147,6 +1254,17 @@ Grund: </message> </context> <context> + <name>OpenPagesWidget</name> + <message> + <source>Close %1</source> + <translation>Zavřít %1</translation> + </message> + <message> + <source>Close All Except %1</source> + <translation>Zavřít vše kromě %1</translation> + </message> +</context> +<context> <name>OutputPage</name> <message> <source>Form</source> @@ -1365,6 +1483,14 @@ Chcete jej odstranit?</translation> <source>Blank Page</source> <translation>Prázdná strana</translation> </message> + <message> + <source>Appearance</source> + <translation>Vzhled</translation> + </message> + <message> + <source>Show tabs for each individual page</source> + <translation>Ukázat karty pro každou jednotlivou stranu</translation> + </message> </context> <context> <name>QCollectionGenerator</name> @@ -1412,7 +1538,18 @@ qcollectiongenerator <collection-config-file> [options] qcollectiongenerator. </source> - <translation type="unfinished"></translation> + <translation>Použití: + +qcollectiongenerator <collection-config-file> [volby] + + -o <collection-file> Vytvoří soubor se sbírkou + nazvaný <collection-file>. Pokud + tato volba není stanovena + použije se výchozí název. + -v Zobrazí verzi + qcollectiongeneratoru. + +</translation> </message> <message> <source>Could not open %1. @@ -1495,7 +1632,20 @@ qhelpgenerator <help-project-file> [options] qhelpgenerator. </source> - <translation type="unfinished"></translation> + <translation>Použití: + +qhelpgenerator <help-project-file> [volby] + + -o <compressed-file> Vytvoří zabalenou nápovědu + nazvanou <compressed-file>. Pokud + tato volba není stanovena + použije se výchozí název. + -c Ověří, zda všechny odkazy v souborech HTML + ukazují na soubory v tomto projektu nápovědy. + -v Zobrazí verzi + qhelpgenerator. + +</translation> </message> <message> <source>Could not open %1. @@ -1626,6 +1776,29 @@ Grund: </message> </context> <context> + <name>TabBar</name> + <message> + <source>(Untitled)</source> + <translation>(Bez názvu)</translation> + </message> + <message> + <source>New &Tab</source> + <translation>Nová &karta</translation> + </message> + <message> + <source>&Close Tab</source> + <translation>&Zavřít kartu</translation> + </message> + <message> + <source>Close Other Tabs</source> + <translation>Zavřít jiné karty</translation> + </message> + <message> + <source>Add Bookmark for this Page...</source> + <translation>Přidat záložku pro tuto stranu...</translation> + </message> +</context> +<context> <name>TopicChooser</name> <message> <source>Choose a topic for <b>%1</b>:</source> diff --git a/translations/designer_cs.ts b/translations/designer_cs.ts index 3db20bd..9201312 100644 --- a/translations/designer_cs.ts +++ b/translations/designer_cs.ts @@ -364,7 +364,7 @@ </message> <message> <source>page</source> - <translation>Strana</translation> + <translation type="obsolete">Strana</translation> </message> <message> <source>Insert Page</source> @@ -476,7 +476,7 @@ </message> <message> <source>subwindow</source> - <translation>Podokno</translation> + <translation type="obsolete">Podokno</translation> </message> <message> <source>Subwindow</source> @@ -520,6 +520,10 @@ <translation>Změnit rozvržení '%1' z %2 na %3</translation> </message> <message> + <source>Change layout alignment</source> + <translation>Změnit zarovnání rozvržení</translation> + </message> + <message> <source>Add '%1' to '%2'</source> <extracomment>Command description for adding buttons to a QButtonGroup</extracomment> <translation>Přidat '%1' k '%2'</translation> @@ -541,9 +545,9 @@ <source>Changed '%1' of %n objects</source> <translatorcomment>Singular will never be shown</translatorcomment> <translation> - <numerusform>Změněna vlastnost '%1' jednoho předmětu</numerusform> - <numerusform>Změněna vlastnost '%1' %n předmětů</numerusform> - <numerusform>Změněna vlastnost '%1' %n předmětů</numerusform> + <numerusform>Změněna vlastnost '%1' jednoho objektu</numerusform> + <numerusform>Změněna vlastnost '%1' %n objektů</numerusform> + <numerusform>Změněna vlastnost '%1' %n objektů</numerusform> </translation> </message> <message> @@ -554,9 +558,9 @@ <source>Reset '%1' of %n objects</source> <translatorcomment>Singular will never be shown</translatorcomment> <translation> - <numerusform>Znovu nastavit '%1' jednoho předmětu</numerusform> - <numerusform>Znovu nastavit '%1' %n předmětů</numerusform> - <numerusform>Znovu nastavit '%1' %n předmětů</numerusform> + <numerusform>Znovu nastavit '%1' jednoho objektu</numerusform> + <numerusform>Znovu nastavit '%1' %n objektů</numerusform> + <numerusform>Znovu nastavit '%1' %n objektů</numerusform> </translation> </message> <message> @@ -567,9 +571,9 @@ <source>Add dynamic property '%1' to %n objects</source> <translatorcomment>Singular will never be shown</translatorcomment> <translation> - <numerusform>Přidat dynamickou vlastnost '%1' do jednoho předmětu</numerusform> - <numerusform>Přidat dynamickou vlastnost '%1' do %n předmětů</numerusform> - <numerusform>Přidat dynamickou vlastnost '%1' do %n předmětů</numerusform> + <numerusform>Přidat dynamickou vlastnost '%1' do jednoho objektu</numerusform> + <numerusform>Přidat dynamickou vlastnost '%1' do %n objektů</numerusform> + <numerusform>Přidat dynamickou vlastnost '%1' do %n objektů</numerusform> </translation> </message> <message> @@ -579,9 +583,9 @@ <message numerus="yes"> <source>Remove dynamic property '%1' from %n objects</source> <translation> - <numerusform>Odstranit dynamickou vlastnost '%1' z jednoho předmětu</numerusform> - <numerusform>Odstranit dynamickou vlastnost '%1' z %n předmětů</numerusform> - <numerusform>Odstranit dynamickou vlastnost '%1' z %n předmětů</numerusform> + <numerusform>Odstranit dynamickou vlastnost '%1' z jednoho objektu</numerusform> + <numerusform>Odstranit dynamickou vlastnost '%1' z %n objektů</numerusform> + <numerusform>Odstranit dynamickou vlastnost '%1' z %n objektů</numerusform> </translation> </message> </context> @@ -608,7 +612,7 @@ <name>ConnectionDelegate</name> <message> <source><object></source> - <translation><Předmět></translation> + <translation><objekt></translation> </message> <message> <source><signal></source> @@ -1102,7 +1106,7 @@ Parsing grid layout minimum size values</extracomment> <name>ObjectInspectorModel</name> <message> <source>Object</source> - <translation>Předmět</translation> + <translation>Objekt</translation> </message> <message> <source>Class</source> @@ -1121,11 +1125,11 @@ Parsing grid layout minimum size values</extracomment> <name>ObjectNameDialog</name> <message> <source>Change Object Name</source> - <translation>Změnit název předmětu</translation> + <translation>Změnit název objektu</translation> </message> <message> <source>Object Name</source> - <translation>Název předmětu</translation> + <translation>Název objektu</translation> </message> </context> <context> @@ -1208,7 +1212,7 @@ Parsing grid layout minimum size values</extracomment> </message> <message> <source>Attempt to add child that is not of class QWizardPage to QWizard.</source> - <translation>Pokus o přidání strany předmětu třídy QWizard, která není typu QWizardPage.</translation> + <translation>Pokus o přidání strany objektu třídy QWizard, která není typu QWizardPage.</translation> </message> <message> <source>Attempt to add a layout to a widget '%1' (%2) which already has a layout of non-box type %3. @@ -1758,7 +1762,7 @@ Chcete to zkusit ještě jednou?</translation> <source>The container extension of the widget '%1' (%2) returned a widget not managed by Designer '%3' (%4) when queried for page #%5. Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source> <translation>Kontejnerové rozšíření prvku '%1' (%2) vrátilo pro stranu %5 prvek '%3' (%4), který není spravován programem Designer. -Kontejnerové stránky by měly být zadány výhradně v XML vráceném postupu domXML() uživatelsky stanoveného prvku.</translation> +Kontejnerové stránky by měly být zadány výhradně v XML vrácené metodě domXML() uživatelsky stanoveného prvku.</translation> </message> <message> <source>Unexpected element <%1></source> @@ -1799,7 +1803,7 @@ Kontejnerové stránky by měly být zadány výhradně v XML vráceném postupu </message> <message> <source>Object Inspector</source> - <translation>Ukazatel předmětů</translation> + <translation>Ukazatel objektů</translation> </message> <message> <source>Resource Browser</source> @@ -1838,7 +1842,7 @@ Kontejnerové stránky by měly být zadány výhradně v XML vráceném postupu </message> <message> <source>Edit</source> - <translation>Úpravy</translation> + <translation type="obsolete">Úpravy</translation> </message> <message> <source>Toolbars</source> @@ -1853,6 +1857,10 @@ Kontejnerové stránky by měly být zadány výhradně v XML vráceném postupu <translation>&Pohled</translation> </message> <message> + <source>&Edit</source> + <translation>&Úpravy</translation> + </message> + <message> <source>&Settings</source> <translation>&Nastavení</translation> </message> @@ -1906,7 +1914,7 @@ Kontejnerové stránky by měly být zadány výhradně v XML vráceném postupu Empty class name passed to widget factory method ---------- Empty class name passed to widget factory method</extracomment> - <translation>Postupu %1 byl předán prázdný název třídy (název předmětu '%2').</translation> + <translation>Postupu %1 byl předán prázdný název třídy (název objektu '%2').</translation> </message> <message> <source>QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'.</source> @@ -1914,7 +1922,7 @@ Empty class name passed to widget factory method</extracomment> </message> <message> <source>QFormBuilder was unable to create a widget of the class '%1'.</source> - <translation>QFormBuilderu se nepodařilo vytvořit předmět třídy '%1'.</translation> + <translation>QFormBuilderu se nepodařilo vytvořit objekt třídy '%1'.</translation> </message> <message> <source>The layout type `%1' is not supported.</source> @@ -3746,6 +3754,10 @@ Chcete tuto předlohu přepsat?</translation> <translation>Zděděno</translation> </message> <message> + <source>[Theme] %1</source> + <translation>[Téma] %1</translation> + </message> + <message> <source>Horizontal</source> <translation>Vodorovný</translation> </message> @@ -3754,6 +3766,10 @@ Chcete tuto předlohu přepsat?</translation> <translation>Svislý</translation> </message> <message> + <source>Theme</source> + <translation>Téma</translation> + </message> + <message> <source>Normal Off</source> <translation>Obvyklé, vypnuto</translation> </message> @@ -4346,6 +4362,17 @@ Chcete tuto předlohu přepsat?</translation> </message> </context> <context> + <name>qdesigner_internal::IconThemeDialog</name> + <message> + <source>Set Icon From Theme</source> + <translation>Nastavit ikonu z tématu</translation> + </message> + <message> + <source>Input icon name from the current theme:</source> + <translation>Název pro ikonu z nynějšího tématu:</translation> + </message> +</context> +<context> <name>qdesigner_internal::ItemListEditor</name> <message> <source>Properties &<<</source> @@ -4396,7 +4423,7 @@ Chcete tuto předlohu přepsat?</translation> <name>qdesigner_internal::LabelTaskMenu</name> <message> <source>Change rich text...</source> - <translation>Změnit upravovatelný text...</translation> + <translation>Změnit bohatý text...</translation> </message> <message> <source>Change plain text...</source> @@ -4488,15 +4515,15 @@ Chcete tuto předlohu přepsat?</translation> </message> <message> <source>Shortcut:</source> - <translation>Klávesová zkratka:</translation> + <translation type="obsolete">Klávesová zkratka:</translation> </message> <message> <source>Checkable:</source> - <translation>Zaškrtnutelná:</translation> + <translation type="obsolete">Zaškrtnutelná:</translation> </message> <message> <source>ToolTip:</source> - <translation>Rada k nástroji:</translation> + <translation type="obsolete">Rada k nástroji:</translation> </message> <message> <source>...</source> @@ -4508,7 +4535,23 @@ Chcete tuto předlohu přepsat?</translation> </message> <message> <source>Object &name:</source> - <translation>&Název předmětu:</translation> + <translation>&Název objektu:</translation> + </message> + <message> + <source>T&oolTip:</source> + <translation>&Nástrojová rada:</translation> + </message> + <message> + <source>Icon th&eme:</source> + <translation>&Téma ikon:</translation> + </message> + <message> + <source>&Checkable:</source> + <translation>&Zaškrtnutelné:</translation> + </message> + <message> + <source>&Shortcut:</source> + <translation>&Klávesová zkratka:</translation> </message> </context> <context> @@ -4520,7 +4563,7 @@ Chcete tuto předlohu přepsat?</translation> <message> <source>The current object already has a property named '%1'. Please select another, unique one.</source> - <translation>nynější předmět již má vlastnost s názvem '%1'. + <translation>Nynější objekt již má vlastnost s názvem '%1'. Zvolte, prosím, jiný, jedinečný název.</translation> </message> <message> @@ -4774,9 +4817,17 @@ Zvolte, prosím, jiný název.</translation> <translation>Vybrat soubor...</translation> </message> <message> + <source>Set Icon From Theme...</source> + <translation>Nastavit ikonu z tématu...</translation> + </message> + <message> <source>...</source> <translation>...</translation> </message> + <message> + <source>[Theme] %1</source> + <translation>[Téma] %1</translation> + </message> </context> <context> <name>qdesigner_internal::PlainTextEditorDialog</name> @@ -5049,7 +5100,7 @@ která byla volně puštěná.</translation> <message> <source>Object: %1 Class: %2</source> - <translation>Předmět: %1 + <translation>Objekt: %1 Třída: %2</translation> </message> <message> @@ -5130,7 +5181,7 @@ Třída: %2</translation> <name>qdesigner_internal::QDesignerTaskMenu</name> <message> <source>Change objectName...</source> - <translation>Změnit název předmětu...</translation> + <translation>Změnit název objektu...</translation> </message> <message> <source>Change toolTip...</source> @@ -5179,7 +5230,7 @@ Třída: %2</translation> <message numerus="yes"> <source>Set size constraint on %n widget(s)</source> <translation> - <numerusform>Nastavit omezení velikosti u jednoho prvku</numerusform> + <numerusform>Nastavit omezení velikosti u %n prvku</numerusform> <numerusform>Nastavit omezení velikosti u %n prvků</numerusform> <numerusform>Nastavit omezení velikosti u %n prvků</numerusform> </translation> @@ -5189,6 +5240,42 @@ Třída: %2</translation> <translation>Omezení velikosti</translation> </message> <message> + <source>Layout Alignment</source> + <translation>Zarovnání rozvržení</translation> + </message> + <message> + <source>No Horizontal Alignment</source> + <translation>Žádné vodorovné zarovnání</translation> + </message> + <message> + <source>Left</source> + <translation>Vlevo</translation> + </message> + <message> + <source>Center Horizontally</source> + <translation>Na střed vodorovně</translation> + </message> + <message> + <source>Right</source> + <translation>Vpravo</translation> + </message> + <message> + <source>No Vertical Alignment</source> + <translation>Žádné svislé zarovnání</translation> + </message> + <message> + <source>Top</source> + <translation>Nahoře</translation> + </message> + <message> + <source>Center Vertically</source> + <translation>Na střed svisle</translation> + </message> + <message> + <source>Bottom</source> + <translation>Dole</translation> + </message> + <message> <source>Set Minimum Width</source> <translation>Nastavit nejmenší šířku</translation> </message> @@ -5331,7 +5418,7 @@ Třída: %2</translation> </message> <message> <source>Rich Text</source> - <translation>Upravovatelný text</translation> + <translation>Bohatý text</translation> </message> <message> <source>Source</source> @@ -5396,6 +5483,10 @@ Třída: %2</translation> <source>Insert &Image</source> <translation>Vložit &obrázek</translation> </message> + <message> + <source>Simplify Rich Text</source> + <translation>Zjednodušit bohatý text</translation> + </message> </context> <context> <name>qdesigner_internal::ScriptDialog</name> diff --git a/translations/linguist_cs.ts b/translations/linguist_cs.ts index fb56289..e235125 100644 --- a/translations/linguist_cs.ts +++ b/translations/linguist_cs.ts @@ -1164,7 +1164,11 @@ Volby: </message> <message> <source>Illegal escape squence</source> - <translation>Neplatná úniková posloupnost</translation> + <translation type="obsolete">Neplatná úniková posloupnost</translation> + </message> + <message> + <source>Illegal escape sequence</source> + <translation type="unfinished"></translation> </message> <message> <source>Illegal unicode escape sequence</source> diff --git a/translations/qt_cs.ts b/translations/qt_cs.ts index 193dfa4..41eb55c 100644 --- a/translations/qt_cs.ts +++ b/translations/qt_cs.ts @@ -31,10 +31,25 @@ </message> </context> <context> + <name>Debugger::JSAgentWatchData</name> + <message> + <source>[Array of length %1]</source> + <translation>[Pole délky %1]</translation> + </message> + <message> + <source><undefined></source> + <translation><nevymezeno></translation> + </message> +</context> +<context> <name>FakeReply</name> <message> <source>Fake error !</source> - <translation>Napodobená chyba!</translation> + <translation type="obsolete">Napodobená chyba!</translation> + </message> + <message> + <source>Fake error!</source> + <translation>Falešná chyba!</translation> </message> <message> <source>Invalid URL</source> @@ -508,6 +523,10 @@ Ověřte, prosím, instalaci Gstreamer a ujistěte se, <source>Error opening source: media type could not be determined</source> <translation>Zdroj se nepodařilo otevřít: nepodařilo se určit typ média</translation> </message> + <message> + <source>Failed to set requested IAP</source> + <translation>Nepodařilo se nastavit požadované IAP</translation> + </message> </context> <context> <name>Phonon::MMF::StereoWidening</name> @@ -1126,6 +1145,14 @@ na <context> <name>QAccessibleButton</name> <message> + <source>Uncheck</source> + <translation>Zrušit označení křížkem</translation> + </message> + <message> + <source>Check</source> + <translation>Označit křížkem</translation> + </message> + <message> <source>Press</source> <translation>Stisknout</translation> </message> @@ -1303,6 +1330,11 @@ na <translation>%1: Nejsou již použitelné zdroje</translation> </message> <message> + <source>%1: permission denied</source> + <comment>QSystemSemaphore</comment> + <translation>%1: Přístup odepřen</translation> + </message> + <message> <source>%1: unknown error %2</source> <comment>QSystemSemaphore</comment> <translation>%1: Neznámá chyba %2</translation> @@ -1454,6 +1486,13 @@ na </message> </context> <context> + <name>QDeclarativeApplication</name> + <message> + <source>Application is an abstract class</source> + <translation>Aplikace je abstraktní třída</translation> + </message> +</context> +<context> <name>QDeclarativeBehavior</name> <message> <source>Cannot change the animation assigned to a Behavior.</source> @@ -1566,21 +1605,29 @@ na </message> <message> <source>Component objects cannot declare new properties.</source> - <translation>Předměty součástek nemohou prohlásit nové vlastnosti.</translation> + <translation>Objekty součástek nemohou prohlásit nové vlastnosti.</translation> </message> <message> <source>Component objects cannot declare new signals.</source> - <translation>Předměty součástek nemohou prohlásit nové signály.</translation> + <translation>Objekty součástek nemohou prohlásit nové signály.</translation> </message> <message> <source>Component objects cannot declare new functions.</source> - <translation>Předměty součástek nemohou prohlásit nové funkce.</translation> + <translation>Objekty součástek nemohou prohlásit nové funkce.</translation> </message> <message> <source>Cannot create empty component specification</source> <translation>Nelze vytvořit prázdné vymezení součástky</translation> </message> <message> + <source>"%1.%2" is not available in %3 %4.%5.</source> + <translation>"%1.%2" není dostupný v %3 %4.%5.</translation> + </message> + <message> + <source>"%1.%2" is not available due to component versioning.</source> + <translation>"%1.%2" není dostupný kvůli verzování součástky.</translation> + </message> + <message> <source>Incorrectly specified signal assignment</source> <translation>Nesprávně vymezené přiřazení signálu</translation> </message> @@ -1602,11 +1649,11 @@ na </message> <message> <source>Non-existent attached object</source> - <translation>Pro vlastnost neexistuje žádný připojený předmět</translation> + <translation>Pro vlastnost neexistuje žádný připojený objekt</translation> </message> <message> <source>Invalid attached object assignment</source> - <translation>Neplatné přiřazení připojeného předmětu</translation> + <translation>Neplatné přiřazení připojeného objektu</translation> </message> <message> <source>Cannot assign to non-existent default property</source> @@ -1654,11 +1701,11 @@ na </message> <message> <source>Unexpected object assignment</source> - <translation>Nepřípustné přiřazení předmětu</translation> + <translation>Nepřípustné přiřazení objektu</translation> </message> <message> <source>Cannot assign object to list</source> - <translation>Přiřazení předmětu k seznamům není přípustné</translation> + <translation>Přiřazení objektu k seznamům není přípustné</translation> </message> <message> <source>Can only assign one binding to lists</source> @@ -1682,7 +1729,7 @@ na </message> <message> <source>Cannot assign object to property</source> - <translation>Přiřazení předmětu k vlastnosti není přípustné</translation> + <translation>Přiřazení objektu k vlastnosti není přípustné</translation> </message> <message> <source>"%1" cannot operate on "%2"</source> @@ -1791,6 +1838,10 @@ na <source>Invalid empty URL</source> <translation>Neplátná prázdná adresa (URL)</translation> </message> + <message> + <source>createObject: value is not an object</source> + <translation>createObject: Hodnota není objektem</translation> + </message> </context> <context> <name>QDeclarativeConnections</name> @@ -1800,7 +1851,7 @@ na </message> <message> <source>Connections: nested objects not allowed</source> - <translation>Spojení: vkládané předměty nejsou povoleny</translation> + <translation>Spojení: vkládané objekty nejsou povoleny</translation> </message> <message> <source>Connections: syntax error</source> @@ -1931,6 +1982,17 @@ na </message> </context> <context> + <name>QDeclarativeLayoutMirroringAttached</name> + <message> + <source>LayoutDirection attached property only works with Items</source> + <translation>Připojená vlastnost LayoutDirection pracuje jen s položkami</translation> + </message> + <message> + <source>LayoutMirroring is only available via attached properties</source> + <translation>LayoutMirroring je dostupné pouze prostřednictvím připojených vlastností</translation> + </message> +</context> +<context> <name>QDeclarativeListModel</name> <message> <source>remove: index %1 out of range</source> @@ -1938,7 +2000,7 @@ na </message> <message> <source>insert: value is not an object</source> - <translation>vložit (insert): Hodnota není předmětem</translation> + <translation>vložit (insert): Hodnota není objektem</translation> </message> <message> <source>insert: index %1 out of range</source> @@ -1950,11 +2012,11 @@ na </message> <message> <source>append: value is not an object</source> - <translation>připojit (append): Hodnota není předmětem</translation> + <translation>připojit (append): Hodnota není objektem</translation> </message> <message> <source>set: value is not an object</source> - <translation>nastavit (set): Hodnota není předmětem</translation> + <translation>nastavit (set): Hodnota není objektem</translation> </message> <message> <source>set: index %1 out of range</source> @@ -2030,6 +2092,10 @@ na </message> <message> <source>Illegal escape squence</source> + <translation type="obsolete">Neplatná úniková posloupnost</translation> + </message> + <message> + <source>Illegal escape sequence</source> <translation>Neplatná úniková posloupnost</translation> </message> <message> @@ -2158,7 +2224,7 @@ na <name>QDeclarativePropertyChanges</name> <message> <source>PropertyChanges does not support creating state-specific objects.</source> - <translation>PropertyChanges nepodporuje vytváření předmětů, které jsou přiřazeny jednomu stavu.</translation> + <translation>PropertyChanges nepodporuje vytváření objektů, které jsou přiřazeny jednomu stavu.</translation> </message> <message> <source>Cannot assign to non-existent property "%1"</source> @@ -2203,7 +2269,7 @@ na <name>QDeclarativeVME</name> <message> <source>Unable to create object of type %1</source> - <translation>Nepodařilo se vytvořit žádný předmět typu %1</translation> + <translation>Nepodařilo se vytvořit žádný objekt typu %1</translation> </message> <message> <source>Cannot assign value %1 to property %2</source> @@ -2211,7 +2277,7 @@ na </message> <message> <source>Cannot assign object type %1 with no default method</source> - <translation>Typ předmětu %1 nelze přiřadit, protože neexistuje žádná výchozí metoda</translation> + <translation>Typ objektu %1 nelze přiřadit, protože neexistuje žádná výchozí metoda</translation> </message> <message> <source>Cannot connect mismatched signal/slot %1 %vs. %2</source> @@ -2219,19 +2285,19 @@ na </message> <message> <source>Cannot assign an object to signal property %1</source> - <translation>Vlastnosti signálu %1 nelze přiřadit žádný předmět</translation> + <translation>Vlastnosti signálu %1 nelze přiřadit žádný objekt</translation> </message> <message> <source>Cannot assign object to list</source> - <translation>Přiřazení předmětu k seznamům není přípustné</translation> + <translation>Přiřazení objektu k seznamům není přípustné</translation> </message> <message> <source>Cannot assign object to interface property</source> - <translation>Vlastnosti rozhraní nelze přiřadit žádný předmět</translation> + <translation>Vlastnosti rozhraní nelze přiřadit žádný objekt</translation> </message> <message> <source>Unable to create attached object</source> - <translation>Nepodařilo se vytvořit žádný připojený předmět (typu 'attached')</translation> + <translation>Nepodařilo se vytvořit žádný připojený objekt (typu 'attached')</translation> </message> <message> <source>Cannot set properties on %1 as it is null</source> @@ -2496,6 +2562,10 @@ na <translation>%1 se nepodařilo otevřít pro čtení</translation> </message> <message> + <source>No file engine available or engine does not support UnMapExtension</source> + <translation>Není dostupný žádný souborový stroj nebo stroj nepodporuje UnMapExtension</translation> + </message> + <message> <source>Destination file exists</source> <translation>Cílový soubor již existuje</translation> </message> @@ -2824,7 +2894,7 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> </message> <message> <source>Light</source> - <translation>Lehké</translation> + <translation>Jemné</translation> </message> <message> <source>Ogham</source> @@ -2880,7 +2950,7 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> </message> <message> <source>Italic</source> - <translation>Itala</translation> + <translation>Kurzíva</translation> </message> <message> <source>Korean</source> @@ -2888,11 +2958,11 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> </message> <message> <source>Normal</source> - <translation>Obvyklé</translation> + <translation>Normální</translation> </message> <message> <source>Oblique</source> - <translation>Nakloněné</translation> + <translation>Skloněné</translation> </message> <message> <source>Telugu</source> @@ -3480,6 +3550,18 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> <source>Could not mmap '%1': %2</source> <translation type="obsolete">Operace mmap se nezdařila u '%1': %2</translation> </message> + <message> + <source>'%1' is not an ELF object (%2)</source> + <translation>'%1' není objekt ELF (%2)</translation> + </message> + <message> + <source>'%1' is not an ELF object</source> + <translation>'%1' není objekt ELF</translation> + </message> + <message> + <source>'%1' is an invalid ELF object (%2)</source> + <translation>'%1' je neplatný objekt ELF (%2)</translation> + </message> </context> <context> <name>QLineEdit</name> @@ -3577,6 +3659,10 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> <source>%1: Remote closed</source> <translation>%1: Spojení bylo protější stranou uzavřeno</translation> </message> + <message> + <source>%1: Access denied</source> + <translation>Přístup odepřen</translation> + </message> </context> <context> <name>QMYSQLDriver</name> @@ -3751,6 +3837,10 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> <source>Actions</source> <translation>Činnosti</translation> </message> + <message> + <source>Corner Toolbar</source> + <translation>Rohový nástrojový pruh</translation> + </message> </context> <context> <name>QMessageBox</name> @@ -3869,7 +3959,7 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> </message> <message> <source>Another socket is already listening on the same port</source> - <translation>Na tomto portu již naslouchá jiná zásuvka (socket)</translation> + <translation>Na této přípojce (bráně, portu) již naslouchá jiná zásuvka (socket)</translation> </message> <message> <source>Unable to send a message</source> @@ -3935,7 +4025,7 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> <name>QNetworkAccessDataBackend</name> <message> <source>Operation not supported on %1</source> - <translation>Tato operace není %1 podporována</translation> + <translation type="obsolete">Tato operace není %1 podporována</translation> </message> <message> <source>Invalid URI: %1</source> @@ -4032,6 +4122,10 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> <translation>Chyba při spojení přes síť.</translation> </message> <message> + <source>backend start error.</source> + <translation>Chyba spuštění jádra.</translation> + </message> + <message> <source>Temporary network failure.</source> <translation>Síť dočasně vypadla.</translation> </message> @@ -4276,6 +4370,10 @@ Ověřte, prosím, že byl zadán správný název souboru.</translation> <source>invalid query: "%1"</source> <translation>Neplátný dotaz: "%1"</translation> </message> + <message> + <source>Host not found</source> + <translation>Nepodařilo se najít počítač</translation> + </message> </context> <context> <name>QPPDOptionsModel</name> @@ -5545,6 +5643,10 @@ Zvolte, prosím, pro soubor jiný název.</translation> <translation>%1: Bylo dosaženo systémem podmíněné meze velikosti</translation> </message> <message> + <source>%1: bad name</source> + <translation>%1: Špatný název</translation> + </message> + <message> <source>%1: unix key file doesn't exists</source> <translation type="obsolete">%1: Soubor s unixovým klíčem neexistuje</translation> </message> @@ -5558,7 +5660,7 @@ Zvolte, prosím, pro soubor jiný název.</translation> </message> <message> <source>%1: key error</source> - <translation>%1: Chybný klíč</translation> + <translation type="obsolete">%1: Chybný klíč</translation> </message> <message> <source>%1: create size is less then 0</source> @@ -6804,6 +6906,10 @@ Zvolte, prosím, pro soubor jiný název.</translation> <translation>Název hostitelského počítače neodpovídá žádnému z hostitelů platných pro toto osvědčení, kteří jsou na seznamu</translation> </message> <message> + <source>The peer certificate is blacklisted</source> + <translation>Osvědčení protějšího místa je na černé listině</translation> + </message> + <message> <source>Unknown error</source> <translation>Neznámá chyba</translation> </message> @@ -6828,6 +6934,121 @@ Zvolte, prosím, pro soubor jiný název.</translation> </message> </context> <context> + <name>QSymbianSocketEngine</name> + <message> + <source>Unable to initialize non-blocking socket</source> + <translation>Neblokující zásuvku (socket) se nepodařilo spustit</translation> + </message> + <message> + <source>Unable to initialize broadcast socket</source> + <translation>Zásuvku pro vysílání (socket) se nepodařilo spustit</translation> + </message> + <message> + <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> + <translation>Vyzkoušelo se použít IPv6 zásuvku (socket) na systému bez podpory IPv6</translation> + </message> + <message> + <source>The remote host closed the connection</source> + <translation>Vzdálený počítač uzavřel spojení</translation> + </message> + <message> + <source>Network operation timed out</source> + <translation>Časový limit pro síťovou operaci byl překročen</translation> + </message> + <message> + <source>Out of resources</source> + <translation>Nejsou dostupné žádné zdroje</translation> + </message> + <message> + <source>Unsupported socket operation</source> + <translation>Nepodporovaná zásuvková operace (povel pro socket)</translation> + </message> + <message> + <source>Protocol type not supported</source> + <translation>Protokol tohoto typu není podporován</translation> + </message> + <message> + <source>Invalid socket descriptor</source> + <translation>Neplatný deskriptor zásuvky (socketu)</translation> + </message> + <message> + <source>Host unreachable</source> + <translation>Cílový počítač je nedosažitelný</translation> + </message> + <message> + <source>Network unreachable</source> + <translation>Síť není dosažitelná</translation> + </message> + <message> + <source>Permission denied</source> + <translation>Přístup odepřen</translation> + </message> + <message> + <source>Connection timed out</source> + <translation>Časový limit pro spojení byl překročen</translation> + </message> + <message> + <source>Connection refused</source> + <translation>Spojení bylo odmítnuto</translation> + </message> + <message> + <source>The bound address is already in use</source> + <translation>Uvedená adresa se už používá</translation> + </message> + <message> + <source>The address is not available</source> + <translation>Adresa není dostupná</translation> + </message> + <message> + <source>The address is protected</source> + <translation>Adresa je chráněna</translation> + </message> + <message> + <source>Datagram was too large to send</source> + <translation>Datagram byl pro odeslání příliš veliký</translation> + </message> + <message> + <source>Unable to send a message</source> + <translation>Nepodařilo se odeslat zprávu</translation> + </message> + <message> + <source>Unable to receive a message</source> + <translation>Zprávu se nepodařilo přijmout</translation> + </message> + <message> + <source>Unable to write</source> + <translation>Nepodařilo se zapsat</translation> + </message> + <message> + <source>Network error</source> + <translation>Síťová chyba</translation> + </message> + <message> + <source>Another socket is already listening on the same port</source> + <translation>Na této přípojce (bráně, portu) již naslouchá jiná zásuvka (socket)</translation> + </message> + <message> + <source>Operation on non-socket</source> + <translation>Operaci lze použít pouze na ne-zásuvce (socketu)</translation> + </message> + <message> + <source>The proxy type is invalid for this operation</source> + <translation>Tuto operaci nelze s tímto typem proxy provést</translation> + </message> + <message> + <source>The address is invalid for this operation</source> + <translation>Adresa pro tuto operaci není platná</translation> + </message> + <message> + <source>The specified network session is not opened</source> + <translation>Zadané síťové sezení není otevřeno</translation> + </message> + <message> + <source>Unknown error</source> + <translation>Neznámá chyba</translation> + </message> +</context> +<context> <name>QSystemSemaphore</name> <message> <source>%1: does not exist</source> @@ -6838,6 +7059,10 @@ Zvolte, prosím, pro soubor jiný název.</translation> <translation>%1: Již existuje</translation> </message> <message> + <source>%1: name error</source> + <translation>%1: Chybný název</translation> + </message> + <message> <source>%1: unknown error %2</source> <translation>%1: Neznámá chyba %2</translation> </message> @@ -6936,12 +7161,30 @@ Zvolte, prosím, pro soubor jiný název.</translation> <name>QUndoGroup</name> <message> <source>Redo</source> - <translation>Znovu</translation> + <translation type="obsolete">Znovu</translation> + </message> + <message> + <source>Undo</source> + <translation type="obsolete">Zpět</translation> + </message> + <message> + <source>Undo %1</source> + <translation>Zpět %1</translation> </message> <message> <source>Undo</source> + <comment>Default text for undo action</comment> <translation>Zpět</translation> </message> + <message> + <source>Redo %1</source> + <translation>Znovu %1</translation> + </message> + <message> + <source>Redo</source> + <comment>Default text for redo action</comment> + <translation>Znovu</translation> + </message> </context> <context> <name>QUndoModel</name> @@ -6954,12 +7197,30 @@ Zvolte, prosím, pro soubor jiný název.</translation> <name>QUndoStack</name> <message> <source>Redo</source> - <translation>Znovu</translation> + <translation type="obsolete">Znovu</translation> </message> <message> <source>Undo</source> + <translation type="obsolete">Zpět</translation> + </message> + <message> + <source>Undo %1</source> + <translation>Zpět %1</translation> + </message> + <message> + <source>Undo</source> + <comment>Default text for undo action</comment> <translation>Zpět</translation> </message> + <message> + <source>Redo %1</source> + <translation>Znovu %1</translation> + </message> + <message> + <source>Redo</source> + <comment>Default text for redo action</comment> + <translation>Znovu</translation> + </message> </context> <context> <name>QUnicodeControlCharacterMenu</name> @@ -7027,6 +7288,10 @@ Zvolte, prosím, pro soubor jiný název.</translation> <translation>Nahrání rámce bylo přerušeno změnou směrnice</translation> </message> <message> + <source>Loading is handled by the media engine</source> + <translation>O nahrávání se stará multimediální stroj</translation> + </message> + <message> <source>Frame load interruped by policy change</source> <translation type="obsolete">Nahrání rámce bylo přerušeno změnou směrnice</translation> </message> @@ -7123,7 +7388,7 @@ Zvolte, prosím, pro soubor jiný název.</translation> </message> <message> <source>Select all</source> - <translation>Vybrat vše</translation> + <translation type="obsolete">Vybrat vše</translation> </message> <message> <source>Select to the start of the line</source> @@ -7319,6 +7584,11 @@ Zvolte, prosím, pro soubor jiný název.</translation> <translation>Nebyl vybrán žádný soubor</translation> </message> <message> + <source>Details</source> + <comment>text to display in <details> tag when it has no <summary> child</comment> + <translation>Podrobnosti</translation> + </message> + <message> <source>Open in New Window</source> <comment>Open in New Window context menu item</comment> <translation>Otevřít v novém okně</translation> @@ -7336,17 +7606,72 @@ Zvolte, prosím, pro soubor jiný název.</translation> <message> <source>Open Image</source> <comment>Open Image in New Window context menu item</comment> - <translation>Vyobrazení otevřít v novém okně</translation> + <translation>Obrázek otevřít v novém okně</translation> </message> <message> <source>Save Image</source> <comment>Download Image context menu item</comment> - <translation>Uložit vyobrazení</translation> + <translation>Uložit obrázek</translation> </message> <message> <source>Copy Image</source> <comment>Copy Link context menu item</comment> - <translation>Kopírovat vyobrazení</translation> + <translation>Kopírovat obrázek</translation> + </message> + <message> + <source>Copy Image Address</source> + <comment>Copy Image Address menu item</comment> + <translation>Kopírovat adresu obrázku</translation> + </message> + <message> + <source>Open Video</source> + <comment>Open Video in New Window</comment> + <translation>Otevřít video</translation> + </message> + <message> + <source>Open Audio</source> + <comment>Open Audio in New Window</comment> + <translation>Otevřít zvuk</translation> + </message> + <message> + <source>Copy Video</source> + <comment>Copy Video Link Location</comment> + <translation>Kopírovat video</translation> + </message> + <message> + <source>Copy Audio</source> + <comment>Copy Audio Link Location</comment> + <translation>Kopírovat umístění odkazu na zvuk</translation> + </message> + <message> + <source>Toggle Controls</source> + <comment>Toggle Media Controls</comment> + <translation>Přepnout ovládání</translation> + </message> + <message> + <source>Toggle Loop</source> + <comment>Toggle Media Loop Playback</comment> + <translation>Přepnout smyčku</translation> + </message> + <message> + <source>Enter Fullscreen</source> + <comment>Switch Video to Fullscreen</comment> + <translation>Vejít do režimu na celou obrazovku</translation> + </message> + <message> + <source>Play</source> + <comment>Play</comment> + <translation>Přehrát</translation> + </message> + <message> + <source>Pause</source> + <comment>Pause</comment> + <translation>Pozastavit</translation> + </message> + <message> + <source>Mute</source> + <comment>Mute</comment> + <translation>Ztlumit</translation> </message> <message> <source>Open Frame</source> @@ -7389,6 +7714,11 @@ Zvolte, prosím, pro soubor jiný název.</translation> <translation>Vložit</translation> </message> <message> + <source>Select All</source> + <comment>Select All context menu item</comment> + <translation>Vybrat vše</translation> + </message> + <message> <source>No Guesses Found</source> <comment>No Guesses Found context menu item</comment> <translation>Nebyly nalezeny žádné návrhy</translation> @@ -7866,7 +8196,7 @@ Zvolte, prosím, pro soubor jiný název.</translation> </message> <message> <source>Bad HTTP request</source> - <translation>Neplatný požadavek HTTP</translation> + <translation type="obsolete">Neplatný požadavek HTTP</translation> </message> <message> <source>Unknown</source> @@ -8328,6 +8658,94 @@ Zvolte, prosím, pro soubor jiný název.</translation> </message> </context> <context> + <name>QmlJSDebugger::LiveSelectionTool</name> + <message> + <source>Items</source> + <translation>Položky</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::QmlToolBar</name> + <message> + <source>Inspector Mode</source> + <translation>Režim inspektora</translation> + </message> + <message> + <source>Play/Pause Animations</source> + <translation>Přehrát/Pozastavit animace</translation> + </message> + <message> + <source>Select</source> + <translation>Vybrat</translation> + </message> + <message> + <source>Select (Marquee)</source> + <translation>Vybrat (Marquee)</translation> + </message> + <message> + <source>Zoom</source> + <translation>Přiblížit/Oddálit</translation> + </message> + <message> + <source>Color Picker</source> + <translation>Volič barvy</translation> + </message> + <message> + <source>Apply Changes to QML Viewer</source> + <translation>Použít změny na prohlížeč QML</translation> + </message> + <message> + <source>Apply Changes to Document</source> + <translation>Použít změny na dokument</translation> + </message> + <message> + <source>Tools</source> + <translation>Nástroje</translation> + </message> + <message> + <source>1x</source> + <translation>1x</translation> + </message> + <message> + <source>0.5x</source> + <translation>0.5x</translation> + </message> + <message> + <source>0.25x</source> + <translation>0.25x</translation> + </message> + <message> + <source>0.125x</source> + <translation>0.125x</translation> + </message> + <message> + <source>0.1x</source> + <translation>0.1x</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ToolBarColorBox</name> + <message> + <source>Copy Color</source> + <translation>Kopírovat barvu</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ZoomTool</name> + <message> + <source>Zoom to &100%</source> + <translation>Zvětšit na &100%</translation> + </message> + <message> + <source>Zoom In</source> + <translation>Přiblížit</translation> + </message> + <message> + <source>Zoom Out</source> + <translation>Oddálit</translation> + </message> +</context> +<context> <name>QtXmlPatterns</name> <message> <source>A comment cannot contain %1</source> @@ -9363,7 +9781,7 @@ Zvolte, prosím, pro soubor jiný název.</translation> </message> <message> <source>Derivation method of %1 must be extension because the base type %2 is a simple type.</source> - <translation>Rozšíření s musí používat jako způsob dědičnosti (odvození) pro %1, neboť základní typ %2 je jednoduchým typem.</translation> + <translation>Rozšíření musí používat jako způsob dědičnosti (odvození) pro %1, neboť základní typ %2 je jednoduchým typem.</translation> </message> <message> <source>Complex type %1 has duplicated element %2 in its content model.</source> diff --git a/translations/qt_gl.ts b/translations/qt_gl.ts index a77bcc7..96b47ae 100644 --- a/translations/qt_gl.ts +++ b/translations/qt_gl.ts @@ -9,9 +9,24 @@ </message> </context> <context> + <name>Debugger::JSAgentWatchData</name> + <message> + <source>[Array of length %1]</source> + <translation>[Array de longitude %1]</translation> + </message> + <message> + <source><undefined></source> + <translation><non definido></translation> + </message> +</context> +<context> <name>FakeReply</name> <message> <source>Fake error !</source> + <translation type="obsolete">Erro falso!</translation> + </message> + <message> + <source>Fake error!</source> <translation>Erro falso!</translation> </message> <message> @@ -111,7 +126,7 @@ máis preferencia ou está configurado especificamente para este fluxo.</html <source>Warning: You do not seem to have the base GStreamer plugins installed. All audio and video support has been disabled</source> <translation>Aviso: Non semella ter instalados os complementos básicos de GStreamer. - Desactivouse todo o soporte de son e vídeo</translation> + Desactivouse toda a compatibilidade con son e vídeo</translation> </message> </context> <context> @@ -152,7 +167,7 @@ reproducir este contido: %0</translation> </message> <message> <source>Could not open audio device. The device is already in use.</source> - <translation>Non foi posíbel abrir o dispositivo de audio. O dispositivo xa está en uso.</translation> + <translation>Non foi posíbel abrir o dispositivo de son; Xa está en uso.</translation> </message> <message> <source>Could not decode media source.</source> @@ -183,7 +198,7 @@ reproducir este contido: %0</translation> </message> <message> <source>Not supported</source> - <translation>Non soportado</translation> + <translation>Non admitido</translation> </message> <message> <source>Overflow</source> @@ -239,7 +254,7 @@ reproducir este contido: %0</translation> </message> <message> <source>Streaming not supported</source> - <translation>Non está soportada a retransmisión</translation> + <translation>Non permite utilizar retransmisións</translation> </message> <message> <source>Server alert</source> @@ -263,7 +278,7 @@ reproducir este contido: %0</translation> </message> <message> <source>Proxy server not supported</source> - <translation>O servidor proxy non está soportado</translation> + <translation>Non se permite utilizar servidor proxy</translation> </message> <message> <source>Audio output error</source> @@ -326,7 +341,7 @@ reproducir este contido: %0</translation> </message> <message> <source>Download error</source> - <translation type="unfinished"></translation> + <translation>Aconteceu un erro ao descargar</translation> </message> </context> <context> @@ -400,7 +415,7 @@ reproducir este contido: %0</translation> </message> <message> <source>Reflections delay (ms)</source> - <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment> + <extracomment>ReflectionsDelay: Amount of delay between the arrival of the direct path from the source and the arrival of the first reflection.</extracomment> <translation>Retardo dos reflexos (ms)</translation> </message> <message> @@ -415,7 +430,7 @@ reproducir este contido: %0</translation> </message> <message> <source>Reverb level (mB)</source> - <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> + <extracomment>ReverbLevel: Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> <translation>Nivel da reverberación (mB)</translation> </message> <message> @@ -433,7 +448,7 @@ reproducir este contido: %0</translation> <name>Phonon::MMF::MediaObject</name> <message> <source>Error opening source: type not supported</source> - <translation>Erro ao abrir a fonte: tipo non soportado</translation> + <translation>Erro ao abrir a fonte: tipo non admitido</translation> </message> <message> <source>Error opening source: resource is compressed</source> @@ -449,7 +464,7 @@ reproducir este contido: %0</translation> </message> <message> <source>Failed to set requested IAP</source> - <translation type="unfinished"></translation> + <translation>Fallou a definición da IAP pedida</translation> </message> </context> <context> @@ -473,8 +488,12 @@ reproducir este contido: %0</translation> <translation>Volume: %1%</translation> </message> <message> + <source>Use this slider to adjust the volume. The leftmost position is 0%. The rightmost is %1%</source> + <translation>Use esta barra deslizante para axustar o volume. A posición da esquerda é o 0%, a da dereita o %1%</translation> + </message> + <message> <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source> - <translation>Use esta barra deslizante para axustar o volume. A posición da esquerda é o + <translation type="obsolete">Use esta barra deslizante para axustar o volume. A posición da esquerda é o 0%, a da dereita o %1%</translation> </message> <message> @@ -756,7 +775,7 @@ File not found. Check path and filename.</source> <translation>%1 Non se atopou o ficheiro. -Verifique a ruta e o nome do ficheiro.</translation> +Comprobe a ruta e o nome do ficheiro.</translation> </message> <message> <source>All Files (*.*)</source> @@ -828,7 +847,7 @@ para <name>Q3NetworkProtocol</name> <message> <source>Operation stopped by the user</source> - <translation>Operación interrompida polo usuario</translation> + <translation>Operación detida polo usuario</translation> </message> </context> <context> @@ -958,35 +977,35 @@ para <name>Q3UrlOperator</name> <message> <source>The protocol `%1' is not supported</source> - <translation>O protocolo «%1» non está soportado.</translation> + <translation>Non se permite utilizar o protocolo «%1»</translation> </message> <message> <source>The protocol `%1' does not support listing directories</source> - <translation>O protocolo «%1» non soporta sacar listaxes de cartafoles</translation> + <translation>O protocolo «%1» non permite sacar listaxes de cartafoles</translation> </message> <message> <source>The protocol `%1' does not support creating new directories</source> - <translation>O protocolo «%1» non soporta crear cartafoles novos</translation> + <translation>O protocolo «%1» non permite crear cartafoles novos</translation> </message> <message> <source>The protocol `%1' does not support removing files or directories</source> - <translation>O protocolo «%1» non soporta eliminar nin ficheiros nin cartafoles</translation> + <translation>O protocolo «%1» non permite eliminar nin ficheiros nin cartafoles</translation> </message> <message> <source>The protocol `%1' does not support renaming files or directories</source> - <translation>O protocolo «%1» non soporta mudar o nome dos ficheiros nin dos cartafoles</translation> + <translation>O protocolo «%1» non permite mudar o nome dos ficheiros nin dos cartafoles</translation> </message> <message> <source>The protocol `%1' does not support getting files</source> - <translation>O protocolo «%1» non soporta obter ficheiros</translation> + <translation>O protocolo «%1» non permite obter ficheiros</translation> </message> <message> <source>The protocol `%1' does not support putting files</source> - <translation>O protocolo «%1» non soporta enviar ficheiros</translation> + <translation>O protocolo «%1» non permite enviar ficheiros</translation> </message> <message> <source>The protocol `%1' does not support copying or moving files or directories</source> - <translation>O protocolo «%1» non soporta copiar nin mover nin ficheiros nin cartafoles</translation> + <translation>O protocolo «%1» non permite copiar nin mover nin ficheiros nin cartafoles</translation> </message> <message> <source>(unknown)</source> @@ -1024,7 +1043,7 @@ para </message> <message> <source>Operation on socket is not supported</source> - <translation>A operación no socket non está soportada</translation> + <translation>Non se permite usar a operación no socket</translation> </message> <message> <source>Host not found</source> @@ -1065,6 +1084,14 @@ para <context> <name>QAccessibleButton</name> <message> + <source>Uncheck</source> + <translation>Desmarcar</translation> + </message> + <message> + <source>Check</source> + <translation>Marcar</translation> + </message> + <message> <source>Press</source> <translation>Premer</translation> </message> @@ -1213,7 +1240,7 @@ para <message> <source>%1: permission denied</source> <comment>QSystemSemaphore</comment> - <translation type="unfinished">%1: negouse o permiso</translation> + <translation>%1: negouse o permiso</translation> </message> <message> <source>%1: unknown error %2</source> @@ -1244,15 +1271,15 @@ para </message> <message> <source>Unable to commit transaction</source> - <translation>Non foi posíbel entregar a transacción</translation> + <translation>Non foi posíbel remitir a transacción</translation> </message> <message> <source>Unable to rollback transaction</source> - <translation>Non foi posíbel anular a transacción</translation> + <translation>Non foi posíbel regresar a transacción</translation> </message> <message> <source>Unable to set autocommit</source> - <translation>Non foi posíbel activar a entrega automática</translation> + <translation>Non foi posíbel activar a remisión automática</translation> </message> </context> <context> @@ -1379,7 +1406,14 @@ superior, inferior nin vcenter.</translation> <name>QDeclarativeAnimatedImage</name> <message> <source>Qt was built without support for QMovie</source> - <translation>Qt construíuse sen soporte para QMovie</translation> + <translation>Qt construíuse sen a implementación de QMovie</translation> + </message> +</context> +<context> + <name>QDeclarativeApplication</name> + <message> + <source>Application is an abstract class</source> + <translation>A aplicación é unha clase abstracta</translation> </message> </context> <context> @@ -1510,6 +1544,14 @@ superior, inferior nin vcenter.</translation> <translation>Non se pode crear unha especificación de compoñente baleira</translation> </message> <message> + <source>"%1.%2" is not available in %3 %4.%5.</source> + <translation>«%1.%2» non está dispoñíbel en %3 %4 %5.</translation> + </message> + <message> + <source>"%1.%2" is not available due to component versioning.</source> + <translation>«%1.%2» non está dispoñíbel debido ás versións das compoñentes.</translation> + </message> + <message> <source>Incorrectly specified signal assignment</source> <translation>Especificouse incorrectamente a asignación de sinal</translation> </message> @@ -1607,7 +1649,7 @@ superior, inferior nin vcenter.</translation> </message> <message> <source>Cannot assign multiple values to a singular property</source> - <translation type="unfinished"></translation> + <translation>Non se poden asignar varios valores a unha propiedade singular</translation> </message> <message> <source>Cannot assign object to property</source> @@ -1703,20 +1745,20 @@ superior, inferior nin vcenter.</translation> </message> <message> <source>Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property></source> - <translation type="unfinished"></translation> + <translation>Referencia non válida a un alcume. Unha referencia a un alcume debe indicarse como <id>, <id> <property> ou como <id>.<value.property>.<property></translation> </message> <message> <source>Alias property exceeds alias bounds</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> - <translation type="obsolete">Referencia non válida a un alcume. Unha referencia a un alcume debe indicarse como <id> ou como <id>.<propiedade></translation> + <translation>A propiedade do alcume excede os límite do alcume</translation> </message> <message> <source>Invalid alias reference. Unable to find id "%1"</source> <translation>Referencia non válida a un alcume. Non foi posíbel atopar o id «%1»</translation> </message> + <message> + <source>Invalid alias reference. An alias reference must be specified as <id> or <id>.<property></source> + <translation type="obsolete">Referencia non válida a un alcume. Unha referencia a un alcume debe indicarse como <id> ou como <id>.<propiedade></translation> + </message> </context> <context> <name>QDeclarativeComponent</name> @@ -1724,6 +1766,10 @@ superior, inferior nin vcenter.</translation> <source>Invalid empty URL</source> <translation>URL baleiro non válido</translation> </message> + <message> + <source>createObject: value is not an object</source> + <translation>createObject: o valor non é un obxecto</translation> + </message> </context> <context> <name>QDeclarativeCompositeTypeManager</name> @@ -1805,11 +1851,11 @@ superior, inferior nin vcenter.</translation> <name>QDeclarativeImportDatabase</name> <message> <source>cannot load module "%1": File name case mismatch for "%2"</source> - <translation type="unfinished"></translation> + <translation type="obsolete">non se pode cargar o módulo «%1»: non coinciden as maiúsculas do nome do ficheiro «%2»</translation> </message> <message> <source>module "%1" definition "%2" not readable</source> - <translation>a definición «%2» no módulo «%1» non é lexíbel</translation> + <translation type="obsolete">a definición «%2» no módulo «%1» non é lexíbel</translation> </message> <message> <source>plugin cannot be loaded for module "%1": %2</source> @@ -1864,8 +1910,12 @@ superior, inferior nin vcenter.</translation> <translation>non é un tipo</translation> </message> <message> + <source>File name case mismatch for "%1"</source> + <translation>Non casan as maiúculas do nome do ficheiro «%1»</translation> + </message> + <message> <source>File name case mismatch for "%2"</source> - <translation type="unfinished"></translation> + <translation type="obsolete">Non casan as maiúculas do nome do ficheiro «%2»</translation> </message> </context> <context> @@ -1883,6 +1933,17 @@ superior, inferior nin vcenter.</translation> </message> </context> <context> + <name>QDeclarativeLayoutMirroringAttached</name> + <message> + <source>LayoutDirection attached property only works with Items</source> + <translation>A propriedade anexa LayoutDirection só funciona con «Items»</translation> + </message> + <message> + <source>LayoutMirroring is only available via attached properties</source> + <translation>LayoutMirroring só está dispoñíbel a través das propiedades anexas</translation> + </message> +</context> +<context> <name>QDeclarativeListModel</name> <message> <source>remove: index %1 out of range</source> @@ -1981,16 +2042,12 @@ superior, inferior nin vcenter.</translation> <translation>Cadea non pechada no fin dunha liña</translation> </message> <message> - <source>Illegal escape squence</source> - <translation type="obsolete">Secuencia de escape ilegal</translation> - </message> - <message> <source>Illegal escape sequence</source> <translation>Secuencia de escape ilegal</translation> </message> <message> <source>Unclosed comment at end of file</source> - <translation>Comentario non pechado ao final dunha liña</translation> + <translation>Comentario non pechado ao final dun ficheiro</translation> </message> <message> <source>Illegal syntax for exponential number</source> @@ -2022,7 +2079,7 @@ superior, inferior nin vcenter.</translation> </message> <message> <source>Unexpected token `%1'</source> - <translation>Token «%1» non agardado.</translation> + <translation>Token «%1» non agardado</translation> </message> <message> <source>Expected token `%1'</source> @@ -2074,12 +2131,16 @@ superior, inferior nin vcenter.</translation> </message> <message> <source>Readonly not yet supported</source> - <translation>Aínda non se soporta o só para lectura</translation> + <translation>Aínda non se permite utilizar só para lectura</translation> </message> <message> <source>JavaScript declaration outside Script element</source> <translation>Declaración de JavaScript fora dun elemento Script</translation> </message> + <message> + <source>Illegal escape squence</source> + <translation type="obsolete">Secuencia de escape ilegal</translation> + </message> </context> <context> <name>QDeclarativePauseAnimation</name> @@ -2114,7 +2175,7 @@ superior, inferior nin vcenter.</translation> <name>QDeclarativePropertyChanges</name> <message> <source>PropertyChanges does not support creating state-specific objects.</source> - <translation>PropertyChanges non soporta crear obxectos específicos dun estado.</translation> + <translation>PropertyChanges non permite crear obxectos específicos dun estado.</translation> </message> <message> <source>Cannot assign to non-existent property "%1"</source> @@ -2140,19 +2201,19 @@ superior, inferior nin vcenter.</translation> <name>QDeclarativeTypeLoader</name> <message> <source>Script %1 unavailable</source> - <translation type="unfinished"></translation> + <translation>O script %1 non está dispoñíbel</translation> </message> <message> <source>Type %1 unavailable</source> - <translation type="unfinished">O tipo %1 non está dispoñíbel</translation> + <translation>O tipo %1 non está dispoñíbel</translation> </message> <message> <source>Namespace %1 cannot be used as a type</source> - <translation type="unfinished">O espazo de nomes %1 non se pode empregar como un tipo</translation> + <translation>O espazo de nomes %1 non se pode empregar como un tipo</translation> </message> <message> <source>%1 %2</source> - <translation type="unfinished">%1 %2</translation> + <translation>%1 %2</translation> </message> </context> <context> @@ -2198,14 +2259,14 @@ superior, inferior nin vcenter.</translation> <name>QDeclarativeVisualDataModel</name> <message> <source>Delegate component must be Item type.</source> - <translation>O compoñente delegado debe ser do tipo Item.</translation> + <translation>O compoñente delegado debe ser do tipo «Item».</translation> </message> </context> <context> <name>QDeclarativeXmlListModel</name> <message> <source>Qt was built without support for xmlpatterns</source> - <translation>Qt construíuse sen soporte para xmlpatterns</translation> + <translation>Qt construíuse sen implementación de xmlpatterns</translation> </message> </context> <context> @@ -2332,7 +2393,7 @@ superior, inferior nin vcenter.</translation> </message> <message> <source>Abort</source> - <translation>Abortar</translation> + <translation>Interromper</translation> </message> <message> <source>Retry</source> @@ -2441,16 +2502,20 @@ superior, inferior nin vcenter.</translation> </message> <message> <source>Cannot open for output</source> - <translation>Non foi posíbel abrir o ficheiro de saída</translation> + <translation>Non foi posíbel abrir para saída</translation> </message> <message> <source>Failure to write block</source> - <translation>Non foi posíbel escribir o bloque</translation> + <translation>Fallou a escrita do bloque</translation> </message> <message> <source>Cannot create %1 for output</source> <translation>Non foi posíbel crear %1 para a saída</translation> </message> + <message> + <source>No file engine available or engine does not support UnMapExtension</source> + <translation>Ou non hai dispoñíbel ningún motor de ficheiros ou o motor non admite UnMapExtension</translation> + </message> </context> <context> <name>QFileDialog</name> @@ -2628,7 +2693,7 @@ Desexa aínda así borralo?</translation> </message> <message> <source>Drive</source> - <translation>Dispositivo</translation> + <translation>Unidade</translation> </message> <message> <source>File</source> @@ -2991,7 +3056,7 @@ Desexa aínda así borralo?</translation> <message> <source>Downloading file failed: %1</source> - <translation>Fallou a obtención do ficheiro: + <translation>Fallou a descarga do ficheiro: %1</translation> </message> <message> @@ -3105,7 +3170,7 @@ Desexa aínda así borralo?</translation> </message> <message> <source>HTTPS connection requested but SSL support not compiled in</source> - <translation>Pediuse unha conexión HTTPS pero non se compilou con soporte de SSL</translation> + <translation>Pediuse unha conexión HTTPS pero non se compilou con implementación de SSL</translation> </message> <message> <source>Unknown error</source> @@ -3113,7 +3178,7 @@ Desexa aínda así borralo?</translation> </message> <message> <source>Request aborted</source> - <translation>Pedido abortado</translation> + <translation>Interrompeuse o pedido</translation> </message> <message> <source>No server set to connect to</source> @@ -3235,11 +3300,11 @@ Desexa aínda así borralo?</translation> </message> <message> <source>Unable to commit transaction</source> - <translation>Non foi posíbel entregar a transacción</translation> + <translation>Non foi posíbel remitir a transacción</translation> </message> <message> <source>Unable to rollback transaction</source> - <translation>Non foi posíbel anular a transacción</translation> + <translation>Non foi posíbel regresar a transacción</translation> </message> </context> <context> @@ -3278,7 +3343,7 @@ Desexa aínda así borralo?</translation> </message> <message> <source>Unable to commit transaction</source> - <translation>Non foi posíbel entregar a transacción</translation> + <translation>Non foi posíbel remitir a transacción</translation> </message> <message> <source>Could not allocate statement</source> @@ -3373,18 +3438,10 @@ Desexa aínda así borralo?</translation> <context> <name>QLibrary</name> <message> - <source>Could not mmap '%1': %2</source> - <translation type="obsolete">Non foi posíbel mmap «%1»: %2</translation> - </message> - <message> <source>Plugin verification data mismatch in '%1'</source> <translation>Erro de concordancia na verificación dos datos do complemento en «%1»</translation> </message> <message> - <source>Could not unmap '%1': %2</source> - <translation type="obsolete">Non foi posíbel unmap «%1»: %2</translation> - </message> - <message> <source>The shared library was not found.</source> <translation>Non se atopou a biblioteca compartida.</translation> </message> @@ -3421,6 +3478,26 @@ chave de compilación «%2», obtívose a «%3»</translation> <source>Cannot resolve symbol "%1" in %2: %3</source> <translation>Non é posíbel resolver o símbolo «%1» en %2: %3</translation> </message> + <message> + <source>Could not mmap '%1': %2</source> + <translation type="obsolete">Non foi posíbel mmap «%1»: %2</translation> + </message> + <message> + <source>Could not unmap '%1': %2</source> + <translation type="obsolete">Non foi posíbel unmap «%1»: %2</translation> + </message> + <message> + <source>'%1' is not an ELF object (%2)</source> + <translation>«%1» non é un obxecto ELF (%2)</translation> + </message> + <message> + <source>'%1' is not an ELF object</source> + <translation>«%1» non é un obxecto ELF</translation> + </message> + <message> + <source>'%1' is an invalid ELF object (%2)</source> + <translation>«%1» non é un obxecto ELF válido (%2)</translation> + </message> </context> <context> <name>QLineEdit</name> @@ -3508,7 +3585,7 @@ chave de compilación «%2», obtívose a «%3»</translation> </message> <message> <source>%1: The socket operation is not supported</source> - <translation>%1: A operación do socket non está soportada</translation> + <translation>%1: Non se permite utilizar a operación do socket</translation> </message> <message> <source>%1: Unknown error</source> @@ -3518,6 +3595,10 @@ chave de compilación «%2», obtívose a «%3»</translation> <source>%1: Unknown error %2</source> <translation>%1: Erro descoñecido %2</translation> </message> + <message> + <source>%1: Access denied</source> + <translation>%1: acceso denegado</translation> + </message> </context> <context> <name>QMYSQLDriver</name> @@ -3535,11 +3616,11 @@ chave de compilación «%2», obtívose a «%3»</translation> </message> <message> <source>Unable to commit transaction</source> - <translation>Non foi posíbel entregar a transacción</translation> + <translation>Non foi posíbel remitir a transacción</translation> </message> <message> <source>Unable to rollback transaction</source> - <translation>Non foi posíbel anular a transacción</translation> + <translation>Non foi posíbel regresar a transacción</translation> </message> </context> <context> @@ -3692,6 +3773,10 @@ chave de compilación «%2», obtívose a «%3»</translation> <source>Actions</source> <translation>Accións</translation> </message> + <message> + <source>Corner Toolbar</source> + <translation>Barra de ferramentas da esquina</translation> + </message> </context> <context> <name>QMessageBox</name> @@ -3763,7 +3848,7 @@ texto</translation> </message> <message> <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> - <translation>Tentouse usar soporte de socket IPv6 nunha plataforma en soporte de IPv6</translation> + <translation>Tentouse usar un socket IPv6 nunha plataforma sen implementación de IPv6</translation> </message> <message> <source>The remote host closed the connection</source> @@ -3783,7 +3868,7 @@ texto</translation> </message> <message> <source>Protocol type not supported</source> - <translation>Tipo de protocolo non soportado</translation> + <translation>Non se permite utilizar ese tipo de protocolo</translation> </message> <message> <source>Invalid socket descriptor</source> @@ -3811,7 +3896,7 @@ texto</translation> </message> <message> <source>The bound address is already in use</source> - <translation>O enderezo de conexión xa está en uso</translation> + <translation>O enderezo vinculado xa está en uso</translation> </message> <message> <source>The address is not available</source> @@ -3869,7 +3954,7 @@ texto</translation> <name>QNetworkAccessDataBackend</name> <message> <source>Operation not supported on %1</source> - <translation>Operación non soportada en %1</translation> + <translation type="obsolete">Operación non admitida en %1</translation> </message> <message> <source>Invalid URI: %1</source> @@ -3930,7 +4015,7 @@ texto</translation> </message> <message> <source>Error while downloading %1: %2</source> - <translation>Aconteceu un erro ao obter %1: %2</translation> + <translation>Aconteceu un erro ao descargar %1: %2</translation> </message> <message> <source>Error while uploading %1: %2</source> @@ -3955,7 +4040,7 @@ texto</translation> <name>QNetworkReply</name> <message> <source>Error downloading %1 - server replied: %2</source> - <translation>Aconteceu un erro ao obter %1, o servidor respondeu: %2</translation> + <translation>Aconteceu un erro ao descargar %1, o servidor respondeu: %2</translation> </message> <message> <source>Protocol "%1" is unknown</source> @@ -3966,6 +4051,10 @@ texto</translation> <translation>Erro da sesión de rede.</translation> </message> <message> + <source>backend start error.</source> + <translation>fallou o inicio da infraestrutura</translation> + </message> + <message> <source>Temporary network failure.</source> <translation>Fallo temporal da rede.</translation> </message> @@ -3992,7 +4081,7 @@ texto</translation> </message> <message> <source>Session aborted by user or system</source> - <translation>A sesión abortouse polo usuario ou polo sistema</translation> + <translation>A sesión interrompeuse polo usuario ou polo sistema</translation> </message> <message> <source>Unidentified Error</source> @@ -4004,11 +4093,11 @@ texto</translation> </message> <message> <source>The session was aborted by the user or system.</source> - <translation>A sesión abortouse polo usuario ou polo sistema.</translation> + <translation>A sesión interrompeuse polo usuario ou polo sistema.</translation> </message> <message> <source>The requested operation is not supported by the system.</source> - <translation>A operación pedida non está soportada polo sistema.</translation> + <translation>O sistema non permite utilizar a operación pedida.</translation> </message> <message> <source>The specified configuration cannot be used.</source> @@ -4016,7 +4105,7 @@ texto</translation> </message> <message> <source>Roaming was aborted or is not possible.</source> - <translation>A itinerancia abortouse ou non é posíbel.</translation> + <translation>A itinerancia interrompeuse ou non é posíbel.</translation> </message> </context> <context> @@ -4036,11 +4125,11 @@ texto</translation> </message> <message> <source>Unable to commit transaction</source> - <translation>Non foi posíbel entregar a transacción</translation> + <translation>Non foi posíbel remitir a transacción</translation> </message> <message> <source>Unable to rollback transaction</source> - <translation>Non foi posíbel anular a transacción</translation> + <translation>Non foi posíbel regresar a transacción</translation> </message> </context> <context> @@ -4086,7 +4175,7 @@ texto</translation> </message> <message> <source>Unable to connect - Driver doesn't support all functionality required</source> - <translation>Non foi posíbel conectar xa que o controlador non soporta todas as funcionalidades requiridas</translation> + <translation>Non foi posíbel conectar xa que o controlador non permite utilizar todas as funcionalidades requiridas</translation> </message> <message> <source>Unable to disable autocommit</source> @@ -4094,11 +4183,11 @@ texto</translation> </message> <message> <source>Unable to commit transaction</source> - <translation>Non foi posíbel entregar a transacción</translation> + <translation>Non foi posíbel remitir a transacción</translation> </message> <message> <source>Unable to rollback transaction</source> - <translation>Non foi posíbel anular a transacción</translation> + <translation>Non foi posíbel regresar a transacción</translation> </message> <message> <source>Unable to enable autocommit</source> @@ -4114,7 +4203,7 @@ texto</translation> <message> <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> <translation>QODBCResult::reset: Non foi posíbel estabelecer «SQL_CURSOR_STATIC» como -atributo da sentenza. Verifique a configuración do controlador ODBC</translation> +atributo da sentenza. Comprobe a configuración do controlador ODBC</translation> </message> <message> <source>Unable to execute statement</source> @@ -4159,6 +4248,50 @@ atributo da sentenza. Verifique a configuración do controlador ODBC</translatio <source>PulseAudio Sound Server</source> <translation>Servidor de son PulseAudio</translation> </message> + <message> + <source>Host not found</source> + <translation>Non se atopou o servidor</translation> + </message> + <message> + <source>Could not read image data</source> + <translation>Non foi posíbel ler os datos da imaxe</translation> + </message> + <message> + <source>Sequential device (eg socket) for image read not supported</source> + <translation>Non están implementados os dispositivos secuenciais (p.ex. socket) para ler imaxes</translation> + </message> + <message> + <source>Seek file/device for image read failed</source> + <translation>Fallou a busca de ficheiro ou dispositivo para ler imaxes</translation> + </message> + <message> + <source>Image mHeader read failed</source> + <translation>Fallou a lectura da mHeader da imaxe</translation> + </message> + <message> + <source>Image type not supported</source> + <translation>Tipo de imaxe non admitido</translation> + </message> + <message> + <source>Image dpeth not valid</source> + <translation>Profundidade da imaxe non válida</translation> + </message> + <message> + <source>Could not seek to image read footer</source> + <translation>Non foi posíbel buscar no pé de imaxe lido</translation> + </message> + <message> + <source>Could not read footer</source> + <translation>Non foi posíbel ler o pé</translation> + </message> + <message> + <source>Image type (non-TrueVision 2.0) not supported</source> + <translation>Tipo de imaxe non admitido (non TrueVision 2.0)</translation> + </message> + <message> + <source>Could not reset to read data</source> + <translation>Non foi posíbel reiniciar para ler os datos</translation> + </message> </context> <context> <name>QPPDOptionsModel</name> @@ -4183,11 +4316,11 @@ atributo da sentenza. Verifique a configuración do controlador ODBC</translatio </message> <message> <source>Could not commit transaction</source> - <translation>Non foi posíbel entregar a transacción</translation> + <translation>Non foi posíbel remitir a transacción</translation> </message> <message> <source>Could not rollback transaction</source> - <translation>Non foi posíbel anular a transacción</translation> + <translation>Non foi posíbel regresar a transacción</translation> </message> <message> <source>Unable to subscribe</source> @@ -4951,6 +5084,10 @@ Desexa sobrescribilo?</translation> <translation>sintaxe incorrecta para a procura cara diante</translation> </message> <message> + <source>lookbehinds not supported, see QTBUG-2371</source> + <translation>non están implementadas as buscas por detrás, consulte QTBUG-2371</translation> + </message> + <message> <source>bad repetition syntax</source> <translation>sintaxe incorrecta para a repetición</translation> </message> @@ -4991,11 +5128,11 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Unable to commit transaction</source> - <translation>Non foi posíbel entregar a transacción</translation> + <translation>Non foi posíbel remitir a transacción</translation> </message> <message> <source>Unable to rollback transaction</source> - <translation>Non foi posíbel anular a transacción</translation> + <translation>Non foi posíbel regresar a transacción</translation> </message> </context> <context> @@ -5025,11 +5162,11 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Unable to commit transaction</source> - <translation>Non foi posíbel entregar a transacción</translation> + <translation>Non foi posíbel remitir a transacción</translation> </message> <message> <source>Unable to rollback transaction</source> - <translation>Non foi posíbel anular a transacción</translation> + <translation>Non foi posíbel regresar a transacción</translation> </message> </context> <context> @@ -5173,7 +5310,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Clear Error Log</source> - <translation>Limpar a saída de erros</translation> + <translation>Limpar o rexistro de erros</translation> </message> <message> <source>Clear Console</source> @@ -5445,7 +5582,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>%1: key error</source> - <translation>%1: erro de chave</translation> + <translation type="obsolete">%1: erro de chave</translation> </message> <message> <source>%1: unable to make key</source> @@ -5472,6 +5609,10 @@ Desexa sobrescribilo?</translation> <translation>%1: restricións de tamaño impostas polo sistema</translation> </message> <message> + <source>%1: bad name</source> + <translation>%1: nome non válido</translation> + </message> + <message> <source>%1: not attached</source> <translation>%1: non anexado</translation> </message> @@ -5597,7 +5738,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Refresh</source> - <translation>Anovar</translation> + <translation>Actualizar</translation> </message> <message> <source>Volume Down</source> @@ -5687,71 +5828,71 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Launch Media</source> - <translation>Lanzar Multimedia</translation> + <translation>Iniciar Multimedia</translation> </message> <message> <source>Launch (0)</source> - <translation>Lanzar (0)</translation> + <translation>Iniciar (0)</translation> </message> <message> <source>Launch (1)</source> - <translation>Lanzar (1)</translation> + <translation>Iniciar (1)</translation> </message> <message> <source>Launch (2)</source> - <translation>Lanzar (2)</translation> + <translation>Iniciar (2)</translation> </message> <message> <source>Launch (3)</source> - <translation>Lanzar (3)</translation> + <translation>Iniciar (3)</translation> </message> <message> <source>Launch (4)</source> - <translation>Lanzar (4)</translation> + <translation>Iniciar (4)</translation> </message> <message> <source>Launch (5)</source> - <translation>Lanzar (5)</translation> + <translation>Iniciar (5)</translation> </message> <message> <source>Launch (6)</source> - <translation>Lanzar (6)</translation> + <translation>Iniciar (6)</translation> </message> <message> <source>Launch (7)</source> - <translation>Lanzar (7)</translation> + <translation>Iniciar (7)</translation> </message> <message> <source>Launch (8)</source> - <translation>Lanzar (8)</translation> + <translation>Iniciar (8)</translation> </message> <message> <source>Launch (9)</source> - <translation>Lanzar (9)</translation> + <translation>Iniciar (9)</translation> </message> <message> <source>Launch (A)</source> - <translation>Lanzar (A)</translation> + <translation>Iniciar (A)</translation> </message> <message> <source>Launch (B)</source> - <translation>Lanzar (B)</translation> + <translation>Iniciar (B)</translation> </message> <message> <source>Launch (C)</source> - <translation>Lanzar (C)</translation> + <translation>Iniciar (C)</translation> </message> <message> <source>Launch (D)</source> - <translation>Lanzar (D)</translation> + <translation>Iniciar (D)</translation> </message> <message> <source>Launch (E)</source> - <translation>Lanzar (E)</translation> + <translation>Iniciar (E)</translation> </message> <message> <source>Launch (F)</source> - <translation>Lanzar (F)</translation> + <translation>Iniciar (F)</translation> </message> <message> <source>Monitor Brightness Up</source> @@ -6432,11 +6573,11 @@ Desexa sobrescribilo?</translation> </message> <message> <source>SOCKSv5 command not supported</source> - <translation>A orde SOCKSv5 non está soportada</translation> + <translation>Non se permite utilizar a orde SOCKSv5</translation> </message> <message> <source>Address type not supported</source> - <translation>Tipo de enderezo non soportado</translation> + <translation>Tipo de enderezo non admitido</translation> </message> <message> <source>Unknown SOCKSv5 proxy error code 0x%1</source> @@ -6451,6 +6592,10 @@ Desexa sobrescribilo?</translation> <name>QSoftKeyManager</name> <message> <source>Ok</source> + <translation type="obsolete">Aceptar</translation> + </message> + <message> + <source>OK</source> <translation>Aceptar</translation> </message> <message> @@ -6619,6 +6764,10 @@ Desexa sobrescribilo?</translation> <translation>O nome do servidor non coincide con ningún dos válidos para este certificado</translation> </message> <message> + <source>The peer certificate is blacklisted</source> + <translation>O certificado do parceiro está na lista negra</translation> + </message> + <message> <source>Unknown error</source> <translation>Erro descoñecido</translation> </message> @@ -6679,7 +6828,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Missing default state in history state '%1'</source> - <translation>Falta o estado predeterminado no estado histórico «%1»</translation> + <translation>Falta o estado predeterminado no estado «%1» do historial</translation> </message> <message> <source>No common ancestor for targets and source of transition from state '%1'</source> @@ -6691,6 +6840,187 @@ Desexa sobrescribilo?</translation> </message> </context> <context> + <name>QSymSQLDriver</name> + <message> + <source>Invalid option: </source> + <translation>Opción non válida:</translation> + </message> + <message> + <source>Error opening database</source> + <translation>Aconteceu un erro ao abrir a base de datos</translation> + </message> + <message> + <source>POLICY_DB_DEFAULT must be defined before any other POLICY definitions can be used</source> + <translation>Debe definirse POLICY_DB_DEFAULT antes de poder usar calquera outra definición de POLICY</translation> + </message> + <message> + <source>Unable to begin transaction</source> + <translation>Non foi posíbel comezar a transacción</translation> + </message> + <message> + <source>Unable to commit transaction</source> + <translation>Non foi posíbel remitir a transacción</translation> + </message> + <message> + <source>Unable to rollback transaction</source> + <translation>Non foi posíbel regresar a transacción</translation> + </message> +</context> +<context> + <name>QSymSQLResult</name> + <message> + <source>Error retrieving column count</source> + <translation>Aconteceu un erro ao obter a cantidade de columnas</translation> + </message> + <message> + <source>Error retrieving column name</source> + <translation>Aconteceu un erro ao obter o nome da columna</translation> + </message> + <message> + <source>Error retrieving column type</source> + <translation>Aconteceu un erro ao obter o tipo da columna</translation> + </message> + <message> + <source>Unable to fetch row</source> + <translation>Non foi posíbel acadar a fila</translation> + </message> + <message> + <source>Unable to execute statement</source> + <translation>Non foi posíbel executar a sentenza</translation> + </message> + <message> + <source>Statement is not prepared</source> + <translation>A sentenza non está preparada</translation> + </message> + <message> + <source>Unable to reset statement</source> + <translation>Non foi posíbel reiniciar a sentenza</translation> + </message> + <message> + <source>Unable to bind parameters</source> + <translation>Non foi posíbel asociar os parámetros</translation> + </message> + <message> + <source>Parameter count mismatch</source> + <translation>O número de parámetros non coincide</translation> + </message> +</context> +<context> + <name>QSymbianSocketEngine</name> + <message> + <source>Unable to initialize non-blocking socket</source> + <translation>Non foi posíbel inicializar o socket non bloqueante</translation> + </message> + <message> + <source>Unable to initialize broadcast socket</source> + <translation>Non foi posíbel inicializar o socket de broadcast</translation> + </message> + <message> + <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source> + <translation>Tentouse usar un socket IPv6 nunha plataforma sen implementación de IPv6</translation> + </message> + <message> + <source>The remote host closed the connection</source> + <translation>O servidor remoto pechou a conexión</translation> + </message> + <message> + <source>Network operation timed out</source> + <translation>A operación de rede esgotou o tempo-límite</translation> + </message> + <message> + <source>Out of resources</source> + <translation>Esgotáronse os recursos</translation> + </message> + <message> + <source>Unsupported socket operation</source> + <translation>Operación de socket non admitida</translation> + </message> + <message> + <source>Protocol type not supported</source> + <translation>Non se permite utilizar ese tipo de protocolo</translation> + </message> + <message> + <source>Invalid socket descriptor</source> + <translation>Descritor de socket non válido</translation> + </message> + <message> + <source>Host unreachable</source> + <translation>Non foi posíbel acadar o servidor</translation> + </message> + <message> + <source>Network unreachable</source> + <translation>Non foi posíbel acadar a rede</translation> + </message> + <message> + <source>Permission denied</source> + <translation>Permiso negado</translation> + </message> + <message> + <source>Connection timed out</source> + <translation>A conexión esgotou o tempo-límite</translation> + </message> + <message> + <source>Connection refused</source> + <translation>Aconexión rexeitouse</translation> + </message> + <message> + <source>The bound address is already in use</source> + <translation>O enderezo vinculado xa está en uso</translation> + </message> + <message> + <source>The address is not available</source> + <translation>O enderezo non está dispoñíbel</translation> + </message> + <message> + <source>The address is protected</source> + <translation>O enderezo está protexido</translation> + </message> + <message> + <source>Datagram was too large to send</source> + <translation>O datagrama é grande de máis para envialo</translation> + </message> + <message> + <source>Unable to send a message</source> + <translation>Non foi posíbel enviar unha mensaxe</translation> + </message> + <message> + <source>Unable to receive a message</source> + <translation>Non foi posíbel recibir unha mensaxe</translation> + </message> + <message> + <source>Unable to write</source> + <translation>Non foi posíbel escribir</translation> + </message> + <message> + <source>Network error</source> + <translation>Erro de rede</translation> + </message> + <message> + <source>Another socket is already listening on the same port</source> + <translation>Xa hai outro socket a escoitar o mesmo porto</translation> + </message> + <message> + <source>Operation on non-socket</source> + <translation>Operación nun non socket</translation> + </message> + <message> + <source>The proxy type is invalid for this operation</source> + <translation>O tipo de proxy non é válido para esta operación</translation> + </message> + <message> + <source>The address is invalid for this operation</source> + <translation>O enderezo non é válido para esta operación</translation> + </message> + <message> + <source>The specified network session is not opened</source> + <translation>A sesión de rede que se especificou non está aberta</translation> + </message> + <message> + <source>Unknown error</source> + <translation>Erro descoñecido</translation> + </message> +</context> +<context> <name>QSystemSemaphore</name> <message> <source>%1: permission denied</source> @@ -6709,6 +7039,10 @@ Desexa sobrescribilo?</translation> <translation>%1: esgotou os recursos</translation> </message> <message> + <source>%1: name error</source> + <translation>%1: err o de nome</translation> + </message> + <message> <source>%1: unknown error %2</source> <translation>%1: erro descoñecido %2</translation> </message> @@ -6739,7 +7073,7 @@ Desexa sobrescribilo?</translation> <name>QTcpServer</name> <message> <source>Operation on socket is not supported</source> - <translation>A operación no socket non está soportada</translation> + <translation>Non se permite a operación no socket</translation> </message> </context> <context> @@ -6799,11 +7133,29 @@ Desexa sobrescribilo?</translation> <name>QUndoGroup</name> <message> <source>Undo</source> + <translation type="obsolete">Desfacer</translation> + </message> + <message> + <source>Redo</source> + <translation type="obsolete">Refacer</translation> + </message> + <message> + <source>Undo %1</source> + <translation>Desfacer %1</translation> + </message> + <message> + <source>Undo</source> + <comment>Default text for undo action</comment> <translation>Desfacer</translation> </message> <message> + <source>Redo %1</source> + <translation>Refacer %1</translation> + </message> + <message> <source>Redo</source> - <translation>Facer de novo</translation> + <comment>Default text for redo action</comment> + <translation>Refacer</translation> </message> </context> <context> @@ -6817,11 +7169,29 @@ Desexa sobrescribilo?</translation> <name>QUndoStack</name> <message> <source>Undo</source> + <translation type="obsolete">Desfacer</translation> + </message> + <message> + <source>Redo</source> + <translation type="obsolete">Refacer</translation> + </message> + <message> + <source>Undo %1</source> + <translation>Desfacer %1</translation> + </message> + <message> + <source>Undo</source> + <comment>Default text for undo action</comment> <translation>Desfacer</translation> </message> <message> + <source>Redo %1</source> + <translation>Refacer %1</translation> + </message> + <message> <source>Redo</source> - <translation>Facer de novo</translation> + <comment>Default text for redo action</comment> + <translation>Refacer</translation> </message> </context> <context> @@ -6878,6 +7248,10 @@ Desexa sobrescribilo?</translation> <translation>Pedido cancelado</translation> </message> <message> + <source>Request canceled</source> + <translation>Pedido cancelado</translation> + </message> + <message> <source>Request blocked</source> <translation>Pedido bloqueado</translation> </message> @@ -6897,6 +7271,10 @@ Desexa sobrescribilo?</translation> <source>File does not exist</source> <translation>O ficheiro non existe</translation> </message> + <message> + <source>Loading is handled by the media engine</source> + <translation>A carga xestiónaa o motor de medios</translation> + </message> </context> <context> <name>QWebPage</name> @@ -6906,7 +7284,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Bad HTTP request</source> - <translation>Pedido HTTP incorrecto</translation> + <translation type="obsolete">Pedido HTTP incorrecto</translation> </message> <message numerus="yes"> <source>%n file(s)</source> @@ -6947,6 +7325,11 @@ Desexa sobrescribilo?</translation> <translation>Non escolleu ningún ficheiro</translation> </message> <message> + <source>Details</source> + <comment>text to display in <details> tag when it has no <summary> child</comment> + <translation>Detalles</translation> + </message> + <message> <source>Open in New Window</source> <comment>Open in New Window context menu item</comment> <translation>Abrir nunha xanela nova</translation> @@ -6977,6 +7360,61 @@ Desexa sobrescribilo?</translation> <translation>Copiar a imaxe</translation> </message> <message> + <source>Copy Image Address</source> + <comment>Copy Image Address menu item</comment> + <translation>Copiar o enderezo da imaxe</translation> + </message> + <message> + <source>Open Video</source> + <comment>Open Video in New Window</comment> + <translation>Abrir un vídeo</translation> + </message> + <message> + <source>Open Audio</source> + <comment>Open Audio in New Window</comment> + <translation>Abrir un son</translation> + </message> + <message> + <source>Copy Video</source> + <comment>Copy Video Link Location</comment> + <translation>Copiar o vídeo</translation> + </message> + <message> + <source>Copy Audio</source> + <comment>Copy Audio Link Location</comment> + <translation>Copiar o son</translation> + </message> + <message> + <source>Toggle Controls</source> + <comment>Toggle Media Controls</comment> + <translation>Conmutar os controis</translation> + </message> + <message> + <source>Toggle Loop</source> + <comment>Toggle Media Loop Playback</comment> + <translation>Conmutar o repetir</translation> + </message> + <message> + <source>Enter Fullscreen</source> + <comment>Switch Video to Fullscreen</comment> + <translation>Pór en pantalla completa</translation> + </message> + <message> + <source>Play</source> + <comment>Play</comment> + <translation>Reproducir</translation> + </message> + <message> + <source>Pause</source> + <comment>Pause</comment> + <translation>Pausar</translation> + </message> + <message> + <source>Mute</source> + <comment>Mute</comment> + <translation>Silenciar</translation> + </message> + <message> <source>Open Frame</source> <comment>Open Frame in New Window context menu item</comment> <translation>Abrir o marco</translation> @@ -7017,6 +7455,11 @@ Desexa sobrescribilo?</translation> <translation>Apegar</translation> </message> <message> + <source>Select All</source> + <comment>Select All context menu item</comment> + <translation>Escoller todo</translation> + </message> + <message> <source>No Guesses Found</source> <comment>No Guesses Found context menu item</comment> <translation>Non se atoparon conxecturas</translation> @@ -7079,7 +7522,7 @@ Desexa sobrescribilo?</translation> <message> <source>Check Grammar With Spelling</source> <comment>Check grammar with spelling context menu item</comment> - <translation>Verificar a gramática mentres se escribe</translation> + <translation>Comprobar a gramática mentres se escribe</translation> </message> <message> <source>Fonts</source> @@ -7483,7 +7926,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Select all</source> - <translation>Escoller todo</translation> + <translation type="obsolete">Escoller todo</translation> </message> <message> <source>Select to the next character</source> @@ -7644,7 +8087,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Commit</source> - <translation>Entregar</translation> + <translation>Remitir</translation> </message> <message> <source>Done</source> @@ -7984,6 +8427,94 @@ Desexa sobrescribilo?</translation> </message> </context> <context> + <name>QmlJSDebugger::LiveSelectionTool</name> + <message> + <source>Items</source> + <translation>Elementos</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::QmlToolBar</name> + <message> + <source>Inspector Mode</source> + <translation>Modo de inspección</translation> + </message> + <message> + <source>Play/Pause Animations</source> + <translation>Reproducir/Pausar as animacións</translation> + </message> + <message> + <source>Select</source> + <translation>Escoller</translation> + </message> + <message> + <source>Select (Marquee)</source> + <translation>Escoller (marcado)</translation> + </message> + <message> + <source>Zoom</source> + <translation>Ampliar</translation> + </message> + <message> + <source>Color Picker</source> + <translation>Selector de cores</translation> + </message> + <message> + <source>Apply Changes to QML Viewer</source> + <translation>Aplicar as modificación no Visor de QML</translation> + </message> + <message> + <source>Apply Changes to Document</source> + <translation>Aplicar as modificacións ao documento</translation> + </message> + <message> + <source>Tools</source> + <translation>Utensilios</translation> + </message> + <message> + <source>1x</source> + <translation>1x</translation> + </message> + <message> + <source>0.5x</source> + <translation>0,5x</translation> + </message> + <message> + <source>0.25x</source> + <translation>0,25x</translation> + </message> + <message> + <source>0.125x</source> + <translation>0,125x</translation> + </message> + <message> + <source>0.1x</source> + <translation>0,1x</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ToolBarColorBox</name> + <message> + <source>Copy Color</source> + <translation>Copiar a cor</translation> + </message> +</context> +<context> + <name>QmlJSDebugger::ZoomTool</name> + <message> + <source>Zoom to &100%</source> + <translation>Ampliar ao &100%</translation> + </message> + <message> + <source>Zoom In</source> + <translation>Ampliar</translation> + </message> + <message> + <source>Zoom Out</source> + <translation>Reducir</translation> + </message> +</context> +<context> <name>QtXmlPatterns</name> <message> <source>%1 is an unsupported encoding.</source> @@ -8266,7 +8797,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source> - <translation>Na cadea substituta %1 só pode ser usado para escaparse a si mesmo ou a %2, non a %3.</translation> + <translation>Na cadea substituta %1 só pode usarse para escaparse a si mesmo ou a %2, non a %3</translation> </message> <message> <source>%1 matches newline characters</source> @@ -8310,7 +8841,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source> - <translation>A forma de normalización %1 non está soportada. As formas soportadas son %2, %3, %4, %5 e ningunha, i.e. a cadea en branco (sen normalización).</translation> + <translation>Non se permite a forma de normalización %1. As formas permitidas son %2, %3, %4, %5 e ningunha, i.e. a cadea en branco (sen normalización).</translation> </message> <message> <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source> @@ -8374,7 +8905,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Version %1 is not supported. The supported XQuery version is 1.0.</source> - <translation>Non está soportada a versión %1. A versión soportada de XQuery é a 1.0.</translation> + <translation>Non se permite utilizar a versión %1. A versión admitida de XQuery é a 1.0.</translation> </message> <message> <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source> @@ -8398,7 +8929,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>The keyword %1 cannot occur with any other mode name.</source> - <translation>A palabra-chave %1 só pode aparecer con calquera outro nome de modo.</translation> + <translation>A palabra clave %1 só pode aparecer con calquera outro nome de modo.</translation> </message> <message> <source>The value of attribute %1 must be of type %2, which %3 isn't.</source> @@ -8422,7 +8953,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source> - <translation>A funcionalidade de Importación de Esquema non está soportada, polo tanto non pode haber declaracións %1.</translation> + <translation>Non se permite utilizar a funcionalidade de Importación de Esquema, polo tanto non pode haber declaracións %1.</translation> </message> <message> <source>The target namespace of a %1 cannot be empty.</source> @@ -8430,7 +8961,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>The module import feature is not supported</source> - <translation>A funcionalidade de importación de módulos non está soportada</translation> + <translation>Non se permite utilizar a funcionalidade de importación de módulos</translation> </message> <message> <source>A variable with name %1 has already been declared.</source> @@ -8446,7 +8977,11 @@ Desexa sobrescribilo?</translation> </message> <message> <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source> - <translation>O espazo de nomes das funcións definidas polo usuario non pode estar en branco (probe co prefixo predefinido %1, que está para casos como este)</translation> + <translation type="obsolete">O espazo de nomes das funcións definidas polo usuario non pode estar en branco (probe co prefixo predefinido %1, que está para casos como este)</translation> + </message> + <message> + <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1, which exists for cases like this)</source> + <translation>O espazo de nomes das funcións definidas polo usuario non pode estar en branco (ténteo co prefixo predefinido %1, que está para casos coma este)</translation> </message> <message> <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source> @@ -8462,7 +8997,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source> - <translation>Non se soportan as funcións externas. Todas as funcións soportadas poden ser usadas directamente, non fai falla declaralas como externas</translation> + <translation>Non se permiten utilizar as funcións externas. Todas as funcións soportadas poden ser usadas directamente, non fai falla declaralas como externas</translation> </message> <message> <source>An argument with name %1 has already been declared. Every argument name must be unique.</source> @@ -8502,11 +9037,11 @@ Desexa sobrescribilo?</translation> </message> <message> <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source> - <translation>Non está soportada a funcionalidade de Validación do Esquema. Polo tanto, as expresións %1 non poden ser usadas.</translation> + <translation>Non se permite utilizar a funcionalidade de Validación do Esquema. Polo tanto, as expresións %1 non poden ser usadas.</translation> </message> <message> <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source> - <translation>Non está soportada ningunha das expresións pragma. Polo tanto, debe haber presente unha expresión de reserva</translation> + <translation>Non se permite utilizar ningunha das expresións pragma. Polo tanto, debe haber presente unha expresión de reserva</translation> </message> <message> <source>Each name of a template parameter must be unique; %1 is duplicated.</source> @@ -8574,7 +9109,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source> - <translation>%1 non está nas declaracións de atributos ao alcance. Lembre que non está soportada a funcionalidade de importación de esquemas.</translation> + <translation>%1 non está nas declaracións de atributos ao alcance. Lembre que non está implementada a funcionalidade de importación de esquemas.</translation> </message> <message> <source>The name of an extension expression must be in a namespace.</source> @@ -8914,7 +9449,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Unknown notation %1 used in %2 facet.</source> - <translation>Empregouse a notación non válida %1 na faceta %2.</translation> + <translation>Empregouse a notación descoñecida %1 na faceta %2.</translation> </message> <message> <source>%1 facet contains invalid value %2: %3.</source> @@ -9290,7 +9825,11 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> - <translation>O modelo de contido do tipo complexo %1 contén un elemento %2 polo que non se pode derivar por extensión a partir dun tipo non baleiro.</translation> + <translation type="obsolete">O modelo de contido do tipo complexo %1 contén un elemento %2 polo que non se pode derivar por extensión a partir dun tipo non baleiro.</translation> + </message> + <message> + <source>Content model of complex type %1 contains %2 element, so it cannot be derived by extension from a non-empty type.</source> + <translation>O modelo do contido do tipo complexo %1 contén o elemento %2, polo que non se pode derivar por extensión a partir dun tipo non baleiro.</translation> </message> <message> <source>Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model.</source> @@ -9334,7 +9873,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>%1 or %2 attribute of reference %3 does not match with the attribute declaration %4.</source> - <translation>Nin atributo %1 nin o %2 da referencia %2 casan coa declaración do atributo %3.</translation> + <translation>Nin atributo %1 nin o %2 da referencia %3 casan coa declaración do atributo %4.</translation> </message> <message> <source>Attribute group %1 has circular reference.</source> @@ -9550,7 +10089,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Invalid QName content: %1.</source> - <translation>Contido non válido do QName: %1</translation> + <translation>Contido non válido do QName: %1.</translation> </message> <message> <source>QName content is not listed in the enumeration facet.</source> @@ -9562,7 +10101,7 @@ Desexa sobrescribilo?</translation> </message> <message> <source>Notation content is not listed in the enumeration facet.</source> - <translation>O contido da notación non está na faceta de enumeración</translation> + <translation>O contido da notación non está enumerado na faceta de enumeración.</translation> </message> <message> <source>List content does not match length facet.</source> @@ -9697,8 +10236,12 @@ Desexa sobrescribilo?</translation> <translation>O elemento %1 ten contido de texto non permitido.</translation> </message> <message> + <source>Element %1 cannot contain other elements, as it has fixed content.</source> + <translation>O elemento %1 non pode conter outros elementos porque ten contido fixo.</translation> + </message> + <message> <source>Element %1 cannot contain other elements, as it has a fixed content.</source> - <translation>O elemento %1 non pode conter outros elementos xa que ten un contido fixo.</translation> + <translation type="obsolete">O elemento %1 non pode conter outros elementos xa que ten un contido fixo.</translation> </message> <message> <source>Element %1 is missing required attribute %2.</source> diff --git a/translations/qt_help_gl.ts b/translations/qt_help_gl.ts index a3da29a..a64d7a4 100644 --- a/translations/qt_help_gl.ts +++ b/translations/qt_help_gl.ts @@ -26,6 +26,20 @@ aínda se está a indexar!</translation> </message> </context> <context> + <name>QHelpSearchResultWidget</name> + <message numerus="yes"> + <source>%1 - %2 of %n Hits</source> + <translation> + <numerusform>%1 - %2 de %n coincidencia</numerusform> + <numerusform></numerusform> + </translation> + </message> + <message> + <source>0 - 0 of 0 Hits</source> + <translation>0 - 0 de 0 coincidencias</translation> + </message> +</context> +<context> <name>QHelp</name> <message> <source>Untitled</source> @@ -303,18 +317,4 @@ aínda se está a indexar!</translation> <translation>con <B>polo menos unha</B> das palabras:</translation> </message> </context> -<context> - <name>QHelpSearchResultWidget</name> - <message numerus="yes"> - <source>%1 - %2 of %n Hits</source> - <translation> - <numerusform>%1 - %2 de %n coincidencia</numerusform> - <numerusform></numerusform> - </translation> - </message> - <message> - <source>0 - 0 of 0 Hits</source> - <translation>0 - 0 de 0 coincidencias</translation> - </message> -</context> </TS> |