diff options
author | Lorn Potter <lorn.potter@nokia.com> | 2010-03-07 19:06:05 (GMT) |
---|---|---|
committer | Lorn Potter <lorn.potter@nokia.com> | 2010-03-07 19:06:05 (GMT) |
commit | 987ffcbad3337fd343febb305911298a37ed9b7e (patch) | |
tree | 3665886405a5bc5300ef8a1c0522780639f29843 | |
parent | 4e605d83b5966b08a82eb54e733c2f37bca6b5d6 (diff) | |
parent | 987458462994497f764baf253baca0faabdb63cc (diff) | |
download | Qt-987ffcbad3337fd343febb305911298a37ed9b7e.zip Qt-987ffcbad3337fd343febb305911298a37ed9b7e.tar.gz Qt-987ffcbad3337fd343febb305911298a37ed9b7e.tar.bz2 |
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-1 into 4.7
170 files changed, 5044 insertions, 2570 deletions
diff --git a/configure.exe b/configure.exe Binary files differindex e310ee0..9974236 100755 --- a/configure.exe +++ b/configure.exe diff --git a/demos/sqlbrowser/browser.cpp b/demos/sqlbrowser/browser.cpp index 6aed73a..1232428 100644 --- a/demos/sqlbrowser/browser.cpp +++ b/demos/sqlbrowser/browser.cpp @@ -146,7 +146,7 @@ void Browser::showTable(const QString &t) { QSqlTableModel *model = new QSqlTableModel(table, connectionWidget->currentDatabase()); model->setEditStrategy(QSqlTableModel::OnRowChange); - model->setTable(t); + model->setTable(connectionWidget->currentDatabase().driver()->escapeIdentifier(t, QSqlDriver::TableName)); model->select(); if (model->lastError().type() != QSqlError::NoError) emit statusMessage(model->lastError().text()); diff --git a/doc/src/development/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc index 36bfcfe..b17e255 100644 --- a/doc/src/development/qmake-manual.qdoc +++ b/doc/src/development/qmake-manual.qdoc @@ -2968,6 +2968,34 @@ For example: \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 51 + It is possible to modify this default behavior of \c SUBDIRS by giving + additional modifiers to \c SUBDIRS elements. Supported modifiers are: + + \table + \header \o Modifier \o Effect + \row \o .subdir \o Use the specified subdirectory instead of \c SUBDIRS value. + \row \o .file \o Specify the subproject \c pro file explicitly. Cannot be + used in conjunction with \c .subdir modifier. + \row \o .condition \o Specifies a \c bld.inf define that must be true for + subproject to be built. Available only on Symbian platform. + \row \o .depends \o This subproject depends on specified subproject. + Available only on platforms that use makefiles. + \row \o .makefile \o The makefile of subproject. + Available only on platforms that use makefiles. + \row \o .target \o Base string used for makefile targets related to this + subproject. + Available only on platforms that use makefiles. + \endtable + + For example, define two subdirectories, both of which reside in a different directory + than the \c SUBDIRS value, and one of the subdirectories must be built before the other: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 149 + + For example, define a subdirectory that is only build for emulator builds in Qt for Symbian: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 150 + \target TARGET \section1 TARGET diff --git a/doc/src/snippets/code/doc_src_qmake-manual.qdoc b/doc/src/snippets/code/doc_src_qmake-manual.qdoc index 5a04420..e8c00d3 100644 --- a/doc/src/snippets/code/doc_src_qmake-manual.qdoc +++ b/doc/src/snippets/code/doc_src_qmake-manual.qdoc @@ -982,3 +982,17 @@ MYVARIABLES = LIB addMMPRules(MYCONDITIONS, MYVARIABLES) //! [148] + +//! [149] +SUBDIRS += my_executable my_library +my_executable.subdir = app +my_executable.depends = my_library +my_library.subdir = lib +//! [149] + +//! [150] +symbian { + SUBDIRS += emulator_dll + emulator_dll.condition = WINSCW +} +//! [150] diff --git a/examples/multimedia/audioinput/audioinput.h b/examples/multimedia/audioinput/audioinput.h index f87c682..be721de 100644 --- a/examples/multimedia/audioinput/audioinput.h +++ b/examples/multimedia/audioinput/audioinput.h @@ -119,8 +119,8 @@ private: QPushButton *m_suspendResumeButton; QComboBox *m_deviceBox; - AudioInfo *m_audioInfo; QAudioDeviceInfo m_device; + AudioInfo *m_audioInfo; QAudioFormat m_format; QAudioInput *m_audioInput; QIODevice *m_input; diff --git a/examples/network/qftp/sym_iap_util.h b/examples/network/qftp/sym_iap_util.h index 41e43a9..445036a 100644 --- a/examples/network/qftp/sym_iap_util.h +++ b/examples/network/qftp/sym_iap_util.h @@ -60,6 +60,7 @@ //#include <QTextCodec> _LIT(KIapNameSetting, "IAP\\Name"); // text - mandatory +_LIT(KIapTableIdField, "IAP\Id"); _LIT(KIapDialogPref, "IAP\\DialogPref"); // TUnit32 - optional _LIT(KIapService, "IAP\\IAPService"); // TUnit32 - mandatory _LIT(KIapServiceType, "IAP\\IAPServiceType"); // text - mandatory @@ -367,20 +368,25 @@ static QString qt_OfferIapDialog() { CleanupClosePushL(connection); socketServ.Connect(); + + TCommDbConnPref prefs; + prefs.SetDialogPreference(ECommDbDialogPrefPrompt); + connection.Open(socketServ); - connection.Start(); + connection.Start(prefs); connection.GetDesSetting(TPtrC(KIapNameSetting), iapName); - //connection.Stop(); iapName.ZeroTerminate(); QString strIapName((char*)iapName.Ptr()); int error = 0; - if(!qt_SetDefaultIapName(strIapName, error)) { - //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error); - strIapName = QString(""); + if(!strIapName.isEmpty()) { + if(!qt_SetDefaultIapName(strIapName, error)) { + //printf("failed setdefaultif @ %i with %s and errno = %d \n", __LINE__, strIapName.toUtf8().data(), error); + strIapName = QString(""); + } } CleanupStack::PopAndDestroy(&connection); diff --git a/examples/openvg/star/starwidget.cpp b/examples/openvg/star/starwidget.cpp index bde0719..794ede9 100644 --- a/examples/openvg/star/starwidget.cpp +++ b/examples/openvg/star/starwidget.cpp @@ -93,8 +93,9 @@ void StarWidget::paintEvent(QPaintEvent *) // and prepare to perform raw OpenVG calls. painter.beginNativePainting(); - // Cache the path if we haven't already. - if (path == VG_INVALID_HANDLE) { + // Cache the path if we haven't already or if the path has + // become invalid because the window's context has changed. + if (path == VG_INVALID_HANDLE || !vgGetPathCapabilities(path)) { path = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, // scale diff --git a/examples/widgets/softkeys/softkeys.cpp b/examples/widgets/softkeys/softkeys.cpp index cbd227c9..e5c2e73 100644 --- a/examples/widgets/softkeys/softkeys.cpp +++ b/examples/widgets/softkeys/softkeys.cpp @@ -70,6 +70,12 @@ MainWindow::MainWindow(QWidget *parent) toggleButton->setContextMenuPolicy(Qt::NoContextMenu); toggleButton->setCheckable(true); + modeButton = new QPushButton(tr("Loop SK window type"), this); + modeButton->setContextMenuPolicy(Qt::NoContextMenu); + + modeLabel = new QLabel(tr("Normal maximized"), this); + modeLabel->setContextMenuPolicy(Qt::NoContextMenu); + pushButton = new QPushButton(tr("File Dialog"), this); pushButton->setContextMenuPolicy(Qt::NoContextMenu); @@ -87,6 +93,8 @@ MainWindow::MainWindow(QWidget *parent) layout->addWidget(toggleButton, 2, 0); layout->addWidget(pushButton, 2, 1); layout->addWidget(comboBox, 3, 0, 1, 2); + layout->addWidget(modeButton, 4, 0, 1, 2); + layout->addWidget(modeLabel, 5, 0, 1, 2); central->setLayout(layout); fileMenu = menuBar()->addMenu(tr("&File")); @@ -97,6 +105,7 @@ MainWindow::MainWindow(QWidget *parent) connect(pushButton, SIGNAL(clicked()), this, SLOT(openDialog())); connect(exit, SIGNAL(triggered()), this, SLOT(exitApplication())); connect(toggleButton, SIGNAL(clicked()), this, SLOT(setCustomSoftKeys())); + connect(modeButton, SIGNAL(clicked()), this, SLOT(setMode())); pushButton->setFocus(); } @@ -133,6 +142,35 @@ void MainWindow::setCustomSoftKeys() } } +void MainWindow::setMode() +{ + if(isMaximized()) { + showFullScreen(); + modeLabel->setText(tr("Normal Fullscreen")); + } else { + Qt::WindowFlags flags = windowFlags(); + if(flags & Qt::WindowSoftkeysRespondHint) { + flags |= Qt::WindowSoftkeysVisibleHint; + flags &= ~Qt::WindowSoftkeysRespondHint; + setWindowFlags(flags); // Hides visible window + showFullScreen(); + modeLabel->setText(tr("Fullscreen with softkeys")); + } else if(flags & Qt::WindowSoftkeysVisibleHint) { + flags &= ~Qt::WindowSoftkeysVisibleHint; + flags &= ~Qt::WindowSoftkeysRespondHint; + setWindowFlags(flags); // Hides visible window + showMaximized(); + modeLabel->setText(tr("Normal Maximized")); + } else { + flags &= ~Qt::WindowSoftkeysVisibleHint; + flags |= Qt::WindowSoftkeysRespondHint; + setWindowFlags(flags); // Hides visible window + showFullScreen(); + modeLabel->setText(tr("Fullscreen with SK respond")); + } + } +} + void MainWindow::exitApplication() { qApp->exit(); diff --git a/examples/widgets/softkeys/softkeys.h b/examples/widgets/softkeys/softkeys.h index bae31e7..d533484 100644 --- a/examples/widgets/softkeys/softkeys.h +++ b/examples/widgets/softkeys/softkeys.h @@ -57,21 +57,24 @@ private slots: void okPressed(); void cancelPressed(); void setCustomSoftKeys(); + void setMode(); public: MainWindow(QWidget *parent = 0); ~MainWindow(); private: QGridLayout *layout; QWidget *central; - QTextEdit* textEditor; + QTextEdit *textEditor; QLabel *infoLabel; - QPushButton* toggleButton; - QPushButton* pushButton; - QMenu* fileMenu; - QAction* addSoftKeysAct; - QAction* exit; - QAction* ok; - QAction* cancel; + QPushButton *toggleButton; + QPushButton *pushButton; + QPushButton *modeButton; + QLabel *modeLabel; + QMenu *fileMenu; + QAction *addSoftKeysAct; + QAction *exit; + QAction *ok; + QAction *cancel; }; //! [0] diff --git a/examples/widgets/windowflags/controllerwindow.cpp b/examples/widgets/windowflags/controllerwindow.cpp index 0277794..fb82b8f 100644 --- a/examples/widgets/windowflags/controllerwindow.cpp +++ b/examples/widgets/windowflags/controllerwindow.cpp @@ -58,7 +58,7 @@ ControllerWindow::ControllerWindow() bottomLayout->addStretch(); bottomLayout->addWidget(quitButton); - QVBoxLayout *mainLayout = new QVBoxLayout; + QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout->addWidget(typeGroupBox); mainLayout->addWidget(hintsGroupBox); mainLayout->addLayout(bottomLayout); diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf index 155bfc3..d844385 100644 --- a/mkspecs/features/default_post.prf +++ b/mkspecs/features/default_post.prf @@ -17,5 +17,9 @@ QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST check.recurse = $$SUBDIRS check.recurse_target = check } + # `make check' should imply building the project + else { + check.depends = first + } QMAKE_EXTRA_TARGETS += check } diff --git a/mkspecs/features/qttest_p4.prf b/mkspecs/features/qttest_p4.prf index 53c0d74..e3faef1 100644 --- a/mkspecs/features/qttest_p4.prf +++ b/mkspecs/features/qttest_p4.prf @@ -27,7 +27,7 @@ embedded: check.commands += -qws QMAKE_EXTRA_TARGETS += check !debug_and_release|build_pass { - check.depends = $(DESTDIR_TARGET) + check.depends = first } else { check.CONFIG = recursive # In debug and release mode, only run the test once. diff --git a/mkspecs/linux-g++-maemo/qplatformdefs.h b/mkspecs/linux-g++-maemo/qplatformdefs.h index 7e8d1d4..d7feb9e 100644 --- a/mkspecs/linux-g++-maemo/qplatformdefs.h +++ b/mkspecs/linux-g++-maemo/qplatformdefs.h @@ -40,3 +40,5 @@ ****************************************************************************/ #include "../linux-g++/qplatformdefs.h" + +#define QT_GUI_DOUBLE_CLICK_RADIUS 20 diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp index 214f95c..b15baf4 100644 --- a/qmake/generators/symbian/symmake.cpp +++ b/qmake/generators/symbian/symmake.cpp @@ -1309,6 +1309,10 @@ void SymbianMakefileGenerator::writeBldInfContent(QTextStream &t, bool addDeploy fixedItem = item; } + QString condition; + if (!project->isEmpty(item + ".condition")) + condition = project->first(item + ".condition"); + QFileInfo subdir(fileInfo(fixedItem)); QString relativePath = directory.relativeFilePath(fixedItem); QString subdirFileName = subdir.completeBaseName(); @@ -1337,9 +1341,16 @@ void SymbianMakefileGenerator::writeBldInfContent(QTextStream &t, bool addDeploy bldinfDefine = bldinfDefine.toUpper(); removeSpecialCharacters(bldinfDefine); + if (!condition.isEmpty()) + t << "#if defined(" << condition << ")" << endl; + t << "#ifndef " << bldinfDefine << endl; t << "\t#include \"" << bldinfFilename << "\"" << endl; - t << "#endif // " << bldinfDefine << endl; + t << "#endif" << endl; + + if (!condition.isEmpty()) + t << "#endif" << endl; + } // Add supported project platforms diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index 44fef5d..64aaf34 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -150,6 +150,10 @@ Win32MakefileGenerator::findLibraries(const QString &where) if(QMakeMetaInfo::libExists((*it).local() + Option::dir_sep + lib) || exists((*it).local() + Option::dir_sep + lib + extension)) { out = (*it).real() + Option::dir_sep + lib + extension; + if (out.contains(QLatin1Char(' '))) { + out.prepend(QLatin1Char('\"')); + out.append(QLatin1Char('\"')); + } break; } } diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index cc0e04f..6a2e75f 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -8,4 +8,4 @@ The commit imported was from the and has the sha1 checksum - ffae5e11181a3961193fa21ea405851cad714d4b + f3110d2f94c825477afac054ed448e45d47f5670 diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index c9b622a..5654a18 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -26,7 +26,7 @@ symbian: { # RO text (code) section in qtwebkit.dll exceeds allocated space for gcce udeb target. # Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000. - QMAKE_LFLAGS.ARMCC += --rw-base 0xE00000 + MMP_RULES += "LINKEROPTION armcc --rw-base 0xE00000" } include($$PWD/../WebKit.pri) diff --git a/src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp index 714cac9..d13c9a9 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp @@ -39,7 +39,7 @@ #include <QGraphicsProxyWidget> #include <QGraphicsScene> #include <QGraphicsView> -#include <QGraphicsWebView> +#include <qgraphicswebview.h> #include <QListWidget> #include <QListWidgetItem> #include <QMenu> diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h index 3833070..13c341c 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h @@ -20,11 +20,11 @@ #ifndef QWEBELEMENT_H #define QWEBELEMENT_H -#include <QString> -#include <QStringList> -#include <QRect> -#include <QVariant> -#include <QExplicitlySharedDataPointer> +#include <QtCore/qstring.h> +#include <QtCore/qstringlist.h> +#include <QtCore/qrect.h> +#include <QtCore/qvariant.h> +#include <QtCore/qshareddata.h> #include "qwebkitglobal.h" namespace WebCore { diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index 1026ac5..e54c176 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,16 @@ +2010-03-04 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] qwebelement.h does not include QtCore headers correctly + https://bugs.webkit.org/show_bug.cgi?id=35748 + + The header files of QtCore must be included as QtCore/foo.h. + + See also http://bugreports.qt.nokia.com/browse/QTBUG-8661 + + * Api/qwebelement.h: + 2010-01-28 Kenneth Rohde Christiansen <kenneth@webkit.org> Reviewed by Simon Hausmann. diff --git a/src/activeqt/container/qaxwidget.cpp b/src/activeqt/container/qaxwidget.cpp index 7d2dde7..7afce5b 100644 --- a/src/activeqt/container/qaxwidget.cpp +++ b/src/activeqt/container/qaxwidget.cpp @@ -1434,9 +1434,6 @@ extern Q_GUI_EXPORT bool qt_win_ignoreNextMouseReleaseEvent; HRESULT WINAPI QAxClientSite::EnableModeless(BOOL fEnable) { -#if !defined(Q_OS_WINCE) - LockWindowUpdate(host->window()->winId()); -#endif EnableWindow(host->window()->winId(), fEnable); if (!fEnable) { @@ -1447,9 +1444,6 @@ HRESULT WINAPI QAxClientSite::EnableModeless(BOOL fEnable) QApplicationPrivate::leaveModal(host); } qt_win_ignoreNextMouseReleaseEvent = false; -#if !defined(Q_OS_WINCE) - LockWindowUpdate(0); -#endif return S_OK; } diff --git a/src/corelib/codecs/qiconvcodec.cpp b/src/corelib/codecs/qiconvcodec.cpp index 0f73d9b..0fcdf96 100644 --- a/src/corelib/codecs/qiconvcodec.cpp +++ b/src/corelib/codecs/qiconvcodec.cpp @@ -299,6 +299,32 @@ QString QIconvCodec::convertToUnicode(const char* chars, int len, ConverterState Q_GLOBAL_STATIC(QThreadStorage<QIconvCodec::IconvState *>, fromUnicodeState) +static bool setByteOrder(iconv_t cd) +{ +#if !defined(NO_BOM) + // give iconv() a BOM + char buf[4]; + ushort bom[] = { QChar::ByteOrderMark }; + + char *outBytes = buf; + char *inBytes = reinterpret_cast<char *>(bom); + size_t outBytesLeft = sizeof buf; + size_t inBytesLeft = sizeof bom; + +#if defined(GNU_LIBICONV) + const char **inBytesPtr = const_cast<const char **>(&inBytes); +#else + char **inBytesPtr = &inBytes; +#endif + + if (iconv(cd, inBytesPtr, &inBytesLeft, &outBytes, &outBytesLeft) == (size_t) -1) { + return false; + } +#endif // NO_BOM + + return true; +} + QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterState *convState) const { char *inBytes; @@ -325,17 +351,8 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt IconvState *&state = ts->localData(); if (!state) { state = new IconvState(QIconvCodec::createIconv_t(0, UTF16)); - if (state->cd != reinterpret_cast<iconv_t>(-1)) { - size_t outBytesLeft = len + 3; // +3 for the BOM - QByteArray ba(outBytesLeft, Qt::Uninitialized); - outBytes = ba.data(); - -#if !defined(NO_BOM) - // give iconv() a BOM - QChar bom[] = { QChar(QChar::ByteOrderMark) }; - inBytes = reinterpret_cast<char *>(bom); - inBytesLeft = sizeof(bom); - if (iconv(state->cd, inBytesPtr, &inBytesLeft, &outBytes, &outBytesLeft) == (size_t) -1) { + if (state->cd == reinterpret_cast<iconv_t>(-1)) { + if (!setByteOrder(state->cd)) { perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed for BOM"); iconv_close(state->cd); @@ -343,7 +360,6 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt return QString(uc, len).toAscii(); } -#endif // NO_BOM } } if (state->cd == reinterpret_cast<iconv_t>(-1)) { @@ -422,6 +438,7 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt // reset to initial state iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft); + setByteOrder(state->cd); ba.resize(ba.size() - outBytesLeft); diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index d2546a7..f7aea36 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -299,7 +299,9 @@ public: MacWindowToolBarButtonHint = 0x10000000, BypassGraphicsProxyWidget = 0x20000000, WindowOkButtonHint = 0x00080000, - WindowCancelButtonHint = 0x00100000 + WindowCancelButtonHint = 0x00100000, + WindowSoftkeysVisibleHint = 0x40000000, + WindowSoftkeysRespondHint = 0x80000000 #ifdef QT3_SUPPORT , diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index c5b5998..74144b0 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -1623,22 +1623,22 @@ \value Key_OpenUrl \value Key_LaunchMail \value Key_LaunchMedia - \value Key_Launch0 - \value Key_Launch1 - \value Key_Launch2 - \value Key_Launch3 - \value Key_Launch4 - \value Key_Launch5 - \value Key_Launch6 - \value Key_Launch7 - \value Key_Launch8 - \value Key_Launch9 - \value Key_LaunchA - \value Key_LaunchB - \value Key_LaunchC - \value Key_LaunchD - \value Key_LaunchE - \value Key_LaunchF + \value Key_Launch0 On X11 this key is mapped to "My Computer" (XF86XK_MyComputer) key for legacy reasons. + \value Key_Launch1 On X11 this key is mapped to "Calculator" (XF86XK_Calculator) key for legacy reasons. + \value Key_Launch2 On X11 this key is mapped to XF86XK_Launch0 key for legacy reasons. + \value Key_Launch3 On X11 this key is mapped to XF86XK_Launch1 key for legacy reasons. + \value Key_Launch4 On X11 this key is mapped to XF86XK_Launch2 key for legacy reasons. + \value Key_Launch5 On X11 this key is mapped to XF86XK_Launch3 key for legacy reasons. + \value Key_Launch6 On X11 this key is mapped to XF86XK_Launch4 key for legacy reasons. + \value Key_Launch7 On X11 this key is mapped to XF86XK_Launch5 key for legacy reasons. + \value Key_Launch8 On X11 this key is mapped to XF86XK_Launch6 key for legacy reasons. + \value Key_Launch9 On X11 this key is mapped to XF86XK_Launch7 key for legacy reasons. + \value Key_LaunchA On X11 this key is mapped to XF86XK_Launch8 key for legacy reasons. + \value Key_LaunchB On X11 this key is mapped to XF86XK_Launch9 key for legacy reasons. + \value Key_LaunchC On X11 this key is mapped to XF86XK_LaunchA key for legacy reasons. + \value Key_LaunchD On X11 this key is mapped to XF86XK_LaunchB key for legacy reasons. + \value Key_LaunchE On X11 this key is mapped to XF86XK_LaunchC key for legacy reasons. + \value Key_LaunchF On X11 this key is mapped to XF86XK_LaunchD key for legacy reasons. \value Key_MonBrightnessUp \value Key_MonBrightnessDown \value Key_KeyboardLightOnOff @@ -1664,7 +1664,7 @@ \value Key_ApplicationRight \value Key_Book \value Key_CD - \value Key_Calculator + \value Key_Calculator On X11 this key is not mapped for legacy reasons. Use Qt::Key_Launch1 instead. \value Key_ToDoList \value Key_ClearGrab \value Key_Close @@ -2147,6 +2147,14 @@ \value WindowCancelButtonHint Adds a Cancel button to the window decoration of a dialog. Only supported for Windows CE. + \value WindowSoftkeysVisibleHint Makes softkeys visible when widget is fullscreen. + Only supported for Symbian. + + \value WindowSoftkeysRespondHint Makes softkeys to receive key events even + when invisible. With this hint the softkey actions are triggered + even the softkeys are invisible i.e. the window is displayed with + \c showFullscreen(). Only supported for Symbian. + \value WindowType_Mask A mask for extracting the window type part of the window flags. diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index 1672dfc..070edb4 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -147,6 +147,8 @@ QString QFSFileEnginePrivate::canonicalized(const QString &path) return path; #endif #if defined(Q_OS_LINUX) || defined(Q_OS_SYMBIAN) || defined(Q_OS_MAC) + // ... but Linux with uClibc does not have it +#if !defined(__UCLIBC__) char *ret = 0; #if defined(Q_OS_MAC) // Mac OS X 10.5.x doesn't support the realpath(X,0) extension we use here. @@ -173,6 +175,7 @@ QString QFSFileEnginePrivate::canonicalized(const QString &path) return canonicalPath; } #endif +#endif QFileInfo fi; const QChar slash(QLatin1Char('/')); diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index d2fa744..1331f54 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -668,6 +668,16 @@ bool QFSFileEnginePrivate::doStat() const could_stat = (QT_FSTAT(QT_FILENO(fh), &st) == 0); } else if (fd == -1) { // ### actually covers two cases: d->fh and when the file is not open +#if defined(Q_OS_SYMBIAN) + // Optimisation for Symbian where fileFlags() calls both doStat() and isSymlink(), but rarely on real links. + // When the filename is not a link, lstat will return the same info as stat, but this also removes + // any need for a further call to lstat to check if the file is a link. + need_lstat = false; + could_stat = (QT_LSTAT(nativeFilePath.constData(), &st) == 0); + is_link = could_stat ? S_ISLNK(st.st_mode) : false; + // if it turns out this was a link, we can call stat too. + if (is_link) +#endif could_stat = (QT_STAT(nativeFilePath.constData(), &st) == 0); } else { could_stat = (QT_FSTAT(fd, &st) == 0); diff --git a/src/corelib/io/qprocess_symbian.cpp b/src/corelib/io/qprocess_symbian.cpp index 07d10ad..adc87fb 100644 --- a/src/corelib/io/qprocess_symbian.cpp +++ b/src/corelib/io/qprocess_symbian.cpp @@ -371,6 +371,7 @@ QProcessActive::QProcessActive() // Called from ProcessManagerThread QProcessActive::~QProcessActive() { + Cancel(); process = NULL; pproc = NULL; } @@ -477,6 +478,7 @@ QProcessManagerMediator::QProcessManagerMediator() // Called from ProcessManagerThread QProcessManagerMediator::~QProcessManagerMediator() { + Cancel(); processManagerThread.Close(); currentCommand = ENoCommand; currentObserver = NULL; diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index 1d7be79..191be6c 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -733,7 +733,7 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla } TInt error; - handledSymbianEvent = CActiveScheduler::RunIfReady(error, CActive::EPriorityIdle); + handledSymbianEvent = CActiveScheduler::RunIfReady(error, KMinTInt); if (error) { qWarning("CActiveScheduler::RunIfReady() returned error: %i\n", error); CActiveScheduler::Current()->Error(error); diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index ecffe99..312c4b2 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -974,7 +974,7 @@ QByteArray QMetaObject::normalizedType(const char *type) if (!type || !*type) return result; - QVarLengthArray<char> stackbuf(int(strlen(type)) + 1); + QVarLengthArray<char> stackbuf(qstrlen(type) + 1); qRemoveWhitespace(type, stackbuf.data()); int templdepth = 0; qNormalizeType(stackbuf.data(), templdepth, result); diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 8e4ec7c..389e6e7 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -3279,12 +3279,14 @@ void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_sign const int method = c->method; QObjectPrivate::Sender currentSender; - currentSender.sender = sender; - currentSender.signal = signal_absolute_index; - currentSender.ref = 1; + const bool receiverInSameThread = currentThreadData == receiver->d_func()->threadData; QObjectPrivate::Sender *previousSender = 0; - if (currentThreadData == receiver->d_func()->threadData) + if (receiverInSameThread) { + currentSender.sender = sender; + currentSender.signal = signal_absolute_index; + currentSender.ref = 1; previousSender = QObjectPrivate::setCurrentSender(receiver, ¤tSender); + } locker.unlock(); if (qt_signal_spy_callback_set.slot_begin_callback != 0) { @@ -3300,8 +3302,8 @@ void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_sign metacall(receiver, QMetaObject::InvokeMetaMethod, method, argv ? argv : empty_argv); } QT_CATCH(...) { locker.relock(); - - QObjectPrivate::resetCurrentSender(receiver, ¤tSender, previousSender); + if (receiverInSameThread) + QObjectPrivate::resetCurrentSender(receiver, ¤tSender, previousSender); --connectionLists->inUse; Q_ASSERT(connectionLists->inUse >= 0); @@ -3316,7 +3318,8 @@ void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_sign locker.relock(); - QObjectPrivate::resetCurrentSender(receiver, ¤tSender, previousSender); + if (receiverInSameThread) + QObjectPrivate::resetCurrentSender(receiver, ¤tSender, previousSender); if (connectionLists->orphaned) break; diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 227a60d..07c9e53 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -484,9 +484,13 @@ static bool compare(const QVariant::Private *a, const QVariant::Private *b) * QMetaType::VoidStar, QMetaType::QObjectStar and so forth, is that it wouldn't include * user defined pointer types. */ const char *const typeName = QMetaType::typeName(a->type); - if (typeName[qstrlen(typeName) - 1] == '*') + uint typeNameLen = qstrlen(typeName); + if (typeNameLen > 0 && typeName[typeNameLen - 1] == '*') return *static_cast<void *const *>(a_ptr) == *static_cast<void *const *>(b_ptr); + if (a->is_null && b->is_null) + return true; + return a_ptr == b_ptr; } diff --git a/src/corelib/thread/qmutex.h b/src/corelib/thread/qmutex.h index 80b50fc..677412e 100644 --- a/src/corelib/thread/qmutex.h +++ b/src/corelib/thread/qmutex.h @@ -95,7 +95,7 @@ class Q_CORE_EXPORT QMutexLocker { public: inline explicit QMutexLocker(QMutex *m) - : mtx(m) + : val(reinterpret_cast<quintptr>(m)) { Q_ASSERT_X((val & quintptr(1u)) == quintptr(0), "QMutexLocker", "QMutex pointer is misaligned"); @@ -105,19 +105,19 @@ public: inline void unlock() { - if (mtx) { + if (val) { if ((val & quintptr(1u)) == quintptr(1u)) { val &= ~quintptr(1u); - mtx->unlock(); + mutex()->unlock(); } } } inline void relock() { - if (mtx) { + if (val) { if ((val & quintptr(1u)) == quintptr(0u)) { - mtx->lock(); + mutex()->lock(); val |= quintptr(1u); } } @@ -140,10 +140,7 @@ public: private: Q_DISABLE_COPY(QMutexLocker) - union { - QMutex *mtx; - quintptr val; - }; + quintptr val; }; #else // QT_NO_THREAD diff --git a/src/corelib/thread/qreadwritelock.h b/src/corelib/thread/qreadwritelock.h index 278b8d4..9521ac3 100644 --- a/src/corelib/thread/qreadwritelock.h +++ b/src/corelib/thread/qreadwritelock.h @@ -96,19 +96,19 @@ public: inline void unlock() { - if (q_lock) { + if (q_val) { if ((q_val & quintptr(1u)) == quintptr(1u)) { q_val &= ~quintptr(1u); - q_lock->unlock(); + readWriteLock()->unlock(); } } } inline void relock() { - if (q_lock) { + if (q_val) { if ((q_val & quintptr(1u)) == quintptr(0u)) { - q_lock->lockForRead(); + readWriteLock()->lockForRead(); q_val |= quintptr(1u); } } @@ -119,14 +119,11 @@ public: private: Q_DISABLE_COPY(QReadLocker) - union { - QReadWriteLock *q_lock; - quintptr q_val; - }; + quintptr q_val; }; inline QReadLocker::QReadLocker(QReadWriteLock *areadWriteLock) - : q_lock(areadWriteLock) + : q_val(reinterpret_cast<quintptr>(areadWriteLock)) { Q_ASSERT_X((q_val & quintptr(1u)) == quintptr(0), "QReadLocker", "QReadWriteLock pointer is misaligned"); @@ -143,19 +140,19 @@ public: inline void unlock() { - if (q_lock) { + if (q_val) { if ((q_val & quintptr(1u)) == quintptr(1u)) { q_val &= ~quintptr(1u); - q_lock->unlock(); + readWriteLock()->unlock(); } } } inline void relock() { - if (q_lock) { + if (q_val) { if ((q_val & quintptr(1u)) == quintptr(0u)) { - q_lock->lockForWrite(); + readWriteLock()->lockForWrite(); q_val |= quintptr(1u); } } @@ -167,14 +164,11 @@ public: private: Q_DISABLE_COPY(QWriteLocker) - union{ - QReadWriteLock *q_lock; - quintptr q_val; - }; + quintptr q_val; }; inline QWriteLocker::QWriteLocker(QReadWriteLock *areadWriteLock) - : q_lock(areadWriteLock) + : q_val(reinterpret_cast<quintptr>(areadWriteLock)) { Q_ASSERT_X((q_val & quintptr(1u)) == quintptr(0), "QWriteLocker", "QReadWriteLock pointer is misaligned"); diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp index 20ad444..eb104a8 100644 --- a/src/corelib/tools/qregexp.cpp +++ b/src/corelib/tools/qregexp.cpp @@ -523,7 +523,7 @@ int qFindString(const QChar *haystack, int haystackLen, int from, \endtable In the mode Wildcard, the wildcard characters cannot be - escaped. In the mode WildcardUnix, the character '\' escapes the + escaped. In the mode WildcardUnix, the character '\\' escapes the wildcard. For example if we are in wildcard mode and have strings which @@ -3779,7 +3779,7 @@ static void invalidateEngine(QRegExpPrivate *priv) \value WildcardUnix This is similar to Wildcard but with the behavior of a Unix shell. The wildcard characters can be escaped - with the character "\". + with the character "\\". \value FixedString The pattern is a fixed string. This is equivalent to using the RegExp pattern on a string in diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index 9ab0970..5ed3db5 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -3236,7 +3236,7 @@ QString QString::section(const QRegExp ®, int start, int end, SectionFlags fl if (!empty || !(flags & SectionSkipEmpty)) x++; } - if((flags & SectionIncludeLeadingSep)) { + if((flags & SectionIncludeLeadingSep) && first_i < sections.size()) { const qt_section_chunk §ion = sections.at(first_i); ret.prepend(section.string.left(section.length)); } diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp index ce3e1a0..abaa486 100644 --- a/src/dbus/qdbusconnection.cpp +++ b/src/dbus/qdbusconnection.cpp @@ -491,6 +491,12 @@ bool QDBusConnection::callWithCallback(const QDBusMessage &message, QObject *rec its return value, which will be either of type QDBusMessage::ReplyMessage or QDBusMessage::ErrorMessage. + If no reply is received within \a timeout milliseconds, an automatic + error will be delivered indicating the expiration of the call. + The default \a timeout is -1, which will be replaced with an + implementation-defined value that is suitable for inter-process + communications (generally, 25 seconds). + See the QDBusInterface::call() function for a more friendly way of placing calls. @@ -526,9 +532,14 @@ QDBusMessage QDBusConnection::call(const QDBusMessage &message, QDBus::CallMode Sends the \a message over this connection and returns immediately. This function is suitable for method calls only. It returns an object of type QDBusPendingCall which can be used to - track the status of the reply. The \a timeout parameter is used to - determine when an auto-generated error reply may be emitted and is - also the upper limit for waiting in QDBusPendingCall::waitForFinished(). + track the status of the reply. + + If no reply is received within \a timeout milliseconds, an automatic + error will be delivered indicating the expiration of the call. The + default \a timeout is -1, which will be replaced with an + implementation-defined value that is suitable for inter-process + communications (generally, 25 seconds). This timeout is also the + upper limit for waiting in QDBusPendingCall::waitForFinished(). See the QDBusInterface::asyncCall() function for a more friendly way of placing calls. diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp index fb0dba4..2d75913 100644 --- a/src/gui/dialogs/qdialog.cpp +++ b/src/gui/dialogs/qdialog.cpp @@ -808,11 +808,11 @@ void QDialog::setVisible(bool visible) void QDialog::showEvent(QShowEvent *event) { if (!event->spontaneous() && !testAttribute(Qt::WA_Moved)) { - Qt::WindowStates state = windowState(); + Qt::WindowStates state = windowState(); adjustPosition(parentWidget()); setAttribute(Qt::WA_Moved, false); // not really an explicit position - if (state != windowState()) - setWindowState(state); + if (state != windowState()) + setWindowState(state); } } diff --git a/src/gui/dialogs/qmessagebox.cpp b/src/gui/dialogs/qmessagebox.cpp index ed437ff..121ba62 100644 --- a/src/gui/dialogs/qmessagebox.cpp +++ b/src/gui/dialogs/qmessagebox.cpp @@ -314,6 +314,7 @@ void QMessageBoxPrivate::updateSize() } width = hardLimit; } + } #ifdef Q_WS_S60 // in S60 portait messageBoxes should always occupy maximum width if (QApplication::desktop()->size().height() > QApplication::desktop()->size().width()){ @@ -323,7 +324,6 @@ void QMessageBoxPrivate::updateSize() width = qMin(QApplication::desktop()->size().height(), hardLimit); } #endif - } if (informativeLabel) { label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); diff --git a/src/gui/dialogs/qprintpreviewdialog.cpp b/src/gui/dialogs/qprintpreviewdialog.cpp index 6723b53..f21343e 100644 --- a/src/gui/dialogs/qprintpreviewdialog.cpp +++ b/src/gui/dialogs/qprintpreviewdialog.cpp @@ -273,7 +273,20 @@ void QPrintPreviewDialogPrivate::init(QPrinter *_printer) QWidget *pageEdit = new QWidget(toolbar); QVBoxLayout *vboxLayout = new QVBoxLayout; vboxLayout->setContentsMargins(0, 0, 0, 0); +#ifdef Q_WS_MAC + // We query the widgets about their size and then we fix the size. + // This should do the trick for the laying out part... + QSize pageNumEditSize, pageNumLabelSize; + pageNumEditSize = pageNumEdit->minimumSizeHint(); + pageNumLabelSize = pageNumLabel->minimumSizeHint(); + pageNumEdit->resize(pageNumEditSize); + pageNumLabel->resize(pageNumLabelSize); +#endif QFormLayout *formLayout = new QFormLayout; +#ifdef Q_WS_MAC + // We have to change the growth policy in Mac. + formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow); +#endif formLayout->setWidget(0, QFormLayout::LabelRole, pageNumEdit); formLayout->setWidget(0, QFormLayout::FieldRole, pageNumLabel); vboxLayout->addLayout(formLayout); diff --git a/src/gui/egl/qegl_p.h b/src/gui/egl/qegl_p.h index f500bd4..7dad9fe 100644 --- a/src/gui/egl/qegl_p.h +++ b/src/gui/egl/qegl_p.h @@ -55,10 +55,14 @@ QT_BEGIN_INCLUDE_NAMESPACE +#if defined(QT_OPENGL_ES_2) +# include <GLES2/gl2.h> +#endif + #if defined(QT_GLES_EGL) -#include <GLES/egl.h> +# include <GLES/egl.h> #else -#include <EGL/egl.h> +# include <EGL/egl.h> #endif #if defined(Q_WS_X11) diff --git a/src/gui/egl/qeglproperties.cpp b/src/gui/egl/qeglproperties.cpp index 636f469..b5d3103 100644 --- a/src/gui/egl/qeglproperties.cpp +++ b/src/gui/egl/qeglproperties.cpp @@ -39,16 +39,13 @@ ** ****************************************************************************/ -#include "qeglproperties_p.h" - -QT_BEGIN_NAMESPACE - #include <QtCore/qdebug.h> #include <QtCore/qstringlist.h> #include "qeglproperties_p.h" #include "qeglcontext_p.h" +QT_BEGIN_NAMESPACE // Initialize a property block. QEglProperties::QEglProperties() diff --git a/src/gui/embedded/directfb.pri b/src/gui/embedded/directfb.pri index d6d77b4..75d693e 100644 --- a/src/gui/embedded/directfb.pri +++ b/src/gui/embedded/directfb.pri @@ -15,7 +15,7 @@ #DEFINES += QT_DIRECTFB_TIMING #DEFINES += QT_NO_DIRECTFB_OPAQUE_DETECTION #DEFINES += QT_NO_DIRECTFB_STRETCHBLIT -#DIRECTFB_DRAWINGOPERATIONS=DRAW_RECTS|DRAW_LINES|DRAW_IMAGE|DRAW_PIXMAP|DRAW_TILED_PIXMAP|STROKE_PATH|DRAW_PATH|DRAW_POINTS|DRAW_ELLIPSE|DRAW_POLYGON|DRAW_TEXT|FILL_PATH|FILL_RECT|DRAW_COLORSPANS|DRAW_ROUNDED_RECT|DRAW_STATICTEXT +DIRECTFB_DRAWINGOPERATIONS=DRAW_RECTS|DRAW_LINES|DRAW_IMAGE|DRAW_PIXMAP|DRAW_TILED_PIXMAP|STROKE_PATH|DRAW_PATH|DRAW_POINTS|DRAW_ELLIPSE|DRAW_POLYGON|DRAW_TEXT|FILL_PATH|FILL_RECT|DRAW_COLORSPANS|DRAW_ROUNDED_RECT|DRAW_STATICTEXT #DEFINES += \"QT_DIRECTFB_WARN_ON_RASTERFALLBACKS=$$DIRECTFB_DRAWINGOPERATIONS\" #DEFINES += \"QT_DIRECTFB_DISABLE_RASTERFALLBACKS=$$DIRECTFB_DRAWINGOPERATIONS\" diff --git a/src/gui/embedded/qscreen_qws.cpp b/src/gui/embedded/qscreen_qws.cpp index 65a3fb5..a3fe1ab 100644 --- a/src/gui/embedded/qscreen_qws.cpp +++ b/src/gui/embedded/qscreen_qws.cpp @@ -2740,7 +2740,7 @@ void QScreen::compose(int level, const QRegion &exposed, QRegion &blend, default: break; } - spanData.setup(qwsServer->backgroundBrush(), 256, QPainter::CompositionMode_SourceOver); + spanData.setup(qwsServer->backgroundBrush(), 256, QPainter::CompositionMode_Source); spanData.dx = off.x(); spanData.dy = off.y(); } else if (!surface->isBuffered()) { diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 4f06f80..b712016 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -641,10 +641,10 @@ are children of a modal panel are not blocked. The values are: - + \value NonModal The panel is not modal and does not block input to other panels. This is the default value for panels. - + \value PanelModal The panel is modal to a single item hierarchy and blocks input to its parent pane, all grandparent panels, and all siblings of its parent and grandparent panels. @@ -2182,6 +2182,7 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo } // Certain properties are dropped as an item becomes invisible. + bool hasFocus = q_ptr->hasFocus(); if (!newVisible) { if (scene) { if (scene->d_func()->mouseGrabberItems.contains(q)) @@ -2191,7 +2192,7 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo if (q->isPanel() && panelModality != QGraphicsItem::NonModal) scene->d_func()->leaveModal(q_ptr); } - if (q_ptr->hasFocus() && scene) { + if (hasFocus && scene) { // Hiding the closest non-panel ancestor of the focus item QGraphicsItem *focusItem = scene->focusItem(); bool clear = true; @@ -2204,7 +2205,7 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo } while ((focusItem = focusItem->parentWidget()) && !focusItem->isPanel()); } if (clear) - q_ptr->clearFocus(); + clearFocusHelper(/* giveFocusToParent = */ false); } if (q_ptr->isSelected()) q_ptr->setSelected(false); @@ -2242,26 +2243,45 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo } // Enable subfocus - if (scene && newVisible) { - QGraphicsItem *p = parent; - bool done = false; - while (p) { - if (p->flags() & QGraphicsItem::ItemIsFocusScope) { - QGraphicsItem *fsi = p->d_ptr->focusScopeItem; - if (q_ptr == fsi || q_ptr->isAncestorOf(fsi)) { - done = true; - while (fsi->d_ptr->focusScopeItem && fsi->d_ptr->focusScopeItem->isVisible()) - fsi = fsi->d_ptr->focusScopeItem; - scene->setFocusItem(fsi); + if (scene) { + if (newVisible) { + // Item is shown + QGraphicsItem *p = parent; + bool done = false; + while (p) { + if (p->flags() & QGraphicsItem::ItemIsFocusScope) { + QGraphicsItem *fsi = p->d_ptr->focusScopeItem; + if (q_ptr == fsi || q_ptr->isAncestorOf(fsi)) { + done = true; + while (fsi->d_ptr->focusScopeItem && fsi->d_ptr->focusScopeItem->isVisible()) + fsi = fsi->d_ptr->focusScopeItem; + fsi->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ true, + /* focusFromShow = */ true); + } + break; } - break; + p = p->d_ptr->parent; } - p = p->d_ptr->parent; - } - if (!done) { - QGraphicsItem *fi = subFocusItem; - if (fi && fi != scene->focusItem()) { - scene->setFocusItem(fi); + if (!done) { + QGraphicsItem *fi = subFocusItem; + if (fi && fi != scene->focusItem()) { + scene->setFocusItem(fi); + } + } + } else { + // Item is hidden + if (hasFocus) { + QGraphicsItem *p = parent; + while (p) { + if (p->flags() & QGraphicsItem::ItemIsFocusScope) { + if (p->d_ptr->visible) { + p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ true, + /* focusFromShow = */ true); + } + break; + } + p = p->d_ptr->parent; + } } } } @@ -3112,13 +3132,13 @@ bool QGraphicsItem::hasFocus() const */ void QGraphicsItem::setFocus(Qt::FocusReason focusReason) { - d_ptr->setFocusHelper(focusReason, /* climb = */ true); + d_ptr->setFocusHelper(focusReason, /* climb = */ true, /* focusFromShow = */ false); } /*! \internal */ -void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool climb) +void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromShow) { // Disabled / unfocusable items cannot accept focus. if (!q_ptr->isEnabled() || !(flags & QGraphicsItem::ItemIsFocusable)) @@ -3138,7 +3158,7 @@ void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool clim while (p) { if (p->flags() & QGraphicsItem::ItemIsFocusScope) { p->d_ptr->focusScopeItem = q_ptr; - if (!p->focusItem()) { + if (!p->focusItem() && !focusFromShow) { // If you call setFocus on a child of a focus scope that // doesn't currently have a focus item, then stop. return; @@ -3179,24 +3199,35 @@ void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool clim */ void QGraphicsItem::clearFocus() { - // Pass focus to the closest parent focus scope. - if (!d_ptr->inDestructor) { - QGraphicsItem *p = d_ptr->parent; - while (p) { - if (p->flags() & ItemIsFocusScope) { - p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ false); - return; + d_ptr->clearFocusHelper(/* giveFocusToParent = */ true); +} + +/*! + \internal +*/ +void QGraphicsItemPrivate::clearFocusHelper(bool giveFocusToParent) +{ + if (giveFocusToParent) { + // Pass focus to the closest parent focus scope + if (!inDestructor) { + QGraphicsItem *p = parent; + while (p) { + if (p->flags() & QGraphicsItem::ItemIsFocusScope) { + p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ false, + /* focusFromShow = */ false); + return; + } + p = p->d_ptr->parent; } - p = p->d_ptr->parent; } } // Invisible items with focus must explicitly clear subfocus. - d_ptr->clearSubFocus(this); + clearSubFocus(q_ptr); - if (hasFocus()) { + if (q_ptr->hasFocus()) { // If this item has the scene's input focus, clear it. - d_ptr->scene->setFocusItem(0); + scene->setFocusItem(0); } } @@ -10817,6 +10848,7 @@ void QGraphicsItemEffectSourcePrivate::draw(QPainter *painter) } } +// sourceRect must be in the given coordinate system QRect QGraphicsItemEffectSourcePrivate::paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded) const { QRectF effectRectF; @@ -10826,7 +10858,8 @@ QRect QGraphicsItemEffectSourcePrivate::paddedEffectRect(Qt::CoordinateSystem sy if (mode == QGraphicsEffect::PadToEffectiveBoundingRect) { if (info) { - effectRectF = item->graphicsEffect()->boundingRectFor(boundingRect(Qt::DeviceCoordinates)); + QRectF deviceRect = system == Qt::DeviceCoordinates ? sourceRect : info->painter->worldTransform().mapRect(sourceRect); + effectRectF = item->graphicsEffect()->boundingRectFor(deviceRect); if (unpadded) *unpadded = (effectRectF.size() == sourceRect.size()); if (info && system == Qt::LogicalCoordinates) @@ -10875,30 +10908,6 @@ QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QP return static_cast<QGraphicsPixmapItem *>(item)->pixmap(); } - if (deviceCoordinates) { - // Clip to viewport rect. - int left, top, right, bottom; - effectRect.getCoords(&left, &top, &right, &bottom); - if (left < 0) { - if (offset) - offset->rx() += -left; - effectRect.setX(0); - } - if (top < 0) { - if (offset) - offset->ry() += -top; - effectRect.setY(0); - } - // NB! We use +-1 for historical reasons (see QRect documentation). - QPaintDevice *device = info->painter->device(); - const int deviceWidth = device->width(); - const int deviceHeight = device->height(); - if (right + 1 > deviceWidth) - effectRect.setRight(deviceWidth - 1); - if (bottom + 1 > deviceHeight) - effectRect.setBottom(deviceHeight -1); - - } if (effectRect.isEmpty()) return QPixmap(); diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h index 4c4bfaf..de8cf56 100644 --- a/src/gui/graphicsview/qgraphicsitem_p.h +++ b/src/gui/graphicsview/qgraphicsitem_p.h @@ -414,7 +414,8 @@ public: inline void markParentDirty(bool updateBoundingRect = false); - void setFocusHelper(Qt::FocusReason focusReason, bool climb); + void setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromShow); + void clearFocusHelper(bool giveFocusToParent); void setSubFocus(QGraphicsItem *rootItem = 0); void clearSubFocus(QGraphicsItem *rootItem = 0); void resetFocusProxy(); diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 6bc02cc..fc311f5 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -4728,31 +4728,18 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter * if (sourced->currentCachedSystem() != Qt::LogicalCoordinates && sourced->lastEffectTransform != painter->worldTransform()) { - bool unclipped = false; if (sourced->lastEffectTransform.type() <= QTransform::TxTranslate && painter->worldTransform().type() <= QTransform::TxTranslate) { - QRectF itemRect = item->boundingRect(); - if (!item->d_ptr->children.isEmpty()) - itemRect |= item->childrenBoundingRect(); + QRectF sourceRect = sourced->boundingRect(Qt::DeviceCoordinates); + QRect effectRect = sourced->paddedEffectRect(Qt::DeviceCoordinates, sourced->currentCachedMode(), sourceRect); - QRectF oldSourceRect = sourced->lastEffectTransform.mapRect(itemRect); - QRectF newSourceRect = painter->worldTransform().mapRect(itemRect); - - QRect oldEffectRect = sourced->paddedEffectRect(sourced->currentCachedSystem(), sourced->currentCachedMode(), oldSourceRect); - QRect newEffectRect = sourced->paddedEffectRect(sourced->currentCachedSystem(), sourced->currentCachedMode(), newSourceRect); - - QRect deviceRect(0, 0, painter->device()->width(), painter->device()->height()); - if (deviceRect.contains(oldEffectRect) && deviceRect.contains(newEffectRect)) { - sourced->setCachedOffset(newEffectRect.topLeft()); - unclipped = true; - } + sourced->setCachedOffset(effectRect.topLeft()); + } else { + sourced->invalidateCache(QGraphicsEffectSourcePrivate::TransformChanged); } sourced->lastEffectTransform = painter->worldTransform(); - - if (!unclipped) - sourced->invalidateCache(QGraphicsEffectSourcePrivate::TransformChanged); } item->d_ptr->graphicsEffect->draw(painter); diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 1ced3d7..a767987 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -3360,12 +3360,6 @@ void QGraphicsView::paintEvent(QPaintEvent *event) backgroundPainter.setClipRegion(d->backgroundPixmapExposed, Qt::ReplaceClip); if (viewTransformed) backgroundPainter.setTransform(viewTransform); -#ifdef Q_WS_X11 -#undef X11 - if (backgroundPainter.paintEngine()->type() != QPaintEngine::X11) -#define X11 qt_x11Data -#endif - backgroundPainter.setCompositionMode(QPainter::CompositionMode_Source); QRectF backgroundExposedSceneRect = mapToScene(d->backgroundPixmapExposed.boundingRect()).boundingRect(); drawBackground(&backgroundPainter, backgroundExposedSceneRect); d->backgroundPixmapExposed = QRegion(); diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp index bf6eb8d..fad51f4 100644 --- a/src/gui/image/qicon.cpp +++ b/src/gui/image/qicon.cpp @@ -982,7 +982,9 @@ QIcon QIcon::fromTheme(const QString &name, const QIcon &fallback) icon = *cachedIcon; } - if (icon.availableSizes().isEmpty()) + // Note the qapp check is to allow lazy loading of static icons + // Supporting fallbacks will not work for this case. + if (qApp && icon.availableSizes().isEmpty()) return fallback; return icon; diff --git a/src/gui/image/qiconloader.cpp b/src/gui/image/qiconloader.cpp index b35e80a..72ec2e8 100644 --- a/src/gui/image/qiconloader.cpp +++ b/src/gui/image/qiconloader.cpp @@ -85,19 +85,30 @@ static QString fallbackTheme() } QIconLoader::QIconLoader() : - m_themeKey(1), m_supportsSvg(false) + m_themeKey(1), m_supportsSvg(false), m_initialized(false) { - m_systemTheme = qt_guiPlatformPlugin()->systemIconThemeName(); - if (m_systemTheme.isEmpty()) - m_systemTheme = fallbackTheme(); +} + +// We lazily initialize the loader to make static icons +// work. Though we do not officially support this. +void QIconLoader::ensureInitialized() +{ + if (!m_initialized) { + m_initialized = true; + + Q_ASSERT(qApp); + m_systemTheme = qt_guiPlatformPlugin()->systemIconThemeName(); + if (m_systemTheme.isEmpty()) + m_systemTheme = fallbackTheme(); #ifndef QT_NO_LIBRARY - QFactoryLoader iconFactoryLoader(QIconEngineFactoryInterfaceV2_iid, - QLatin1String("/iconengines"), - Qt::CaseInsensitive); - if (iconFactoryLoader.keys().contains(QLatin1String("svg"))) - m_supportsSvg = true; + QFactoryLoader iconFactoryLoader(QIconEngineFactoryInterfaceV2_iid, + QLatin1String("/iconengines"), + Qt::CaseInsensitive); + if (iconFactoryLoader.keys().contains(QLatin1String("svg"))) + m_supportsSvg = true; #endif //QT_NO_LIBRARY + } } QIconLoader *QIconLoader::instance() @@ -339,6 +350,9 @@ bool QIconLoaderEngine::hasIcon() const // Lazily load the icon void QIconLoaderEngine::ensureLoaded() { + + iconLoaderInstance()->ensureInitialized(); + if (!(iconLoaderInstance()->themeKey() == m_key)) { while (!m_entries.isEmpty()) diff --git a/src/gui/image/qiconloader_p.h b/src/gui/image/qiconloader_p.h index 19f2dda..a6b5f5b 100644 --- a/src/gui/image/qiconloader_p.h +++ b/src/gui/image/qiconloader_p.h @@ -169,6 +169,7 @@ public: static QIconLoader *instance(); void updateSystemTheme(); void invalidateKey() { m_themeKey++; } + void ensureInitialized(); private: QThemeIconEntries findIconHelper(const QString &themeName, @@ -176,6 +177,7 @@ private: QStringList &visited) const; uint m_themeKey; bool m_supportsSvg; + bool m_initialized; mutable QString m_userTheme; mutable QString m_systemTheme; diff --git a/src/gui/image/qimagepixmapcleanuphooks.cpp b/src/gui/image/qimagepixmapcleanuphooks.cpp index 517fcb0..521e348 100644 --- a/src/gui/image/qimagepixmapcleanuphooks.cpp +++ b/src/gui/image/qimagepixmapcleanuphooks.cpp @@ -96,6 +96,11 @@ void QImagePixmapCleanupHooks::removeImageHook(_qt_image_cleanup_hook_64 hook) void QImagePixmapCleanupHooks::executePixmapDataModificationHooks(QPixmapData* pmd) { QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks(); + // the global destructor for the pixmap and image hooks might have + // been called already if the app is "leaking" global + // pixmaps/images + if (!h) + return; for (int i = 0; i < h->pixmapModificationHooks.count(); ++i) h->pixmapModificationHooks[i](pmd); @@ -106,6 +111,11 @@ void QImagePixmapCleanupHooks::executePixmapDataModificationHooks(QPixmapData* p void QImagePixmapCleanupHooks::executePixmapDataDestructionHooks(QPixmapData* pmd) { QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks(); + // the global destructor for the pixmap and image hooks might have + // been called already if the app is "leaking" global + // pixmaps/images + if (!h) + return; for (int i = 0; i < h->pixmapDestructionHooks.count(); ++i) h->pixmapDestructionHooks[i](pmd); diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index ae62f06..474cd2e 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -831,21 +831,14 @@ bool QPixmap::load(const QString &fileName, const char *format, Qt::ImageConvers if (QPixmapCache::find(key, *this)) return true; - bool ok; - - if (data) { - ok = data->fromFile(fileName, format, flags); - } else { - QScopedPointer<QPixmapData> tmp(QPixmapData::create(0, 0, QPixmapData::PixmapType)); - ok = tmp->fromFile(fileName, format, flags); - if (ok) - data = tmp.take(); - } - - if (ok) + QScopedPointer<QPixmapData> tmp(QPixmapData::create(0, 0, data ? data->type : QPixmapData::PixmapType)); + if (tmp->fromFile(fileName, format, flags)) { + data = tmp.take(); QPixmapCache::insert(key, *this); + return true; + } - return ok; + return false; } /*! @@ -2046,12 +2039,16 @@ QPixmap QPixmap::fromImage(const QImage &image, Qt::ImageConversionFlags flags) over the one you grab, you get pixels from the overlying window, too. The mouse cursor is generally not grabbed. - Note on X11that if the given \a window doesn't have the same depth + Note on X11 that if the given \a window doesn't have the same depth as the root window, and another window partially or entirely obscures the one you grab, you will \e not get pixels from the overlying window. The contents of the obscured areas in the pixmap will be undefined and uninitialized. + On Windows Vista and above grabbing a layered window, which is + created by setting the Qt::WA_TranslucentBackground attribute, will + not work. Instead grabbing the desktop widget should work. + \warning In general, grabbing an area outside the screen is not safe. This depends on the underlying window system. diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp index 0abf51f..5355ad3 100644 --- a/src/gui/image/qpixmapfilter.cpp +++ b/src/gui/image/qpixmapfilter.cpp @@ -777,6 +777,9 @@ void expblur(QImage &img, qreal radius, bool improvedQuality = false, int transp Q_GUI_EXPORT QImage qt_halfScaled(const QImage &source) { + if (source.width() < 2 || source.height() < 2) + return QImage(); + QImage srcImage = source; if (source.format() == QImage::Format_Indexed8) { @@ -869,7 +872,7 @@ Q_GUI_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, boo } qreal scale = 1; - if (radius >= 4) { + if (radius >= 4 && blurImage.width() >= 2 && blurImage.height() >= 2) { blurImage = qt_halfScaled(blurImage); scale = 2; radius *= qreal(0.5); diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 1ac8ace..cc60246 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -551,6 +551,21 @@ void QCoeFepInputContext::StartFepInlineEditL(const TDesC& aInitialInlineText, m_formatRetriever = &aInlineTextFormatRetriever; m_pointerHandler = &aPointerEventHandlerDuringInlineEdit; + // With T9 aInitialInlineText is typically empty when StartFepInlineEditL is called, + // 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 replacementLength = qAbs(m_cursorPos-anchor); + if (replacementLength > 0) { + int replacementStart = m_cursorPos < anchor ? 0 : -replacementLength; + QList<QInputMethodEvent::Attribute> clearSelectionAttributes; + QInputMethodEvent clearSelectionEvent(QLatin1String(""), clearSelectionAttributes); + clearSelectionEvent.setCommitString(QLatin1String(""), replacementStart, replacementLength); + sendEvent(clearSelectionEvent); + } + } + applyFormat(&attributes); attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index bc6db90..2faf755 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -2568,6 +2568,7 @@ void QAbstractItemView::updateEditorGeometries() QStyleOptionViewItemV4 option = d->viewOptionsV4(); QList<QEditorInfo>::iterator it = d->editors.begin(); QWidgetList editorsToRelease; + QWidgetList editorsToHide; while (it != d->editors.end()) { QModelIndex index = it->index; QWidget *editor = it->editor; @@ -2579,7 +2580,7 @@ void QAbstractItemView::updateEditorGeometries() if (delegate) delegate->updateEditorGeometry(editor, option, index); } else { - editor->hide(); + editorsToHide << editor; } ++it; } else { @@ -2588,8 +2589,11 @@ void QAbstractItemView::updateEditorGeometries() } } - //we release the editor outside of the loop because it might change the focus and try + //we hide and release the editor outside of the loop because it might change the focus and try //to change the d->editors list. + for (int i = 0; i < editorsToHide.count(); ++i) { + editorsToHide.at(i)->hide(); + } for (int i = 0; i < editorsToRelease.count(); ++i) { d->releaseEditor(editorsToRelease.at(i)); } @@ -3046,6 +3050,7 @@ void QAbstractItemView::setIndexWidget(const QModelIndex &index, QWidget *widget if (!d->isIndexValid(index)) return; if (QWidget *oldWidget = indexWidget(index)) { + d->persistent.remove(oldWidget); d->removeEditor(oldWidget); oldWidget->deleteLater(); } diff --git a/src/gui/itemviews/qitemdelegate.cpp b/src/gui/itemviews/qitemdelegate.cpp index 9069ce4..7d8e103 100644 --- a/src/gui/itemviews/qitemdelegate.cpp +++ b/src/gui/itemviews/qitemdelegate.cpp @@ -1297,14 +1297,8 @@ bool QItemDelegate::editorEvent(QEvent *event, return false; } - Qt::CheckState state; - if ( flags & Qt::ItemIsTristate ) { - state = static_cast<Qt::CheckState>( (value.toInt() + 1) % 3 ); - } else { - state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked + Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked ? Qt::Unchecked : Qt::Checked); - } - return model->setData(index, state, Qt::CheckStateRole); } diff --git a/src/gui/itemviews/qstyleditemdelegate.cpp b/src/gui/itemviews/qstyleditemdelegate.cpp index 9aac554..880f8ab 100644 --- a/src/gui/itemviews/qstyleditemdelegate.cpp +++ b/src/gui/itemviews/qstyleditemdelegate.cpp @@ -747,13 +747,8 @@ bool QStyledItemDelegate::editorEvent(QEvent *event, return false; } - Qt::CheckState state; - if ( flags & Qt::ItemIsTristate ) { - state = static_cast<Qt::CheckState>( (value.toInt() + 1) % 3 ); - } else { - state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked + Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked ? Qt::Unchecked : Qt::Checked); - } return model->setData(index, state, Qt::CheckStateRole); } diff --git a/src/gui/itemviews/qtableview.cpp b/src/gui/itemviews/qtableview.cpp index bdc1205..46fd9d0 100644 --- a/src/gui/itemviews/qtableview.cpp +++ b/src/gui/itemviews/qtableview.cpp @@ -1908,6 +1908,7 @@ QRegion QTableView::visualRegionForSelection(const QItemSelection &selection) co width, rowHeight(r))); } } else { // nothing moved + const int gridAdjust = showGrid() ? 1 : 0; for (int i = 0; i < selection.count(); ++i) { QItemSelectionRange range = selection.at(i); if (range.parent() != d->root || !range.isValid()) @@ -1916,9 +1917,16 @@ QRegion QTableView::visualRegionForSelection(const QItemSelection &selection) co const int rtop = rowViewportPosition(range.top()); const int rbottom = rowViewportPosition(range.bottom()) + rowHeight(range.bottom()); - const int rleft = columnViewportPosition(range.left()); - const int rright = columnViewportPosition(range.right()) + columnWidth(range.right()); - selectionRegion += QRect(QPoint(rleft, rtop), QPoint(rright, rbottom)); + int rleft; + int rright; + if (isLeftToRight()) { + rleft = columnViewportPosition(range.left()); + rright = columnViewportPosition(range.right()) + columnWidth(range.right()); + } else { + rleft = columnViewportPosition(range.right()); + rright = columnViewportPosition(range.left()) + columnWidth(range.left()); + } + selectionRegion += QRect(QPoint(rleft, rtop), QPoint(rright - 1 - gridAdjust, rbottom - 1 - gridAdjust)); if (d->hasSpans()) { foreach (QSpanCollection::Span *s, d->spans.spansInRect(range.left(), range.top(), range.width(), range.height())) { diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 8653dec..6d71cfe 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -543,6 +543,7 @@ public: const QList<QTouchEvent::TouchPoint> &touchPoints); #if defined(Q_WS_WIN) + static bool HasTouchSupport; static PtrRegisterTouchWindow RegisterTouchWindow; static PtrGetTouchInputInfo GetTouchInputInfo; static PtrCloseTouchInputHandle CloseTouchInputHandle; diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index baefdfd..ccc39c9 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -597,9 +597,9 @@ TKeyResponse QSymbianControl::OfferKeyEvent(const TKeyEvent& keyEvent, TEventCod TUint s60Keysym = QApplicationPrivate::resolveS60ScanCode(keyEvent.iScanCode, keyEvent.iCode); int keyCode; - if (s60Keysym == EKeyNull){ //some key events have 0 in iCode, for them iScanCode should be used - keyCode = qt_keymapper_private()->mapS60ScanCodesToQt(keyEvent.iScanCode); - } else if (s60Keysym >= 0x20 && s60Keysym < ENonCharacterKeyBase) { + if (s60Keysym == EKeyNull){ //some key events have 0 in iCode, for them iScanCode should be used + keyCode = qt_keymapper_private()->mapS60ScanCodesToQt(keyEvent.iScanCode); + } else if (s60Keysym >= 0x20 && s60Keysym < ENonCharacterKeyBase) { // Normal characters keys. keyCode = s60Keysym; } else { @@ -966,13 +966,26 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */) qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle()); #ifdef Q_WS_S60 // If widget is fullscreen/minimized, hide status pane and button container otherwise show them. - CEikStatusPane* statusPane = S60->statusPane(); - CEikButtonGroupContainer* buttonGroup = S60->buttonGroupContainer(); + CEikStatusPane *statusPane = S60->statusPane(); + CEikButtonGroupContainer *buttonGroup = S60->buttonGroupContainer(); TBool visible = !(qwidget->windowState() & (Qt::WindowFullScreen | Qt::WindowMinimized)); if (statusPane) statusPane->MakeVisible(visible); - if (buttonGroup) - buttonGroup->MakeVisible(visible); + if (buttonGroup) { + // Visibility + const TBool isFullscreen = qwidget->windowState() & Qt::WindowFullScreen; + const TBool cbaVisibilityHint = qwidget->windowFlags() & Qt::WindowSoftkeysVisibleHint; + buttonGroup->MakeVisible(visible || (isFullscreen && cbaVisibilityHint)); + + // Responsiviness + CEikCba *cba = static_cast<CEikCba *>( buttonGroup->ButtonGroup() ); // downcast from MEikButtonGroup + TUint cbaFlags = cba->ButtonGroupFlags(); + if(qwidget->windowFlags() & Qt::WindowSoftkeysRespondHint) + cbaFlags |= EAknCBAFlagRespondWhenInvisible; + else + cbaFlags &= ~EAknCBAFlagRespondWhenInvisible; + cba->SetButtonGroupFlags(cbaFlags); + } #endif } else if (QApplication::activeWindow() == qwidget->window()) { if (CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog()) { @@ -1016,6 +1029,16 @@ void QSymbianControl::HandleResourceChange(int resourceType) } else if (qwidget->isMaximized()) { TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect(); SetExtent(r.iTl, r.Size()); + } else if (!qwidget->isMinimized()){ // Normal geometry + if (!qwidget->testAttribute(Qt::WA_Resized)) { + qwidget->adjustSize(); + qwidget->setAttribute(Qt::WA_Resized, false); //not a user resize + } + if (!qwidget->testAttribute(Qt::WA_Moved)) { + TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect(); + SetPosition(r.iTl); + qwidget->setAttribute(Qt::WA_Moved, false); // not really an explicit position + } } break; } @@ -1229,7 +1252,7 @@ void qt_init(QApplicationPrivate * /* priv */, int) S60->avkonComponentsSupportTransparency = (value==1) ? true : false; } } -#endif +#endif if (touch) { QApplicationPrivate::navigationMode = Qt::NavigationModeNone; @@ -1450,6 +1473,9 @@ void QApplicationPrivate::closePopup(QWidget *popup) QWidget *fw = QApplicationPrivate::active_window ? QApplicationPrivate::active_window->focusWidget() : q_func()->focusWidget(); if (fw) { + if(fw->window()->isModal()) // restore pointer capture for modal window + fw->effectiveWinId()->SetPointerCapture(true); + if (fw != q_func()->focusWidget()) { fw->setFocus(Qt::PopupFocusReason); } else { diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 131b9bb..9872514 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -115,6 +115,8 @@ extern void qt_wince_hide_taskbar(HWND hwnd); //defined in qguifunctions_wince.c # include <winable.h> #endif +#include "private/qwinnativepangesturerecognizer_win_p.h" + #ifndef WM_TOUCH # define WM_TOUCH 0x0240 @@ -2524,6 +2526,7 @@ LRESULT CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam } result = false; break; +#if !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES) case WM_GESTURE: { GESTUREINFO gi; memset(&gi, 0, sizeof(GESTUREINFO)); @@ -2556,6 +2559,7 @@ LRESULT CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam result = true; break; } +#endif // !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES) #ifndef QT_NO_CURSOR case WM_SETCURSOR: { QCursor *ovr = QApplication::overrideCursor(); @@ -4012,12 +4016,45 @@ void QSessionManager::cancel() #endif //QT_NO_SESSIONMANAGER +bool QApplicationPrivate::HasTouchSupport = false; PtrRegisterTouchWindow QApplicationPrivate::RegisterTouchWindow = 0; PtrGetTouchInputInfo QApplicationPrivate::GetTouchInputInfo = 0; PtrCloseTouchInputHandle QApplicationPrivate::CloseTouchInputHandle = 0; void QApplicationPrivate::initializeMultitouch_sys() { + static const IID QT_IID_IInkTablets = {0x112086D9, 0x7779, 0x4535, {0xA6, 0x99, 0x86, 0x2B, 0x43, 0xAC, 0x18, 0x63} }; + static const IID QT_IID_IInkTablet2 = {0x90c91ad2, 0xfa36, 0x49d6, {0x95, 0x16, 0xce, 0x8d, 0x57, 0x0f, 0x6f, 0x85} }; + static const CLSID QT_CLSID_InkTablets = {0x6E4FCB12, 0x510A, 0x4d40, {0x93, 0x04, 0x1D, 0xA1, 0x0A, 0xE9, 0x14, 0x7C} }; + + IInkTablets *iInkTablets = 0; + HRESULT hr = CoCreateInstance(QT_CLSID_InkTablets, NULL, CLSCTX_ALL, QT_IID_IInkTablets, (void**)&iInkTablets); + if (SUCCEEDED(hr)) { + long count = 0; + iInkTablets->get_Count(&count); + for (long i = 0; i < count; ++i) { + IInkTablet *iInkTablet = 0; + hr = iInkTablets->Item(i, &iInkTablet); + if (FAILED(hr)) + continue; + IInkTablet2 *iInkTablet2 = 0; + hr = iInkTablet->QueryInterface(QT_IID_IInkTablet2, (void**)&iInkTablet2); + iInkTablet->Release(); + if (FAILED(hr)) + continue; + TabletDeviceKind kind; + hr = iInkTablet2->get_DeviceKind(&kind); + iInkTablet2->Release(); + if (FAILED(hr)) + continue; + if (kind == TDK_Touch) { + QApplicationPrivate::HasTouchSupport = true; + break; + } + } + iInkTablets->Release(); + } + QLibrary library(QLatin1String("user32")); // MinGW (g++ 3.4.5) accepts only C casts. RegisterTouchWindow = (PtrRegisterTouchWindow)(library.resolve("RegisterTouchWindow")); diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index 3c2c743..20a7ff2 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -96,6 +96,11 @@ extern "C" { } #endif +#ifndef QT_GUI_DOUBLE_CLICK_RADIUS +#define QT_GUI_DOUBLE_CLICK_RADIUS 5 +#endif + + //#define ALIEN_DEBUG #if !defined(QT_NO_GLIB) @@ -312,9 +317,14 @@ static const char * x11_atomnames = { "_XEMBED\0" "_XEMBED_INFO\0" + // Wacom old. (before version 0.10) "Wacom Stylus\0" "Wacom Cursor\0" "Wacom Eraser\0" + + // Tablet + "STYLUS\0" + "ERASER\0" }; Q_GUI_EXPORT QX11Data *qt_x11Data = 0; @@ -2340,12 +2350,12 @@ void qt_init(QApplicationPrivate *priv, int, gotStylus = true; } #else - if (devs->type == ATOM(XWacomStylus)) { + if (devs->type == ATOM(XWacomStylus) || devs->type == ATOM(XTabletStylus)) { deviceType = QTabletEvent::Stylus; if (wacomDeviceName()->isEmpty()) wacomDeviceName()->append(devs->name); gotStylus = true; - } else if (devs->type == ATOM(XWacomEraser)) { + } else if (devs->type == ATOM(XWacomEraser) || devs->type == ATOM(XTabletEraser)) { deviceType = QTabletEvent::XFreeEraser; gotEraser = true; } @@ -4194,8 +4204,8 @@ bool QETWidget::translateMouseEvent(const XEvent *event) mouseButtonPressed == button && (long)event->xbutton.time -(long)mouseButtonPressTime < QApplication::doubleClickInterval() && - qAbs(event->xbutton.x - mouseXPos) < 5 && - qAbs(event->xbutton.y - mouseYPos) < 5) { + qAbs(event->xbutton.x - mouseXPos) < QT_GUI_DOUBLE_CLICK_RADIUS && + qAbs(event->xbutton.y - mouseYPos) < QT_GUI_DOUBLE_CLICK_RADIUS) { type = QEvent::MouseButtonDblClick; mouseButtonPressTime -= 2000; // no double-click next time } else { diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp index 89ad94d..aa6720e 100644 --- a/src/gui/kernel/qgesturemanager.cpp +++ b/src/gui/kernel/qgesturemanager.cpp @@ -45,6 +45,7 @@ #include "private/qgesture_p.h" #include "private/qgraphicsitem_p.h" #include "private/qevent_p.h" +#include "private/qapplication_p.h" #include "qgesture.h" #include "qevent.h" #include "qgraphicsitem.h" @@ -86,7 +87,8 @@ QGestureManager::QGestureManager(QObject *parent) #endif #if defined(Q_OS_WIN) #if !defined(QT_NO_NATIVE_GESTURES) - registerGestureRecognizer(new QWinNativePanGestureRecognizer); + if (QApplicationPrivate::HasTouchSupport) + registerGestureRecognizer(new QWinNativePanGestureRecognizer); #endif #else registerGestureRecognizer(new QTapAndHoldGestureRecognizer); diff --git a/src/gui/kernel/qguifunctions_wince.cpp b/src/gui/kernel/qguifunctions_wince.cpp index ac4cdc8..f5004b0 100644 --- a/src/gui/kernel/qguifunctions_wince.cpp +++ b/src/gui/kernel/qguifunctions_wince.cpp @@ -278,7 +278,14 @@ int qt_wince_get_version() bool qt_wince_is_windows_mobile_65() { - return ((qt_wince_get_version() == 52) && (qt_wince_get_build() > 2000)); + const DWORD dwFirstWM65BuildNumber = 21139; + OSVERSIONINFO osvi; + osvi.dwOSVersionInfoSize = sizeof(osvi); + if (!GetVersionEx(&osvi)) + return false; + return osvi.dwMajorVersion > 5 + || (osvi.dwMajorVersion == 5 && (osvi.dwMinorVersion > 2 || + (osvi.dwMinorVersion == 2 && osvi.dwBuildNumber >= dwFirstWM65BuildNumber))); } bool qt_wince_is_pocket_pc() { diff --git a/src/gui/kernel/qkeymapper_x11.cpp b/src/gui/kernel/qkeymapper_x11.cpp index 4e6c847..b32b626 100644 --- a/src/gui/kernel/qkeymapper_x11.cpp +++ b/src/gui/kernel/qkeymapper_x11.cpp @@ -1073,8 +1073,8 @@ static const unsigned int KeyTbl[] = { XF86XK_AudioNext, Qt::Key_MediaNext, XF86XK_AudioRecord, Qt::Key_MediaRecord, XF86XK_Mail, Qt::Key_LaunchMail, - XF86XK_MyComputer, Qt::Key_Launch0, - XF86XK_Calculator, Qt::Key_Calculator, + XF86XK_MyComputer, Qt::Key_Launch0, // ### Qt 5: remap properly + XF86XK_Calculator, Qt::Key_Launch1, XF86XK_Memo, Qt::Key_Memo, XF86XK_ToDoList, Qt::Key_ToDoList, XF86XK_Calendar, Qt::Key_Calendar, @@ -1172,7 +1172,7 @@ static const unsigned int KeyTbl[] = { XF86XK_Bluetooth, Qt::Key_Bluetooth, XF86XK_Suspend, Qt::Key_Suspend, XF86XK_Hibernate, Qt::Key_Hibernate, - XF86XK_Launch0, Qt::Key_Launch2, + XF86XK_Launch0, Qt::Key_Launch2, // ### Qt 5: remap properly XF86XK_Launch1, Qt::Key_Launch3, XF86XK_Launch2, Qt::Key_Launch4, XF86XK_Launch3, Qt::Key_Launch5, diff --git a/src/gui/kernel/qmime_win.cpp b/src/gui/kernel/qmime_win.cpp index e191d7b..39633bf 100644 --- a/src/gui/kernel/qmime_win.cpp +++ b/src/gui/kernel/qmime_win.cpp @@ -640,14 +640,18 @@ bool QWindowsMimeURI::convertFromMime(const FORMATETC &formatetc, const QMimeDat } else if (getCf(formatetc) == CF_INETURL_W) { QList<QUrl> urls = mimeData->urls(); QByteArray result; - QString url = urls.at(0).toString(); - result = QByteArray((const char *)url.utf16(), url.length() * sizeof(ushort)); + if (!urls.isEmpty()) { + QString url = urls.at(0).toString(); + result = QByteArray((const char *)url.utf16(), url.length() * sizeof(ushort)); + } result.append('\0'); result.append('\0'); return setData(result, pmedium); } else if (getCf(formatetc) == CF_INETURL) { QList<QUrl> urls = mimeData->urls(); - QByteArray result = urls.at(0).toString().toLocal8Bit(); + QByteArray result; + if (!urls.isEmpty()) + result = urls.at(0).toString().toLocal8Bit(); return setData(result, pmedium); } } diff --git a/src/gui/kernel/qsoftkeymanager_s60.cpp b/src/gui/kernel/qsoftkeymanager_s60.cpp index 8ac1e31..3a0304c 100644 --- a/src/gui/kernel/qsoftkeymanager_s60.cpp +++ b/src/gui/kernel/qsoftkeymanager_s60.cpp @@ -60,7 +60,7 @@ const int LSK_POSITION = 0; const int MSK_POSITION = 3; const int RSK_POSITION = 2; -QSoftKeyManagerPrivateS60::QSoftKeyManagerPrivateS60() +QSoftKeyManagerPrivateS60::QSoftKeyManagerPrivateS60() : cbaHasImage(4) // 4 since MSK position index is 3 { cachedCbaIconSize[0] = QSize(0,0); cachedCbaIconSize[1] = QSize(0,0); @@ -73,11 +73,21 @@ bool QSoftKeyManagerPrivateS60::skipCbaUpdate() // Lets not update softkeys if // 1. We don't have application panes, i.e. cba // 2. Our CBA is not active, i.e. S60 native dialog or menu with custom CBA is shown + // 2.1. Except if thre is no current CBA at all and WindowSoftkeysRespondHint is set + // Note: Cannot use IsDisplayingMenuOrDialog since CBA update can be triggered before // menu/dialog CBA is actually displayed i.e. it is being costructed. CEikButtonGroupContainer *appUiCba = S60->buttonGroupContainer(); + // CEikButtonGroupContainer::Current returns 0 if CBA is not visible at all CEikButtonGroupContainer *currentCba = CEikButtonGroupContainer::Current(); - if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) || appUiCba != currentCba) { + // Check if softkey need to be update even they are not visible + bool cbaRespondsWhenInvisible = false; + QWidget *window = QApplication::activeWindow(); + if (window && (window->windowFlags() & Qt::WindowSoftkeysRespondHint)) + cbaRespondsWhenInvisible = true; + + if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) + || (appUiCba != currentCba && !cbaRespondsWhenInvisible)) { return true; } return false; @@ -255,10 +265,14 @@ bool QSoftKeyManagerPrivateS60::setSoftkeyImage(CEikButtonGroupContainer *cba, myimage->SetPicture( nBitmap, nMask ); // nBitmap and nMask ownership transfered EikSoftkeyImage::SetImage(cba, *myimage, left); // Takes myimage ownership + cbaHasImage[position] = true; ret = true; } else { // Restore softkey to text based - EikSoftkeyImage::SetLabel(cba, left); + if (cbaHasImage[position]) { + EikSoftkeyImage::SetLabel(cba, left); + cbaHasImage[position] = false; + } } } return ret; @@ -274,7 +288,12 @@ bool QSoftKeyManagerPrivateS60::setSoftkey(CEikButtonGroupContainer &cba, TPtrC nativeText = qt_QString2TPtrC(text); int command = S60_COMMAND_START + position; setNativeSoftkey(cba, position, command, nativeText); - cba.DimCommand(command, !action->isEnabled()); + // QMainWindow "Options" action is set to invisible in order it does not appear in context menu + // and all invisible actions are by default disabled. + // However we never want to dim options softkey, even it is set to invisible + QVariant property = action->property(MENU_ACTION_PROPERTY); + const bool dimmed = (property.isValid() && property.toBool()) ? false : !action->isEnabled(); + cba.DimCommand(command, dimmed); realSoftKeyActions.insert(command, action); return true; } @@ -311,7 +330,10 @@ bool QSoftKeyManagerPrivateS60::setRightSoftkey(CEikButtonGroupContainer &cba) if (windowType != Qt::Dialog && windowType != Qt::Popup) { QString text(QSoftKeyManager::tr("Exit")); TPtrC nativeText = qt_QString2TPtrC(text); - EikSoftkeyImage::SetLabel(&cba, false); + if (cbaHasImage[RSK_POSITION]) { + EikSoftkeyImage::SetLabel(&cba, false); + cbaHasImage[RSK_POSITION] = false; + } setNativeSoftkey(cba, RSK_POSITION, EAknSoftkeyExit, nativeText); return true; } diff --git a/src/gui/kernel/qsoftkeymanager_s60_p.h b/src/gui/kernel/qsoftkeymanager_s60_p.h index 823a2db..a5e5016 100644 --- a/src/gui/kernel/qsoftkeymanager_s60_p.h +++ b/src/gui/kernel/qsoftkeymanager_s60_p.h @@ -53,6 +53,7 @@ // We mean it. // +#include "qbitarray.h" #include "private/qobject_p.h" #include "private/qsoftkeymanager_common_p.h" @@ -98,6 +99,7 @@ private: private: QHash<int, QAction*> realSoftKeyActions; QSize cachedCbaIconSize[4]; + QBitArray cbaHasImage; }; diff --git a/src/gui/kernel/qsound_mac.mm b/src/gui/kernel/qsound_mac.mm index 61e42ba..71fd663 100644 --- a/src/gui/kernel/qsound_mac.mm +++ b/src/gui/kernel/qsound_mac.mm @@ -174,6 +174,7 @@ NSSound *QAuServerMac::createNSSound(const QString &fileName, QSound *qSound) NSSound * const nsSound = [[NSSound alloc] initWithContentsOfFile: nsFileName byReference:YES]; QMacSoundDelegate * const delegate = [[QMacSoundDelegate alloc] initWithQSound:qSound:this]; [nsSound setDelegate:delegate]; + [nsFileName release]; return nsSound; } diff --git a/src/gui/kernel/qt_x11_p.h b/src/gui/kernel/qt_x11_p.h index 167557b..8af4df5 100644 --- a/src/gui/kernel/qt_x11_p.h +++ b/src/gui/kernel/qt_x11_p.h @@ -672,6 +672,9 @@ struct QX11Data XWacomCursor, XWacomEraser, + XTabletStylus, + XTabletEraser, + NPredefinedAtoms, _QT_SETTINGS_TIMESTAMP = NPredefinedAtoms, diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index ed9d5de..e5310ea 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -7583,6 +7583,23 @@ void QWidgetPrivate::hideChildren(bool spontaneous) QWidget *widget = qobject_cast<QWidget*>(childList.at(i)); if (!widget || widget->isWindow() || widget->testAttribute(Qt::WA_WState_Hidden)) continue; +#ifdef QT_MAC_USE_COCOA + // Before doing anything we need to make sure that we don't leave anything in a non-consistent state. + // When hiding a widget we need to make sure that no mouse_down events are active, because + // the mouse_up event will never be received by a hidden widget or one of its descendants. + // The solution is simple, before going through with this we check if there are any mouse_down events in + // progress, if so we check if it is related to this widget or not. If so, we just reset the mouse_down and + // then we continue. + // In X11 and Windows we send a mouse_release event, however we don't do that here because we were already + // ignoring that from before. I.e. Carbon did not send the mouse release event, so we will not send the + // mouse release event. There are two ways to interpret this: + // 1. If we don't send the mouse release event, the widget might get into an inconsistent state, i.e. it + // might be waiting for a release event that will never arrive. + // 2. If we send the mouse release event, then the widget might decide to trigger an action that is not + // supposed to trigger because it is not visible. + if(widget == qt_button_down) + qt_button_down = 0; +#endif // QT_MAC_USE_COCOA if (spontaneous) widget->setAttribute(Qt::WA_Mapped, false); else @@ -7975,13 +7992,16 @@ inline void setDisabledStyle(QWidget *w, bool setStyle) // set/reset WS_DISABLED style. if(w && w->isWindow() && w->isVisible() && w->isEnabled()) { LONG dwStyle = GetWindowLong(w->winId(), GWL_STYLE); + LONG newStyle = dwStyle; if (setStyle) - dwStyle |= WS_DISABLED; + newStyle |= WS_DISABLED; else - dwStyle &= ~WS_DISABLED; - SetWindowLong(w->winId(), GWL_STYLE, dwStyle); - // we might need to repaint in some situations (eg. menu) - w->repaint(); + newStyle &= ~WS_DISABLED; + if (newStyle != dwStyle) { + SetWindowLong(w->winId(), GWL_STYLE, newStyle); + // we might need to repaint in some situations (eg. menu) + w->repaint(); + } } } #endif diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 3622bac..4b45abd 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -152,6 +152,7 @@ static bool qt_mac_raise_process = true; static OSWindowRef qt_root_win = 0; QWidget *mac_mouse_grabber = 0; QWidget *mac_keyboard_grabber = 0; +extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp #ifndef QT_MAC_USE_COCOA #ifdef QT_NAMESPACE @@ -872,7 +873,6 @@ OSStatus QWidgetPrivate::qt_window_event(EventHandlerCallRef er, EventRef event, & ~Qt::WindowMaximized)); QApplication::sendSpontaneousEvent(widget, &e); } - extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp qt_button_down = 0; } else if(ekind == kEventWindowCollapsed) { if (!widget->isMinimized()) { @@ -900,7 +900,6 @@ OSStatus QWidgetPrivate::qt_window_event(EventHandlerCallRef er, EventRef event, //we send a hide to be like X11/Windows QEvent e(QEvent::Hide); QApplication::sendSpontaneousEvent(widget, &e); - extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp qt_button_down = 0; } else if(ekind == kEventWindowToolbarSwitchMode) { macSendToolbarChangeEvent(widget); @@ -1274,6 +1273,11 @@ OSStatus QWidgetPrivate::qt_widget_event(EventHandlerCallRef er, EventRef event, if (widget->isVisible() && widget->updatesEnabled()) { //process the actual paint event. if(widget->testAttribute(Qt::WA_WState_InPaintEvent)) qWarning("QWidget::repaint: Recursive repaint detected"); + if (widget->isWindow() && !widget->d_func()->isOpaque + && !widget->testAttribute(Qt::WA_MacBrushedMetal)) { + QRect qrgnRect = qrgn.boundingRect(); + CGContextClearRect(cg, CGRectMake(qrgnRect.x(), qrgnRect.y(), qrgnRect.width(), qrgnRect.height())); + } QPoint redirectionOffset(0, 0); QWidget *tl = widget->window(); @@ -1324,13 +1328,6 @@ OSStatus QWidgetPrivate::qt_widget_event(EventHandlerCallRef er, EventRef event, widget->d_func()->restoreRedirected(); } - if (widget->isWindow() && !widget->d_func()->isOpaque - && !widget->testAttribute(Qt::WA_MacBrushedMetal)) { - QRect qrgnRect = qrgn.boundingRect(); - CGContextClearRect(cg, CGRectMake(qrgnRect.x(), qrgnRect.y(), qrgnRect.width(), qrgnRect.height())); - } - - if(!HIObjectIsOfClass((HIObjectRef)hiview, kObjectQWidget)) CallNextEventHandler(er, event); @@ -1527,7 +1524,6 @@ OSStatus QWidgetPrivate::qt_widget_event(EventHandlerCallRef er, EventRef event, if (widget) { qt_event_request_window_change(widget); if (!HIViewIsVisible(HIViewRef(widget->winId()))) { - extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp if (widget == qt_button_down) qt_button_down = 0; } @@ -1536,7 +1532,6 @@ OSStatus QWidgetPrivate::qt_widget_event(EventHandlerCallRef er, EventRef event, break; } case kEventClassMouse: { bool send_to_app = false; - extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp if(qt_button_down) send_to_app = true; if(send_to_app) { @@ -3495,7 +3490,6 @@ void QWidgetPrivate::hide_sys() Q_Q(QWidget); if((q->windowType() == Qt::Desktop)) //you can't hide the desktop! return; - QMacCocoaAutoReleasePool pool; if(q->isWindow()) { #ifdef QT_MAC_USE_COCOA diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index ebd289c..7fb21d2 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -1042,7 +1042,13 @@ void QWidget::setWindowState(Qt::WindowStates newstate) Q_D(QWidget); Qt::WindowStates oldstate = windowState(); - if (oldstate == newstate) + + const TBool isFullscreen = newstate & Qt::WindowFullScreen; + const TBool cbaRequested = windowFlags() & Qt::WindowSoftkeysVisibleHint; + const TBool cbaVisible = CEikButtonGroupContainer::Current() ? true : false; + const TBool softkeyVisibilityChange = isFullscreen && (cbaRequested != cbaVisible); + + if (oldstate == newstate && !softkeyVisibilityChange) return; if (isWindow()) { @@ -1058,16 +1064,27 @@ void QWidget::setWindowState(Qt::WindowStates newstate) #ifdef Q_WS_S60 // Hide window decoration when switching to fullsccreen / minimized otherwise show decoration. - // The window decoration visibility has to be changed before doing actual window state - // change since in that order the availableGeometry will return directly the right size and + // The window decoration visibility has to be changed before doing actual window state + // change since in that order the availableGeometry will return directly the right size and // we will avoid unnecessarty redraws - CEikStatusPane* statusPane = S60->statusPane(); - CEikButtonGroupContainer* buttonGroup = S60->buttonGroupContainer(); - TBool visible = !(newstate & (Qt::WindowFullScreen | Qt::WindowMinimized)); + CEikStatusPane *statusPane = S60->statusPane(); + CEikButtonGroupContainer *buttonGroup = S60->buttonGroupContainer(); + TBool visible = !(newstate & (Qt::WindowFullScreen | Qt::WindowMinimized)); if (statusPane) statusPane->MakeVisible(visible); - if (buttonGroup) - buttonGroup->MakeVisible(visible); + if (buttonGroup) { + // Visibility + buttonGroup->MakeVisible(visible || (isFullscreen && cbaRequested)); + + // Responsiviness + CEikCba *cba = static_cast<CEikCba *>( buttonGroup->ButtonGroup() ); // downcast from MEikButtonGroup + TUint cbaFlags = cba->ButtonGroupFlags(); + if(windowFlags() & Qt::WindowSoftkeysRespondHint) + cbaFlags |= EAknCBAFlagRespondWhenInvisible; + else + cbaFlags &= ~EAknCBAFlagRespondWhenInvisible; + cba->SetButtonGroupFlags(cbaFlags); + } #endif // Q_WS_S60 createWinId(); @@ -1080,7 +1097,7 @@ void QWidget::setWindowState(Qt::WindowStates newstate) const QRect normalGeometry = (top->normalGeometry.width() < 0) ? geometry() : top->normalGeometry; if (newstate & Qt::WindowFullScreen) - setGeometry(qApp->desktop()->screenGeometry(this)); + setGeometry(qApp->desktop()->availableGeometry(this)); else if (newstate & Qt::WindowMaximized) setGeometry(qApp->desktop()->availableGeometry(this)); else @@ -1220,8 +1237,10 @@ void QWidget::releaseMouse() { if (!qt_nograb() && QWidgetPrivate::mouseGrabber == this) { Q_ASSERT(testAttribute(Qt::WA_WState_Created)); - WId id = effectiveWinId(); - id->SetPointerCapture(false); + if(!window()->isModal()) { + WId id = effectiveWinId(); + id->SetPointerCapture(false); + } QWidgetPrivate::mouseGrabber = 0; #ifndef QT_NO_CURSOR QApplication::restoreOverrideCursor(); diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp index 8cab387..2dcbfc3 100644 --- a/src/gui/kernel/qwidget_win.cpp +++ b/src/gui/kernel/qwidget_win.cpp @@ -2073,6 +2073,8 @@ void QWidgetPrivate::winSetupGestures() if (!q || !q->isVisible() || !nativeGesturePanEnabled) return; + if (!QApplicationPrivate::HasTouchSupport) + return; QApplicationPrivate *qAppPriv = QApplicationPrivate::instance(); if (!qAppPriv->SetGestureConfig) return; diff --git a/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h b/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h index c65fa50..146b067 100644 --- a/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h +++ b/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h @@ -54,6 +54,38 @@ // #include <QGestureRecognizer> +#include <objbase.h> + +class IInkRectangle; +class TabletHardwareCapabilities; +class TabletPropertyMetricUnit; +DECLARE_INTERFACE_(IInkTablet, IDispatch) +{ + STDMETHOD(get_Name)(THIS_ BSTR *Name) PURE; + STDMETHOD(get_PlugAndPlayId)(THIS_ BSTR *Id) PURE; + STDMETHOD(get_MaximumInputRectangle)(THIS_ IInkRectangle **Rectangle) PURE; + STDMETHOD(get_HardwareCapabilities)(THIS_ TabletHardwareCapabilities *Capabilities) PURE; + STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName) PURE; + STDMETHOD(GetPropertyMetrics)(THIS_ BSTR propertyName, long *Minimum, long *Maximum, TabletPropertyMetricUnit *Units, float *Resolution) PURE; +}; +enum TabletDeviceKind +{ + TDK_Mouse = 0, + TDK_Pen = 1, + TDK_Touch = 2 +}; +DECLARE_INTERFACE_(IInkTablet2, IDispatch) +{ + STDMETHOD(get_DeviceKind)(THIS_ TabletDeviceKind *Kind) PURE; +}; +DECLARE_INTERFACE_(IInkTablets, IDispatch) +{ + STDMETHOD(get_Count)(THIS_ long *Count) PURE; + STDMETHOD(get__NewEnum)(THIS_ IUnknown **_NewEnum) PURE; + STDMETHOD(get_DefaultTablet)(THIS_ IInkTablet **DefaultTablet) PURE; + STDMETHOD(Item)(THIS_ long Index, IInkTablet **Tablet) PURE; + STDMETHOD(IsPacketPropertySupported)(THIS_ BSTR packetPropertyName, VARIANT_BOOL *Supported) PURE; +}; QT_BEGIN_NAMESPACE diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index c73d9f4..8de9eaa 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -352,6 +352,10 @@ void QWidgetBackingStore::beginPaint(QRegion &toClean, QWidget *widget, QWindowS // Always flush repainted areas. dirtyOnScreen += toClean; +#ifdef Q_WS_QWS + toClean.translate(tlwOffset); +#endif + #ifdef QT_NO_PAINT_DEBUG windowSurface->beginPaint(toClean); #else @@ -766,7 +770,12 @@ void QWidgetBackingStore::paintWindowDecoration() if (decorationRegion.isEmpty()) return; - windowSurface->beginPaint(decorationRegion); + //### The QWS decorations do not always paint the pixels they promise to paint. + // This causes painting problems with QWSMemorySurface. Since none of the other + // window surfaces actually use the region, passing an empty region is a safe + // workaround. + + windowSurface->beginPaint(QRegion()); QPaintEngine *engine = windowSurface->paintDevice()->paintEngine(); Q_ASSERT(engine); diff --git a/src/gui/painting/qgraphicssystem_raster.cpp b/src/gui/painting/qgraphicssystem_raster.cpp index f90aea0..909508e 100644 --- a/src/gui/painting/qgraphicssystem_raster.cpp +++ b/src/gui/painting/qgraphicssystem_raster.cpp @@ -41,19 +41,32 @@ #include "qgraphicssystem_raster_p.h" +#ifdef Q_OS_SYMBIAN +#include "private/qpixmap_s60_p.h" +#include "private/qwindowsurface_s60_p.h" +#else #include "private/qpixmap_raster_p.h" #include "private/qwindowsurface_raster_p.h" +#endif QT_BEGIN_NAMESPACE QPixmapData *QRasterGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const { +#ifdef Q_OS_SYMBIAN + return new QS60PixmapData(type); +#else return new QRasterPixmapData(type); +#endif } QWindowSurface *QRasterGraphicsSystem::createWindowSurface(QWidget *widget) const { +#ifdef Q_OS_SYMBIAN + return new QS60WindowSurface(widget); +#else return new QRasterWindowSurface(widget); +#endif } QT_END_NAMESPACE diff --git a/src/gui/painting/qwindowsurface_qws.cpp b/src/gui/painting/qwindowsurface_qws.cpp index d3fc9de..a816ed2 100644 --- a/src/gui/painting/qwindowsurface_qws.cpp +++ b/src/gui/painting/qwindowsurface_qws.cpp @@ -80,7 +80,7 @@ static void qt_insertWindowSurface(int winId, QWSWindowSurface *surface) inline bool isWidgetOpaque(const QWidget *w) { - return w->d_func()->isOpaque; + return w->d_func()->isOpaque && !w->testAttribute(Qt::WA_TranslucentBackground); } static inline QScreen *getScreen(const QWidget *w) @@ -873,6 +873,21 @@ bool QWSMemorySurface::isValid() const return true; } +// ### copied from qwindowsurface_raster.cpp -- should be cross-platform +void QWSMemorySurface::beginPaint(const QRegion &rgn) +{ + if (!isWidgetOpaque(window())) { + QPainter p(&img); + p.setCompositionMode(QPainter::CompositionMode_Source); + const QVector<QRect> rects = rgn.rects(); + const QColor blank = Qt::transparent; + for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) { + p.fillRect(*it, blank); + } + } + QWSWindowSurface::beginPaint(rgn); +} + // from qwindowsurface.cpp extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset); diff --git a/src/gui/painting/qwindowsurface_qws_p.h b/src/gui/painting/qwindowsurface_qws_p.h index a8371c8..30900dc 100644 --- a/src/gui/painting/qwindowsurface_qws_p.h +++ b/src/gui/painting/qwindowsurface_qws_p.h @@ -176,6 +176,8 @@ public: QImage image() const { return img; } QPoint painterOffset() const; + void beginPaint(const QRegion &rgn); + bool lock(int timeout = -1); void unlock(); diff --git a/src/gui/styles/qgtkstyle_p.cpp b/src/gui/styles/qgtkstyle_p.cpp index 6916c02..3c6a1ef 100644 --- a/src/gui/styles/qgtkstyle_p.cpp +++ b/src/gui/styles/qgtkstyle_p.cpp @@ -92,8 +92,8 @@ Ptr_gtk_widget_set_default_direction QGtkStylePrivate::gtk_widget_set_default_di Ptr_gtk_widget_modify_color QGtkStylePrivate::gtk_widget_modify_fg = 0; Ptr_gtk_widget_modify_color QGtkStylePrivate::gtk_widget_modify_bg = 0; Ptr_gtk_arrow_new QGtkStylePrivate::gtk_arrow_new = 0; -Ptr_gtk_menu_item_new QGtkStylePrivate::gtk_menu_item_new = 0; -Ptr_gtk_check_menu_item_new QGtkStylePrivate::gtk_check_menu_item_new = 0; +Ptr_gtk_menu_item_new_with_label QGtkStylePrivate::gtk_menu_item_new_with_label = 0; +Ptr_gtk_check_menu_item_new_with_label QGtkStylePrivate::gtk_check_menu_item_new_with_label = 0; Ptr_gtk_menu_bar_new QGtkStylePrivate::gtk_menu_bar_new = 0; Ptr_gtk_menu_new QGtkStylePrivate::gtk_menu_new = 0; Ptr_gtk_button_new QGtkStylePrivate::gtk_button_new = 0; @@ -354,8 +354,8 @@ void QGtkStylePrivate::resolveGtk() const gtk_widget_modify_fg = (Ptr_gtk_widget_modify_color)libgtk.resolve("gtk_widget_modify_fg"); gtk_widget_modify_bg = (Ptr_gtk_widget_modify_color)libgtk.resolve("gtk_widget_modify_bg"); gtk_arrow_new = (Ptr_gtk_arrow_new)libgtk.resolve("gtk_arrow_new"); - gtk_menu_item_new = (Ptr_gtk_menu_item_new)libgtk.resolve("gtk_menu_item_new"); - gtk_check_menu_item_new = (Ptr_gtk_check_menu_item_new)libgtk.resolve("gtk_check_menu_item_new"); + gtk_menu_item_new_with_label = (Ptr_gtk_menu_item_new_with_label)libgtk.resolve("gtk_menu_item_new_with_label"); + gtk_check_menu_item_new_with_label = (Ptr_gtk_check_menu_item_new_with_label)libgtk.resolve("gtk_check_menu_item_new_with_label"); gtk_menu_bar_new = (Ptr_gtk_menu_bar_new)libgtk.resolve("gtk_menu_bar_new"); gtk_menu_new = (Ptr_gtk_menu_new)libgtk.resolve("gtk_menu_new"); gtk_toolbar_new = (Ptr_gtk_toolbar_new)libgtk.resolve("gtk_toolbar_new"); @@ -446,7 +446,7 @@ void QGtkStylePrivate::initGtkMenu() const GtkWidget *gtkMenuBar = QGtkStylePrivate::gtk_menu_bar_new(); setupGtkWidget(gtkMenuBar); - GtkWidget *gtkMenuBarItem = QGtkStylePrivate::gtk_menu_item_new(); + GtkWidget *gtkMenuBarItem = QGtkStylePrivate::gtk_menu_item_new_with_label("X"); gtk_menu_shell_append((GtkMenuShell*)(gtkMenuBar), gtkMenuBarItem); gtk_widget_realize(gtkMenuBarItem); @@ -455,14 +455,11 @@ void QGtkStylePrivate::initGtkMenu() const gtk_menu_item_set_submenu((GtkMenuItem*)(gtkMenuBarItem), gtkMenu); gtk_widget_realize(gtkMenu); - GtkWidget *gtkMenuItem = QGtkStylePrivate::gtk_menu_item_new(); - g_object_set(gtkMenuItem, "label", "X", NULL); - + GtkWidget *gtkMenuItem = QGtkStylePrivate::gtk_menu_item_new_with_label("X"); gtk_menu_shell_append((GtkMenuShell*)gtkMenu, gtkMenuItem); gtk_widget_realize(gtkMenuItem); - GtkWidget *gtkCheckMenuItem = QGtkStylePrivate::gtk_check_menu_item_new(); - g_object_set(gtkCheckMenuItem, "label", "X", NULL); + GtkWidget *gtkCheckMenuItem = QGtkStylePrivate::gtk_check_menu_item_new_with_label("X"); gtk_menu_shell_append((GtkMenuShell*)gtkMenu, gtkCheckMenuItem); gtk_widget_realize(gtkCheckMenuItem); @@ -540,7 +537,7 @@ void QGtkStylePrivate::initGtkWidgets() const GtkWidget *gtkButton = QGtkStylePrivate::gtk_button_new(); addWidget(gtkButton); g_signal_connect(gtkButton, "style-set", G_CALLBACK(gtkStyleSetCallback), 0); - addWidget(QGtkStylePrivate::gtk_tool_button_new(NULL, NULL)); + addWidget(QGtkStylePrivate::gtk_tool_button_new(NULL, "Qt")); addWidget(QGtkStylePrivate::gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE)); addWidget(QGtkStylePrivate::gtk_hbutton_box_new()); addWidget(QGtkStylePrivate::gtk_check_button_new()); diff --git a/src/gui/styles/qgtkstyle_p.h b/src/gui/styles/qgtkstyle_p.h index 6ee7904..5bb7550 100644 --- a/src/gui/styles/qgtkstyle_p.h +++ b/src/gui/styles/qgtkstyle_p.h @@ -139,9 +139,9 @@ typedef void (*Ptr_gtk_widget_realize) (GtkWidget *); typedef void (*Ptr_gtk_widget_set_default_direction) (GtkTextDirection); typedef void (*Ptr_gtk_widget_modify_color)(GtkWidget *widget, GtkStateType state, const GdkColor *color); typedef GtkWidget* (*Ptr_gtk_arrow_new)(GtkArrowType, GtkShadowType); -typedef GtkWidget* (*Ptr_gtk_menu_item_new)(void); +typedef GtkWidget* (*Ptr_gtk_menu_item_new_with_label)(const gchar *); typedef GtkWidget* (*Ptr_gtk_separator_menu_item_new)(void); -typedef GtkWidget* (*Ptr_gtk_check_menu_item_new)(void); +typedef GtkWidget* (*Ptr_gtk_check_menu_item_new_with_label)(const gchar *); typedef GtkWidget* (*Ptr_gtk_menu_bar_new)(void); typedef GtkWidget* (*Ptr_gtk_menu_new)(void); typedef GtkWidget* (*Ptr_gtk_combo_box_entry_new)(void); @@ -357,9 +357,9 @@ public: static Ptr_gtk_widget_set_default_direction gtk_widget_set_default_direction; static Ptr_gtk_widget_modify_color gtk_widget_modify_fg; static Ptr_gtk_widget_modify_color gtk_widget_modify_bg; - static Ptr_gtk_menu_item_new gtk_menu_item_new; + static Ptr_gtk_menu_item_new_with_label gtk_menu_item_new_with_label; static Ptr_gtk_arrow_new gtk_arrow_new; - static Ptr_gtk_check_menu_item_new gtk_check_menu_item_new; + static Ptr_gtk_check_menu_item_new_with_label gtk_check_menu_item_new_with_label; static Ptr_gtk_menu_bar_new gtk_menu_bar_new; static Ptr_gtk_menu_new gtk_menu_new; static Ptr_gtk_expander_new gtk_expander_new; diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 565cc2c..bf5a62e 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -759,13 +759,29 @@ void QS60StylePrivate::setThemePaletteHash(QPalette *palette) const QApplication::setPalette(widgetPalette, "QMenuBar"); widgetPalette = *palette; + widgetPalette.setColor(QPalette::Text, + s60Color(QS60StyleEnums::CL_QsnTextColors, 22, 0)); + widgetPalette.setColor(QPalette::HighlightedText, + s60Color(QS60StyleEnums::CL_QsnTextColors, 11, 0)); + QApplication::setPalette(widgetPalette, "QMenu"); + widgetPalette = *palette; + widgetPalette.setColor(QPalette::WindowText, s60Color(QS60StyleEnums::CL_QsnTextColors, 4, 0)); + widgetPalette.setColor(QPalette::HighlightedText, + s60Color(QS60StyleEnums::CL_QsnTextColors, 3, 0)); QApplication::setPalette(widgetPalette, "QTabBar"); widgetPalette = *palette; + widgetPalette.setColor(QPalette::HighlightedText, + s60Color(QS60StyleEnums::CL_QsnTextColors, 10, 0)); + QApplication::setPalette(widgetPalette, "QListView"); + widgetPalette = *palette; + widgetPalette.setColor(QPalette::Text, s60Color(QS60StyleEnums::CL_QsnTextColors, 22, 0)); + widgetPalette.setColor(QPalette::HighlightedText, + s60Color(QS60StyleEnums::CL_QsnTextColors, 11, 0)); QApplication::setPalette(widgetPalette, "QTableView"); widgetPalette = *palette; @@ -789,6 +805,8 @@ void QS60StylePrivate::setThemePaletteHash(QPalette *palette) const widgetPalette = *palette; widgetPalette.setColor(QPalette::WindowText, s60Color(QS60StyleEnums::CL_QsnTextColors, 7, 0)); + widgetPalette.setColor(QPalette::HighlightedText, + s60Color(QS60StyleEnums::CL_QsnTextColors, 11, 0)); QApplication::setPalette(widgetPalette, "QRadioButton"); QApplication::setPalette(widgetPalette, "QCheckBox"); widgetPalette = *palette; @@ -1241,6 +1259,8 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, case CE_RadioButton: if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(option)) { bool isRadio = (element == CE_RadioButton); + QStyleOptionButton subopt = *btn; + // Highlight needs to be drawn first, as it goes "underneath" the text and indicator. if (btn->state & State_HasFocus) { QStyleOptionFocusRect fropt; @@ -1248,8 +1268,10 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, fropt.rect = subElementRect(isRadio ? SE_RadioButtonFocusRect : SE_CheckBoxFocusRect, btn, widget); drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); + + subopt.palette.setColor(QPalette::Active, QPalette::WindowText, + subopt.palette.highlightedText().color()); } - QStyleOptionButton subopt = *btn; subopt.rect = subElementRect(isRadio ? SE_RadioButtonIndicator : SE_CheckBoxIndicator, btn, widget); @@ -1408,7 +1430,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, } else { QCommonStyle::drawPrimitive(PE_PanelItemViewItem, &voptAdj, painter, widget);} // draw the focus rect - if (isSelected | hasFocus) { + if (isSelected || hasFocus ) { QRect highlightRect = option->rect.adjusted(1,1,-1,-1); QAbstractItemView::SelectionBehavior selectionBehavior = itemView ? itemView->selectionBehavior() : QAbstractItemView::SelectItems; @@ -1480,15 +1502,10 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, // draw the text if (!voptAdj.text.isEmpty()) { - if (isSelected) { - if (qobject_cast<const QTableView *>(widget)) - voptAdj.palette.setColor( - QPalette::Text, QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnTextColors, 11, 0)); - else - voptAdj.palette.setColor( - QPalette::Text, QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnTextColors, 10, 0)); - } - painter->setPen(voptAdj.palette.text().color()); + if (isSelected || hasFocus ) + painter->setPen(voptAdj.palette.highlightedText().color()); + else + painter->setPen(voptAdj.palette.text().color()); d->viewItemDrawText(painter, &voptAdj, textRect); } painter->restore(); @@ -1590,7 +1607,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, const bool selected = optionTab.state & State_Selected; if (selected) optionTab.palette.setColor(QPalette::Active, QPalette::WindowText, - QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnTextColors, 3, option)); + optionTab.palette.highlightedText().color()); const bool verticalTabs = optionTab.shape == QTabBar::RoundedEast || optionTab.shape == QTabBar::RoundedWest @@ -1723,7 +1740,8 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, if (!styleHint(SH_UnderlineShortcut, menuItem, widget)) text_flags |= Qt::TextHideMnemonic; - if ((option->state & State_Selected) && (option->state & State_Enabled)) + const bool selected = (option->state & State_Selected) && (option->state & State_Enabled); + if (selected) QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_ListHighlight, painter, option->rect, flags); QRect iconRect = subElementRect(SE_ItemViewItemDecoration, &optionMenuItem, widget); @@ -1793,6 +1811,10 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, painter->save(); painter->setOpacity(0.5); } + if (selected) + optionMenuItem.palette.setColor( + QPalette::Active, QPalette::Text, optionMenuItem.palette.highlightedText().color()); + QCommonStyle::drawItemText(painter, textRect, text_flags, optionMenuItem.palette, enabled, optionMenuItem.text, QPalette::Text); diff --git a/src/gui/styles/qwindowsmobilestyle.cpp b/src/gui/styles/qwindowsmobilestyle.cpp index a264b1b..6e77409 100644 --- a/src/gui/styles/qwindowsmobilestyle.cpp +++ b/src/gui/styles/qwindowsmobilestyle.cpp @@ -4040,25 +4040,26 @@ enum QSliderDirection { SliderUp, SliderDown, SliderLeft, SliderRight }; void QWindowsMobileStylePrivate::tintImagesButton(QColor color) { - if (currentTintButton == color) + if (currentTintButton == color) return; - - imageTabEnd = QImage(tabend_xpm); - imageTabSelectedEnd = QImage(tabselectedend_xpm); - imageTabSelectedBegin = QImage(tabselectedbeginn_xpm); - imageTabMiddle = QImage(tabmiddle_xpm); - tintImage(&imageTabEnd, color, 0.0); - tintImage(&imageTabSelectedEnd, color, 0.0); - tintImage(&imageTabSelectedBegin, color, 0.0); - tintImage(&imageTabMiddle, color, 0.0); - - if (!doubleControls) { - int height = imageTabMiddle.height() / 2 + 1; - imageTabEnd = imageTabEnd.scaledToHeight(height); - imageTabMiddle = imageTabMiddle.scaledToHeight(height); - imageTabSelectedEnd = imageTabSelectedEnd.scaledToHeight(height); - imageTabSelectedBegin = imageTabSelectedBegin.scaledToHeight(height); - } + currentTintButton = color; + + imageTabEnd = QImage(tabend_xpm); + imageTabSelectedEnd = QImage(tabselectedend_xpm); + imageTabSelectedBegin = QImage(tabselectedbeginn_xpm); + imageTabMiddle = QImage(tabmiddle_xpm); + tintImage(&imageTabEnd, color, 0.0); + tintImage(&imageTabSelectedEnd, color, 0.0); + tintImage(&imageTabSelectedBegin, color, 0.0); + tintImage(&imageTabMiddle, color, 0.0); + + if (!doubleControls) { + int height = imageTabMiddle.height() / 2 + 1; + imageTabEnd = imageTabEnd.scaledToHeight(height); + imageTabMiddle = imageTabMiddle.scaledToHeight(height); + imageTabSelectedEnd = imageTabSelectedEnd.scaledToHeight(height); + imageTabSelectedBegin = imageTabSelectedBegin.scaledToHeight(height); + } } void QWindowsMobileStylePrivate::tintImagesHigh(QColor color) diff --git a/src/gui/util/qsystemtrayicon_mac.mm b/src/gui/util/qsystemtrayicon_mac.mm index 348657e..d943c8c 100644 --- a/src/gui/util/qsystemtrayicon_mac.mm +++ b/src/gui/util/qsystemtrayicon_mac.mm @@ -529,7 +529,11 @@ private: [item setToolTip:(NSString*)QCFString::toCFStringRef(action->toolTip())]; const QIcon icon = action->icon(); if(!icon.isNull()) { +#ifndef QT_MAC_USE_COCOA + const short scale = GetMBarHeight(); +#else const short scale = [[NSApp mainMenu] menuBarHeight]; +#endif NSImage *nsimage = static_cast<NSImage *>(qt_mac_create_nsimage(icon.pixmap(QSize(scale, scale)))); [item setImage: nsimage]; [nsimage release]; diff --git a/src/gui/widgets/qmainwindow.cpp b/src/gui/widgets/qmainwindow.cpp index bdab6fb..bf926f8 100644 --- a/src/gui/widgets/qmainwindow.cpp +++ b/src/gui/widgets/qmainwindow.cpp @@ -119,6 +119,7 @@ void QMainWindowPrivate::init() q->setAttribute(Qt::WA_Hover); #ifdef QT_SOFTKEYS_ENABLED menuBarAction = QSoftKeyManager::createAction(QSoftKeyManager::MenuSoftKey, q); + menuBarAction->setVisible(false); #endif } diff --git a/src/gui/widgets/qmainwindowlayout_mac.mm b/src/gui/widgets/qmainwindowlayout_mac.mm index d92168a..9527057 100644 --- a/src/gui/widgets/qmainwindowlayout_mac.mm +++ b/src/gui/widgets/qmainwindowlayout_mac.mm @@ -463,6 +463,8 @@ void QMainWindowLayout::removeFromMacToolbar(QToolBar *toolbar) NSToolbarItem *item = static_cast<NSToolbarItem *>(it.key()); [[qt_mac_window_for(layoutState.mainWindow->window()) toolbar] removeItemAtIndex:toolbarItemsCopy.indexOf(item)]; + unifiedToolbarHash.remove(item); + qtoolbarsInUnifiedToolbarList.removeAll(toolbar); #endif break; } diff --git a/src/gui/widgets/qmenu_symbian.cpp b/src/gui/widgets/qmenu_symbian.cpp index eae97a6..e46688c 100644 --- a/src/gui/widgets/qmenu_symbian.cpp +++ b/src/gui/widgets/qmenu_symbian.cpp @@ -256,6 +256,14 @@ void qt_symbian_show_submenu( CEikMenuPane* menuPane, int id) { SymbianMenuItem* menu = qt_symbian_find_menu(id, symbianMenus); if (menu) { + // Normally first AddMenuItemL call for menuPane will create the item array. + // However if we don't have any items, we still need the item array. Otherwise + // menupane will crash. That's why we create item array here manually, and + // AddMenuItemL will then use the existing array. + CEikMenuPane::CItemArray* itemArray = q_check_ptr(new CEikMenuPane::CItemArray); + menuPane->SetItemArray(itemArray); + menuPane->SetItemArrayOwnedExternally(EFalse); + for (int i = 0; i < menu->children.count(); ++i) QT_TRAP_THROWING(menuPane->AddMenuItemL(menu->children.at(i)->menuItemData)); } diff --git a/src/multimedia/audio/qaudioinput_mac_p.cpp b/src/multimedia/audio/qaudioinput_mac_p.cpp index 7251513..bd2de52 100644 --- a/src/multimedia/audio/qaudioinput_mac_p.cpp +++ b/src/multimedia/audio/qaudioinput_mac_p.cpp @@ -64,7 +64,7 @@ QT_BEGIN_NAMESPACE -namespace +namespace QtMultimediaInternal { static const int default_buffer_size = 4 * 1024; @@ -169,8 +169,10 @@ public: void reset() { - for (UInt32 i = 0; i < bfs->mNumberBuffers; ++i) + for (UInt32 i = 0; i < bfs->mNumberBuffers; ++i) { bfs->mBuffers[i].mDataByteSize = dataSize; + bfs->mBuffers[i].mData = 0; + } } private: @@ -523,7 +525,7 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray& device, QAudioFormat co startTime = 0; totalFrames = 0; audioBuffer = 0; - internalBufferSize = default_buffer_size; + internalBufferSize = QtMultimediaInternal::default_buffer_size; clockFrequency = AudioGetHostClockFrequency() / 1000; errorCode = QAudio::NoError; stateCode = QAudio::StoppedState; @@ -668,13 +670,13 @@ bool QAudioInputPrivate::open() else internalBufferSize -= internalBufferSize % streamFormat.mBytesPerFrame; - audioBuffer = new QAudioInputBuffer(internalBufferSize, + audioBuffer = new QtMultimediaInternal::QAudioInputBuffer(internalBufferSize, periodSizeBytes, deviceFormat, streamFormat, this); - audioIO = new MacInputDevice(audioBuffer, this); + audioIO = new QtMultimediaInternal::MacInputDevice(audioBuffer, this); // Init if (AudioUnitInitialize(audioUnit) != noErr) { diff --git a/src/multimedia/audio/qaudioinput_mac_p.h b/src/multimedia/audio/qaudioinput_mac_p.h index e1b8e4a..42f90e2 100644 --- a/src/multimedia/audio/qaudioinput_mac_p.h +++ b/src/multimedia/audio/qaudioinput_mac_p.h @@ -75,7 +75,7 @@ QT_BEGIN_NAMESPACE class QTimer; class QIODevice; -namespace +namespace QtMultimediaInternal { class QAudioInputBuffer; } @@ -97,7 +97,7 @@ public: UInt64 startTime; QAudio::Error errorCode; QAudio::State stateCode; - QAudioInputBuffer* audioBuffer; + QtMultimediaInternal::QAudioInputBuffer* audioBuffer; QMutex mutex; QWaitCondition threadFinished; QAtomicInt audioThreadState; diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/audio/qaudiooutput_alsa_p.cpp index b127103..e49c75a 100644 --- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp +++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp @@ -369,10 +369,52 @@ bool QAudioOutputPrivate::open() } } if ( !fatal ) { + unsigned int maxBufferTime = 0; + unsigned int minBufferTime = 0; + unsigned int maxPeriodTime = 0; + unsigned int minPeriodTime = 0; + + err = snd_pcm_hw_params_get_buffer_time_max(hwparams, &maxBufferTime, &dir); + if ( err >= 0) + err = snd_pcm_hw_params_get_buffer_time_min(hwparams, &minBufferTime, &dir); + if ( err >= 0) + err = snd_pcm_hw_params_get_period_time_max(hwparams, &maxPeriodTime, &dir); + if ( err >= 0) + err = snd_pcm_hw_params_get_period_time_min(hwparams, &minPeriodTime, &dir); + + if ( err < 0 ) { + fatal = true; + errMessage = QString::fromLatin1("QAudioOutput: buffer/period min and max: err = %1").arg(err); + } else { + if (maxBufferTime < buffer_time || buffer_time < minBufferTime || maxPeriodTime < period_time || minPeriodTime > period_time) { +#ifdef DEBUG_AUDIO + qDebug()<<"defaults out of range"; + qDebug()<<"pmin="<<minPeriodTime<<", pmax="<<maxPeriodTime<<", bmin="<<minBufferTime<<", bmax="<<maxBufferTime; +#endif + period_time = minPeriodTime; + if (period_time*4 <= maxBufferTime) { + // Use 4 periods if possible + buffer_time = period_time*4; + chunks = 4; + } else if (period_time*2 <= maxBufferTime) { + // Use 2 periods if possible + buffer_time = period_time*2; + chunks = 2; + } else { + qWarning()<<"QAudioOutput: alsa only supports single period!"; + fatal = true; + } +#ifdef DEBUG_AUDIO + qDebug()<<"used: buffer_time="<<buffer_time<<", period_time="<<period_time; +#endif + } + } + } + if ( !fatal ) { err = snd_pcm_hw_params_set_buffer_time_near(handle, hwparams, &buffer_time, &dir); if ( err < 0 ) { fatal = true; - errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_buffer_time_near: err = %1").arg(err); + errMessage = QString::fromLatin1("QAudioOutput: snd_pcm_hw_params_set_buffer_time_near: err = %1").arg(err); } } if ( !fatal ) { diff --git a/src/multimedia/audio/qaudiooutput_mac_p.cpp b/src/multimedia/audio/qaudiooutput_mac_p.cpp index 518f78f..6f32257 100644 --- a/src/multimedia/audio/qaudiooutput_mac_p.cpp +++ b/src/multimedia/audio/qaudiooutput_mac_p.cpp @@ -70,7 +70,7 @@ QT_BEGIN_NAMESPACE -namespace +namespace QtMultimediaInternal { static const int default_buffer_size = 8 * 1024; @@ -237,7 +237,7 @@ class MacOutputDevice : public QIODevice Q_OBJECT public: - MacOutputDevice(QAudioOutputBuffer* audioBuffer, QObject* parent): + MacOutputDevice(QtMultimediaInternal::QAudioOutputBuffer* audioBuffer, QObject* parent): QIODevice(parent), m_audioBuffer(audioBuffer) { @@ -263,7 +263,7 @@ public: } private: - QAudioOutputBuffer* m_audioBuffer; + QtMultimediaInternal::QAudioOutputBuffer* m_audioBuffer; }; @@ -285,7 +285,7 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray& device, const QAudioF startTime = 0; totalFrames = 0; audioBuffer = 0; - internalBufferSize = default_buffer_size; + internalBufferSize = QtMultimediaInternal::default_buffer_size; clockFrequency = AudioGetHostClockFrequency() / 1000; errorCode = QAudio::NoError; stateCode = QAudio::StoppedState; @@ -399,7 +399,7 @@ bool QAudioOutputPrivate::open() else internalBufferSize -= internalBufferSize % streamFormat.mBytesPerFrame; - audioBuffer = new QAudioOutputBuffer(internalBufferSize, periodSizeBytes, audioFormat); + audioBuffer = new QtMultimediaInternal::QAudioOutputBuffer(internalBufferSize, periodSizeBytes, audioFormat); connect(audioBuffer, SIGNAL(readyRead()), SLOT(inputReady())); // Pull audioIO = new MacOutputDevice(audioBuffer, this); diff --git a/src/multimedia/audio/qaudiooutput_mac_p.h b/src/multimedia/audio/qaudiooutput_mac_p.h index 1aacc67..752905c 100644 --- a/src/multimedia/audio/qaudiooutput_mac_p.h +++ b/src/multimedia/audio/qaudiooutput_mac_p.h @@ -74,7 +74,7 @@ QT_BEGIN_NAMESPACE class QIODevice; -namespace +namespace QtMultimediaInternal { class QAudioOutputBuffer; } @@ -96,7 +96,7 @@ public: UInt64 startTime; AudioStreamBasicDescription deviceFormat; AudioStreamBasicDescription streamFormat; - QAudioOutputBuffer* audioBuffer; + QtMultimediaInternal::QAudioOutputBuffer* audioBuffer; QAtomicInt audioThreadState; QWaitCondition threadFinished; QMutex mutex; diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index e92b2f3..806452c 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -681,7 +681,11 @@ void QHttpNetworkConnectionChannel::requeueCurrentlyPipelinedRequests() connection->d_func()->requeueRequest(alreadyPipelinedRequests.at(i)); alreadyPipelinedRequests.clear(); - QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); + // only run when the QHttpNetworkConnection is not currently being destructed, e.g. + // this function is called from _q_disconnected which is called because + // of ~QHttpNetworkConnectionPrivate + if (qobject_cast<QHttpNetworkConnection*>(connection)) + QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection); } void QHttpNetworkConnectionChannel::eatWhitespace() diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index 93f6d13..4800e9d 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -112,6 +112,13 @@ Q_GLOBAL_STATIC(QHostInfoLookupManager, theHostInfoLookupManager) To retrieve the name of the local host, use the static QHostInfo::localHostName() function. + \note Since Qt 4.6.1 QHostInfo is using multiple threads for DNS lookup + instead of one dedicated DNS thread. This improves performance, + but also changes the order of signal emissions when using lookupHost() + compared to previous versions of Qt. + \note Since Qt 4.6.3 QHostInfo is using a small internal 60 second DNS cache + for performance improvements. + \sa QAbstractSocket, {http://www.rfc-editor.org/rfc/rfc3492.txt}{RFC 3492} */ @@ -181,9 +188,26 @@ int QHostInfo::lookupHost(const QString &name, QObject *receiver, receiver, member, Qt::QueuedConnection); result.data()->emitResultsReady(hostInfo); #else - QHostInfoRunnable* runnable = new QHostInfoRunnable(name, id); - QObject::connect(&runnable->resultEmitter, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); - theHostInfoLookupManager()->scheduleLookup(runnable); + QHostInfoLookupManager *manager = theHostInfoLookupManager(); + if (manager) { + // the application is still alive + if (manager->cache.isEnabled()) { + // check cache first + bool valid = false; + QHostInfo info = manager->cache.get(name, &valid); + if (valid) { + info.setLookupId(id); + QHostInfoResult result; + QObject::connect(&result, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); + result.emitResultsReady(info); + return id; + } + } + // cache is not enabled or it was not in the cache, do normal lookup + QHostInfoRunnable* runnable = new QHostInfoRunnable(name, id); + QObject::connect(&runnable->resultEmitter, SIGNAL(resultsReady(QHostInfo)), receiver, member, Qt::QueuedConnection); + manager->scheduleLookup(runnable); + } #endif return id; @@ -418,14 +442,24 @@ void QHostInfoRunnable::run() return; } - // check cache - // FIXME - - // if not in cache: OS lookup - QHostInfo hostInfo = QHostInfoAgent::fromName(toBeLookedUp); - - // save to cache - // FIXME + QHostInfo hostInfo; + + // QHostInfo::lookupHost already checks the cache. However we need to check + // it here too because it might have been cache saved by another QHostInfoRunnable + // in the meanwhile while this QHostInfoRunnable was scheduled but not running + if (manager->cache.isEnabled()) { + // check the cache first + bool valid = false; + hostInfo = manager->cache.get(toBeLookedUp, &valid); + if (!valid) { + // not in cache, we need to do the lookup and store the result in the cache + hostInfo = QHostInfoAgent::fromName(toBeLookedUp); + manager->cache.put(toBeLookedUp, hostInfo); + } + } else { + // cache is not enabled, just do the lookup and continue + hostInfo = QHostInfoAgent::fromName(toBeLookedUp); + } // check aborted again if (manager->wasAborted(id)) { @@ -451,6 +485,11 @@ QHostInfoLookupManager::QHostInfoLookupManager() : mutex(QMutex::Recursive), was QHostInfoLookupManager::~QHostInfoLookupManager() { wasDeleted = true; + + // don't qDeleteAll currentLookups, the QThreadPool has ownership + qDeleteAll(postponedLookups); + qDeleteAll(scheduledLookups); + qDeleteAll(finishedLookups); } void QHostInfoLookupManager::work() @@ -570,6 +609,106 @@ void QHostInfoLookupManager::lookupFinished(QHostInfoRunnable *r) work(); } +// This function returns immediatly when we had a result in the cache, else it will later emit a signal +QHostInfo qt_qhostinfo_lookup(const QString &name, QObject *receiver, const char *member, bool *valid, int *id) +{ + *valid = false; + *id = -1; + + // check cache + QHostInfoLookupManager* manager = theHostInfoLookupManager(); + if (manager && manager->cache.isEnabled()) { + QHostInfo info = manager->cache.get(name, valid); + if (*valid) { + return info; + } + } + + // was not in cache, trigger lookup + *id = QHostInfo::lookupHost(name, receiver, member); + + // return empty response, valid==false + return QHostInfo(); +} + +void qt_qhostinfo_clear_cache() +{ + QHostInfoLookupManager* manager = theHostInfoLookupManager(); + if (manager) { + manager->cache.clear(); + } +} + +void Q_NETWORK_EXPORT qt_qhostinfo_enable_cache(bool e) +{ + QHostInfoLookupManager* manager = theHostInfoLookupManager(); + if (manager) { + manager->cache.setEnabled(e); + } +} + +// cache for 60 seconds +// cache 64 items +QHostInfoCache::QHostInfoCache() : max_age(60), enabled(true), cache(64) +{ +#ifdef QT_QHOSTINFO_CACHE_DISABLED_BY_DEFAULT + enabled = false; +#endif +} + +bool QHostInfoCache::isEnabled() +{ + return enabled; +} + +// this function is currently only used for the auto tests +// and not usable by public API +void QHostInfoCache::setEnabled(bool e) +{ + enabled = e; +} + + +QHostInfo QHostInfoCache::get(const QString &name, bool *valid) +{ + QMutexLocker locker(&this->mutex); + + *valid = false; + if (cache.contains(name)) { + QHostInfoCacheElement *element = cache.object(name); + if (element->age.elapsed() < max_age*1000) + *valid = true; + return element->info; + + // FIXME idea: + // if too old but not expired, trigger a new lookup + // to freshen our cache + } + + return QHostInfo(); +} + +void QHostInfoCache::put(const QString &name, const QHostInfo &info) +{ + // if the lookup failed, don't cache + if (info.error() != QHostInfo::NoError) + return; + + QHostInfoCacheElement* element = new QHostInfoCacheElement(); + element->info = info; + element->age = QTime(); + element->age.start(); + + QMutexLocker locker(&this->mutex); + cache.insert(name, element); // cache will take ownership +} + +void QHostInfoCache::clear() +{ + QMutexLocker locker(&this->mutex); + cache.clear(); +} + #endif // QT_NO_THREAD QT_END_NAMESPACE diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h index d6aa287..2b26b07 100644 --- a/src/network/kernel/qhostinfo_p.h +++ b/src/network/kernel/qhostinfo_p.h @@ -68,6 +68,8 @@ #include "QtCore/qrunnable.h" #include "QtCore/qlist.h" #include "QtCore/qqueue.h" +#include <QTime> +#include <QCache> #endif QT_BEGIN_NAMESPACE @@ -111,6 +113,34 @@ public: }; #ifndef QT_NO_THREAD +// These functions are outside of the QHostInfo class and strictly internal. +// Do NOT use them outside of QAbstractSocket. +QHostInfo Q_NETWORK_EXPORT qt_qhostinfo_lookup(const QString &name, QObject *receiver, const char *member, bool *valid, int *id); +void Q_NETWORK_EXPORT qt_qhostinfo_clear_cache(); +void Q_AUTOTEST_EXPORT qt_qhostinfo_enable_cache(bool e); + +class QHostInfoCache +{ +public: + QHostInfoCache(); + const int max_age; // seconds + + QHostInfo get(const QString &name, bool *valid); + void put(const QString &name, const QHostInfo &info); + void clear(); + + bool isEnabled(); + void setEnabled(bool e); +private: + bool enabled; + struct QHostInfoCacheElement { + QHostInfo info; + QTime age; + }; + QCache<QString,QHostInfoCacheElement> cache; + QMutex mutex; +}; + // the following classes are used for the (normal) case: We use multiple threads to lookup DNS class QHostInfoRunnable : public QRunnable @@ -141,6 +171,7 @@ public: void lookupFinished(QHostInfoRunnable *r); bool wasAborted(int id); + QHostInfoCache cache; protected: QList<QHostInfoRunnable*> currentLookups; // in progress QList<QHostInfoRunnable*> postponedLookups; // postponed because in progress for same host @@ -154,6 +185,7 @@ protected: bool wasDeleted; }; + #endif QT_END_NAMESPACE diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 275c436..95721ee 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -172,6 +172,10 @@ This signal is emitted after connectToHost() has been called and the host lookup has succeeded. + \note Since Qt 4.6.3 QAbstractSocket may emit hostFound() + directly from the connectToHost() call since a DNS result could have been + cached. + \sa connected() */ @@ -181,6 +185,10 @@ This signal is emitted after connectToHost() has been called and a connection has been successfully established. + \note On some operating systems the connected() signal may + be directly emitted from the connectToHost() call for connections + to the localhost. + \sa connectToHost(), disconnected() */ @@ -354,6 +362,8 @@ #include "qabstractsocket.h" #include "qabstractsocket_p.h" +#include "private/qhostinfo_p.h" + #include <qabstracteventdispatcher.h> #include <qdatetime.h> #include <qhostaddress.h> @@ -1369,8 +1379,20 @@ void QAbstractSocket::connectToHostImplementation(const QString &hostName, quint return; #endif } else { - if (d->threadData->eventDispatcher) - d->hostLookupId = QHostInfo::lookupHost(hostName, this, SLOT(_q_startConnecting(QHostInfo))); + if (d->threadData->eventDispatcher) { + // this internal API for QHostInfo either immediatly gives us the desired + // QHostInfo from cache or later calls the _q_startConnecting slot. + bool immediateResultValid = false; + QHostInfo hostInfo = qt_qhostinfo_lookup(hostName, + this, + SLOT(_q_startConnecting(QHostInfo)), + &immediateResultValid, + &d->hostLookupId); + if (immediateResultValid) { + d->hostLookupId = -1; + d->_q_startConnecting(hostInfo); + } + } } #if defined(QABSTRACTSOCKET_DEBUG) diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index 25ad5d7..8eb72b0 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1867,6 +1867,7 @@ bool QGL2PaintEngineEx::end() delete d->shaderManager; d->shaderManager = 0; + d->currentBrush = QBrush(); #ifdef QT_OPENGL_CACHE_AS_VBOS if (!d->unusedVBOSToClean.isEmpty()) { diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index c142715..ed34f79 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -64,7 +64,7 @@ #include "qcache.h" #include "qglpaintdevice_p.h" -#ifdef QT_OPENGL_ES +#if defined(QT_OPENGL_ES) || defined(QT_OPENGL_ES_2) #include <QtGui/private/qegl_p.h> #endif diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index 47ce11c..4df894a 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -130,9 +130,8 @@ public: void draw(VGPath path, const QPen& pen, const QBrush& brush, VGint rule = VG_EVEN_ODD); void stroke(VGPath path, const QPen& pen); void fill(VGPath path, const QBrush& brush, VGint rule = VG_EVEN_ODD); - inline void releasePath(VGPath path); - VGPath vectorPathToVGPath(const QVectorPath& path, bool forceNewPath = false); - VGPath painterPathToVGPath(const QPainterPath& path, bool forceNewPath = false); + VGPath vectorPathToVGPath(const QVectorPath& path); + VGPath painterPathToVGPath(const QPainterPath& path); VGPath roundedRectPath(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode); VGPaintType setBrush (VGPaint paint, const QBrush& brush, VGMatrixMode mode, @@ -178,8 +177,6 @@ public: VGPath roundRectPath; // Cached path for quick drawing of rounded rects. #endif - VGPath reusablePath; // Reusable path for vectorPathToVGPath(), etc. - QTransform transform; // Currently active transform. bool simpleTransform; // True if the transform is simple (non-projective). qreal penScale; // Pen scaling factor from "transform". @@ -352,8 +349,6 @@ void QVGPaintEnginePrivate::init() roundRectPath = 0; #endif - reusablePath = 0; - simpleTransform = true; pathTransformSet = false; penScale = 1.0; @@ -450,15 +445,6 @@ void QVGPaintEnginePrivate::initObjects() VG_PATH_CAPABILITY_ALL); vgAppendPathData(linePath, 2, segments, coords); #endif - - // This path can be reused over and over by calling vgClearPath(). - reusablePath = vgCreatePath(VG_PATH_FORMAT_STANDARD, - VG_PATH_DATATYPE_F, - 1.0f, // scale - 0.0f, // bias - 32 + 1, // segmentCapacityHint - 32 * 2, // coordCapacityHint - VG_PATH_CAPABILITY_ALL); } void QVGPaintEnginePrivate::destroy() @@ -478,8 +464,6 @@ void QVGPaintEnginePrivate::destroy() if (roundRectPath) vgDestroyPath(roundRectPath); #endif - if (reusablePath) - vgDestroyPath(reusablePath); #if !defined(QVG_NO_DRAW_GLYPHS) QVGFontCache::Iterator it; @@ -531,14 +515,11 @@ void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev) 0.0f, -1.0f, 0.0f, 0.5f, devh + 0.5f, 1.0f); - // The image transform is always the full transformation, - // because it can be projective. - imageTransform = transform * viewport; - - // Determine if the transformation is projective. - bool projective = (imageTransform.m13() != 0.0f || - imageTransform.m23() != 0.0f || - imageTransform.m33() != 1.0f); + // Compute the path transform and determine if it is projective. + pathTransform = transform * viewport; + bool projective = (pathTransform.m13() != 0.0f || + pathTransform.m23() != 0.0f || + pathTransform.m33() != 1.0f); if (projective) { // The engine cannot do projective path transforms for us, // so we will have to convert the co-ordinates ourselves. @@ -546,42 +527,37 @@ void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev) pathTransform = viewport; simpleTransform = false; } else { - pathTransform = imageTransform; simpleTransform = true; } pathTransformSet = false; + // The image transform is always the full transformation, + // because it can be projective. It also does not need the + // (0.5, -0.5) translation because vgDrawImage() implicitly + // adds 0.5 to each co-ordinate. + QTransform viewport2(1.0f, 0.0f, 0.0f, + 0.0f, -1.0f, 0.0f, + 0.0f, devh, 1.0f); + imageTransform = transform * viewport2; + // Calculate the scaling factor to use for turning cosmetic pens // into ordinary non-cosmetic pens. qt_scaleForTransform(transform, &penScale); } -inline void QVGPaintEnginePrivate::releasePath(VGPath path) -{ - if (path == reusablePath) - vgClearPath(path, VG_PATH_CAPABILITY_ALL); - else - vgDestroyPath(path); -} - -VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path, bool forceNewPath) +VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path) { int count = path.elementCount(); const qreal *points = path.points(); const QPainterPath::ElementType *elements = path.elements(); - VGPath vgpath; - if (forceNewPath) { - vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD, - VG_PATH_DATATYPE_F, - 1.0f, // scale - 0.0f, // bias - count + 1, // segmentCapacityHint - count * 2, // coordCapacityHint - VG_PATH_CAPABILITY_ALL); - } else { - vgpath = reusablePath; - } + VGPath vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F, + 1.0f, // scale + 0.0f, // bias + count + 1, // segmentCapacityHint + count * 2, // coordCapacityHint + VG_PATH_CAPABILITY_ALL); // Size is sufficient segments for drawRoundedRect() paths. QVarLengthArray<VGubyte, 20> segments; @@ -753,22 +729,17 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path, bool f return vgpath; } -VGPath QVGPaintEnginePrivate::painterPathToVGPath(const QPainterPath& path, bool forceNewPath) +VGPath QVGPaintEnginePrivate::painterPathToVGPath(const QPainterPath& path) { int count = path.elementCount(); - VGPath vgpath; - if (forceNewPath) { - vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD, - VG_PATH_DATATYPE_F, - 1.0f, // scale - 0.0f, // bias - count + 1, // segmentCapacityHint - count * 2, // coordCapacityHint - VG_PATH_CAPABILITY_ALL); - } else { - vgpath = reusablePath; - } + VGPath vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F, + 1.0f, // scale + 0.0f, // bias + count + 1, // segmentCapacityHint + count * 2, // coordCapacityHint + VG_PATH_CAPABILITY_ALL); if (count == 0) return vgpath; @@ -987,7 +958,13 @@ VGPath QVGPaintEnginePrivate::roundedRectPath(const QRectF &rect, qreal xRadius, vgModifyPathCoords(vgpath, 0, 9, pts); } #else - VGPath vgpath = reusablePath; + VGPath vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F, + 1.0f, // scale + 0.0f, // bias + 10, // segmentCapacityHint + 17 * 2, // coordCapacityHint + VG_PATH_CAPABILITY_ALL); vgAppendPathData(vgpath, 10, roundedrect_types, pts); #endif @@ -1540,7 +1517,7 @@ void QVGPaintEngine::draw(const QVectorPath &path) d->draw(vgpath, s->pen, s->brush, VG_EVEN_ODD); else d->draw(vgpath, s->pen, s->brush, VG_NON_ZERO); - d->releasePath(vgpath); + vgDestroyPath(vgpath); } void QVGPaintEngine::fill(const QVectorPath &path, const QBrush &brush) @@ -1551,7 +1528,7 @@ void QVGPaintEngine::fill(const QVectorPath &path, const QBrush &brush) d->fill(vgpath, brush, VG_EVEN_ODD); else d->fill(vgpath, brush, VG_NON_ZERO); - d->releasePath(vgpath); + vgDestroyPath(vgpath); } void QVGPaintEngine::stroke(const QVectorPath &path, const QPen &pen) @@ -1559,7 +1536,7 @@ void QVGPaintEngine::stroke(const QVectorPath &path, const QPen &pen) Q_D(QVGPaintEngine); VGPath vgpath = d->vectorPathToVGPath(path); d->stroke(vgpath, pen); - d->releasePath(vgpath); + vgDestroyPath(vgpath); } // Determine if a co-ordinate transform is simple enough to allow @@ -1755,7 +1732,7 @@ void QVGPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) default: break; } - d->releasePath(vgpath); + vgDestroyPath(vgpath); vgSeti(VG_MASKING, VG_TRUE); d->maskValid = true; @@ -2072,7 +2049,7 @@ void QVGPaintEngine::clip(const QPainterPath &path, Qt::ClipOperation op) default: break; } - d->releasePath(vgpath); + vgDestroyPath(vgpath); vgSeti(VG_MASKING, VG_TRUE); d->maskValid = true; @@ -2086,6 +2063,7 @@ void QVGPaintEngine::clip(const QPainterPath &path, Qt::ClipOperation op) void QVGPaintEnginePrivate::ensureMask (QVGPaintEngine *engine, int width, int height) { + scissorMask = false; if (maskIsSet) { vgMask(VG_INVALID_HANDLE, VG_FILL_MASK, 0, 0, width, height); maskRect = QRect(); @@ -2511,7 +2489,7 @@ void QVGPaintEngine::drawRoundedRect(const QRectF &rect, qreal xrad, qreal yrad, VGPath vgpath = d->roundedRectPath(rect, xrad, yrad, mode); d->draw(vgpath, s->pen, s->brush); #if defined(QVG_NO_MODIFY_PATH) - d->releasePath(vgpath); + vgDestroyPath(vgpath); #endif } else { QPaintEngineEx::drawRoundedRect(rect, xrad, yrad, mode); @@ -2660,7 +2638,13 @@ void QVGPaintEngine::drawEllipse(const QRectF &r) Q_D(QVGPaintEngine); if (d->simpleTransform) { QVGPainterState *s = state(); - VGPath path = d->reusablePath; + VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F, + 1.0f, // scale + 0.0f, // bias + 4, // segmentCapacityHint + 12, // coordCapacityHint + VG_PATH_CAPABILITY_ALL); static VGubyte segments[4] = { VG_MOVE_TO_ABS, VG_SCCWARC_TO_REL, @@ -2684,7 +2668,7 @@ void QVGPaintEngine::drawEllipse(const QRectF &r) coords[11] = 0.0f; vgAppendPathData(path, 4, segments, coords); d->draw(path, s->pen, s->brush); - d->releasePath(path); + vgDestroyPath(path); } else { // The projective transform version of an ellipse is difficult. // Generate a QVectorPath containing cubic curves and transform that. @@ -2708,7 +2692,7 @@ void QVGPaintEngine::drawPath(const QPainterPath &path) d->draw(vgpath, s->pen, s->brush, VG_EVEN_ODD); else d->draw(vgpath, s->pen, s->brush, VG_NON_ZERO); - d->releasePath(vgpath); + vgDestroyPath(vgpath); } void QVGPaintEngine::drawPoints(const QPointF *points, int pointCount) @@ -2783,7 +2767,13 @@ void QVGPaintEngine::drawPolygon(const QPointF *points, int pointCount, PolygonD { Q_D(QVGPaintEngine); QVGPainterState *s = state(); - VGPath path = d->reusablePath; + VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F, + 1.0f, // scale + 0.0f, // bias + pointCount + 1, // segmentCapacityHint + pointCount * 2, // coordCapacityHint + VG_PATH_CAPABILITY_ALL); QVarLengthArray<VGfloat, 16> coords; QVarLengthArray<VGubyte, 10> segments; for (int i = 0; i < pointCount; ++i, ++points) { @@ -2817,14 +2807,20 @@ void QVGPaintEngine::drawPolygon(const QPointF *points, int pointCount, PolygonD d->draw(path, s->pen, s->brush, VG_EVEN_ODD); break; } - d->releasePath(path); + vgDestroyPath(path); } void QVGPaintEngine::drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) { Q_D(QVGPaintEngine); QVGPainterState *s = state(); - VGPath path = d->reusablePath; + VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F, + 1.0f, // scale + 0.0f, // bias + pointCount + 1, // segmentCapacityHint + pointCount * 2, // coordCapacityHint + VG_PATH_CAPABILITY_ALL); QVarLengthArray<VGfloat, 16> coords; QVarLengthArray<VGubyte, 10> segments; for (int i = 0; i < pointCount; ++i, ++points) { @@ -2858,7 +2854,7 @@ void QVGPaintEngine::drawPolygon(const QPoint *points, int pointCount, PolygonDr d->draw(path, s->pen, s->brush, VG_EVEN_ODD); break; } - d->releasePath(path); + vgDestroyPath(path); } void QVGPaintEnginePrivate::setImageOptions() @@ -3255,7 +3251,7 @@ void QVGFontGlyphCache::cacheGlyphs(QVGPaintEnginePrivate *d, fontEngine->getUnscaledGlyph(glyph, &path, &metrics); VGPath vgPath; if (!path.isEmpty()) { - vgPath = d->painterPathToVGPath(path, true); + vgPath = d->painterPathToVGPath(path); } else { // Probably a "space" character with no visible outline. vgPath = VG_INVALID_HANDLE; diff --git a/src/plugins/codecs/cn/qgb18030codec.cpp b/src/plugins/codecs/cn/qgb18030codec.cpp index 5537cf7..3f2eec7 100644 --- a/src/plugins/codecs/cn/qgb18030codec.cpp +++ b/src/plugins/codecs/cn/qgb18030codec.cpp @@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE #define Is3rdByte(c) (InRange((c), 0x81, 0xFE)) #define Is4thByte(c) (InRange((c), 0x30, 0x39)) -#define QValidChar(u) ((u) ? QChar((ushort)(u)) : QChar(QChar::ReplacementCharacter)) +#define qValidChar(u) ((u) ? (u) : static_cast<ushort>(QChar::ReplacementCharacter)) /* User-defined areas: UDA 1: 0xAAA1 - 0xAFFE (564/0) UDA 2: 0xF8A1 - 0xFEFE (658/0) @@ -160,7 +160,7 @@ QString QGb18030Codec::convertToUnicode(const char* chars, int len, ConverterSta { uchar buf[4]; int nbuf = 0; - QChar replacement = QChar::ReplacementCharacter; + ushort replacement = QChar::ReplacementCharacter; if (state) { if (state->flags & ConvertInvalidToNull) replacement = QChar::Null; @@ -173,6 +173,9 @@ QString QGb18030Codec::convertToUnicode(const char* chars, int len, ConverterSta int invalid = 0; QString result; + result.resize(len); + int unicodeLen = 0; + ushort *const resultData = reinterpret_cast<ushort*>(result.data()); //qDebug("QGb18030Decoder::toUnicode(const char* chars, int len = %d)", len); for (int i = 0; i < len; i++) { uchar ch = chars[i]; @@ -180,14 +183,16 @@ QString QGb18030Codec::convertToUnicode(const char* chars, int len, ConverterSta case 0: if (ch < 0x80) { // ASCII - result += QLatin1Char(ch); + resultData[unicodeLen] = ch; + ++unicodeLen; } else if (Is1stByte(ch)) { // GB18030? buf[0] = ch; nbuf = 1; } else { // Invalid - result += replacement; + resultData[unicodeLen] = replacement; + ++unicodeLen; ++invalid; } break; @@ -198,9 +203,11 @@ QString QGb18030Codec::convertToUnicode(const char* chars, int len, ConverterSta int clen = 2; uint u = qt_Gb18030ToUnicode(buf, clen); if (clen == 2) { - result += QValidChar(u); + resultData[unicodeLen] = qValidChar(static_cast<ushort>(u)); + ++unicodeLen; } else { - result += replacement; + resultData[unicodeLen] = replacement; + ++unicodeLen; ++invalid; } nbuf = 0; @@ -209,7 +216,8 @@ QString QGb18030Codec::convertToUnicode(const char* chars, int len, ConverterSta nbuf = 2; } else { // Error - result += replacement; + resultData[unicodeLen] = replacement; + ++unicodeLen; ++invalid; nbuf = 0; } @@ -220,7 +228,8 @@ QString QGb18030Codec::convertToUnicode(const char* chars, int len, ConverterSta buf[2] = ch; nbuf = 3; } else { - result += replacement; + resultData[unicodeLen] = replacement; + ++unicodeLen; ++invalid; nbuf = 0; } @@ -232,19 +241,24 @@ QString QGb18030Codec::convertToUnicode(const char* chars, int len, ConverterSta int clen = 4; uint u = qt_Gb18030ToUnicode(buf, clen); if (clen == 4) { - result += QValidChar(u); + resultData[unicodeLen] = qValidChar(u); + ++unicodeLen; } else { - result += replacement; + resultData[unicodeLen] = replacement; + ++unicodeLen; ++invalid; } } else { - result += replacement; + resultData[unicodeLen] = replacement; + ++unicodeLen; ++invalid; } nbuf = 0; break; } } + result.resize(unicodeLen); + if (state) { state->remainingChars = nbuf; state->state_data[0] = (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3]; @@ -342,7 +356,7 @@ QString QGbkCodec::convertToUnicode(const char* chars, int len, ConverterState * int clen = 2; uint u = qt_Gb18030ToUnicode(buf, clen); if (clen == 2) { - result += QValidChar(u); + result += qValidChar(u); } else { result += replacement; ++invalid; @@ -445,7 +459,7 @@ QString QGb2312Codec::convertToUnicode(const char* chars, int len, ConverterStat { uchar buf[2]; int nbuf = 0; - QChar replacement = QChar::ReplacementCharacter; + ushort replacement = QChar::ReplacementCharacter; if (state) { if (state->flags & ConvertInvalidToNull) replacement = QChar::Null; @@ -456,6 +470,9 @@ QString QGb2312Codec::convertToUnicode(const char* chars, int len, ConverterStat int invalid = 0; QString result; + result.resize(len); + int unicodeLen = 0; + ushort *const resultData = reinterpret_cast<ushort*>(result.data()); //qDebug("QGb2312Decoder::toUnicode(const char* chars, int len = %d)", len); for (int i=0; i<len; i++) { uchar ch = chars[i]; @@ -463,14 +480,16 @@ QString QGb2312Codec::convertToUnicode(const char* chars, int len, ConverterStat case 0: if (ch < 0x80) { // ASCII - result += QLatin1Char(ch); + resultData[unicodeLen] = ch; + ++unicodeLen; } else if (IsByteInGb2312(ch)) { // GB2312 1st byte? buf[0] = ch; nbuf = 1; } else { // Invalid - result += replacement; + resultData[unicodeLen] = replacement; + ++unicodeLen; ++invalid; } break; @@ -481,21 +500,25 @@ QString QGb2312Codec::convertToUnicode(const char* chars, int len, ConverterStat int clen = 2; uint u = qt_Gb18030ToUnicode(buf, clen); if (clen == 2) { - result += QValidChar(u); + resultData[unicodeLen] = qValidChar(static_cast<ushort>(u)); + ++unicodeLen; } else { - result += replacement; + resultData[unicodeLen] = replacement; + ++unicodeLen; ++invalid; } nbuf = 0; } else { // Error - result += replacement; + resultData[unicodeLen] = replacement; + ++unicodeLen; ++invalid; nbuf = 0; } break; } } + result.resize(unicodeLen); if (state) { state->remainingChars = nbuf; diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp index 12f4c6b..54f4a8a 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp @@ -68,11 +68,10 @@ public: }; enum CompositionModeStatus { - PorterDuff_None = 0x00, - PorterDuff_SupportedBlits = 0x01, - PorterDuff_SupportedPrimitives = 0x02, - PorterDuff_SupportedOpaquePrimitives = 0x04, - PorterDuff_Dirty = 0x10 + PorterDuff_None = 0x0, + PorterDuff_Supported = 0x1, + PorterDuff_PremultiplyColors = 0x2, + PorterDuff_AlwaysBlend = 0x4 }; enum ClipType { @@ -97,7 +96,6 @@ public: inline void unlock(); static inline void unlock(QDirectFBPaintDevice *device); - inline bool testCompositionMode(const QPen *pen, const QBrush *brush, const QColor *color = 0) const; inline bool isSimpleBrush(const QBrush &brush) const; void drawTiledPixmap(const QRectF &dest, const QPixmap &pixmap, const QPointF &pos); @@ -130,6 +128,7 @@ public: ClipType clipType; QDirectFBPaintDevice *dfbDevice; uint compositionModeStatus; + bool isPremultiplied; bool inClip; QRect currentClip; @@ -168,7 +167,7 @@ struct CachedImage static QCache<qint64, CachedImage> imageCache(4*1024*1024); // 4 MB #endif -#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS || defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS +#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS || defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS || defined QT_DEBUG #define VOID_ARG() static_cast<bool>(false) enum PaintOperation { DRAW_RECTS = 0x0001, DRAW_LINES = 0x0002, DRAW_IMAGE = 0x0004, @@ -178,9 +177,89 @@ enum PaintOperation { FILL_RECT = 0x1000, DRAW_COLORSPANS = 0x2000, DRAW_ROUNDED_RECT = 0x4000, DRAW_STATICTEXT = 0x8000, ALL = 0xffff }; + +#ifdef QT_DEBUG +static void initRasterFallbacksMasks(int *warningMask, int *disableMask) +{ + struct { + const char *name; + PaintOperation operation; + } const operations[] = { + { "DRAW_RECTS", DRAW_RECTS }, + { "DRAW_LINES", DRAW_LINES }, + { "DRAW_IMAGE", DRAW_IMAGE }, + { "DRAW_PIXMAP", DRAW_PIXMAP }, + { "DRAW_TILED_PIXMAP", DRAW_TILED_PIXMAP }, + { "STROKE_PATH", STROKE_PATH }, + { "DRAW_PATH", DRAW_PATH }, + { "DRAW_POINTS", DRAW_POINTS }, + { "DRAW_ELLIPSE", DRAW_ELLIPSE }, + { "DRAW_POLYGON", DRAW_POLYGON }, + { "DRAW_TEXT", DRAW_TEXT }, + { "FILL_PATH", FILL_PATH }, + { "FILL_RECT", FILL_RECT }, + { "DRAW_COLORSPANS", DRAW_COLORSPANS }, + { "DRAW_ROUNDED_RECT", DRAW_ROUNDED_RECT }, + { "ALL", ALL }, + { 0, ALL } + }; + + QStringList warning = QString::fromLatin1(qgetenv("QT_DIRECTFB_WARN_ON_RASTERFALLBACKS")).toUpper().split(QLatin1Char('|'), + QString::SkipEmptyParts); + QStringList disable = QString::fromLatin1(qgetenv("QT_DIRECTFB_DISABLE_RASTERFALLBACKS")).toUpper().split(QLatin1Char('|'), + QString::SkipEmptyParts); + *warningMask = 0; + *disableMask = 0; + if (!warning.isEmpty() || !disable.isEmpty()) { + for (int i=0; operations[i].name; ++i) { + const QString name = QString::fromLatin1(operations[i].name); + int idx = warning.indexOf(name); + if (idx != -1) { + *warningMask |= operations[i].operation; + warning.remove(warning.begin() + idx); + } + idx = disable.indexOf(name); + if (idx != -1) { + *disableMask |= operations[i].operation; + disable.remove(disable.begin() + idx); + } + } + } + if (!warning.isEmpty()) { + qWarning("QDirectFBPaintEngine QT_DIRECTFB_WARN_ON_RASTERFALLBACKS Unknown operation(s): %s", + qPrintable(warning.join(QLatin1String("|")))); + } + if (!disable.isEmpty()) { + qWarning("QDirectFBPaintEngine QT_DIRECTFB_DISABLE_RASTERFALLBACKS Unknown operation(s): %s", + qPrintable(disable.join(QLatin1String("|")))); + } + +} #endif +static inline int rasterFallbacksMask(bool warn) +{ #ifdef QT_DIRECTFB_WARN_ON_RASTERFALLBACKS + if (warn) + return QT_DIRECTFB_WARN_ON_RASTERFALLBACKS; +#endif +#ifdef QT_DIRECTFB_DISABLE_RASTERFALLBACKS + if (!warn) + return QT_DIRECTFB_DISABLE_RASTERFALLBACKS; +#endif +#ifndef QT_DEBUG + return 0; +#else + static int warnMask = -1; + static int disableMask = -1; + if (warnMask == -1) + initRasterFallbacksMasks(&warnMask, &disableMask); + return warn ? warnMask : disableMask; +#endif +} +#endif + +#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS || defined QT_DEBUG template <typename device, typename T1, typename T2, typename T3> static void rasterFallbackWarn(const char *msg, const char *func, const device *dev, uint transformationType, bool simplePen, @@ -190,25 +269,31 @@ static void rasterFallbackWarn(const char *msg, const char *func, const device * const char *nameThree, const T3 &three); #endif -#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS && defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS +#if defined QT_DEBUG || (defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS && defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS) #define RASTERFALLBACK(op, one, two, three) \ - if (op & (QT_DIRECTFB_WARN_ON_RASTERFALLBACKS)) \ - rasterFallbackWarn("Disabled raster engine operation", \ - __FUNCTION__, state()->painter->device(), \ - d_func()->transformationType, \ - d_func()->simplePen, \ - d_func()->clipType, \ - d_func()->compositionModeStatus, \ - #one, one, #two, two, #three, three); \ - if (op & (QT_DIRECTFB_DISABLE_RASTERFALLBACKS)) \ - return; + { \ + const bool disable = op & rasterFallbacksMask(false); \ + if (op & rasterFallbacksMask(true)) \ + rasterFallbackWarn(disable \ + ? "Disabled raster engine operation" \ + : "Falling back to raster engine for", \ + __FUNCTION__, \ + state()->painter->device(), \ + d_func()->transformationType, \ + d_func()->simplePen, \ + d_func()->clipType, \ + d_func()->compositionModeStatus, \ + #one, one, #two, two, #three, three); \ + if (disable) \ + return; \ + } #elif defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS -#define RASTERFALLBACK(op, one, two, three) \ - if (op & (QT_DIRECTFB_DISABLE_RASTERFALLBACKS)) \ +#define RASTERFALLBACK(op, one, two, three) \ + if (op & rasterFallbacksMask(false)) \ return; #elif defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS #define RASTERFALLBACK(op, one, two, three) \ - if (op & (QT_DIRECTFB_WARN_ON_RASTERFALLBACKS)) \ + if (op & rasterFallbacksMask(true)) \ rasterFallbackWarn("Falling back to raster engine for", \ __FUNCTION__, state()->painter->device(), \ d_func()->transformationType, \ @@ -287,6 +372,7 @@ bool QDirectFBPaintEngine::begin(QPaintDevice *device) qFatal("QDirectFBPaintEngine used on an invalid device: 0x%x", device->devType()); } + d->isPremultiplied = QDirectFBScreen::isPremultiplied(d->dfbDevice->format()); d->prepare(d->dfbDevice); gccaps = AllFeatures; @@ -413,7 +499,7 @@ void QDirectFBPaintEngine::drawRects(const QRect *rects, int rectCount) || !d->simplePen || d->clipType == QDirectFBPaintEnginePrivate::ComplexClip || !d->isSimpleBrush(brush) - || !d->testCompositionMode(&pen, &brush)) { + || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) { RASTERFALLBACK(DRAW_RECTS, rectCount, VOID_ARG(), VOID_ARG()); d->lock(); QRasterPaintEngine::drawRects(rects, rectCount); @@ -443,7 +529,7 @@ void QDirectFBPaintEngine::drawRects(const QRectF *rects, int rectCount) || !d->simplePen || d->clipType == QDirectFBPaintEnginePrivate::ComplexClip || !d->isSimpleBrush(brush) - || !d->testCompositionMode(&pen, &brush)) { + || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) { RASTERFALLBACK(DRAW_RECTS, rectCount, VOID_ARG(), VOID_ARG()); d->lock(); QRasterPaintEngine::drawRects(rects, rectCount); @@ -468,7 +554,7 @@ void QDirectFBPaintEngine::drawLines(const QLine *lines, int lineCount) const QPen &pen = state()->pen; if (!d->simplePen || d->clipType == QDirectFBPaintEnginePrivate::ComplexClip - || !d->testCompositionMode(&pen, 0)) { + || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) { RASTERFALLBACK(DRAW_LINES, lineCount, VOID_ARG(), VOID_ARG()); d->lock(); QRasterPaintEngine::drawLines(lines, lineCount); @@ -488,7 +574,7 @@ void QDirectFBPaintEngine::drawLines(const QLineF *lines, int lineCount) const QPen &pen = state()->pen; if (!d->simplePen || d->clipType == QDirectFBPaintEnginePrivate::ComplexClip - || !d->testCompositionMode(&pen, 0)) { + || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) { RASTERFALLBACK(DRAW_LINES, lineCount, VOID_ARG(), VOID_ARG()); d->lock(); QRasterPaintEngine::drawLines(lines, lineCount); @@ -526,7 +612,7 @@ void QDirectFBPaintEngine::drawImage(const QRectF &r, const QImage &image, */ #if !defined QT_NO_DIRECTFB_PREALLOCATED || defined QT_DIRECTFB_IMAGECACHE - if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_SupportedBlits) + if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported) || (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_BlitsUnsupported) || (d->clipType == QDirectFBPaintEnginePrivate::ComplexClip) || (!d->supportsStretchBlit() && state()->matrix.mapRect(r).size() != sr.size()) @@ -575,7 +661,7 @@ void QDirectFBPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pixmap, QPixmapData *data = pixmap.pixmapData(); Q_ASSERT(data->classId() == QPixmapData::DirectFBClass); QDirectFBPixmapData *dfbData = static_cast<QDirectFBPixmapData*>(data); - if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_SupportedBlits) + if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported) || (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_BlitsUnsupported) || (d->clipType == QDirectFBPaintEnginePrivate::ComplexClip) || (!d->supportsStretchBlit() && state()->matrix.mapRect(r).size() != sr.size())) { @@ -606,7 +692,7 @@ void QDirectFBPaintEngine::drawTiledPixmap(const QRectF &r, RASTERFALLBACK(DRAW_TILED_PIXMAP, r, pixmap.size(), offset); d->lock(); QRasterPaintEngine::drawTiledPixmap(r, pixmap, offset); - } else if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_SupportedBlits) + } else if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported) || (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_BlitsUnsupported) || (d->clipType == QDirectFBPaintEnginePrivate::ComplexClip) || (!d->supportsStretchBlit() && state()->matrix.isScaling())) { @@ -727,20 +813,21 @@ void QDirectFBPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) if (d->clipType != QDirectFBPaintEnginePrivate::ComplexClip) { switch (brush.style()) { case Qt::SolidPattern: { - if (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_RectsUnsupported - || !d->testCompositionMode(0, &brush)) { - break; - } const QColor color = brush.color(); if (!color.isValid()) return; + + if (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_RectsUnsupported + || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) { + break; + } d->setDFBColor(color); const QRect r = state()->matrix.mapRect(rect).toRect(); CLIPPED_PAINT(d->surface->FillRectangle(d->surface, r.x(), r.y(), r.width(), r.height())); return; } case Qt::TexturePattern: { - if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_SupportedBlits) + if (!(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported) || (d->transformationType & QDirectFBPaintEnginePrivate::Matrix_BlitsUnsupported) || (!d->supportsStretchBlit() && state()->matrix.isScaling())) { break; @@ -768,7 +855,7 @@ void QDirectFBPaintEngine::fillRect(const QRectF &rect, const QColor &color) Q_D(QDirectFBPaintEngine); if ((d->transformationType & QDirectFBPaintEnginePrivate::Matrix_RectsUnsupported) || (d->clipType == QDirectFBPaintEnginePrivate::ComplexClip) - || !d->testCompositionMode(0, 0, &color)) { + || !(d->compositionModeStatus & QDirectFBPaintEnginePrivate::PorterDuff_Supported)) { RASTERFALLBACK(FILL_RECT, rect, color, VOID_ARG()); d->lock(); QRasterPaintEngine::fillRect(rect, color); @@ -812,7 +899,7 @@ QDirectFBPaintEnginePrivate::QDirectFBPaintEnginePrivate(QDirectFBPaintEngine *p : surface(0), antialiased(false), simplePen(false), transformationType(0), opacity(255), clipType(ClipUnset), dfbDevice(0), - compositionModeStatus(0), inClip(false), q(p) + compositionModeStatus(0), isPremultiplied(false), inClip(false), q(p) { fb = QDirectFBScreen::instance()->dfb(); surfaceCache = new SurfaceCache; @@ -828,36 +915,6 @@ bool QDirectFBPaintEnginePrivate::isSimpleBrush(const QBrush &brush) const return (brush.style() == Qt::NoBrush) || (brush.style() == Qt::SolidPattern && !antialiased); } -bool QDirectFBPaintEnginePrivate::testCompositionMode(const QPen *pen, const QBrush *brush, const QColor *color) const -{ - Q_ASSERT(!pen || pen->style() == Qt::NoPen || pen->style() == Qt::SolidLine); - Q_ASSERT(!brush || brush->style() == Qt::NoBrush || brush->style() == Qt::SolidPattern); - switch (compositionModeStatus & (QDirectFBPaintEnginePrivate::PorterDuff_SupportedOpaquePrimitives - |QDirectFBPaintEnginePrivate::PorterDuff_SupportedPrimitives)) { - case QDirectFBPaintEnginePrivate::PorterDuff_SupportedPrimitives: - return true; - case QDirectFBPaintEnginePrivate::PorterDuff_SupportedOpaquePrimitives: - if (pen && pen->style() == Qt::SolidLine && pen->color().alpha() != 255) - return false; - if (brush) { - if (brush->style() == Qt::SolidPattern && brush->color().alpha() != 255) { - return false; - } - } else if (color && color->alpha() != 255) { - return false; - } - return true; - case QDirectFBPaintEnginePrivate::PorterDuff_None: - return false; - default: - // ### PorterDuff_SupportedOpaquePrimitives|PorterDuff_SupportedPrimitives can't be combined - break; - } - Q_ASSERT(0); - return false; -} - - void QDirectFBPaintEnginePrivate::lock() { // We will potentially get a new pointer to the buffer after a @@ -920,21 +977,23 @@ void QDirectFBPaintEnginePrivate::setCompositionMode(QPainter::CompositionMode m static const bool forceRasterFallBack = qgetenv("QT_DIRECTFB_FORCE_RASTER").toInt() > 0; if (forceRasterFallBack) { - compositionModeStatus = 0; + compositionModeStatus = PorterDuff_None; return; } - compositionModeStatus = PorterDuff_SupportedBlits; + compositionModeStatus = PorterDuff_Supported|PorterDuff_PremultiplyColors|PorterDuff_AlwaysBlend; switch (mode) { case QPainter::CompositionMode_Clear: surface->SetPorterDuff(surface, DSPD_CLEAR); break; case QPainter::CompositionMode_Source: surface->SetPorterDuff(surface, DSPD_SRC); - compositionModeStatus |= PorterDuff_SupportedOpaquePrimitives; + compositionModeStatus &= ~PorterDuff_AlwaysBlend; + if (!isPremultiplied) + compositionModeStatus &= ~PorterDuff_PremultiplyColors; break; case QPainter::CompositionMode_SourceOver: - compositionModeStatus |= PorterDuff_SupportedPrimitives; + compositionModeStatus &= ~PorterDuff_AlwaysBlend; surface->SetPorterDuff(surface, DSPD_SRC_OVER); break; case QPainter::CompositionMode_DestinationOver: @@ -942,6 +1001,8 @@ void QDirectFBPaintEnginePrivate::setCompositionMode(QPainter::CompositionMode m break; case QPainter::CompositionMode_SourceIn: surface->SetPorterDuff(surface, DSPD_SRC_IN); + if (!isPremultiplied) + compositionModeStatus &= ~PorterDuff_PremultiplyColors; break; case QPainter::CompositionMode_DestinationIn: surface->SetPorterDuff(surface, DSPD_DST_IN); @@ -952,6 +1013,11 @@ void QDirectFBPaintEnginePrivate::setCompositionMode(QPainter::CompositionMode m case QPainter::CompositionMode_DestinationOut: surface->SetPorterDuff(surface, DSPD_DST_OUT); break; +#if (Q_DIRECTFB_VERSION >= 0x010209) + case QPainter::CompositionMode_Destination: + surface->SetPorterDuff(surface, DSPD_DST); + break; +#endif #if (Q_DIRECTFB_VERSION >= 0x010000) case QPainter::CompositionMode_SourceAtop: surface->SetPorterDuff(surface, DSPD_SRC_ATOP); @@ -967,7 +1033,7 @@ void QDirectFBPaintEnginePrivate::setCompositionMode(QPainter::CompositionMode m break; #endif default: - compositionModeStatus = 0; + compositionModeStatus = PorterDuff_None; break; } } @@ -989,9 +1055,6 @@ void QDirectFBPaintEnginePrivate::prepareForBlit(bool alpha) } surface->SetColor(surface, 0xff, 0xff, 0xff, opacity); surface->SetBlittingFlags(surface, blittingFlags); - if (compositionModeStatus & PorterDuff_Dirty) { - setCompositionMode(q->state()->composition_mode); - } } static inline uint ALPHA_MUL(uint x, uint a) @@ -1004,12 +1067,20 @@ static inline uint ALPHA_MUL(uint x, uint a) void QDirectFBPaintEnginePrivate::setDFBColor(const QColor &color) { Q_ASSERT(surface); + Q_ASSERT(compositionModeStatus & PorterDuff_Supported); const quint8 alpha = (opacity == 255 ? color.alpha() : ALPHA_MUL(color.alpha(), opacity)); - surface->SetColor(surface, color.red(), color.green(), color.blue(), alpha); - surface->SetPorterDuff(surface, DSPD_NONE); - surface->SetDrawingFlags(surface, alpha == 255 ? DSDRAW_NOFX : DSDRAW_BLEND); - compositionModeStatus |= PorterDuff_Dirty; + QColor col; + if (compositionModeStatus & PorterDuff_PremultiplyColors) { + col = QColor(ALPHA_MUL(color.red(), alpha), + ALPHA_MUL(color.green(), alpha), + ALPHA_MUL(color.blue(), alpha), + alpha); + } else { + col = QColor(color.red(), color.green(), color.blue(), alpha); + } + surface->SetColor(surface, col.red(), col.green(), col.blue(), col.alpha()); + surface->SetDrawingFlags(surface, alpha == 255 && !(compositionModeStatus & PorterDuff_AlwaysBlend) ? DSDRAW_NOFX : DSDRAW_BLEND); } IDirectFBSurface *QDirectFBPaintEnginePrivate::getSurface(const QImage &img, bool *release) @@ -1291,7 +1362,7 @@ static inline void drawRects(const T *rects, int n, const QTransform &transform, } } -#ifdef QT_DIRECTFB_WARN_ON_RASTERFALLBACKS +#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS || defined QT_DEBUG template <typename T> inline const T *ptr(const T &t) { return &t; } template <> inline const bool* ptr<bool>(const bool &) { return 0; } template <typename device, typename T1, typename T2, typename T3> diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp index ba50329..b5ac67d 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp @@ -425,7 +425,7 @@ void QDirectFBPixmapData::fill(const QColor &color) Q_ASSERT(dfbSurface); - alpha = (color.alpha() < 255); + alpha |= (color.alpha() < 255); if (alpha && isOpaqueFormat(imageFormat)) { QSize size; diff --git a/src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp b/src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp index 7bcb74d..e78fec1 100644 --- a/src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp +++ b/src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp @@ -325,6 +325,36 @@ static const struct { { 0xffe8, Qt::Key_Meta }, { 0xffe9, Qt::Key_Alt }, { 0xffea, Qt::Key_Alt }, + + { 0xffb0, Qt::Key_0 }, + { 0xffb1, Qt::Key_1 }, + { 0xffb2, Qt::Key_2 }, + { 0xffb3, Qt::Key_3 }, + { 0xffb4, Qt::Key_4 }, + { 0xffb5, Qt::Key_5 }, + { 0xffb6, Qt::Key_6 }, + { 0xffb7, Qt::Key_7 }, + { 0xffb8, Qt::Key_8 }, + { 0xffb9, Qt::Key_9 }, + + { 0xff8d, Qt::Key_Return }, + { 0xffaa, Qt::Key_Asterisk }, + { 0xffab, Qt::Key_Plus }, + { 0xffad, Qt::Key_Minus }, + { 0xffae, Qt::Key_Period }, + { 0xffaf, Qt::Key_Slash }, + + { 0xff95, Qt::Key_Home }, + { 0xff96, Qt::Key_Left }, + { 0xff97, Qt::Key_Up }, + { 0xff98, Qt::Key_Right }, + { 0xff99, Qt::Key_Down }, + { 0xff9a, Qt::Key_PageUp }, + { 0xff9b, Qt::Key_PageDown }, + { 0xff9c, Qt::Key_End }, + { 0xff9e, Qt::Key_Insert }, + { 0xff9f, Qt::Key_Delete }, + { 0, 0 } }; @@ -483,6 +513,10 @@ bool QRfbKeyEvent::read(QTcpSocket *s) keycode = keyMap[i].keycode; i++; } + + if (keycode >= ' ' && keycode <= '~') + unicode = keycode; + if (!keycode) { if (key <= 0xff) { unicode = key; diff --git a/src/plugins/sqldrivers/odbc/odbc.pro b/src/plugins/sqldrivers/odbc/odbc.pro index 3de8ab2..2bf85f1 100644 --- a/src/plugins/sqldrivers/odbc/odbc.pro +++ b/src/plugins/sqldrivers/odbc/odbc.pro @@ -8,6 +8,7 @@ unix { !contains( LIBS, .*odbc.* ) { LIBS *= $$QT_LFLAGS_ODBC } + DEFINES += UNICODE } win32 { diff --git a/src/sql/drivers/drivers.pri b/src/sql/drivers/drivers.pri index aac0267..8dfc50f 100644 --- a/src/sql/drivers/drivers.pri +++ b/src/sql/drivers/drivers.pri @@ -46,6 +46,7 @@ contains(sql-drivers, odbc) { mac:!contains( LIBS, .*odbc.* ):LIBS *= -liodbc unix:!contains( LIBS, .*odbc.* ):LIBS *= -lodbc + unix:DEFINES += UNICODE win32 { !win32-borland:LIBS *= -lodbc32 diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp index c0f866e..2261887 100644 --- a/src/sql/drivers/mysql/qsql_mysql.cpp +++ b/src/sql/drivers/mysql/qsql_mysql.cpp @@ -320,6 +320,16 @@ static bool qIsBlob(int t) || t == MYSQL_TYPE_LONG_BLOB; } +static bool qIsInteger(int t) +{ + return t == MYSQL_TYPE_TINY + || t == MYSQL_TYPE_SHORT + || t == MYSQL_TYPE_LONG + || t == MYSQL_TYPE_LONGLONG + || t == MYSQL_TYPE_INT24; +} + + void QMYSQLResultPrivate::bindBlobs() { int i; @@ -368,6 +378,13 @@ bool QMYSQLResultPrivate::bindInValues() fieldInfo->length = 0; hasBlobs = true; } else { + // fieldInfo->length specifies the display width, which may be too + // small to hold valid integer values (see + // http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html ), so + // always use the MAX_BIGINT_WIDTH for integer types + if (qIsInteger(fieldInfo->type)) { + fieldInfo->length = MAX_BIGINT_WIDTH; + } fieldInfo->type = MYSQL_TYPE_STRING; } bind = &inBinds[i]; diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp index 9f7d267..ee22bc3 100644 --- a/src/sql/drivers/odbc/qsql_odbc.cpp +++ b/src/sql/drivers/odbc/qsql_odbc.cpp @@ -71,11 +71,54 @@ QT_BEGIN_NAMESPACE # define QSQLULEN SQLULEN #endif - static const int COLNAMESIZE = 256; //Map Qt parameter types to ODBC types static const SQLSMALLINT qParamType[4] = { SQL_PARAM_INPUT, SQL_PARAM_INPUT, SQL_PARAM_OUTPUT, SQL_PARAM_INPUT_OUTPUT }; +inline static QString fromSQLTCHAR(const QVarLengthArray<SQLTCHAR>& input, int size=-1) +{ + QString result; + + int realsize = qMin(size, input.size()); + if(realsize > 0 && input[realsize-1] == 0) + realsize--; + switch(sizeof(SQLTCHAR)) { + case 1: + result=QString::fromUtf8((const char *)input.constData(), realsize); + break; + case 2: + result=QString::fromUtf16((const ushort *)input.constData(), realsize); + break; + case 4: + result=QString::fromUcs4((const uint *)input.constData(), realsize); + break; + default: + qCritical() << "sizeof(SQLTCHAR) is " << sizeof(SQLTCHAR) << "Don't know how to handle this"; + } + return result; +} + +inline static QVarLengthArray<SQLTCHAR> toSQLTCHAR(const QString &input) +{ + QVarLengthArray<SQLTCHAR> result; + result.resize(input.size()); + switch(sizeof(SQLTCHAR)) { + case 1: + memcpy(result.data(), input.toUtf8().data(), input.size()); + break; + case 2: + memcpy(result.data(), input.unicode(), input.size() * 2); + break; + case 4: + memcpy(result.data(), input.toUcs4().data(), input.size() * 4); + break; + default: + qCritical() << "sizeof(SQLTCHAR) is " << sizeof(SQLTCHAR) << "Don't know how to handle this"; + } + result.append(0); // make sure it's null terminated, doesn't matter if it already is, it does if it isn't. + return result; +} + class QODBCDriverPrivate { public: @@ -91,8 +134,8 @@ public: SQLHANDLE hEnv; SQLHANDLE hDbc; - uint unicode :1; - uint useSchema :1; + bool unicode; + bool useSchema; int disconnectCount; bool isMySqlServer; bool isMSSqlServer; @@ -132,8 +175,8 @@ public: SQLHANDLE dpDbc() const { return driverPrivate ? driverPrivate->hDbc : 0;} SQLHANDLE hStmt; - uint unicode :1; - uint useSchema :1; + bool unicode; + bool useSchema; QSqlRecord rInf; QVector<QVariant> fieldCache; @@ -170,19 +213,18 @@ static QString qWarnODBCHandle(int handleType, SQLHANDLE handle, int *nativeCode int i = 1; description_[0] = 0; - r = SQLGetDiagRec(handleType, - handle, - i, - state_, - &nativeCode_, - 0, - NULL, - &msgLen); - if(r == SQL_NO_DATA) - return QString(); - description_.resize(msgLen+1); do { r = SQLGetDiagRec(handleType, + handle, + i, + state_, + &nativeCode_, + 0, + NULL, + &msgLen); + if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && msgLen > 0) + description_.resize(msgLen+1); + r = SQLGetDiagRec(handleType, handle, i, state_, @@ -195,9 +237,9 @@ static QString qWarnODBCHandle(int handleType, SQLHANDLE handle, int *nativeCode *nativeCode = nativeCode_; QString tmpstore; #ifdef UNICODE - tmpstore = QString((const QChar*)description_.data(), msgLen); + tmpstore = fromSQLTCHAR(description_, msgLen); #else - tmpstore = QString::fromLocal8Bit((const char*)description_.data(), msgLen); + tmpstore = QString::fromUtf8((const char*)description_.constData(), msgLen); #endif if(result != tmpstore) { if(!result.isEmpty()) @@ -216,13 +258,13 @@ static QString qODBCWarn(const QODBCPrivate* odbc, int *nativeCode = 0) { return (qWarnODBCHandle(SQL_HANDLE_ENV, odbc->dpEnv()) + QLatin1Char(' ') + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->dpDbc()) + QLatin1Char(' ') - + qWarnODBCHandle(SQL_HANDLE_STMT, odbc->hStmt, nativeCode)); + + qWarnODBCHandle(SQL_HANDLE_STMT, odbc->hStmt, nativeCode)).simplified(); } static QString qODBCWarn(const QODBCDriverPrivate* odbc, int *nativeCode = 0) { return (qWarnODBCHandle(SQL_HANDLE_ENV, odbc->hEnv) + QLatin1Char(' ') - + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->hDbc, nativeCode)); + + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->hDbc, nativeCode)).simplified(); } static void qSqlWarning(const QString& message, const QODBCPrivate* odbc) @@ -322,17 +364,22 @@ static QString qGetStringData(SQLHANDLE hStmt, int column, int colSize, bool uni colSize = 65536; } else { colSize++; // make sure there is room for more than the 0 termination - if (unicode) { - colSize *= 2; // a tiny bit faster, since it saves a SQLGetData() call - } } - QVarLengthArray<char> buf(colSize); + r = SQLGetData(hStmt, + column+1, + SQL_C_TCHAR, + NULL, + 0, + &lengthIndicator); + if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && lengthIndicator > 0) + colSize = lengthIndicator/sizeof(SQLTCHAR) + 1; + QVarLengthArray<SQLTCHAR> buf(colSize); while (true) { r = SQLGetData(hStmt, column+1, - unicode ? SQL_C_WCHAR : SQL_C_CHAR, + SQL_C_TCHAR, (SQLPOINTER)buf.data(), - colSize, + colSize*sizeof(SQLTCHAR), &lengthIndicator); if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) { if (lengthIndicator == SQL_NULL_DATA || lengthIndicator == SQL_NO_TOTAL) { @@ -344,14 +391,9 @@ static QString qGetStringData(SQLHANDLE hStmt, int column, int colSize, bool uni // contain the number of bytes returned - it contains the // total number of bytes that CAN be fetched // colSize-1: remove 0 termination when there is more data to fetch - int rSize = (r == SQL_SUCCESS_WITH_INFO) ? (unicode ? colSize-2 : colSize-1) : lengthIndicator; - if (unicode) { - fieldVal += QString((const QChar*) buf.constData(), rSize / 2); - } else { - fieldVal += QString::fromAscii(buf.constData(), rSize); - } - memset(buf.data(), 0, colSize); - if (lengthIndicator < colSize) { + int rSize = (r == SQL_SUCCESS_WITH_INFO) ? colSize : lengthIndicator/sizeof(SQLTCHAR); + fieldVal += fromSQLTCHAR(buf, rSize); + if (lengthIndicator < (unsigned int)colSize*sizeof(SQLTCHAR)) { // workaround for Drivermanagers that don't return SQL_NO_DATA break; } @@ -377,10 +419,11 @@ static QVariant qGetBinaryData(SQLHANDLE hStmt, int column) QSQLLEN lengthIndicator = 0; SQLRETURN r = SQL_ERROR; - SQLTCHAR colName[COLNAMESIZE]; + QVarLengthArray<SQLTCHAR> colName(COLNAMESIZE); + r = SQLDescribeCol(hStmt, column + 1, - colName, + colName.data(), COLNAMESIZE, &colNameLen, &colType, @@ -513,10 +556,10 @@ static QSqlField qMakeFieldInfo(const QODBCPrivate* p, int i ) SQLSMALLINT colScale; SQLSMALLINT nullable; SQLRETURN r = SQL_ERROR; - SQLTCHAR colName[COLNAMESIZE]; + QVarLengthArray<SQLTCHAR> colName(COLNAMESIZE); r = SQLDescribeCol(p->hStmt, i+1, - colName, + colName.data(), (SQLSMALLINT)COLNAMESIZE, &colNameLen, &colType, @@ -542,9 +585,9 @@ static QSqlField qMakeFieldInfo(const QODBCPrivate* p, int i ) } #ifdef UNICODE - QString qColName((const QChar*)colName, colNameLen); + QString qColName(fromSQLTCHAR(colName, colNameLen)); #else - QString qColName = QString::fromLocal8Bit((const char*)colName); + QString qColName = QString::fromUtf8((const char *)colName.constData()); #endif // nullable can be SQL_NO_NULLS, SQL_NULLABLE or SQL_NULLABLE_UNKNOWN int required = -1; @@ -576,18 +619,21 @@ static int qGetODBCVersion(const QString &connOpts) QChar QODBCDriverPrivate::quoteChar() { if (!isQuoteInitialized) { - char driverResponse[4]; + SQLTCHAR driverResponse[4]; SQLSMALLINT length; int r = SQLGetInfo(hDbc, SQL_IDENTIFIER_QUOTE_CHAR, &driverResponse, sizeof(driverResponse), &length); - if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) { + if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) +#ifdef UNICODE + quote = QChar(driverResponse[0]); +#else quote = QLatin1Char(driverResponse[0]); - } else { +#endif + else quote = QLatin1Char('"'); - } isQuoteInitialized = true; } return quote; @@ -631,11 +677,11 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts) val.utf16(); // 0 terminate r = SQLSetConnectAttr(hDbc, SQL_ATTR_CURRENT_CATALOG, #ifdef UNICODE - (SQLWCHAR*) val.unicode(), + toSQLTCHAR(val).data(), #else - (SQLCHAR*) val.toLatin1().constData(), + (SQLCHAR*) val.toUtf8().data(), #endif - SQL_NTS); + val.length()*sizeof(SQLTCHAR)); } else if (opt.toUpper() == QLatin1String("SQL_ATTR_METADATA_ID")) { if (val.toUpper() == QLatin1String("SQL_TRUE")) { v = SQL_TRUE; @@ -653,11 +699,11 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts) val.utf16(); // 0 terminate r = SQLSetConnectAttr(hDbc, SQL_ATTR_TRACEFILE, #ifdef UNICODE - (SQLWCHAR*) val.unicode(), + toSQLTCHAR(val).data(), #else - (SQLCHAR*) val.toLatin1().constData(), + (SQLCHAR*) val.toUtf8().data(), #endif - SQL_NTS); + val.length()*sizeof(SQLTCHAR)); } else if (opt.toUpper() == QLatin1String("SQL_ATTR_TRACE")) { if (val.toUpper() == QLatin1String("SQL_OPT_TRACE_OFF")) { v = SQL_OPT_TRACE_OFF; @@ -867,12 +913,12 @@ bool QODBCResult::reset (const QString& query) #ifdef UNICODE r = SQLExecDirect(d->hStmt, - (SQLWCHAR*) query.unicode(), + toSQLTCHAR(query).data(), (SQLINTEGER) query.length()); #else - QByteArray query8 = query.toLocal8Bit(); + QByteArray query8 = query.toUtf8(); r = SQLExecDirect(d->hStmt, - (SQLCHAR*) query8.constData(), + (SQLCHAR*) query8.data(), (SQLINTEGER) query8.length()); #endif if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO && r!= SQL_NO_DATA) { @@ -1218,12 +1264,12 @@ bool QODBCResult::prepare(const QString& query) #ifdef UNICODE r = SQLPrepare(d->hStmt, - (SQLWCHAR*) query.unicode(), + toSQLTCHAR(query).data(), (SQLINTEGER) query.length()); #else - QByteArray query8 = query.toLocal8Bit(); + QByteArray query8 = query.toUtf8(); r = SQLPrepare(d->hStmt, - (SQLCHAR*) query8.constData(), + (SQLCHAR*) query8.data(), (SQLINTEGER) query8.length()); #endif @@ -1421,42 +1467,43 @@ bool QODBCResult::exec() case QVariant::String: if (d->unicode) { QString str = val.toString(); - str.utf16(); if (*ind != SQL_NULL_DATA) - *ind = str.length() * sizeof(QChar); - int strSize = str.length() * sizeof(QChar); + *ind = str.length() * sizeof(SQLTCHAR); + int strSize = str.length() * sizeof(SQLTCHAR); if (bindValueType(i) & QSql::Out) { - QByteArray ba((char*)str.constData(), str.capacity() * sizeof(QChar)); + QVarLengthArray<SQLTCHAR> ba(toSQLTCHAR(str)); + ba.reserve(str.capacity()); r = SQLBindParameter(d->hStmt, i + 1, qParamType[(QFlag)(bindValueType(i)) & QSql::InOut], - SQL_C_WCHAR, + SQL_C_TCHAR, strSize > 254 ? SQL_WLONGVARCHAR : SQL_WVARCHAR, 0, // god knows... don't change this! 0, (void *)ba.constData(), ba.size(), ind); - tmpStorage.append(ba); + tmpStorage.append(QByteArray((const char *)ba.constData(), ba.size()*sizeof(SQLTCHAR))); break; } - + QByteArray strba((const char *)toSQLTCHAR(str).constData(), str.size()*sizeof(SQLTCHAR)); r = SQLBindParameter(d->hStmt, i + 1, qParamType[(QFlag)(bindValueType(i)) & QSql::InOut], - SQL_C_WCHAR, + SQL_C_TCHAR, strSize > 254 ? SQL_WLONGVARCHAR : SQL_WVARCHAR, strSize, 0, - (void *)str.constData(), - strSize, + (SQLPOINTER)strba.constData(), + strba.size(), ind); + tmpStorage.append(strba); break; } else { - QByteArray str = val.toString().toAscii(); + QByteArray str = val.toString().toUtf8(); if (*ind != SQL_NULL_DATA) *ind = str.length(); int strSize = str.length(); @@ -1557,15 +1604,18 @@ bool QODBCResult::exec() break; case QVariant::String: if (d->unicode) { - if (bindValueType(i) & QSql::Out) - values[i] = QString((QChar *)tmpStorage.takeFirst().constData()); + if (bindValueType(i) & QSql::Out) { + QByteArray first = tmpStorage.takeFirst(); + QVarLengthArray<SQLTCHAR> array; + array.append((SQLTCHAR *)first.constData(), first.size()); + values[i] = fromSQLTCHAR(array, first.size()/sizeof(SQLTCHAR*)); + } break; } // fall through default: { - QByteArray ba = tmpStorage.takeFirst(); if (bindValueType(i) & QSql::Out) - values[i] = QString::fromAscii(ba.constData()); + values[i] = tmpStorage.takeFirst(); break; } } if (indicators[i] == SQL_NULL_DATA) @@ -1774,19 +1824,20 @@ bool QODBCDriver::open(const QString & db, connQStr += QLatin1String(";PWD=") + password; SQLSMALLINT cb; - SQLTCHAR connOut[1024]; + QVarLengthArray<SQLTCHAR> connOut(1024); r = SQLDriverConnect(d->hDbc, NULL, #ifdef UNICODE - (SQLWCHAR*)connQStr.unicode(), + toSQLTCHAR(connQStr).data(), #else - (SQLCHAR*)connQStr.toLatin1().constData(), + (SQLCHAR*)connQStr.toUtf8().data(), #endif (SQLSMALLINT)connQStr.length(), - connOut, + connOut.data(), 1024, &cb, - SQL_DRIVER_NOPROMPT); + /*SQL_DRIVER_NOPROMPT*/0); + if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO) { setLastError(qMakeError(tr("Unable to connect"), QSqlError::ConnectionError, d)); setOpenError(true); @@ -1957,20 +2008,21 @@ void QODBCDriverPrivate::checkSchemaUsage() void QODBCDriverPrivate::checkSqlServer() { SQLRETURN r; - char serverString[200]; + QVarLengthArray<SQLTCHAR> serverString(200); SQLSMALLINT t; + memset(serverString.data(), 0, serverString.size() * sizeof(SQLTCHAR)); r = SQLGetInfo(hDbc, SQL_DBMS_NAME, - serverString, - sizeof(serverString), + serverString.data(), + serverString.size() * sizeof(SQLTCHAR), &t); if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) { QString serverType; #ifdef UNICODE - serverType = QString(reinterpret_cast<const QChar*>(serverString), t/sizeof(QChar)); + serverType = fromSQLTCHAR(serverString, t/sizeof(SQLTCHAR)); #else - serverType = QString::fromLocal8Bit(serverString, t); + serverType = QString::fromUtf8((const char *)serverString.constData(), t); #endif isMySqlServer = serverType.contains(QLatin1String("mysql"), Qt::CaseInsensitive); isMSSqlServer = serverType.contains(QLatin1String("Microsoft SQL Server"), Qt::CaseInsensitive); @@ -1989,18 +2041,18 @@ void QODBCDriverPrivate::checkHasSQLFetchScroll() void QODBCDriverPrivate::checkHasMultiResults() { - char driverResponse[4]; + QVarLengthArray<SQLTCHAR> driverResponse(2); SQLSMALLINT length; SQLRETURN r = SQLGetInfo(hDbc, SQL_MULT_RESULT_SETS, - driverResponse, - sizeof(driverResponse), + driverResponse.data(), + driverResponse.size() * sizeof(SQLTCHAR), &length); if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) #ifdef UNICODE - hasMultiResultSets = QString(reinterpret_cast<const QChar*>(driverResponse), length/sizeof(QChar)).startsWith(QLatin1Char('Y')); + hasMultiResultSets = fromSQLTCHAR(driverResponse, length/sizeof(SQLTCHAR)).startsWith(QLatin1Char('Y')); #else - hasMultiResultSets = QString::fromLocal8Bit(driverResponse, length).startsWith(QLatin1Char('Y')); + hasMultiResultSets = QString::fromUtf8((const char *)driverResponse.constData(), length).startsWith(QLatin1Char('Y')); #endif } @@ -2114,9 +2166,9 @@ QStringList QODBCDriver::tables(QSql::TableType type) const NULL, 0, #ifdef UNICODE - (SQLWCHAR*)joinedTableTypeString.unicode(), + toSQLTCHAR(joinedTableTypeString).data(), #else - (SQLCHAR*)joinedTableTypeString.toLatin1().constData(), + (SQLCHAR*)joinedTableTypeString.toUtf8().data(), #endif joinedTableTypeString.length() /* characters, not bytes */); @@ -2130,6 +2182,11 @@ QStringList QODBCDriver::tables(QSql::TableType type) const else r = SQLFetch(hStmt); + if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO && r != SQL_NO_DATA) { + qWarning() << "QODBCDriver::tables failed to retrieve table/view list: (" << r << "," << qWarnODBCHandle(SQL_HANDLE_STMT, hStmt) << ")"; + return QStringList(); + } + while (r == SQL_SUCCESS) { QString fieldVal = qGetStringData(hStmt, 2, -1, false); tl.append(fieldVal); @@ -2188,21 +2245,21 @@ QSqlIndex QODBCDriver::primaryIndex(const QString& tablename) const SQL_IS_UINTEGER); r = SQLPrimaryKeys(hStmt, #ifdef UNICODE - catalog.length() == 0 ? NULL : (SQLWCHAR*)catalog.unicode(), + catalog.length() == 0 ? NULL : toSQLTCHAR(catalog).data(), #else - catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toLatin1().constData(), + catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toUtf8().data(), #endif catalog.length(), #ifdef UNICODE - schema.length() == 0 ? NULL : (SQLWCHAR*)schema.unicode(), + schema.length() == 0 ? NULL : toSQLTCHAR(schema).data(), #else - schema.length() == 0 ? NULL : (SQLCHAR*)schema.toLatin1().constData(), + schema.length() == 0 ? NULL : (SQLCHAR*)schema.toUtf8().data(), #endif schema.length(), #ifdef UNICODE - (SQLWCHAR*)table.unicode(), + toSQLTCHAR(table).data(), #else - (SQLCHAR*)table.toLatin1().constData(), + (SQLCHAR*)table.toUtf8().data(), #endif table.length() /* in characters, not in bytes */); @@ -2213,21 +2270,21 @@ QSqlIndex QODBCDriver::primaryIndex(const QString& tablename) const r = SQLSpecialColumns(hStmt, SQL_BEST_ROWID, #ifdef UNICODE - catalog.length() == 0 ? NULL : (SQLWCHAR*)catalog.unicode(), + catalog.length() == 0 ? NULL : toSQLTCHAR(catalog).data(), #else - catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toLatin1().constData(), + catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toUtf8().data(), #endif catalog.length(), #ifdef UNICODE - schema.length() == 0 ? NULL : (SQLWCHAR*)schema.unicode(), + schema.length() == 0 ? NULL : toSQLTCHAR(schema).data(), #else - schema.length() == 0 ? NULL : (SQLCHAR*)schema.toLatin1().constData(), + schema.length() == 0 ? NULL : (SQLCHAR*)schema.toUtf8().data(), #endif schema.length(), #ifdef UNICODE - (SQLWCHAR*)table.unicode(), + toSQLTCHAR(table).data(), #else - (SQLCHAR*)table.toLatin1().constData(), + (SQLCHAR*)table.toUtf8().data(), #endif table.length(), SQL_SCOPE_CURROW, @@ -2313,21 +2370,21 @@ QSqlRecord QODBCDriver::record(const QString& tablename) const SQL_IS_UINTEGER); r = SQLColumns(hStmt, #ifdef UNICODE - catalog.length() == 0 ? NULL : (SQLWCHAR*)catalog.unicode(), + catalog.length() == 0 ? NULL : toSQLTCHAR(catalog).data(), #else - catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toLatin1().constData(), + catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toUtf8().data(), #endif catalog.length(), #ifdef UNICODE - schema.length() == 0 ? NULL : (SQLWCHAR*)schema.unicode(), + schema.length() == 0 ? NULL : toSQLTCHAR(schema).data(), #else - schema.length() == 0 ? NULL : (SQLCHAR*)schema.toLatin1().constData(), + schema.length() == 0 ? NULL : (SQLCHAR*)schema.toUtf8().data(), #endif schema.length(), #ifdef UNICODE - (SQLWCHAR*)table.unicode(), + toSQLTCHAR(table).data(), #else - (SQLCHAR*)table.toLatin1().constData(), + (SQLCHAR*)table.toUtf8().data(), #endif table.length(), NULL, diff --git a/src/sql/drivers/odbc/qsql_odbc.h b/src/sql/drivers/odbc/qsql_odbc.h index 836dbd6..e739a38 100644 --- a/src/sql/drivers/odbc/qsql_odbc.h +++ b/src/sql/drivers/odbc/qsql_odbc.h @@ -68,7 +68,6 @@ # undef _MSC_VER #endif -#include <sqlucode.h> #include <sqlext.h> QT_BEGIN_HEADER diff --git a/src/sql/kernel/qsqlquery.cpp b/src/sql/kernel/qsqlquery.cpp index 6c6436f..f253c82 100644 --- a/src/sql/kernel/qsqlquery.cpp +++ b/src/sql/kernel/qsqlquery.cpp @@ -822,6 +822,9 @@ bool QSqlQuery::isForwardOnly() const scrollable. isForwardOnly() will always return the correct status of the result set. + \note Calling setForwardOnly after execution of the query will result + in unexpected results at best, and crashes at worst. + \sa isForwardOnly(), next(), seek(), QSqlResult::setForwardOnly() */ void QSqlQuery::setForwardOnly(bool forward) @@ -999,10 +1002,18 @@ bool QSqlQuery::execBatch(BatchExecutionMode mode) must be included when specifying the placeholder name. If \a paramType is QSql::Out or QSql::InOut, the placeholder will be overwritten with data from the database after the exec() call. + In this case, sufficient space must be pre-allocated to store + the result into. To bind a NULL value, use a null QVariant; for example, use \c {QVariant(QVariant::String)} if you are binding a string. + Values cannot be bound to multiple locations in the query, eg: + \code + INSERT INTO testtable (id, name, samename) VALUES (:id, :name, :name) + \endcode + Binding to name will bind to the first :name, but not the second. + \sa addBindValue(), prepare(), exec(), boundValue() boundValues() */ void QSqlQuery::bindValue(const QString& placeholder, const QVariant& val, diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index 3d63f88..6382b42 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -564,6 +564,9 @@ bool QSqlResult::isForwardOnly() const scrollable. isForwardOnly() will always return the correct status of the result set. + \note Calling setForwardOnly after execution of the query will result + in unexpected results at best, and crashes at worst. + \sa isForwardOnly(), fetchNext(), QSqlQuery::setForwardOnly() */ void QSqlResult::setForwardOnly(bool forward) @@ -707,7 +710,15 @@ void QSqlResult::bindValue(int index, const QVariant& val, QSql::ParamType param Binds the value \a val of parameter type \a paramType to the \a placeholder name in the current record (row). - Note that binding an undefined placeholder will result in undefined behavior. + Values cannot be bound to multiple locations in the query, eg: + \code + INSERT INTO testtable (id, name, samename) VALUES (:id, :name, :name) + \endcode + Binding to name will bind to the first :name, but not the second. + + \note Binding an undefined placeholder will result in undefined behavior. + + \sa QSqlQuery::bindValue() */ void QSqlResult::bindValue(const QString& placeholder, const QVariant& val, QSql::ParamType paramType) diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp index 8d9ae4f..0150515 100644 --- a/src/xml/dom/qdom.cpp +++ b/src/xml/dom/qdom.cpp @@ -3487,6 +3487,7 @@ QDomDocumentTypePrivate::QDomDocumentTypePrivate(QDomDocumentTypePrivate* n, boo if (p->isNotation()) // Dont use normal insert function since we would create infinite recursion notations->map.insertMulti(p->nodeName(), p); + p = p->next; } } diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 2ea9ca7..497e720 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -1,611 +1,23 @@ -QT = core TEMPLATE = subdirs -# These tests use host tools and therefore can't work for cross-compiled Qt. -!cross_compile:SUBDIRS += \ - headers \ - bic \ - compiler \ - compilerwarnings \ - linguist \ - maketestselftest \ - moc \ - uic \ - guiapplauncher \ - #atwrapper \ # These tests need significant updating, - #uiloader \ # they have hardcoded machine names etc. - -Q3SUBDIRS += \ - q3accel \ - q3action \ - q3actiongroup \ - q3buttongroup \ - q3canvas \ - q3checklistitem \ - q3cstring \ - q3databrowser \ - q3dateedit \ - q3datetimeedit \ - q3deepcopy \ - q3dict \ - q3dns \ - q3dockwindow \ - q3filedialog \ - q3groupbox \ - q3hbox \ - q3header \ - q3iconview \ - q3listbox \ - q3listview \ - q3listviewitemiterator \ - q3mainwindow \ - q3popupmenu \ - q3process \ - q3progressbar \ - q3progressdialog \ - q3ptrlist \ - q3richtext \ - q3scrollview \ - q3semaphore \ - q3serversocket \ - q3socket \ - q3socketdevice \ - q3sqlcursor \ - q3sqlselectcursor \ - q3stylesheet \ - q3tabdialog \ - q3table \ - q3textbrowser \ - q3textedit \ - q3textstream \ - q3timeedit \ - q3toolbar \ - q3urloperator \ - q3valuelist \ - q3valuevector \ - q3combobox \ - q3frame \ - q3uridrag \ - q3widgetstack - -!cross_compile:Q3SUBDIRS += \ - uic3 - SUBDIRS += \ -# exceptionsafety_objects \ shouldn't enable it - languagechange \ - collections \ - exceptionsafety \ - mediaobject \ -# mediaobject_wince_ds9 \ This is Windows CE only (we test the second phonon backend ds9 here) - modeltest \ - networkselftest \ - qabstractbutton \ - qabstractitemmodel \ - qabstractitemview \ - qabstractprintdialog \ - qabstractscrollarea \ - qabstractslider \ - qabstractsocket \ - qabstractspinbox \ - qabstracttextdocumentlayout \ - qabstractvideobuffer \ - qabstractvideosurface \ - qaccessibility \ - qaction \ - qactiongroup \ - qalgorithms \ - qanimationgroup \ - qapplication \ - qatomicint \ - qatomicpointer \ - qbitarray \ - qboxlayout \ - qbrush \ - qbuffer \ - qbuttongroup \ - qbytearray \ - qcache \ - qchar \ - qcheckbox \ - qclipboard \ - qcolor \ - qcolordialog \ - qcombobox \ - qcompleter \ - qcomplextext \ - qcoreapplication \ - qcryptographichash \ - qcssparser \ - qdatastream \ - qdatawidgetmapper \ - qdate \ - qdatetime \ - qdatetimeedit \ - qdebug \ - qdesktopservices \ - qdesktopwidget \ - qdial \ - qdialog \ - qdialogbuttonbox \ - qdir \ - qdirmodel \ - qdockwidget \ - qdom \ - qdoublespinbox \ - qdoublevalidator \ - qdrag \ - qerrormessage \ - qevent \ - qeventloop \ - qexplicitlyshareddatapointer \ - qfile \ - qfiledialog \ - qfiledialog2 \ - qfileinfo \ - qfilesystemwatcher \ - qfilesystemmodel \ - qflags \ - qfocusevent \ - qfocusframe \ - qfont \ - qfontcombobox \ - qfontdatabase \ - qfontdialog \ - qfontmetrics \ - qftp \ - qgetputenv \ - qglobal \ - qgraphicseffect \ - qgraphicseffectsource \ - qgraphicsgridlayout \ - qgraphicsitem \ - qgraphicsitemanimation \ - qgraphicsanchorlayout \ - qgraphicsanchorlayout1 \ - qgraphicslayout \ - qgraphicslayoutitem \ - qgraphicslinearlayout \ - qgraphicsobject \ - qgraphicspixmapitem \ - qgraphicspolygonitem \ - qgraphicsproxywidget \ - qgraphicsscene \ - qgraphicssceneindex \ - qgraphicstransform \ - qgraphicsvideoitem \ - qgraphicsview \ - qgraphicswidget \ - qgridlayout \ - qgroupbox \ - qguivariant \ - qhash \ - qheaderview \ - qhelpcontentmodel \ - qhelpenginecore \ - qhelpgenerator \ - qhelpindexmodel \ - qhelpprojectdata \ - qhostaddress \ - qhostinfo \ - qhttp \ - qhttpnetworkreply \ - qhttpnetworkconnection \ - qicon \ - qicoimageformat \ - qimage \ - qimageiohandler \ - qimagereader \ - qimagewriter \ - qinputdialog \ - qintvalidator \ - qiodevice \ - qitemdelegate \ - qitemeditorfactory \ - qitemmodel \ - qitemselectionmodel \ - qitemview \ - qkeysequence \ - qlabel \ - qlayout \ - qlcdnumber \ - qlibrary \ - qline \ - qlineedit \ - qlist \ - qlistview \ - qlistwidget \ - qlocale \ - qmainwindow \ - qmake \ - qmap \ - qmath \ - qmatrixnxn \ - qmdiarea \ - qmdisubwindow \ - qmenu \ - qmenubar \ - qmessagebox \ - qmetaobject \ - qmetatype \ - qmouseevent \ - qmouseevent_modal \ - qmovie \ - qmutex \ - qmutexlocker \ - qnativesocketengine \ - qnetworkcookie \ - qnetworkcookiejar \ - qnetworkinterface \ - qnetworkproxy \ - qnetworkrequest \ - qnetworkreply \ - qnetworkaccessmanager_and_qprogressdialog \ - qnumeric \ - qobject \ - qobjectrace \ - qcontiguouscache \ - qpaintengine \ - qpainter \ - qpainterpath \ - qpalette \ - qparallelanimationgroup \ - qpauseanimation \ - qpathclipper \ - qpen \ - qpicture \ - qpixmap \ - qpixmapcache \ - qpixmapfilter \ - qplaintextedit \ - qpoint \ - qpointer \ - qpolygon \ - qprinter \ - qprinterinfo \ - qprocess \ - qprocessenvironment \ - qprogressbar \ - qprogressdialog \ - qpropertyanimation \ - qpushbutton \ - qquaternion \ - qqueue \ - qradiobutton \ - qreadlocker \ - qreadwritelock \ - qrect \ - qregexp \ - qregexpvalidator \ - qregion \ - qresourceengine \ - qringbuffer \ - qscopedpointer \ - qscrollarea \ - qsemaphore \ - qsharedpointer \ - qsharedpointer_and_qwidget \ - qsequentialanimationgroup \ - qset \ - qsettings \ - qshortcut \ - qsignalmapper \ - qsignalspy \ - qsize \ - qsizef \ - qslider \ - qsocketnotifier \ - qsocks5socketengine \ - qsortfilterproxymodel \ - qsound \ - qaudiodeviceinfo \ - qaudioformat \ - qaudiooutput \ - qaudioinput \ - qmediacontent \ - qmediaobject \ - qmediaplayer \ - qmediaplaylist \ - qmediaplaylistnavigator \ - qmediapluginloader \ - qmediaresource \ - qmediaservice \ - qmediaserviceprovider \ - qmediatimerange \ - qvideowidget \ - qspinbox \ - qsplitter \ - qsql \ - qsqldatabase \ - qsqlerror \ - qsqlfield \ - qsqlquery \ - qsqlquerymodel \ - qsqlrecord \ - qsqlrelationaltablemodel \ - qsqltablemodel \ - qsqlthread \ - qsslcertificate \ - qsslcipher \ - qsslerror \ - qsslkey \ - qsslsocket \ - qstackedlayout \ - qstackedwidget \ - qstandarditem \ - qstandarditemmodel \ - qstate \ - qstatemachine \ - qstatictext \ - qstatusbar \ - qstl \ - qstring \ - qstringbuilder1 \ - qstringbuilder2 \ - qstringbuilder3 \ - qstringbuilder4 \ - qstringmatcher \ - qstringlist \ - qstringlistmodel \ - qstyle \ - qstyleoption \ - qstylesheetstyle \ - qsvgdevice \ - qsvggenerator \ - qsvgrenderer \ - qsyntaxhighlighter \ - qsystemtrayicon \ - qtabbar \ - qtableview \ - qtablewidget \ - qtabwidget \ - qtcpserver \ - qtcpsocket \ - qtemporaryfile \ - qtessellator \ - qtextblock \ - qtextboundaryfinder \ - qtextbrowser \ - qtextcodec \ - qtextcursor \ - qtextdocument \ - qtextdocumentfragment \ - qtextdocumentlayout \ - qtextedit \ - qtextformat \ - qtextlayout \ - qtextlist \ - qtextobject \ - qtextscriptengine \ - qtextstream \ - qtexttable \ - qthread \ - qthreadonce \ - qthreadstorage \ - qtime \ - qtimeline \ - qtimer \ - qtmd5 \ - qtoolbar \ - qtoolbox \ - qtoolbutton \ - qtooltip \ - qtranslator \ - qtransform \ - qtransformedscreen \ - qtreeview \ - qtreewidget \ - qtreewidgetitemiterator \ - qtwidgets \ - qudpsocket \ - qundogroup \ - qundostack \ - qurl \ - quuid \ - qvariant \ - qvarlengtharray \ - qvector \ - qvideoframe \ - qvideosurfaceformat \ - qvectornd \ - qwaitcondition \ - qwidget \ - qwidgetaction \ - qwindowsurface \ - qwineventnotifier \ - qwizard \ - qwmatrix \ - qworkspace \ - qwritelocker \ - qwsembedwidget \ - qwsinputmethod \ - qwswindowsystem \ - qx11info \ - qxml \ - qxmlinputsource \ - qxmlsimplereader \ - qxmlstream \ - selftests \ - symbols \ - qrand \ - utf8 \ - gestures \ - qabstractnetworkcache \ - qabstractproxymodel \ - qbytearraymatcher \ - qcalendarwidget \ - qcolumnview \ - qcommandlinkbutton \ - qdbuscontext \ - qdbusserver \ - qdbusservicewatcher \ - qdiriterator \ - qeasingcurve \ - qfileiconprovider \ - qformlayout \ - q_func_info \ - qfuture \ - qfuturewatcher \ - qguard \ - qhttpsocketengine \ - qinputcontext \ - qlocalsocket \ - qmacstyle \ - qmargins \ - qnetworkaddressentry \ - qnetworkcachemetadata \ - qnetworkconfigmanager \ - qnetworkconfiguration \ - qnetworkdiskcache \ - qnetworksession \ - qobjectperformance \ - qpainterpathstroker \ - qplugin \ - qpluginloader \ - qscrollbar \ - qsidebar \ - qsizegrip \ - qsqldriver \ - qtconcurrentfilter \ - qtconcurrentiteratekernel \ - qtconcurrentmap \ - qtconcurrentrun \ - qtconcurrentthreadengine \ - qthreadpool \ - qtipc \ - qtokenautomaton \ - qtouchevent \ - qwidget_window \ - rcc \ - windowsmobile - -contains(QT_CONFIG,opengl):SUBDIRS += qgl qglbuffer qgl_threads - -contains(QT_CONFIG,qt3support):!wince*:SUBDIRS += $$Q3SUBDIRS - -contains(QT_CONFIG,multimedia):contains(QT_CONFIG,declarative):SUBDIRS += qdeclarativeaudio \ - qdeclarativevideo - -contains(QT_CONFIG, OdfWriter):SUBDIRS += qzip qtextodfwriter -mac: { - SUBDIRS += macgui \ - macplist \ - qaccessibility_mac -} - -embedded:!wince* { - SUBDIRS += qcopchannel \ - qdirectpainter \ - qmultiscreen -} -!win32: { - SUBDIRS += qtextpiecetable -} - -symbian { - SUBDIRS += qsoftkeymanager \ - qs60mainapplication -} - -# Enable the tests specific to QtXmlPatterns. If you add a test, remember to -# update runQtXmlPatternsTests.sh too. Remember that this file, auto.pro, is -# not respected by some test system, they just have a script which loop over -# the folders. -contains(QT_CONFIG, xmlpatterns) { -SUBDIRS += checkxmlfiles \ - patternistexamplefiletree \ - patternistexamples \ - patternistheaders \ - qabstractmessagehandler \ - qabstracturiresolver \ - qabstractxmlforwarditerator \ - qabstractxmlnodemodel \ - qabstractxmlreceiver \ - qapplicationargumentparser \ - qautoptr \ - qsimplexmlnodemodel \ - qsourcelocation \ - qxmlformatter \ - qxmlitem \ - qxmlname \ - qxmlnamepool \ - qxmlnodemodelindex \ - qxmlquery \ - qxmlresultitems \ - qxmlschema \ - qxmlschemavalidator \ - qxmlserializer \ - xmlpatterns \ - xmlpatternsdiagnosticsts \ - xmlpatternsschema \ - xmlpatternsschemats \ - xmlpatternssdk \ - xmlpatternsvalidator \ - xmlpatternsview \ - xmlpatternsxqts \ - xmlpatternsxslts - -xmlpatternsdiagnosticsts.depends = xmlpatternssdk -xmlpatternsview.depends = xmlpatternssdk -xmlpatternsxslts.depends = xmlpatternssdk -xmlpatternsschemats.depends = xmlpatternssdk -} - -unix:!embedded:contains(QT_CONFIG, dbus):SUBDIRS += \ - qdbusabstractadaptor \ - qdbusabstractinterface \ - qdbusconnection \ - qdbusinterface \ - qdbuslocalcalls \ - qdbusmarshall \ - qdbusmetaobject \ - qdbusmetatype \ - qdbuspendingcall \ - qdbuspendingreply \ - qdbusperformance \ - qdbusreply \ - qdbusthreading \ - qdbusxmlparser - -contains(QT_CONFIG, script): SUBDIRS += \ - qscriptable \ - qscriptclass \ - qscriptcontext \ - qscriptcontextinfo \ - qscriptengine \ - qscriptengineagent \ - qscriptextqobject \ - qscriptjstestsuite \ - qscriptv8testsuite \ - qscriptstring \ - qscriptvalue \ - qscriptvalueiterator \ - qscriptenginedebugger - -contains(QT_CONFIG, webkit): SUBDIRS += \ - qwebframe \ - qwebpage \ - qwebhistoryinterface \ - qwebelement \ - qwebhistory - -contains(QT_CONFIG, declarative): SUBDIRS += declarative + corelib.pro \ + gui.pro \ + network.pro \ + sql.pro \ + xml.pro \ + other.pro + +!cross_compile: SUBDIRS += host.pro +contains(QT_CONFIG, qt3support):!wince*: SUBDIRS += qt3support.pro +contains(QT_CONFIG, opengl): SUBDIRS += opengl.pro +contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns.pro +unix:!embedded:contains(QT_CONFIG, dbus): SUBDIRS += dbus.pro +contains(QT_CONFIG, script): SUBDIRS += script.pro +contains(QT_CONFIG, webkit): SUBDIRS += webkit.pro +contains(QT_CONFIG, multimedia): SUBDIRS += multimedia.pro +contains(QT_CONFIG, phonon): SUBDIRS += phonon.pro +contains(QT_CONFIG, svg): SUBDIRS += svg.pro +contains(QT_CONFIG, declarative): SUBDIRS += declarative -# Following tests depends on private API -!contains(QT_CONFIG, private_tests): SUBDIRS -= \ - qcssparser \ - qgraphicssceneindex \ - qhttpnetworkconnection \ - qhttpnetworkreply \ - qnativesocketengine \ - qnetworkreply \ - qpathclipper \ - qsocketnotifier \ - qsocks5socketengine \ - qstylesheetstyle \ - qtextpiecetable \ - xmlpatternsdiagnosticsts \ - xmlpatternsview \ - xmlpatternsxqts \ - xmlpatternsxslts diff --git a/tests/auto/corelib.pro b/tests/auto/corelib.pro new file mode 100644 index 0000000..c08e372 --- /dev/null +++ b/tests/auto/corelib.pro @@ -0,0 +1,102 @@ +# The tests in this .pro file _MUST_ use QtCore only (i.e. QT=core). +# The test system is allowed to run these tests before the test of Qt has +# been compiled. + +TEMPLATE=subdirs +SUBDIRS=\ + collections \ + exceptionsafety \ + q_func_info \ + qanimationgroup \ + qatomicint \ + qatomicpointer \ + qbitarray \ + qbuffer \ + qbytearray \ + qbytearraymatcher \ + qcache \ + qchar \ + qcontiguouscache \ + qcoreapplication \ + qcryptographichash \ + qdate \ + qdatetime \ + qdebug \ + qdiriterator \ + qeasingcurve \ + qevent \ + qexplicitlyshareddatapointer \ + qfileinfo \ + qfilesystemwatcher \ + qflags \ + qfuture \ + qfuturewatcher \ + qgetputenv \ + qglobal \ + qhash \ + qlibrary \ + qline \ + qmap \ + qmargins \ + qmath \ + qmetatype \ + qmutex \ + qmutexlocker \ + qnumeric \ + qobject \ + qobjectrace \ + qplugin \ + qpluginloader \ + qpoint \ + qprocessenvironment \ + qqueue \ + qrand \ + qreadlocker \ + qreadwritelock \ + qrect \ + qregexp \ + qresourceengine \ + qringbuffer \ + qscopedpointer \ + qsemaphore \ + qsequentialanimationgroup \ + qset \ + qsharedpointer \ + qsignalspy \ + qsize \ + qsizef \ + qstate \ + qstl \ + qstring \ + qstringbuilder1 \ + qstringbuilder2 \ + qstringbuilder3 \ + qstringbuilder4 \ + qstringlist \ + qstringmatcher \ + qtconcurrentfilter \ + qtconcurrentiteratekernel \ + qtconcurrentmap \ + qtconcurrentrun \ + qtconcurrentthreadengine \ + qtemporaryfile \ + qtextboundaryfinder \ + qthread \ + qthreadonce \ + qthreadpool \ + qthreadstorage \ + qtime \ + qtimeline \ + qtimer \ + qtmd5 \ + qtokenautomaton \ + qurl \ + quuid \ + qvarlengtharray \ + qvector \ + qwaitcondition \ + qwineventnotifier \ + qwritelocker \ + selftests \ + utf8 \ + diff --git a/tests/auto/dbus.pro b/tests/auto/dbus.pro new file mode 100644 index 0000000..1c808df --- /dev/null +++ b/tests/auto/dbus.pro @@ -0,0 +1,20 @@ +TEMPLATE=subdirs +SUBDIRS=\ + qdbusabstractadaptor \ + qdbusabstractinterface \ + qdbusconnection \ + qdbuscontext \ + qdbusinterface \ + qdbuslocalcalls \ + qdbusmarshall \ + qdbusmetaobject \ + qdbusmetatype \ + qdbuspendingcall \ + qdbuspendingreply \ + qdbusperformance \ + qdbusreply \ + qdbusserver \ + qdbusservicewatcher \ + qdbusthreading \ + qdbusxmlparser \ + diff --git a/tests/auto/gui.pro b/tests/auto/gui.pro new file mode 100644 index 0000000..10a760c --- /dev/null +++ b/tests/auto/gui.pro @@ -0,0 +1,223 @@ +# The tests in this .pro file _MUST_ use QtCore, QtNetwork and QtGui only +# (i.e. QT=core gui network). +# The test system is allowed to run these tests before the rest of Qt has +# been compiled. +# +TEMPLATE=subdirs +SUBDIRS=\ + gestures \ + languagechange \ + modeltest \ + qabstractbutton \ + qabstractitemmodel \ + qabstractitemview \ + qabstractprintdialog \ + qabstractproxymodel \ + qabstractscrollarea \ + qabstractslider \ + qabstractspinbox \ + qabstracttextdocumentlayout \ + qaction \ + qactiongroup \ + qapplication \ + qboxlayout \ + qbrush \ + qbuttongroup \ + qcalendarwidget \ + qcheckbox \ + qclipboard \ + qcolor \ + qcolordialog \ + qcolumnview \ + qcommandlinkbutton \ + qcompleter \ + qcomplextext \ + qdatawidgetmapper \ + qdatetimeedit \ + qdesktopservices \ + qdesktopwidget \ + qdial \ + qdialog \ + qdialogbuttonbox \ + qdirmodel \ + qdockwidget \ + qdoublespinbox \ + qdoublevalidator \ + qdrag \ + qerrormessage \ + qfile \ + qfiledialog \ + qfiledialog2 \ + qfileiconprovider \ + qfilesystemmodel \ + qfocusframe \ + qfont \ + qfontcombobox \ + qfontdatabase \ + qfontdialog \ + qfontmetrics \ + qformlayout \ + qgraphicsanchorlayout \ + qgraphicsanchorlayout1 \ + qgraphicseffect \ + qgraphicseffectsource \ + qgraphicsgridlayout \ + qgraphicsitem \ + qgraphicsitemanimation \ + qgraphicslayout \ + qgraphicslayoutitem \ + qgraphicslinearlayout \ + qgraphicsobject \ + qgraphicspixmapitem \ + qgraphicspolygonitem \ + qgraphicsproxywidget \ + qgraphicsscene \ + qgraphicssceneindex \ + qgraphicstransform \ + qgraphicsview \ + qgraphicswidget \ + qgridlayout \ + qgroupbox \ + qguard \ + qguivariant \ + qheaderview \ + qhelpcontentmodel \ + qhelpenginecore \ + qhelpgenerator \ + qhelpindexmodel \ + qhelpprojectdata \ + qicoimageformat \ + qicon \ + qimageiohandler \ + qimagereader \ + qimagewriter \ + qinputcontext \ + qinputdialog \ + qintvalidator \ + qitemdelegate \ + qitemeditorfactory \ + qitemselectionmodel \ + qitemview \ + qkeysequence \ + qlabel \ + qlcdnumber \ + qlineedit \ + qlist \ + qlistview \ + qlistwidget \ + qlocale \ + qlocalsocket \ + qmacstyle \ + qmainwindow \ + qmatrixnxn \ + qmdisubwindow \ + qmessagebox \ + qmetaobject \ + qmouseevent_modal \ + qmovie \ + qnetworkaccessmanager_and_qprogressdialog \ + qnetworkcachemetadata \ + qnetworkdiskcache \ + qnetworkreply \ + qpaintengine \ + qpainterpath \ + qpainterpathstroker \ + qpalette \ + qparallelanimationgroup \ + qpathclipper \ + qpauseanimation \ + qpen \ + qpicture \ + qpixmapcache \ + qpixmapfilter \ + qplaintextedit \ + qpointer \ + qpolygon \ + qprinterinfo \ + qprocess \ + qprogressbar \ + qprogressdialog \ + qpropertyanimation \ + qpushbutton \ + qquaternion \ + qradiobutton \ + qregexpvalidator \ + qregion \ + qscrollarea \ + qscrollbar \ + qsharedpointer_and_qwidget \ + qshortcut \ + qsidebar \ + qsignalmapper \ + qsizegrip \ + qslider \ + qsortfilterproxymodel \ + qsound \ + qspinbox \ + qstackedlayout \ + qstackedwidget \ + qstandarditem \ + qstandarditemmodel \ + qstatemachine \ + qstatictext \ + qstatusbar \ + qstringlistmodel \ + qstyle \ + qstyleoption \ + qstylesheetstyle \ + qsyntaxhighlighter \ + qsystemtrayicon \ + qtabbar \ + qtableview \ + qtablewidget \ + qtcpserver \ + qtcpsocket \ + qtessellator \ + qtextblock \ + qtextcodec \ + qtextcursor \ + qtextdocumentfragment \ + qtextdocumentlayout \ + qtextformat \ + qtextlayout \ + qtextlist \ + qtextobject \ + qtextpiecetable \ + qtextscriptengine \ + qtextstream \ + qtexttable \ + qtipc \ + qtoolbar \ + qtoolbox \ + qtooltip \ + qtouchevent \ + qtransform \ + qtransformedscreen \ + qtranslator \ + qtreeview \ + qtreewidget \ + qtreewidgetitemiterator \ + qtwidgets \ + qudpsocket \ + qundogroup \ + qundostack \ + qvectornd \ + qwidget_window \ + qwidgetaction \ + qwindowsurface \ + qwizard \ + qwmatrix \ + qwsembedwidget \ + qwsinputmethod \ + qwswindowsystem \ + qx11info \ + +win32:SUBDIRS -= qtextpiecetable + +!contains(QT_CONFIG, private_tests): SUBDIRS -= \ + qgraphicssceneindex \ + qnetworkreply \ + qpathclipper \ + qstylesheetstyle \ + qtextpiecetable \ + diff --git a/tests/auto/host.pro b/tests/auto/host.pro new file mode 100644 index 0000000..9852d91 --- /dev/null +++ b/tests/auto/host.pro @@ -0,0 +1,19 @@ +TEMPLATE=subdirs +SUBDIRS=\ + headers \ + bic \ + compiler \ + compilerwarnings \ + linguist \ + maketestselftest \ + moc \ + uic \ + guiapplauncher \ + qmake \ + rcc \ + symbols \ + #atwrapper \ # These tests need significant updating, + #uiloader \ # they have hardcoded machine names etc. + +contains(QT_CONFIG,qt3support):SUBDIRS+=uic3 + diff --git a/tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp b/tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp index 42cc55b..a5b36ca 100644 --- a/tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp +++ b/tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp @@ -135,4 +135,64 @@ Q_OBJECT } }; +// QTBUG-8360 +namespace A { + +void foo() +{ + using namespace A; +} + +void goo() +{ + return QObject::tr("Bla"); +} + +} + + +namespace AA { +namespace B { + +using namespace AA; + +namespace C { + +class Test : public QObject { + Q_OBJECT +}; + +} + +} + +using namespace B; +using namespace C; + +void goo() +{ + AA::Test::tr("howdy?"); +} + +} + + +namespace A1 { +namespace B { + +class Test : public QObject { + Q_OBJECT +}; + +using namespace A1; + +void foo() +{ + B::B::B::Test::tr("yeeee-ha!"); +} + +} +} + + #include "main.moc" diff --git a/tests/auto/linguist/lupdate/testdata/good/namespaces/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/namespaces/project.ts.result index c1a34bd..94df9d3 100644 --- a/tests/auto/linguist/lupdate/testdata/good/namespaces/project.ts.result +++ b/tests/auto/linguist/lupdate/testdata/good/namespaces/project.ts.result @@ -2,6 +2,22 @@ <!DOCTYPE TS> <TS version="2.0"> <context> + <name>A1::B::Test</name> + <message> + <location filename="main.cpp" line="191"/> + <source>yeeee-ha!</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>AA::B::C::Test</name> + <message> + <location filename="main.cpp" line="174"/> + <source>howdy?</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>Class</name> <message> <location filename="main.cpp" line="52"/> @@ -79,4 +95,12 @@ <translation type="unfinished"></translation> </message> </context> +<context> + <name>QObject</name> + <message> + <location filename="main.cpp" line="148"/> + <source>Bla</source> + <translation type="unfinished"></translation> + </message> +</context> </TS> diff --git a/tests/auto/maketestselftest/tst_maketestselftest.cpp b/tests/auto/maketestselftest/tst_maketestselftest.cpp index 1dde44b..8264e27 100644 --- a/tests/auto/maketestselftest/tst_maketestselftest.cpp +++ b/tests/auto/maketestselftest/tst_maketestselftest.cpp @@ -50,23 +50,27 @@ class tst_MakeTestSelfTest: public QObject Q_OBJECT private slots: - void auto_dot_pro(); - void auto_dot_pro_data(); + void tests_pro_files(); + void tests_pro_files_data(); }; -/* Verify that all tests are listed somewhere in auto.pro */ -void tst_MakeTestSelfTest::auto_dot_pro() +/* Verify that all tests are listed somewhere in one of the autotest .pro files */ +void tst_MakeTestSelfTest::tests_pro_files() { static QStringList lines; if (lines.isEmpty()) { - QString filename = QString::fromLatin1(SRCDIR "/../auto.pro"); - QFile file(filename); - if (!file.open(QIODevice::ReadOnly)) { - QFAIL(qPrintable(QString("open %1: %2").arg(filename).arg(file.errorString()))); - } - while (!file.atEnd()) { - lines << file.readLine().trimmed(); + QDir dir(SRCDIR "/.."); + QStringList proFiles = dir.entryList(QStringList() << "*.pro"); + foreach (QString const& proFile, proFiles) { + QString filename = QString("%1/../%2").arg(SRCDIR).arg(proFile); + QFile file(filename); + if (!file.open(QIODevice::ReadOnly)) { + QFAIL(qPrintable(QString("open %1: %2").arg(filename).arg(file.errorString()))); + } + while (!file.atEnd()) { + lines << file.readLine().trimmed(); + } } } @@ -79,13 +83,14 @@ void tst_MakeTestSelfTest::auto_dot_pro() } QFAIL(qPrintable(QString( - "Subdir `%1' is missing from tests/auto/auto.pro\n" + "Subdir `%1' is missing from tests/auto/*.pro\n" "This means the test won't be compiled or run on any platform.\n" - "If this is intentional, please put the test name in a comment in auto.pro.").arg(subdir)) + "If this is intentional, please put the test name in a comment in one of the .pro files.").arg(subdir)) ); + } -void tst_MakeTestSelfTest::auto_dot_pro_data() +void tst_MakeTestSelfTest::tests_pro_files_data() { QTest::addColumn<QString>("subdir"); QDir dir(SRCDIR "/.."); diff --git a/tests/auto/multimedia.pro b/tests/auto/multimedia.pro new file mode 100644 index 0000000..9cfae84 --- /dev/null +++ b/tests/auto/multimedia.pro @@ -0,0 +1,25 @@ +TEMPLATE=subdirs +SUBDIRS=\ + qabstractvideobuffer \ + qabstractvideosurface \ + qaudiodeviceinfo \ + qaudioformat \ + qaudioinput \ + qaudiooutput \ + qdeclarativeaudio \ + qdeclarativevideo \ + qgraphicsvideoitem \ + qmediacontent \ + qmediaobject \ + qmediaplayer \ + qmediaplaylist \ + qmediaplaylistnavigator \ + qmediapluginloader \ + qmediaresource \ + qmediaservice \ + qmediaserviceprovider \ + qmediatimerange \ + qvideoframe \ + qvideosurfaceformat \ + qvideowidget \ + diff --git a/tests/auto/network.pro b/tests/auto/network.pro new file mode 100644 index 0000000..6b24850 --- /dev/null +++ b/tests/auto/network.pro @@ -0,0 +1,43 @@ +# The tests in this .pro file _MUST_ use QtCore and QtNetwork only +# (i.e. QT=core network). +# The test system is allowed to run these tests before the rest of Qt has +# been compiled. +TEMPLATE=subdirs +SUBDIRS=\ + networkselftest \ + qabstractnetworkcache \ + qabstractsocket \ + qeventloop \ + qftp \ + qhostaddress \ + qhostinfo \ + qhttp \ + qhttpnetworkconnection \ + qhttpnetworkreply \ + qhttpsocketengine \ + qnativesocketengine \ + qnetworkaddressentry \ + qnetworkconfigmanager \ + qnetworkconfiguration \ + qnetworkcookie \ + qnetworkcookiejar \ + qnetworkinterface \ + qnetworkproxy \ + qnetworkrequest \ + qnetworksession \ + qobjectperformance \ + qsocketnotifier \ + qsocks5socketengine \ + qsslcertificate \ + qsslcipher \ + qsslerror \ + qsslkey \ + qsslsocket \ + +contains(QT_CONFIG, private_tests): SUBDIRS -= \ + qhttpnetworkconnection \ + qhttpnetworkreply \ + qnativesocketengine \ + qsocketnotifier \ + qsocks5socketengine \ + diff --git a/tests/auto/opengl.pro b/tests/auto/opengl.pro new file mode 100644 index 0000000..7220c45 --- /dev/null +++ b/tests/auto/opengl.pro @@ -0,0 +1,6 @@ +TEMPLATE=subdirs +SUBDIRS=\ + qgl \ + qgl_threads \ + qglbuffer \ + diff --git a/tests/auto/other.pro b/tests/auto/other.pro new file mode 100644 index 0000000..e220d1a --- /dev/null +++ b/tests/auto/other.pro @@ -0,0 +1,58 @@ +# These tests don't nicely fit into one of the other .pro files. +# They are testing too many Qt modules at the same time. + +TEMPLATE=subdirs +SUBDIRS=\ +# exceptionsafety_objects \ shouldn't enable it + qaccessibility \ + qalgorithms \ + qcombobox \ + qcssparser \ + qdatastream \ + qdir \ + qfocusevent \ + qimage \ + qiodevice \ + qitemmodel \ + qlayout \ + qmdiarea \ + qmenu \ + qmenubar \ + qmouseevent \ + qpainter \ + qpixmap \ + qprinter \ + qsettings \ + qsplitter \ + qtabwidget \ + qtextbrowser \ + qtextdocument \ + qtextedit \ + qtoolbutton \ + qvariant \ + qwidget \ + qworkspace \ + windowsmobile + +contains(QT_CONFIG, OdfWriter):SUBDIRS += qzip qtextodfwriter +mac: { + SUBDIRS += macgui \ + macplist \ + qaccessibility_mac +} + +embedded:!wince* { + SUBDIRS += qcopchannel \ + qdirectpainter \ + qmultiscreen +} + +symbian { + SUBDIRS += qsoftkeymanager \ + qs60mainapplication +} + +# Following tests depends on private API +!contains(QT_CONFIG, private_tests): SUBDIRS -= \ + qcssparser \ + diff --git a/tests/auto/phonon.pro b/tests/auto/phonon.pro new file mode 100644 index 0000000..7549428 --- /dev/null +++ b/tests/auto/phonon.pro @@ -0,0 +1,5 @@ +TEMPLATE=subdirs +SUBDIRS=\ + mediaobject \ +# mediaobject_wince_ds9 \ This is Windows CE only (we test the second phonon backend ds9 here) + diff --git a/tests/auto/qdialog/tst_qdialog.cpp b/tests/auto/qdialog/tst_qdialog.cpp index 7b8213d..86f87b8 100644 --- a/tests/auto/qdialog/tst_qdialog.cpp +++ b/tests/auto/qdialog/tst_qdialog.cpp @@ -464,8 +464,8 @@ public slots: void tst_QDialog::throwInExec() { -#ifdef Q_WS_MAC - QSKIP("Qt/Mac: Throwing exceptions in exec() is not supported.", SkipAll); +#if defined(Q_WS_MAC) || (defined(Q_WS_WINCE) && defined(_ARM_)) + QSKIP("Throwing exceptions in exec() is not supported on this platform.", SkipAll); #endif int caughtExceptions = 0; try { diff --git a/tests/auto/qdom/tst_qdom.cpp b/tests/auto/qdom/tst_qdom.cpp index 76903e5..0f6cdaa 100644 --- a/tests/auto/qdom/tst_qdom.cpp +++ b/tests/auto/qdom/tst_qdom.cpp @@ -131,6 +131,7 @@ private slots: void setContentWhitespace_data() const; void taskQTBUG4595_dontAssertWhenDocumentSpecifiesUnknownEncoding() const; + void cloneDTD_QTBUG8398() const; void cleanupTestCase() const; @@ -1908,5 +1909,29 @@ void tst_QDom::taskQTBUG4595_dontAssertWhenDocumentSpecifiesUnknownEncoding() co QVERIFY(true); } +void tst_QDom::cloneDTD_QTBUG8398() const +{ + QString dtd("<?xml version='1.0' encoding='UTF-8'?>\n" + "<!DOCTYPE first [\n" + "<!ENTITY secondFile SYSTEM 'second.xml'>\n" + "<!ENTITY thirdFile SYSTEM 'third.xml'>\n" + "]>\n" + "<first/>\n"); + QDomDocument domDocument; + QVERIFY(domDocument.setContent(dtd)); + QDomDocument domDocument2 = domDocument.cloneNode(true).toDocument(); + + // for some reason, our DOM implementation reverts the order of entities + QString expected("<?xml version='1.0' encoding='UTF-8'?>\n" + "<!DOCTYPE first [\n" + "<!ENTITY thirdFile SYSTEM 'third.xml'>\n" + "<!ENTITY secondFile SYSTEM 'second.xml'>\n" + "]>\n" + "<first/>\n"); + QString output; + QTextStream stream(&output); + domDocument2.save(stream, 0); + QCOMPARE(output, expected); +} QTEST_MAIN(tst_QDom) #include "tst_qdom.moc" diff --git a/tests/auto/qftp/tst_qftp.cpp b/tests/auto/qftp/tst_qftp.cpp index 240885d..638c810 100644 --- a/tests/auto/qftp/tst_qftp.cpp +++ b/tests/auto/qftp/tst_qftp.cpp @@ -308,7 +308,7 @@ void tst_QFtp::connectToUnresponsiveHost() if (setProxy) QSKIP( "This test takes too long if we test with proxies too", SkipSingle ); - QString host = "1.2.3.4"; + QString host = "192.0.2.42"; // IP out of TEST-NET, should be unreachable uint port = 21; ftp = newFtp(); diff --git a/tests/auto/qgl/qgl.pro b/tests/auto/qgl/qgl.pro index 9116f39..5f058f9 100644 --- a/tests/auto/qgl/qgl.pro +++ b/tests/auto/qgl/qgl.pro @@ -6,6 +6,8 @@ load(qttest_p4) requires(contains(QT_CONFIG,opengl)) QT += opengl +contains(QT_CONFIG,egl):DEFINES += QGL_EGL + SOURCES += tst_qgl.cpp RESOURCES = qgl.qrc diff --git a/tests/auto/qgl/tst_qgl.cpp b/tests/auto/qgl/tst_qgl.cpp index 6ffe2a7..d89e463 100644 --- a/tests/auto/qgl/tst_qgl.cpp +++ b/tests/auto/qgl/tst_qgl.cpp @@ -1073,8 +1073,7 @@ void tst_QGL::glFBOSimpleRendering() QGLFramebufferObjectFormat fboFormat; fboFormat.setAttachment(QGLFramebufferObject::NoAttachment); - // Don't complicate things by using NPOT: - QGLFramebufferObject *fbo = new QGLFramebufferObject(256, 128, fboFormat); + QGLFramebufferObject *fbo = new QGLFramebufferObject(200, 100, fboFormat); fbo->bind(); @@ -1266,7 +1265,7 @@ protected: widgetPainterBeginOk = widgetPainter.begin(this); QGLFramebufferObjectFormat fboFormat; fboFormat.setAttachment(QGLFramebufferObject::NoAttachment); - QGLFramebufferObject *fbo = new QGLFramebufferObject(128, 128, fboFormat); + QGLFramebufferObject *fbo = new QGLFramebufferObject(100, 100, fboFormat); QPainter fboPainter; fboPainterBeginOk = fboPainter.begin(fbo); @@ -1290,7 +1289,7 @@ void tst_QGL::glFBOUseInGLWidget() #ifdef Q_WS_QWS w.setWindowFlags(Qt::FramelessWindowHint); #endif - w.resize(128, 128); + w.resize(100, 100); w.show(); #ifdef Q_WS_X11 @@ -1402,6 +1401,10 @@ void tst_QGL::glWidgetRenderPixmap() QImage reference(fb.size(), QImage::Format_RGB32); reference.fill(0xffff0000); +#ifdef QGL_EGL + QSKIP("renderPixmap() not yet supported under EGL", SkipAll); +#endif + QFUZZY_COMPARE_IMAGES(fb, reference); } diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp index 795431b..1007d61 100644 --- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp +++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp @@ -72,6 +72,7 @@ private slots: void drawPixmapItem(); void deviceCoordinateTranslateCaching(); void inheritOpacity(); + void dropShadowClipping(); }; void tst_QGraphicsEffect::initTestCase() @@ -590,6 +591,28 @@ void tst_QGraphicsEffect::inheritOpacity() QTRY_VERIFY(item->numRepaints > numRepaints); } +void tst_QGraphicsEffect::dropShadowClipping() +{ + QImage img(128, 128, QImage::Format_ARGB32_Premultiplied); + img.fill(0xffffffff); + + QGraphicsScene scene; + QGraphicsRectItem *item = new QGraphicsRectItem(-5, -500, 10, 1000); + item->setGraphicsEffect(new QGraphicsDropShadowEffect); + item->setPen(Qt::NoPen); + item->setBrush(Qt::red); + + scene.addItem(item); + + QPainter p(&img); + scene.render(&p, img.rect(), QRect(-64, -64, 128, 128)); + p.end(); + + for (int y = 1; y < img.height(); ++y) + for (int x = 0; x < img.width(); ++x) + QCOMPARE(img.pixel(x, y), img.pixel(x, y-1)); +} + QTEST_MAIN(tst_QGraphicsEffect) #include "tst_qgraphicseffect.moc" diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 7c1b97e..4d9f23f 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -438,6 +438,7 @@ private slots: void QTBUG_6738_missingUpdateWithSetParent(); void QTBUG_7714_fullUpdateDiscardingOpacityUpdate2(); void QT_2653_fullUpdateDiscardingOpacityUpdate(); + void QT_2649_focusScope(); private: QList<QGraphicsItem *> paintedItems; @@ -10002,5 +10003,72 @@ void tst_QGraphicsItem::QTBUG_7714_fullUpdateDiscardingOpacityUpdate2() QTRY_COMPARE(view.repaints, 1); } +void tst_QGraphicsItem::QT_2649_focusScope() +{ + QGraphicsScene *scene = new QGraphicsScene; + + QGraphicsRectItem *subFocusItem = new QGraphicsRectItem; + subFocusItem->setFlags(QGraphicsItem::ItemIsFocusable); + subFocusItem->setFocus(); + QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem); + + QGraphicsRectItem *scope = new QGraphicsRectItem; + scope->setFlags(QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemIsFocusScope); + scope->setFocus(); + subFocusItem->setParentItem(scope); + QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0); + QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem); + + QGraphicsRectItem *rootItem = new QGraphicsRectItem; + rootItem->setFlags(QGraphicsItem::ItemIsFocusable); + scope->setParentItem(rootItem); + QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0); + QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0); + QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem); + + scene->addItem(rootItem); + + QEvent windowActivate(QEvent::WindowActivate); + qApp->sendEvent(scene, &windowActivate); + scene->setFocus(); + + QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0); + QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0); + QVERIFY(subFocusItem->hasFocus()); + + scope->hide(); + + QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)0); + QCOMPARE(scope->focusItem(), (QGraphicsItem *)0); + QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)0); + QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0); + QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0); + QVERIFY(!subFocusItem->hasFocus()); + + scope->show(); + + QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0); + QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem); + QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0); + QVERIFY(subFocusItem->hasFocus()); + + // This should not crash + scope->hide(); + delete scene; +} + QTEST_MAIN(tst_QGraphicsItem) #include "tst_qgraphicsitem.moc" diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index c77f76d..1c19fab 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -219,6 +219,7 @@ private slots: void inputMethodSensitivity(); void inputContextReset(); void indirectPainting(); + void compositionModeInDrawBackground(); // task specific tests below me void task172231_untransformableItems(); @@ -3825,6 +3826,39 @@ void tst_QGraphicsView::indirectPainting() QTRY_VERIFY(scene.drawCount > 0); } +void tst_QGraphicsView::compositionModeInDrawBackground() +{ + class MyView : public QGraphicsView + { public: + MyView(QGraphicsScene *scene) : QGraphicsView(scene), + painted(false), compositionMode(QPainter::CompositionMode_SourceOver) {} + bool painted; + QPainter::CompositionMode compositionMode; + void drawBackground(QPainter *painter, const QRectF &) + { + compositionMode = painter->compositionMode(); + painted = true; + } + }; + + QGraphicsScene dummy; + MyView view(&dummy); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Make sure the painter's composition mode is SourceOver in drawBackground. + QTRY_VERIFY(view.painted); + QCOMPARE(view.compositionMode, QPainter::CompositionMode_SourceOver); + + view.painted = false; + view.setCacheMode(QGraphicsView::CacheBackground); + view.viewport()->update(); + + // Make sure the painter's composition mode is SourceOver in drawBackground + // with background cache enabled. + QTRY_VERIFY(view.painted); + QCOMPARE(view.compositionMode, QPainter::CompositionMode_SourceOver); +} void tst_QGraphicsView::task253415_reconnectUpdateSceneOnSceneChanged() { QGraphicsView view; diff --git a/tests/auto/qhostinfo/tst_qhostinfo.cpp b/tests/auto/qhostinfo/tst_qhostinfo.cpp index d5411d0..4282062 100644 --- a/tests/auto/qhostinfo/tst_qhostinfo.cpp +++ b/tests/auto/qhostinfo/tst_qhostinfo.cpp @@ -72,6 +72,7 @@ #endif #include <qhostinfo.h> +#include "private/qhostinfo_p.h" #if !defined(QT_NO_GETADDRINFO) # if !defined(Q_OS_WINCE) @@ -108,10 +109,11 @@ public: public slots: void init(); void cleanup(); + void initTestCase(); + private slots: void getSetCheck(); void staticInformation(); - void initTestCase(); void lookupIPv4_data(); void lookupIPv4(); void lookupIPv6_data(); @@ -128,6 +130,8 @@ private slots: void multipleSameLookups(); void multipleDifferentLookups(); + void cache(); + protected slots: void resultsReady(const QHostInfo &); @@ -205,10 +209,21 @@ void tst_QHostInfo::initTestCase() // We have IPv6 support ipv6Available = true; } + + + // run each testcase with and without test enabled + QTest::addColumn<bool>("cache"); + QTest::newRow("WithCache") << true; + QTest::newRow("WithoutCache") << false; } void tst_QHostInfo::init() { + // delete the cache so inidividual testcase results are independant from each other + qt_qhostinfo_clear_cache(); + + QFETCH_GLOBAL(bool, cache); + qt_qhostinfo_enable_cache(cache); } void tst_QHostInfo::cleanup() @@ -458,6 +473,45 @@ void tst_QHostInfo::multipleDifferentLookups() QTRY_VERIFY(lookupsDoneCounter == COUNT); } +void tst_QHostInfo::cache() +{ + QFETCH_GLOBAL(bool, cache); + if (!cache) + return; // test makes only sense when cache enabled + + // reset slot counter + lookupsDoneCounter = 0; + + // lookup once, wait in event loop, result should not come directly. + bool valid = true; + int id = -1; + QHostInfo result = qt_qhostinfo_lookup("localhost", this, SLOT(resultsReady(QHostInfo)), &valid, &id); + QTestEventLoop::instance().enterLoop(5); + QVERIFY(!QTestEventLoop::instance().timeout()); + QVERIFY(valid == false); + QVERIFY(result.addresses().isEmpty()); + + // loopkup second time, result should come directly + valid = false; + result = qt_qhostinfo_lookup("localhost", this, SLOT(resultsReady(QHostInfo)), &valid, &id); + QVERIFY(valid == true); + QVERIFY(!result.addresses().isEmpty()); + + // clear the cache + qt_qhostinfo_clear_cache(); + + // lookup third time, result should not come directly. + valid = true; + result = qt_qhostinfo_lookup("localhost", this, SLOT(resultsReady(QHostInfo)), &valid, &id); + QTestEventLoop::instance().enterLoop(5); + QVERIFY(!QTestEventLoop::instance().timeout()); + QVERIFY(valid == false); + QVERIFY(result.addresses().isEmpty()); + + // the slot should have been called 2 times. + QVERIFY(lookupsDoneCounter == 2); +} + void tst_QHostInfo::resultsReady(const QHostInfo &hi) { lookupDone = true; diff --git a/tests/auto/qicon/tst_qicon.cpp b/tests/auto/qicon/tst_qicon.cpp index f861e40..fae9cc0 100644 --- a/tests/auto/qicon/tst_qicon.cpp +++ b/tests/auto/qicon/tst_qicon.cpp @@ -86,8 +86,14 @@ private slots: private: QString oldCurrentDir; + + const static QIcon staticIcon; }; +// Creating an icon statically should not cause a crash. +// But we do not officially support this. See QTBUG-8666 +const QIcon tst_QIcon::staticIcon = QIcon::fromTheme("edit-find"); + void tst_QIcon::init() { QString srcdir(QLatin1String(SRCDIR)); diff --git a/tests/auto/qobject/tst_qobject.cpp b/tests/auto/qobject/tst_qobject.cpp index c8f846e..0161a68 100644 --- a/tests/auto/qobject/tst_qobject.cpp +++ b/tests/auto/qobject/tst_qobject.cpp @@ -2835,6 +2835,16 @@ void tst_QObject::installEventFilter() QVERIFY(spy.eventList().isEmpty()); } +class EmitThread : public QThread +{ Q_OBJECT +public: + void run(void) { + emit work(); + } +signals: + void work(); +}; + class DeleteObject : public QObject { Q_OBJECT @@ -2900,6 +2910,16 @@ void tst_QObject::deleteSelfInSlot() QVERIFY(thread.wait(10000)); } + + { + EmitThread sender; + DeleteObject *receiver = new DeleteObject(); + connect(&sender, SIGNAL(work()), receiver, SLOT(deleteSelf()), Qt::DirectConnection); + QPointer<DeleteObject> p = receiver; + sender.start(); + QVERIFY(sender.wait(10000)); + QVERIFY(p.isNull()); + } } class DisconnectObject : public QObject diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp index 41b9734..5339132 100644 --- a/tests/auto/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp @@ -205,6 +205,13 @@ private slots: void QTBUG_6618(); void QTBUG_6852_data() { generic_data("QMYSQL"); } void QTBUG_6852(); + void QTBUG_5765_data() { generic_data("QMYSQL"); } + void QTBUG_5765(); + +#if 0 + void benchmark_data() { generic_data(); } + void benchmark(); +#endif private: // returns all database connections @@ -309,7 +316,14 @@ void tst_QSqlQuery::dropTestTables( QSqlDatabase db ) << qTableName( "blobstest" ) << qTableName( "oraRowId" ) << qTableName( "qtest_batch" ) - << qTableName(QLatin1String("bug6421")).toUpper(); + << qTableName("bug6421").toUpper() + << qTableName("bug5765") + << qTableName("bug6852") + << qTableName( "qtest_lockedtable" ) + << qTableName( "Planet" ) + << qTableName( "task_250026" ) + << qTableName( "task_234422" ) + << qTableName("test141895"); if ( db.driverName().startsWith("QPSQL") ) tablenames << qTableName("task_233829"); @@ -320,19 +334,11 @@ void tst_QSqlQuery::dropTestTables( QSqlDatabase db ) if ( tst_Databases::isSqlServer( db ) || db.driverName().startsWith( "QOCI" ) ) tablenames << qTableName( "qtest_longstr" ); - tablenames << qTableName( "qtest_lockedtable" ); - - tablenames << qTableName( "Planet" ); + if (tst_Databases::isSqlServer( db )) + db.exec("DROP PROCEDURE " + qTableName("test141895_proc")); - tablenames << qTableName( "task_250026" ); - tablenames << qTableName( "task_234422" ); - - if (tst_Databases::isSqlServer( db )) { - QSqlQuery q( db ); - q.exec("DROP PROCEDURE " + qTableName("test141895_proc")); - } - - tablenames << qTableName("test141895"); + if (tst_Databases::isMySQL( db )) + db.exec("DROP PROCEDURE IF EXISTS "+qTableName("bug6852_proc")); tst_Databases::safeDropTables( db, tablenames ); @@ -2996,10 +3002,9 @@ void tst_QSqlQuery::QTBUG_6852() QSKIP( "Test requires MySQL >= 5.0", SkipSingle ); QSqlQuery q(db); - QString tableName(qTableName(QLatin1String("bug6421"))), procName(qTableName(QLatin1String("bug6421_proc"))); + QString tableName(qTableName(QLatin1String("bug6852"))), procName(qTableName(QLatin1String("bug6852_proc"))); QVERIFY_SQL(q, exec("DROP PROCEDURE IF EXISTS "+procName)); - tst_Databases::safeDropTable(db, tableName); QVERIFY_SQL(q, exec("CREATE TABLE "+tableName+"(\n" "MainKey INT NOT NULL,\n" "OtherTextCol VARCHAR(45) NOT NULL,\n" @@ -3022,6 +3027,72 @@ void tst_QSqlQuery::QTBUG_6852() QCOMPARE(q.value(1).toString(), QLatin1String("Disabled")); } +void tst_QSqlQuery::QTBUG_5765() +{ + QFETCH( QString, dbName ); + QSqlDatabase db = QSqlDatabase::database( dbName ); + CHECK_DATABASE( db ); + if ( tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 1 ).toFloat()<4.1 ) + QSKIP( "Test requires MySQL >= 4.1", SkipSingle ); + + QSqlQuery q(db); + QString tableName(qTableName(QLatin1String("bug5765"))); + + QVERIFY_SQL(q, exec("CREATE TABLE "+tableName+"(testval TINYINT(1) DEFAULT 0)")); + q.prepare("INSERT INTO "+tableName+" SET testval = :VALUE"); + q.bindValue(":VALUE", 1); + QVERIFY_SQL(q, exec()); + q.bindValue(":VALUE", 12); + QVERIFY_SQL(q, exec()); + q.bindValue(":VALUE", 123); + QVERIFY_SQL(q, exec()); + QString sql="select testval from "+tableName; + QVERIFY_SQL(q, exec(sql)); + QVERIFY_SQL(q, next()); + QCOMPARE(q.value(0).toInt(), 1); + QVERIFY_SQL(q, next()); + QCOMPARE(q.value(0).toInt(), 12); + QVERIFY_SQL(q, next()); + QCOMPARE(q.value(0).toInt(), 123); + QVERIFY_SQL(q, prepare(sql)); + QVERIFY_SQL(q, exec()); + QVERIFY_SQL(q, next()); + QCOMPARE(q.value(0).toInt(), 1); + QVERIFY_SQL(q, next()); + QCOMPARE(q.value(0).toInt(), 12); + QVERIFY_SQL(q, next()); + QCOMPARE(q.value(0).toInt(), 123); +} + +#if 0 +void tst_QSqlQuery::benchmark() +{ + QFETCH( QString, dbName ); + QSqlDatabase db = QSqlDatabase::database( dbName ); + CHECK_DATABASE( db ); + if ( tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 ) + QSKIP( "Test requires MySQL >= 5.0", SkipSingle ); + + QSqlQuery q(db); + QString tableName(qTableName(QLatin1String("benchmark"))); + + tst_Databases::safeDropTable( db, tableName ); + + QVERIFY_SQL(q, exec("CREATE TABLE "+tableName+"(\n" + "MainKey INT NOT NULL,\n" + "OtherTextCol VARCHAR(45) NOT NULL,\n" + "PRIMARY KEY(`MainKey`))")); + + int i=1; + + QBENCHMARK { + QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" VALUES("+QString::number(i)+", \"Value"+QString::number(i)+"\")")); + i++; + } + + tst_Databases::safeDropTable( db, tableName ); +} +#endif QTEST_MAIN( tst_QSqlQuery ) #include "tst_qsqlquery.moc" diff --git a/tests/auto/qsslsocket/qsslsocket.pro b/tests/auto/qsslsocket/qsslsocket.pro index 147175e..541b2d9 100644 --- a/tests/auto/qsslsocket/qsslsocket.pro +++ b/tests/auto/qsslsocket/qsslsocket.pro @@ -32,3 +32,5 @@ wince* { } else { DEFINES += SRCDIR=\\\"$$PWD/\\\" } + +requires(contains(QT_CONFIG,private_tests)) diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index abd3237..ad2b50d 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -54,6 +54,8 @@ #include <QNetworkProxy> #include <QAuthenticator> +#include "private/qhostinfo_p.h" + #include "../network-settings.h" Q_DECLARE_METATYPE(QAbstractSocket::SocketState) @@ -288,6 +290,8 @@ void tst_QSslSocket::init() } QNetworkProxy::setApplicationProxy(proxy); } + + qt_qhostinfo_clear_cache(); } void tst_QSslSocket::cleanup() @@ -477,7 +481,7 @@ void tst_QSslSocket::simpleConnectWithIgnore() // Start connecting socket.connectToHost(QtNetworkSettings::serverName(), 993); - QCOMPARE(socket.state(), QAbstractSocket::HostLookupState); + QVERIFY(socket.state() != QAbstractSocket::UnconnectedState); // something must be in progress enterLoop(10); // Start handshake diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp index dc37c42..d79ebb9 100644 --- a/tests/auto/qstring/tst_qstring.cpp +++ b/tests/auto/qstring/tst_qstring.cpp @@ -3646,7 +3646,10 @@ void tst_QString::section_data() << QString("\\b") << 3 << 3 << int(QString::SectionDefault) << QString("is") << true; - + QTest::newRow( "task257941-rx" ) << QString("99.0 42.3") + << QString("\\s*[AaBb]\\s*") << 1 << 1 + << int(QString::SectionIncludeLeadingSep) + << QString() << true; } void tst_QString::section() diff --git a/tests/auto/qstringmatcher/qstringmatcher.pro b/tests/auto/qstringmatcher/qstringmatcher.pro index e478d4e..2c15097 100644 --- a/tests/auto/qstringmatcher/qstringmatcher.pro +++ b/tests/auto/qstringmatcher/qstringmatcher.pro @@ -1,5 +1,5 @@ load(qttest_p4) SOURCES += tst_qstringmatcher.cpp - +QT = core DEFINES += QT_NO_CAST_TO_ASCII diff --git a/tests/auto/qt3support.pro b/tests/auto/qt3support.pro new file mode 100644 index 0000000..3657cfe --- /dev/null +++ b/tests/auto/qt3support.pro @@ -0,0 +1,54 @@ +TEMPLATE=subdirs +SUBDIRS=\ + q3accel \ + q3action \ + q3actiongroup \ + q3buttongroup \ + q3canvas \ + q3checklistitem \ + q3cstring \ + q3databrowser \ + q3dateedit \ + q3datetimeedit \ + q3deepcopy \ + q3dict \ + q3dns \ + q3dockwindow \ + q3filedialog \ + q3groupbox \ + q3hbox \ + q3header \ + q3iconview \ + q3listbox \ + q3listview \ + q3listviewitemiterator \ + q3mainwindow \ + q3popupmenu \ + q3process \ + q3progressbar \ + q3progressdialog \ + q3ptrlist \ + q3richtext \ + q3scrollview \ + q3semaphore \ + q3serversocket \ + q3socket \ + q3socketdevice \ + q3sqlcursor \ + q3sqlselectcursor \ + q3stylesheet \ + q3tabdialog \ + q3table \ + q3textbrowser \ + q3textedit \ + q3textstream \ + q3timeedit \ + q3toolbar \ + q3urloperator \ + q3valuelist \ + q3valuevector \ + q3combobox \ + q3frame \ + q3uridrag \ + q3widgetstack + diff --git a/tests/auto/qtableview/tst_qtableview.cpp b/tests/auto/qtableview/tst_qtableview.cpp index 430712c..35fba52 100644 --- a/tests/auto/qtableview/tst_qtableview.cpp +++ b/tests/auto/qtableview/tst_qtableview.cpp @@ -199,6 +199,8 @@ private slots: void taskQTBUG_5062_spansInconsistency(); void taskQTBUG_4516_clickOnRichTextLabel(); void taskQTBUG_5237_wheelEventOnHeader(); + void taskQTBUG_8585_crashForNoGoodReason(); + void taskQTBUG_7774_RtoLVisualRegionForSelection(); void mouseWheel_data(); void mouseWheel(); @@ -3948,5 +3950,75 @@ void tst_QTableView::taskQTBUG_5237_wheelEventOnHeader() QVERIFY(sbValueBefore != sbValueAfter); } +class TestTableView : public QTableView { +Q_OBJECT +public: + TestTableView(QWidget *parent = 0) : QTableView(parent) + { + connect(this, SIGNAL(entered(const QModelIndex&)), this, SLOT(openEditor(const QModelIndex&))); + } + ~TestTableView(){} +public slots: + void onDataChanged() + { + for (int i = 0; i < model()->rowCount(); i++) { + setRowHidden(i, model()->data(model()->index(i, 0)).toBool()); + } + } + + void openEditor(const QModelIndex& index) + { openPersistentEditor(index); } +}; + + +void tst_QTableView::taskQTBUG_8585_crashForNoGoodReason() +{ + QStandardItemModel model; + model.insertColumn(0, QModelIndex()); + for(int i = 0; i < 20; i++) + { + model.insertRow(i); + } + + TestTableView w; + w.setMouseTracking(true); + w.setModel(&model); + connect(&model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), &w, SLOT(onDataChanged())); + w.show(); + QTest::qWaitForWindowShown(&w); + for (int i = 0; i < 10; i++) + { + QTest::mouseMove(w.viewport(), QPoint(50, 20)); + w.model()->setData(w.indexAt(QPoint(50, 20)), true); + QTest::mouseMove(w.viewport(), QPoint(50, 25)); + } +} + + +class TableView7774 : public QTableView +{ +public: + QRegion visualRegionForSelection(const QItemSelection &selection) const + { + return QTableView::visualRegionForSelection(selection); + } +}; + +void tst_QTableView::taskQTBUG_7774_RtoLVisualRegionForSelection() +{ + TableView7774 view; + QStandardItemModel model(5,5); + view.setModel(&model); + view.setLayoutDirection(Qt::RightToLeft); + view.show(); + QTest::qWaitForWindowShown(&view); + + QItemSelectionRange range(model.index(2, 0), model.index(2, model.columnCount() - 1)); + QItemSelection selection; + selection << range; + QRegion region = view.visualRegionForSelection(selection); + QCOMPARE(region.rects().at(0), view.visualRect(range.topLeft()) | view.visualRect(range.bottomRight())); +} + QTEST_MAIN(tst_QTableView) #include "tst_qtableview.moc" diff --git a/tests/auto/qtcpsocket/qtcpsocket.pro b/tests/auto/qtcpsocket/qtcpsocket.pro index 4bbec23..3d4eba3 100644 --- a/tests/auto/qtcpsocket/qtcpsocket.pro +++ b/tests/auto/qtcpsocket/qtcpsocket.pro @@ -3,3 +3,6 @@ TEMPLATE = subdirs !wince*: SUBDIRS = test stressTest wince*|symbian*|vxworks* : SUBDIRS = test + + +requires(contains(QT_CONFIG,private_tests)) diff --git a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp index 12686bb..5a209c2 100644 --- a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp @@ -92,6 +92,8 @@ #include <unistd.h> #endif +#include "private/qhostinfo_p.h" + #include "../network-settings.h" Q_DECLARE_METATYPE(QAbstractSocket::SocketError) @@ -316,6 +318,8 @@ void tst_QTcpSocket::init() } QNetworkProxy::setApplicationProxy(proxy); } + + qt_qhostinfo_clear_cache(); } QTcpSocket *tst_QTcpSocket::newSocket() const @@ -1060,7 +1064,9 @@ void tst_QTcpSocket::disconnectWhileLookingUp() // just connect and disconnect, then make sure nothing weird happened QTcpSocket *socket = newSocket(); socket->connectToHost(QtNetworkSettings::serverName(), 21); - QVERIFY(socket->state() == QAbstractSocket::HostLookupState); + + // check that connect is in progress + QVERIFY(socket->state() != QAbstractSocket::UnconnectedState); QFETCH(bool, doClose); if (doClose) { @@ -1666,7 +1672,10 @@ void tst_QTcpSocket::waitForConnectedInHostLookupSlot() connect(tmpSocket, SIGNAL(hostFound()), this, SLOT(hostLookupSlot())); tmpSocket->connectToHost(QtNetworkSettings::serverName(), 143); - loop.exec(); + // only execute the loop if not already connected + if (tmpSocket->state() != QAbstractSocket::ConnectedState) + loop.exec(); + QCOMPARE(timerSpy.count(), 0); delete tmpSocket; diff --git a/tests/auto/qvariant/tst_qvariant.cpp b/tests/auto/qvariant/tst_qvariant.cpp index 1a4182f..98d7436 100644 --- a/tests/auto/qvariant/tst_qvariant.cpp +++ b/tests/auto/qvariant/tst_qvariant.cpp @@ -1968,6 +1968,10 @@ void tst_QVariant::operator_eq_eq_data() QTest::newRow("HashSecondLarger") << QVariant(hash1) << QVariant(hash2) << false; } + + QTest::newRow( "UserType" ) << QVariant(QVariant::UserType) << QVariant(QVariant::UserType) << true; + QVariant mUserType(QVariant::UserType); + QTest::newRow( "Shared UserType" ) << mUserType << mUserType << true; } void tst_QVariant::operator_eq_eq() diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index b59017b..abd9604 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -8829,7 +8829,15 @@ void tst_QWidget::translucentWidget() #endif QTest::qWait(200); - QPixmap widgetSnapshot = QPixmap::grabWindow(label.winId()); + QPixmap widgetSnapshot; + +#ifdef Q_WS_WIN + QWidget *desktopWidget = QApplication::desktop()->screen(0); + if (QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA) + widgetSnapshot = QPixmap::grabWindow(desktopWidget->winId(), 0,0, label.width(), label.height()); + else +#endif + widgetSnapshot = QPixmap::grabWindow(label.winId()); QImage actual = widgetSnapshot.toImage().convertToFormat(QImage::Format_RGB32); QImage expected = pm.toImage().convertToFormat(QImage::Format_RGB32); QCOMPARE(actual.size(),expected.size()); diff --git a/tests/auto/script.pro b/tests/auto/script.pro new file mode 100644 index 0000000..06f51b5 --- /dev/null +++ b/tests/auto/script.pro @@ -0,0 +1,16 @@ +TEMPLATE=subdirs +SUBDIRS=\ + qscriptable \ + qscriptclass \ + qscriptcontext \ + qscriptcontextinfo \ + qscriptengine \ + qscriptengineagent \ + qscriptenginedebugger \ + qscriptextqobject \ + qscriptjstestsuite \ + qscriptstring \ + qscriptv8testsuite \ + qscriptvalue \ + qscriptvalueiterator \ + diff --git a/tests/auto/sql.pro b/tests/auto/sql.pro new file mode 100644 index 0000000..7cfd137 --- /dev/null +++ b/tests/auto/sql.pro @@ -0,0 +1,14 @@ +TEMPLATE=subdirs +SUBDIRS=\ + qsql \ + qsqldatabase \ + qsqldriver \ + qsqlerror \ + qsqlfield \ + qsqlquery \ + qsqlquerymodel \ + qsqlrecord \ + qsqlrelationaltablemodel \ + qsqltablemodel \ + qsqlthread \ + diff --git a/tests/auto/svg.pro b/tests/auto/svg.pro new file mode 100644 index 0000000..cb3cccb --- /dev/null +++ b/tests/auto/svg.pro @@ -0,0 +1,6 @@ +TEMPLATE=subdirs +SUBDIRS=\ + qsvgdevice \ + qsvggenerator \ + qsvgrenderer \ + diff --git a/tests/auto/webkit.pro b/tests/auto/webkit.pro new file mode 100644 index 0000000..8c7ccba --- /dev/null +++ b/tests/auto/webkit.pro @@ -0,0 +1,8 @@ +TEMPLATE=subdirs +SUBDIRS=\ + qwebelement \ + qwebframe \ + qwebhistory \ + qwebhistoryinterface \ + qwebpage \ + diff --git a/tests/auto/xml.pro b/tests/auto/xml.pro new file mode 100644 index 0000000..76afec8 --- /dev/null +++ b/tests/auto/xml.pro @@ -0,0 +1,8 @@ +TEMPLATE=subdirs +SUBDIRS=\ + qdom \ + qxml \ + qxmlinputsource \ + qxmlsimplereader \ + qxmlstream \ + diff --git a/tests/auto/xmlpatterns.pro b/tests/auto/xmlpatterns.pro new file mode 100644 index 0000000..f670266 --- /dev/null +++ b/tests/auto/xmlpatterns.pro @@ -0,0 +1,47 @@ +TEMPLATE=subdirs +SUBDIRS=\ + checkxmlfiles \ + patternistexamplefiletree \ + patternistexamples \ + patternistheaders \ + qabstractmessagehandler \ + qabstracturiresolver \ + qabstractxmlforwarditerator \ + qabstractxmlnodemodel \ + qabstractxmlreceiver \ + qapplicationargumentparser \ + qautoptr \ + qsimplexmlnodemodel \ + qsourcelocation \ + qxmlformatter \ + qxmlitem \ + qxmlname \ + qxmlnamepool \ + qxmlnodemodelindex \ + qxmlquery \ + qxmlresultitems \ + qxmlschema \ + qxmlschemavalidator \ + qxmlserializer \ + xmlpatterns \ + xmlpatternsdiagnosticsts \ + xmlpatternsschema \ + xmlpatternsschemats \ + xmlpatternssdk \ + xmlpatternsvalidator \ + xmlpatternsview \ + xmlpatternsxqts \ + xmlpatternsxslts \ + +xmlpatternsdiagnosticsts.depends = xmlpatternssdk +xmlpatternsview.depends = xmlpatternssdk +xmlpatternsxslts.depends = xmlpatternssdk +xmlpatternsschemats.depends = xmlpatternssdk + +!contains(QT_CONFIG, private_tests): SUBDIRS -= \ + xmlpatternsdiagnosticsts \ + xmlpatternsview \ + xmlpatternssdk \ + xmlpatternsxqts \ + xmlpatternsxslts \ + diff --git a/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp b/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp index 1238804..4fe4723 100644 --- a/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp +++ b/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp @@ -165,7 +165,7 @@ private slots: WIN32_FIND_DATA fd; HANDLE hSearch = FindFirstFileW(appendedPath, &fd); - QVERIFY(hSearch == INVALID_HANDLE_VALUE); + QVERIFY(hSearch != INVALID_HANDLE_VALUE); QBENCHMARK { do { diff --git a/tests/benchmarks/corelib/io/qfile/main.cpp b/tests/benchmarks/corelib/io/qfile/main.cpp index 103b77c..2dc0e86 100644 --- a/tests/benchmarks/corelib/io/qfile/main.cpp +++ b/tests/benchmarks/corelib/io/qfile/main.cpp @@ -175,7 +175,10 @@ void tst_qfile::cleanupTestCase() void tst_qfile::readBigFile_QFile() { readBigFile(); } void tst_qfile::readBigFile_QFSFileEngine() { readBigFile(); } -void tst_qfile::readBigFile_posix() { readBigFile(); } +void tst_qfile::readBigFile_posix() +{ + readBigFile(); +} void tst_qfile::readBigFile_Win32() { readBigFile(); } void tst_qfile::readBigFile_QFile_data() @@ -476,8 +479,14 @@ void tst_qfile::open() void tst_qfile::readSmallFiles_QFile() { readSmallFiles(); } void tst_qfile::readSmallFiles_QFSFileEngine() { readSmallFiles(); } -void tst_qfile::readSmallFiles_posix() { readSmallFiles(); } -void tst_qfile::readSmallFiles_Win32() { readSmallFiles(); } +void tst_qfile::readSmallFiles_posix() +{ + readSmallFiles(); +} +void tst_qfile::readSmallFiles_Win32() +{ + readSmallFiles(); +} void tst_qfile::readSmallFiles_QFile_data() { @@ -534,7 +543,7 @@ void tst_qfile::createSmallFiles() dir.cd("tst"); tmpDirName = dir.absolutePath(); -#ifdef Q_OS_SYMBIAN +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_WINCE) for (int i = 0; i < 100; ++i) #else for (int i = 0; i < 1000; ++i) diff --git a/tests/benchmarks/corelib/tools/containers-sequential/main.cpp b/tests/benchmarks/corelib/tools/containers-sequential/main.cpp index a6e405c..edf0eff 100644 --- a/tests/benchmarks/corelib/tools/containers-sequential/main.cpp +++ b/tests/benchmarks/corelib/tools/containers-sequential/main.cpp @@ -133,7 +133,7 @@ struct Large { // A "large" item type }; // Symbian devices typically have limited memory -#ifdef Q_OS_SYMBIAN +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_WINCE) # define LARGE_MAX_SIZE 2000 #else # define LARGE_MAX_SIZE 20000 diff --git a/tests/benchmarks/corelib/tools/qstringlist/main.cpp b/tests/benchmarks/corelib/tools/qstringlist/main.cpp index 1717b88..a4969bf 100644 --- a/tests/benchmarks/corelib/tools/qstringlist/main.cpp +++ b/tests/benchmarks/corelib/tools/qstringlist/main.cpp @@ -163,6 +163,7 @@ void tst_QStringList::split_qlist_qstring() const void tst_QStringList::split_stdvector_stdstring() const { +#ifndef QT_NO_STL QFETCH(QString, input); const char split_char = ':'; std::string stdinput = input.toStdString(); @@ -175,10 +176,12 @@ void tst_QStringList::split_stdvector_stdstring() const token.push_back(each)) ; } +#endif } void tst_QStringList::split_stdvector_stdwstring() const { +#ifndef QT_NO_STL QFETCH(QString, input); const wchar_t split_char = ':'; std::wstring stdinput = input.toStdWString(); @@ -191,6 +194,7 @@ void tst_QStringList::split_stdvector_stdwstring() const token.push_back(each)) ; } +#endif } void tst_QStringList::split_stdlist_stdstring() const diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsview/tst_qgraphicsview.cpp index 3c0ae71..ba56d58 100644 --- a/tests/benchmarks/gui/graphicsview/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/tst_qgraphicsview.cpp @@ -414,6 +414,9 @@ void tst_QGraphicsView::chipTester_data() void tst_QGraphicsView::chipTester() { +#ifdef Q_WS_WINCE_WM +QSKIP("WinCE WM: Fails on Windows Mobile w/o OpenGL", SkipAll); +#endif QFETCH(bool, antialias); QFETCH(bool, opengl); QFETCH(int, operation); diff --git a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp index f173ed1..90ae153 100644 --- a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -555,7 +555,7 @@ void tst_qnetworkreply::uploadPerformance() void tst_qnetworkreply::httpUploadPerformance() { -#ifdef Q_OS_SYMBIAN +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_WINCE_WM) // SHow some mercy for non-desktop platform/s enum {UploadSize = 4*1024*1024}; // 4 MB #else @@ -626,7 +626,7 @@ void tst_qnetworkreply::httpDownloadPerformance() { QFETCH(bool, serverSendsContentLength); QFETCH(bool, chunkedEncoding); -#ifdef Q_OS_SYMBIAN +#if defined(Q_OS_SYMBIAN) || defined(Q_WS_WINCE_WM) // Show some mercy to non-desktop platform/s enum {UploadSize = 4*1024*1024}; // 4 MB #else diff --git a/tests/benchmarks/network/kernel/qhostinfo/main.cpp b/tests/benchmarks/network/kernel/qhostinfo/main.cpp index 0ae1b7f..f4648d6 100644 --- a/tests/benchmarks/network/kernel/qhostinfo/main.cpp +++ b/tests/benchmarks/network/kernel/qhostinfo/main.cpp @@ -48,10 +48,15 @@ #include <qtest.h> #include <qtesteventloop.h> +#include "private/qhostinfo_p.h" + class tst_qhostinfo : public QObject { Q_OBJECT +public slots: + void init(); private slots: + void lookupSpeed_data(); void lookupSpeed(); }; @@ -70,14 +75,33 @@ public slots: } }; +void tst_qhostinfo::init() +{ + // delete the cache so inidividual testcase results are independant from each other + qt_qhostinfo_clear_cache(); +} + +void tst_qhostinfo::lookupSpeed_data() +{ + QTest::addColumn<bool>("cache"); + QTest::newRow("WithCache") << true; + QTest::newRow("WithoutCache") << false; +} + void tst_qhostinfo::lookupSpeed() { + QFETCH(bool, cache); + qt_qhostinfo_enable_cache(cache); + QStringList hostnameList; hostnameList << "www.ovi.com" << "www.nokia.com" << "qt.nokia.com" << "www.trolltech.com" << "troll.no" << "www.qtcentre.org" << "forum.nokia.com" << "www.forum.nokia.com" << "wiki.forum.nokia.com" << "www.nokia.no" << "nokia.de" << "127.0.0.1" << "----"; // also add some duplicates: hostnameList << "www.nokia.com" << "127.0.0.1" << "www.trolltech.com"; + // and some more + hostnameList << hostnameList; + const int COUNT = hostnameList.size(); SignalReceiver receiver(COUNT); diff --git a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp index 022bf3d..c77c619 100644 --- a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp +++ b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp @@ -175,6 +175,9 @@ void tst_QTcpServer::ipv6LoopbackPerformanceTest() QFETCH_GLOBAL(bool, setProxy); if (setProxy) return; +#if defined(Q_WS_WINCE_WM) + QSKIP("WinCE WM: Not yet supported", SkipAll); +#endif #if defined(Q_OS_SYMBIAN) QSKIP("Symbian: IPv6 is not yet supported", SkipAll); diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp index 6bd9108..2d5620e 100644 --- a/tools/linguist/lupdate/cpp.cpp +++ b/tools/linguist/lupdate/cpp.cpp @@ -260,6 +260,8 @@ private: bool qualifyOneCallbackOwn(const Namespace *ns, void *context) const; bool qualifyOneCallbackUsing(const Namespace *ns, void *context) const; bool qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment, + NamespaceList *resolved, QSet<HashStringList> *visitedUsings) const; + bool qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment, NamespaceList *resolved) const; bool fullyQualify(const NamespaceList &namespaces, int nsCnt, const QList<HashString> &segments, bool isDeclaration, @@ -1036,15 +1038,16 @@ QStringList CppParser::stringListifySegments(const QList<HashString> &segments) } struct QualifyOneData { - QualifyOneData(const NamespaceList &ns, int nsc, const HashString &seg, NamespaceList *rslvd) - : namespaces(ns), nsCount(nsc), segment(seg), resolved(rslvd) + QualifyOneData(const NamespaceList &ns, int nsc, const HashString &seg, NamespaceList *rslvd, + QSet<HashStringList> *visited) + : namespaces(ns), nsCount(nsc), segment(seg), resolved(rslvd), visitedUsings(visited) {} const NamespaceList &namespaces; int nsCount; const HashString &segment; NamespaceList *resolved; - QSet<HashStringList> visitedUsings; + QSet<HashStringList> *visitedUsings; }; bool CppParser::qualifyOneCallbackOwn(const Namespace *ns, void *context) const @@ -1078,18 +1081,19 @@ bool CppParser::qualifyOneCallbackUsing(const Namespace *ns, void *context) cons { QualifyOneData *data = (QualifyOneData *)context; foreach (const HashStringList &use, ns->usings) - if (!data->visitedUsings.contains(use)) { - data->visitedUsings.insert(use); - if (qualifyOne(use.value(), use.value().count(), data->segment, data->resolved)) + if (!data->visitedUsings->contains(use)) { + data->visitedUsings->insert(use); + if (qualifyOne(use.value(), use.value().count(), data->segment, data->resolved, + data->visitedUsings)) return true; } return false; } bool CppParser::qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment, - NamespaceList *resolved) const + NamespaceList *resolved, QSet<HashStringList> *visitedUsings) const { - QualifyOneData data(namespaces, nsCnt, segment, resolved); + QualifyOneData data(namespaces, nsCnt, segment, resolved, visitedUsings); if (visitNamespace(namespaces, nsCnt, &CppParser::qualifyOneCallbackOwn, &data)) return true; @@ -1097,6 +1101,14 @@ bool CppParser::qualifyOne(const NamespaceList &namespaces, int nsCnt, const Has return visitNamespace(namespaces, nsCnt, &CppParser::qualifyOneCallbackUsing, &data); } +bool CppParser::qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment, + NamespaceList *resolved) const +{ + QSet<HashStringList> visitedUsings; + + return qualifyOne(namespaces, nsCnt, segment, resolved, &visitedUsings); +} + bool CppParser::fullyQualify(const NamespaceList &namespaces, int nsCnt, const QList<HashString> &segments, bool isDeclaration, NamespaceList *resolved, QStringList *unresolved) const diff --git a/tools/linguist/phrasebooks/russian.qph b/tools/linguist/phrasebooks/russian.qph index 9d40bd3..ae1a9b9 100644 --- a/tools/linguist/phrasebooks/russian.qph +++ b/tools/linguist/phrasebooks/russian.qph @@ -1164,4 +1164,44 @@ <source>Table of Contents</source> <target>Оглавление</target> </phrase> +<phrase> + <source>parse</source> + <target>разобрать</target> +</phrase> +<phrase> + <source>parsing</source> + <target>разбор</target> +</phrase> +<phrase> + <source>phrasebook</source> + <target>глоссарий</target> +</phrase> +<phrase> + <source>phrase book</source> + <target>глоссарий</target> +</phrase> +<phrase> + <source>In use</source> + <target>Используется</target> +</phrase> +<phrase> + <source>Access denied</source> + <target>Доступ запрещён</target> +</phrase> +<phrase> + <source>No error</source> + <target>Нет ошибки</target> +</phrase> +<phrase> + <source>Not supported</source> + <target>Не поддерживается</target> +</phrase> +<phrase> + <source>Already exists</source> + <target>Уже существует</target> +</phrase> +<phrase> + <source>Permission denied</source> + <target>Доступ запрещён</target> +</phrase> </QPH> diff --git a/tools/qtestlib/wince/cetest/cetest.pro b/tools/qtestlib/wince/cetest/cetest.pro index 6b6b02a..2773fe4 100644 --- a/tools/qtestlib/wince/cetest/cetest.pro +++ b/tools/qtestlib/wince/cetest/cetest.pro @@ -18,10 +18,13 @@ DEFINES += QT_BUILD_QMAKE QT_BOOTSTRAPPED QT_NO_CODECS QT_LITE_UNICODE QT INCLUDEPATH = \ $$QT_SOURCE_TREE/tools/qtestlib/ce/cetest \ $$QT_SOURCE_TREE/qmake \ - $$QT_SOURCE_TREE/tools/shared \ + $$QT_SOURCE_TREE/qmake/generators/symbian \ + $$QT_SOURCE_TREE/tools/shared \ $$QT_BUILD_TREE/include \ $$QT_BUILD_TREE/include/QtCore \ $$QT_BUILD_TREE/src/corelib/global + +VPATH += $$QT_SOURCE_TREE/tools/shared DEPENDPATH += $$QT_BUILD_TREE/src/corelib/tools $$QT_BUILD_TREE/src/corelib/io @@ -33,6 +36,8 @@ HEADERS += \ SOURCES += \ remoteconnection.cpp \ deployment.cpp \ + symbian/epocroot.cpp \ + windows/registry.cpp \ main.cpp LIBS += ole32.lib advapi32.lib diff --git a/translations/assistant_ru.ts b/translations/assistant_ru.ts index 992cf18..ade4c85 100644 --- a/translations/assistant_ru.ts +++ b/translations/assistant_ru.ts @@ -32,41 +32,41 @@ <context> <name>BookmarkDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui" line="+19"/> + <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/> <source>Add Bookmark</source> <translation>Добавление закладки</translation> </message> <message> - <location line="+10"/> + <location/> <source>Bookmark:</source> <translation>Закладка:</translation> </message> <message> - <location line="+7"/> + <location/> <source>Add in Folder:</source> <translation>Добавить в папку:</translation> </message> <message> - <location line="+29"/> + <location/> <source>+</source> <translation>+</translation> </message> <message> - <location line="+28"/> + <location/> <source>New Folder</source> <translation>Новая папка</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+184"/> + <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+187"/> <location line="+18"/> <location line="+39"/> <location line="+18"/> - <location line="+30"/> + <location line="+33"/> <source>Bookmarks</source> <translation>Закладки</translation> </message> <message> - <location line="-61"/> + <location line="-64"/> <source>Delete Folder</source> <translation>Удалить папку</translation> </message> @@ -79,7 +79,7 @@ <context> <name>BookmarkManager</name> <message> - <location line="+434"/> + <location line="+452"/> <source>Bookmarks</source> <translation>Закладки</translation> </message> @@ -103,7 +103,7 @@ <context> <name>BookmarkWidget</name> <message> - <location line="-462"/> + <location line="-474"/> <source>Delete Folder</source> <translation>Удалить папку</translation> </message> @@ -151,7 +151,7 @@ <context> <name>CentralWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+238"/> + <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+239"/> <source>Add new page</source> <translation>Открыть новую страницу</translation> </message> @@ -166,7 +166,7 @@ <translation>Печать документа</translation> </message> <message> - <location line="+148"/> + <location line="+130"/> <location line="+2"/> <source>unknown</source> <translation>безымянная вкладка</translation> @@ -192,7 +192,7 @@ <translation>Добавить закладку для этой страницы...</translation> </message> <message> - <location line="+255"/> + <location line="+248"/> <source>Search</source> <translation>Поиск</translation> </message> @@ -213,12 +213,12 @@ <context> <name>FilterNameDialogClass</name> <message> - <location filename="../tools/assistant/tools/assistant/filternamedialog.ui" line="+13"/> + <location filename="../tools/assistant/tools/assistant/filternamedialog.ui"/> <source>Add Filter Name</source> <translation>Добавление фильтра</translation> </message> <message> - <location line="+12"/> + <location/> <source>Filter Name:</source> <translation>Название фильтра:</translation> </message> @@ -226,7 +226,7 @@ <context> <name>FindWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-955"/> + <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-931"/> <source>Previous</source> <translation>Предыдущее</translation> </message> @@ -282,7 +282,7 @@ <context> <name>HelpViewer</name> <message> - <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+284"/> + <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+283"/> <source>Open Link in New Tab</source> <translation>Открыть ссылку в новой вкладке</translation> </message> @@ -327,7 +327,7 @@ <translation>&Искать:</translation> </message> <message> - <location line="+68"/> + <location line="+72"/> <source>Open Link</source> <translation>Открыть ссылку</translation> </message> @@ -340,7 +340,7 @@ <context> <name>InstallDialog</name> <message> - <location filename="../tools/assistant/tools/assistant/installdialog.ui" line="+13"/> + <location filename="../tools/assistant/tools/assistant/installdialog.ui"/> <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+76"/> <source>Install Documentation</source> <translation>Установка документации</translation> @@ -407,32 +407,32 @@ %1</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/installdialog.ui" line="+6"/> + <location filename="../tools/assistant/tools/assistant/installdialog.ui"/> <source>Available Documentation:</source> <translation>Доступная документация:</translation> </message> <message> - <location line="+10"/> + <location/> <source>Install</source> <translation>Установить</translation> </message> <message> - <location line="+7"/> + <location/> <source>Cancel</source> <translation>Отмена</translation> </message> <message> - <location line="+7"/> + <location/> <source>Close</source> <translation>Закрыть</translation> </message> <message> - <location line="+20"/> + <location/> <source>Installation Path:</source> <translation>Путь установки:</translation> </message> <message> - <location line="+10"/> + <location/> <source>...</source> <translation>...</translation> </message> @@ -441,31 +441,31 @@ <name>MainWindow</name> <message> <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+110"/> - <location line="+391"/> + <location line="+383"/> <source>Index</source> <translation>Указатель</translation> </message> <message> - <location line="-385"/> - <location line="+383"/> + <location line="-377"/> + <location line="+375"/> <source>Contents</source> <translation>Содержание</translation> </message> <message> - <location line="-378"/> - <location line="+382"/> + <location line="-370"/> + <location line="+374"/> <source>Bookmarks</source> <translation>Закладки</translation> </message> <message> - <location line="-370"/> - <location line="+215"/> - <location line="+512"/> + <location line="-362"/> + <location line="+207"/> + <location line="+514"/> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> - <location line="-544"/> + <location line="-546"/> <location line="+5"/> <source>Unfiltered</source> <translation>Без фильтрации</translation> @@ -526,7 +526,12 @@ <translation>П&оиск в тексте...</translation> </message> <message> - <location line="+6"/> + <location line="+2"/> + <source>&Find</source> + <translation>&Поиск</translation> + </message> + <message> + <location line="+4"/> <source>Find &Next</source> <translation>Найти &следующее</translation> </message> @@ -621,7 +626,12 @@ <translation>Синхронизировать с оглавлением</translation> </message> <message> - <location line="+7"/> + <location line="+2"/> + <source>Sync</source> + <translation>Синхронизировать</translation> + </message> + <message> + <location line="+5"/> <source>Next Page</source> <translation>Следующая страница</translation> </message> @@ -706,7 +716,7 @@ <translation>Отфильтровано по:</translation> </message> <message> - <location line="+23"/> + <location line="+25"/> <source>Address Toolbar</source> <translation>Панель адреса</translation> </message> @@ -783,118 +793,117 @@ <context> <name>PreferencesDialogClass</name> <message> - <location filename="../tools/assistant/tools/assistant/preferencesdialog.ui" line="+14"/> + <location filename="../tools/assistant/tools/assistant/preferencesdialog.ui"/> <source>Preferences</source> <translation>Настройки</translation> </message> <message> - <location line="+10"/> + <location/> <source>Fonts</source> <translation>Шрифты</translation> </message> <message> - <location line="+14"/> + <location/> <source>Font settings:</source> <translation>Настройки шрифта:</translation> </message> <message> - <location line="+8"/> + <location/> <source>Browser</source> <translation>Обозреватель</translation> </message> <message> - <location line="+5"/> + <location/> <source>Application</source> <translation>Приложение</translation> </message> <message> - <location line="+19"/> + <location/> <source>Filters</source> <translation>Фильтры</translation> </message> <message> - <location line="+6"/> + <location/> <source>Filter:</source> <translation>Фильтр:</translation> </message> <message> - <location line="+10"/> + <location/> <source>Attributes:</source> <translation>Атрибуты:</translation> </message> <message> - <location line="+11"/> + <location/> <source>1</source> <translation>1</translation> </message> <message> - <location line="+8"/> + <location/> <source>Add</source> <translation>Добавить</translation> </message> <message> - <location line="+7"/> - <location line="+51"/> + <location/> <source>Remove</source> <translation>Удалить</translation> </message> <message> - <location line="-43"/> + <location/> <source>Documentation</source> <translation>Документация</translation> </message> <message> - <location line="+6"/> + <location/> <source>Registered Documentation:</source> <translation>Зарегистрированная документация:</translation> </message> <message> - <location line="+30"/> + <location/> <source>Add...</source> <translation>Добавить...</translation> </message> <message> - <location line="+32"/> + <location/> <source>Options</source> <translation>Параметры</translation> </message> <message> - <location line="+74"/> + <location/> <source>Homepage</source> <translation>Стартовая страница</translation> </message> <message> - <location line="+27"/> + <location/> <source>Current Page</source> <translation>Текущая страница</translation> </message> <message> - <location line="+14"/> + <location/> <source>Restore to default</source> <translation>Страница по умолчанию</translation> </message> <message> - <location line="-97"/> + <location/> <source>On help start:</source> <translation>При запуске:</translation> </message> <message> - <location line="+14"/> + <location/> <source>Show my home page</source> <translation>Отобразить стартовую страницу</translation> </message> <message> - <location line="+5"/> + <location/> <source>Show a blank page</source> <translation>Отобразить пустую страницу</translation> </message> <message> - <location line="+5"/> + <location/> <source>Show my tabs from last session</source> <translation>Восстановить предыдущую сессиию</translation> </message> <message> - <location line="+66"/> + <location/> <source>Blank Page</source> <translation>Пустая страница</translation> </message> @@ -964,7 +973,7 @@ <translation>Qt Assistant</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/main.cpp" line="+217"/> + <location filename="../tools/assistant/tools/assistant/main.cpp" line="+228"/> <source>Could not register documentation file %1 @@ -1026,7 +1035,7 @@ Reason: <context> <name>SearchWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+195"/> + <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+196"/> <source>&Copy</source> <translation>&Копировать</translation> </message> @@ -1054,22 +1063,22 @@ Reason: <translation>Выберите раздел для <b>%1</b>:</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/topicchooser.ui" line="+16"/> + <location filename="../tools/assistant/tools/assistant/topicchooser.ui"/> <source>Choose Topic</source> <translation>Выбор раздела</translation> </message> <message> - <location line="+21"/> + <location/> <source>&Topics</source> <translation>&Разделы</translation> </message> <message> - <location line="+51"/> + <location/> <source>&Display</source> <translation>&Показать</translation> </message> <message> - <location line="+16"/> + <location/> <source>&Close</source> <translation>&Закрыть</translation> </message> diff --git a/translations/designer_ru.ts b/translations/designer_ru.ts index 932c611..412be47 100644 --- a/translations/designer_ru.ts +++ b/translations/designer_ru.ts @@ -32,17 +32,17 @@ <context> <name>AddLinkDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="+5"/> + <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui"/> <source>Insert Link</source> <translation>Вставить ссылку</translation> </message> <message> - <location line="+14"/> + <location/> <source>Title:</source> <translation>Заголовок:</translation> </message> <message> - <location line="+17"/> + <location/> <source>URL:</source> <translation>URL:</translation> </message> @@ -149,12 +149,12 @@ <context> <name>AppearanceOptionsWidget</name> <message> - <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui" line="+14"/> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui"/> <source>Form</source> <translation>Форма</translation> </message> <message> - <location line="+6"/> + <location/> <source>User Interface Mode</source> <translation>Режим пользовательского интерфейса</translation> </message> @@ -585,7 +585,7 @@ <translation>Изменить компоновку '%1' с %2 на %3</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="+1195"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="+1194"/> <source>Set action text</source> <translation>Установить текст действия</translation> </message> @@ -596,12 +596,12 @@ </message> <message> <location line="+89"/> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="+907"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="+915"/> <source>Move action</source> <translation>Переместить действие</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-424"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="-432"/> <source>Change Title</source> <translation>Изменить заголовок</translation> </message> @@ -680,24 +680,22 @@ <context> <name>ConnectDialog</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="+13"/> + <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui"/> <source>Configure Connection</source> <translation>Настройка соединения</translation> </message> <message> - <location line="+6"/> - <location line="+40"/> + <location/> <source>GroupBox</source> <translation>GroupBox</translation> </message> <message> - <location line="-25"/> - <location line="+40"/> + <location/> <source>Edit...</source> <translation>Изменить...</translation> </message> <message> - <location line="+25"/> + <location/> <source>Show signals and slots inherited from QWidget</source> <translation>Показывать сигналы и слоты, унаследованные от QWidget</translation> </message> @@ -705,7 +703,7 @@ <context> <name>ConnectionDelegate</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+643"/> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+644"/> <source><object></source> <translation><объект></translation> </message> @@ -761,12 +759,12 @@ <message> <location line="+173"/> <source>Invalid UI file: The root element <ui> is missing.</source> - <translation type="unfinished">Некорректный файл UI: Отсутствует корневой элемент <ui>.</translation> + <translation>Некорректный файл UI: Отсутствует корневой элемент <ui>.</translation> </message> <message> <location line="+6"/> <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> - <translation type="unfinished">При чтении файла UI в строке %1 позиции %2 возникла ошибка: %3</translation> + <translation>При чтении файла UI в строке %1 позиции %2 возникла ошибка: %3</translation> </message> <message> <location line="+26"/> @@ -808,7 +806,7 @@ <message> <location line="+31"/> <source>This file cannot be read because the extra info extension failed to load.</source> - <translation type="unfinished">Не удалось прочитать файл, так как возникла ошибка при загрузке расширения дополнительной информации.</translation> + <translation>Не удалось прочитать файл, так как возникла ошибка при загрузке расширения дополнительной информации.</translation> </message> <message> <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="+339"/> @@ -869,27 +867,27 @@ <context> <name>DeviceProfileDialog</name> <message> - <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="+20"/> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui"/> <source>&Family</source> <translation>&Шрифт</translation> </message> <message> - <location line="+13"/> + <location/> <source>&Point Size</source> <translation>&Размер</translation> </message> <message> - <location line="+13"/> + <location/> <source>Style</source> <translation>Начертание</translation> </message> <message> - <location line="+13"/> + <location/> <source>Device DPI</source> <translation>DPI устройства</translation> </message> <message> - <location line="+10"/> + <location/> <source>Name</source> <translation>Название</translation> </message> @@ -1030,7 +1028,7 @@ <context> <name>FormBuilder</name> <message> - <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="+359"/> + <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="+375"/> <source>Invalid stretch value for '%1': '%2'</source> <extracomment>Parsing layout stretch values</extracomment> <translation>Некорректный коэффициент растяжения для '%1': '%2'</translation> @@ -1074,38 +1072,38 @@ <context> <name>FormLayoutRowDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="+6"/> + <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui"/> <source>Add Form Layout Row</source> <translatorcomment>нелепица какая-то</translatorcomment> <translation type="unfinished">Добавление строки компоновки компоновщика формы</translation> </message> <message> - <location line="+11"/> + <location/> <source>&Label text:</source> <translation>Текст &метки:</translation> </message> <message> - <location line="+23"/> + <location/> <source>Field &type:</source> <translation>&Тип поля:</translation> </message> <message> - <location line="+20"/> + <location/> <source>&Field name:</source> <translation>Имя п&оля:</translation> </message> <message> - <location line="+10"/> + <location/> <source>&Buddy:</source> <translation>П&артнёр:</translation> </message> <message> - <location line="+17"/> + <location/> <source>&Row:</source> <translation>&Строка:</translation> </message> <message> - <location line="+16"/> + <location/> <source>Label &name:</source> <translation>Имя м&етки:</translation> </message> @@ -1126,62 +1124,62 @@ <context> <name>FormWindowSettings</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="+54"/> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui"/> <source>Form Settings</source> <translation>Настройки формы</translation> </message> <message> - <location line="+14"/> + <location/> <source>Layout &Default</source> <translation>Компоновка по &умолчанию</translation> </message> <message> - <location line="+15"/> + <location/> <source>&Spacing:</source> <translation>&Отступ:</translation> </message> <message> - <location line="+10"/> + <location/> <source>&Margin:</source> <translation>&Границы:</translation> </message> <message> - <location line="+19"/> + <location/> <source>&Layout Function</source> <translation>&Функция компоновки</translation> </message> <message> - <location line="+21"/> + <location/> <source>Ma&rgin:</source> <translation>Г&раницы:</translation> </message> <message> - <location line="+10"/> + <location/> <source>Spa&cing:</source> <translation>О&тступ:</translation> </message> <message> - <location line="+117"/> + <location/> <source>&Author</source> <translation>&Автор</translation> </message> <message> - <location line="-41"/> + <location/> <source>&Include Hints</source> <translation>&Подключить подсказки</translation> </message> <message> - <location line="-53"/> + <location/> <source>&Pixmap Function</source> <translation type="unfinished">&Загрузчик изображений</translation> </message> <message> - <location line="+71"/> + <location/> <source>Grid</source> <translation>Сетка</translation> </message> <message> - <location line="+7"/> + <location/> <source>Embedded Design</source> <translation type="unfinished">Оформление портативных устройств</translation> </message> @@ -1329,12 +1327,12 @@ <context> <name>PluginDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/plugindialog.ui" line="+54"/> + <location filename="../tools/designer/src/lib/shared/plugindialog.ui"/> <source>Plugin Information</source> <translation>Информация о модуле</translation> </message> <message> - <location line="+26"/> + <location/> <source>1</source> <translation>1</translation> </message> @@ -1342,7 +1340,7 @@ <context> <name>PreferencesDialog</name> <message> - <location filename="../tools/designer/src/designer/preferencesdialog.ui" line="+20"/> + <location filename="../tools/designer/src/designer/preferencesdialog.ui"/> <source>Preferences</source> <translation>Настройки</translation> </message> @@ -1350,34 +1348,32 @@ <context> <name>PreviewConfigurationWidget</name> <message> - <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="+5"/> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui"/> <source>Form</source> <translation>Форма</translation> </message> <message> - <location line="+3"/> + <location/> <source>Print/Preview Configuration</source> <translation>Настройка печати/предпросмотра</translation> </message> <message> - <location line="+9"/> + <location/> <source>Style</source> <translation>Стиль</translation> </message> <message> - <location line="+10"/> + <location/> <source>Style sheet</source> <translation>Таблица стилей</translation> </message> <message> - <location line="+19"/> - <location line="+7"/> - <location line="+21"/> + <location/> <source>...</source> <translation>...</translation> </message> <message> - <location line="-12"/> + <location/> <source>Device skin</source> <translation>Обложка устройства</translation> </message> @@ -1410,15 +1406,15 @@ <message> <location line="+5"/> <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> - <translation type="unfinished">Возникла ошибка при чтении файла UI в строке %1 позиции %2: %3</translation> + <translation>Возникла ошибка при чтении файла UI в строке %1 позиции %2: %3</translation> </message> <message> <location line="+6"/> <source>Invalid UI file: The root element <ui> is missing.</source> - <translation type="unfinished">Неверный файл UI: Отсутствует корневой элемент <ui>.</translation> + <translation>Некорректный файл UI: отсутствует корневой элемент <ui>.</translation> </message> <message> - <location line="+119"/> + <location line="+104"/> <source>The creation of a widget of the class '%1' failed.</source> <translation>Не удалось создание виджета класса '%1'.</translation> </message> @@ -1932,7 +1928,7 @@ Would you like to retry?</source> <message> <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="-71"/> <source>Reset control</source> - <translation>Сбросить элемент управления</translation> + <translation type="unfinished">Сбросить элемент управления</translation> </message> <message> <location line="+2"/> @@ -1994,7 +1990,7 @@ Would you like to retry?</source> <context> <name>QDesignerMenu</name> <message> - <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="-1181"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="-1179"/> <source>Type Here</source> <translation>Пишите здесь</translation> </message> @@ -2020,7 +2016,7 @@ Would you like to retry?</source> </message> <message> <location line="+25"/> - <location line="+650"/> + <location line="+648"/> <source>Add separator</source> <translation>Добавить разделитель</translation> </message> @@ -2283,7 +2279,7 @@ Container pages should only be added by specifying them in XML returned by the d <context> <name>QFormBuilder</name> <message> - <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="+163"/> + <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="+168"/> <source>An empty class name was passed on to %1 (object name: '%2').</source> <extracomment>Empty class name passed to widget factory method</extracomment> <translation>Методу %1 (объекта '%2') было передано пустое имя класса.</translation> @@ -2323,6 +2319,16 @@ Container pages should only be added by specifying them in XML returned by the d <source>The property %1 could not be written. The type %2 is not supported yet.</source> <translation>Не удалось записать свойство %1. Тип %2 ещё не поддерживается.</translation> </message> + <message> + <location filename="../tools/designer/src/lib/uilib/properties_p.h" line="+132"/> + <source>The enumeration-value '%1' is invalid. The default value '%2' will be used instead.</source> + <translation>Значение '%1' перечисляемого типа некорректно. Будет использовано значение '%2'.</translation> + </message> + <message> + <location line="+14"/> + <source>The flag-value '%1' is invalid. Zero will be used instead.</source> + <translation>Значение флага '%1' перечисляемого типа некорректно. Будет использовано значение '0' (нуль).</translation> + </message> </context> <context> <name>QStackedWidgetEventFilter</name> @@ -2456,36 +2462,36 @@ Container pages should only be added by specifying them in XML returned by the d <context> <name>QtBoolEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+226"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+255"/> <location line="+10"/> <location line="+25"/> <source>True</source> - <translation>Вкл.</translation> + <translation type="unfinished">Вкл.</translation> </message> <message> <location line="-25"/> <location line="+25"/> <source>False</source> - <translation>Выкл.</translation> + <translation type="unfinished">Выкл.</translation> </message> </context> <context> <name>QtBoolPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1469"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+1507"/> <source>True</source> - <translation type="unfinished">Да</translation> + <translation type="unfinished">Вкл.</translation> </message> <message> <location line="+1"/> <source>False</source> - <translation type="unfinished">Нет</translation> + <translation type="unfinished">Выкл.</translation> </message> </context> <context> <name>QtCharEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+1581"/> + <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+1584"/> <source>Clear Char</source> <translation>Стереть символ</translation> </message> @@ -2501,7 +2507,7 @@ Container pages should only be added by specifying them in XML returned by the d <context> <name>QtColorPropertyManager</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4743"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="+4718"/> <source>Red</source> <translation>Красный</translation> </message> @@ -2524,7 +2530,7 @@ Container pages should only be added by specifying them in XML returned by the d <context> <name>QtCursorDatabase</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-206"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-234"/> <source>Arrow</source> <translation>Arrow</translation> </message> @@ -2673,7 +2679,7 @@ Container pages should only be added by specifying them in XML returned by the d <context> <name>QtGradientDialog</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui" line="+53"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui"/> <source>Edit Gradient</source> <translation>Правка градиента</translation> </message> @@ -2763,234 +2769,222 @@ Container pages should only be added by specifying them in XML returned by the d <translation type="unfinished">Зеркальная</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="+53"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui"/> <source>Form</source> <translation>Форма</translation> </message> <message> - <location line="+48"/> + <location/> <source>Gradient Editor</source> <translation>Редактор градиента</translation> </message> <message> - <location line="+3"/> + <location/> <source>This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient's type such as start and final point, radius, etc. by drag & drop.</source> <translation>Эта область отображает предварительный вариант настраиваемого градиента. Также она позволяет менять с помощью перетаскивания характерные для градиента параметры, такие как: начальная и конечная точки, радиус и пр.</translation> </message> <message> - <location line="+16"/> + <location/> <source>1</source> <translation>1</translation> </message> <message> - <location line="+35"/> + <location/> <source>2</source> <translation>2</translation> </message> <message> - <location line="+35"/> + <location/> <source>3</source> <translation>3</translation> </message> <message> - <location line="+35"/> + <location/> <source>4</source> <translation>4</translation> </message> <message> - <location line="+35"/> + <location/> <source>5</source> <translation>5</translation> </message> <message> - <location line="+35"/> + <location/> <source>Gradient Stops Editor</source> <translation>Редактор опорных точек градиента</translation> </message> <message> - <location line="+3"/> + <location/> <source>This area allows you to edit gradient stops. Double click on the existing stop handle to duplicate it. Double click outside of the existing stop handles to create a new stop. Drag & drop the handle to reposition it. Use right mouse button to popup context menu with extra actions.</source> <translation>Эта область позволяет редактировать опорные точки градиента. Двойной щелчок на существующей точке создаст её копию. Двойной клик вне существующей точки создаст новую. Точки можно перемещать путем удерживания левой кнопки. По правой кнопке можно получить контекстное меню дополнительных действий.</translation> </message> <message> - <location line="+13"/> + <location/> <source>Zoom</source> <translation>Масштаб</translation> </message> <message> - <location line="+19"/> - <location line="+3"/> + <location/> <source>Reset Zoom</source> <translation>100%</translation> </message> <message> - <location line="+13"/> + <location/> <source>Position</source> <translation>Положение</translation> </message> <message> - <location line="+19"/> - <location line="+49"/> - <location line="+22"/> + <location/> <source>Hue</source> <translation>Оттенок</translation> </message> <message> - <location line="-68"/> + <location/> <source>H</source> <translation>H</translation> </message> <message> - <location line="+87"/> - <location line="+49"/> + <location/> <source>Saturation</source> <translation>Насыщенность</translation> </message> <message> - <location line="-46"/> + <location/> <source>S</source> <translation>S</translation> </message> <message> - <location line="+68"/> + <location/> <source>Sat</source> <translation>Насыщение</translation> </message> <message> - <location line="+19"/> - <location line="+49"/> + <location/> <source>Value</source> <translation>Значение</translation> </message> <message> - <location line="-46"/> + <location/> <source>V</source> <translation>V</translation> </message> <message> - <location line="+68"/> + <location/> <source>Val</source> <translation>Значение</translation> </message> <message> - <location line="+19"/> - <location line="+49"/> - <location line="+22"/> + <location/> <source>Alpha</source> <translation>Альфа</translation> </message> <message> - <location line="-68"/> + <location/> <source>A</source> <translation>A</translation> </message> <message> - <location line="+81"/> + <location/> <source>Type</source> <translation>Тип</translation> </message> <message> - <location line="+13"/> + <location/> <source>Spread</source> <translation>Заливка</translation> </message> <message> - <location line="+19"/> + <location/> <source>Color</source> <translation>Цвет</translation> </message> <message> - <location line="+13"/> + <location/> <source>Current stop's color</source> <translation>Цвет текущей точки</translation> </message> <message> - <location line="+22"/> + <location/> <source>Show HSV specification</source> <translation>Настройки в виде HSV</translation> </message> <message> - <location line="+3"/> + <location/> <source>HSV</source> <translation>HSV</translation> </message> <message> - <location line="+22"/> + <location/> <source>Show RGB specification</source> <translation>Настройки в виде RGB</translation> </message> <message> - <location line="+3"/> + <location/> <source>RGB</source> <translation>RGB</translation> </message> <message> - <location line="+28"/> + <location/> <source>Current stop's position</source> <translation>Положение текущей точки</translation> </message> <message> - <location line="+188"/> + <location/> <source>%</source> <translation>%</translation> </message> <message> - <location line="+111"/> + <location/> <source>Zoom In</source> <translation>Увеличить</translation> </message> <message> - <location line="+7"/> + <location/> <source>Zoom Out</source> <translation>Уменьшить</translation> </message> <message> - <location line="+35"/> + <location/> <source>Toggle details extension</source> <translation>Показать/скрыть детальные настройки</translation> </message> <message> - <location line="+3"/> + <location/> <source>></source> <translation>></translation> </message> <message> - <location line="+19"/> + <location/> <source>Linear Type</source> <translation>Линейный тип</translation> </message> <message> - <location line="+3"/> - <location line="+22"/> - <location line="+22"/> - <location line="+22"/> - <location line="+22"/> - <location line="+22"/> + <location/> <source>...</source> <translation>...</translation> </message> <message> - <location line="-91"/> + <location/> <source>Radial Type</source> <translation>Радиальный тип</translation> </message> <message> - <location line="+22"/> + <location/> <source>Conical Type</source> <translation>Конический тип</translation> </message> <message> - <location line="+22"/> + <location/> <source>Pad Spread</source> <translation>Равномерная заливка</translation> </message> <message> - <location line="+22"/> + <location/> <source>Repeat Spread</source> <translation>Цикличная заливка</translation> </message> <message> - <location line="+22"/> + <location/> <source>Reflect Spread</source> <translation>Зеркальная заливка</translation> </message> @@ -3015,7 +3009,7 @@ Container pages should only be added by specifying them in XML returned by the d <message> <location line="+1"/> <source>Select All</source> - <translation>Выделить все</translation> + <translation>Выделить всё</translation> </message> <message> <location line="+1"/> @@ -3038,7 +3032,7 @@ Container pages should only be added by specifying them in XML returned by the d <message> <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+107"/> <source>Grad</source> - <translation type="unfinished">Градиент</translation> + <translation>Градиент</translation> </message> <message> <location line="+26"/> @@ -3051,31 +3045,31 @@ Container pages should only be added by specifying them in XML returned by the d <translation>Вы действительно желаете удалить выбранный градиент?</translation> </message> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="+39"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui"/> <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+74"/> <source>New...</source> <translation>Новый...</translation> </message> <message> - <location line="+19"/> + <location/> <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> <source>Edit...</source> <translation>Правка...</translation> </message> <message> - <location line="+19"/> + <location/> <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> <source>Rename</source> <translation>Переименовать</translation> </message> <message> - <location line="+19"/> + <location/> <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/> <source>Remove</source> <translation>Удалить</translation> </message> <message> - <location line="-83"/> + <location/> <source>Gradient View</source> <translation>Просмотр градиента</translation> </message> @@ -3083,7 +3077,8 @@ Container pages should only be added by specifying them in XML returned by the d <context> <name>QtGradientViewDialog</name> <message> - <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui" line="+53"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.h" line="+62"/> <source>Select Gradient</source> <translation>Выбрать градиент</translation> </message> @@ -3091,7 +3086,7 @@ Container pages should only be added by specifying them in XML returned by the d <context> <name>QtKeySequenceEdit</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+221"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="+249"/> <source>Clear Shortcut</source> <translation>Удалить комбинацию горячих клавиш</translation> </message> @@ -3153,7 +3148,7 @@ Container pages should only be added by specifying them in XML returned by the d <context> <name>QtPropertyBrowserUtils</name> <message> - <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-136"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-156"/> <source>[%1, %2, %3] (%4)</source> <translation>[%1, %2, %3] (%4)</translation> </message> @@ -3269,7 +3264,7 @@ Do you want to replace it?</source> <message> <location line="+112"/> <source>newPrefix</source> - <translation type="unfinished"></translation> + <translation type="unfinished">newPrefix</translation> </message> <message> <location line="+16"/> @@ -3460,49 +3455,47 @@ to <translation type="unfinished">Предупреждение</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="+13"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui"/> <source>Dialog</source> <translation>Диалог</translation> </message> <message> - <location line="+26"/> + <location/> <source>New File</source> <translation>Новый файл</translation> </message> <message> - <location line="+3"/> - <location line="+50"/> + <location/> <source>N</source> <translation>N</translation> </message> <message> - <location line="-43"/> + <location/> <source>Remove File</source> <translation>Удалить файл</translation> </message> <message> - <location line="+3"/> - <location line="+57"/> + <location/> <source>R</source> <translation>R</translation> </message> <message> - <location line="-34"/> + <location/> <source>I</source> <translation>I</translation> </message> <message> - <location line="+14"/> + <location/> <source>New Resource</source> <translation>Новый ресурс</translation> </message> <message> - <location line="+10"/> + <location/> <source>A</source> <translation>A</translation> </message> <message> - <location line="+7"/> + <location/> <source>Remove Resource or File</source> <translation>Удалить ресурс или файл</translation> </message> @@ -3623,97 +3616,97 @@ to <translation>< Р А З Д Е Л И Т Е Л Ь ></translation> </message> <message> - <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="+13"/> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui"/> <source>Customize Toolbars</source> <translation>Настройка панелей инструментов</translation> </message> <message> - <location line="+13"/> + <location/> <source>1</source> <translation>1</translation> </message> <message> - <location line="+8"/> + <location/> <source>Actions</source> <translation>Действия</translation> </message> <message> - <location line="+15"/> + <location/> <source>Toolbars</source> <translation>Панель инструментов</translation> </message> <message> - <location line="+7"/> + <location/> <source>Add new toolbar</source> <translation>Добавить новую панель инструментов</translation> </message> <message> - <location line="+3"/> + <location/> <source>New</source> <translation>Новая</translation> </message> <message> - <location line="+7"/> + <location/> <source>Remove selected toolbar</source> <translation>Удалить выбранную панель инструментов</translation> </message> <message> - <location line="+3"/> + <location/> <source>Remove</source> <translation>Удалить</translation> </message> <message> - <location line="+7"/> + <location/> <source>Rename toolbar</source> <translation>Переименовать панель инструментов</translation> </message> <message> - <location line="+3"/> + <location/> <source>Rename</source> <translation>Переименовать</translation> </message> <message> - <location line="+23"/> + <location/> <source>Move action up</source> <translation>Переместить действие вверх</translation> </message> <message> - <location line="+3"/> + <location/> <source>Up</source> <translation>Вверх</translation> </message> <message> - <location line="+13"/> + <location/> <source>Remove action from toolbar</source> <translation>Удалить действие из панели инструментов</translation> </message> <message> - <location line="+3"/> + <location/> <source><-</source> <translation><-</translation> </message> <message> - <location line="+13"/> + <location/> <source>Add action to toolbar</source> <translation>Добавить действие на панель инструментов</translation> </message> <message> - <location line="+3"/> + <location/> <source>-></source> <translation>-></translation> </message> <message> - <location line="+13"/> + <location/> <source>Move action down</source> <translation>Переместить действие вниз</translation> </message> <message> - <location line="+3"/> + <location/> <source>Down</source> <translation>Вниз</translation> </message> <message> - <location line="+25"/> + <location/> <source>Current Toolbar Actions</source> <translation>Текущие действия панели инструментов</translation> </message> @@ -3781,17 +3774,17 @@ Do you want overwrite the template?</source> <translation>Выберите каталог для сохранения шаблонов</translation> </message> <message> - <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="+45"/> + <location filename="../tools/designer/src/designer/saveformastemplate.ui"/> <source>Save Form As Template</source> <translation>Сохранить форму как шаблон</translation> </message> <message> - <location line="+49"/> + <location/> <source>&Category:</source> <translation>&Категория:</translation> </message> <message> - <location line="-35"/> + <location/> <source>&Name:</source> <translation>&Имя:</translation> </message> @@ -3809,22 +3802,22 @@ Do you want overwrite the template?</source> <context> <name>SelectSignalDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="+14"/> + <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui"/> <source>Go to slot</source> <translation>Переход к слоту</translation> </message> <message> - <location line="+6"/> + <location/> <source>Select signal</source> <translation>Выбор сигнала</translation> </message> <message> - <location line="+13"/> + <location/> <source>signal</source> <translation>сигнал</translation> </message> <message> - <location line="+5"/> + <location/> <source>class</source> <translation>класс</translation> </message> @@ -3840,37 +3833,32 @@ Do you want overwrite the template?</source> <context> <name>SignalSlotDialogClass</name> <message> - <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="+13"/> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui"/> <source>Signals and slots</source> <translation>Сигналы и слоты</translation> </message> <message> - <location line="+6"/> + <location/> <source>Slots</source> <translation>Слоты</translation> </message> <message> - <location line="+11"/> - <location line="+49"/> + <location/> <source>Add</source> <translation>Добавить</translation> </message> <message> - <location line="-46"/> - <location line="+10"/> - <location line="+39"/> - <location line="+10"/> + <location/> <source>...</source> <translation>...</translation> </message> <message> - <location line="-52"/> - <location line="+49"/> + <location/> <source>Delete</source> <translation>Удалить</translation> </message> <message> - <location line="-21"/> + <location/> <source>Signals</source> <translation>Сигналы</translation> </message> @@ -3934,7 +3922,7 @@ Do you want overwrite the template?</source> <context> <name>VersionDialog</name> <message> - <location filename="../tools/designer/src/designer/versiondialog.cpp" line="+171"/> + <location filename="../tools/designer/src/designer/versiondialog.cpp" line="+170"/> <source><h3>%1</h3><br/><br/>Version %2</source> <translation><h3>%1</h3><br/><br/>Версия %2</translation> </message> @@ -4053,7 +4041,7 @@ Do you want overwrite the template?</source> <context> <name>qdesigner_internal::ActionModel</name> <message> - <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="+95"/> + <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="+89"/> <source>Name</source> <translation>Имя</translation> </message> @@ -4609,57 +4597,57 @@ Do you want overwrite the template?</source> <context> <name>qdesigner_internal::Dialog</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="+53"/> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui"/> <source>Dialog</source> <translation>Диалог</translation> </message> <message> - <location line="+12"/> + <location/> <source>StringList</source> <translation>Список строк</translation> </message> <message> - <location line="+28"/> + <location/> <source>New String</source> <translation>Новая строка</translation> </message> <message> - <location line="+3"/> + <location/> <source>&New</source> <translation>&Новая</translation> </message> <message> - <location line="+10"/> + <location/> <source>Delete String</source> <translation>Удалить строку</translation> </message> <message> - <location line="+3"/> + <location/> <source>&Delete</source> <translation>&Удалить</translation> </message> <message> - <location line="+33"/> + <location/> <source>&Value:</source> <translation>&Значение:</translation> </message> <message> - <location line="+38"/> + <location/> <source>Move String Up</source> <translation>Переместить строку вверх</translation> </message> <message> - <location line="+3"/> + <location/> <source>Up</source> <translation>Вверх</translation> </message> <message> - <location line="+7"/> + <location/> <source>Move String Down</source> <translation>Переместить строку вниз</translation> </message> <message> - <location line="+3"/> + <location/> <source>Down</source> <translation> Вниз </translation> </message> @@ -4828,7 +4816,7 @@ Do you want overwrite the template?</source> <translation>Выбрать предка</translation> </message> <message> - <location line="+41"/> + <location line="+46"/> <source>Lay out</source> <translation>Компоновка</translation> </message> @@ -4860,7 +4848,7 @@ Do you want overwrite the template?</source> <context> <name>qdesigner_internal::FormWindowManager</name> <message> - <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="+364"/> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="+365"/> <source>Cu&t</source> <translation>&Вырезать</translation> </message> @@ -5074,38 +5062,37 @@ Do you want overwrite the template?</source> <context> <name>qdesigner_internal::GridPanel</name> <message> - <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="+13"/> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui"/> <source>Form</source> <translation>Форма</translation> </message> <message> - <location line="+18"/> + <location/> <source>Grid</source> <translation>Сетка</translation> </message> <message> - <location line="+12"/> + <location/> <source>Visible</source> <translation>Видимая</translation> </message> <message> - <location line="+7"/> + <location/> <source>Grid &X</source> <translation>Сетка &X</translation> </message> <message> - <location line="+26"/> - <location line="+57"/> + <location/> <source>Snap</source> <translation>Прилипать</translation> </message> <message> - <location line="-48"/> + <location/> <source>Reset</source> <translation>Сбросить</translation> </message> <message> - <location line="+22"/> + <location/> <source>Grid &Y</source> <translation>Сетка &Y</translation> </message> @@ -5227,53 +5214,53 @@ Do you want overwrite the template?</source> <translation>Свойства &<<</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="+143"/> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui"/> <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="+2"/> <source>Properties &>></source> <translation>Свойства &>></translation> </message> <message> - <location line="-75"/> + <location/> <source>Items List</source> <translation>Список элементов</translation> </message> <message> - <location line="+9"/> + <location/> <source>New Item</source> <translation>Новый элемент</translation> </message> <message> - <location line="+3"/> + <location/> <source>&New</source> <translation>&Новый</translation> </message> <message> - <location line="+7"/> + <location/> <source>Delete Item</source> <translation>Удалить элемент</translation> </message> <message> - <location line="+3"/> + <location/> <source>&Delete</source> <translation>&Удалить</translation> </message> <message> - <location line="+20"/> + <location/> <source>Move Item Up</source> <translation>Переместить элемент вверх</translation> </message> <message> - <location line="+3"/> + <location/> <source>U</source> <translation>U</translation> </message> <message> - <location line="+7"/> + <location/> <source>Move Item Down</source> <translation>Переместить элемент вниз</translation> </message> <message> - <location line="+3"/> + <location/> <source>D</source> <translation>D</translation> </message> @@ -5380,43 +5367,42 @@ Do you want overwrite the template?</source> <context> <name>qdesigner_internal::NewActionDialog</name> <message> - <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="+46"/> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui"/> <source>New Action...</source> <translation>Новое действие...</translation> </message> <message> - <location line="+8"/> + <location/> <source>&Text:</source> <translation>&Текст:</translation> </message> <message> - <location line="+20"/> + <location/> <source>Object &name:</source> <translation>&Имя объекта:</translation> </message> <message> - <location line="+13"/> + <location/> <source>&Icon:</source> <translation>&Значок:</translation> </message> <message> - <location line="+30"/> + <location/> <source>Shortcut:</source> <translation>Горячая клавиша:</translation> </message> <message> - <location line="+14"/> + <location/> <source>Checkable:</source> <translation>Триггерное:</translation> </message> <message> - <location line="+7"/> + <location/> <source>ToolTip:</source> <translation>Подсказка:</translation> </message> <message> - <location line="+19"/> - <location line="+21"/> + <location/> <source>...</source> <translation>...</translation> </message> @@ -5443,22 +5429,22 @@ Please select another name.</source> Укажите другое имя.</translation> </message> <message> - <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="+13"/> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui"/> <source>Create Dynamic Property</source> <translation>Создание динамического свойства</translation> </message> <message> - <location line="+24"/> + <location/> <source>Property Name</source> <translation>Имя свойства</translation> </message> <message> - <location line="+12"/> + <location/> <source>horizontalSpacer</source> <translation type="unfinished"></translation> </message> <message> - <location line="+24"/> + <location/> <source>Property Type</source> <translation>Тип свойства</translation> </message> @@ -5522,27 +5508,27 @@ Please select another name.</source> <translation>Внутренняя ошибка: Шаблон не выбран.</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="+82"/> + <location filename="../tools/designer/src/lib/shared/newformwidget.ui"/> <source>0</source> <translation>0</translation> </message> <message> - <location line="+19"/> + <location/> <source>Choose a template for a preview</source> <translation>Выберите шаблон для предпросмотра</translation> </message> <message> - <location line="+44"/> + <location/> <source>Embedded Design</source> <translation type="unfinished">Оформление портативных устройств</translation> </message> <message> - <location line="+12"/> + <location/> <source>Device:</source> <translation>Устройство:</translation> </message> <message> - <location line="+7"/> + <location/> <source>Screen Size:</source> <translation>Размер экрана:</translation> </message> @@ -5592,9 +5578,6 @@ Please select another name.</source> <source>&Find in Text...</source> <translation>&Найти в тексте...</translation> </message> -</context> -<context> - <name>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate</name> <message> <location line="-438"/> <source>Change Current Page</source> @@ -5614,22 +5597,22 @@ Please select another name.</source> <translation>%1 %2</translation> </message> <message> - <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="+53"/> + <location filename="../tools/designer/src/lib/shared/orderdialog.ui"/> <source>Change Page Order</source> <translation>Изменение порядка страниц</translation> </message> <message> - <location line="+6"/> + <location/> <source>Page Order</source> <translation>Порядок страниц</translation> </message> <message> - <location line="+57"/> + <location/> <source>Move page up</source> <translation>Переместить страницу выше</translation> </message> <message> - <location line="+7"/> + <location/> <source>Move page down</source> <translation>Переместить страницу ниже</translation> </message> @@ -5637,47 +5620,47 @@ Please select another name.</source> <context> <name>qdesigner_internal::PaletteEditor</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="+61"/> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui"/> <source>Edit Palette</source> <translation>Правка палитры</translation> </message> <message> - <location line="+24"/> + <location/> <source>Tune Palette</source> <translation>Настройка палитры</translation> </message> <message> - <location line="+37"/> + <location/> <source>Show Details</source> <translation type="unfinished">Показывать детали</translation> </message> <message> - <location line="+7"/> + <location/> <source>Compute Details</source> <translation type="unfinished">Расчитывать детали</translation> </message> <message> - <location line="+10"/> + <location/> <source>Quick</source> <translation type="unfinished">Быстрый</translation> </message> <message> - <location line="+18"/> + <location/> <source>Preview</source> <translation>Предпросмотр</translation> </message> <message> - <location line="+12"/> + <location/> <source>Disabled</source> <translation>Выключенная</translation> </message> <message> - <location line="+7"/> + <location/> <source>Inactive</source> <translation>Неактивная</translation> </message> <message> - <location line="+7"/> + <location/> <source>Active</source> <translation>Активная</translation> </message> @@ -5813,9 +5796,6 @@ Please select another name.</source> <source>Browse...</source> <translation>Обзор...</translation> </message> -</context> -<context> - <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name> <message> <location line="+118"/> <source>Load Custom Device Skin</source> @@ -5895,57 +5875,57 @@ ate the goose who was loose.</source> <context> <name>qdesigner_internal::PreviewWidget</name> <message> - <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="+61"/> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui"/> <source>Preview Window</source> <translation>Окно предпросмотра</translation> </message> <message> - <location line="+20"/> + <location/> <source>LineEdit</source> <translation>LineEdit</translation> </message> <message> - <location line="+8"/> + <location/> <source>ComboBox</source> <translation>ComboBox</translation> </message> <message> - <location line="+19"/> + <location/> <source>PushButton</source> <translation>PushButton</translation> </message> <message> - <location line="+58"/> + <location/> <source>ButtonGroup2</source> <translation>ButtonGroup2</translation> </message> <message> - <location line="+12"/> + <location/> <source>CheckBox1</source> <translation>CheckBox1</translation> </message> <message> - <location line="+10"/> + <location/> <source>CheckBox2</source> <translation>CheckBox2</translation> </message> <message> - <location line="+10"/> + <location/> <source>ButtonGroup</source> <translation>ButtonGroup</translation> </message> <message> - <location line="+12"/> + <location/> <source>RadioButton1</source> <translation>RadioButton1</translation> </message> <message> - <location line="+10"/> + <location/> <source>RadioButton2</source> <translation>RadioButton2</translation> </message> <message> - <location line="+7"/> + <location/> <source>RadioButton3</source> <translation>RadioButton3</translation> </message> @@ -6628,23 +6608,23 @@ Class: %2</source> <context> <name>qdesigner_internal::TableWidgetEditor</name> <message> - <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="+97"/> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui"/> <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="+218"/> <source>Properties &>></source> <translation>Свойства &>></translation> </message> <message> - <location line="-44"/> + <location/> <source>Edit Table Widget</source> <translation>Правка табличного виджета</translation> </message> <message> - <location line="+10"/> + <location/> <source>&Items</source> <translation>&Элементы</translation> </message> <message> - <location line="+12"/> + <location/> <source>Table Items</source> <translation>Элементы таблицы</translation> </message> @@ -6690,18 +6670,17 @@ Class: %2</source> <translation>Выберите каталог для сохранения шаблонов</translation> </message> <message> - <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="+13"/> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui"/> <source>Form</source> <translation>Форма</translation> </message> <message> - <location line="+6"/> + <location/> <source>Additional Template Paths</source> <translation>Дополнительные пути к шаблонам</translation> </message> <message> - <location line="+9"/> - <location line="+7"/> + <location/> <source>...</source> <translation>...</translation> </message> @@ -6803,13 +6782,13 @@ Class: %2</source> <translation>Общие свойства</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="+101"/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/> <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+53"/> <source>New Item</source> <translation>Новый элемент</translation> </message> <message> - <location line="+10"/> + <location/> <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+19"/> <source>New Subitem</source> <translation>Новый дочерний элемент</translation> @@ -6820,88 +6799,88 @@ Class: %2</source> <translation>Свойства &<<</translation> </message> <message> - <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="+86"/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui"/> <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+2"/> <source>Properties &>></source> <translation>Свойства &>></translation> </message> <message> - <location line="-144"/> + <location/> <source>Edit Tree Widget</source> - <translation type="unfinished">Изменение виджета Tree</translation> + <translation type="unfinished">Изменение виджета Дерево</translation> </message> <message> - <location line="+10"/> + <location/> <source>&Items</source> <translation>&Элементы</translation> </message> <message> - <location line="+24"/> + <location/> <source>Tree Items</source> <translation>Элементы дерева</translation> </message> <message> - <location line="+4"/> + <location/> <source>1</source> <translation>1</translation> </message> <message> - <location line="+13"/> + <location/> <source>&New</source> <translation>&Новый</translation> </message> <message> - <location line="+10"/> + <location/> <source>New &Subitem</source> <translation>Новый &дочерний элемент</translation> </message> <message> - <location line="+7"/> + <location/> <source>Delete Item</source> <translation>Удалить элемент</translation> </message> <message> - <location line="+3"/> + <location/> <source>&Delete</source> <translation>&Удалить</translation> </message> <message> - <location line="+20"/> + <location/> <source>Move Item Left (before Parent Item)</source> <translation>Переместить элемент влево (перед родительским)</translation> </message> <message> - <location line="+3"/> + <location/> <source>L</source> <translation>L</translation> </message> <message> - <location line="+7"/> + <location/> <source>Move Item Right (as a First Subitem of the Next Sibling Item)</source> <translation>Переместить элемент вправо (сделать первым дочерним элементом соседнего элемента)</translation> </message> <message> - <location line="+3"/> + <location/> <source>R</source> <translation></translation> </message> <message> - <location line="+7"/> + <location/> <source>Move Item Up</source> <translation>Переместить элемент вверх</translation> </message> <message> - <location line="+3"/> + <location/> <source>U</source> <translation>U</translation> </message> <message> - <location line="+7"/> + <location/> <source>Move Item Down</source> <translation>Переместить элемент вниз</translation> </message> <message> - <location line="+3"/> + <location/> <source>D</source> <translation>D</translation> </message> diff --git a/translations/linguist_ru.ts b/translations/linguist_ru.ts index 1749d48..3f26c49 100644 --- a/translations/linguist_ru.ts +++ b/translations/linguist_ru.ts @@ -4,7 +4,7 @@ <context> <name>AboutDialog</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1357"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1366"/> <source>Qt Linguist</source> <translation>Qt Linguist</translation> </message> @@ -12,52 +12,52 @@ <context> <name>BatchTranslationDialog</name> <message> - <location filename="../tools/linguist/linguist/batchtranslation.ui" line="+54"/> + <location filename="../tools/linguist/linguist/batchtranslation.ui"/> <source>Qt Linguist - Batch Translation</source> <translation>Qt Linguist - Пакетный перевод</translation> </message> <message> - <location line="+18"/> + <location/> <source>Options</source> <translation>Параметры</translation> </message> <message> - <location line="+18"/> + <location/> <source>Set translated entries to finished</source> <translation>Помечать переведенные записи как завершённые</translation> </message> <message> - <location line="+10"/> + <location/> <source>Retranslate entries with existing translation</source> <translation>Переводить записи, уже имеющие перевод</translation> </message> <message> - <location line="+10"/> + <location/> <source>Translate also finished entries</source> <translation>Также переводить записи с завершёнными переводами</translation> </message> <message> - <location line="+16"/> + <location/> <source>Phrase book preference</source> - <translation>Предпочитаемые разговорники</translation> + <translation>Предпочитаемые глоссарии</translation> </message> <message> - <location line="+35"/> + <location/> <source>Move up</source> <translation>Поднять</translation> </message> <message> - <location line="+7"/> + <location/> <source>Move down</source> <translation>Опустить</translation> </message> <message> - <location line="+58"/> + <location/> <source>&Run</source> <translation>&Выполнить</translation> </message> <message> - <location line="+7"/> + <location/> <source>Cancel</source> <translation>Отмена</translation> </message> @@ -91,14 +91,14 @@ </translation> </message> <message> - <location filename="../tools/linguist/linguist/batchtranslation.ui" line="-126"/> + <location filename="../tools/linguist/linguist/batchtranslation.ui"/> <source>Note that the modified entries will be reset to unfinished if 'Set translated entries to finished' above is unchecked</source> <translation>Имейте в виду, что изменённые записи будут отмечены как незавершённые, если не включен параметр "Помечать переведенные записи как завершённые"</translation> </message> <message> - <location line="+85"/> + <location/> <source>The batch translator will search through the selected phrase books in the order given above</source> - <translation>Пакетный переводчик будет искать в выбранных разговорниках в указанном выше порядке</translation> + <translation>Пакетный переводчик будет искать в выбранных глоссариях в указанном выше порядке</translation> </message> </context> <context> @@ -110,11 +110,17 @@ </message> <message> <location line="+4"/> + <location line="+8"/> <source><p>[more duplicates omitted]</source> <translation><p>[остальные повторы не указаны]</translation> </message> <message> - <location line="+3"/> + <location line="-5"/> + <source><p>* ID: %1</source> + <translation><p>* ID: %1</translation> + </message> + <message> + <location line="+8"/> <source><p>* Context: %1<br>* Source: %2</source> <translation><p>* Контекст: %1<br>* Источник: %2</translation> </message> @@ -124,7 +130,7 @@ <translation><br>* Комментарий: %3</translation> </message> <message> - <location line="+70"/> + <location line="+71"/> <source>Linguist does not know the plural rules for '%1'. Will assume a single universal form.</source> <translation>Qt Linguist не знает правила множественных форм для '%1'. @@ -161,7 +167,7 @@ Will assume a single universal form.</source> <message> <location line="+3"/> <source>A phrase book suggestion for '%1' was ignored.</source> - <translation>Предложение разговорника для '%1' пропущено.</translation> + <translation>Предложение глоссария для '%1' пропущено.</translation> </message> <message> <location line="+3"/> @@ -188,92 +194,92 @@ Will assume a single universal form.</source> <translation></translation> </message> <message> - <location filename="../tools/linguist/linguist/finddialog.ui" line="+60"/> + <location filename="../tools/linguist/linguist/finddialog.ui"/> <source>Find</source> <translation>Поиск</translation> </message> <message> - <location line="+3"/> + <location/> <source>This window allows you to search for some text in the translation source file.</source> <translation>Данное окно позволяет искать текст в файле перевода.</translation> </message> <message> - <location line="+28"/> + <location/> <source>&Find what:</source> <translation>&Искать:</translation> </message> <message> - <location line="+10"/> + <location/> <source>Type in the text to search for.</source> <translation>Введите искомый текст.</translation> </message> <message> - <location line="+9"/> + <location/> <source>Options</source> <translation>Параметры</translation> </message> <message> - <location line="+12"/> + <location/> <source>Source texts are searched when checked.</source> <translation>Если отмечено, поиск будет вестись в исходных текстах.</translation> </message> <message> - <location line="+3"/> + <location/> <source>&Source texts</source> <translation>&Исходные тексты</translation> </message> <message> - <location line="+10"/> + <location/> <source>Translations are searched when checked.</source> <translation>Если отмечено, поиск будет вестись в переведённых текстах.</translation> </message> <message> - <location line="+3"/> + <location/> <source>&Translations</source> <translation>&Переводы</translation> </message> <message> - <location line="+10"/> + <location/> <source>Texts such as 'TeX' and 'tex' are considered as different when checked.</source> <translation>Если отмечено, строки "ПрИмЕр" и "пример" будет считаться разными.</translation> </message> <message> - <location line="+3"/> + <location/> <source>&Match case</source> <translation>С учётом &регистра</translation> </message> <message> - <location line="+7"/> + <location/> <source>Comments and contexts are searched when checked.</source> <translation>Если отмечено, поиск будет вестись по контекстам и комментариям.</translation> </message> <message> - <location line="+3"/> + <location/> <source>&Comments</source> <translation>&Комментарии</translation> </message> <message> - <location line="+10"/> + <location/> <source>Ignore &accelerators</source> <translation>Пропускать &акселераторы</translation> </message> <message> - <location line="+23"/> + <location/> <source>Click here to find the next occurrence of the text you typed in.</source> <translation>Найти следующее совпадение для введённого текста.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Find Next</source> <translation>Найти далее</translation> </message> <message> - <location line="+13"/> + <location/> <source>Click here to close this window.</source> <translation>Закрыть окно.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Cancel</source> <translation>Отмена</translation> </message> @@ -281,7 +287,7 @@ Will assume a single universal form.</source> <context> <name>FormMultiWidget</name> <message> - <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+296"/> + <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+302"/> <source>Alt+Delete</source> <extracomment>translate, but don't change</extracomment> <translation type="unfinished"></translation> @@ -306,23 +312,27 @@ Will assume a single universal form.</source> <message> <location line="+1"/> <source>Delete non-empty length variant?</source> - <translation type="unfinished"></translation> + <translation>Удалить непустой вариант длины?</translation> </message> </context> <context> <name>LRelease</name> <message numerus="yes"> - <location filename="../tools/linguist/shared/qm.cpp" line="+747"/> + <location filename="../tools/linguist/shared/qm.cpp" line="+763"/> <source>Dropped %n message(s) which had no ID.</source> <translation type="unfinished"> - <numerusform></numerusform> + <numerusform>Удалено %n сообщение, у которого не было ID.</numerusform> + <numerusform>Удалено %n сообщения, у которых не было ID.</numerusform> + <numerusform>Удалено %n сообщений, у которых не было ID.</numerusform> </translation> </message> <message numerus="yes"> <location line="+4"/> <source>Excess context/disambiguation dropped from %n message(s).</source> <translation type="unfinished"> - <numerusform></numerusform> + <numerusform>Удалён лишний контекст из %n сообщения.</numerusform> + <numerusform>Удалён лишний контекст из %n сообщений.</numerusform> + <numerusform>Удалён лишний контекст из %n сообщений.</numerusform> </translation> </message> <message numerus="yes"> @@ -355,14 +365,14 @@ Will assume a single universal form.</source> <context> <name>MainWindow</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1315"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1324"/> <source></source> <comment>This is the application's main window.</comment> <translatorcomment>Основное окно программы.</translatorcomment> <translation></translation> </message> <message> - <location line="+158"/> + <location line="+160"/> <source>Source text</source> <translation>Исходный текст</translation> </message> @@ -374,27 +384,27 @@ Will assume a single universal form.</source> </message> <message> <location line="-2"/> - <location line="+62"/> + <location line="+63"/> <source>Context</source> <translation>Контекст</translation> </message> <message> - <location line="-61"/> + <location line="-62"/> <source>Items</source> <translation>Записи</translation> </message> <message> - <location line="+78"/> + <location line="+79"/> <source>This panel lists the source contexts.</source> <translation>В данной панели перечислены исходные контексты.</translation> </message> <message> - <location line="+15"/> + <location line="+13"/> <source>Strings</source> <translation>Строки</translation> </message> <message> - <location line="+39"/> + <location line="+37"/> <source>Phrases and guesses</source> <translation>Фразы и похожие переводы</translation> </message> @@ -415,7 +425,7 @@ Will assume a single universal form.</source> <translation> ИЗМ </translation> </message> <message> - <location line="+130"/> + <location line="+139"/> <source>Loading...</source> <translation>Загрузка...</translation> </message> @@ -453,7 +463,7 @@ Skip loading the first named file?</source> </translation> </message> <message> - <location line="+93"/> + <location line="+94"/> <source>Related files (%1);;</source> <translation>Связанные файлы (%1);;</translation> </message> @@ -469,7 +479,7 @@ Skip loading the first named file?</source> <translation>Файл сохранён.</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui" line="+247"/> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+15"/> <location line="+1165"/> <source>Release</source> @@ -586,29 +596,29 @@ All files (*)</source> <message> <location line="+30"/> <source>Create New Phrase Book</source> - <translation>Создать разговорник</translation> + <translation>Создать глоссарий</translation> </message> <message> <location line="+1"/> <source>Qt phrase books (*.qph) All files (*)</source> - <translation>Разговорники Qt (*.qph) + <translation>Глоссарии Qt (*.qph) Все файлы (*)</translation> </message> <message> <location line="+11"/> <source>Phrase book created.</source> - <translation>Разговорник создан.</translation> + <translation>Глоссарий создан.</translation> </message> <message> <location line="+17"/> <source>Open Phrase Book</source> - <translation>Открыть разговорник</translation> + <translation>Открыть глоссарий</translation> </message> <message> <location line="+1"/> <source>Qt phrase books (*.qph);;All files (*)</source> - <translation>Разговорники Qt (*.qph);;Все файлы (*)</translation> + <translation>Глоссарии Qt (*.qph);;Все файлы (*)</translation> </message> <message numerus="yes"> <location line="+7"/> @@ -624,22 +634,22 @@ All files (*)</source> <location line="+3"/> <location line="+7"/> <source>Add to phrase book</source> - <translation>Добавить в разговорник</translation> + <translation>Добавить в глоссарий</translation> </message> <message> <location line="-9"/> <source>No appropriate phrasebook found.</source> - <translation>Подходящий разговорник не найден.</translation> + <translation>Подходящий глоссарий не найден.</translation> </message> <message> <location line="+3"/> <source>Adding entry to phrasebook %1</source> - <translation>Добавление записи в разговорник %1</translation> + <translation>Добавление записи в глоссарий %1</translation> </message> <message> <location line="+7"/> <source>Select phrase book to add to</source> - <translation>Выберите разговорник, в который желаете добавить фразу</translation> + <translation>Выберите глоссарий, в который желаете добавить фразу</translation> </message> <message> <location line="+29"/> @@ -739,15 +749,14 @@ All files (*)</source> <translation>&Сохранить</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui" line="-11"/> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-14"/> <location line="+11"/> <source>Save &As...</source> <translation>Сохранить &как...</translation> </message> <message> - <location line="+508"/> - <location line="+3"/> + <location/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-9"/> <location line="+10"/> <source>Release As...</source> @@ -765,7 +774,7 @@ All files (*)</source> <translation>Сохранить все</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui" line="+118"/> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/> <source>&Release All</source> <translation>С&компилировать все</translation> @@ -796,13 +805,13 @@ All files (*)</source> <translation>&Найти и перевести в '%1'...</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui" line="-32"/> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+2"/> <source>Translation File &Settings...</source> <translation>&Параметры файла перевода...</translation> </message> <message> - <location line="-100"/> + <location/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/> <source>&Batch Translation...</source> <translation>Пак&етный перевод...</translation> @@ -813,31 +822,31 @@ All files (*)</source> <translation>&Найти и перевести...</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui" line="+28"/> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+51"/> <source>File</source> <translation>Файл</translation> </message> <message> - <location line="+11"/> + <location/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/> <source>Edit</source> <translation>Правка</translation> </message> <message> - <location line="+11"/> + <location/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/> <source>Translation</source> <translation>Перевод</translation> </message> <message> - <location line="+11"/> + <location/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/> <source>Validation</source> <translation>Проверка</translation> </message> <message> - <location line="+11"/> + <location/> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/> <source>Help</source> <translation>Справка</translation> @@ -845,658 +854,655 @@ All files (*)</source> <message> <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+84"/> <source>Cannot read from phrase book '%1'.</source> - <translation>Не удалось прочитать из разговорника '%1'.</translation> + <translation>Не удалось прочитать из глоссария '%1'.</translation> </message> <message> <location line="+15"/> <source>Close this phrase book.</source> - <translation>Закрыть разговорник.</translation> + <translation>Закрыть глоссарий.</translation> </message> <message> <location line="+4"/> <source>Enables you to add, modify, or delete entries in this phrase book.</source> - <translation>Позволяет добавлять, изменять и удалять записи в разговорнике.</translation> + <translation>Позволяет добавлять, изменять и удалять записи в глоссарии.</translation> </message> <message> <location line="+5"/> <source>Print the entries in this phrase book.</source> - <translation>Печать записей фраз разговорника.</translation> + <translation>Печать записей фраз глоссария.</translation> </message> <message> <location line="+16"/> <source>Cannot create phrase book '%1'.</source> - <translation>Не удалось создать разговорник '%1'.</translation> + <translation>Не удалось создать глоссарий '%1'.</translation> </message> <message> <location line="+10"/> <source>Do you want to save phrase book '%1'?</source> - <translation>Желаете сохранить разговорник '%1'?</translation> + <translation>Желаете сохранить глоссарий '%1'?</translation> </message> <message> - <location line="+323"/> + <location line="+349"/> <source>All</source> <translation>Все</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.ui" line="-751"/> + <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>MainWindow</source> <translation>Главное окно</translation> </message> <message> - <location line="+14"/> + <location/> <source>&Phrases</source> <translation>Фра&зы</translation> </message> <message> - <location line="+4"/> + <location/> <source>&Close Phrase Book</source> - <translation>&Закрыть разговорник</translation> + <translation>&Закрыть глоссарий</translation> </message> <message> - <location line="+5"/> + <location/> <source>&Edit Phrase Book</source> - <translation>&Редактироваь разговорник</translation> + <translation>&Редактироваь глоссарий</translation> </message> <message> - <location line="+5"/> + <location/> <source>&Print Phrase Book</source> - <translation>&Печатать разговорник</translation> + <translation>&Печатать глоссарий</translation> </message> <message> - <location line="+13"/> + <location/> <source>V&alidation</source> <translation>П&роверка</translation> </message> <message> - <location line="+9"/> + <location/> <source>&View</source> <translation>&Вид</translation> </message> <message> - <location line="+4"/> + <location/> <source>Vie&ws</source> <translation>Вид&ы</translation> </message> <message> - <location line="+5"/> + <location/> <source>&Toolbars</source> <translation>Пан&ели инструментов</translation> </message> <message> - <location line="+13"/> + <location/> <source>&Help</source> <translation>&Справка</translation> </message> <message> - <location line="+9"/> + <location/> <source>&Translation</source> <translation>П&еревод</translation> </message> <message> - <location line="+11"/> + <location/> <source>&File</source> <translation>&Файл</translation> </message> <message> - <location line="+4"/> + <location/> <source>Recently Opened &Files</source> <translation>Недавно открытые &файлы</translation> </message> <message> - <location line="+23"/> + <location/> <source>&Edit</source> <translation>&Правка</translation> </message> <message> - <location line="+27"/> + <location/> <source>&Open...</source> <translation>&Открыть...</translation> </message> <message> - <location line="+3"/> + <location/> <source>Open a Qt translation source file (TS file) for editing</source> <translation>Открыть исходный файл переводов Qt (файл TS) для изменения</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+O</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>E&xit</source> <translation>В&ыход</translation> </message> <message> - <location line="+6"/> + <location/> <source>Close this window and exit.</source> <translation>Закрыть окно и выйти.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+Q</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> + <location/> <source>Save</source> <translation>Сохранить</translation> </message> <message> - <location line="+3"/> + <location/> <source>Save changes made to this Qt translation source file</source> <translation>Сохранить изменения в данном исходном файле перевода Qt</translation> </message> <message> - <location line="+8"/> + <location/> <source>Save As...</source> <translation>Сохранить как...</translation> </message> <message> - <location line="+3"/> + <location/> <source>Save changes made to this Qt translation source file into a new file.</source> <translation>Сохранить изменения в данном исходном файле перевода Qt в новый файл.</translation> </message> <message> - <location line="+8"/> + <location/> <source>Create a Qt message file suitable for released applications from the current message file.</source> <translation>Скомпилировать файл перевода Qt из текущего файла.</translation> </message> <message> - <location line="+5"/> + <location/> <source>&Print...</source> <translation>&Печать...</translation> </message> <message> - <location line="+3"/> + <location/> <source>Print a list of all the translation units in the current translation source file.</source> <translation>Печать списка всех записей перевода из текущего файла.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+P</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> + <location/> <source>&Undo</source> <translation>&Отменить</translation> </message> <message> - <location line="+3"/> + <location/> <source>Undo the last editing operation performed on the current translation.</source> <translation>Отменить последнее изменение текущего перевода.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+Z</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> + <location/> <source>&Redo</source> <translation>&Повторить</translation> </message> <message> - <location line="+3"/> + <location/> <source>Redo an undone editing operation performed on the translation.</source> <translation>Повторить отменённую правку перевода.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+Y</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> + <location/> <source>Cu&t</source> <translation>Выр&езать</translation> </message> <message> - <location line="+3"/> + <location/> <source>Copy the selected translation text to the clipboard and deletes it.</source> <translation>Скопировать отмеченный текст в буфер обмена и удалить его из оригинала.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+X</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> + <location/> <source>&Copy</source> <translation>&Копировать</translation> </message> <message> - <location line="+3"/> + <location/> <source>Copy the selected translation text to the clipboard.</source> <translation>Скопировать отмеченный текст в буфер обмена.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+C</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> + <location/> <source>&Paste</source> <translation>&Вставить</translation> </message> <message> - <location line="+3"/> + <location/> <source>Paste the clipboard text into the translation.</source> <translation>Вставить текст из буфера обмена в перевод.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+V</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> + <location/> <source>Select &All</source> <translation>В&ыделить всё</translation> </message> <message> - <location line="+3"/> + <location/> <source>Select the whole translation text.</source> <translation>Выделить весь текст перевода.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+A</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> + <location/> <source>&Find...</source> <translation>&Найти...</translation> </message> <message> - <location line="+3"/> + <location/> <source>Search for some text in the translation source file.</source> <translation>Найти текст в исходном файле перевода.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+F</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> + <location/> <source>Find &Next</source> <translation>Найти д&алее</translation> </message> <message> - <location line="+3"/> + <location/> <source>Continue the search where it was left.</source> <translation>Продолжить поиск с места, где он был остановлен.</translation> </message> <message> - <location line="+3"/> + <location/> <source>F3</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> + <location/> <source>&Prev Unfinished</source> <translation>&Предыдущий незавершённый</translation> </message> <message> - <location line="+348"/> + <location/> <source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the TS file.</source> <translation>Создание готового файла перевода Qt из текущего файла. Имя файла будет автоматически определено из имени .ts файла.</translation> </message> <message> - <location line="+136"/> + <location/> <source>Length Variants</source> - <translation type="unfinished"></translation> + <translation>Варианты длины</translation> </message> <message> - <location line="-478"/> + <location/> <source>Move to the previous unfinished item.</source> <translation>Перейти к предыдущему незавершённому переводу.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+K</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> + <location/> <source>&Next Unfinished</source> <translation>&Следующий незавершённый</translation> </message> <message> - <location line="+6"/> + <location/> <source>Move to the next unfinished item.</source> <translation>Перейти к следующему незавершённому переводу.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+J</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> + <location/> <source>P&rev</source> <translation>Пр&едыдущий</translation> </message> <message> - <location line="+6"/> + <location/> <source>Move to the previous item.</source> <translation>Перейти к предыдущему переводу.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+Shift+K</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> + <location/> <source>Ne&xt</source> <translation>С&ледующий</translation> </message> <message> - <location line="+6"/> + <location/> <source>Move to the next item.</source> <translation>Перейти к следующему переводу.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+Shift+J</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> + <location/> <source>&Done and Next</source> <translation>&Готово и далее</translation> </message> <message> - <location line="+6"/> + <location/> <source>Mark this item as done and move to the next unfinished item.</source> <translation>Пометить перевод как завершённый и перейти к следующему незавершённому.</translation> </message> <message> - <location line="+11"/> - <location line="+3"/> + <location/> <source>Copy from source text</source> <translation>Скопировать из исходного текста</translation> </message> <message> - <location line="+6"/> + <location/> <source>Copies the source text into the translation field.</source> <translation>Скопировать исходный текст в поле перевода.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+B</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> + <location/> <source>&Accelerators</source> <translation>&Акселераторы</translation> </message> <message> - <location line="+6"/> + <location/> <source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source> <translation>Переключение проверки акселераторов, т.е. совпадает ли количество амперсандов в исходном и переведённом текстах. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation> </message> <message> - <location line="+11"/> + <location/> <source>&Ending Punctuation</source> <translation>&Знаки препинания</translation> </message> <message> - <location line="+6"/> + <location/> <source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source> <translation>Переключение проверки знаков препинания в конце текста. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation> </message> <message> - <location line="+11"/> + <location/> <source>&Phrase matches</source> <translation>Совпадение &фраз</translation> </message> <message> - <location line="+6"/> + <location/> <source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source> <translation>Переключение проверки использования предложений для фраз. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation> </message> <message> - <location line="+11"/> + <location/> <source>Place &Marker Matches</source> <translation>Совпадение &маркеров</translation> </message> <message> - <location line="+6"/> + <location/> <source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source> <translation>Переключение проверки маркеров форматирования, т.е. все ли маркеры (%1, %2, ...) исходного текста присутствуют в переведённом. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation> </message> <message> - <location line="+8"/> + <location/> <source>&New Phrase Book...</source> - <translation>&Новый разговорник...</translation> + <translation>&Новый глоссарий...</translation> </message> <message> - <location line="+3"/> + <location/> <source>Create a new phrase book.</source> - <translation>Создать разговорник.</translation> + <translation>Создать глоссарий.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+N</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> + <location/> <source>&Open Phrase Book...</source> - <translation>&Открыть разговорник...</translation> + <translation>&Открыть глоссарий...</translation> </message> <message> - <location line="+3"/> + <location/> <source>Open a phrase book to assist translation.</source> - <translation>Открыть разговорник для помощи в переводе.</translation> + <translation>Открыть глоссарий для помощи в переводе.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+H</source> <translation type="unfinished"></translation> </message> <message> - <location line="+14"/> + <location/> <source>&Reset Sorting</source> <translation>&Сброс сортировки</translation> </message> <message> - <location line="+3"/> + <location/> <source>Sort the items back in the same order as in the message file.</source> <translation>Упорядочить элементы в той последовательности, в которой они находятся в файле.</translation> </message> <message> - <location line="+14"/> + <location/> <source>&Display guesses</source> <translation>&Предлагать похожие</translation> </message> <message> - <location line="+3"/> + <location/> <source>Set whether or not to display translation guesses.</source> <translation>Определяет необходимо или нет отображать похожие переводы.</translation> </message> <message> - <location line="+14"/> + <location/> <source>&Statistics</source> <translation>&Статистика</translation> </message> <message> - <location line="+3"/> + <location/> <source>Display translation statistics.</source> <translation>Показать статистику перевода.</translation> </message> <message> - <location line="+8"/> + <location/> <source>&Manual</source> <translation>&Руководство</translation> </message> <message> - <location line="+6"/> + <location/> <source>F1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> + <location/> <source>About Qt Linguist</source> <translation>О Qt Linguist</translation> </message> <message> - <location line="+8"/> + <location/> <source>About Qt</source> <translation>О Qt</translation> </message> <message> - <location line="+3"/> + <location/> <source>Display information about the Qt toolkit by Trolltech.</source> <translation>Показать информацию об инструментарии Qt от Nokia.</translation> </message> <message> - <location line="+14"/> + <location/> <source>&What's This?</source> <translation>&Что это?</translation> </message> <message> - <location line="+3"/> - <location line="+3"/> + <location/> <source>What's This?</source> <translation>Что это?</translation> </message> <message> - <location line="+3"/> + <location/> <source>Enter What's This? mode.</source> <translation>Переход в режим "Что это?".</translation> </message> <message> - <location line="+3"/> + <location/> <source>Shift+F1</source> <translation type="unfinished"></translation> </message> <message> - <location line="+11"/> + <location/> <source>&Search And Translate...</source> <translation>&Найти и перевести...</translation> </message> <message> - <location line="+3"/> + <location/> <source>Replace the translation on all entries that matches the search source text.</source> <translation>Заменить перевод всех записей, которые совпадают с искомым исходным текстом.</translation> </message> <message> - <location line="+14"/> + <location/> <source>Batch translate all entries using the information in the phrase books.</source> - <translation>Перевести все записи в пакетном режиме, используя информацию из разговорника.</translation> + <translation>Перевести все записи в пакетном режиме, используя информацию из глоссария.</translation> </message> <message> - <location line="+77"/> + <location/> <source>Open/Refresh Form &Preview</source> <translation>Открыть/обновить предпрос&мотр формы</translation> </message> <message> - <location line="+3"/> - <location line="+3"/> + <location/> <source>Form Preview Tool</source> <translation>Инструмент предпросмотра форм</translation> </message> <message> - <location line="+3"/> + <location/> <source>F5</source> <translation type="unfinished"></translation> </message> <message> - <location line="+22"/> + <location/> <source>&Add to Phrase Book</source> - <translation>&Добавить в разговорник</translation> + <translation>&Добавить в глоссарий</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+T</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Open Read-O&nly...</source> <translation>Открыть только для &чтения...</translation> </message> <message> - <location line="+5"/> + <location/> <source>&Save All</source> <translation>&Сохранить все</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+S</source> <translation type="unfinished"></translation> </message> <message> - <location line="+10"/> + <location/> <source>Close</source> <translation>Закрыть</translation> </message> <message> - <location line="+5"/> + <location/> <source>&Close All</source> <translation>&Закрыть все</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+W</source> <translation type="unfinished"></translation> </message> <message> - <location line="-473"/> + <location/> <source>Previous unfinished item</source> <translation>Предыдущий незавершённый перевод</translation> </message> <message> - <location line="+17"/> + <location/> <source>Next unfinished item</source> <translation>Следующий незавершённый перевод</translation> </message> <message> - <location line="+17"/> + <location/> <source>Move to previous item</source> <translation>Перейти к предыдущему переводу</translation> </message> <message> - <location line="+17"/> + <location/> <source>Next item</source> <translation>Следующий перевод</translation> </message> <message> - <location line="+20"/> + <location/> <source>Mark item as done and move to the next unfinished item</source> <translation>Пометить перевод как завершённый и перейти к следующему незавершённому</translation> </message> <message> - <location line="+20"/> + <location/> <source>Copies the source text into the translation field</source> <translation>Скопировать исходный текст в поле перевода</translation> </message> <message> - <location line="+20"/> + <location/> <source>Toggle the validity check of accelerators</source> <translation>Переключение проверки акселераторов</translation> </message> <message> - <location line="+17"/> + <location/> <source>Toggle the validity check of ending punctuation</source> <translation>Переключение проверки знаков препинания в конце текста</translation> </message> <message> - <location line="+17"/> + <location/> <source>Toggle checking that phrase suggestions are used</source> <translation>Переключение проверки использования предложений для фраз</translation> </message> <message> - <location line="+17"/> + <location/> <source>Toggle the validity check of place markers</source> <translation>Переключение проверки маркеров форматирования</translation> </message> @@ -1541,12 +1547,12 @@ All files (*)</source> <translation>Китайский</translation> </message> <message> - <location line="+53"/> + <location line="+47"/> <source>This whole panel allows you to view and edit the translation of some source text.</source> <translation>Данная панель позволяет просматривать и редактировать перевод исходного текста.</translation> </message> <message> - <location line="+18"/> + <location line="+10"/> <source>Source text</source> <translation>Исходный текст</translation> </message> @@ -1581,7 +1587,7 @@ All files (*)</source> <translation>Здесь вы можете оставить комментарий для собственного использования. Комментарии не влияют на перевод приложений.</translation> </message> <message> - <location line="+232"/> + <location line="+234"/> <source>%1 translation (%2)</source> <translation>%1 перевод (%2)</translation> </message> @@ -1611,7 +1617,7 @@ Line: %2</source> <context> <name>MessageModel</name> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+832"/> + <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+839"/> <source>Completion status for %1</source> <translation>Состояние завершённости для %1</translation> </message> @@ -1657,90 +1663,90 @@ Line: %2</source> <message> <location line="+1"/> <source>Cannot save phrase book '%1'.</source> - <translation>Не удалось сохранить разговорник '%1'.</translation> + <translation>Не удалось сохранить глоссарий '%1'.</translation> </message> <message> - <location filename="../tools/linguist/linguist/phrasebookbox.ui" line="+54"/> + <location filename="../tools/linguist/linguist/phrasebookbox.ui"/> <source>Edit Phrase Book</source> - <translation>Правка разговорника</translation> + <translation>Правка глоссария</translation> </message> <message> - <location line="+3"/> + <location/> <source>This window allows you to add, modify, or delete entries in a phrase book.</source> - <translation>Данное окно позволяет добавлять, изменять и удалять записи в разговорнике.</translation> + <translation>Данное окно позволяет добавлять, изменять и удалять записи в глоссарии.</translation> </message> <message> - <location line="+10"/> + <location/> <source>&Translation:</source> <translation>&Перевод:</translation> </message> <message> - <location line="+10"/> + <location/> <source>This is the phrase in the target language corresponding to the source phrase.</source> <translation>Перевод, соответствующий исходной фразе.</translation> </message> <message> - <location line="+7"/> + <location/> <source>S&ource phrase:</source> <translation>&Исходная фраза:</translation> </message> <message> - <location line="+10"/> + <location/> <source>This is a definition for the source phrase.</source> <translation>Определение исходной фразы.</translation> </message> <message> - <location line="+7"/> + <location/> <source>This is the phrase in the source language.</source> <translation>Фраза на исходном языке.</translation> </message> <message> - <location line="+7"/> + <location/> <source>&Definition:</source> <translation>&Определение:</translation> </message> <message> - <location line="+35"/> + <location/> <source>Click here to add the phrase to the phrase book.</source> - <translation>Добавить фразу в разговорник.</translation> + <translation>Добавить фразу в глоссарий.</translation> </message> <message> - <location line="+3"/> + <location/> <source>&New Entry</source> <translation>Новая &запись</translation> </message> <message> - <location line="+7"/> + <location/> <source>Click here to remove the entry from the phrase book.</source> - <translation>Удалить фразу из разговорника.</translation> + <translation>Удалить фразу из глоссария.</translation> </message> <message> - <location line="+3"/> + <location/> <source>&Remove Entry</source> <translation>&Удалить</translation> </message> <message> - <location line="+7"/> + <location/> <source>Settin&gs...</source> <translation>&Настройки...</translation> </message> <message> - <location line="+7"/> + <location/> <source>Click here to save the changes made.</source> <translation>Сохранить изменения.</translation> </message> <message> - <location line="+3"/> + <location/> <source>&Save</source> <translation>&Сохранить</translation> </message> <message> - <location line="+7"/> + <location/> <source>Click here to close this window.</source> <translation>Закрыть окно.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Close</source> <translation>Закрыть</translation> </message> @@ -1789,7 +1795,7 @@ Line: %2</source> <context> <name>QObject</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1816"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1842"/> <source>Translation files (%1);;</source> <translation>Файлы перевода (%1);;</translation> </message> @@ -1799,8 +1805,8 @@ Line: %2</source> <translation>Все файлы (*)</translation> </message> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1118"/> - <location line="+18"/> + <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1134"/> + <location line="+27"/> <location line="+67"/> <location line="+39"/> <location line="+17"/> @@ -1820,9 +1826,9 @@ Line: %2</source> <translation>Скомпилированные переводы Qt</translation> </message> <message> - <location filename="../tools/linguist/shared/qph.cpp" line="+183"/> + <location filename="../tools/linguist/shared/qph.cpp" line="+195"/> <source>Qt Linguist 'Phrase Book'</source> - <translation>'Разговорник' Qt Linguist</translation> + <translation>'Глоссарий' Qt Linguist</translation> </message> <message> <location filename="../tools/linguist/shared/ts.cpp" line="+752"/> @@ -1866,47 +1872,42 @@ Line: %2</source> <context> <name>Statistics</name> <message> - <location filename="../tools/linguist/linguist/statistics.ui" line="+54"/> + <location filename="../tools/linguist/linguist/statistics.ui"/> <source>Statistics</source> <translation>Статистика</translation> </message> <message> - <location line="+24"/> + <location/> <source>Close</source> <translation>Закрыть</translation> </message> <message> - <location line="+34"/> + <location/> <source>Translation</source> <translation>Перевод</translation> </message> <message> - <location line="+7"/> + <location/> <source>Source</source> <translation>Источник</translation> </message> <message> - <location line="+7"/> - <location line="+7"/> - <location line="+14"/> - <location line="+7"/> - <location line="+21"/> - <location line="+7"/> + <location/> <source>0</source> <translation>0</translation> </message> <message> - <location line="-42"/> + <location/> <source>Words:</source> <translation>Слов:</translation> </message> <message> - <location line="+21"/> + <location/> <source>Characters:</source> <translation>Символов:</translation> </message> <message> - <location line="+7"/> + <location/> <source>Characters (with spaces):</source> <translation>Символов (с пробелами):</translation> </message> @@ -1914,73 +1915,72 @@ Line: %2</source> <context> <name>TranslateDialog</name> <message> - <location filename="../tools/linguist/linguist/translatedialog.ui" line="+60"/> + <location filename="../tools/linguist/linguist/translatedialog.ui"/> <source>This window allows you to search for some text in the translation source file.</source> <translation>Данное окно позволяет искать текст в файле перевода.</translation> </message> <message> - <location line="+28"/> - <location line="+27"/> + <location/> <source>Type in the text to search for.</source> <translation>Введите искомый текст.</translation> </message> <message> - <location line="-20"/> + <location/> <source>Find &source text:</source> <translation>&Найти текст:</translation> </message> <message> - <location line="+10"/> + <location/> <source>&Translate to:</source> <translation>&Перевести как:</translation> </message> <message> - <location line="+19"/> + <location/> <source>Search options</source> <translation>Параметры поиска</translation> </message> <message> - <location line="+6"/> + <location/> <source>Texts such as 'TeX' and 'tex' are considered as different when checked.</source> <translation>Если отмечено, строки "ПрИмЕр" и "пример" будет считаться разными.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Match &case</source> <translation>С учётом &регистра</translation> </message> <message> - <location line="+7"/> + <location/> <source>Mark new translation as &finished</source> <translation>Помечать перевод как завер&шённый</translation> </message> <message> - <location line="+33"/> + <location/> <source>Click here to find the next occurrence of the text you typed in.</source> <translation>Найти следующее совпадение для введённого текста.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Find Next</source> <translation>Найти далее</translation> </message> <message> - <location line="+13"/> + <location/> <source>Translate</source> <translation>Перевести</translation> </message> <message> - <location line="+7"/> + <location/> <source>Translate All</source> <translation>Перевести все</translation> </message> <message> - <location line="+7"/> + <location/> <source>Click here to close this window.</source> <translation>Закрыть окно.</translation> </message> <message> - <location line="+3"/> + <location/> <source>Cancel</source> <translation>Отмена</translation> </message> @@ -1988,34 +1988,32 @@ Line: %2</source> <context> <name>TranslationSettingsDialog</name> <message> - <location filename="../tools/linguist/linguist/translationsettings.ui" line="+20"/> + <location filename="../tools/linguist/linguist/translationsettings.ui"/> <source>Source language</source> <translation>Исходный язык</translation> </message> <message> - <location line="+15"/> - <location line="+38"/> + <location/> <source>Language</source> <translation>Язык</translation> </message> <message> - <location line="-25"/> - <location line="+38"/> + <location/> <source>Country/Region</source> <translation>Страна/Регион</translation> </message> <message> - <location line="-28"/> + <location/> <source>Target language</source> <translation>Язык перевода</translation> </message> <message> - <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+68"/> + <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+93"/> <source>Any Country</source> <translation>Любая страна</translation> </message> <message> - <location line="+11"/> + <location line="-22"/> <location line="+8"/> <source>Settings for '%1' - Qt Linguist</source> <translation>Настройки для '%1' - Qt Linguist</translation> diff --git a/translations/qt_help_ru.ts b/translations/qt_help_ru.ts index 006a90b..341cf19 100644 --- a/translations/qt_help_ru.ts +++ b/translations/qt_help_ru.ts @@ -33,32 +33,52 @@ <name>QHelpCollectionHandler</name> <message> <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/> - <source>The collection file is not set up yet!</source> - <translation type="unfinished">Файл набора ещё не установлен!</translation> + <source>The collection file '%1' is not set up yet!</source> + <translation type="unfinished">Файл набора '%1' ещё не установлен!</translation> </message> <message> - <location line="+22"/> + <location line="+23"/> <source>Cannot load sqlite database driver!</source> <translation>Не удалось загрузить драйвер базы данных sqlite!</translation> </message> <message> <location line="+11"/> - <location line="+48"/> + <location line="+49"/> <source>Cannot open collection file: %1</source> <translation type="unfinished">Не удалось открыть файл набора: %1</translation> </message> <message> - <location line="-39"/> + <location line="-40"/> <source>Cannot create tables in file %1!</source> <translation>Не удалось создать таблицы в файле %1!</translation> </message> <message> <location line="+16"/> - <source>The specified collection file already exists!</source> - <translation type="unfinished">Указанный файла набора уже существует!</translation> + <source>The collection file '%1' already exists!</source> + <translation type="unfinished">Файл набора '%1' уже существует!</translation> </message> <message> - <location line="+5"/> + <location line="+148"/> + <source>Unknown filter '%1'!</source> + <translation>Неизвестный фильтр '%1'!</translation> + </message> + <message> + <location line="+105"/> + <source>Invalid documentation file '%1'!</source> + <translation>Некорректный файл документации '%1'!</translation> + </message> + <message> + <location line="+167"/> + <source>Cannot register namespace '%1'!</source> + <translation>Не удалось зарегистрировать пространство имён %1!</translation> + </message> + <message> + <location line="+24"/> + <source>Cannot open database '%1' to optimize!</source> + <translation>Не удалось открыть базу данных '%1' для оптимизации!</translation> + </message> + <message> + <location line="-438"/> <source>Cannot create directory: %1</source> <translation>Не удалось создать каталог: %1</translation> </message> @@ -68,12 +88,7 @@ <translation type="unfinished">Не удалось скопировать файл набора: %1</translation> </message> <message> - <location line="+119"/> - <source>Unknown filter!</source> - <translation>Неизвестный фильтр!</translation> - </message> - <message> - <location line="+55"/> + <location line="+174"/> <source>Cannot register filter %1!</source> <translation>Не удалось зарегистрировать фильтр %1!</translation> </message> @@ -83,12 +98,7 @@ <translation>Не удалось открыть файл документации %1!</translation> </message> <message> - <location line="+6"/> - <source>Invalid documentation file!</source> - <translation>Некорректный файл документации!</translation> - </message> - <message> - <location line="+34"/> + <location line="+40"/> <source>The namespace %1 was not registered!</source> <translation>Пространство имён %1 не зарегистрировано!</translation> </message> @@ -97,16 +107,6 @@ <source>Namespace %1 already exists!</source> <translation>Пространство имён %1 уже существует!</translation> </message> - <message> - <location line="+13"/> - <source>Cannot register namespace!</source> - <translation>Не удалось зарегистрировать пространство имён!</translation> - </message> - <message> - <location line="+24"/> - <source>Cannot open database to optimize!</source> - <translation>Не удалось открыть базу данных для оптимизации!</translation> - </message> </context> <context> <name>QHelpDBReader</name> @@ -120,7 +120,7 @@ <context> <name>QHelpEngineCore</name> <message> - <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+524"/> + <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+525"/> <source>The specified namespace does not exist!</source> <translation>Указанное пространство имён не существует!</translation> </message> @@ -128,7 +128,7 @@ <context> <name>QHelpEngineCorePrivate</name> <message> - <location line="-402"/> + <location line="-403"/> <source>Cannot open documentation file %1: %2!</source> <translation>Не удалось открыть файл документации %1: %2!</translation> </message> @@ -249,52 +249,52 @@ <context> <name>QHelpSearchQueryWidget</name> <message> - <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+411"/> + <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+125"/> <source>Search for:</source> <translation>Искать:</translation> </message> <message> - <location line="+5"/> + <location line="+1"/> <source>Previous search</source> <translation>Предыдущий запрос</translation> </message> <message> - <location line="+4"/> + <location line="+1"/> <source>Next search</source> <translation>Следующий запрос</translation> </message> <message> - <location line="+2"/> + <location line="+1"/> <source>Search</source> <translation>Поиск</translation> </message> <message> - <location line="+20"/> + <location line="+2"/> <source>Advanced search</source> <translation>Расширенный поиск</translation> </message> <message> - <location line="+18"/> + <location line="+1"/> <source>words <B>similar</B> to:</source> <translation><B>похожие</B> слова:</translation> </message> <message> - <location line="+6"/> + <location line="+1"/> <source><B>without</B> the words:</source> <translation><B>не содержит</B> слов:</translation> </message> <message> - <location line="+6"/> + <location line="+1"/> <source>with <B>exact phrase</B>:</source> <translation>содержит <B>точную фразу</B>:</translation> </message> <message> - <location line="+6"/> + <location line="+1"/> <source>with <B>all</B> of the words:</source> <translation>содержит <B>все</B> слова:</translation> </message> <message> - <location line="+6"/> + <location line="+1"/> <source>with <B>at least one</B> of the words:</source> <translation>содержит <B>хотя бы одно</B> из слов:</translation> </message> @@ -318,11 +318,6 @@ <context> <name>QObject</name> <message> - <location filename="../tools/assistant/lib/qhelp_global.h" line="+83"/> - <source>Untitled</source> - <translation>Безымянный</translation> - </message> - <message> <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+85"/> <source>Unknown token.</source> <translation>Неизвестный идентификатор.</translation> diff --git a/translations/qt_ru.ts b/translations/qt_ru.ts index 9079a6b..641d7aa 100644 --- a/translations/qt_ru.ts +++ b/translations/qt_ru.ts @@ -27,7 +27,7 @@ <context> <name>CloseButton</name> <message> - <location filename="../src/gui/widgets/qtabbar.cpp" line="+2245"/> + <location filename="../src/gui/widgets/qtabbar.cpp" line="+2264"/> <source>Close Tab</source> <translation>Закрыть вкладку</translation> </message> @@ -35,7 +35,7 @@ <context> <name>FakeReply</name> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2191"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2200"/> <source>Fake error !</source> <translation type="unfinished"></translation> </message> @@ -81,7 +81,7 @@ <context> <name>Phonon::AudioOutput</name> <message> - <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+377"/> + <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+385"/> <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> <translation><html>Звуковое устройство <b>%1</b> не работает.<br/>Будет использоваться <b>%2</b>.</html></translation> </message> @@ -99,7 +99,7 @@ <context> <name>Phonon::Gstreamer::Backend</name> <message> - <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+171"/> + <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+182"/> <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.</source> <translation>Внимание: Похоже, пакет gstreamer0.10-plugins-good не установлен. @@ -119,11 +119,11 @@ <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/> <source>Cannot start playback. -Check your Gstreamer installation and make sure you +Check your GStreamer installation and make sure you have libgstreamer-plugins-base installed.</source> <translation>Невозможно начать воспроизведение. -Проверьте установку Gstreamer и убедитесь, +Проверьте установку GStreamer и убедитесь, что пакет libgstreamer-plugins-base установлен.</translation> </message> <message> @@ -132,10 +132,10 @@ have libgstreamer-plugins-base installed.</source> <translation>Отсутствует необходимый кодек. Вам нужно установить следующие кодеки для воспроизведения данного содержимого: %0</translation> </message> <message> - <location line="+681"/> + <location line="+702"/> <location line="+8"/> <location line="+15"/> - <location line="+22"/> + <location line="+26"/> <location line="+6"/> <location line="+19"/> <location line="+339"/> @@ -144,12 +144,12 @@ have libgstreamer-plugins-base installed.</source> <translation>Не удалось открыть источник медиа-данных.</translation> </message> <message> - <location line="-420"/> + <location line="-424"/> <source>Invalid source type.</source> <translation>Неверный тип источника медиа-данных.</translation> </message> <message> - <location line="+394"/> + <location line="+398"/> <source>Could not locate media source.</source> <translation>Не удалось найти источник медиа-данных.</translation> </message> @@ -167,7 +167,7 @@ have libgstreamer-plugins-base installed.</source> <context> <name>Phonon::MMF</name> <message> - <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+108"/> + <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+103"/> <source>Audio Output</source> <translation>Воспроизведение звука</translation> </message> @@ -176,52 +176,334 @@ have libgstreamer-plugins-base installed.</source> <source>The audio output device</source> <translation>Устройство воспроизведения звука</translation> </message> -</context> -<context> - <name>Phonon::MMF::AudioEqualizer</name> <message> - <location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+75"/> - <source>Frequency band, %1 Hz</source> - <translation>Полоса частот, %1 Гц</translation> + <location filename="../src/3rdparty/phonon/mmf/utils.cpp" line="+87"/> + <source>No error</source> + <translation>Нет ошибки</translation> + </message> + <message> + <location line="+2"/> + <source>Not found</source> + <translation>Не найден</translation> + </message> + <message> + <location line="+2"/> + <source>Out of memory</source> + <translation>Недостаточно ресурсов</translation> + </message> + <message> + <location line="+2"/> + <source>Not supported</source> + <translation>Не поддерживается</translation> + </message> + <message> + <location line="+2"/> + <source>Overflow</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Underflow</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Already exists</source> + <translation>Уже существует</translation> + </message> + <message> + <location line="+2"/> + <source>Path not found</source> + <translation>Путь не найден</translation> + </message> + <message> + <location line="+2"/> + <source>In use</source> + <translation>Используется</translation> + </message> + <message> + <location line="+2"/> + <source>Not ready</source> + <translation>Не готов</translation> + </message> + <message> + <location line="+2"/> + <source>Access denied</source> + <translation>Доступ запрещён</translation> + </message> + <message> + <location line="+2"/> + <source>Could not connect</source> + <translation>Не удалось установить соединение</translation> + </message> + <message> + <location line="+2"/> + <source>Disconnected</source> + <translation>Соединение разорвано</translation> + </message> + <message> + <location line="+2"/> + <source>Permission denied</source> + <translation>Доступ запрещён</translation> + </message> + <message> + <location line="+4"/> + <source>Insufficient bandwidth</source> + <translation type="unfinished">Недостаточная ширина канала</translation> + </message> + <message> + <location line="+3"/> + <source>Network unavailable</source> + <translation>Сеть недоступна</translation> + </message> + <message> + <location line="+4"/> + <source>Network communication error</source> + <translation type="unfinished">Ошибка сетевого обмена данными</translation> + </message> + <message> + <location line="+2"/> + <source>Streaming not supported</source> + <translation type="unfinished"></translation> </message> -</context> -<context> - <name>Phonon::MMF::EffectFactory</name> <message> - <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+65"/> - <source>audio equalizer</source> - <translation>Аудиоэквалайзер</translation> + <location line="+2"/> + <source>Server alert</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+2"/> + <source>Invalid protocol</source> + <translation>Некорректный протокол</translation> </message> <message> <location line="+2"/> - <source>Bass boost</source> - <translation>Усиление басов</translation> + <source>Invalid URL</source> + <translation>Некорректный URL</translation> + </message> + <message> + <location line="+2"/> + <source>Multicast error</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>Proxy server error</source> + <translation>Ошибка прокси-сервера</translation> </message> <message> <location line="+2"/> - <source>Distance Attenuation</source> - <translation>Ослабление при отдалении</translation> + <source>Proxy server not supported</source> + <translation>Прокси-сервер не поддерживается</translation> </message> <message> <location line="+2"/> + <source>Audio output error</source> + <translation>Ошибка воспроизведения звука</translation> + </message> + <message> <location line="+2"/> - <source>Environmental Reverb</source> - <translation>Реверберация</translation> + <source>Video output error</source> + <translation>Ошибка воспроизведения видео</translation> </message> <message> <location line="+2"/> - <source>Loudness</source> - <translation>Громкость</translation> + <source>Decoder error</source> + <translation>Ошибка декодирования</translation> </message> <message> <location line="+2"/> - <source>Source Orientation</source> - <translation>Ориентация источника</translation> + <source>Audio or video components could not be played</source> + <translation>Аудио- или видео-состовляющая не может быть воспроизведена</translation> </message> <message> <location line="+2"/> - <source>Stereo Widening</source> - <translation>Расширение стереобазы</translation> + <source>DRM error</source> + <translation>Ошибка DRM</translation> + </message> + <message> + <location line="+15"/> + <source>Unknown error (%1)</source> + <translation>Неизвестная ошибка (%1)</translation> + </message> +</context> +<context> + <name>Phonon::MMF::AbstractMediaPlayer</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/abstractmediaplayer.cpp" line="+73"/> + <source>Not ready to play</source> + <translation>Не готов к воспроизведению</translation> + </message> + <message> + <location line="+161"/> + <location line="+10"/> + <source>Error opening file</source> + <translation>Ошибка открытия файла</translation> + </message> + <message> + <location line="+4"/> + <source>Error opening URL</source> + <translation>Ошибка открытия URL</translation> + </message> + <message> + <location line="+83"/> + <source>Setting volume failed</source> + <translation>Не удалось установить уровень громкости</translation> + </message> + <message> + <location line="+50"/> + <source>Playback complete</source> + <translation>Воспроизведение завершено</translation> + </message> +</context> +<context> + <name>Phonon::MMF::AudioEqualizer</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/audioequalizer.cpp" line="+92"/> + <source>%1 Hz</source> + <translation>%1 Гц</translation> + </message> +</context> +<context> + <name>Phonon::MMF::AudioPlayer</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/audioplayer.cpp" line="+173"/> + <source>Getting position failed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+36"/> + <source>Opening clip failed</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Phonon::MMF::EffectFactory</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+181"/> + <source>Enabled</source> + <translation type="unfinished">Активно</translation> + </message> +</context> +<context> + <name>Phonon::MMF::EnvironmentalReverb</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/environmentalreverb.cpp" line="+146"/> + <source>Decay HF ratio (%)</source> + <extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Decay time (ms)</source> + <extracomment>DecayTime: Time over which reverberation is diminished.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Density (%)</source> + <extracomment>Density Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Diffusion value.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Diffusion (%)</source> + <extracomment>Diffusion: Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Density value.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <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> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Reflections level (mB)</source> + <extracomment>ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Reverb delay (ms)</source> + <extracomment>ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+8"/> + <source>Reverb level (mB)</source> + <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+7"/> + <source>Room HF level</source> + <extracomment>RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound.</extracomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+6"/> + <source>Room level (mB)</source> + <extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment> + <translation type="unfinished"></translation> + </message> +</context> +<context> + <name>Phonon::MMF::MediaObject</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+270"/> + <source>Error opening source: type not supported</source> + <translation>Ошибка открытыия источника: тип не поддерживается</translation> + </message> + <message> + <location line="+18"/> + <source>Error opening source: media type could not be determined</source> + <translation>Ошибка открытыия источника: тип медиа-данных не определён</translation> + </message> +</context> +<context> + <name>Phonon::MMF::StereoWidening</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/stereowidening.cpp" line="+79"/> + <source>Level (%)</source> + <translation>Уровень (%)</translation> + </message> +</context> +<context> + <name>Phonon::MMF::VideoPlayer</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/mmf_videoplayer.cpp" line="+125"/> + <source>Pause failed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+16"/> + <source>Seek failed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+54"/> + <source>Getting position failed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+26"/> + <source>Opening clip failed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+26"/> + <source>Buffering clip failed</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+174"/> + <location line="+12"/> + <location line="+176"/> + <location line="+15"/> + <location line="+6"/> + <source>Video display error</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -291,7 +573,7 @@ have libgstreamer-plugins-base installed.</source> <context> <name>Q3FileDialog</name> <message> - <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+829"/> + <location filename="../src/qt3support/dialogs/q3filedialog.cpp" line="+835"/> <source>Copy or Move a File</source> <translation>Копировать или переместить файл</translation> </message> @@ -316,7 +598,7 @@ have libgstreamer-plugins-base installed.</source> <location line="-157"/> <location line="+49"/> <location line="+2149"/> - <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+112"/> + <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+133"/> <source>All Files (*)</source> <translation>Все файлы (*)</translation> </message> @@ -928,8 +1210,8 @@ to <context> <name>QAbstractSocket</name> <message> - <location filename="../src/network/socket/qabstractsocket.cpp" line="+890"/> - <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+633"/> + <location filename="../src/network/socket/qabstractsocket.cpp" line="+906"/> + <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+629"/> <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+661"/> <location line="+26"/> <source>Host not found</source> @@ -948,19 +1230,20 @@ to <translation>Время на соединение истекло</translation> </message> <message> - <location line="-548"/> - <location line="+789"/> + <location line="-559"/> + <location line="+809"/> <location line="+208"/> <source>Operation on socket is not supported</source> <translation>Операция с сокетом не поддерживается</translation> </message> <message> - <location line="+187"/> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+598"/> + <location filename="../src/network/socket/qabstractsocket.cpp" line="+203"/> <source>Socket operation timed out</source> <translation>Время на операцию с сокетом истекло</translation> </message> <message> - <location line="+380"/> + <location filename="../src/network/socket/qabstractsocket.cpp" line="+380"/> <source>Socket is not connected</source> <translation>Сокет не подключён</translation> </message> @@ -973,7 +1256,7 @@ to <context> <name>QAbstractSpinBox</name> <message> - <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1217"/> + <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1260"/> <source>&Step up</source> <translation>Шаг вв&ерх</translation> </message> @@ -989,6 +1272,14 @@ to </message> </context> <context> + <name>QAccessibleButton</name> + <message> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+250"/> + <source>Press</source> + <translation>Нажать</translation> + </message> +</context> +<context> <name>QApplication</name> <message> <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+376"/> @@ -1006,7 +1297,7 @@ to <translation>Ошибка совместимости библиотеки Qt</translation> </message> <message> - <location filename="../src/gui/kernel/qapplication.cpp" line="+2293"/> + <location filename="../src/gui/kernel/qapplication.cpp" line="+2287"/> <source>QT_LAYOUT_DIRECTION</source> <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> <translation>LTR</translation> @@ -1043,7 +1334,7 @@ to <context> <name>QCheckBox</name> <message> - <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+114"/> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-136"/> <source>Uncheck</source> <translation>Снять отметку</translation> </message> @@ -1061,7 +1352,7 @@ to <context> <name>QColorDialog</name> <message> - <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1349"/> + <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1355"/> <source>Hu&e:</source> <translation>&Тон:</translation> </message> @@ -1101,7 +1392,7 @@ to <translation>Выбор цвета</translation> </message> <message> - <location line="+180"/> + <location line="+183"/> <source>&Basic colors</source> <translation>&Основные цвета</translation> </message> @@ -1188,7 +1479,7 @@ to <context> <name>QDB2Driver</name> <message> - <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1254"/> + <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1253"/> <source>Unable to connect</source> <translation>Невозможно соединиться</translation> </message> @@ -1211,7 +1502,7 @@ to <context> <name>QDB2Result</name> <message> - <location line="-1031"/> + <location line="-1030"/> <location line="+240"/> <source>Unable to execute statement</source> <translation>Невозможно выполнить выражение</translation> @@ -1286,7 +1577,7 @@ to <context> <name>QDialog</name> <message> - <location filename="../src/gui/dialogs/qdialog.cpp" line="+636"/> + <location filename="../src/gui/dialogs/qdialog.cpp" line="+652"/> <source>What's This?</source> <translation>Что это?</translation> </message> @@ -1299,9 +1590,9 @@ to <context> <name>QDialogButtonBox</name> <message> - <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1872"/> + <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1876"/> <location line="+464"/> - <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+607"/> + <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+650"/> <source>OK</source> <translation>ОК</translation> </message> @@ -1413,7 +1704,7 @@ to <message> <location line="+3"/> <source>Restore Defaults</source> - <translation type="unfinished">Восстановить значения</translation> + <translation>Восстановить значения</translation> </message> <message> <location line="-29"/> @@ -1500,7 +1791,7 @@ to <translation>Критическая ошибка:</translation> </message> <message> - <location line="+199"/> + <location line="+200"/> <source>&Show this message again</source> <translation>&Показывать это сообщение в дальнейшем</translation> </message> @@ -1513,7 +1804,7 @@ to <context> <name>QFile</name> <message> - <location filename="../src/corelib/io/qfile.cpp" line="+697"/> + <location filename="../src/corelib/io/qfile.cpp" line="+698"/> <location line="+155"/> <source>Destination file exists</source> <translation>Файл существует</translation> @@ -1552,36 +1843,36 @@ to <context> <name>QFileDialog</name> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+558"/> - <location line="+450"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+557"/> + <location line="+471"/> <source>All Files (*)</source> <translation>Все файлы (*)</translation> </message> <message> - <location line="+227"/> + <location line="+216"/> <source>Directories</source> <translation>Каталоги</translation> </message> <message> <location line="-3"/> - <location line="+50"/> - <location line="+1528"/> + <location line="+55"/> + <location line="+1532"/> <source>&Open</source> <translation>&Открыть</translation> </message> <message> - <location line="-1578"/> - <location line="+50"/> + <location line="-1587"/> + <location line="+55"/> <source>&Save</source> <translation>&Сохранить</translation> </message> <message> - <location line="-741"/> + <location line="-756"/> <source>Open</source> <translation>Открыть</translation> </message> <message> - <location line="+1508"/> + <location line="+1527"/> <source>%1 already exists. Do you want to replace it?</source> <translation>%1 уже существует. @@ -1602,7 +1893,7 @@ Please verify the correct file name was given.</source> <translation>Мой компьютер</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1497"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1516"/> <source>&Rename</source> <translation>&Переименовать</translation> </message> @@ -1648,12 +1939,12 @@ Please verify the correct file name was given.</source> </message> <message> <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+6"/> - <location line="+659"/> + <location line="+669"/> <source>Directory:</source> <translation>Каталог:</translation> </message> <message> - <location line="+776"/> + <location line="+785"/> <location line="+862"/> <source>%1 Directory not found. @@ -1680,7 +1971,7 @@ Do you want to delete it anyway?</source> <translation>Не удалось удалить каталог.</translation> </message> <message> - <location line="+410"/> + <location line="+404"/> <source>Recent Places</source> <translation>Недавние документы</translation> </message> @@ -1690,12 +1981,12 @@ Do you want to delete it anyway?</source> <translation>Все файлы (*.*)</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2546"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-2559"/> <source>Save As</source> <translation>Сохранить как</translation> </message> <message> - <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+461"/> + <location filename="../src/gui/itemviews/qfileiconprovider.cpp" line="+462"/> <source>Drive</source> <translation>Диск</translation> </message> @@ -1751,18 +2042,18 @@ Do you want to delete it anyway?</source> <translation>Вперёд</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+1963"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="+1982"/> <source>New Folder</source> <translation>Новая папка</translation> </message> <message> - <location line="-1956"/> + <location line="-1975"/> <source>&New Folder</source> <translation>&Новая папка</translation> </message> <message> - <location line="+667"/> - <location line="+38"/> + <location line="+677"/> + <location line="+43"/> <source>&Choose</source> <translation>&Выбрать</translation> </message> @@ -1772,8 +2063,8 @@ Do you want to delete it anyway?</source> <translation>Удалить</translation> </message> <message> - <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-698"/> - <location line="+663"/> + <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-713"/> + <location line="+673"/> <source>File &name:</source> <translation>&Имя файла:</translation> </message> @@ -1793,6 +2084,11 @@ Do you want to delete it anyway?</source> <context> <name>QFileSystemModel</name> <message> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+483"/> + <source>%1 byte(s)</source> + <translation>%1 байт</translation> + </message> + <message> <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="+828"/> <source>Invalid filename</source> <translation>Некорректное имя файла</translation> @@ -1841,7 +2137,7 @@ Do you want to delete it anyway?</source> </message> <message> <location filename="../src/gui/dialogs/qfilesystemmodel.cpp" line="-164"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+476"/> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="-7"/> <source>%1 TB</source> <translation>%1 Тб</translation> </message> @@ -1865,7 +2161,6 @@ Do you want to delete it anyway?</source> </message> <message> <location line="+1"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+1"/> <source>%1 bytes</source> <translation>%1 байт</translation> </message> @@ -1874,55 +2169,55 @@ Do you want to delete it anyway?</source> <name>QFontDatabase</name> <message> <location filename="../src/gui/text/qfontdatabase.cpp" line="+102"/> - <location line="+1334"/> + <location line="+1342"/> <source>Normal</source> <translation>Обычный</translation> </message> <message> - <location line="-1331"/> + <location line="-1339"/> <location line="+12"/> - <location line="+1307"/> + <location line="+1315"/> <source>Bold</source> <translation>Жирный</translation> </message> <message> - <location line="-1316"/> - <location line="+1318"/> + <location line="-1324"/> + <location line="+1326"/> <source>Demi Bold</source> <translation>Полужирный</translation> </message> <message> - <location line="-1315"/> + <location line="-1323"/> <location line="+18"/> - <location line="+1293"/> + <location line="+1301"/> <source>Black</source> <translation>Чёрный</translation> </message> <message> - <location line="-1303"/> + <location line="-1311"/> <source>Demi</source> <translation>Средний</translation> </message> <message> <location line="+6"/> - <location line="+1303"/> + <location line="+1311"/> <source>Light</source> <translation>Светлый</translation> </message> <message> - <location line="-1157"/> - <location line="+1160"/> + <location line="-1165"/> + <location line="+1168"/> <source>Italic</source> <translation>Курсив</translation> </message> <message> - <location line="-1157"/> - <location line="+1159"/> + <location line="-1165"/> + <location line="+1167"/> <source>Oblique</source> <translation>Наклонный</translation> </message> <message> - <location line="+703"/> + <location line="+704"/> <source>Any</source> <translation>Любая</translation> </message> @@ -1964,12 +2259,12 @@ Do you want to delete it anyway?</source> <message> <location line="+3"/> <source>Thaana</source> - <translation type="unfinished">Таана</translation> + <translation>Таана</translation> </message> <message> <location line="+3"/> <source>Devanagari</source> - <translation type="unfinished">Деванагири</translation> + <translation>Деванагири</translation> </message> <message> <location line="+3"/> @@ -1979,17 +2274,17 @@ Do you want to delete it anyway?</source> <message> <location line="+3"/> <source>Gurmukhi</source> - <translation type="unfinished">Гурмукхи</translation> + <translation>Гурмукхи</translation> </message> <message> <location line="+3"/> <source>Gujarati</source> - <translation type="unfinished">Гуджарати</translation> + <translation>Гуджарати</translation> </message> <message> <location line="+3"/> <source>Oriya</source> - <translation type="unfinished">Ория</translation> + <translation>Ория</translation> </message> <message> <location line="+3"/> @@ -1999,17 +2294,17 @@ Do you want to delete it anyway?</source> <message> <location line="+3"/> <source>Telugu</source> - <translation type="unfinished">Телугу</translation> + <translation>Телугу</translation> </message> <message> <location line="+3"/> <source>Kannada</source> - <translation type="unfinished">Каннада</translation> + <translation>Каннада</translation> </message> <message> <location line="+3"/> <source>Malayalam</source> - <translation type="unfinished">Малайялам</translation> + <translation>Малаяльская</translation> </message> <message> <location line="+3"/> @@ -2034,7 +2329,7 @@ Do you want to delete it anyway?</source> <message> <location line="+3"/> <source>Myanmar</source> - <translation type="unfinished">Мьянма</translation> + <translation>Майанмарская</translation> </message> <message> <location line="+3"/> @@ -2049,7 +2344,7 @@ Do you want to delete it anyway?</source> <message> <location line="+3"/> <source>Simplified Chinese</source> - <translation>Китайская упрощенная</translation> + <translation>Китайская упрощённая</translation> </message> <message> <location line="+3"/> @@ -2086,6 +2381,11 @@ Do you want to delete it anyway?</source> <source>Runic</source> <translation>Руническая</translation> </message> + <message> + <location line="+3"/> + <source>N'Ko</source> + <translation>Нко</translation> + </message> </context> <context> <name>QFontDialog</name> @@ -2285,7 +2585,7 @@ Do you want to delete it anyway?</source> <context> <name>QHostInfo</name> <message> - <location filename="../src/network/kernel/qhostinfo_p.h" line="+183"/> + <location filename="../src/network/kernel/qhostinfo_p.h" line="+101"/> <source>Unknown error</source> <translation>Неизвестная ошибка</translation> </message> @@ -2295,7 +2595,7 @@ Do you want to delete it anyway?</source> <message> <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+257"/> <location line="+32"/> - <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+220"/> + <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+216"/> <location line="+27"/> <source>Host not found</source> <translation>Узел не найден</translation> @@ -2329,7 +2629,7 @@ Do you want to delete it anyway?</source> <context> <name>QHttp</name> <message> - <location filename="../src/network/access/qhttp.cpp" line="+1577"/> + <location filename="../src/network/access/qhttp.cpp" line="+1582"/> <location line="+820"/> <location filename="../src/qt3support/network/q3http.cpp" line="+1159"/> <location line="+567"/> @@ -2361,7 +2661,7 @@ Do you want to delete it anyway?</source> <translation>Сервер неожиданно разорвал соединение</translation> </message> <message> - <location line="+179"/> + <location line="+200"/> <source>Unknown authentication method</source> <translation>Неизвестный метод авторизации</translation> </message> @@ -2371,13 +2671,13 @@ Do you want to delete it anyway?</source> <translation>Ошибка записи ответа на устройство</translation> </message> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+569"/> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-6"/> <location filename="../src/qt3support/network/q3http.cpp" line="+38"/> <source>Connection refused</source> <translation>Отказано в соединении</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="-304"/> + <location filename="../src/network/access/qhttp.cpp" line="-325"/> <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-4"/> <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> <source>Host %1 not found</source> @@ -2385,14 +2685,12 @@ Do you want to delete it anyway?</source> </message> <message> <location line="+20"/> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+10"/> - <location line="+19"/> <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> <source>HTTP request failed</source> <translation>HTTP-запрос не удался</translation> </message> <message> - <location line="+73"/> + <location line="+94"/> <location filename="../src/qt3support/network/q3http.cpp" line="+69"/> <source>Invalid HTTP response header</source> <translation>Некорректный HTTP-заголовок ответа</translation> @@ -2431,7 +2729,7 @@ Do you want to delete it anyway?</source> <translation>Соединение с узлом установлено</translation> </message> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-22"/> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+7"/> <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> <source>Connection closed</source> <translation>Соединение закрыто</translation> @@ -2447,7 +2745,7 @@ Do you want to delete it anyway?</source> <translation>Требуется авторизация</translation> </message> <message> - <location line="-138"/> + <location line="-159"/> <source>Connection refused (or timed out)</source> <translation>В соединении отказано (или время ожидания истекло)</translation> </message> @@ -2646,7 +2944,7 @@ Do you want to delete it anyway?</source> <context> <name>QIODevice</name> <message> - <location filename="../src/corelib/global/qglobal.cpp" line="+2057"/> + <location filename="../src/corelib/global/qglobal.cpp" line="+2094"/> <source>Permission denied</source> <translation>Доступ запрещён</translation> </message> @@ -2666,7 +2964,7 @@ Do you want to delete it anyway?</source> <translation>Нет свободного места на устройстве</translation> </message> <message> - <location filename="../src/corelib/io/qiodevice.cpp" line="+1561"/> + <location filename="../src/corelib/io/qiodevice.cpp" line="+1565"/> <source>Unknown error</source> <translation>Неизвестная ошибка</translation> </message> @@ -2730,7 +3028,7 @@ Do you want to delete it anyway?</source> <translation>Не удалось выполнить unmap '%1': %2</translation> </message> <message> - <location line="+341"/> + <location line="+345"/> <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> <translation>Модуль '%1' использует несоместимую библиотеку Qt. (%2.%3.%4) [%5]</translation> </message> @@ -2782,7 +3080,7 @@ Do you want to delete it anyway?</source> <context> <name>QLineEdit</name> <message> - <location filename="../src/gui/widgets/qlineedit.cpp" line="+1980"/> + <location filename="../src/gui/widgets/qlineedit.cpp" line="+2072"/> <source>&Undo</source> <translation>&Отменить действие</translation> </message> @@ -2792,27 +3090,27 @@ Do you want to delete it anyway?</source> <translation>&Повторить действие</translation> </message> <message> - <location line="+7"/> + <location line="+9"/> <source>Cu&t</source> <translation>&Вырезать</translation> </message> <message> - <location line="+5"/> + <location line="+6"/> <source>&Copy</source> <translation>&Копировать</translation> </message> <message> - <location line="+5"/> + <location line="+6"/> <source>&Paste</source> <translation>В&ставить</translation> </message> <message> - <location line="+5"/> + <location line="+7"/> <source>Delete</source> <translation>Удалить</translation> </message> <message> - <location line="+6"/> + <location line="+8"/> <source>Select All</source> <translation>Выделить всё</translation> </message> @@ -2821,7 +3119,7 @@ Do you want to delete it anyway?</source> <name>QLocalServer</name> <message> <location filename="../src/network/socket/qlocalserver.cpp" line="+224"/> - <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+256"/> + <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+246"/> <source>%1: Name error</source> <translation>%1: Некорректное имя</translation> </message> @@ -2859,7 +3157,7 @@ Do you want to delete it anyway?</source> <location line="+3"/> <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> <location filename="../src/network/socket/qlocalsocket_win.cpp" line="+80"/> - <location line="+45"/> + <location line="+59"/> <source>%1: Invalid name</source> <translation>%1: Некорректное имя</translation> </message> @@ -2890,7 +3188,7 @@ Do you want to delete it anyway?</source> <message> <location line="+3"/> <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+3"/> - <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-50"/> + <location filename="../src/network/socket/qlocalsocket_win.cpp" line="-64"/> <source>%1: Connection error</source> <translation>%1: Ошибка соединения</translation> </message> @@ -2915,7 +3213,7 @@ Do you want to delete it anyway?</source> <context> <name>QMYSQLDriver</name> <message> - <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1261"/> + <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1270"/> <source>Unable to open database '</source> <translation>Невозможно открыть базу данных '</translation> </message> @@ -2925,7 +3223,7 @@ Do you want to delete it anyway?</source> <translation>Невозможно соединиться</translation> </message> <message> - <location line="+151"/> + <location line="+150"/> <source>Unable to begin transaction</source> <translation>Невозможно начать транзакцию</translation> </message> @@ -2943,12 +3241,13 @@ Do you want to delete it anyway?</source> <context> <name>QMYSQLResult</name> <message> - <location line="-969"/> + <location line="-977"/> + <location line="+31"/> <source>Unable to fetch data</source> <translation>Невозможно получить данные</translation> </message> <message> - <location line="+183"/> + <location line="+161"/> <source>Unable to execute query</source> <translation>Невозможно выполнить запрос</translation> </message> @@ -3126,7 +3425,7 @@ Do you want to delete it anyway?</source> <context> <name>QMenuBar</name> <message> - <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+404"/> + <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+436"/> <source>Actions</source> <translation>Действия</translation> </message> @@ -3152,7 +3451,7 @@ Do you want to delete it anyway?</source> <translation>О Qt</translation> </message> <message> - <location line="-1611"/> + <location line="-1614"/> <source>Show Details...</source> <translation>Показать подробности...</translation> </message> @@ -3162,7 +3461,7 @@ Do you want to delete it anyway?</source> <translation>Скрыть подробности...</translation> </message> <message> - <location line="+1574"/> + <location line="+1577"/> <source><h3>About Qt</h3><p>This program uses Qt version %1.</p></source> <translation><h3>О Qt</h3><p>Данная программа использует Qt версии %1.</p></translation> </message> @@ -3346,27 +3645,30 @@ Do you want to delete it anyway?</source> <context> <name>QNetworkAccessFileBackend</name> <message> + <location filename="../src/network/access/qfilenetworkreply.cpp" line="+85"/> <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+100"/> <source>Request for opening non-local file %1</source> <translation>Запрос на открытие файла вне файловой системы %1</translation> </message> <message> - <location line="+45"/> + <location line="+33"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+45"/> <source>Error opening %1: %2</source> <translation>Ошибка открытия %1: %2</translation> </message> <message> - <location line="+38"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+38"/> <source>Write error writing to %1: %2</source> <translation>Ошибка записи в %1: %2</translation> </message> <message> - <location line="+48"/> + <location filename="../src/network/access/qfilenetworkreply.cpp" line="-13"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+48"/> <source>Cannot open %1: Path is a directory</source> <translation>Невозможно открыть %1: Указан путь к каталогу</translation> </message> <message> - <location line="+21"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+21"/> <source>Read error reading from %1: %2</source> <translation>Ошибка чтения из %1: %2</translation> </message> @@ -3402,7 +3704,7 @@ Do you want to delete it anyway?</source> <context> <name>QNetworkAccessHttpBackend</name> <message> - <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+585"/> + <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+599"/> <source>No suitable proxy found</source> <translation>Подходящий прокси-сервер не найден</translation> </message> @@ -3410,12 +3712,12 @@ Do you want to delete it anyway?</source> <context> <name>QNetworkReply</name> <message> - <location line="+95"/> + <location line="+101"/> <source>Error downloading %1 - server replied: %2</source> <translation>Ошибка загрузки %1 - ответ сервера: %2</translation> </message> <message> - <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+77"/> + <location filename="../src/network/access/qnetworkreplyimpl.cpp" line="+80"/> <source>Protocol "%1" is unknown</source> <translation>Неизвестный протокол "%1"</translation> </message> @@ -3423,7 +3725,7 @@ Do you want to delete it anyway?</source> <context> <name>QNetworkReplyImpl</name> <message> - <location line="+519"/> + <location line="+525"/> <location line="+28"/> <source>Operation canceled</source> <translation>Операция отменена</translation> @@ -3432,7 +3734,7 @@ Do you want to delete it anyway?</source> <context> <name>QOCIDriver</name> <message> - <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2076"/> + <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2083"/> <source>Unable to logon</source> <translation>Невозможно авторизоваться</translation> </message> @@ -3461,8 +3763,8 @@ Do you want to delete it anyway?</source> <context> <name>QOCIResult</name> <message> - <location line="-972"/> - <location line="+161"/> + <location line="-979"/> + <location line="+168"/> <location line="+15"/> <source>Unable to bind column for batch execute</source> <translation>Невозможно привязать столбец для пакетного выполнения</translation> @@ -3506,7 +3808,7 @@ Do you want to delete it anyway?</source> <context> <name>QODBCDriver</name> <message> - <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1790"/> + <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1806"/> <source>Unable to connect</source> <translation>Невозможно соединиться</translation> </message> @@ -3539,14 +3841,14 @@ Do you want to delete it anyway?</source> <context> <name>QODBCResult</name> <message> - <location line="-932"/> - <location line="+346"/> + <location line="-937"/> + <location line="+351"/> <source>QODBCResult::reset: Unable to set 'SQL_CURSOR_STATIC' as statement attribute. Please check your ODBC driver configuration</source> <translation>QODBCResult::reset: Невозможно установить 'SQL_CURSOR_STATIC' атрибутом выражение. Проверьте настройки драйвера ODBC</translation> </message> <message> - <location line="-329"/> - <location line="+623"/> + <location line="-334"/> + <location line="+628"/> <source>Unable to execute statement</source> <translation>Невозможно выполнить выражение</translation> </message> @@ -3566,7 +3868,7 @@ Do you want to delete it anyway?</source> <translation>Невозможно привязать значение</translation> </message> <message> - <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+190"/> + <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+189"/> <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-467"/> <location line="+576"/> <source>Unable to fetch last</source> @@ -3616,7 +3918,7 @@ Do you want to delete it anyway?</source> <translation>Удалённый узел неожиданно прервал соединение для %1</translation> </message> <message> - <location filename="../src/network/kernel/qhostinfo.cpp" line="+175"/> + <location filename="../src/network/kernel/qhostinfo.cpp" line="+168"/> <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+0"/> <source>No host name given</source> <translation>Имя узла не задано</translation> @@ -3625,7 +3927,7 @@ Do you want to delete it anyway?</source> <context> <name>QPPDOptionsModel</name> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1198"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1197"/> <source>Name</source> <translation>Имя</translation> </message> @@ -3800,7 +4102,7 @@ Do you want to delete it anyway?</source> <context> <name>QPrintDialog</name> <message> - <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+108"/> + <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+110"/> <source>locally connected</source> <translation>соединено локально</translation> </message> @@ -3811,7 +4113,7 @@ Do you want to delete it anyway?</source> <translation>Псевдонимы: %1</translation> </message> <message> - <location line="+223"/> + <location line="+225"/> <location line="+199"/> <source>unknown</source> <translation>неизвестно</translation> @@ -3979,7 +4281,7 @@ Do you want to delete it anyway?</source> <translation>Печать</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-357"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-359"/> <source>Print To File ...</source> <translation>Печать в файл ...</translation> </message> @@ -3994,7 +4296,7 @@ Do you want to delete it anyway?</source> <translation>Печатать все</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+80"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+82"/> <source>File %1 is not writable. Please choose a different file name.</source> <translation>%1 недоступен для записи. @@ -4185,7 +4487,7 @@ Please choose a different file name.</source> <translation>Пользовательский</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-524"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-523"/> <location line="+68"/> <source>&Options >></source> <translation>&Параметры >></translation> @@ -4235,12 +4537,12 @@ Please choose a different file name.</source> <translation>Параметры страницы</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+246"/> + <location filename="../src/gui/dialogs/qprintpreviewdialog.cpp" line="+249"/> <source>%1%</source> <translation>%1%</translation> </message> <message> - <location line="+68"/> + <location line="+71"/> <source>Print Preview</source> <translation>Просмотр печати</translation> </message> @@ -4320,7 +4622,12 @@ Please choose a different file name.</source> <translation>Параметры страницы</translation> </message> <message> - <location line="+150"/> + <location line="+6"/> + <source>Close</source> + <translation>Закрыть</translation> + </message> + <message> + <location line="+148"/> <source>Export to PDF</source> <translation>Экспорт в PDF</translation> </message> @@ -4497,7 +4804,7 @@ Please choose a different file name.</source> <context> <name>QProcess</name> <message> - <location filename="../src/corelib/io/qprocess_unix.cpp" line="+402"/> + <location filename="../src/corelib/io/qprocess_unix.cpp" line="+406"/> <location filename="../src/corelib/io/qprocess_win.cpp" line="+137"/> <source>Could not open input redirection for reading</source> <translation>Не удалось открыть перенаправление ввода для чтения</translation> @@ -4514,7 +4821,7 @@ Please choose a different file name.</source> <translation>Ошибка выделения ресурсов (сбой fork): %1</translation> </message> <message> - <location line="+252"/> + <location line="+258"/> <location line="+52"/> <location line="+74"/> <location line="+66"/> @@ -4527,7 +4834,7 @@ Please choose a different file name.</source> <translation>Время на операцию с процессом истекло</translation> </message> <message> - <location filename="../src/corelib/io/qprocess.cpp" line="+851"/> + <location filename="../src/corelib/io/qprocess.cpp" line="+856"/> <location line="+52"/> <location filename="../src/corelib/io/qprocess_win.cpp" line="-211"/> <location line="+50"/> @@ -4642,7 +4949,7 @@ Please choose a different file name.</source> <context> <name>QSQLite2Driver</name> <message> - <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+391"/> + <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+399"/> <source>Error opening database</source> <translation>Ошибка открытия базы данных</translation> </message> @@ -4665,12 +4972,12 @@ Please choose a different file name.</source> <context> <name>QSQLite2Result</name> <message> - <location line="-319"/> + <location line="-326"/> <source>Unable to fetch results</source> <translation>Невозможно получить результаты</translation> </message> <message> - <location line="+143"/> + <location line="+150"/> <source>Unable to execute statement</source> <translation>Невозможно выполнить выражение</translation> </message> @@ -4678,7 +4985,7 @@ Please choose a different file name.</source> <context> <name>QSQLiteDriver</name> <message> - <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+544"/> + <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+538"/> <source>Error opening database</source> <translation>Ошибка открытия базы данных</translation> </message> @@ -4706,8 +5013,8 @@ Please choose a different file name.</source> <context> <name>QSQLiteResult</name> <message> - <location line="-408"/> - <location line="+66"/> + <location line="-395"/> + <location line="+62"/> <location line="+8"/> <source>Unable to fetch row</source> <translation>Невозможно получить строку</translation> @@ -4733,7 +5040,7 @@ Please choose a different file name.</source> <translation>Количество параметров не совпадает</translation> </message> <message> - <location line="-204"/> + <location line="-200"/> <source>No query</source> <translation>Отсутствует запрос</translation> </message> @@ -4748,7 +5055,7 @@ Please choose a different file name.</source> <message> <location line="+2"/> <source>Location</source> - <translation>Размещение</translation> + <translation>Расположение</translation> </message> <message> <location line="+2"/> @@ -4758,17 +5065,17 @@ Please choose a different file name.</source> <message> <location line="+2"/> <source>Ignore-count</source> - <translation type="unfinished">Пропустить</translation> + <translation>Пропущено</translation> </message> <message> <location line="+2"/> <source>Single-shot</source> - <translation type="unfinished">Один раз</translation> + <translation>Однократно</translation> </message> <message> <location line="+2"/> <source>Hit-count</source> - <translation type="unfinished">Попаданий</translation> + <translation>Совпадений</translation> </message> </context> <context> @@ -4860,12 +5167,12 @@ Please choose a different file name.</source> <message> <location line="+16"/> <source>Run to New Script</source> - <translation type="unfinished">Выполнить до нового сценария</translation> + <translation>Выполнить до нового сценария</translation> </message> <message> <location line="+15"/> <source>Toggle Breakpoint</source> - <translation type="unfinished">Установить/убрать точку останова</translation> + <translation>Установить/убрать точку останова</translation> </message> <message> <location line="+1"/> @@ -4997,22 +5304,22 @@ Please choose a different file name.</source> <message> <location filename="../src/scripttools/debugging/qscriptedit.cpp" line="+411"/> <source>Toggle Breakpoint</source> - <translation type="unfinished">Установить/убрать точку останова</translation> + <translation>Установить/убрать точку останова</translation> </message> <message> <location line="+2"/> <source>Disable Breakpoint</source> - <translation type="unfinished">Убрать точку останова</translation> + <translation>Убрать точку останова</translation> </message> <message> <location line="+1"/> <source>Enable Breakpoint</source> - <translation type="unfinished">Установить точку останова</translation> + <translation>Установить точку останова</translation> </message> <message> <location line="+4"/> <source>Breakpoint Condition:</source> - <translation type="unfinished">Условие точки останова:</translation> + <translation>Условие точки останова:</translation> </message> </context> <context> @@ -5186,7 +5493,7 @@ Please choose a different file name.</source> </message> <message> <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+83"/> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+80"/> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+81"/> <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/> <source>%1: permission denied</source> <translation>%1: доступ запрещён</translation> @@ -5278,117 +5585,117 @@ Please choose a different file name.</source> <message> <location filename="../src/gui/kernel/qkeysequence.cpp" line="+393"/> <source>Space</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Пробел</translation> </message> <message> <location line="+1"/> <source>Esc</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Esc</translation> </message> <message> <location line="+1"/> <source>Tab</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tab</translation> </message> <message> <location line="+1"/> <source>Backtab</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Backtab</translation> </message> <message> <location line="+1"/> <source>Backspace</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Backspace</translation> </message> <message> <location line="+1"/> <source>Return</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Return</translation> </message> <message> <location line="+1"/> <source>Enter</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Enter</translation> </message> <message> <location line="+1"/> <source>Ins</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ins</translation> </message> <message> <location line="+1"/> <source>Del</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Del</translation> </message> <message> <location line="+1"/> <source>Pause</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pause</translation> </message> <message> <location line="+1"/> <source>Print</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Print</translation> </message> <message> <location line="+1"/> <source>SysReq</source> - <translation type="unfinished"></translation> + <translation type="unfinished">SysReq</translation> </message> <message> <location line="+1"/> <source>Home</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Home</translation> </message> <message> <location line="+1"/> <source>End</source> - <translation type="unfinished"></translation> + <translation type="unfinished">End</translation> </message> <message> <location line="+1"/> <source>Left</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Влево</translation> </message> <message> <location line="+1"/> <source>Up</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Вверх</translation> </message> <message> <location line="+1"/> <source>Right</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Вправо</translation> </message> <message> <location line="+1"/> <source>Down</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Вниз</translation> </message> <message> <location line="+1"/> <source>PgUp</source> - <translation type="unfinished"></translation> + <translation type="unfinished">PgUp</translation> </message> <message> <location line="+1"/> <source>PgDown</source> - <translation type="unfinished"></translation> + <translation type="unfinished">PgDown</translation> </message> <message> <location line="+1"/> <source>CapsLock</source> - <translation type="unfinished"></translation> + <translation type="unfinished">CapsLock</translation> </message> <message> <location line="+1"/> <source>NumLock</source> - <translation type="unfinished"></translation> + <translation type="unfinished">NumLock</translation> </message> <message> <location line="+1"/> <source>ScrollLock</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ScrollLock</translation> </message> <message> <location line="+1"/> @@ -5401,7 +5708,7 @@ Please choose a different file name.</source> <translation type="unfinished">Справка</translation> </message> <message> - <location line="+3"/> + <location line="+5"/> <source>Back</source> <translation type="unfinished">Назад</translation> </message> @@ -5438,27 +5745,27 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>Bass Boost</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Усиление басов</translation> </message> <message> <location line="+1"/> <source>Bass Up</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Басы выше</translation> </message> <message> <location line="+1"/> <source>Bass Down</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Басы ниже</translation> </message> <message> <location line="+1"/> <source>Treble Up</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Высокие частоты выше</translation> </message> <message> <location line="+1"/> <source>Treble Down</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Высокие частоты ниже</translation> </message> <message> <location line="+1"/> @@ -5596,39 +5903,485 @@ Please choose a different file name.</source> <translation type="unfinished">Запустить (F)</translation> </message> <message> + <location line="+1"/> + <source>Monitor Brightness Up</source> + <translation type="unfinished">Яркость монитора выше</translation> + </message> + <message> + <location line="+1"/> + <source>Monitor Brightness Down</source> + <translation type="unfinished">Яркость монитора ниже</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Light On/Off</source> + <translation type="unfinished">Вкл/выкл подсветку клавиатуры</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Brightness Up</source> + <translation type="unfinished">Подсветка клавиатуры ярче</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Brightness Down</source> + <translation type="unfinished">Подсветка клавиатуры бледнее</translation> + </message> + <message> + <location line="+1"/> + <source>Power Off</source> + <translation type="unfinished">Выключение питания</translation> + </message> + <message> + <location line="+1"/> + <source>Wake Up</source> + <translation type="unfinished">Пробуждение</translation> + </message> + <message> + <location line="+1"/> + <source>Eject</source> + <translation type="unfinished">Извлечение</translation> + </message> + <message> + <location line="+1"/> + <source>Screensaver</source> + <translation type="unfinished">Хранитель экрана</translation> + </message> + <message> + <location line="+1"/> + <source>WWW</source> + <translation type="unfinished">WWW</translation> + </message> + <message> + <location line="+1"/> + <source>Sleep</source> + <translation type="unfinished">Засыпание</translation> + </message> + <message> + <location line="+1"/> + <source>LightBulb</source> + <translatorcomment>лампочка?</translatorcomment> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Shop</source> + <translation type="unfinished">Магазин</translation> + </message> + <message> + <location line="+1"/> + <source>History</source> + <translation type="unfinished">История</translation> + </message> + <message> + <location line="+1"/> + <source>Add Favorite</source> + <translation type="unfinished">Добавить в избранное</translation> + </message> + <message> + <location line="+1"/> + <source>Hot Links</source> + <translation type="unfinished">Горячие ссылки</translation> + </message> + <message> + <location line="+1"/> + <source>Adjust Brightness</source> + <translation type="unfinished">Настройка яркости</translation> + </message> + <message> + <location line="+1"/> + <source>Finance</source> + <translation type="unfinished">Финансы</translation> + </message> + <message> + <location line="+1"/> + <source>Community</source> + <translation type="unfinished">Сообщество</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Rewind</source> + <translation type="unfinished">Перемотка</translation> + </message> + <message> + <location line="+1"/> + <source>Back Forward</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Application Left</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Application Right</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Book</source> + <translation type="unfinished">Книга</translation> + </message> + <message> + <location line="+1"/> + <source>CD</source> + <translation type="unfinished">CD</translation> + </message> + <message> + <location line="+1"/> + <source>Calculator</source> + <translation type="unfinished">Калькулятор</translation> + </message> + <message> + <location line="+1"/> + <source>Clear</source> + <translation type="unfinished">Очистить</translation> + </message> + <message> + <location line="+1"/> + <source>Clear Grab</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Close</source> + <translation type="unfinished">Закрыть</translation> + </message> + <message> + <location line="+1"/> + <source>Copy</source> + <translation type="unfinished">Копировать</translation> + </message> + <message> + <location line="+1"/> + <source>Cut</source> + <translation type="unfinished">Вырезать</translation> + </message> + <message> + <location line="+1"/> + <source>Display</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>DOS</source> + <translation type="unfinished">DOS</translation> + </message> + <message> + <location line="+1"/> + <source>Documents</source> + <translation type="unfinished">Документы</translation> + </message> + <message> + <location line="+1"/> + <source>Spreadsheet</source> + <translation type="unfinished">Электронная таблицы</translation> + </message> + <message> + <location line="+1"/> + <source>Browser</source> + <translation type="unfinished">Обозреватель</translation> + </message> + <message> + <location line="+1"/> + <source>Game</source> + <translation type="unfinished">Игра</translation> + </message> + <message> + <location line="+1"/> + <source>Go</source> + <translation type="unfinished">Перейти</translation> + </message> + <message> + <location line="+1"/> + <source>iTouch</source> + <translation type="unfinished">iTouch</translation> + </message> + <message> + <location line="+1"/> + <source>Logoff</source> + <translation type="unfinished">Выйти из системы</translation> + </message> + <message> + <location line="+1"/> + <source>Market</source> + <translation type="unfinished">Рынок</translation> + </message> + <message> + <location line="+1"/> + <source>Meeting</source> + <translation type="unfinished">Встреча</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Menu</source> + <translation type="unfinished">Клавиатурное меню</translation> + </message> + <message> + <location line="+1"/> + <source>Menu PB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>My Sites</source> + <translation type="unfinished">Мои сайты</translation> + </message> + <message> + <location line="+1"/> + <source>News</source> + <translation type="unfinished">Новости</translation> + </message> + <message> + <location line="+1"/> + <source>Home Office</source> + <translation type="unfinished">Домашний офис</translation> + </message> + <message> + <location line="+1"/> + <source>Option</source> + <translation type="unfinished">Опция</translation> + </message> + <message> + <location line="+1"/> + <source>Paste</source> + <translation type="unfinished">Вставить</translation> + </message> + <message> + <location line="+1"/> + <source>Phone</source> + <translation type="unfinished">Телефон</translation> + </message> + <message> + <location line="+1"/> + <source>Reply</source> + <translation type="unfinished">Ответить</translation> + </message> + <message> + <location line="+1"/> + <source>Reload</source> + <translation type="unfinished">Перезагрузить</translation> + </message> + <message> + <location line="+1"/> + <source>Rotate Windows</source> + <translation type="unfinished">Повернуть окна</translation> + </message> + <message> + <location line="+1"/> + <source>Rotation PB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Rotation KB</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Save</source> + <translation type="unfinished">Сохранить</translation> + </message> + <message> + <location line="+1"/> + <source>Send</source> + <translation type="unfinished">Отправить</translation> + </message> + <message> + <location line="+1"/> + <source>Spellchecker</source> + <translation type="unfinished">Проверка орфографии</translation> + </message> + <message> + <location line="+1"/> + <source>Split Screen</source> + <translation type="unfinished">Разделить экран</translation> + </message> + <message> + <location line="+1"/> + <source>Support</source> + <translation type="unfinished">Поддержка</translation> + </message> + <message> + <location line="+1"/> + <source>Task Panel</source> + <translation type="unfinished">Панель задач</translation> + </message> + <message> + <location line="+1"/> + <source>Terminal</source> + <translation type="unfinished">Терминал</translation> + </message> + <message> + <location line="+1"/> + <source>Tools</source> + <translation type="unfinished">Инструменты</translation> + </message> + <message> + <location line="+1"/> + <source>Travel</source> + <translation type="unfinished">Путешествие</translation> + </message> + <message> + <location line="+1"/> + <source>Video</source> + <translation type="unfinished">Видео</translation> + </message> + <message> + <location line="+1"/> + <source>Word Processor</source> + <translation type="unfinished">Текстовый редактор</translation> + </message> + <message> + <location line="+1"/> + <source>XFer</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Zoom In</source> + <translation type="unfinished">Увеличить</translation> + </message> + <message> + <location line="+1"/> + <source>Zoom Out</source> + <translation type="unfinished">Уменьшить</translation> + </message> + <message> + <location line="+1"/> + <source>Away</source> + <translation type="unfinished">Ушёл</translation> + </message> + <message> + <location line="+1"/> + <source>Messenger</source> + <translation type="unfinished">Клиент обмена мгновенными сообщениями</translation> + </message> + <message> + <location line="+1"/> + <source>WebCam</source> + <translation type="unfinished">Вэб-камера</translation> + </message> + <message> + <location line="+1"/> + <source>Mail Forward</source> + <translation type="unfinished">Переслать письмо</translation> + </message> + <message> + <location line="+1"/> + <source>Pictures</source> + <translation type="unfinished">Изображения</translation> + </message> + <message> + <location line="+1"/> + <source>Music</source> + <translation type="unfinished">Музыка</translation> + </message> + <message> + <location line="+1"/> + <source>Battery</source> + <translation type="unfinished">Батарея</translation> + </message> + <message> + <location line="+1"/> + <source>Bluetooth</source> + <translation type="unfinished">Bluetooth</translation> + </message> + <message> + <location line="+1"/> + <source>Wireless</source> + <translation type="unfinished">Беспроводная сеть</translation> + </message> + <message> + <location line="+1"/> + <source>Ultra Wide Band</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Audio Forward</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Audio Repeat</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Audio Random Play</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Subtitle</source> + <translation type="unfinished">Субтитры</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Cycle Track</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Time</source> + <translation type="unfinished">Время</translation> + </message> + <message> + <location line="+2"/> + <source>View</source> + <translation type="unfinished">Вид</translation> + </message> + <message> + <location line="+1"/> + <source>Top Menu</source> + <translation type="unfinished">Главное меню</translation> + </message> + <message> + <location line="+1"/> + <source>Suspend</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+1"/> + <source>Hibernate</source> + <translation type="unfinished"></translation> + </message> + <message> <location line="+4"/> <source>Print Screen</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Печать экрана</translation> </message> <message> <location line="+1"/> <source>Page Up</source> - <translation type="unfinished"></translation> + <translation type="unfinished">На страницу вверх</translation> </message> <message> <location line="+1"/> <source>Page Down</source> - <translation type="unfinished"></translation> + <translation type="unfinished">На страницу вниз</translation> </message> <message> <location line="+1"/> <source>Caps Lock</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Верний регистр</translation> </message> <message> <location line="+1"/> <source>Num Lock</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Цифровые клавиши</translation> </message> <message> <location line="+1"/> <source>Number Lock</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Цифровые клавиши</translation> </message> <message> <location line="+1"/> <source>Scroll Lock</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Scroll Lock</translation> </message> <message> <location line="+1"/> @@ -5643,15 +6396,16 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>Escape</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Escape</translation> </message> <message> <location line="+1"/> <source>System Request</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Системный запрос</translation> </message> <message> - <location line="+4"/> + <location line="-18"/> + <location line="+22"/> <source>Select</source> <translation type="unfinished">Выбрать</translation> </message> @@ -5688,12 +6442,12 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>Call</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Позвонить</translation> </message> <message> <location line="+1"/> <source>Hangup</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Положить трубку</translation> </message> <message> <location line="+1"/> @@ -5701,43 +6455,43 @@ Please choose a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+561"/> + <location line="+575"/> <location line="+135"/> <source>Ctrl</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ctrl</translation> </message> <message> <location line="-134"/> <location line="+138"/> <source>Shift</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Shift</translation> </message> <message> <location line="-137"/> <location line="+135"/> <source>Alt</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Alt</translation> </message> <message> <location line="-134"/> <location line="+130"/> <source>Meta</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Meta</translation> </message> <message> <location line="-40"/> <source>+</source> - <translation type="unfinished"></translation> + <translation type="unfinished">+</translation> </message> <message> <location line="+61"/> <source>F%1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">F%1</translation> </message> <message> - <location line="-767"/> + <location line="-871"/> <source>Home Page</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Домашняя страница</translation> </message> </context> <context> @@ -5836,7 +6590,7 @@ Please choose a different file name.</source> <translation>Неизвестная ошибка SOCKSv5 прокси (код 0x%1)</translation> </message> <message> - <location line="+685"/> + <location line="+689"/> <source>Network operation timed out</source> <translation>Время на сетевую операцию истекло</translation> </message> @@ -5844,7 +6598,7 @@ Please choose a different file name.</source> <context> <name>QSoftKeyManager</name> <message> - <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+78"/> + <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+63"/> <source>Ok</source> <translation>ОК</translation> </message> @@ -5869,7 +6623,7 @@ Please choose a different file name.</source> <translation>Отмена</translation> </message> <message> - <location line="+152"/> + <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+322"/> <source>Exit</source> <translation>Выход</translation> </message> @@ -5952,7 +6706,12 @@ Please choose a different file name.</source> <translation>Невозможно записать данные: %1</translation> </message> <message> - <location line="+119"/> + <location line="+63"/> + <source>Unable to decrypt data: %1</source> + <translation>Невозможно расшифровать данные: %1</translation> + </message> + <message> + <location line="+76"/> <source>Error while reading: %1</source> <translation>Ошибка чтения: %1</translation> </message> @@ -5962,7 +6721,7 @@ Please choose a different file name.</source> <translation>Ошибка квитирования SSL: %1</translation> </message> <message> - <location line="-501"/> + <location line="-521"/> <source>Error creating SSL context (%1)</source> <translation>Ошибка создания контекста SSL: (%1)</translation> </message> @@ -5972,7 +6731,12 @@ Please choose a different file name.</source> <translation>Неправильный или пустой список шифров (%1)</translation> </message> <message> - <location line="+62"/> + <location line="+42"/> + <source>Private key does not certify public key, %1</source> + <translation>Закрытый ключ не соответствует открытому ключу, %1</translation> + </message> + <message> + <location line="+20"/> <source>Error creating SSL session, %1</source> <translation>Ошибка создания сессии SSL, %1</translation> </message> @@ -5997,15 +6761,126 @@ Please choose a different file name.</source> <translation>Ошибка загрузки закрытого ключа, %1</translation> </message> <message> - <location line="+7"/> - <source>Private key does not certificate public key, %1</source> - <translation>Закрытый ключ не соответствует открытому ключу, %1</translation> + <location filename="../src/network/ssl/qsslerror.cpp" line="+213"/> + <source>No error</source> + <translation>Нет ошибки</translation> + </message> + <message> + <location line="+3"/> + <source>The issuer certificate could not be found</source> + <translatorcomment>издателя ?</translatorcomment> + <translation type="unfinished">Не удалось найти сертификат запрашивающей стороны</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate signature could not be decrypted</source> + <translation>Не удалось расшифровать подпись сертификата</translation> + </message> + <message> + <location line="+3"/> + <source>The public key in the certificate could not be read</source> + <translation>Не удалось прочитать открытый ключ сертификата</translation> + </message> + <message> + <location line="+3"/> + <source>The signature of the certificate is invalid</source> + <translation>Некорректная подпись сертификата</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate is not yet valid</source> + <translation>Срок действия сертификата ещё не наступил</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate has expired</source> + <translation>Срок действия сертификата истёк</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate's notBefore field contains an invalid time</source> + <translation>Поле сертификата notBefore содержит некорректное время</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate's notAfter field contains an invalid time</source> + <translation>Поле сертификата notAfter содержит некорректное время</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate is self-signed, and untrusted</source> + <translation type="unfinished">Самоподписанный сертификат не является заверенным</translation> + </message> + <message> + <location line="+3"/> + <source>The root certificate of the certificate chain is self-signed, and untrusted</source> + <translation type="unfinished">Корневой сертификат цепочки сертификатов самоподписанный и не является заверенным</translation> + </message> + <message> + <location line="+3"/> + <source>The issuer certificate of a locally looked up certificate could not be found</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+3"/> + <source>No certificates could be verified</source> + <translation>Не удалось проверить сертификаты</translation> + </message> + <message> + <location line="+3"/> + <source>One of the CA certificates is invalid</source> + <translation>Один из CA сертификатов некорректный</translation> + </message> + <message> + <location line="+3"/> + <source>The basicConstraints path length parameter has been exceeded</source> + <translation type="unfinished">Путь параметра basicConstraints слишком длинный</translation> + </message> + <message> + <location line="+3"/> + <source>The supplied certificate is unsuitable for this purpose</source> + <translation type="unfinished">Представленный сертификат не предназначен для данного использования</translation> + </message> + <message> + <location line="+3"/> + <source>The root CA certificate is not trusted for this purpose</source> + <translation type="unfinished">Корневой CA сертификат не является заверенным для данного использования</translation> + </message> + <message> + <location line="+3"/> + <source>The root CA certificate is marked to reject the specified purpose</source> + <translation type="unfinished">Корневой CA сертификат отмечен как 'отказывать' для данного использования</translation> + </message> + <message> + <location line="+3"/> + <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+4"/> + <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="+5"/> + <source>The peer did not present any certificate</source> + <translation>Узел не предоставил сертификат</translation> + </message> + <message> + <location line="+3"/> + <source>The host name did not match any of the valid hosts for this certificate</source> + <translation>Название узла не совпадает ни с одним из допустимых узлов данного сертификата</translation> + </message> + <message> + <location line="+6"/> + <source>Unknown error</source> + <translation>Неизвестная ошибка</translation> </message> </context> <context> <name>QStateMachine</name> <message> - <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+998"/> + <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+1028"/> <source>Missing initial state in compound state '%1'</source> <translation type="unfinished"></translation> </message> @@ -6059,7 +6934,7 @@ Please choose a different file name.</source> <context> <name>QTDSDriver</name> <message> - <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+584"/> + <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+595"/> <source>Unable to open connection</source> <translation>Невозможно открыть соединение</translation> </message> @@ -6093,7 +6968,7 @@ Please choose a different file name.</source> <context> <name>QTextControl</name> <message> - <location filename="../src/gui/text/qtextcontrol.cpp" line="+2003"/> + <location filename="../src/gui/text/qtextcontrol.cpp" line="+2027"/> <source>&Undo</source> <translation>&Отменить действие</translation> </message> @@ -6136,7 +7011,7 @@ Please choose a different file name.</source> <context> <name>QToolButton</name> <message> - <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+254"/> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+310"/> <location line="+6"/> <source>Press</source> <translation>Нажать</translation> @@ -6193,14 +7068,14 @@ Please choose a different file name.</source> <context> <name>QUnicodeControlCharacterMenu</name> <message> - <location filename="../src/gui/text/qtextcontrol.cpp" line="+884"/> + <location filename="../src/gui/text/qtextcontrol.cpp" line="+899"/> <source>LRM Left-to-right mark</source> - <translation>LRM Признак письма слева направо</translation> + <translation type="unfinished">LRM Индикатор написания слева направо</translation> </message> <message> <location line="+1"/> <source>RLM Right-to-left mark</source> - <translation>RLM Признак письма справа налево</translation> + <translation type="unfinished">RLM Индикатор написания справа налево</translation> </message> <message> <location line="+1"/> @@ -6210,7 +7085,7 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>ZWNJ Zero width non-joiner</source> - <translation type="unfinished">ZWNJ Не объединяющий символ нулевой ширины</translation> + <translation type="unfinished">ZWNJ Разделитель нулевой ширины</translation> </message> <message> <location line="+1"/> @@ -6220,27 +7095,27 @@ Please choose a different file name.</source> <message> <location line="+1"/> <source>LRE Start of left-to-right embedding</source> - <translation type="unfinished"></translation> + <translation type="unfinished">LRE Индикатор написания слева направо внутри текста, написанного справа налево</translation> </message> <message> <location line="+1"/> <source>RLE Start of right-to-left embedding</source> - <translation type="unfinished"></translation> + <translation type="unfinished">RLE Индикатор написания справа налево внутри текста, написанного слева направо</translation> </message> <message> <location line="+1"/> <source>LRO Start of left-to-right override</source> - <translation type="unfinished"></translation> + <translation type="unfinished">LRO Перекрывающий индикатор написания слева направо</translation> </message> <message> <location line="+1"/> <source>RLO Start of right-to-left override</source> - <translation type="unfinished"></translation> + <translation type="unfinished">RLO Перекрывающий индикатор написания справа налево</translation> </message> <message> <location line="+1"/> <source>PDF Pop directional formatting</source> - <translation type="unfinished"></translation> + <translation type="unfinished">PDF Индикатор конца текста с другим направлением</translation> </message> <message> <location line="+6"/> @@ -6251,7 +7126,7 @@ Please choose a different file name.</source> <context> <name>QWebFrame</name> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+704"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+712"/> <source>Request cancelled</source> <translation>Запрос отменён</translation> </message> @@ -6289,7 +7164,7 @@ Please choose a different file name.</source> <translation>Некорректный HTTP-запрос</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+41"/> + <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/> <source>Submit</source> <comment>default label for Submit buttons in forms on web pages</comment> <translation>Отправить</translation> @@ -6307,7 +7182,7 @@ Please choose a different file name.</source> <translation>Сбросить</translation> </message> <message> - <location line="+10"/> + <location line="+11"/> <source>This is a searchable index. Enter search keywords: </source> <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment> <translation>Индекс поиска. Введите ключевые слова для поиска: </translation> @@ -6564,19 +7439,19 @@ Please choose a different file name.</source> <location line="+8"/> <source>Audio Element</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Аудио-элемент</translation> </message> <message> <location line="+2"/> <source>Video Element</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Видео-элемент</translation> </message> <message> <location line="+2"/> <source>Mute Button</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Кнопка "приглушить"</translation> </message> <message> <location line="+2"/> @@ -6588,13 +7463,13 @@ Please choose a different file name.</source> <location line="+2"/> <source>Play Button</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Кнопка "воспроизведение"</translation> </message> <message> <location line="+2"/> <source>Pause Button</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Кнопка "пауза"</translation> </message> <message> <location line="+2"/> @@ -6612,7 +7487,7 @@ Please choose a different file name.</source> <location line="+2"/> <source>Rewind Button</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Кнопка "перемотать"</translation> </message> <message> <location line="+2"/> @@ -6624,73 +7499,73 @@ Please choose a different file name.</source> <location line="+2"/> <source>Elapsed Time</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Прошло времени</translation> </message> <message> <location line="+2"/> <source>Remaining Time</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Осталось времени</translation> </message> <message> <location line="+2"/> <source>Status Display</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Отображение состояния</translation> </message> <message> <location line="+2"/> <source>Fullscreen Button</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Кнопка "полноэкранный режим"</translation> </message> <message> <location line="+2"/> <source>Seek Forward Button</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Кнопка "перемотка вперёд"</translation> </message> <message> <location line="+2"/> <source>Seek Back Button</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Кнопка "перемотка назад"</translation> </message> <message> <location line="+8"/> <source>Audio element playback controls and status display</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Элементы управления воспроизведением звука и отображения состояния</translation> </message> <message> <location line="+2"/> <source>Video element playback controls and status display</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Элементы управления воспроизведением видео и отображения состояния</translation> </message> <message> <location line="+2"/> <source>Mute audio tracks</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Выключить звуковые дорожки</translation> </message> <message> <location line="+2"/> <source>Unmute audio tracks</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Включить звуковые дорожки</translation> </message> <message> <location line="+2"/> <source>Begin playback</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation>Начать воспроизведение</translation> </message> <message> <location line="+2"/> <source>Pause playback</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation>Приостановить воспроизведение</translation> </message> <message> <location line="+2"/> @@ -6708,7 +7583,7 @@ Please choose a different file name.</source> <location line="+2"/> <source>Rewind movie</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Начать фильм сначала</translation> </message> <message> <location line="+2"/> @@ -6720,67 +7595,67 @@ Please choose a different file name.</source> <location line="+2"/> <source>Current movie time</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Текущее время фильма</translation> </message> <message> <location line="+2"/> <source>Remaining movie time</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Осталось времени фильма</translation> </message> <message> <location line="+2"/> <source>Current movie status</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Текущее состояние фильма</translation> </message> <message> <location line="+2"/> <source>Play movie in full-screen mode</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Воспроизводить фильм в полноэкранном режиме</translation> </message> <message> <location line="+2"/> <source>Seek quickly back</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Быстрая перемотка назад</translation> </message> <message> <location line="+2"/> <source>Seek quickly forward</source> <comment>Media controller element</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Быстрая перемотка вперёд</translation> </message> <message> <location line="+9"/> <source>Indefinite time</source> <comment>Media time description</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">Время не определено</translation> </message> <message> <location line="+9"/> <source>%1 days %2 hours %3 minutes %4 seconds</source> <comment>Media time description</comment> - <translation type="unfinished"></translation> + <translation>%1 дней %2 часов %3 минут %4 секунд</translation> </message> <message> <location line="+4"/> <source>%1 hours %2 minutes %3 seconds</source> <comment>Media time description</comment> - <translation type="unfinished"></translation> + <translation>%1 часов %2 минут %3 секунд</translation> </message> <message> <location line="+4"/> <source>%1 minutes %2 seconds</source> <comment>Media time description</comment> - <translation type="unfinished"></translation> + <translation>%1 минут %2 секунд</translation> </message> <message> <location line="+3"/> <source>%1 seconds</source> <comment>Media time description</comment> - <translation type="unfinished"></translation> + <translation>%1 секунд</translation> </message> <message> <location line="-210"/> @@ -6819,7 +7694,7 @@ Please choose a different file name.</source> <translation>%1 (%2x%3 px)</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+170"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+167"/> <source>Web Inspector - %2</source> <translation>Web-инспектор - %2</translation> </message> @@ -6899,7 +7774,7 @@ Please choose a different file name.</source> </translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1727"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1833"/> <source>JavaScript Alert - %1</source> <translation>JavaScript: Предупреждение - %1</translation> </message> @@ -6909,7 +7784,7 @@ Please choose a different file name.</source> <translation>JavaScript: Подтверждение - %1</translation> </message> <message> - <location line="+18"/> + <location line="+19"/> <source>JavaScript Prompt - %1</source> <translation>JavaScript: Запрос - %1</translation> </message> @@ -6924,7 +7799,7 @@ Please choose a different file name.</source> <translation>Сбой выполнения сценария на данной странице. Желаете остановить выполение сценария?</translation> </message> <message> - <location line="+383"/> + <location line="+381"/> <source>Move the cursor to the next character</source> <translation>Переместить указатель к следующему символу</translation> </message> @@ -7145,7 +8020,7 @@ Please choose a different file name.</source> <context> <name>QWidget</name> <message> - <location filename="../src/gui/kernel/qwidget.cpp" line="+5652"/> + <location filename="../src/gui/kernel/qwidget.cpp" line="+5757"/> <source>*</source> <translation>*</translation> </message> @@ -7397,6 +8272,34 @@ Please choose a different file name.</source> </message> </context> <context> + <name>QXmlPatternistCLI</name> + <message> + <location filename="../src/xmlpatterns/api/qcoloringmessagehandler.cpp" line="+87"/> + <source>Warning in %1, at line %2, column %3: %4</source> + <translation>Предупреждение в %1, в строке %2, столбце %3: %4</translation> + </message> + <message> + <location line="+7"/> + <source>Warning in %1: %2</source> + <translation>Предупреждение в %1: %2</translation> + </message> + <message> + <location line="+16"/> + <source>Unknown location</source> + <translation>Неизвестное расположение</translation> + </message> + <message> + <location line="+14"/> + <source>Error %1 in %2, at line %3, column %4: %5</source> + <translation>Ошибка %1 в %2, в строке %3, столбце %4: %5</translation> + </message> + <message> + <location line="+8"/> + <source>Error %1 in %2: %3</source> + <translation>Ошибка %1 в %2: %3</translation> + </message> +</context> +<context> <name>QXmlStream</name> <message> <location filename="../src/corelib/xml/qxmlstream.cpp" line="+611"/> @@ -7611,7 +8514,7 @@ Please choose a different file name.</source> <message> <location line="+10"/> <source>Overflow: Can't represent date %1.</source> - <translation>Переполнение: Не удается представить дату %1.</translation> + <translation>Переполнение: Не удаётся представить дату %1.</translation> </message> <message> <location line="+9"/> @@ -7782,7 +8685,7 @@ Please choose a different file name.</source> </message> <message> <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+113"/> - <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source> + <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid.</source> <translation>Целевое имя в обрабатываемой инструкции не может быть %1 в любой комбинации нижнего и верхнего регистров. Имя %2 некорректно.</translation> </message> <message> @@ -7966,7 +8869,12 @@ Please choose a different file name.</source> <translation>%1 является схемой неизвестного типа.</translation> </message> <message> - <location line="-7041"/> + <location line="-7254"/> + <source>A template with name %1 has already been declared.</source> + <translation>Шаблон с именем %1 уже был объявлен.</translation> + </message> + <message> + <location line="+213"/> <source>Only one %1 declaration can occur in the query prolog.</source> <translation>Только одно объявление %1 может присутствовать в прологе запроса.</translation> </message> @@ -7976,17 +8884,12 @@ Please choose a different file name.</source> <translation>Инициализация переменной %1 зависит от себя самой</translation> </message> <message> - <location line="+63"/> - <source>No variable by name %1 exists</source> - <translation>Переменная с именем %1 отсутствует</translation> - </message> - <message> <location filename="../src/xmlpatterns/parser/qparsercontext.cpp" line="+93"/> <source>The variable %1 is unused</source> <translation>Переменная %1 не используется</translation> </message> <message> - <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2841"/> + <location filename="../src/xmlpatterns/parser/qquerytransformparser.cpp" line="+2904"/> <source>Version %1 is not supported. The supported XQuery version is 1.0.</source> <translation>Версия %1 не поддерживается. Поддерживается XQuery версии 1.0.</translation> </message> @@ -8047,37 +8950,12 @@ Please choose a different file name.</source> <translation>Возможность импорта модулей не поддерживается</translation> </message> <message> - <location line="+52"/> - <source>No value is available for the external variable by name %1.</source> - <translation>Отсутствует значение для внешней переменной с именем %1.</translation> - </message> - <message> - <location line="-4036"/> - <source>A template by name %1 has already been declared.</source> - <translation>Шаблон с именем %1 уже был объявлен.</translation> - </message> - <message> - <location line="+3581"/> + <location line="-403"/> <source>The keyword %1 cannot occur with any other mode name.</source> - <translation type="unfinished">Ключевое слово %1 не может встречаться с любым другим названием режима.</translation> - </message> - <message> - <location line="+29"/> - <source>The value of attribute %1 must of type %2, which %3 isn't.</source> - <translation>Значение атрибута %1 должно быть типа %2, но %3 ему не соответствует.</translation> + <translation>Ключевое слово %1 не может встречаться с любым другим названием режима.</translation> </message> <message> - <location line="+75"/> - <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source> - <translation>Не удается связать префикс %1. По умолчанию префикс связан с пространством имён %2.</translation> - </message> - <message> - <location line="+312"/> - <source>A variable by name %1 has already been declared.</source> - <translation>Переменная с именем %1 уже объявлена.</translation> - </message> - <message> - <location line="+135"/> + <location line="+551"/> <source>A stylesheet function must have a prefixed name.</source> <translation>Функция стилей должна иметь имя с префиксом.</translation> </message> @@ -8107,8 +8985,33 @@ Please choose a different file name.</source> <translation>Внешние функции не поддерживаются. Все поддерживаемые функции могут использоваться напрямую без первоначального объявления их в качестве внешних</translation> </message> <message> - <location line="+37"/> - <source>An argument by name %1 has already been declared. Every argument name must be unique.</source> + <location line="-3755"/> + <source>No variable with name %1 exists</source> + <translation>Переменная с именем %1 отсутствует</translation> + </message> + <message> + <location line="+3146"/> + <source>The value of attribute %1 must be of type %2, which %3 isn't.</source> + <translation>Значение атрибута %1 должно быть типа %2, но %3 не соответствует данному типу.</translation> + </message> + <message> + <location line="+75"/> + <source>The prefix %1 cannot be bound. By default, it is already bound to the namespace %2.</source> + <translation>Не удаётся связать префикс %1. По умолчанию префикс связан с пространством имён %2.</translation> + </message> + <message> + <location line="+312"/> + <source>A variable with name %1 has already been declared.</source> + <translation>Переменная с именем %1 уже объявлена.</translation> + </message> + <message> + <location line="+39"/> + <source>No value is available for the external variable with name %1.</source> + <translation>Отсутствует значение для внешней переменной с именем %1.</translation> + </message> + <message> + <location line="+220"/> + <source>An argument with name %1 has already been declared. Every argument name must be unique.</source> <translation>Аргумент с именем %1 уже объявлен. Имя каждого аргумента должно быть уникальным.</translation> </message> <message> @@ -8172,7 +9075,17 @@ Please choose a different file name.</source> <translation>Ось %1 не поддерживается в XQuery</translation> </message> <message> - <location line="+1197"/> + <location line="+333"/> + <source>No function with name %1 is available.</source> + <translation>Функция с именем %1 отсутствует.</translation> + </message> + <message> + <location line="+250"/> + <source>An attribute with name %1 has already appeared on this element.</source> + <translation>Атрибут с именем %1 уже существует для данного элемента.</translation> + </message> + <message> + <location line="+614"/> <source>%1 is not a valid name for a processing-instruction.</source> <translation>%1 является неверным названием для инструкции обработки.</translation> </message> @@ -8197,12 +9110,7 @@ Please choose a different file name.</source> <translation>Встречена конструкция, запрещённая для текущего языка (%1).</translation> </message> <message> - <location line="+6380"/> - <source>No function by name %1 is available.</source> - <translation>Функция с именем %1 отсутствует.</translation> - </message> - <message> - <location line="+102"/> + <location line="+6482"/> <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source> <translation>URI пространства имён не может быть пустой строкой при связывании с префиксом %1.</translation> </message> @@ -8237,12 +9145,7 @@ Please choose a different file name.</source> <translation>URI пространства имён должно быть константой и не может содержать выражений.</translation> </message> <message> - <location line="+16"/> - <source>An attribute by name %1 has already appeared on this element.</source> - <translation>Атрибут с именем %1 уже существует для данного элемента.</translation> - </message> - <message> - <location line="+61"/> + <location line="+77"/> <source>A direct element constructor is not well-formed. %1 is ended with %2.</source> <translation>Прямой конструктор элемента составлен некорректно. %1 заканчивается на %2.</translation> </message> @@ -8949,7 +9852,7 @@ Please choose a different file name.</source> </message> <message> <location line="+5"/> - <source>Derived attribute %1 does not exists in the base definition.</source> + <source>Derived attribute %1 does not exist in the base definition.</source> <translation type="unfinished"></translation> </message> <message> @@ -9401,7 +10304,7 @@ Please choose a different file name.</source> </message> <message> <location line="+131"/> - <source>Component with id %1 has been defined previously.</source> + <source>Component with ID %1 has been defined previously.</source> <translation type="unfinished"></translation> </message> <message> @@ -9815,11 +10718,16 @@ Please choose a different file name.</source> </message> <message> <location line="+6"/> - <source>Fixed value constrained not allowed if element is nillable.</source> + <source>Fixed value constraint not allowed if element is nillable.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+32"/> + <location line="+230"/> + <source>Element %1 cannot contain other elements, as it has a fixed content.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location line="-198"/> <source>Specified type %1 is not validly substitutable with element type %2.</source> <translation type="unfinished"></translation> </message> @@ -9863,12 +10771,7 @@ Please choose a different file name.</source> <translation type="unfinished"></translation> </message> <message> - <location line="+18"/> - <source>Element %1 can not contain other elements, as it has a fixed content.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location line="+43"/> + <location line="+61"/> <source>Element %1 is missing required attribute %2.</source> <translation type="unfinished"></translation> </message> diff --git a/translations/qtconfig_ru.ts b/translations/qtconfig_ru.ts index 9f74712..7be0f04 100644 --- a/translations/qtconfig_ru.ts +++ b/translations/qtconfig_ru.ts @@ -45,7 +45,7 @@ <message> <location line="+31"/> <source>Phonon GStreamer backend not available.</source> - <translation type="unfinished">Модуль Phonon поддержки GStreamer недоступен.</translation> + <translation>Модуль поддержки GStreamer недоступен.</translation> </message> <message> <location line="+4"/> @@ -156,363 +156,347 @@ <context> <name>MainWindowBase</name> <message> - <location filename="../tools/qtconfig/mainwindowbase.ui" line="+54"/> + <location filename="../tools/qtconfig/mainwindowbase.ui"/> <source>Qt Configuration</source> <translation>Конфигурация Qt</translation> </message> <message> - <location line="+35"/> + <location/> <source>Appearance</source> <translation>Внешний вид</translation> </message> <message> - <location line="+18"/> + <location/> <source>GUI Style</source> <translation>Стиль пользовательского графического интерфейса</translation> </message> <message> - <location line="+18"/> + <location/> <source>Select GUI &Style:</source> <translation type="unfinished">&Стиль интерфейса:</translation> </message> <message> - <location line="+88"/> + <location/> <source>Build Palette</source> <translation type="unfinished">Палитра</translation> </message> <message> - <location line="+12"/> + <location/> <source>&3-D Effects:</source> <translation>Эффекты &3D:</translation> </message> <message> - <location line="+31"/> + <location/> <source>Window Back&ground:</source> <translation>&Фон окна:</translation> </message> <message> - <location line="+35"/> + <location/> <source>&Tune Palette...</source> <translation>&Настроить палитру...</translation> </message> <message> - <location line="+10"/> + <location/> <source>Please use the KDE Control Center to set the palette.</source> <translation>Используйте Центр управления KDE для настройки цветов.</translation> </message> <message> - <location line="-154"/> + <location/> <source>Preview</source> <translation>Предпросмотр</translation> </message> <message> - <location line="+6"/> + <location/> <source>Select &Palette:</source> <translation>Выбор &палитры:</translation> </message> <message> - <location line="+11"/> + <location/> <source>Active Palette</source> <translation>Палитра активных элементов</translation> </message> <message> - <location line="+5"/> + <location/> <source>Inactive Palette</source> <translation>Палитра неактивных элементов</translation> </message> <message> - <location line="+5"/> + <location/> <source>Disabled Palette</source> <translation>Палитра выключенных элементов</translation> </message> <message> - <location line="+138"/> + <location/> <source>Fonts</source> <translation>Шрифты</translation> </message> <message> - <location line="+6"/> + <location/> <source>Default Font</source> <translation>Шрифт по умолчанию</translation> </message> <message> - <location line="+45"/> + <location/> <source>&Style:</source> <translation>&Начертание:</translation> </message> <message> - <location line="+10"/> + <location/> <source>&Point Size:</source> <translation>&Размер:</translation> </message> <message> - <location line="+10"/> + <location/> <source>F&amily:</source> <translation>&Шрифт:</translation> </message> <message> - <location line="+10"/> + <location/> <source>Sample Text</source> <translation>Текст для примера (Sample Text)</translation> </message> <message> - <location line="+13"/> + <location/> <source>Font Substitution</source> <translation>Подстановка шрифтов</translation> </message> <message> - <location line="+20"/> + <location/> <source>S&elect or Enter a Family:</source> <translation>&Выберите шрифт для замены:</translation> </message> <message> - <location line="+38"/> + <location/> <source>Current Substitutions:</source> <translation>Текущие замены:</translation> </message> <message> - <location line="+18"/> - <location line="+501"/> + <location/> <source>Up</source> <translation>Выше</translation> </message> <message> - <location line="-494"/> - <location line="+508"/> + <location/> <source>Down</source> <translation>Ниже</translation> </message> <message> - <location line="-501"/> - <location line="+494"/> + <location/> <source>Remove</source> <translation>Удалить</translation> </message> <message> - <location line="-464"/> + <location/> <source>Select s&ubstitute Family:</source> <translation>&Заменять на шрифт:</translation> </message> <message> - <location line="+20"/> - <location line="+487"/> + <location/> <source>Add</source> <translation>Добавить</translation> </message> <message> - <location line="-474"/> + <location/> <source>Interface</source> <translation>Интерфейс</translation> </message> <message> - <location line="+6"/> + <location/> <source>Feel Settings</source> <translation type="unfinished">Настройка указателя</translation> </message> <message> - <location line="+12"/> - <location line="+26"/> + <location/> <source> ms</source> <translation> мс</translation> </message> <message> - <location line="-13"/> + <location/> <source>&Double Click Interval:</source> <translation>&Интервал двойного щелчка:</translation> </message> <message> - <location line="+10"/> + <location/> <source>No blinking</source> <translation>Без мигания</translation> </message> <message> - <location line="+16"/> + <location/> <source>&Cursor Flash Time:</source> <translation>&Период мигания курсора:</translation> </message> <message> - <location line="+10"/> + <location/> <source> lines</source> <translation> строк</translation> </message> <message> - <location line="+13"/> + <location/> <source>Wheel &Scroll Lines:</source> <translation type="unfinished">&Прокручивать строк при повороте колёсика:</translation> </message> <message> - <location line="+10"/> + <location/> <source>Resolve symlinks in URLs</source> <translation>Разрешать символьные ссылки в URL-ах</translation> </message> <message> - <location line="+10"/> + <location/> <source>GUI Effects</source> <translation type="unfinished">Эффекты пользовательского интерфейса</translation> </message> <message> - <location line="+12"/> + <location/> <source>&Enable</source> <translation>&Включить</translation> </message> <message> - <location line="+3"/> + <location/> <source>Alt+E</source> <translation>Alt+D</translation> </message> <message> - <location line="+22"/> + <location/> <source>&Menu Effect:</source> <translation>Эффект &меню:</translation> </message> <message> - <location line="+10"/> + <location/> <source>C&omboBox Effect:</source> <translation type="unfinished">Эффект C&omboBox:</translation> </message> <message> - <location line="+10"/> + <location/> <source>&ToolTip Effect:</source> <translation type="unfinished">Эффект &ToolTip:</translation> </message> <message> - <location line="+10"/> + <location/> <source>Tool&Box Effect:</source> <translation type="unfinished">Эффект Tool&Box:</translation> </message> <message> - <location line="+17"/> - <location line="+19"/> - <location line="+14"/> - <location line="+19"/> + <location/> <source>Disable</source> <translation>Выключен</translation> </message> <message> - <location line="-47"/> - <location line="+19"/> - <location line="+14"/> - <location line="+19"/> + <location/> <source>Animate</source> <translation>Анимация</translation> </message> <message> - <location line="-47"/> - <location line="+33"/> + <location/> <source>Fade</source> <translation>Затухание</translation> </message> <message> - <location line="+28"/> + <location/> <source>Global Strut</source> <translation type="unfinished">Специальные возможности</translation> </message> <message> - <location line="+12"/> + <location/> <source>Minimum &Width:</source> <translation>Минимальная &ширина:</translation> </message> <message> - <location line="+10"/> + <location/> <source>Minimum Hei&ght:</source> <translation>Минимальная в&ысота:</translation> </message> <message> - <location line="+10"/> - <location line="+10"/> + <location/> <source> pixels</source> <translation> пикселей</translation> </message> <message> - <location line="+13"/> + <location/> <source>Enhanced support for languages written right-to-left</source> <translation>Расширенная поддержка письма справа налево</translation> </message> <message> - <location line="+7"/> + <location/> <source>XIM Input Style:</source> <translation>Стиль ввода XIM:</translation> </message> <message> - <location line="+11"/> + <location/> <source>On The Spot</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Over The Spot</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Off The Spot</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Root</source> <translation type="unfinished"></translation> </message> <message> - <location line="+8"/> + <location/> <source>Default Input Method:</source> <translation>Метод ввода по умолчанию:</translation> </message> <message> - <location line="+31"/> + <location/> <source>Printer</source> <translation>Принтер</translation> </message> <message> - <location line="+6"/> + <location/> <source>Enable Font embedding</source> <translation>Разрешить встраивание шрифтов</translation> </message> <message> - <location line="+16"/> + <location/> <source>Font Paths</source> <translation>Пути к шрифтам</translation> </message> <message> - <location line="+77"/> + <location/> <source>Browse...</source> <translation>Обзор...</translation> </message> <message> - <location line="+7"/> + <location/> <source>Press the <b>Browse</b> button or enter a directory and press Enter to add them to the list.</source> <translation>Нажмите кнопку <b>Обзор...</b> или укажите каталог и нажмите Ввод для добавления его в список.</translation> </message> <message> - <location line="+16"/> + <location/> <source>Phonon</source> <translation>Phonon</translation> </message> <message> - <location line="+6"/> + <location/> <source>About Phonon</source> <translation>О Phonon</translation> </message> <message> - <location line="+6"/> - <location line="+44"/> + <location/> <source>Current Version:</source> <translation>Текущая версия:</translation> </message> <message> - <location line="-37"/> - <location line="+44"/> + <location/> <source>Not available</source> <translation>Недоступно</translation> </message> <message> - <location line="-37"/> - <location line="+44"/> + <location/> <source>Website:</source> <translation>Вэб-сайт:</translation> </message> <message> - <location line="-37"/> + <location/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -525,12 +509,12 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://phonon.kde.org"><span style=" text-decoration: underline; color:#0000ff;">http://phonon.kde.org</span></a></p></body></html></translation> </message> <message> - <location line="+17"/> + <location/> <source>About GStreamer</source> <translation>О GStreamer</translation> </message> <message> - <location line="+27"/> + <location/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -543,22 +527,22 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://gstreamer.freedesktop.org/"><span style=" text-decoration: underline; color:#0000ff;">http://gstreamer.freedesktop.org/</span></a></p></body></html></translation> </message> <message> - <location line="+17"/> + <location/> <source>GStreamer backend settings</source> <translation>Настройки модуля GStreamer</translation> </message> <message> - <location line="+6"/> + <location/> <source>Preferred audio sink:</source> <translation>Предпочитаемое звуковое устройство:</translation> </message> <message> - <location line="+13"/> + <location/> <source>Preferred render method:</source> <translation>Предпочитаемый метод отрисовки:</translation> </message> <message> - <location line="+13"/> + <location/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -571,57 +555,57 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Внимание: Изменение данных настроек может повлечь невозможность корректного запуска приложений.</span></p></body></html></translation> </message> <message> - <location line="+68"/> + <location/> <source>&File</source> <translation>&Файл</translation> </message> <message> - <location line="+19"/> + <location/> <source>&Help</source> <translation>&Справка</translation> </message> <message> - <location line="+14"/> + <location/> <source>&Save</source> <translation>&Сохранить</translation> </message> <message> - <location line="+3"/> + <location/> <source>Save</source> <translation>Сохранить</translation> </message> <message> - <location line="+3"/> + <location/> <source>Ctrl+S</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>E&xit</source> <translation>В&ыход</translation> </message> <message> - <location line="+3"/> + <location/> <source>Exit</source> <translation>Выход</translation> </message> <message> - <location line="+8"/> + <location/> <source>&About</source> <translation>&О программе</translation> </message> <message> - <location line="+3"/> + <location/> <source>About</source> <translation>О программе</translation> </message> <message> - <location line="+8"/> + <location/> <source>About &Qt</source> <translation>О &Qt</translation> </message> <message> - <location line="+3"/> + <location/> <source>About Qt</source> <translation>О Qt</translation> </message> @@ -629,208 +613,207 @@ p, li { white-space: pre-wrap; } <context> <name>PaletteEditorAdvancedBase</name> <message> - <location filename="../tools/qtconfig/paletteeditoradvancedbase.ui" line="+61"/> + <location filename="../tools/qtconfig/paletteeditoradvancedbase.ui"/> <source>Tune Palette</source> <translation>Настройка палитры</translation> </message> <message> - <location line="+6"/> + <location/> <source><b>Edit Palette</b><p>Change the palette of the current widget or form.</p><p>Use a generated palette or select colors for each color group and each color role.</p><p>The palette can be tested with different widget layouts in the preview section.</p></source> <translation><b>Изменение палитры</b><p>Изменение палитры текущего виджета или формы.</p><p>Используйте сформированную палитру или выберите цвета для каждой группы цветов и каждой их роли.</p><p>Палитру можно проверить на виджетах в разных режимах отображения в разделе предпросмотра.</p></translation> </message> <message> - <location line="+29"/> + <location/> <source>Select &Palette:</source> <translation>Выбор &палитры:</translation> </message> <message> - <location line="+14"/> + <location/> <source>Active Palette</source> <translation>Палитра активных элементов</translation> </message> <message> - <location line="+5"/> + <location/> <source>Inactive Palette</source> <translation>Палитра неактивных элементов</translation> </message> <message> - <location line="+5"/> + <location/> <source>Disabled Palette</source> <translation>Палитра выключенных элементов</translation> </message> <message> - <location line="+21"/> + <location/> <source>Auto</source> <translation>Автоматически</translation> </message> <message> - <location line="+18"/> + <location/> <source>Build inactive palette from active</source> <translation type="unfinished">Создать неактивную палитру из активной</translation> </message> <message> - <location line="+13"/> + <location/> <source>Build disabled palette from active</source> <translation type="unfinished">Создать выключенную палитру из активной</translation> </message> <message> - <location line="+16"/> + <location/> <source>Central color &roles</source> <translation type="unfinished">Роли &цветов</translation> </message> <message> - <location line="+18"/> + <location/> <source>Choose central color role</source> <translation type="unfinished">Выберите роль цвета</translation> </message> <message> - <location line="+3"/> + <location/> <source><b>Select a color role.</b><p>Available central roles are: <ul> <li>Window - general background color.</li> <li>WindowText - general foreground color. </li> <li>Base - used as background color for e.g. text entry widgets, usually white or another light color. </li> <li>Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. </li> <li>Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. </li> <li>ButtonText - a foreground color used with the Button color. </li> <li>Highlight - a color to indicate a selected or highlighted item. </li> <li>HighlightedText - a text color that contrasts to Highlight. </li> <li>BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. </li> </ul> </p></source> <translation type="unfinished"><b>Выбор роли цвета.</b><p>Доступны следующие роли: <ul><li>Window - основной цвет фона.</li> <li>WindowText - основной цвет текста.</li> <li>Base - используется в качестве фона для, например, виджетов с текстовыми полями, обычно, белый или другой светлый цвет.</li> <li>Text - цвет текста используемый совместно с Base. Обычно, он совпадает с WindowText, так как в этом случае получается максимальный контраст и с Window, и с Base.</li> <li>Button - основной цвет фона кнопки, которой требуется цвет отличный от Window, например, в стиле Macintosh.</li> <li>ButtonText - цвет текста используемый совместно с Button.</li> <li>Highlight - цвет для обозначения выбранного или выделенного элемента.</li> <li>HighlightedText - цвет текста контрастирующий с Highlight.</li> <li>BrightText - цвет текста, который отличается от WindowText и хорошо контрастирует с черным.</li></ul></p></translation> </message> <message> - <location line="+4"/> + <location/> <source>Window</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>WindowText</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Button</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Base</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Text</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>BrightText</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>ButtonText</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Highlight</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>HighlightedText</source> <translation type="unfinished"></translation> </message> <message> - <location line="+52"/> + <location/> <source>&Select Color:</source> <translation>&Выбор цвета:</translation> </message> <message> - <location line="+24"/> - <location line="+171"/> + <location/> <source>Choose a color</source> <translation>Выберите цвет</translation> </message> <message> - <location line="-168"/> + <location/> <source>Choose a color for the selected central color role.</source> <translation>Выберите цвет для указанной роли.</translation> </message> <message> - <location line="+15"/> + <location/> <source>3-D shadow &effects</source> <translation>Эффекты т&рехмерной тени</translation> </message> <message> - <location line="+29"/> + <location/> <source>Build &from button color</source> <translation>Получ&ить из цвета кнопки</translation> </message> <message> - <location line="+6"/> + <location/> <source>Generate shadings</source> <translation type="unfinished">Создание полутонов</translation> </message> <message> - <location line="+3"/> + <location/> <source>Check to let 3D-effect colors be calculated from button-color.</source> <translation type="unfinished">Включите, чтобы цвета эффекта трёхмерности были получены из цвета кнопки.</translation> </message> <message> - <location line="+10"/> + <location/> <source>Choose 3D-effect color role</source> <translation type="unfinished">Выбор роли цвета дял эффекта трёхмерности</translation> </message> <message> - <location line="+3"/> + <location/> <source><b>Select a color role.</b><p>Available effect roles are: <ul> <li>Light - lighter than Button color. </li> <li>Midlight - between Button and Light. </li> <li>Mid - between Button and Dark. </li> <li>Dark - darker than Button. </li> <li>Shadow - a very dark color. </li> </ul></source> <translation><b>Выбор роли цвета.</b><p>Доступны следующие роли: <ul> <li>Light - светлее цвета Button. </li> <li>Midlight - среднее между Light и Button. </li> <li>Mid - среднее между Button и Dark. </li> <li>Dark - темнее цвета Button. </li> <li>Shadow - очень темный цвет. </li> </ul></translation> </message> <message> - <location line="+4"/> + <location/> <source>Light</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Midlight</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Mid</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Dark</source> <translation type="unfinished"></translation> </message> <message> - <location line="+5"/> + <location/> <source>Shadow</source> <translation type="unfinished"></translation> </message> <message> - <location line="+54"/> + <location/> <source>Select Co&lor:</source> <translation>Выбор &цвета:</translation> </message> <message> - <location line="+27"/> + <location/> <source>Choose a color for the selected effect color role.</source> <translation type="unfinished">Выбор цвета для указанной роли.</translation> </message> <message> - <location line="+42"/> + <location/> <source>OK</source> <translation>Принять</translation> </message> <message> - <location line="+9"/> + <location/> <source>Close dialog and apply all changes.</source> <translation>Закрыть окно с применением изменений.</translation> </message> <message> - <location line="+10"/> + <location/> <source>Cancel</source> <translation>Отмена</translation> </message> <message> - <location line="+6"/> + <location/> <source>Close dialog and discard all changes.</source> <translation>Закрыть окно с отменой изменений.</translation> </message> @@ -846,62 +829,62 @@ p, li { white-space: pre-wrap; } <context> <name>PreviewWidgetBase</name> <message> - <location filename="../tools/qtconfig/previewwidgetbase.ui" line="+66"/> + <location filename="../tools/qtconfig/previewwidgetbase.ui"/> <source>Preview Window</source> <translation>Окно предпросмотра</translation> </message> <message> - <location line="+40"/> + <location/> <source>ButtonGroup</source> <translation>ButtonGroup</translation> </message> <message> - <location line="+18"/> + <location/> <source>RadioButton1</source> <translation>RadioButton1</translation> </message> <message> - <location line="+13"/> + <location/> <source>RadioButton2</source> <translation>RadioButton2</translation> </message> <message> - <location line="+10"/> + <location/> <source>RadioButton3</source> <translation>RadioButton3</translation> </message> <message> - <location line="+13"/> + <location/> <source>ButtonGroup2</source> <translation>ButtonGroup2</translation> </message> <message> - <location line="+18"/> + <location/> <source>CheckBox1</source> <translation>CheckBox1</translation> </message> <message> - <location line="+13"/> + <location/> <source>CheckBox2</source> <translation>CheckBox2</translation> </message> <message> - <location line="+36"/> + <location/> <source>LineEdit</source> <translation>LineEdit</translation> </message> <message> - <location line="+11"/> + <location/> <source>ComboBox</source> <translation>ComboBox</translation> </message> <message> - <location line="+29"/> + <location/> <source>PushButton</source> <translation>PushButton</translation> </message> <message> - <location line="+41"/> + <location/> <source><p> <a href="http://qt.nokia.com">http://qt.nokia.com</a> </p> diff --git a/translations/qvfb_ru.ts b/translations/qvfb_ru.ts index 6d8681e..28f7010 100644 --- a/translations/qvfb_ru.ts +++ b/translations/qvfb_ru.ts @@ -4,7 +4,7 @@ <context> <name>AnimationSaveWidget</name> <message> - <location filename="../tools/qvfb/qvfb.cpp" line="+865"/> + <location filename="../tools/qvfb/qvfb.cpp" line="+868"/> <location line="+204"/> <source>Record</source> <translation>Записать</translation> @@ -76,191 +76,193 @@ <context> <name>Config</name> <message> - <location filename="../tools/qvfb/config.ui" line="+54"/> + <location filename="../tools/qvfb/config.ui"/> <source>Configure</source> <translation>Настройка</translation> </message> <message> - <location line="+29"/> + <location/> <source>Size</source> <translation>Размер</translation> </message> <message> - <location line="+12"/> + <location/> <source>176x220 "SmartPhone"</source> <translation>176x220 "SmartPhone"</translation> </message> <message> - <location line="+7"/> + <location/> <source>240x320 "PDA"</source> <translation>240x320 "PDA"</translation> </message> <message> - <location line="+7"/> + <location/> <source>320x240 "TV" / "QVGA"</source> <translation>320x240 "TV" / "QVGA"</translation> </message> <message> - <location line="+7"/> + <location/> <source>640x480 "VGA"</source> <translation>640x480 "VGA"</translation> </message> <message> - <location line="+7"/> + <location/> + <source>800x480</source> + <translation>800x480</translation> + </message> + <message> + <location/> <source>800x600</source> <translation>800x600</translation> </message> <message> - <location line="+7"/> + <location/> <source>1024x768</source> <translation>1024x768</translation> </message> <message> - <location line="+21"/> + <location/> <source>Custom</source> <translation>Особый</translation> </message> <message> - <location line="+44"/> + <location/> <source>Depth</source> <translation>Глубина</translation> </message> <message> - <location line="+6"/> + <location/> <source>1 bit monochrome</source> <translation>1 бит (монохромный)</translation> </message> <message> - <location line="+7"/> + <location/> <source>2 bit grayscale</source> <translation>2 бита (градации серого)</translation> </message> <message> - <location line="+7"/> + <location/> <source>4 bit grayscale</source> <translation>4 бита (градации серого)</translation> </message> <message> - <location line="+7"/> + <location/> <source>8 bit</source> <translation>8 бит</translation> </message> <message> - <location line="+7"/> + <location/> <source>12 (16) bit</source> <translation>12 (16) бит</translation> </message> <message> - <location line="+7"/> + <location/> <source>15 bit</source> <translation>15 бит</translation> </message> <message> - <location line="+7"/> + <location/> <source>16 bit</source> <translation>16 бит</translation> </message> <message> - <location line="+7"/> + <location/> <source>18 bit</source> <translation>18 бит</translation> </message> <message> - <location line="+7"/> + <location/> <source>24 bit</source> <translation>24 бита</translation> </message> <message> - <location line="+7"/> + <location/> <source>32 bit</source> <translation>32 бита</translation> </message> <message> - <location line="+7"/> + <location/> <source>32 bit ARGB</source> <translation>32 бита (ARGB)</translation> </message> <message> - <location line="+7"/> + <location/> <source>Swap red and blue channels</source> <translation>Поменять синий и красный каналы</translation> </message> <message> - <location line="+3"/> + <location/> <source>BGR format</source> <translation>Формат BGR</translation> </message> <message> - <location line="+20"/> + <location/> <source>Skin</source> <translation>Обложка</translation> </message> <message> - <location line="+14"/> + <location/> <source>None</source> <translation>Нет</translation> </message> <message> - <location line="+10"/> + <location/> <source>Emulate touch screen (no mouse move)</source> <translatorcomment>указателя?</translatorcomment> <translation>Эмулировать тачскрин (без перемещения мыши)</translation> </message> <message> - <location line="+7"/> + <location/> <source>Emulate LCD screen (Only with fixed zoom of 3.0 times magnification)</source> <translation>Эмулировать ж/к экран (только с 3-х кратным увеличением)</translation> </message> <message> - <location line="+26"/> + <location/> <source><p>Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth <i>above</i>. You may freely modify the Gamma <i>below</i>.</source> <translation><p>Имейте в виду, что программы, использующие фрэймбуфер, будут завершены, если изменится <i>размер</i> и/или <i>глубина</i> экрана.</translation> </message> <message> - <location line="+10"/> + <location/> <source>Gamma</source> <translation>Гамма</translation> </message> <message> - <location line="+12"/> + <location/> <source>Blue</source> <translation>Синий</translation> </message> <message> - <location line="+489"/> - <location line="+496"/> - <location line="+14"/> - <location line="+496"/> + <location/> <source>1.0</source> <translation>1.0</translation> </message> <message> - <location line="-999"/> + <location/> <source>Green</source> <translation>Зеленый</translation> </message> <message> - <location line="+496"/> + <location/> <source>All</source> <translation>Все</translation> </message> <message> - <location line="+496"/> + <location/> <source>Red</source> <translation>Красный</translation> </message> <message> - <location line="+496"/> + <location/> <source>Set all to 1.0</source> <translation>Выставить все в 1.0</translation> </message> <message> - <location line="+34"/> + <location/> <source>&OK</source> <translation>&ОК</translation> </message> <message> - <location line="+13"/> + <location/> <source>&Cancel</source> <translation>От&мена</translation> </message> @@ -326,12 +328,12 @@ <context> <name>QVFb</name> <message> - <location filename="../tools/qvfb/qvfb.cpp" line="-501"/> + <location filename="../tools/qvfb/qvfb.cpp" line="-504"/> <source>Browse...</source> <translation>Обзор...</translation> </message> <message> - <location line="+140"/> + <location line="+143"/> <source>Load Custom Skin...</source> <translation>Загрузить обложку пользователя...</translation> </message> |