summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java18
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java10
-rw-r--r--src/gui/kernel/qguiapplication.cpp12
-rw-r--r--src/gui/kernel/qplatformtheme.h1
-rw-r--r--src/plugins/platforms/android/androidjnimenu.cpp9
-rw-r--r--src/plugins/platforms/android/androidjnimenu.h1
-rw-r--r--src/plugins/platforms/android/qandroidplatformtheme.cpp6
-rw-r--r--src/plugins/platforms/android/qandroidplatformtheme.h1
8 files changed, 37 insertions, 21 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
index f57497069a..b4b483b416 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -815,15 +815,6 @@ public class QtActivityDelegate
if (!m_started)
return false;
- if (keyCode == KeyEvent.KEYCODE_MENU) {
- try {
- return (Boolean)m_super_onKeyDown.invoke(m_activity, keyCode, event);
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- }
-
m_metaState = MetaKeyKeyListener.handleKeyDown(m_metaState, keyCode, event);
int c = event.getUnicodeChar(MetaKeyKeyListener.getMetaState(m_metaState));
int lc = c;
@@ -858,15 +849,6 @@ public class QtActivityDelegate
if (!m_started)
return false;
- if (keyCode == KeyEvent.KEYCODE_MENU) {
- try {
- return (Boolean)m_super_onKeyUp.invoke(m_activity, keyCode, event);
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- }
-
if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP
|| keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_MUTE)
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index 02bb1ae485..31a99bf910 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -484,6 +484,16 @@ public class QtNative
});
}
+ private static void openOptionsMenu()
+ {
+ runAction(new Runnable() {
+ @Override
+ public void run() {
+ m_activity.openOptionsMenu();
+ }
+ });
+ }
+
private static byte[][] getSSLCertificates()
{
ArrayList<byte[]> certificateList = new ArrayList<byte[]>();
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 9155abf8b9..2d7900b5d9 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -1886,11 +1886,17 @@ void QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyE
ev.setAccepted(false);
static bool backKeyPressAccepted = false;
+ static bool menuKeyPressAccepted = false;
if (e->keyType == QEvent::KeyPress) {
backKeyPressAccepted = e->key == Qt::Key_Back && ev.isAccepted();
- } else if (e->keyType == QEvent::KeyRelease && e->key == Qt::Key_Back && !backKeyPressAccepted && !ev.isAccepted()) {
- if (window)
- QWindowSystemInterface::handleCloseEvent(window);
+ menuKeyPressAccepted = e->key == Qt::Key_Menu && ev.isAccepted();
+ } else if (e->keyType == QEvent::KeyRelease) {
+ if (e->key == Qt::Key_Back && !backKeyPressAccepted && !ev.isAccepted()) {
+ if (window)
+ QWindowSystemInterface::handleCloseEvent(window);
+ } else if (e->key == Qt::Key_Menu && !menuKeyPressAccepted && !ev.isAccepted()) {
+ platform_theme->showPlatformMenuBar();
+ }
}
#endif
}
diff --git a/src/gui/kernel/qplatformtheme.h b/src/gui/kernel/qplatformtheme.h
index a2d14be0fb..ad2b4a2164 100644
--- a/src/gui/kernel/qplatformtheme.h
+++ b/src/gui/kernel/qplatformtheme.h
@@ -276,6 +276,7 @@ public:
virtual QPlatformMenuItem* createPlatformMenuItem() const;
virtual QPlatformMenu* createPlatformMenu() const;
virtual QPlatformMenuBar* createPlatformMenuBar() const;
+ virtual void showPlatformMenuBar() {}
virtual bool usePlatformNativeDialog(DialogType type) const;
virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const;
diff --git a/src/plugins/platforms/android/androidjnimenu.cpp b/src/plugins/platforms/android/androidjnimenu.cpp
index 6a979b9255..9dc8395888 100644
--- a/src/plugins/platforms/android/androidjnimenu.cpp
+++ b/src/plugins/platforms/android/androidjnimenu.cpp
@@ -68,6 +68,7 @@ namespace QtAndroidMenu
static jmethodID openContextMenuMethodID = 0;
static jmethodID closeContextMenuMethodID = 0;
static jmethodID resetOptionsMenuMethodID = 0;
+ static jmethodID openOptionsMenuMethodID = 0;
static jmethodID clearMenuMethodID = 0;
static jmethodID addMenuItemMethodID = 0;
@@ -87,6 +88,13 @@ namespace QtAndroidMenu
env.jniEnv->CallStaticVoidMethod(applicationClass(), resetOptionsMenuMethodID);
}
+ void openOptionsMenu()
+ {
+ AttachedJNIEnv env;
+ if (env.jniEnv)
+ env.jniEnv->CallStaticVoidMethod(applicationClass(), openOptionsMenuMethodID);
+ }
+
void showContextMenu(QAndroidPlatformMenu *menu, JNIEnv *env)
{
QMutexLocker lock(&visibleMenuMutex);
@@ -409,6 +417,7 @@ namespace QtAndroidMenu
GET_AND_CHECK_STATIC_METHOD(openContextMenuMethodID, appClass, "openContextMenu", "()V");
GET_AND_CHECK_STATIC_METHOD(closeContextMenuMethodID, appClass, "closeContextMenu", "()V");
GET_AND_CHECK_STATIC_METHOD(resetOptionsMenuMethodID, appClass, "resetOptionsMenu", "()V");
+ GET_AND_CHECK_STATIC_METHOD(openOptionsMenuMethodID, appClass, "openOptionsMenu", "()V");
jclass clazz;
FIND_AND_CHECK_CLASS("android/view/Menu");
diff --git a/src/plugins/platforms/android/androidjnimenu.h b/src/plugins/platforms/android/androidjnimenu.h
index 2ae406901a..3ca0fb555f 100644
--- a/src/plugins/platforms/android/androidjnimenu.h
+++ b/src/plugins/platforms/android/androidjnimenu.h
@@ -55,6 +55,7 @@ class QWindow;
namespace QtAndroidMenu
{
// Menu support
+ void openOptionsMenu();
void showContextMenu(QAndroidPlatformMenu *menu, JNIEnv *env = 0);
void hideContextMenu(QAndroidPlatformMenu *menu);
void syncMenu(QAndroidPlatformMenu *menu);
diff --git a/src/plugins/platforms/android/qandroidplatformtheme.cpp b/src/plugins/platforms/android/qandroidplatformtheme.cpp
index 1c9be189c8..b24085f5ea 100644
--- a/src/plugins/platforms/android/qandroidplatformtheme.cpp
+++ b/src/plugins/platforms/android/qandroidplatformtheme.cpp
@@ -39,6 +39,7 @@
**
****************************************************************************/
+#include "androidjnimenu.h"
#include "qandroidplatformtheme.h"
#include "qandroidplatformmenubar.h"
#include "qandroidplatformmenu.h"
@@ -104,6 +105,11 @@ QPlatformMenuItem *QAndroidPlatformTheme::createPlatformMenuItem() const
return new QAndroidPlatformMenuItem;
}
+void QAndroidPlatformTheme::showPlatformMenuBar()
+{
+ QtAndroidMenu::openOptionsMenu();
+}
+
static inline int paletteType(QPlatformTheme::Palette type)
{
switch (type) {
diff --git a/src/plugins/platforms/android/qandroidplatformtheme.h b/src/plugins/platforms/android/qandroidplatformtheme.h
index c37c9986c6..786e7e5650 100644
--- a/src/plugins/platforms/android/qandroidplatformtheme.h
+++ b/src/plugins/platforms/android/qandroidplatformtheme.h
@@ -55,6 +55,7 @@ public:
virtual QPlatformMenuBar *createPlatformMenuBar() const;
virtual QPlatformMenu *createPlatformMenu() const;
virtual QPlatformMenuItem *createPlatformMenuItem() const;
+ virtual void showPlatformMenuBar();
virtual const QPalette *palette(Palette type = SystemPalette) const;
virtual const QFont *font(Font type = SystemFont) const;
virtual QVariant themeHint(ThemeHint hint) const;