QPA: Adding API to support QWidgetAction on Mac
Includes the Cocoa implementation. Task-number: QTBUG-19840 Change-Id: Id33bc8053b82116cf76ed591b6df823df3aef9bc Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com> Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
This commit is contained in:
parent
5ad594a061
commit
454dc332b3
@ -86,6 +86,9 @@ public:
|
||||
virtual void setChecked(bool isChecked) = 0;
|
||||
virtual void setShortcut(const QKeySequence& shortcut) = 0;
|
||||
virtual void setEnabled(bool enabled) = 0;
|
||||
|
||||
virtual void setNativeContents(WId item) { Q_UNUSED(item); }
|
||||
|
||||
Q_SIGNALS:
|
||||
void activated();
|
||||
void hovered();
|
||||
@ -118,6 +121,8 @@ public:
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
virtual void dismiss() { } // Closes this and all its related menu popups
|
||||
|
||||
virtual QPlatformMenuItem *menuItemAt(int position) const = 0;
|
||||
virtual QPlatformMenuItem *menuItemForTag(quintptr tag) const = 0;
|
||||
|
||||
|
@ -68,6 +68,7 @@ public:
|
||||
void setEnabled(bool enabled);
|
||||
void setVisible(bool visible);
|
||||
void showPopup(const QWindow *parentWindow, QPoint pos, const QPlatformMenuItem *item);
|
||||
void dismiss();
|
||||
|
||||
void syncSeparatorsCollapsible(bool enable);
|
||||
|
||||
|
@ -490,6 +490,11 @@ void QCocoaMenu::showPopup(const QWindow *parentWindow, QPoint pos, const QPlatf
|
||||
[(QNSView *)view resetMouseButtons];
|
||||
}
|
||||
|
||||
void QCocoaMenu::dismiss()
|
||||
{
|
||||
[m_nativeMenu cancelTracking];
|
||||
}
|
||||
|
||||
QPlatformMenuItem *QCocoaMenu::menuItemAt(int position) const
|
||||
{
|
||||
if (0 <= position && position < m_menuItems.count())
|
||||
|
@ -57,6 +57,7 @@
|
||||
QT_FORWARD_DECLARE_OBJC_CLASS(NSMenuItem);
|
||||
QT_FORWARD_DECLARE_OBJC_CLASS(NSMenu);
|
||||
QT_FORWARD_DECLARE_OBJC_CLASS(NSObject);
|
||||
QT_FORWARD_DECLARE_OBJC_CLASS(NSView);
|
||||
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
@ -86,6 +87,8 @@ public:
|
||||
void setChecked(bool isChecked);
|
||||
void setEnabled(bool isEnabled);
|
||||
|
||||
void setNativeContents(WId item);
|
||||
|
||||
inline QString text() const { return m_text; }
|
||||
inline NSMenuItem * nsItem() { return m_native; }
|
||||
NSMenuItem *sync();
|
||||
@ -105,6 +108,7 @@ private:
|
||||
QKeySequence mergeAccel();
|
||||
|
||||
NSMenuItem *m_native;
|
||||
NSView *m_itemView;
|
||||
QString m_text;
|
||||
bool m_textSynced;
|
||||
QIcon m_icon;
|
||||
|
@ -91,6 +91,7 @@ NSUInteger keySequenceModifierMask(const QKeySequence &accel)
|
||||
|
||||
QCocoaMenuItem::QCocoaMenuItem() :
|
||||
m_native(NULL),
|
||||
m_itemView(nil),
|
||||
m_textSynced(false),
|
||||
m_menu(NULL),
|
||||
m_isVisible(true),
|
||||
@ -110,6 +111,8 @@ QCocoaMenuItem::~QCocoaMenuItem()
|
||||
} else {
|
||||
[m_native release];
|
||||
}
|
||||
|
||||
[m_itemView release];
|
||||
}
|
||||
|
||||
void QCocoaMenuItem::setText(const QString &text)
|
||||
@ -178,6 +181,17 @@ void QCocoaMenuItem::setEnabled(bool enabled)
|
||||
m_enabled = enabled;
|
||||
}
|
||||
|
||||
void QCocoaMenuItem::setNativeContents(WId item)
|
||||
{
|
||||
NSView *itemView = (NSView *)item;
|
||||
[m_itemView release];
|
||||
m_itemView = [itemView retain];
|
||||
[m_itemView setAutoresizesSubviews:YES];
|
||||
[m_itemView setAutoresizingMask:NSViewWidthSizable];
|
||||
[m_itemView setHidden:NO];
|
||||
[m_itemView setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
NSMenuItem *QCocoaMenuItem::sync()
|
||||
{
|
||||
if (m_isSeparator != [m_native isSeparatorItem]) {
|
||||
@ -281,6 +295,7 @@ NSMenuItem *QCocoaMenuItem::sync()
|
||||
|
||||
[m_native setHidden: !m_isVisible];
|
||||
[m_native setEnabled: m_enabled];
|
||||
[m_native setView:m_itemView];
|
||||
|
||||
QString text = mergeText();
|
||||
QKeySequence accel = mergeAccel();
|
||||
|
Loading…
x
Reference in New Issue
Block a user