else if (argc == 2 && !close_mode && (!isdemo() || argv(1) == "Welcome")) // don't allow this command in demos
{
m_play_click_sound(MENU_SOUND_OPEN);
- m_goto(strcat(filter, argv(1))); // switch to a menu item
+ m_goto(strcat(filter, argv(1)), true); // switch to a menu item
}
else if(argc > 2 && (!isdemo() || argv(1) == "Welcome"))
{
bufstr_add(argsbuf, argv(i), 1);
e.readInputArgs(e, argsbuf);
if (!close_mode)
- m_goto(strcat(filter, s));
+ m_goto(strcat(filter, s), true);
}
if(argsbuf >= 0)
buf_del(argsbuf);
return;
}
- if (argv(0) == "nexposee")
+ switch (argv(0))
{
- m_goto("nexposee");
- return;
- }
-
- if (argv(0) == "servers")
- {
- m_goto("servers");
- return;
- }
-
- if (argv(0) == "profile")
- {
- m_goto("profile");
- return;
- }
-
- if (argv(0) == "skinselect")
- {
- m_goto("skinselector");
- return;
- }
-
- if (argv(0) == "languageselect")
- {
- m_goto("languageselector");
- return;
- }
-
- if (argv(0) == "settings")
- {
- m_goto("settings");
- return;
- }
-
- if (argv(0) == "inputsettings")
- {
- m_goto("inputsettings");
- return;
- }
-
- if (argv(0) == "videosettings")
- {
- m_goto("videosettings");
- return;
+ // unlike menu_cmd directmenu, the menu won't be closed when these menu items will be closed
+ case "nexposee": m_goto("nexposee", false); return;
+ case "servers": m_goto("servers", false); return;
+ case "profile": m_goto("profile", false); return;
+ case "skinselect": m_goto("skinselector", false); return;
+ case "languageselect": m_goto("languageselector", false); return;
+ case "settings": m_goto("settings", false); return;
+ case "inputsettings": m_goto("inputsettings", false); return;
+ case "videosettings": m_goto("videosettings", false); return;
}
if (argv(0) == "dumptree")
void Dialog_close(entity me)
{
+ bool closed = false;
if (me.parent.instanceOfNexposee)
{
ExposeeCloseButton_Click(me, me.parent);
- if(me.hideMenuOnClose)
- {
- me.hideMenuOnClose = false;
- m_hide();
- }
+ closed = true;
}
else if (me.parent.instanceOfModalController)
+ {
DialogCloseButton_Click(me, me);
+ closed = true;
+ }
+
+ if (closed && me.hideMenuOnClose)
+ m_goto(string_null, false);
+ me.hideMenuOnClose = false; // reset it regardless
}
float Dialog_keyDown(entity me, float key, float ascii, float shift)
ATTRIB(Dialog, borderLines, float, 1);
ATTRIB(Dialog, closeButtonImage, string);
- ATTRIB(Dialog, hideMenuOnClose, bool, false);
-
ATTRIB(Dialog, frame, entity);
ENDCLASS(Dialog)
void Dialog_Close(entity button, entity me);
+
+.bool hideMenuOnClose;
if (m_goto_buffer)
{
- m_goto(m_goto_buffer);
+ m_goto(m_goto_buffer, false);
strfree(m_goto_buffer);
}
if (wnd.focused) m_focus_item_chain(wnd, focus);
}
-void m_goto(string itemname)
+void m_goto(string itemname, bool hide_menu_on_close)
{
if (!menuInitialized)
{
if ((e) && (!e.requiresConnection || (gamestatus & (GAME_ISSERVER | GAME_CONNECTED))))
{
- if(!Menu_Active)
- e.hideMenuOnClose = true;
m_hide();
m_activate_window(e);
m_setpointerfocus(e);
m_display();
+ if (hide_menu_on_close)
+ {
+ while(e.parent && !(e.instanceOfDialog && e.isTabRoot))
+ e = e.parent;
+ if (e.instanceOfDialog)
+ e.hideMenuOnClose = true;
+ }
}
}
}