mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-05-07 18:36:09 +08:00
enhanced mapper and system menu etc
This commit is contained in:
parent
def06b31dd
commit
73423681dd
22
CHANGELOG
22
CHANGELOG
@ -29,10 +29,24 @@
|
||||
options such as increasing/decreasing the TTF font
|
||||
sizes and on-screen text style toggling (including
|
||||
bold, italics, underline and strikeout). (Wengier)
|
||||
- Cleaned up the mapper editor interface to allow
|
||||
more keyboard shortcuts to be added, shown in
|
||||
multiple pages in the mapper, navigable with the
|
||||
"Previous Page" and "Next Page" buttons. (Wengier)
|
||||
- You can now select a host key from the menu (under
|
||||
"Main") including Ctrl+Alt, Ctrl+Shift, Alt+Shift,
|
||||
or use the mapper-defined host key as in previous
|
||||
versions (which default to F11 on Windows and F12
|
||||
otherwise). A config option "hostkey" is added so
|
||||
that you can specify it from config file. (Wengier)
|
||||
- The system menu in Windows SDL1 builds is now also
|
||||
available for Windows SDL2 builds, and menu items
|
||||
"Reset font size", "Increase TTF font size" and
|
||||
"Decrease TTF font size" are added. (Wengier)
|
||||
- Enhanced the mapper editor interface to allow more
|
||||
keyboard shortcuts to be added, shown in multiple
|
||||
pages in the mapper, navigable with the "Previous
|
||||
Page" and "Next Page" buttons. The text in the
|
||||
grids are now longer and clearer too. The default
|
||||
shortcuts for a few items are changed to use the
|
||||
Host key style (e.g. Host+S and Host+L for saving
|
||||
and loading states respectively). (Wengier)
|
||||
- Added menu item "List network interfaces" under
|
||||
"Help" menu to list network interfaces in the host
|
||||
system for the NE2000 feature. (Wengier)
|
||||
|
@ -10,7 +10,7 @@
|
||||
<category>Emulation</category>
|
||||
</categories>
|
||||
<releases>
|
||||
<release version="@PACKAGE_VERSION@" date="2020-11-23"/>
|
||||
<release version="@PACKAGE_VERSION@" date="2020-11-25"/>
|
||||
</releases>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
|
@ -168,6 +168,8 @@ logfile =
|
||||
# If set to autofile, DOSBox-X will warn if there are open file handles or a guest system is currently running.
|
||||
# Possible values: true, false, 1, 0, auto, autofile.
|
||||
# show advanced options: If set, the Configuration Tool will display all config options (including advanced ones) by default.
|
||||
# hostkey: Select a DOSBox-X host key, or use the mapper-defined host key (default: F11 on Windows and F12 otherwise).
|
||||
# Possible values: ctrlalt, ctrlshift, altshift, mapper.
|
||||
# mapper send key: Select the key the mapper SendKey function will send.
|
||||
# Possible values: winlogo, winmenu, alttab, ctrlesc, ctrlbreak, ctrlaltdel.
|
||||
#DOSBOX-X-ADV:# keyboard hook: Use keyboard hook (currently only on Windows) to catch special keys and synchronize the keyboard LEDs with the host.
|
||||
@ -346,6 +348,7 @@ startbanner = true
|
||||
#DOSBOX-X-ADV:dpi aware = auto
|
||||
quit warning = auto
|
||||
show advanced options = false
|
||||
hostkey = mapper
|
||||
mapper send key = ctrlaltdel
|
||||
#DOSBOX-X-ADV:keyboard hook = false
|
||||
#DOSBOX-X-ADV:weitek = false
|
||||
|
@ -83,6 +83,8 @@ logfile =
|
||||
# If set to autofile, DOSBox-X will warn if there are open file handles or a guest system is currently running.
|
||||
# Possible values: true, false, 1, 0, auto, autofile.
|
||||
# show advanced options: If set, the Configuration Tool will display all config options (including advanced ones) by default.
|
||||
# hostkey: Select a DOSBox-X host key, or use the mapper-defined host key (default: F11 on Windows and F12 otherwise).
|
||||
# Possible values: ctrlalt, ctrlshift, altshift, mapper.
|
||||
# mapper send key: Select the key the mapper SendKey function will send.
|
||||
# Possible values: winlogo, winmenu, alttab, ctrlesc, ctrlbreak, ctrlaltdel.
|
||||
# machine: The type of machine DOSBox-X tries to emulate.
|
||||
@ -107,6 +109,7 @@ fastbioslogo = false
|
||||
startbanner = true
|
||||
quit warning = auto
|
||||
show advanced options = false
|
||||
hostkey = mapper
|
||||
mapper send key = ctrlaltdel
|
||||
machine = svga_s3
|
||||
captures = capture
|
||||
|
@ -168,6 +168,8 @@ fileio = false
|
||||
# If set to autofile, DOSBox-X will warn if there are open file handles or a guest system is currently running.
|
||||
# Possible values: true, false, 1, 0, auto, autofile.
|
||||
# show advanced options: If set, the Configuration Tool will display all config options (including advanced ones) by default.
|
||||
# hostkey: Select a DOSBox-X host key, or use the mapper-defined host key (default: F11 on Windows and F12 otherwise).
|
||||
# Possible values: ctrlalt, ctrlshift, altshift, mapper.
|
||||
# mapper send key: Select the key the mapper SendKey function will send.
|
||||
# Possible values: winlogo, winmenu, alttab, ctrlesc, ctrlbreak, ctrlaltdel.
|
||||
# keyboard hook: Use keyboard hook (currently only on Windows) to catch special keys and synchronize the keyboard LEDs with the host.
|
||||
@ -346,6 +348,7 @@ startbanner = true
|
||||
dpi aware = auto
|
||||
quit warning = auto
|
||||
show advanced options = false
|
||||
hostkey = mapper
|
||||
mapper send key = ctrlaltdel
|
||||
keyboard hook = false
|
||||
weitek = false
|
||||
|
@ -1,4 +1,4 @@
|
||||
/*auto-generated*/
|
||||
#define UPDATED_STR "Nov 23, 2020 1:54:58am"
|
||||
#define GIT_COMMIT_HASH "1b77eb2"
|
||||
#define UPDATED_STR "Nov 25, 2020 1:10:55am"
|
||||
#define GIT_COMMIT_HASH "def06b3"
|
||||
#define COPYRIGHT_END_YEAR "2020"
|
||||
|
@ -26,9 +26,9 @@ enum MapKeys {
|
||||
MK_f1,MK_f2,MK_f3,MK_f4,MK_f5,MK_f6,MK_f7,MK_f8,MK_f9,MK_f10,MK_f11,MK_f12,
|
||||
MK_return,MK_kpminus,MK_kpplus,MK_minus,MK_equals,MK_scrolllock,MK_printscreen,MK_pause,MK_home,MK_rightarrow,
|
||||
MK_1, MK_2, MK_3, MK_4,
|
||||
MK_a, MK_c, MK_d, MK_f, MK_m, MK_q, MK_r, MK_s, MK_v, MK_w,
|
||||
MK_escape,MK_delete,MK_uparrow,MK_downarrow,
|
||||
MK_lbracket,MK_rbracket,MK_leftarrow,
|
||||
MK_a, MK_b, MK_c, MK_d, MK_f, MK_i, MK_l, MK_m, MK_o, MK_p, MK_q, MK_r, MK_s, MK_v, MK_w,
|
||||
MK_escape,MK_delete,MK_uparrow,MK_downarrow,MK_leftarrow,
|
||||
MK_lbracket,MK_rbracket,MK_comma,MK_period,
|
||||
|
||||
MK_MAX
|
||||
};
|
||||
|
@ -448,9 +448,9 @@ class DOSBoxMenu {
|
||||
public:
|
||||
HMENU getWinMenu(void) const;
|
||||
bool mainMenuWM_COMMAND(unsigned int id);
|
||||
#endif
|
||||
public:
|
||||
static constexpr unsigned int winMenuMinimumID = 0x1000;
|
||||
#endif
|
||||
#if DOSBOXMENU_TYPE == DOSBOXMENU_NSMENU /* Mac OS X NSMenu / NSMenuItem handle */
|
||||
protected:
|
||||
void* nsMenu = NULL;
|
||||
|
@ -739,6 +739,11 @@
|
||||
# define ID_WIN_SYSMENU_MAPPER 0x0F02
|
||||
# define ID_WIN_SYSMENU_CFG_GUI 0x0F03
|
||||
# define ID_WIN_SYSMENU_PAUSE 0x0F04
|
||||
# define ID_WIN_SYSMENU_RESETSIZE 0x0F05
|
||||
#if defined(USE_TTF)
|
||||
# define ID_WIN_SYSMENU_TTFINCSIZE 0x0F06
|
||||
# define ID_WIN_SYSMENU_TTFDECSIZE 0x0F07
|
||||
#endif
|
||||
#endif
|
||||
#define IDI_MAPPER 0x1000
|
||||
#define IDI_CFG_GUI 0x1001
|
||||
|
@ -1097,13 +1097,13 @@ void DOSBOX_RealInit() {
|
||||
}
|
||||
|
||||
//add support for loading/saving game states
|
||||
MAPPER_AddHandler(SaveGameState, MK_f7, MMOD1,"savestate","Save state", &item);
|
||||
MAPPER_AddHandler(SaveGameState, MK_s, MMODHOST,"savestate","Save state", &item);
|
||||
item->set_text("Save state");
|
||||
MAPPER_AddHandler(LoadGameState, MK_f8, MMOD1,"loadstate","Load state", &item);
|
||||
MAPPER_AddHandler(LoadGameState, MK_l, MMODHOST,"loadstate","Load state", &item);
|
||||
item->set_text("Load state");
|
||||
MAPPER_AddHandler(PreviousSaveSlot, MK_f7, MMOD1|MMOD2,"prevslot","Previous save slot", &item);
|
||||
MAPPER_AddHandler(PreviousSaveSlot, MK_comma, MMODHOST,"prevslot","Previous save slot", &item);
|
||||
item->set_text("Select previous slot");
|
||||
MAPPER_AddHandler(NextSaveSlot, MK_f8, MMOD1|MMOD2,"nextslot","Next save slot", &item);
|
||||
MAPPER_AddHandler(NextSaveSlot, MK_period, MMODHOST,"nextslot","Next save slot", &item);
|
||||
item->set_text("Select next slot");
|
||||
|
||||
Section_prop *section = static_cast<Section_prop *>(control->GetSection("dosbox"));
|
||||
@ -1328,6 +1328,9 @@ void DOSBOX_SetupConfigSections(void) {
|
||||
const char* aspectmodes[] = { "false", "true", "0", "1", "yes", "no", "nearest", "bilinear", 0};
|
||||
const char *vga_ac_mapping_settings[] = { "", "auto", "4x4", "4low", "first16", 0 };
|
||||
|
||||
const char* hostkeys[] = {
|
||||
"ctrlalt", "ctrlshift", "altshift", "mapper", 0 };
|
||||
|
||||
const char* sendkeys[] = {
|
||||
"winlogo", "winmenu", "alttab", "ctrlesc", "ctrlbreak", "ctrlaltdel", 0 };
|
||||
|
||||
@ -1428,6 +1431,11 @@ void DOSBOX_SetupConfigSections(void) {
|
||||
Pbool->Set_help("If set, the Configuration Tool will display all config options (including advanced ones) by default.");
|
||||
Pbool->SetBasic(true);
|
||||
|
||||
Pstring = secprop->Add_string("hostkey", Property::Changeable::Always, "mapper");
|
||||
Pstring->Set_help("Select a DOSBox-X host key, or use the mapper-defined host key (default: F11 on Windows and F12 otherwise).");
|
||||
Pstring->Set_values(hostkeys);
|
||||
Pstring->SetBasic(true);
|
||||
|
||||
Pstring = secprop->Add_string("mapper send key", Property::Changeable::Always, "ctrlaltdel");
|
||||
Pstring->Set_help("Select the key the mapper SendKey function will send.");
|
||||
Pstring->Set_values(sendkeys);
|
||||
|
314
src/gui/menu.cpp
314
src/gui/menu.cpp
@ -87,6 +87,7 @@ void GUI_ResetResize(bool pressed
|
||||
|
||||
MENU_Block menu;
|
||||
|
||||
int ttfpos=-1;
|
||||
unsigned int hdd_defsize=16000;
|
||||
char hdd_size[20]="";
|
||||
|
||||
@ -115,6 +116,7 @@ static const char *def_menu_main[] =
|
||||
"mapper_mapper",
|
||||
"--",
|
||||
"MainSendKey",
|
||||
"MainHostKey",
|
||||
#if defined(WIN32) || defined(C_SDL2) || defined(LINUX) && C_X11
|
||||
"SharedClipboard",
|
||||
#endif
|
||||
@ -161,6 +163,17 @@ static const char *def_menu_main_sendkey[] =
|
||||
NULL
|
||||
};
|
||||
|
||||
/* main -> host key menu ("MenuHostKey") */
|
||||
static const char *def_menu_main_hostkey[] =
|
||||
{
|
||||
"hostkey_ctrlalt",
|
||||
"hostkey_ctrlshift",
|
||||
"hostkey_altshift",
|
||||
"--",
|
||||
"hostkey_mapper",
|
||||
NULL
|
||||
};
|
||||
|
||||
/* main -> mouse wheel menu ("WheelToArrows") */
|
||||
static const char *def_menu_main_wheelarrow[] =
|
||||
{
|
||||
@ -723,6 +736,7 @@ static const char *def_menu_help[] =
|
||||
NULL
|
||||
};
|
||||
|
||||
void DOSBox_SetSysMenu(void);
|
||||
bool DOSBox_isMenuVisible(void) {
|
||||
return menu.toggle;
|
||||
}
|
||||
@ -1362,6 +1376,9 @@ void ConstructMenu(void) {
|
||||
/* main sendkey menu */
|
||||
ConstructSubMenu(mainMenu.get_item("MainSendKey").get_master_id(), def_menu_main_sendkey);
|
||||
|
||||
/* main hostkey menu */
|
||||
ConstructSubMenu(mainMenu.get_item("MainHostKey").get_master_id(), def_menu_main_hostkey);
|
||||
|
||||
/* main mouse wheel movements menu */
|
||||
ConstructSubMenu(mainMenu.get_item("WheelToArrow").get_master_id(), def_menu_main_wheelarrow);
|
||||
|
||||
@ -1628,10 +1645,8 @@ void DOSBox_SetMenu(void) {
|
||||
if(menu.startup) {
|
||||
RENDER_CallBack( GFX_CallBackReset );
|
||||
}
|
||||
|
||||
void DOSBox_SetSysMenu(void);
|
||||
DOSBox_SetSysMenu();
|
||||
#endif
|
||||
DOSBox_SetSysMenu();
|
||||
}
|
||||
|
||||
void DOSBox_NoMenu(void) {
|
||||
@ -1654,10 +1669,8 @@ void DOSBox_NoMenu(void) {
|
||||
SDL1_hax_SetMenu(NULL);
|
||||
mainMenu.get_item("mapper_togmenu").check(!menu.toggle).refresh_item(mainMenu);
|
||||
RENDER_CallBack( GFX_CallBackReset );
|
||||
|
||||
void DOSBox_SetSysMenu(void);
|
||||
DOSBox_SetSysMenu();
|
||||
#endif
|
||||
DOSBox_SetSysMenu();
|
||||
}
|
||||
|
||||
void ToggleMenu(bool pressed) {
|
||||
@ -1680,7 +1693,6 @@ void ToggleMenu(bool pressed) {
|
||||
DOSBox_NoMenu();
|
||||
}
|
||||
|
||||
void DOSBox_SetSysMenu(void);
|
||||
DOSBox_SetSysMenu();
|
||||
}
|
||||
|
||||
@ -1721,6 +1733,181 @@ HWND GetSurfaceHWND(void) {
|
||||
# endif
|
||||
#endif
|
||||
|
||||
void MSG_WM_COMMAND_handle(SDL_SysWMmsg &Message) {
|
||||
#if defined(WIN32) && !defined(HX_DOS)
|
||||
bool GFX_GetPreventFullscreen(void);
|
||||
bool MAPPER_IsRunning(void);
|
||||
bool GUI_IsRunning(void);
|
||||
|
||||
#if defined(C_SDL2)
|
||||
if (Message.msg.win.msg != WM_COMMAND) return;
|
||||
#else
|
||||
if (Message.msg != WM_COMMAND) return;
|
||||
#endif
|
||||
|
||||
WPARAM wParam;
|
||||
#if defined(C_SDL2)
|
||||
wParam=Message.msg.win.wParam;
|
||||
#else
|
||||
wParam=Message.wParam;
|
||||
#endif
|
||||
if (!MAPPER_IsRunning() && !GUI_IsRunning()) {
|
||||
if (LOWORD(wParam) == ID_WIN_SYSMENU_MAPPER) {
|
||||
extern void MAPPER_Run(bool pressed);
|
||||
MAPPER_Run(false);
|
||||
}
|
||||
if (LOWORD(wParam) == ID_WIN_SYSMENU_CFG_GUI) {
|
||||
extern void GUI_Run(bool pressed);
|
||||
GUI_Run(false);
|
||||
}
|
||||
if (LOWORD(wParam) == ID_WIN_SYSMENU_PAUSE) {
|
||||
extern void PauseDOSBox(bool pressed);
|
||||
PauseDOSBox(true);
|
||||
}
|
||||
if (LOWORD(wParam) == ID_WIN_SYSMENU_RESETSIZE) {
|
||||
extern void resetFontSize();
|
||||
resetFontSize();
|
||||
}
|
||||
#if defined(USE_TTF)
|
||||
if (LOWORD(wParam) == ID_WIN_SYSMENU_TTFINCSIZE) {
|
||||
extern void increaseFontSize();
|
||||
increaseFontSize();
|
||||
}
|
||||
if (LOWORD(wParam) == ID_WIN_SYSMENU_TTFDECSIZE) {
|
||||
extern void decreaseFontSize();
|
||||
decreaseFontSize();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
std::string fullScreenString = std::string("desktop.fullscreen");
|
||||
if (!menu.gui || GetSetSDLValue(1, fullScreenString, 0)) return;
|
||||
if (!GetMenu(GetHWND())) return;
|
||||
#if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU
|
||||
if (mainMenu.mainMenuWM_COMMAND((unsigned int)LOWORD(wParam))) return;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void DOSBox_SetSysMenu(void) {
|
||||
#if defined(WIN32) && !defined(HX_DOS)
|
||||
MENUITEMINFO mii;
|
||||
HMENU sysmenu;
|
||||
|
||||
sysmenu = GetSystemMenu(GetHWND(), TRUE); // revert, so we can reapply menu items
|
||||
sysmenu = GetSystemMenu(GetHWND(), FALSE);
|
||||
if (sysmenu == NULL) return;
|
||||
|
||||
AppendMenu(sysmenu, MF_SEPARATOR, -1, "");
|
||||
|
||||
#if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU
|
||||
{
|
||||
const char *msg = "Show &menu bar";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = (menu.toggle ? MFS_CHECKED : 0) | (GFX_GetPreventFullscreen() ? MFS_DISABLED : MFS_ENABLED);
|
||||
mii.wID = ID_WIN_SYSMENU_TOGGLEMENU;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg)+1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
#endif
|
||||
|
||||
{
|
||||
const char *msg = "&Pause";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = MFS_ENABLED;
|
||||
mii.wID = ID_WIN_SYSMENU_PAUSE;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg) + 1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
|
||||
AppendMenu(sysmenu, MF_SEPARATOR, -1, "");
|
||||
|
||||
{
|
||||
const char *msg = "Reset window size";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = MFS_ENABLED;
|
||||
mii.wID = ID_WIN_SYSMENU_RESETSIZE;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg)+1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
|
||||
#if defined(USE_TTF)
|
||||
bool TTF_using(void);
|
||||
ttfpos = GetMenuItemCount(sysmenu);
|
||||
{
|
||||
const char *msg = "Increase TTF font size";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = TTF_using() ? MFS_ENABLED : MFS_DISABLED;
|
||||
mii.wID = ID_WIN_SYSMENU_TTFINCSIZE;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg)+1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
|
||||
{
|
||||
const char *msg = "Decrease TTF font size";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = TTF_using() ? MFS_ENABLED : MFS_DISABLED;
|
||||
mii.wID = ID_WIN_SYSMENU_TTFDECSIZE;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg)+1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
#endif
|
||||
|
||||
AppendMenu(sysmenu, MF_SEPARATOR, -1, "");
|
||||
|
||||
{
|
||||
const char *msg = "Configuration &Tool";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = MFS_ENABLED;
|
||||
mii.wID = ID_WIN_SYSMENU_CFG_GUI;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg) + 1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
|
||||
{
|
||||
const char *msg = "Mapper &Editor";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = MFS_ENABLED;
|
||||
mii.wID = ID_WIN_SYSMENU_MAPPER;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg) + 1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#if defined(WIN32) && !defined(C_SDL2) && !defined(HX_DOS)
|
||||
#include <shlobj.h>
|
||||
|
||||
@ -1850,79 +2037,6 @@ void Mount_Img(char drive, std::string realpath) {
|
||||
(void)drive;
|
||||
}
|
||||
|
||||
void DOSBox_SetSysMenu(void) {
|
||||
#if !defined(HX_DOS)
|
||||
MENUITEMINFO mii;
|
||||
HMENU sysmenu;
|
||||
|
||||
sysmenu = GetSystemMenu(GetHWND(), TRUE); // revert, so we can reapply menu items
|
||||
sysmenu = GetSystemMenu(GetHWND(), FALSE);
|
||||
if (sysmenu == NULL) return;
|
||||
|
||||
AppendMenu(sysmenu, MF_SEPARATOR, -1, "");
|
||||
|
||||
{
|
||||
const char *msg = "Show menu &bar";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = (menu.toggle ? MFS_CHECKED : 0) | (GFX_GetPreventFullscreen() ? MFS_DISABLED : MFS_ENABLED);
|
||||
mii.wID = ID_WIN_SYSMENU_TOGGLEMENU;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg)+1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
|
||||
AppendMenu(sysmenu, MF_SEPARATOR, -1, "");
|
||||
|
||||
{
|
||||
const char *msg = "&Pause";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = MFS_ENABLED;
|
||||
mii.wID = ID_WIN_SYSMENU_PAUSE;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg) + 1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
|
||||
AppendMenu(sysmenu, MF_SEPARATOR, -1, "");
|
||||
|
||||
{
|
||||
const char *msg = "Show &mapper interface";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = MFS_ENABLED;
|
||||
mii.wID = ID_WIN_SYSMENU_MAPPER;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg) + 1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
|
||||
{
|
||||
const char *msg = "Show configuration &GUI";
|
||||
|
||||
memset(&mii, 0, sizeof(mii));
|
||||
mii.cbSize = sizeof(mii);
|
||||
mii.fMask = MIIM_ID | MIIM_STRING | MIIM_STATE;
|
||||
mii.fState = MFS_ENABLED;
|
||||
mii.wID = ID_WIN_SYSMENU_CFG_GUI;
|
||||
mii.dwTypeData = (LPTSTR)(msg);
|
||||
mii.cch = (UINT)(strlen(msg) + 1);
|
||||
|
||||
InsertMenuItem(sysmenu, GetMenuItemCount(sysmenu), TRUE, &mii);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void DOSBox_CheckOS(int &id, int &major, int &minor) {
|
||||
OSVERSIONINFO osi;
|
||||
ZeroMemory(&osi, sizeof(OSVERSIONINFO));
|
||||
@ -1962,12 +2076,12 @@ void DOSBox_RefreshMenu(void) {
|
||||
DrawMenuBar(GetHWND());
|
||||
return;
|
||||
}
|
||||
DOSBox_SetSysMenu();
|
||||
if(menu.toggle)
|
||||
DOSBox_SetMenu();
|
||||
else
|
||||
DOSBox_NoMenu();
|
||||
#endif
|
||||
DOSBox_SetSysMenu();
|
||||
}
|
||||
|
||||
void DOSBox_RefreshMenu2(void) {
|
||||
@ -1993,10 +2107,8 @@ void DOSBox_RefreshMenu2(void) {
|
||||
NonUserResizeCounter=1;
|
||||
SDL1_hax_SetMenu(NULL);
|
||||
}
|
||||
|
||||
void DOSBox_SetSysMenu(void);
|
||||
DOSBox_SetSysMenu();
|
||||
#endif
|
||||
DOSBox_SetSysMenu();
|
||||
}
|
||||
|
||||
void MENU_Check_Drive(HMENU handle, int cdrom, int floppy, int local, int image, int automount, int umount, char drive) {
|
||||
@ -2033,40 +2145,6 @@ void reflectmenu_INITMENU_cb() {
|
||||
the menus before the menu is displayed. */
|
||||
Reflect_Menu();
|
||||
}
|
||||
|
||||
void MSG_WM_COMMAND_handle(SDL_SysWMmsg &Message) {
|
||||
bool GFX_GetPreventFullscreen(void);
|
||||
|
||||
if (Message.msg != WM_COMMAND) return;
|
||||
#if defined(WIN32) && !defined(HX_DOS)
|
||||
bool MAPPER_IsRunning(void);
|
||||
bool GUI_IsRunning(void);
|
||||
|
||||
if (!MAPPER_IsRunning() && !GUI_IsRunning()) {
|
||||
if (LOWORD(Message.wParam) == ID_WIN_SYSMENU_MAPPER) {
|
||||
extern void MAPPER_Run(bool pressed);
|
||||
MAPPER_Run(false);
|
||||
}
|
||||
if (LOWORD(Message.wParam) == ID_WIN_SYSMENU_CFG_GUI) {
|
||||
extern void GUI_Run(bool pressed);
|
||||
GUI_Run(false);
|
||||
}
|
||||
if (LOWORD(Message.wParam) == ID_WIN_SYSMENU_PAUSE) {
|
||||
extern void PauseDOSBox(bool pressed);
|
||||
PauseDOSBox(true);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
std::string fullScreenString = std::string("desktop.fullscreen");
|
||||
if (!menu.gui || GetSetSDLValue(1, fullScreenString, 0)) return;
|
||||
if (!GetMenu(GetHWND())) return;
|
||||
#if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU
|
||||
if (mainMenu.mainMenuWM_COMMAND((unsigned int)LOWORD(Message.wParam))) return;
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
void DOSBox_SetSysMenu(void) {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW
|
||||
|
@ -99,6 +99,7 @@ int shortcutid = -1;
|
||||
void GFX_GetSizeAndPos(int &x,int &y,int &width, int &height, bool &fullscreen);
|
||||
|
||||
#if defined(WIN32) && !defined(HX_DOS)
|
||||
void DOSBox_SetSysMenu(void);
|
||||
void WindowsTaskbarUpdatePreviewRegion(void);
|
||||
void WindowsTaskbarResetPreviewRegion(void);
|
||||
#endif
|
||||
@ -480,6 +481,7 @@ static void UI_Shutdown(GUI::ScreenSDL *screen) {
|
||||
#endif
|
||||
|
||||
#if defined(WIN32) && !defined(HX_DOS)
|
||||
DOSBox_SetSysMenu();
|
||||
WindowsTaskbarUpdatePreviewRegion();
|
||||
#endif
|
||||
|
||||
|
@ -45,6 +45,7 @@
|
||||
#include "menu.h"
|
||||
|
||||
#include "SDL_syswm.h"
|
||||
#include "sdlmain.h"
|
||||
|
||||
#if C_EMSCRIPTEN
|
||||
# include <emscripten.h>
|
||||
@ -162,7 +163,8 @@ struct KeyBlock {
|
||||
static DOSBoxMenu mapperMenu;
|
||||
#endif
|
||||
|
||||
extern uint8_t int10_font_14[256 * 14];
|
||||
extern unsigned int hostkeyalt;
|
||||
extern uint8_t int10_font_14[256 * 14];
|
||||
|
||||
std::map<std::string,std::string> pending_string_binds;
|
||||
|
||||
@ -2068,7 +2070,13 @@ void CBindGroup::ActivateBindList(CBindList * list,Bits value,bool ev_trigger) {
|
||||
}
|
||||
}
|
||||
for (it=list->begin();it!=list->end();++it) {
|
||||
if (validmod==(*it)->mods) (*it)->ActivateBind(value,ev_trigger);
|
||||
if ((*it)->mods==MMODHOST) {
|
||||
if ((!hostkeyalt&&validmod==(*it)->mods)||(hostkeyalt==1&&(sdl.lctrlstate==SDL_KEYDOWN||sdl.rctrlstate==SDL_KEYDOWN)&&(sdl.laltstate==SDL_KEYDOWN||sdl.raltstate==SDL_KEYDOWN))||(hostkeyalt==2&&(sdl.lctrlstate==SDL_KEYDOWN||sdl.rctrlstate==SDL_KEYDOWN)&&(sdl.lshiftstate==SDL_KEYDOWN||sdl.rshiftstate==SDL_KEYDOWN))||(hostkeyalt==3&&(sdl.laltstate==SDL_KEYDOWN||sdl.raltstate==SDL_KEYDOWN)&&(sdl.lshiftstate==SDL_KEYDOWN||sdl.rshiftstate==SDL_KEYDOWN))) {
|
||||
(*it)->flags|=BFLG_Hold;
|
||||
(*it)->ActivateBind(value,ev_trigger);
|
||||
}
|
||||
} else if (validmod==(*it)->mods)
|
||||
(*it)->ActivateBind(value,ev_trigger);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2647,7 +2655,7 @@ std::string CBind::GetModifierText(void) {
|
||||
if ((mods & ((Bitu)1u << (m - 1u))) && mod_event[m] != NULL) {
|
||||
t = mod_event[m]->GetBindMenuText();
|
||||
if (!r.empty()) r += "+";
|
||||
r += t;
|
||||
r += m==4?(hostkeyalt==1?"Ctrl+Alt":(hostkeyalt==2?"Ctrl+Shift":(hostkeyalt==3?"Alt+Shift":t))):t;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2741,6 +2749,12 @@ public:
|
||||
case MK_home:
|
||||
key=SDL_SCANCODE_HOME;
|
||||
break;
|
||||
case MK_comma:
|
||||
key=SDL_SCANCODE_COMMA;
|
||||
break;
|
||||
case MK_period:
|
||||
key=SDL_SCANCODE_PERIOD;
|
||||
break;
|
||||
case MK_1:
|
||||
key=SDL_SCANCODE_1;
|
||||
break;
|
||||
@ -2756,6 +2770,9 @@ public:
|
||||
case MK_a:
|
||||
key=SDL_SCANCODE_A;
|
||||
break;
|
||||
case MK_b:
|
||||
key=SDL_SCANCODE_B;
|
||||
break;
|
||||
case MK_c:
|
||||
key=SDL_SCANCODE_C;
|
||||
break;
|
||||
@ -2765,9 +2782,21 @@ public:
|
||||
case MK_f:
|
||||
key=SDL_SCANCODE_F;
|
||||
break;
|
||||
case MK_i:
|
||||
key=SDL_SCANCODE_I;
|
||||
break;
|
||||
case MK_l:
|
||||
key=SDL_SCANCODE_L;
|
||||
break;
|
||||
case MK_m:
|
||||
key=SDL_SCANCODE_M;
|
||||
break;
|
||||
case MK_o:
|
||||
key=SDL_SCANCODE_O;
|
||||
break;
|
||||
case MK_p:
|
||||
key=SDL_SCANCODE_P;
|
||||
break;
|
||||
case MK_q:
|
||||
key=SDL_SCANCODE_Q;
|
||||
break;
|
||||
@ -2861,9 +2890,15 @@ public:
|
||||
key=SDLK_PRINT;
|
||||
#endif
|
||||
break;
|
||||
case MK_home:
|
||||
case MK_home:
|
||||
key=SDLK_HOME;
|
||||
break;
|
||||
case MK_comma:
|
||||
key=SDLK_COMMA;
|
||||
break;
|
||||
case MK_period:
|
||||
key=SDLK_PERIOD;
|
||||
break;
|
||||
case MK_1:
|
||||
key=SDLK_1;
|
||||
break;
|
||||
@ -2879,6 +2914,9 @@ public:
|
||||
case MK_a:
|
||||
key=SDLK_a;
|
||||
break;
|
||||
case MK_b:
|
||||
key=SDLK_b;
|
||||
break;
|
||||
case MK_c:
|
||||
key=SDLK_c;
|
||||
break;
|
||||
@ -2888,9 +2926,21 @@ public:
|
||||
case MK_f:
|
||||
key=SDLK_f;
|
||||
break;
|
||||
case MK_i:
|
||||
key=SDLK_i;
|
||||
break;
|
||||
case MK_l:
|
||||
key=SDLK_l;
|
||||
break;
|
||||
case MK_m:
|
||||
key=SDLK_m;
|
||||
break;
|
||||
case MK_o:
|
||||
key=SDLK_o;
|
||||
break;
|
||||
case MK_p:
|
||||
key=SDLK_p;
|
||||
break;
|
||||
case MK_q:
|
||||
key=SDLK_q;
|
||||
break;
|
||||
@ -4274,6 +4324,12 @@ void MAPPER_Run(bool pressed) {
|
||||
PIC_AddEvent(MAPPER_RunEvent,0.0001f); //In case mapper deletes the key object that ran it
|
||||
}
|
||||
|
||||
void update_all_shortcuts() {
|
||||
for (auto &ev : events) {
|
||||
if (ev != NULL) ev->update_menu_shortcut();
|
||||
}
|
||||
}
|
||||
|
||||
void MAPPER_RunInternal() {
|
||||
MAPPER_ReleaseAllKeys();
|
||||
|
||||
@ -4377,6 +4433,10 @@ void MAPPER_RunInternal() {
|
||||
SDL_FreePalette(sdl2_map_pal_ptr);
|
||||
GFX_SetResizeable(true);
|
||||
#endif
|
||||
#if defined(USE_TTF)
|
||||
void resetFontSize();
|
||||
if (ttf.inUse) resetFontSize();
|
||||
#endif
|
||||
#if defined (REDUCE_JOYSTICK_POLLING)
|
||||
SDL_JoystickEventState(SDL_DISABLE);
|
||||
#endif
|
||||
@ -4414,9 +4474,7 @@ void MAPPER_RunInternal() {
|
||||
GFX_LosingFocus();
|
||||
|
||||
/* and then the menu items need to be updated */
|
||||
for (auto &ev : events) {
|
||||
if (ev != NULL) ev->update_menu_shortcut();
|
||||
}
|
||||
update_all_shortcuts();
|
||||
|
||||
#if DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW
|
||||
mainMenu.rebuild();
|
||||
@ -4523,9 +4581,7 @@ void MAPPER_Init(void) {
|
||||
}
|
||||
|
||||
/* and then the menu items need to be updated */
|
||||
for (auto &ev : events) {
|
||||
if (ev != NULL) ev->update_menu_shortcut();
|
||||
}
|
||||
update_all_shortcuts();
|
||||
}
|
||||
|
||||
void ReloadMapper(Section_prop *section, bool init) {
|
||||
|
@ -238,17 +238,18 @@ void osx_init_touchbar(void);
|
||||
|
||||
bool TTF_using(void);
|
||||
void ShutDownMemHandles(Section * sec);
|
||||
void resetFontSize();
|
||||
static void decreaseFontSize();
|
||||
void resetFontSize(), decreaseFontSize();
|
||||
extern SHELL_Cmd cmd_list[];
|
||||
|
||||
SDL_Block sdl;
|
||||
Bitu frames = 0;
|
||||
unsigned int page=0;
|
||||
unsigned int hostkeyalt=0;
|
||||
unsigned int sendkeymap=0;
|
||||
ScreenSizeInfo screen_size_info;
|
||||
|
||||
#if defined(USE_TTF)
|
||||
extern int ttfpos;
|
||||
Render_ttf ttf;
|
||||
bool char512 = true;
|
||||
bool showbold = true;
|
||||
@ -1490,19 +1491,28 @@ void PauseDOSBoxLoop(Bitu /*unused*/) {
|
||||
SDL_WaitEvent(&event); // since we're not polling, cpu usage drops to 0.
|
||||
#endif
|
||||
|
||||
#ifdef __WIN32__
|
||||
#if DOSBOXMENU_TYPE == DOSBOXMENU_HMENU
|
||||
if (event.type==SDL_SYSWMEVENT && event.syswm.msg->msg == WM_COMMAND && (LOWORD(event.syswm.msg->wParam) == ID_WIN_SYSMENU_PAUSE || LOWORD(event.syswm.msg->wParam) == (mainMenu.get_item("mapper_pause").get_master_id()+DOSBoxMenu::winMenuMinimumID))) {
|
||||
#if defined(WIN32) && !defined(HX_DOS)
|
||||
UINT msg=0;
|
||||
WPARAM wparam;
|
||||
if (event.type==SDL_SYSWMEVENT) {
|
||||
#if defined(C_SDL2)
|
||||
msg=event.syswm.msg->msg.win.msg;
|
||||
wparam=event.syswm.msg->msg.win.wParam;
|
||||
#else
|
||||
msg=event.syswm.msg->msg;
|
||||
wparam=event.syswm.msg->wParam;
|
||||
#endif
|
||||
}
|
||||
if (event.type==SDL_SYSWMEVENT && msg == WM_COMMAND && (LOWORD(wparam) == ID_WIN_SYSMENU_PAUSE || LOWORD(wparam) == (mainMenu.get_item("mapper_pause").get_master_id()+DOSBoxMenu::winMenuMinimumID))) {
|
||||
paused=false;
|
||||
GFX_SetTitle(-1,-1,-1,false);
|
||||
break;
|
||||
}
|
||||
if (event.type == SDL_SYSWMEVENT && event.syswm.msg->msg == WM_SYSCOMMAND && LOWORD(event.syswm.msg->wParam) == ID_WIN_SYSMENU_PAUSE) {
|
||||
if (event.type == SDL_SYSWMEVENT && msg == WM_SYSCOMMAND && LOWORD(wparam) == ID_WIN_SYSMENU_PAUSE) {
|
||||
paused = false;
|
||||
GFX_SetTitle(-1, -1, -1, false);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
switch (event.type) {
|
||||
|
||||
@ -1816,12 +1826,15 @@ Bitu GFX_GetBestMode(Bitu flags)
|
||||
void SDL_Prepare(void) {
|
||||
if (menu_compatible) return;
|
||||
|
||||
#if defined(WIN32) && !defined(C_SDL2) && !defined(HX_DOS) // Microsoft Windows specific
|
||||
#if defined(WIN32) && !defined(HX_DOS) // Microsoft Windows specific
|
||||
SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE);
|
||||
#if !defined(C_SDL2)
|
||||
LOG(LOG_MISC,LOG_DEBUG)("Win32: Preparing main window to accept files dragged in from the Windows shell");
|
||||
|
||||
SDL_PumpEvents(); SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE);
|
||||
SDL_PumpEvents();
|
||||
DragAcceptFiles(GetHWND(), TRUE);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void GFX_ForceRedrawScreen(void) {
|
||||
@ -3519,6 +3532,13 @@ void change_output(int output) {
|
||||
resetFontSize();
|
||||
resetreq = true;
|
||||
}
|
||||
#if defined(WIN32) && !defined(HX_DOS)
|
||||
HMENU sysmenu = GetSystemMenu(GetHWND(), TRUE);
|
||||
if (ttfpos>-1 && sysmenu != NULL) {
|
||||
EnableMenuItem(sysmenu, ttfpos, MF_BYPOSITION|(TTF_using()?MF_ENABLED:MF_DISABLED));
|
||||
EnableMenuItem(sysmenu, ttfpos+1, MF_BYPOSITION|(TTF_using()?MF_ENABLED:MF_DISABLED));
|
||||
}
|
||||
#endif
|
||||
mainMenu.get_item("mapper_ttf_incsize").enable(TTF_using()).refresh_item(mainMenu);
|
||||
mainMenu.get_item("mapper_ttf_decsize").enable(TTF_using()).refresh_item(mainMenu);
|
||||
mainMenu.get_item("ttf_showbold").enable(TTF_using()).check(showbold).refresh_item(mainMenu);
|
||||
@ -4581,7 +4601,7 @@ void resetFontSize() {
|
||||
}
|
||||
}
|
||||
|
||||
static void decreaseFontSize() {
|
||||
void decreaseFontSize() {
|
||||
if (ttf.inUse && ttf.pointsize > 10) {
|
||||
GFX_SelectFontByPoints(ttf.pointsize - (ttf.DOSBox ? 2 : 1));
|
||||
GFX_SetSize(720+sdl.clip.x, 400+sdl.clip.y, sdl.draw.flags,sdl.draw.scalex,sdl.draw.scaley,sdl.draw.callback);
|
||||
@ -4594,7 +4614,7 @@ static void decreaseFontSize() {
|
||||
}
|
||||
}
|
||||
|
||||
static void increaseFontSize() {
|
||||
void increaseFontSize() {
|
||||
if (ttf.inUse) { // increase fontsize
|
||||
int maxWidth = sdl.desktop.full.width;
|
||||
int maxHeight = sdl.desktop.full.height;
|
||||
@ -5045,7 +5065,7 @@ static void GUI_StartUp() {
|
||||
MAPPER_AddHandler(ResetSystem, MK_r, MMODHOST, "reset", "Reset DOSBox-X", &item); /* Host+R (Host+CTRL+R acts funny on my Linux system) */
|
||||
item->set_text("Reset virtual machine");
|
||||
|
||||
MAPPER_AddHandler(RebootGuest, MK_s, MMODHOST, "reboot", "Reboot guest system", &item); /* Reboot guest system or integrated DOS */
|
||||
MAPPER_AddHandler(RebootGuest, MK_b, MMODHOST, "reboot", "Reboot guest system", &item); /* Reboot guest system or integrated DOS */
|
||||
item->set_text("Reboot guest system");
|
||||
|
||||
#if !defined(HX_DOS)
|
||||
@ -6440,7 +6460,7 @@ static void HandleTouchscreenFinger(SDL_TouchFingerEvent * finger) {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(WIN32) && !defined(C_SDL2) && !defined(HX_DOS)
|
||||
#if defined(WIN32) && !defined(HX_DOS)
|
||||
void MSG_WM_COMMAND_handle(SDL_SysWMmsg &Message);
|
||||
#endif
|
||||
|
||||
@ -6580,6 +6600,44 @@ void GFX_Events() {
|
||||
|
||||
while (SDL_PollEvent(&event)) {
|
||||
switch (event.type) {
|
||||
#if defined(WIN32) && !defined(HX_DOS)
|
||||
case SDL_SYSWMEVENT:
|
||||
switch( event.syswm.msg->msg.win.msg ) {
|
||||
case WM_COMMAND:
|
||||
MSG_WM_COMMAND_handle(/*&*/(*event.syswm.msg));
|
||||
break;
|
||||
case WM_SYSCOMMAND:
|
||||
switch (event.syswm.msg->msg.win.wParam) {
|
||||
case ID_WIN_SYSMENU_MAPPER:
|
||||
extern void MAPPER_Run(bool pressed);
|
||||
MAPPER_Run(false);
|
||||
break;
|
||||
case ID_WIN_SYSMENU_CFG_GUI:
|
||||
extern void GUI_Run(bool pressed);
|
||||
GUI_Run(false);
|
||||
break;
|
||||
case ID_WIN_SYSMENU_PAUSE:
|
||||
extern void PauseDOSBox(bool pressed);
|
||||
PauseDOSBox(true);
|
||||
break;
|
||||
case ID_WIN_SYSMENU_RESETSIZE:
|
||||
resetFontSize();
|
||||
break;
|
||||
#if defined(USE_TTF)
|
||||
case ID_WIN_SYSMENU_TTFINCSIZE:
|
||||
increaseFontSize();
|
||||
break;
|
||||
case ID_WIN_SYSMENU_TTFDECSIZE:
|
||||
decreaseFontSize();
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (event.window.event) {
|
||||
case SDL_WINDOWEVENT_MOVED:
|
||||
@ -6886,6 +6944,17 @@ void GFX_Events() {
|
||||
extern void PauseDOSBox(bool pressed);
|
||||
PauseDOSBox(true);
|
||||
break;
|
||||
case ID_WIN_SYSMENU_RESETSIZE:
|
||||
resetFontSize();
|
||||
break;
|
||||
#if defined(USE_TTF)
|
||||
case ID_WIN_SYSMENU_TTFINCSIZE:
|
||||
increaseFontSize();
|
||||
break;
|
||||
case ID_WIN_SYSMENU_TTFDECSIZE:
|
||||
decreaseFontSize();
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
default:
|
||||
@ -7019,7 +7088,6 @@ void GFX_Events() {
|
||||
case SDL_VIDEOEXPOSE:
|
||||
if (sdl.draw.callback && !glide.enabled) sdl.draw.callback( GFX_CallBackRedraw );
|
||||
break;
|
||||
#ifdef WIN32
|
||||
case SDL_KEYDOWN:
|
||||
case SDL_KEYUP:
|
||||
// ignore event alt+tab
|
||||
@ -7029,6 +7097,7 @@ void GFX_Events() {
|
||||
if (event.key.keysym.sym==SDLK_RCTRL) sdl.rctrlstate = event.key.type;
|
||||
if (event.key.keysym.sym==SDLK_LSHIFT) sdl.lshiftstate = event.key.type;
|
||||
if (event.key.keysym.sym==SDLK_RSHIFT) sdl.rshiftstate = event.key.type;
|
||||
#if defined(WIN32)
|
||||
if (((event.key.keysym.sym==SDLK_TAB)) &&
|
||||
((sdl.laltstate==SDL_KEYDOWN) || (sdl.raltstate==SDL_KEYDOWN))) { MAPPER_LosingFocus(); break; }
|
||||
// This can happen as well.
|
||||
@ -7037,8 +7106,6 @@ void GFX_Events() {
|
||||
if ((event.key.keysym.sym == SDLK_TAB) && (GetTicks() - sdl.focus_ticks < 2)) break;
|
||||
#endif
|
||||
#if defined (MACOSX)
|
||||
case SDL_KEYDOWN:
|
||||
case SDL_KEYUP:
|
||||
/* On macs CMD-Q is the default key to close an application */
|
||||
if (event.key.keysym.sym == SDLK_q && (event.key.keysym.mod == KMOD_RMETA || event.key.keysym.mod == KMOD_LMETA) ) {
|
||||
KillSwitch(true);
|
||||
@ -10248,6 +10315,24 @@ bool sendkey_preset_menu_callback(DOSBoxMenu * const menu, DOSBoxMenu::item * co
|
||||
return true;
|
||||
}
|
||||
|
||||
void update_all_shortcuts();
|
||||
bool hostkey_preset_menu_callback(DOSBoxMenu * const menu, DOSBoxMenu::item * const menuitem) {
|
||||
(void)menu;//UNUSED
|
||||
if (menuitem->get_name()=="hostkey_ctrlalt") hostkeyalt=1;
|
||||
else if (menuitem->get_name()=="hostkey_ctrlshift") hostkeyalt=2;
|
||||
else if (menuitem->get_name()=="hostkey_altshift") hostkeyalt=3;
|
||||
else hostkeyalt=0;
|
||||
mainMenu.get_item("hostkey_ctrlalt").check(hostkeyalt==1).refresh_item(mainMenu);
|
||||
mainMenu.get_item("hostkey_ctrlshift").check(hostkeyalt==2).refresh_item(mainMenu);
|
||||
mainMenu.get_item("hostkey_altshift").check(hostkeyalt==3).refresh_item(mainMenu);
|
||||
mainMenu.get_item("hostkey_mapper").check(hostkeyalt==0).refresh_item(mainMenu);
|
||||
update_all_shortcuts();
|
||||
#if DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW
|
||||
mainMenu.rebuild();
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
bool help_open_url_callback(DOSBoxMenu * const menu, DOSBoxMenu::item * const menuitem) {
|
||||
(void)menu;//UNUSED
|
||||
std::string url="";
|
||||
@ -11185,6 +11270,10 @@ int main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT {
|
||||
DOSBoxMenu::item &item = mainMenu.alloc_item(DOSBoxMenu::submenu_type_id,"MainSendKey");
|
||||
item.set_text("Send special key");
|
||||
}
|
||||
{
|
||||
DOSBoxMenu::item &item = mainMenu.alloc_item(DOSBoxMenu::submenu_type_id,"MainHostKey");
|
||||
item.set_text("Select host key");
|
||||
}
|
||||
{
|
||||
DOSBoxMenu::item &item = mainMenu.alloc_item(DOSBoxMenu::submenu_type_id,"WheelToArrow");
|
||||
item.set_text("Mouse wheel movements");
|
||||
@ -11841,6 +11930,10 @@ int main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT {
|
||||
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"sendkey_ctrlesc").set_text("Send Ctrl+Esc").set_callback_function(sendkey_preset_menu_callback);
|
||||
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"sendkey_ctrlbreak").set_text("Send Ctrl+Break").set_callback_function(sendkey_preset_menu_callback);
|
||||
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"sendkey_cad").set_text("Send Ctrl+Alt+Del").set_callback_function(sendkey_preset_menu_callback);
|
||||
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"hostkey_ctrlalt").set_text("Ctrl+Alt").set_callback_function(hostkey_preset_menu_callback);
|
||||
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"hostkey_ctrlshift").set_text("Ctrl+Shift").set_callback_function(hostkey_preset_menu_callback);
|
||||
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"hostkey_altshift").set_text("Alt+Shift").set_callback_function(hostkey_preset_menu_callback);
|
||||
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"hostkey_mapper").set_text("Mapper-defined").set_callback_function(hostkey_preset_menu_callback);
|
||||
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"sendkey_mapper_winlogo").set_text("Mapper \"Send special key\": logo key").set_callback_function(sendkey_mapper_menu_callback);
|
||||
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"sendkey_mapper_winmenu").set_text("Mapper \"Send special key\": menu key").set_callback_function(sendkey_mapper_menu_callback);
|
||||
mainMenu.alloc_item(DOSBoxMenu::item_type_id,"sendkey_mapper_alttab").set_text("Mapper \"Send special key\": Alt+Tab").set_callback_function(sendkey_mapper_menu_callback);
|
||||
@ -11873,6 +11966,12 @@ int main(int argc, char* argv[]) SDL_MAIN_NOEXCEPT {
|
||||
mainMenu.get_item("sendkey_mapper_ctrlesc").check(sendkeymap==4).refresh_item(mainMenu);
|
||||
mainMenu.get_item("sendkey_mapper_ctrlbreak").check(sendkeymap==5).refresh_item(mainMenu);
|
||||
mainMenu.get_item("sendkey_mapper_cad").check(!sendkeymap).refresh_item(mainMenu);
|
||||
mainMenu.get_item("hostkey_ctrlalt").check(hostkeyalt==1).refresh_item(mainMenu);
|
||||
mainMenu.get_item("hostkey_ctrlshift").check(hostkeyalt==2).refresh_item(mainMenu);
|
||||
mainMenu.get_item("hostkey_altshift").check(hostkeyalt==3).refresh_item(mainMenu);
|
||||
std::string mapper_keybind = mapper_event_keybind_string("host");
|
||||
if (mapper_keybind.empty()) mapper_keybind = "unbound";
|
||||
mainMenu.get_item("hostkey_mapper").check(hostkeyalt==0).set_text("Mapper-defined: "+mapper_keybind).refresh_item(mainMenu);
|
||||
|
||||
bool MENU_get_swapstereo(void);
|
||||
mainMenu.get_item("mixer_swapstereo").check(MENU_get_swapstereo()).refresh_item(mainMenu);
|
||||
|
@ -314,7 +314,7 @@ bool export_ffmpeg = false;
|
||||
std::string capturedir;
|
||||
extern std::string savefilename;
|
||||
extern bool use_save_file, noremark_save_state, force_load_state;
|
||||
extern unsigned int sendkeymap;
|
||||
extern unsigned int hostkeyalt, sendkeymap;
|
||||
extern const char* RunningProgram;
|
||||
Bitu CaptureState = 0;
|
||||
|
||||
@ -1834,6 +1834,11 @@ void CAPTURE_Init() {
|
||||
mainMenu.get_item(slot).enable(!use_save_file).refresh_item(mainMenu);
|
||||
}
|
||||
}
|
||||
std::string hostkey = section->Get_string("hostkey");
|
||||
if (hostkey=="ctrlalt") hostkeyalt=1;
|
||||
else if (hostkey=="ctrlshift") hostkeyalt=2;
|
||||
else if (hostkey=="altshift") hostkeyalt=3;
|
||||
else hostkeyalt=0;
|
||||
std::string mapsendkey = section->Get_string("mapper send key");
|
||||
if (mapsendkey=="winlogo") sendkeymap=1;
|
||||
else if (mapsendkey=="winmenu") sendkeymap=2;
|
||||
@ -1884,7 +1889,7 @@ void CAPTURE_Init() {
|
||||
|
||||
#if !defined(C_EMSCRIPTEN)
|
||||
// mapper shortcuts for capture
|
||||
MAPPER_AddHandler(CAPTURE_WaveEvent,MK_w,MMOD3|MMODHOST,"recwave","Record audio to WAV", &item);
|
||||
MAPPER_AddHandler(CAPTURE_WaveEvent,MK_w,MMODHOST,"recwave","Record audio to WAV", &item);
|
||||
item->set_text("Record audio to WAV");
|
||||
|
||||
MAPPER_AddHandler(CAPTURE_MTWaveEvent,MK_nothing,0,"recmtwave","Record to M.T. AVI", &item);
|
||||
@ -1896,10 +1901,10 @@ void CAPTURE_Init() {
|
||||
MAPPER_AddHandler(OPL_SaveRawEvent,MK_nothing,0,"caprawopl","Record FM/OPL output",&item);
|
||||
item->set_text("Record FM (OPL) output");
|
||||
#if (C_SSHOT)
|
||||
MAPPER_AddHandler(CAPTURE_ScreenShotEvent,MK_s,MMOD3|MMODHOST,"scrshot","Take screenshot", &item);
|
||||
MAPPER_AddHandler(CAPTURE_ScreenShotEvent,MK_p,MMODHOST,"scrshot","Take screenshot", &item);
|
||||
item->set_text("Take screenshot");
|
||||
|
||||
MAPPER_AddHandler(CAPTURE_VideoEvent,MK_v,MMOD3|MMODHOST,"video","Record video to AVI", &item);
|
||||
MAPPER_AddHandler(CAPTURE_VideoEvent,MK_i,MMODHOST,"video","Record video to AVI", &item);
|
||||
item->set_text("Record video to AVI");
|
||||
#endif
|
||||
#endif
|
||||
|
@ -1619,7 +1619,9 @@ public:
|
||||
}
|
||||
if (!strcasecmp(realnicstring,"list")) {
|
||||
// print list and quit
|
||||
LOG_MSG(("\n"+niclist).c_str());
|
||||
std::istringstream in(("\n"+niclist+"\n").c_str());
|
||||
if (in) for (std::string line; std::getline(in, line); )
|
||||
LOG_MSG(line.c_str());
|
||||
pcap_freealldevs(alldevs);
|
||||
load_success = false;
|
||||
return;
|
||||
|
@ -9164,10 +9164,10 @@ void BIOS_Init() {
|
||||
for (int i=0;i < MAX_ISA_PNP_SYSDEVNODES;i++) ISAPNP_SysDevNodes[i] = NULL;
|
||||
|
||||
/* make sure CD swap and floppy swap mapper events are available */
|
||||
MAPPER_AddHandler(swapInNextDisk,MK_d,MMODHOST|MMOD1,"swapimg","Swap floppy drive",&item); /* Originally "Swap Image" but this version does not swap CDs */
|
||||
MAPPER_AddHandler(swapInNextDisk,MK_o,MMODHOST,"swapimg","Swap floppy drive",&item); /* Originally "Swap Image" but this version does not swap CDs */
|
||||
item->set_text("Swap floppy drive");
|
||||
|
||||
MAPPER_AddHandler(swapInNextCD,MK_c,MMODHOST|MMOD1,"swapcd","Swap CD drive",&item); /* Variant of "Swap Image" for CDs */
|
||||
MAPPER_AddHandler(swapInNextCD,MK_d,MMODHOST,"swapcd","Swap CD drive",&item); /* Variant of "Swap Image" for CDs */
|
||||
item->set_text("Swap CD drive");
|
||||
|
||||
/* NTS: VM_EVENT_BIOS_INIT this callback must be first. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user