aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorngosang <diegodelasheras@gmail.com>2015-01-27 01:17:04 +0100
committerCraig Robbins <kde.psych@gmail.com>2015-02-10 21:23:16 +1000
commitdd2bb950be36c3ae34caacfe62df391612364f8a (patch)
treee4a299e746c2fadae7a84bbd1a462b83be66519c /src
parenta704c04f00bfea4b77550169fa08105c2ee0dfd0 (diff)
downloadminetest-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.cpp2
-rw-r--r--src/guiFormSpecMenu.cpp7
-rw-r--r--src/guiFormSpecMenu.h10
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;