summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWater-Team <water@pad.test.qt.nokia.com>2011-07-15 23:00:15 (GMT)
committerWater-Team <water@pad.test.qt.nokia.com>2011-07-15 23:00:15 (GMT)
commit66ff42cade328208774c29d2aea086f4b79c3b6c (patch)
treebdcfb656e602ec09cc931dd239fbefb9df28a49b
parent2a326fdc8f8bf2bd2c5764394616100906d9db2d (diff)
parentc0b8b0f58bad6c238398055ef4c8aa8d45d1306d (diff)
downloadQt-66ff42cade328208774c29d2aea086f4b79c3b6c.zip
Qt-66ff42cade328208774c29d2aea086f4b79c3b6c.tar.gz
Qt-66ff42cade328208774c29d2aea086f4b79c3b6c.tar.bz2
Merge branch '4.8-upstream' into master-water
-rw-r--r--src/corelib/thread/qmutex_unix.cpp28
-rw-r--r--src/corelib/tools/qelapsedtimer_win.cpp6
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextinput.cpp16
-rw-r--r--src/gui/text/qfontdatabase.cpp3
-rw-r--r--tools/qvfb/qvfb.pro12
-rw-r--r--tools/qvfb/qvfbmmap.cpp2
-rw-r--r--tools/qvfb/qvfbshmem.cpp50
-rw-r--r--tools/qvfb/qvfbview.cpp5
8 files changed, 60 insertions, 62 deletions
diff --git a/src/corelib/thread/qmutex_unix.cpp b/src/corelib/thread/qmutex_unix.cpp
index 12bc795..e692e19 100644
--- a/src/corelib/thread/qmutex_unix.cpp
+++ b/src/corelib/thread/qmutex_unix.cpp
@@ -60,6 +60,7 @@
# include <linux/futex.h>
# include <sys/syscall.h>
# include <unistd.h>
+# include <QtCore/qelapsedtimer.h>
#endif
QT_BEGIN_NAMESPACE
@@ -138,16 +139,31 @@ static inline int _q_futex(volatile int *addr, int op, int val, const struct tim
bool QMutexPrivate::wait(int timeout)
{
+ struct timespec ts, *pts = 0;
+ QElapsedTimer timer;
+ if (timeout >= 0) {
+ ts.tv_nsec = ((timeout % 1000) * 1000) * 1000;
+ ts.tv_sec = (timeout / 1000);
+ pts = &ts;
+ timer.start();
+ }
while (contenders.fetchAndStoreAcquire(2) > 0) {
- struct timespec ts, *pts = 0;
- if (timeout >= 0) {
- ts.tv_nsec = ((timeout % 1000) * 1000) * 1000;
- ts.tv_sec = (timeout / 1000);
- pts = &ts;
- }
int r = _q_futex(&contenders._q_value, FUTEX_WAIT, 2, pts, 0, 0);
if (r != 0 && errno == ETIMEDOUT)
return false;
+
+ if (pts) {
+ // recalculate the timeout
+ qint64 xtimeout = timeout * 1000 * 1000;
+ xtimeout -= timer.nsecsElapsed();
+ if (xtimeout < 0) {
+ // timer expired after we returned
+ return false;
+ }
+
+ ts.tv_sec = timeout / Q_INT64_C(1000) / 1000 / 1000;
+ ts.tv_nsec = timeout % (Q_INT64_C(1000) * 1000 * 1000);
+ }
}
return true;
}
diff --git a/src/corelib/tools/qelapsedtimer_win.cpp b/src/corelib/tools/qelapsedtimer_win.cpp
index cd076a6..d79dc5d 100644
--- a/src/corelib/tools/qelapsedtimer_win.cpp
+++ b/src/corelib/tools/qelapsedtimer_win.cpp
@@ -42,14 +42,14 @@
#include "qelapsedtimer.h"
#include <windows.h>
-// Result of QueryPerformanceFrequency, 0 indicates that the high resolution timer is unavailable
-static quint64 counterFrequency = 0;
-
typedef ULONGLONG (WINAPI *PtrGetTickCount64)(void);
static PtrGetTickCount64 ptrGetTickCount64 = 0;
QT_BEGIN_NAMESPACE
+// Result of QueryPerformanceFrequency, 0 indicates that the high resolution timer is unavailable
+static quint64 counterFrequency = 0;
+
static void resolveLibs()
{
static bool done = false;
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp
index 7014571..3fd4fcd 100644
--- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp
@@ -560,13 +560,11 @@ QRect QDeclarativeTextInput::cursorRectangle() const
\qmlproperty int TextInput::selectionStart
The cursor position before the first character in the current selection.
- Setting this and selectionEnd allows you to specify a selection in the
- text edit.
- Note that if selectionStart == selectionEnd then there is no current
- selection.
+ This property is read-only. To change the selection, use select(start,end),
+ selectAll(), or selectWord().
- \sa selectionEnd, cursorPosition, selectedText, select()
+ \sa selectionEnd, cursorPosition, selectedText
*/
int QDeclarativeTextInput::selectionStart() const
{
@@ -578,13 +576,11 @@ int QDeclarativeTextInput::selectionStart() const
\qmlproperty int TextInput::selectionEnd
The cursor position after the last character in the current selection.
- Setting this and selectionStart allows you to specify a selection in the
- text edit.
- Note that if selectionStart == selectionEnd then there is no current
- selection.
+ This property is read-only. To change the selection, use select(start,end),
+ selectAll(), or selectWord().
- \sa selectionStart, cursorPosition, selectedText, select()
+ \sa selectionStart, cursorPosition, selectedText
*/
int QDeclarativeTextInput::selectionEnd() const
{
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 3762f39..26d9f2c 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -1130,13 +1130,14 @@ QT_BEGIN_INCLUDE_NAMESPACE
#elif defined(Q_OS_SYMBIAN)
# include "qfontdatabase_s60.cpp"
#endif
+QT_END_INCLUDE_NAMESPACE
+
#if !defined(Q_WS_X11)
QString QFontDatabase::resolveFontFamilyAlias(const QString &family)
{
return family;
}
#endif
-QT_END_INCLUDE_NAMESPACE
static QtFontStyle *bestStyle(QtFontFoundry *foundry, const QtFontStyle::Key &styleKey,
const QString &styleName = QString())
diff --git a/tools/qvfb/qvfb.pro b/tools/qvfb/qvfb.pro
index c101d00..29ce202 100644
--- a/tools/qvfb/qvfb.pro
+++ b/tools/qvfb/qvfb.pro
@@ -8,9 +8,6 @@ DESTDIR = ../../bin
target.path=$$[QT_INSTALL_BINS]
INSTALLS += target
-DEPENDPATH = ../../include
-INCLUDEPATH += ../../src/gui/embedded
-
FORMS = config.ui
HEADERS = qvfb.h \
qvfbview.h \
@@ -19,10 +16,7 @@ HEADERS = qvfb.h \
gammaview.h \
qvfbprotocol.h \
qvfbshmem.h \
- qvfbmmap.h \
- ../../src/gui/embedded/qvfbhdr.h \
- ../../src/gui/embedded/qlock_p.h \
- ../../src/gui/embedded/qwssignalhandler_p.h
+ qvfbmmap.h
SOURCES = qvfb.cpp \
qvfbview.cpp \
@@ -31,9 +25,7 @@ SOURCES = qvfb.cpp \
qanimationwriter.cpp \
qvfbprotocol.cpp \
qvfbshmem.cpp \
- qvfbmmap.cpp \
- ../../src/gui/embedded/qlock.cpp \
- ../../src/gui/embedded/qwssignalhandler.cpp
+ qvfbmmap.cpp
include(../shared/deviceskin/deviceskin.pri)
diff --git a/tools/qvfb/qvfbmmap.cpp b/tools/qvfb/qvfbmmap.cpp
index 7e80e37..01c1d9c 100644
--- a/tools/qvfb/qvfbmmap.cpp
+++ b/tools/qvfb/qvfbmmap.cpp
@@ -48,9 +48,7 @@
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/types.h>
-#include <sys/shm.h>
#include <sys/stat.h>
-#include <sys/sem.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <errno.h>
diff --git a/tools/qvfb/qvfbshmem.cpp b/tools/qvfb/qvfbshmem.cpp
index a03b25d..c17a680 100644
--- a/tools/qvfb/qvfbshmem.cpp
+++ b/tools/qvfb/qvfbshmem.cpp
@@ -39,10 +39,9 @@
**
****************************************************************************/
-#include "qlock_p.h"
-
#include "qvfbshmem.h"
-#include "qvfbhdr.h"
+#include <qvfbhdr.h>
+#include <private/qlock_p.h>
#include <QFile>
#include <QTimer>
@@ -53,8 +52,6 @@
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/stat.h>
-#include <sys/sem.h>
-#include <sys/mman.h>
#include <fcntl.h>
#include <errno.h>
#include <math.h>
@@ -69,27 +66,40 @@ QT_BEGIN_NAMESPACE
// live.
static QString qws_dataDir(int qws_display_id)
{
- QByteArray dataDir = QT_VFB_DATADIR(qws_display_id).toLocal8Bit();
- if (mkdir(dataDir, 0700)) {
+ static QString result;
+ if (!result.isEmpty())
+ return result;
+ result = QT_VFB_DATADIR(qws_display_id);
+ QByteArray dataDir = result.toLocal8Bit();
+
+#if defined(Q_OS_INTEGRITY)
+ /* ensure filesystem is ready before starting requests */
+ WaitForFileSystemInitialization();
+#endif
+
+ if (QT_MKDIR(dataDir, 0700)) {
if (errno != EEXIST) {
qFatal("Cannot create Qt for Embedded Linux data directory: %s", dataDir.constData());
}
}
- struct stat buf;
- if (lstat(dataDir, &buf))
+ QT_STATBUF buf;
+ if (QT_LSTAT(dataDir, &buf))
qFatal("stat failed for Qt for Embedded Linux data directory: %s", dataDir.constData());
if (!S_ISDIR(buf.st_mode))
qFatal("%s is not a directory", dataDir.constData());
+
+#if !defined(Q_OS_INTEGRITY) && !defined(Q_OS_VXWORKS) && !defined(Q_OS_QNX)
if (buf.st_uid != getuid())
qFatal("Qt for Embedded Linux data directory is not owned by user %uh", getuid());
if ((buf.st_mode & 0677) != 0600)
qFatal("Qt for Embedded Linux data directory has incorrect permissions: %s", dataDir.constData());
- dataDir += "/";
+#endif
- return QString(dataDir);
+ result.append(QLatin1Char('/'));
+ return result;
}
@@ -130,20 +140,10 @@ QShMemViewProtocol::QShMemViewProtocol(int displayid, const QSize &s,
qws_dataDir(displayid);
- QString oldPipe = "/tmp/qtembedded-" + username + "/" + QString("QtEmbedded-%1").arg(displayid);
- int oldPipeSemkey = ftok(oldPipe.toLatin1().constData(), 'd');
- if (oldPipeSemkey != -1) {
- int oldPipeLockId = semget(oldPipeSemkey, 0, 0);
- if (oldPipeLockId >= 0){
- sembuf sops;
- sops.sem_num = 0;
- sops.sem_op = 1;
- sops.sem_flg = SEM_UNDO;
- int rv;
- do {
- rv = semop(lockId,&sops,1);
- } while (rv == -1 && errno == EINTR);
-
+ {
+ QString oldPipe = "/tmp/qtembedded-" + username + "/" + QString("QtEmbedded-%1").arg(displayid);
+ QLock oldPipeLock(oldPipe, 'd', false);
+ if (oldPipeLock.isValid()) {
perror("QShMemViewProtocol::QShMemViewProtocol");
qFatal("Cannot create lock file as an old version of QVFb has "
"opened %s. Close other QVFb and try again",
diff --git a/tools/qvfb/qvfbview.cpp b/tools/qvfb/qvfbview.cpp
index 3f13ecc..91c5380 100644
--- a/tools/qvfb/qvfbview.cpp
+++ b/tools/qvfb/qvfbview.cpp
@@ -61,12 +61,7 @@
#include <stdlib.h>
#include <unistd.h>
-#include <sys/ipc.h>
#include <sys/types.h>
-#include <sys/shm.h>
-#include <sys/stat.h>
-#include <sys/sem.h>
-#include <fcntl.h>
#include <errno.h>
#include <math.h>