diff options
author | ngosang <diegodelasheras@gmail.com> | 2015-01-27 01:17:04 +0100 |
---|---|---|
committer | Craig Robbins <kde.psych@gmail.com> | 2015-02-10 21:23:16 +1000 |
commit | dd2bb950be36c3ae34caacfe62df391612364f8a (patch) | |
tree | e4a299e746c2fadae7a84bbd1a462b83be66519c /src | |
parent | a704c04f00bfea4b77550169fa08105c2ee0dfd0 (diff) | |
download | minetest-dd2bb950be36c3ae34caacfe62df391612364f8a.tar.gz minetest-dd2bb950be36c3ae34caacfe62df391612364f8a.tar.bz2 minetest-dd2bb950be36c3ae34caacfe62df391612364f8a.zip |
Fix Exit to OS button focus in Pause Menu
Diffstat (limited to 'src')
-rw-r--r-- | src/game.cpp | 2 | ||||
-rw-r--r-- | src/guiFormSpecMenu.cpp | 7 | ||||
-rw-r--r-- | src/guiFormSpecMenu.h | 10 |
3 files changed, 15 insertions, 4 deletions
diff --git a/src/game.cpp b/src/game.cpp index fe3e838b2..ba28aa789 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1157,7 +1157,7 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec, LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_PAUSE_MENU"); create_formspec_menu(cur_formspec, invmgr, gamedef, tsrc, device, fs_src, txt_dst, NULL); - + (*cur_formspec)->setFocus(L"btn_continue"); (*cur_formspec)->doPause = true; } diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index 20c9ecde7..3f285fa5e 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -97,6 +97,7 @@ GUIFormSpecMenu::GUIFormSpecMenu(irr::IrrlichtDevice* dev, m_form_src(fsrc), m_text_dst(tdst), m_formspec_version(0), + m_focused_element(L""), m_font(NULL) #ifdef __ANDROID__ ,m_JavaDialogFieldName(L"") @@ -1757,8 +1758,6 @@ void GUIFormSpecMenu::parseElement(parserData* data, std::string element) <<std::endl; } - - void GUIFormSpecMenu::regenerateGui(v2u32 screensize) { /* useless to regenerate without a screensize */ @@ -1775,6 +1774,10 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) mydata.table_dyndata[tablename] = table->getDynamicData(); } + //set focus + if (!m_focused_element.empty()) + mydata.focused_fieldname = m_focused_element; + //preserve focus gui::IGUIElement *focused_element = Environment->getFocus(); if (focused_element && focused_element->getParent() == this) { diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index ed0e9637c..2074fb780 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -246,13 +246,20 @@ public: m_allowclose = value; } - void lockSize(bool lock,v2u32 basescreensize=v2u32(0,0)) { + void lockSize(bool lock,v2u32 basescreensize=v2u32(0,0)) + { m_lock = lock; m_lockscreensize = basescreensize; } void removeChildren(); void setInitialFocus(); + + void setFocus(std::wstring elementname) + { + m_focused_element = elementname; + } + /* Remove and re-add (or reposition) stuff */ @@ -348,6 +355,7 @@ private: IFormSource *m_form_src; TextDest *m_text_dst; unsigned int m_formspec_version; + std::wstring m_focused_element; typedef struct { bool explicit_size; |