diff options
author | Liang Qi <liang.qi@qt.io> | 2017-08-15 16:30:10 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-08-15 16:31:48 +0200 |
commit | 106d3b9bf93325ea93c678270290b2c3dda9b764 (patch) | |
tree | 26c56932d60964c83e81d9c33d6f37ebc36d6c56 /src/plugins | |
parent | 79f679da9483c12979500dd48bc096d33af9ca6f (diff) | |
parent | 8bebded9ab02b8eec67c44bfddf802d6bf9cda3c (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts:
src/plugins/platforms/cocoa/qcocoamenu.h
src/plugins/platforms/cocoa/qcocoamenu.mm
src/plugins/platforms/cocoa/qcocoawindow.mm
src/widgets/styles/qstylehelper_p.h
Change-Id: I54247c98dd79d2b3826fc062b8b11048c9c7d9bb
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.h | 4 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenu.mm | 26 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoamenubar.mm | 2 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 11 | ||||
-rw-r--r-- | src/plugins/platformthemes/gtk3/qgtk3theme.cpp | 17 | ||||
-rw-r--r-- | src/plugins/styles/mac/qmacstyle_mac.mm | 22 | ||||
-rw-r--r-- | src/plugins/styles/mac/qmacstyle_mac_p_p.h | 8 | ||||
-rw-r--r-- | src/plugins/styles/windowsvista/qwindowsvistastyle_p_p.h | 6 | ||||
-rw-r--r-- | src/plugins/styles/windowsvista/qwindowsxpstyle.cpp | 12 |
9 files changed, 91 insertions, 17 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.h b/src/plugins/platforms/cocoa/qcocoamenu.h index 903d41220a..484f185fc0 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.h +++ b/src/plugins/platforms/cocoa/qcocoamenu.h @@ -91,13 +91,17 @@ public: bool isOpen() const; void setIsOpen(bool isOpen); + void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE; + private: QCocoaMenuItem *itemOrNull(int index) const; void insertNative(QCocoaMenuItem *item, QCocoaMenuItem *beforeItem); + void scheduleUpdate(); QList<QCocoaMenuItem *> m_menuItems; NSMenu *m_nativeMenu; NSMenuItem *m_attachedItem; + int m_updateTimer; bool m_enabled:1; bool m_parentEnabled:1; bool m_visible:1; diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm index ada6334cf4..77a531f25d 100644 --- a/src/plugins/platforms/cocoa/qcocoamenu.mm +++ b/src/plugins/platforms/cocoa/qcocoamenu.mm @@ -259,6 +259,7 @@ QT_BEGIN_NAMESPACE QCocoaMenu::QCocoaMenu() : m_attachedItem(0), + m_updateTimer(0), m_enabled(true), m_parentEnabled(true), m_visible(true), @@ -326,6 +327,13 @@ void QCocoaMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem * } insertNative(cocoaItem, beforeItem); + + // Empty menus on a menubar are hidden by default. If the menu gets + // added to the menubar before it contains any item, we need to sync. + if (isVisible() && attachedItem().hidden) { + if (auto *mb = qobject_cast<QCocoaMenuBar *>(menuParent())) + mb->syncMenu(this); + } } void QCocoaMenu::insertNative(QCocoaMenuItem *item, QCocoaMenuItem *beforeItem) @@ -409,6 +417,20 @@ QCocoaMenuItem *QCocoaMenu::itemOrNull(int index) const return m_menuItems.at(index); } +void QCocoaMenu::scheduleUpdate() +{ + if (!m_updateTimer) + m_updateTimer = startTimer(0); +} + +void QCocoaMenu::timerEvent(QTimerEvent *e) +{ + if (e->timerId() == m_updateTimer) { + m_updateTimer = 0; + [m_nativeMenu update]; + } +} + void QCocoaMenu::syncMenuItem(QPlatformMenuItem *menuItem) { QMacAutoReleasePool pool; @@ -435,9 +457,9 @@ void QCocoaMenu::syncMenuItem(QPlatformMenuItem *menuItem) QCocoaMenuItem* beforeItem = itemOrNull(m_menuItems.indexOf(cocoaItem) + 1); insertNative(cocoaItem, beforeItem); } else { - // Force NSMenuValidation to kick in. This is needed e.g. + // Schedule NSMenuValidation to kick in. This is needed e.g. // when an item's enabled state changes after menuWillOpen: - [m_nativeMenu update]; + scheduleUpdate(); } } diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm index 4cdf004dd1..70fcb40774 100644 --- a/src/plugins/platforms/cocoa/qcocoamenubar.mm +++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm @@ -370,7 +370,7 @@ void QCocoaMenuBar::updateMenuBarImmediately() QCocoaMenuLoader *loader = [QCocoaMenuLoader sharedMenuLoader]; [loader ensureAppMenuInMenu:mb->nsMenu()]; - NSMutableSet *mergedItems = [[NSMutableSet setWithCapacity:0] retain]; + NSMutableSet *mergedItems = [[NSMutableSet setWithCapacity:mb->merged().count()] retain]; foreach (QCocoaMenuItem *m, mb->merged()) { [mergedItems addObject:m->nsItem()]; m->syncMerged(); diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 7a19303f5d..6cdabf606b 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -588,7 +588,16 @@ void QCocoaWindow::setWindowFlags(Qt::WindowFlags flags) } setWindowZoomButton(flags); - m_view.window.ignoresMouseEvents = flags & Qt::WindowTransparentForInput; + // Make window ignore mouse events if WindowTransparentForInput is set. + // Note that ignoresMouseEvents has a special initial state where events + // are ignored (passed through) based on window transparency, and that + // setting the property to false does not return us to that state. Instead, + // this makes the window capture all mouse events. Take care to only + // set the property if needed. FIXME: recreate window if needed or find + // some other way to implement WindowTransparentForInput. + bool ignoreMouse = flags & Qt::WindowTransparentForInput; + if (m_view.window.ignoresMouseEvents != ignoreMouse) + m_view.window.ignoresMouseEvents = ignoreMouse; } m_windowFlags = flags; diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp index 7e64906476..6447776f25 100644 --- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp @@ -102,6 +102,15 @@ QGtk3Theme::QGtk3Theme() g_log_set_handler("Gtk", G_LOG_LEVEL_MESSAGE, gtkMessageHandler, NULL); } +static inline QVariant gtkGetLongPressTime() +{ + const char *gtk_long_press_time = "gtk-long-press-time"; + static bool found = g_object_class_find_property(G_OBJECT_GET_CLASS(gtk_settings_get_default()), gtk_long_press_time); + if (!found) + return QVariant(); + return QVariant(gtkSetting<guint>(gtk_long_press_time)); // Since 3.14, apparently we support >= 3.6 +} + QVariant QGtk3Theme::themeHint(QPlatformTheme::ThemeHint hint) const { switch (hint) { @@ -111,8 +120,12 @@ QVariant QGtk3Theme::themeHint(QPlatformTheme::ThemeHint hint) const return QVariant(gtkSetting<gint>("gtk-double-click-distance")); case QPlatformTheme::MouseDoubleClickInterval: return QVariant(gtkSetting<gint>("gtk-double-click-time")); - case QPlatformTheme::MousePressAndHoldInterval: - return QVariant(gtkSetting<guint>("gtk-long-press-time")); + case QPlatformTheme::MousePressAndHoldInterval: { + QVariant v = gtkGetLongPressTime(); + if (!v.isValid()) + v = QGnomeTheme::themeHint(hint); + return v; + } case QPlatformTheme::PasswordMaskDelay: return QVariant(gtkSetting<guint>("gtk-entry-password-hint-timeout")); case QPlatformTheme::StartDragDistance: diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm index a6ece7632a..4bcfa75f36 100644 --- a/src/plugins/styles/mac/qmacstyle_mac.mm +++ b/src/plugins/styles/mac/qmacstyle_mac.mm @@ -82,7 +82,9 @@ #include <qpainter.h> #include <qpixmapcache.h> #include <qpointer.h> +#if QT_CONFIG(progressbar) #include <qprogressbar.h> +#endif #if QT_CONFIG(pushbutton) #include <qpushbutton.h> #endif @@ -90,11 +92,15 @@ #if QT_CONFIG(rubberband) #include <qrubberband.h> #endif +#if QT_CONFIG(scrollbar) #include <qscrollbar.h> +#endif #include <qsizegrip.h> #include <qstyleoption.h> #include <qtoolbar.h> +#if QT_CONFIG(toolbutton) #include <qtoolbutton.h> +#endif #if QT_CONFIG(treeview) #include <qtreeview.h> #endif @@ -112,7 +118,9 @@ #endif #include <qmath.h> #include <QtWidgets/qgraphicsproxywidget.h> +#if QT_CONFIG(graphicsview) #include <QtWidgets/qgraphicsview.h> +#endif #include <QtCore/qvariant.h> #include <private/qstylehelper_p.h> #include <private/qstyleanimation_p.h> @@ -781,13 +789,13 @@ static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QWidget *widg else if (qobject_cast<const QComboBox *>(widg)) ct = QStyle::CT_ComboBox; #endif -#ifndef QT_NO_TOOLBUTTON +#if QT_CONFIG(toolbutton) else if (qobject_cast<const QToolButton *>(widg)) ct = QStyle::CT_ToolButton; #endif else if (qobject_cast<const QSlider *>(widg)) ct = QStyle::CT_Slider; -#ifndef QT_NO_PROGRESSBAR +#if QT_CONFIG(progressbar) else if (qobject_cast<const QProgressBar *>(widg)) ct = QStyle::CT_ProgressBar; #endif @@ -916,7 +924,7 @@ static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QWidget *widg if (sz == QStyleHelper::SizeSmall) { int width = 0, height = 0; if (szHint == QSize(-1, -1)) { //just 'guess'.. -#ifndef QT_NO_TOOLBUTTON +#if QT_CONFIG(toolbutton) const QToolButton *bt = qobject_cast<const QToolButton *>(widg); // If this conversion fails then the widget was not what it claimed to be. if(bt) { @@ -1003,7 +1011,7 @@ static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QWidget *widg ret.setWidth(w); break; } -#ifndef QT_NO_PROGRESSBAR +#if QT_CONFIG(progressbar) case QStyle::CT_ProgressBar: { int finalValue = -1; Qt::Orientation orient = Qt::Horizontal; @@ -3336,7 +3344,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai HIThemeGroupBoxDrawInfo gdi; gdi.version = qt_mac_hitheme_version; gdi.state = tds; -#ifndef QT_NO_GROUPBOX +#if QT_CONFIG(groupbox) if (w && qobject_cast<QGroupBox *>(w->parentWidget())) gdi.kind = kHIThemeGroupBoxKindSecondary; else @@ -5901,7 +5909,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex #endif } break; -#ifndef QT_NO_DIAL +#if QT_CONFIG(dial) case CC_Dial: if (const QStyleOptionSlider *dial = qstyleoption_cast<const QStyleOptionSlider *>(opt)) QStyleHelper::drawDial(dial, p); @@ -6721,7 +6729,7 @@ bool QMacStyle::event(QEvent *e) if(e->type() == QEvent::FocusIn) { QWidget *f = 0; QWidget *focusWidget = QApplication::focusWidget(); -#ifndef QT_NO_GRAPHICSVIEW +#if QT_CONFIG(graphicsview) if (QGraphicsView *graphicsView = qobject_cast<QGraphicsView *>(focusWidget)) { QGraphicsItem *focusItem = graphicsView->scene() ? graphicsView->scene()->focusItem() : 0; if (focusItem && focusItem->type() == QGraphicsProxyWidget::Type) { diff --git a/src/plugins/styles/mac/qmacstyle_mac_p_p.h b/src/plugins/styles/mac/qmacstyle_mac_p_p.h index 8574a52a87..b453e3c2d7 100644 --- a/src/plugins/styles/mac/qmacstyle_mac_p_p.h +++ b/src/plugins/styles/mac/qmacstyle_mac_p_p.h @@ -68,7 +68,9 @@ #include <qevent.h> #include <qfocusframe.h> #include <qformlayout.h> +#if QT_CONFIG(groupbox) #include <qgroupbox.h> +#endif #include <qhash.h> #include <qheaderview.h> #include <qlayout.h> @@ -83,7 +85,9 @@ #include <qpainter.h> #include <qpixmapcache.h> #include <qpointer.h> +#if QT_CONFIG(progressbar) #include <qprogressbar.h> +#endif #if QT_CONFIG(pushbutton) #include <qpushbutton.h> #endif @@ -93,12 +97,16 @@ #endif #include <qsizegrip.h> #include <qspinbox.h> +#if QT_CONFIG(splitter) #include <qsplitter.h> +#endif #include <qstyleoption.h> #include <qtextedit.h> #include <qtextstream.h> #include <qtoolbar.h> +#if QT_CONFIG(toolbutton) #include <qtoolbutton.h> +#endif #if QT_CONFIG(treeview) #include <qtreeview.h> #endif diff --git a/src/plugins/styles/windowsvista/qwindowsvistastyle_p_p.h b/src/plugins/styles/windowsvista/qwindowsvistastyle_p_p.h index 14af2c6bbc..a6744ff915 100644 --- a/src/plugins/styles/windowsvista/qwindowsvistastyle_p_p.h +++ b/src/plugins/styles/windowsvista/qwindowsvistastyle_p_p.h @@ -67,14 +67,20 @@ #include <qradiobutton.h> #include <qlineedit.h> #include <qgroupbox.h> +#if QT_CONFIG(toolbutton) #include <qtoolbutton.h> +#endif #include <qspinbox.h> #include <qtoolbar.h> #if QT_CONFIG(combobox) #include <qcombobox.h> #endif +#if QT_CONFIG(scrollbar) #include <qscrollbar.h> +#endif +#if QT_CONFIG(progressbar) #include <qprogressbar.h> +#endif #if QT_CONFIG(dockwidget) #include <qdockwidget.h> #endif diff --git a/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp b/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp index a3a665f22b..9880edf0b4 100644 --- a/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp +++ b/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp @@ -55,14 +55,18 @@ #include <qpa/qplatformnativeinterface.h> #include <qdesktopwidget.h> +#if QT_CONFIG(toolbutton) #include <qtoolbutton.h> +#endif #if QT_CONFIG(tabbar) #include <qtabbar.h> #endif #if QT_CONFIG(combobox) #include <qcombobox.h> #endif +#if QT_CONFIG(scrollbar) #include <qscrollbar.h> +#endif #include <qheaderview.h> #include <qspinbox.h> #if QT_CONFIG(listview) @@ -2857,7 +2861,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } break; #endif -#ifndef QT_NO_TOOLBUTTON +#if QT_CONFIG(toolbutton) case CC_ToolButton: if (const QStyleOptionToolButton *toolbutton = qstyleoption_cast<const QStyleOptionToolButton *>(option)) { @@ -2971,7 +2975,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } } break; -#endif // QT_NO_TOOLBUTTON +#endif // QT_CONFIG(toolbutton) case CC_TitleBar: { @@ -3231,12 +3235,12 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } break; #endif //QT_NO_MDIAREA -#ifndef QT_NO_DIAL +#if QT_CONFIG(dial) case CC_Dial: if (const QStyleOptionSlider *dial = qstyleoption_cast<const QStyleOptionSlider *>(option)) QStyleHelper::drawDial(dial, p); break; -#endif // QT_NO_DIAL +#endif // QT_CONFIG(dial) default: QWindowsStyle::drawComplexControl(cc, option, p, widget); break; |