Disable double-click -> ESC translation for main menu

This commit is contained in:
Craig Robbins 2015-03-14 19:55:35 +10:00
parent 0e93eefb8f
commit de6d5ce2cd
3 changed files with 25 additions and 12 deletions

View File

@ -194,7 +194,8 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev,
m_texture_source, m_texture_source,
m_formspecgui, m_formspecgui,
m_buttonhandler, m_buttonhandler,
NULL); NULL,
false);
m_menu->allowClose(false); m_menu->allowClose(false);
m_menu->lockSize(true,v2u32(800,600)); m_menu->lockSize(true,v2u32(800,600));

View File

@ -77,7 +77,7 @@ GUIFormSpecMenu::GUIFormSpecMenu(irr::IrrlichtDevice* dev,
gui::IGUIElement* parent, s32 id, IMenuManager *menumgr, gui::IGUIElement* parent, s32 id, IMenuManager *menumgr,
InventoryManager *invmgr, IGameDef *gamedef, InventoryManager *invmgr, IGameDef *gamedef,
ISimpleTextureSource *tsrc, IFormSource* fsrc, TextDest* tdst, ISimpleTextureSource *tsrc, IFormSource* fsrc, TextDest* tdst,
Client* client) : Client* client, bool remap_dbl_click) :
GUIModalMenu(dev->getGUIEnvironment(), parent, id, menumgr), GUIModalMenu(dev->getGUIEnvironment(), parent, id, menumgr),
m_device(dev), m_device(dev),
m_invmgr(invmgr), m_invmgr(invmgr),
@ -97,7 +97,8 @@ GUIFormSpecMenu::GUIFormSpecMenu(irr::IrrlichtDevice* dev,
m_text_dst(tdst), m_text_dst(tdst),
m_formspec_version(0), m_formspec_version(0),
m_focused_element(L""), m_focused_element(L""),
m_font(NULL) m_font(NULL),
m_remap_dbl_click(remap_dbl_click)
#ifdef __ANDROID__ #ifdef __ANDROID__
,m_JavaDialogFieldName(L"") ,m_JavaDialogFieldName(L"")
#endif #endif
@ -2939,15 +2940,18 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event)
bool GUIFormSpecMenu::DoubleClickDetection(const SEvent event) bool GUIFormSpecMenu::DoubleClickDetection(const SEvent event)
{ {
/* The following code is for capturing double-clicks of the mouse button /* The following code is for capturing double-clicks of the mouse button
* that are *not* in/in a control (i.e. when the mouse if positioned in an * and translating the double-click into an EET_KEY_INPUT_EVENT event
* unused area of the formspec) and translating the double-click into an * -- which closes the form -- under some circumstances.
* EET_KEY_INPUT_EVENT event which closes the form.
* *
* There have been many github issues reporting this as a bug even though it * There have been many github issues reporting this as a bug even though it
* was an intended feature. For this reason the code has been disabled for * was an intended feature. For this reason, remapping the double-click as
* non-Android builds * an ESC must be explicitly set when creating this class via the
* /p remap_dbl_click parameter of the constructor.
*/ */
#ifdef __ANDROID__
if (!m_remap_dbl_click)
return false;
if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) { if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) {
m_doubleclickdetect[0].pos = m_doubleclickdetect[1].pos; m_doubleclickdetect[0].pos = m_doubleclickdetect[1].pos;
m_doubleclickdetect[0].time = m_doubleclickdetect[1].time; m_doubleclickdetect[0].time = m_doubleclickdetect[1].time;
@ -2986,7 +2990,7 @@ bool GUIFormSpecMenu::DoubleClickDetection(const SEvent event)
delete translated; delete translated;
return true; return true;
} }
#endif
return false; return false;
} }

View File

@ -210,8 +210,8 @@ public:
ISimpleTextureSource *tsrc, ISimpleTextureSource *tsrc,
IFormSource* fs_src, IFormSource* fs_src,
TextDest* txt_dst, TextDest* txt_dst,
Client* client Client* client,
); bool remap_dbl_click = true);
~GUIFormSpecMenu(); ~GUIFormSpecMenu();
@ -436,6 +436,14 @@ private:
std::wstring m_JavaDialogFieldName; std::wstring m_JavaDialogFieldName;
#endif #endif
/* If true, remap a double-click (or double-tap) action to ESC. This is so
* that, for example, Android users can double-tap to close a formspec.
*
* This value can (currently) only be set by the class constructor
* and the default value for the setting is true.
*/
bool m_remap_dbl_click;
}; };
class FormspecFormSource: public IFormSource class FormspecFormSource: public IFormSource