summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-03-15 22:03:41 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-03-15 22:03:41 (GMT)
commit1b16a610582990e3274f96bd27a05af45e20f4fe (patch)
tree7875d8849309fdde195cf2e34e911548d284b2e1 /src
parentfdcb62d5d6a3e295273042555d2551eb491a5b2d (diff)
parentaf44f857bc9b6698c6a8d2741a0c2b06608ecbad (diff)
downloadQt-1b16a610582990e3274f96bd27a05af45e20f4fe.zip
Qt-1b16a610582990e3274f96bd27a05af45e20f4fe.tar.gz
Qt-1b16a610582990e3274f96bd27a05af45e20f4fe.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2: Fix a crash in QSortFilterProxyModel when deleting a row small cleanup regarding delayed layout in itemviews Fixed wasted space in the texture cache. Get debug code compiling since function signature changes --warn; That file was forgotten when adding SSE support under mingw
Diffstat (limited to 'src')
-rw-r--r--src/declarative/qml/qdeclarativelist.h8
-rw-r--r--src/gui/itemviews/qabstractitemview.cpp30
-rw-r--r--src/gui/itemviews/qabstractitemview_p.h10
-rw-r--r--src/gui/itemviews/qlistview.cpp2
-rw-r--r--src/gui/itemviews/qsortfilterproxymodel.cpp34
-rw-r--r--src/gui/itemviews/qtreeview.cpp10
-rw-r--r--src/gui/painting/qtextureglyphcache.cpp16
-rw-r--r--src/multimedia/audio/qaudioinput_win32_p.h2
8 files changed, 60 insertions, 52 deletions
diff --git a/src/declarative/qml/qdeclarativelist.h b/src/declarative/qml/qdeclarativelist.h
index eac4967..ed402a8 100644
--- a/src/declarative/qml/qdeclarativelist.h
+++ b/src/declarative/qml/qdeclarativelist.h
@@ -61,12 +61,12 @@ struct QDeclarativeListProperty {
typedef T *(*AtFunction)(QDeclarativeListProperty<T> *, int);
typedef void (*ClearFunction)(QDeclarativeListProperty<T> *);
- QDeclarativeListProperty()
+ QDeclarativeListProperty()
: object(0), data(0), append(0), count(0), at(0), clear(0), dummy1(0), dummy2(0) {}
QDeclarativeListProperty(QObject *o, QList<T *> &list)
: object(o), data(&list), append(qlist_append), count(qlist_count), at(qlist_at),
clear(qlist_clear), dummy1(0), dummy2(0) {}
- QDeclarativeListProperty(QObject *o, void *d, AppendFunction a, CountFunction c = 0, AtFunction t = 0,
+ QDeclarativeListProperty(QObject *o, void *d, AppendFunction a, CountFunction c = 0, AtFunction t = 0,
ClearFunction r = 0)
: object(o), data(d), append(a), count(c), at(t), clear(r), dummy1(0), dummy2(0) {}
@@ -81,7 +81,7 @@ struct QDeclarativeListProperty {
QObject *object;
void *data;
-
+
AppendFunction append;
CountFunction count;
@@ -94,7 +94,7 @@ struct QDeclarativeListProperty {
private:
static void qlist_append(QDeclarativeListProperty *p, T *v) {
- ((QList<T *> *)p->data)->append(v);
+ ((QList<T *> *)p->data)->append(v);
}
static int qlist_count(QDeclarativeListProperty *p) {
return ((QList<T *> *)p->data)->count();
diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp
index 2faf755..443e669 100644
--- a/src/gui/itemviews/qabstractitemview.cpp
+++ b/src/gui/itemviews/qabstractitemview.cpp
@@ -103,8 +103,7 @@ QAbstractItemViewPrivate::QAbstractItemViewPrivate()
verticalScrollMode(QAbstractItemView::ScrollPerItem),
horizontalScrollMode(QAbstractItemView::ScrollPerItem),
currentIndexSet(false),
- wrapItemText(false),
- delayedPendingLayout(false)
+ wrapItemText(false)
{
}
@@ -2396,9 +2395,8 @@ void QAbstractItemView::timerEvent(QTimerEvent *event)
d->delayedEditing.stop();
edit(currentIndex());
} else if (event->timerId() == d->delayedLayout.timerId()) {
- d->delayedLayout.stop();
+ d->interruptDelayedItemsLayout();
if (isVisible()) {
- d->interruptDelayedItemsLayout();
doItemsLayout();
const QModelIndex current = currentIndex();
if (current.isValid() && d->state == QAbstractItemView::EditingState)
@@ -3060,7 +3058,7 @@ void QAbstractItemView::setIndexWidget(const QModelIndex &index, QWidget *widget
d->addEditor(index, widget, true);
widget->show();
dataChanged(index, index); // update the geometry
- if (!d->delayedPendingLayout)
+ if (!d->delayedPendingLayout())
widget->setGeometry(visualRect(index));
}
}
@@ -3100,7 +3098,7 @@ void QAbstractItemView::scrollToTop()
void QAbstractItemView::scrollToBottom()
{
Q_D(QAbstractItemView);
- if (d->delayedPendingLayout) {
+ if (d->delayedPendingLayout()) {
d->executePostedLayout();
updateGeometries();
}
@@ -3145,14 +3143,14 @@ void QAbstractItemView::dataChanged(const QModelIndex &topLeft, const QModelInde
delegate->setEditorData(editorInfo.editor, topLeft);
}
}
- if (isVisible() && !d->delayedPendingLayout) {
+ if (isVisible() && !d->delayedPendingLayout()) {
// otherwise the items will be update later anyway
update(topLeft);
}
return;
}
d->updateEditorData(topLeft, bottomRight);
- if (!isVisible() || d->delayedPendingLayout)
+ if (!isVisible() || d->delayedPendingLayout())
return; // no need to update
d->viewport->update();
}
@@ -3876,22 +3874,6 @@ bool QAbstractItemViewPrivate::shouldAutoScroll(const QPoint &pos) const
|| (area.right() - pos.x() < autoScrollMargin);
}
-void QAbstractItemViewPrivate::doDelayedItemsLayout(int delay)
-{
- if (!delayedPendingLayout) {
- delayedPendingLayout = true;
- delayedLayout.start(delay, q_func());
- }
-}
-
-void QAbstractItemViewPrivate::interruptDelayedItemsLayout() const
-{
- delayedLayout.stop();
- delayedPendingLayout = false;
-}
-
-
-
QWidget *QAbstractItemViewPrivate::editor(const QModelIndex &index,
const QStyleOptionViewItem &options)
{
diff --git a/src/gui/itemviews/qabstractitemview_p.h b/src/gui/itemviews/qabstractitemview_p.h
index 82fd1a6..3511c28 100644
--- a/src/gui/itemviews/qabstractitemview_p.h
+++ b/src/gui/itemviews/qabstractitemview_p.h
@@ -124,8 +124,10 @@ public:
bool shouldEdit(QAbstractItemView::EditTrigger trigger, const QModelIndex &index) const;
bool shouldForwardEvent(QAbstractItemView::EditTrigger trigger, const QEvent *event) const;
bool shouldAutoScroll(const QPoint &pos) const;
- void doDelayedItemsLayout(int delay = 0);
- void interruptDelayedItemsLayout() const;
+ void doDelayedItemsLayout(int delay = 0) { if (!delayedPendingLayout()) delayedLayout.start(delay, q_func()); }
+ void interruptDelayedItemsLayout() const { delayedLayout.stop(); }
+ bool delayedPendingLayout() const { return delayedLayout.isActive(); }
+
void startAutoScroll()
{ // ### it would be nice to make this into a style hint one day
@@ -207,7 +209,7 @@ public:
}
inline void executePostedLayout() const {
- if (delayedPendingLayout && state != QAbstractItemView::CollapsingState) {
+ if (delayedPendingLayout() && state != QAbstractItemView::CollapsingState) {
interruptDelayedItemsLayout();
const_cast<QAbstractItemView*>(q_func())->doItemsLayout();
}
@@ -416,9 +418,7 @@ public:
QAbstractItemView::ScrollMode horizontalScrollMode;
bool currentIndexSet;
-
bool wrapItemText;
- mutable bool delayedPendingLayout;
private:
mutable QBasicTimer delayedLayout;
diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp
index b2def39..b2c8c51 100644
--- a/src/gui/itemviews/qlistview.cpp
+++ b/src/gui/itemviews/qlistview.cpp
@@ -823,7 +823,7 @@ void QListView::timerEvent(QTimerEvent *e)
void QListView::resizeEvent(QResizeEvent *e)
{
Q_D(QListView);
- if (d->delayedPendingLayout)
+ if (d->delayedPendingLayout())
return;
QSize delta = e->size() - e->oldSize();
diff --git a/src/gui/itemviews/qsortfilterproxymodel.cpp b/src/gui/itemviews/qsortfilterproxymodel.cpp
index 5c7d24b7..c6ad345 100644
--- a/src/gui/itemviews/qsortfilterproxymodel.cpp
+++ b/src/gui/itemviews/qsortfilterproxymodel.cpp
@@ -111,6 +111,35 @@ private:
};
+//this struct is used to store what are the rows that are removed
+//between a call to rowsAboutToBeRemoved and rowsRemoved
+//it avoids readding rows to the mapping that are currently being removed
+struct QRowsRemoval
+{
+ QRowsRemoval(const QModelIndex &parent_source, int start, int end) : parent_source(parent_source), start(start), end(end)
+ {
+ }
+
+ QRowsRemoval() : start(-1), end(-1)
+ {
+ }
+
+ bool contains(QModelIndex parent, int row)
+ {
+ do {
+ if (parent == parent_source)
+ return row >= start && row <= end;
+ row = parent.row();
+ parent = parent.parent();
+ } while (row >= 0);
+ return false;
+ }
+private:
+ QModelIndex parent_source;
+ int start;
+ int end;
+};
+
class QSortFilterProxyModelPrivate : public QAbstractProxyModelPrivate
{
Q_DECLARE_PUBLIC(QSortFilterProxyModel)
@@ -139,6 +168,7 @@ public:
int filter_role;
bool dynamic_sortfilter;
+ QRowsRemoval itemsBeingRemoved;
QModelIndexPairList saved_persistent_indexes;
@@ -1096,7 +1126,7 @@ void QSortFilterProxyModelPrivate::_q_sourceDataChanged(const QModelIndex &sourc
source_rows_change.append(source_row);
}
} else {
- if (q->filterAcceptsRow(source_row, source_parent)) {
+ if (!itemsBeingRemoved.contains(source_parent, source_row) && q->filterAcceptsRow(source_row, source_parent)) {
// This source row now satisfies the filter, so it must be added
source_rows_insert.append(source_row);
}
@@ -1253,6 +1283,7 @@ void QSortFilterProxyModelPrivate::_q_sourceRowsInserted(
void QSortFilterProxyModelPrivate::_q_sourceRowsAboutToBeRemoved(
const QModelIndex &source_parent, int start, int end)
{
+ itemsBeingRemoved = QRowsRemoval(source_parent, start, end);
source_items_about_to_be_removed(source_parent, start, end,
Qt::Vertical);
}
@@ -1260,6 +1291,7 @@ void QSortFilterProxyModelPrivate::_q_sourceRowsAboutToBeRemoved(
void QSortFilterProxyModelPrivate::_q_sourceRowsRemoved(
const QModelIndex &source_parent, int start, int end)
{
+ itemsBeingRemoved = QRowsRemoval();
source_items_removed(source_parent, start, end, Qt::Vertical);
}
diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
index 4135ba0..2acd160 100644
--- a/src/gui/itemviews/qtreeview.cpp
+++ b/src/gui/itemviews/qtreeview.cpp
@@ -668,7 +668,7 @@ void QTreeView::dataChanged(const QModelIndex &topLeft, const QModelIndex &botto
Q_D(QTreeView);
// if we are going to do a complete relayout anyway, there is no need to update
- if (d->delayedPendingLayout)
+ if (d->delayedPendingLayout())
return;
// refresh the height cache here; we don't really lose anything by getting the size hint,
@@ -742,7 +742,7 @@ void QTreeView::expand(const QModelIndex &index)
Q_D(QTreeView);
if (!d->isIndexValid(index))
return;
- if (d->delayedPendingLayout) {
+ if (d->delayedPendingLayout()) {
//A complete relayout is going to be performed, just store the expanded index, no need to layout.
if (d->storeExpanded(index))
emit expanded(index);
@@ -776,7 +776,7 @@ void QTreeView::collapse(const QModelIndex &index)
//if the current item is now invisible, the autoscroll will expand the tree to see it, so disable the autoscroll
d->delayedAutoScroll.stop();
- if (d->delayedPendingLayout) {
+ if (d->delayedPendingLayout()) {
//A complete relayout is going to be performed, just un-store the expanded index, no need to layout.
if (d->isPersistent(index) && d->expandedIndexes.remove(index))
emit collapsed(index);
@@ -2431,7 +2431,7 @@ void QTreeView::rowsInserted(const QModelIndex &parent, int start, int end)
{
Q_D(QTreeView);
// if we are going to do a complete relayout anyway, there is no need to update
- if (d->delayedPendingLayout) {
+ if (d->delayedPendingLayout()) {
QAbstractItemView::rowsInserted(parent, start, end);
return;
}
@@ -3755,7 +3755,7 @@ void QTreeViewPrivate::rowsRemoved(const QModelIndex &parent,
int start, int end, bool after)
{
// if we are going to do a complete relayout anyway, there is no need to update
- if (delayedPendingLayout) {
+ if (delayedPendingLayout()) {
_q_rowsRemoved(parent, start, end);
return;
}
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp
index 4418018..4a563ed 100644
--- a/src/gui/painting/qtextureglyphcache.cpp
+++ b/src/gui/painting/qtextureglyphcache.cpp
@@ -73,7 +73,7 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
const QFixedPoint *)
{
#ifdef CACHE_DEBUG
- printf("Populating with '%s'\n", QString::fromRawData(ti.chars, ti.num_chars).toLatin1().data());
+ printf("Populating with %d glyphs\n", numGlyphs);
qDebug() << " -> current transformation: " << m_transform;
#endif
@@ -93,17 +93,14 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
glyph_metrics_t metrics = fontEngine->boundingBox(glyph, m_transform);
#ifdef CACHE_DEBUG
- printf("'%c' (%4x): w=%.2f, h=%.2f, xoff=%.2f, yoff=%.2f, x=%.2f, y=%.2f, ti.ascent=%.2f, ti.descent=%.2f\n",
- ti.chars[i].toLatin1(),
+ printf("(%4x): w=%.2f, h=%.2f, xoff=%.2f, yoff=%.2f, x=%.2f, y=%.2f\n",
glyph,
metrics.width.toReal(),
metrics.height.toReal(),
metrics.xoff.toReal(),
metrics.yoff.toReal(),
metrics.x.toReal(),
- metrics.y.toReal(),
- ti.ascent.toReal(),
- ti.descent.toReal());
+ metrics.y.toReal());
#endif
int glyph_width = metrics.width.ceil().toInt();
int glyph_height = metrics.height.ceil().toInt();
@@ -139,7 +136,7 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
if (m_cx + c.w > m_w) {
// no room on the current line, start new glyph strip
m_cx = 0;
- m_cy = m_h;
+ m_cy += rowHeight;
}
if (m_cy + c.h > m_h) {
int new_height = m_h*2;
@@ -333,10 +330,7 @@ void QImageTextureGlyphCache::fillTexture(const Coord &c, glyph_t g)
QPoint base(c.x + glyphMargin(), c.y + glyphMargin() + c.baseLineY-1);
if (m_image.rect().contains(base))
m_image.setPixel(base, 255);
- m_image.save(QString::fromLatin1("cache-%1-%2-%3.png")
- .arg(m_current_textitem->font().family())
- .arg(m_current_textitem->font().pointSize())
- .arg(m_transform.type()));
+ m_image.save(QString::fromLatin1("cache-%1.png").arg(int(this)));
#endif
}
diff --git a/src/multimedia/audio/qaudioinput_win32_p.h b/src/multimedia/audio/qaudioinput_win32_p.h
index d555eff..a2cf2ea 100644
--- a/src/multimedia/audio/qaudioinput_win32_p.h
+++ b/src/multimedia/audio/qaudioinput_win32_p.h
@@ -122,7 +122,7 @@ private:
volatile int waveFreeBlockCount;
int waveCurrentBlock;
- static void CALLBACK waveInProc( HWAVEIN hWaveIn, UINT uMsg,
+ static void QT_WIN_CALLBACK waveInProc( HWAVEIN hWaveIn, UINT uMsg,
DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );
WAVEHDR* allocateBlocks(int size, int count);