]> git.lizzy.rs Git - minetest.git/commitdiff
Fix Exit to OS button focus in Pause Menu
authorngosang <diegodelasheras@gmail.com>
Tue, 27 Jan 2015 00:17:04 +0000 (01:17 +0100)
committerCraig Robbins <kde.psych@gmail.com>
Sat, 14 Feb 2015 10:58:39 +0000 (20:58 +1000)
src/game.cpp
src/guiFormSpecMenu.cpp
src/guiFormSpecMenu.h

index fe3e838b244854489e4316fd1265ba08638ac69f..ba28aa7897935ee949f67ee560801708f1b88461 100644 (file)
@@ -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;
 }
 
index 20c9ecde77b982ec4e287ee3cf4ee5733dd1f7f3..3f285fa5ec7edf79db6e865a936f854eea27abbb 100644 (file)
@@ -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) {
index 6d6c07453ed8440c30847aca3821fca07b84b35c..48cb5c55399c6068787b23df43179e97508b303c 100644 (file)
@@ -246,13 +246,20 @@ class GUIFormSpecMenu : public GUIModalMenu
                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 @@ class GUIFormSpecMenu : public GUIModalMenu
        IFormSource      *m_form_src;
        TextDest         *m_text_dst;
        unsigned int      m_formspec_version;
+       std::wstring      m_focused_element;
 
        typedef struct {
                bool explicit_size;