summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/codecs/qtextcodec.h5
-rw-r--r--src/corelib/global/qnamespace.h3
-rw-r--r--src/corelib/tools/qlocale.cpp2
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp78
-rw-r--r--src/gui/kernel/qcocoaview_mac.mm16
-rw-r--r--src/gui/kernel/qt_cocoa_helpers_mac.mm15
-rw-r--r--src/gui/util/qsystemtrayicon_mac.mm115
-rw-r--r--src/plugins/sqldrivers/psql/psql.pro11
-rw-r--r--src/sql/drivers/drivers.pri13
9 files changed, 157 insertions, 101 deletions
diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h
index 5012b42..e37527d 100644
--- a/src/corelib/codecs/qtextcodec.h
+++ b/src/corelib/codecs/qtextcodec.h
@@ -171,11 +171,6 @@ public:
private:
const QTextCodec *c;
QTextCodec::ConverterState state;
-
- friend class QXmlStreamWriter;
- friend class QXmlStreamWriterPrivate;
- friend class QCoreXmlStreamWriter;
- friend class QCoreXmlStreamWriterPrivate;
};
class Q_CORE_EXPORT QTextDecoder {
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index 35ff8e7..6ee8ae9 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -1725,7 +1725,8 @@ public:
enum GestureFlag
{
DontStartGestureOnChildren = 0x01,
- ReceivePartialGestures = 0x02
+ ReceivePartialGestures = 0x02,
+ IgnoredGesturesPropagateToParent = 0x04
};
Q_DECLARE_FLAGS(GestureFlags, GestureFlag)
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index ff10fa1..b4bfcaf 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -2917,7 +2917,7 @@ QDate QLocale::toDate(const QString &string, FormatType format) const
#ifndef QT_NO_DATESTRING
QDateTime QLocale::toDateTime(const QString &string, FormatType format) const
{
- return toDateTime(string, dateFormat(format));
+ return toDateTime(string, dateTimeFormat(format));
}
#endif
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 9a36d46..3280e86 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -5936,6 +5936,9 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event)
typedef QHash<QGraphicsObject *, QList<QGesture *> > GesturesPerItem;
GesturesPerItem gesturesPerItem;
+ // gestures that are only supposed to propagate to parent items.
+ QSet<QGesture *> parentPropagatedGestures;
+
QSet<QGesture *> startedGestures;
foreach (QGesture *gesture, allGestures) {
QGraphicsObject *target = gestureTargets.value(gesture, 0);
@@ -5946,6 +5949,10 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event)
startedGestures.insert(gesture);
} else {
gesturesPerItem[target].append(gesture);
+ Qt::GestureFlags flags =
+ target->QGraphicsItem::d_func()->gestureContext.value(gesture->gestureType());
+ if (flags & Qt::IgnoredGesturesPropagateToParent)
+ parentPropagatedGestures.insert(gesture);
}
}
@@ -6035,6 +6042,10 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event)
Q_ASSERT(!gestureTargets.contains(g));
gestureTargets.insert(g, receiver);
gesturesPerItem[receiver].append(g);
+ Qt::GestureFlags flags =
+ receiver->QGraphicsItem::d_func()->gestureContext.value(g->gestureType());
+ if (flags & Qt::IgnoredGesturesPropagateToParent)
+ parentPropagatedGestures.insert(g);
}
it = ignoredConflictedGestures.begin();
e = ignoredConflictedGestures.end();
@@ -6044,13 +6055,17 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event)
Q_ASSERT(!gestureTargets.contains(g));
gestureTargets.insert(g, receiver);
gesturesPerItem[receiver].append(g);
+ Qt::GestureFlags flags =
+ receiver->QGraphicsItem::d_func()->gestureContext.value(g->gestureType());
+ if (flags & Qt::IgnoredGesturesPropagateToParent)
+ parentPropagatedGestures.insert(g);
}
DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:"
<< "Started gestures:" << normalGestures.keys()
<< "All gestures:" << gesturesPerItem.values();
- // deliver all events
+ // deliver all gesture events
QList<QGesture *> alreadyIgnoredGestures;
QHash<QGraphicsObject *, QSet<QGesture *> > itemIgnoredGestures;
QList<QGraphicsObject *> targetItems = gesturesPerItem.keys();
@@ -6070,9 +6085,26 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event)
foreach(QGesture *g, alreadyIgnoredGestures) {
QMap<Qt::GestureType, Qt::GestureFlags>::iterator contextit =
gid->gestureContext.find(g->gestureType());
- bool deliver = contextit != gid->gestureContext.end() &&
- (g->state() == Qt::GestureStarted ||
- (contextit.value() & Qt::ReceivePartialGestures));
+ bool deliver = false;
+ if (contextit != gid->gestureContext.end()) {
+ if (g->state() == Qt::GestureStarted) {
+ deliver = true;
+ } else {
+ const Qt::GestureFlags flags = contextit.value();
+ if (flags & Qt::ReceivePartialGestures) {
+ QGraphicsObject *originalTarget = gestureTargets.value(g);
+ Q_ASSERT(originalTarget);
+ QGraphicsItemPrivate *otd = originalTarget->QGraphicsItem::d_func();
+ const Qt::GestureFlags originalTargetFlags = otd->gestureContext.value(g->gestureType());
+ if (originalTargetFlags & Qt::IgnoredGesturesPropagateToParent) {
+ // only deliver to parents of the original target item
+ deliver = item->isAncestorOf(originalTarget);
+ } else {
+ deliver = true;
+ }
+ }
+ }
+ }
if (deliver)
gestures += g;
}
@@ -6100,18 +6132,52 @@ void QGraphicsScenePrivate::gestureEventHandler(QGestureEvent *event)
<< "item has ignored the event, will propagate."
<< item << ignoredGestures;
itemIgnoredGestures[item] += ignoredGestures;
+ alreadyIgnoredGestures = ignoredGestures.toList();
+
+ // remove gestures that are supposed to be propagated to
+ // parent items only.
+ QSet<QGesture *> parentGestures;
+ for (QSet<QGesture *>::iterator it = ignoredGestures.begin();
+ it != ignoredGestures.end();) {
+ if (parentPropagatedGestures.contains(*it)) {
+ parentGestures.insert(*it);
+ it = ignoredGestures.erase(it);
+ } else {
+ ++it;
+ }
+ }
+
+ QSet<QGraphicsObject *> itemsSet = targetItems.toSet();
+
+ foreach(QGesture *g, parentGestures) {
+ // get the original target for the gesture
+ QGraphicsItem *item = gestureTargets.value(g, 0);
+ Q_ASSERT(item);
+ const Qt::GestureType gestureType = g->gestureType();
+ // iterate through parent items of the original gesture
+ // target item and collect potential receivers
+ do {
+ if (QGraphicsObject *obj = item->toGraphicsObject()) {
+ if (item->d_func()->gestureContext.contains(gestureType))
+ itemsSet.insert(obj);
+ }
+ if (item->isPanel())
+ break;
+ } while ((item = item->parentItem()));
+ }
+
QMap<Qt::GestureType, QGesture *> conflictedGestures;
QList<QList<QGraphicsObject *> > itemsForConflictedGestures;
QHash<QGesture *, QGraphicsObject *> normalGestures;
getGestureTargets(ignoredGestures, viewport,
&conflictedGestures, &itemsForConflictedGestures,
&normalGestures);
- QSet<QGraphicsObject *> itemsSet = targetItems.toSet();
for (int k = 0; k < itemsForConflictedGestures.size(); ++k)
itemsSet += itemsForConflictedGestures.at(k).toSet();
+
targetItems = itemsSet.toList();
+
qSort(targetItems.begin(), targetItems.end(), qt_closestItemFirst);
- alreadyIgnoredGestures = conflictedGestures.values();
DEBUG() << "QGraphicsScenePrivate::gestureEventHandler:"
<< "new targets:" << targetItems;
i = -1; // start delivery again
diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm
index ec00583..d5e7534 100644
--- a/src/gui/kernel/qcocoaview_mac.mm
+++ b/src/gui/kernel/qcocoaview_mac.mm
@@ -84,21 +84,6 @@ extern OSViewRef qt_mac_nativeview_for(const QWidget *w); // qwidget_mac.mm
extern QPointer<QWidget> qt_mouseover; //qapplication_mac.mm
extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
-Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum)
-{
- if (buttonNum == 0)
- return Qt::LeftButton;
- if (buttonNum == 1)
- return Qt::RightButton;
- if (buttonNum == 2)
- return Qt::MidButton;
- if (buttonNum == 3)
- return Qt::XButton1;
- if (buttonNum == 4)
- return Qt::XButton2;
- return Qt::NoButton;
-}
-
struct dndenum_mapper
{
NSDragOperation mac_code;
@@ -707,6 +692,7 @@ extern "C" {
qt_button_down = 0;
}
+extern Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum);
- (void)otherMouseDown:(NSEvent *)theEvent
{
if (!qt_button_down)
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm
index f2ec4af..901bf0e 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac.mm
+++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm
@@ -648,6 +648,21 @@ bool qt_dispatchKeyEventWithCocoa(void * /*NSEvent * */ keyEvent, QWidget *widge
}
#endif
+Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum)
+{
+ if (buttonNum == 0)
+ return Qt::LeftButton;
+ if (buttonNum == 1)
+ return Qt::RightButton;
+ if (buttonNum == 2)
+ return Qt::MidButton;
+ if (buttonNum == 3)
+ return Qt::XButton1;
+ if (buttonNum == 4)
+ return Qt::XButton2;
+ return Qt::NoButton;
+}
+
// Helper to share code between QCocoaWindow and QCocoaView
bool qt_dispatchKeyEvent(void * /*NSEvent * */ keyEvent, QWidget *widgetToGetEvent)
{
diff --git a/src/gui/util/qsystemtrayicon_mac.mm b/src/gui/util/qsystemtrayicon_mac.mm
index 0265a83..5cadbbd 100644
--- a/src/gui/util/qsystemtrayicon_mac.mm
+++ b/src/gui/util/qsystemtrayicon_mac.mm
@@ -110,7 +110,7 @@ QT_USE_NAMESPACE
-(QSystemTrayIcon*)icon;
-(NSStatusItem*)item;
-(QRectF)geometry;
-- (void)triggerSelector:(id)sender;
+- (void)triggerSelector:(id)sender button:(Qt::MouseButton)mouseButton;
- (void)doubleClickSelector:(id)sender;
@end
@@ -121,7 +121,7 @@ QT_USE_NAMESPACE
-(id)initWithParent:(QNSStatusItem*)myParent;
-(QSystemTrayIcon*)icon;
-(void)menuTrackingDone:(NSNotification*)notification;
--(void)mousePressed:(NSEvent *)mouseEvent;
+-(void)mousePressed:(NSEvent *)mouseEvent button:(Qt::MouseButton)mouseButton;
@end
@@ -333,12 +333,10 @@ QT_END_NAMESPACE
[self setNeedsDisplay:YES];
}
--(void)mousePressed:(NSEvent *)mouseEvent
+-(void)mousePressed:(NSEvent *)mouseEvent button:(Qt::MouseButton)mouseButton
{
- int clickCount = [mouseEvent clickCount];
- down = !down;
- if(!down && [self icon]->contextMenu())
- [self icon]->contextMenu()->hide();
+ down = YES;
+ int clickCount = [mouseEvent clickCount];
[self setNeedsDisplay:YES];
#ifndef QT_MAC_USE_COCOA
@@ -348,47 +346,53 @@ QT_END_NAMESPACE
const short scale = hgt - 4;
#endif
- if( down && ![self icon]->icon().isNull() ) {
+ if (![self icon]->icon().isNull() ) {
NSImage *nsaltimage = static_cast<NSImage *>(qt_mac_create_nsimage([self icon]->icon().pixmap(QSize(scale, scale), QIcon::Selected)));
[self setImage: nsaltimage];
[nsaltimage release];
}
-
- if (down)
- [parent triggerSelector:self];
- else if ((clickCount%2))
+ if ((clickCount == 2)) {
+ [self menuTrackingDone:nil];
[parent doubleClickSelector:self];
- while (down) {
- mouseEvent = [[self window] nextEventMatchingMask:NSLeftMouseDownMask | NSLeftMouseUpMask
- | NSLeftMouseDraggedMask | NSRightMouseDownMask | NSRightMouseUpMask
- | NSRightMouseDraggedMask];
- switch ([mouseEvent type]) {
- case NSRightMouseDown:
- case NSRightMouseUp:
- case NSLeftMouseDown:
- case NSLeftMouseUp:
- [self menuTrackingDone:nil];
- break;
- case NSRightMouseDragged:
- case NSLeftMouseDragged:
- default:
- /* Ignore any other kind of event. */
- break;
- }
- };
+ } else {
+ [parent triggerSelector:self button:mouseButton];
+ }
}
-(void)mouseDown:(NSEvent *)mouseEvent
{
- [self mousePressed:mouseEvent];
+ [self mousePressed:mouseEvent button:Qt::LeftButton];
+}
+
+-(void)mouseUp:(NSEvent *)mouseEvent
+{
+ Q_UNUSED(mouseEvent);
+ [self menuTrackingDone:nil];
}
- (void)rightMouseDown:(NSEvent *)mouseEvent
{
- [self mousePressed:mouseEvent];
+ [self mousePressed:mouseEvent button:Qt::RightButton];
+}
+
+-(void)rightMouseUp:(NSEvent *)mouseEvent
+{
+ Q_UNUSED(mouseEvent);
+ [self menuTrackingDone:nil];
}
+extern Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum);
+- (void)otherMouseDown:(NSEvent *)mouseEvent
+{
+ [self mousePressed:mouseEvent button:cocoaButton2QtButton([mouseEvent buttonNumber])];
+}
+
+-(void)otherMouseUp:(NSEvent *)mouseEvent
+{
+ Q_UNUSED(mouseEvent);
+ [self menuTrackingDone:nil];
+}
-(void)drawRect:(NSRect)rect {
[[parent item] drawStatusBarBackgroundInRect:rect withHighlight:down];
@@ -433,45 +437,40 @@ QT_END_NAMESPACE
}
return QRectF();
}
-- (void)triggerSelector:(id)sender {
+
+- (void)triggerSelector:(id)sender button:(Qt::MouseButton)mouseButton {
Q_UNUSED(sender);
- if(!icon)
+ if (!icon)
return;
- qtsystray_sendActivated(icon, QSystemTrayIcon::Trigger);
+
+ if (mouseButton == Qt::MidButton)
+ qtsystray_sendActivated(icon, QSystemTrayIcon::MiddleClick);
+ else
+ qtsystray_sendActivated(icon, QSystemTrayIcon::Trigger);
+
if (icon->contextMenu()) {
-#if 0
- const QRectF geom = [self geometry];
- if(!geom.isNull()) {
- [[NSNotificationCenter defaultCenter] addObserver:imageCell
- selector:@selector(menuTrackingDone:)
- name:nil
- object:self];
- icon->contextMenu()->exec(geom.topLeft().toPoint(), 0);
- [imageCell menuTrackingDone:nil];
- } else
-#endif
- {
#ifndef QT_MAC_USE_COCOA
- [[[self item] view] removeAllToolTips];
- iconPrivate->updateToolTip_sys();
+ [[[self item] view] removeAllToolTips];
+ iconPrivate->updateToolTip_sys();
#endif
- NSMenu *m = [[QNSMenu alloc] initWithQMenu:icon->contextMenu()];
- [m setAutoenablesItems: NO];
- [[NSNotificationCenter defaultCenter] addObserver:imageCell
- selector:@selector(menuTrackingDone:)
- name:NSMenuDidEndTrackingNotification
- object:m];
- [item popUpStatusItemMenu: m];
- [m release];
- }
+ NSMenu *m = [[QNSMenu alloc] initWithQMenu:icon->contextMenu()];
+ [m setAutoenablesItems: NO];
+ [[NSNotificationCenter defaultCenter] addObserver:imageCell
+ selector:@selector(menuTrackingDone:)
+ name:NSMenuDidEndTrackingNotification
+ object:m];
+ [item popUpStatusItemMenu: m];
+ [m release];
}
}
+
- (void)doubleClickSelector:(id)sender {
Q_UNUSED(sender);
if(!icon)
return;
qtsystray_sendActivated(icon, QSystemTrayIcon::DoubleClick);
}
+
@end
class QSystemTrayIconQMenu : public QMenu
diff --git a/src/plugins/sqldrivers/psql/psql.pro b/src/plugins/sqldrivers/psql/psql.pro
index 29fbada..0a38ee4 100644
--- a/src/plugins/sqldrivers/psql/psql.pro
+++ b/src/plugins/sqldrivers/psql/psql.pro
@@ -4,18 +4,15 @@ HEADERS = ../../../sql/drivers/psql/qsql_psql.h
SOURCES = main.cpp \
../../../sql/drivers/psql/qsql_psql.cpp
-unix: {
+unix|win32-g++: {
!isEmpty(QT_LFLAGS_PSQL) {
- LIBS *= $$QT_LFLAGS_PSQL
+ !contains(QT_CONFIG, system-zlib): QT_LFLAGS_PSQL -= -lz
+ !static:LIBS *= $$QT_LFLAGS_PSQL
QMAKE_CXXFLAGS *= $$QT_CFLAGS_PSQL
}
!contains(LIBS, .*pq.*):LIBS *= -lpq
}
-win32:!contains(LIBS, .*pq.* ) {
- !win32-g++:LIBS *= -llibpq
- win32-g++:LIBS *= -lpq
- LIBS *= -lws2_32 -ladvapi32
-}
+win32:!win32-g++:!contains(LIBS, .*pq.* ) LIBS *= -llibpq -lws2_32 -ladvapi32
include(../qsqldriverbase.pri)
diff --git a/src/sql/drivers/drivers.pri b/src/sql/drivers/drivers.pri
index 184eca9..aac0267 100644
--- a/src/sql/drivers/drivers.pri
+++ b/src/sql/drivers/drivers.pri
@@ -6,19 +6,16 @@ contains(sql-drivers, psql) {
HEADERS += drivers/psql/qsql_psql.h
SOURCES += drivers/psql/qsql_psql.cpp
- unix {
- !isEmpty(QT_LFLAGS_PSQL) {
- LIBS *= $$QT_LFLAGS_PSQL
+ unix|win32-g++ {
+ !static:!isEmpty(QT_LFLAGS_PSQL) {
+ !contains(QT_CONFIG, system-zlib): QT_LFLAGS_PSQL -= -lz
+ !static:LIBS *= $$QT_LFLAGS_PSQL
QMAKE_CXXFLAGS *= $$QT_CFLAGS_PSQL
}
!contains(LIBS, .*pq.*):LIBS *= -lpq
}
- win32 {
- !win32-g++:!contains( LIBS, .*pq.* ):LIBS *= -llibpq
- win32-g++:!contains( LIBS, .*pq.* ):LIBS *= -lpq
- LIBS *= -lws2_32 -ladvapi32
- }
+ win32:!win32-g++:!contains(LIBS, .*pq.* ) LIBS *= -llibpq -lws2_32 -ladvapi32
}
contains(sql-drivers, mysql) {