6#include <QtGui/qwindow.h>
7#include <QtGui/qpa/qplatformtheme.h>
8#include <QtGui/qpa/qplatformwindow.h>
15#if QT_CONFIG(shortcut)
29 return GdkModifierType(0);
32 Qt::KeyboardModifiers
m =
shortcut[0].keyboardModifiers();
34 mods |= GDK_SHIFT_MASK;
36 mods |= GDK_CONTROL_MASK;
38 mods |= GDK_MOD1_MASK;
40 mods |= GDK_META_MASK;
42 return static_cast<GdkModifierType
>(mods);
73 gtk_widget_destroy(m_item);
81 m_item = gtk_separator_menu_item_new();
84 m_item = gtk_check_menu_item_new();
85 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(m_item), m_checked);
86 g_signal_connect(m_item,
"toggled", G_CALLBACK(
onToggle),
this);
88 m_item = gtk_menu_item_new();
89 g_signal_connect(m_item,
"activate", G_CALLBACK(
onActivate),
this);
91 gtk_menu_item_set_label(GTK_MENU_ITEM(m_item), m_text.
toUtf8());
92 gtk_menu_item_set_use_underline(GTK_MENU_ITEM(m_item), m_underline);
94 gtk_menu_item_set_submenu(GTK_MENU_ITEM(m_item), m_menu->
handle());
95 g_signal_connect(m_item,
"select", G_CALLBACK(
onSelect),
this);
96#if QT_CONFIG(shortcut)
97 if (!m_shortcut.isEmpty()) {
99 gtk_accel_label_set_accel(GTK_ACCEL_LABEL(
label), qt_gdkKey(m_shortcut), qt_gdkModifiers(m_shortcut));
103 gtk_widget_set_sensitive(m_item, m_enabled);
104 gtk_widget_set_visible(m_item, m_visible);
105 if (GTK_IS_CHECK_MENU_ITEM(m_item))
106 g_object_set(m_item,
"draw-as-radio", m_exclusive, NULL);
130 if (
i == 0 ||
text.
at(
i - 1) != u
'&') {
136 }
else if (
text.
at(
i - 1) == u
'&') {
140 }
else if (
c == u
'_') {
153 if (GTK_IS_MENU_ITEM(m_item)) {
154 gtk_menu_item_set_label(GTK_MENU_ITEM(m_item), m_text.
toUtf8());
155 gtk_menu_item_set_use_underline(GTK_MENU_ITEM(m_item), m_underline);
166 m_menu = qobject_cast<QGtk3Menu *>(
menu);
167 if (GTK_IS_MENU_ITEM(m_item))
168 gtk_menu_item_set_submenu(GTK_MENU_ITEM(m_item), m_menu ? m_menu->
handle() :
nullptr);
178 if (m_visible == visible)
182 if (GTK_IS_MENU_ITEM(m_item))
183 gtk_widget_set_visible(m_item, visible);
193 if (m_separator == separator)
197 m_separator = separator;
207 if (m_checkable == checkable)
211 m_checkable = checkable;
221 if (m_checked == checked)
225 if (GTK_IS_CHECK_MENU_ITEM(m_item))
226 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(m_item), checked);
229#if QT_CONFIG(shortcut)
241 if (GTK_IS_MENU_ITEM(m_item)) {
243 gtk_accel_label_set_accel(GTK_ACCEL_LABEL(
label), qt_gdkKey(m_shortcut), qt_gdkModifiers(m_shortcut));
260 gtk_widget_set_sensitive(m_item,
enabled);
270 if (m_exclusive == exclusive)
273 m_exclusive = exclusive;
274 if (GTK_IS_CHECK_MENU_ITEM(m_item))
275 g_object_set(m_item,
"draw-as-radio", exclusive, NULL);
296 bool active = gtk_check_menu_item_get_active(check);
297 if (active !=
item->isChecked()) {
298 item->setChecked(active);
306 m_menu = gtk_menu_new();
308 g_signal_connect(m_menu,
"show", G_CALLBACK(
onShow),
this);
309 g_signal_connect(m_menu,
"hide", G_CALLBACK(
onHide),
this);
314 if (GTK_IS_WIDGET(m_menu))
315 gtk_widget_destroy(m_menu);
326 if (!gitem || m_items.
contains(gitem))
334 gtk_menu_shell_insert(GTK_MENU_SHELL(m_menu),
handle,
index);
345 gtk_container_remove(GTK_CONTAINER(m_menu),
handle);
357 gtk_menu_shell_insert(GTK_MENU_SHELL(m_menu),
handle,
index);
367 gtk_widget_set_sensitive(m_menu,
enabled);
372 gtk_widget_set_visible(m_menu, visible);
379#if GTK_CHECK_VERSION(3, 10, 0)
380 targetPos /= gtk_widget_get_scale_factor(
menu->handle());
396 gtk_menu_shell_select_item(GTK_MENU_SHELL(m_menu), menuItem->
handle());
398 m_targetPos =
QPoint(targetRect.
x(), targetRect.
y() + targetRect.
height());
409 gtk_menu_popdown(GTK_MENU(m_menu));
452#include "moc_qgtk3menu.cpp"
constexpr bool isSpace() const noexcept
Returns true if the character is a separator character (Separator_* categories or certain code points...
The QKeySequence class encapsulates a key sequence as used by shortcuts.
qsizetype size() const noexcept
iterator insert(qsizetype i, parameter_type t)
bool removeOne(const AT &t)
T value(qsizetype i) const
\inmodule QtCore\reentrant
constexpr int x() const noexcept
Returns the x coordinate of this point.
constexpr int y() const noexcept
Returns the y coordinate of this point.
\inmodule QtCore\reentrant
constexpr int height() const noexcept
Returns the height of the rectangle.
constexpr int x() const noexcept
Returns the x-coordinate of the rectangle's left edge.
constexpr int y() const noexcept
Returns the y-coordinate of the rectangle's top edge.
\macro QT_RESTRICTED_CAST_FROM_ASCII
QString & replace(qsizetype i, qsizetype len, QChar after)
qsizetype size() const
Returns the number of characters in this string.
const QChar at(qsizetype i) const
Returns the character at the given index position in the string.
QString & insert(qsizetype i, QChar c)
QByteArray toUtf8() const &
Combined button and popup list for selecting options.
AudioChannelLayoutTag tag
struct _GtkWidget GtkWidget
GLuint64 GLenum void * handle
GLint GLint GLint GLint GLint x
[0]
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLuint GLsizei const GLchar * label
[43]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
qsizetype indexOf(const AT &t, qsizetype from=0) const noexcept
bool contains(const AT &t) const noexcept