GUI: detect when window manager sets Furnace to full screen
issue #2751
This commit is contained in:
parent
857d178860
commit
a9a0b6055e
3 changed files with 36 additions and 4 deletions
|
|
@ -210,6 +210,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
followPattern=!followPattern;
|
||||
break;
|
||||
case GUI_ACTION_FULLSCREEN:
|
||||
if (sysFullScreen) break;
|
||||
fullScreen=!fullScreen;
|
||||
SDL_SetWindowFullscreen(sdlWin,fullScreen?(SDL_WINDOW_FULLSCREEN|SDL_WINDOW_FULLSCREEN_DESKTOP):0);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -3987,7 +3987,7 @@ bool FurnaceGUI::loop() {
|
|||
break;
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (ev.window.event) {
|
||||
case SDL_WINDOWEVENT_RESIZED:
|
||||
case SDL_WINDOWEVENT_RESIZED: {
|
||||
scrW=ev.window.data1;
|
||||
scrH=ev.window.data2;
|
||||
portrait=(scrW<scrH);
|
||||
|
|
@ -3995,7 +3995,32 @@ bool FurnaceGUI::loop() {
|
|||
logD("window resized to %dx%d",scrW,scrH);
|
||||
updateWindow=true;
|
||||
rend->resized(ev);
|
||||
|
||||
// check whether we're in fullscreen
|
||||
int displayOfWindow=SDL_GetWindowDisplayIndex(sdlWin);
|
||||
SDL_Rect displayRect;
|
||||
if (displayOfWindow<0) {
|
||||
logW("couldn't get display of window after resize! (%s)",SDL_GetError());
|
||||
break;
|
||||
}
|
||||
|
||||
if (SDL_GetDisplayBounds(displayOfWindow,&displayRect)!=0) {
|
||||
logW("couldn't get display bounds after resize! (%s)",SDL_GetError());
|
||||
break;
|
||||
}
|
||||
|
||||
if (fullScreen) {
|
||||
sysFullScreen=false;
|
||||
} else {
|
||||
if (scrW==displayRect.w && scrH==displayRect.h) {
|
||||
logD("we may be in fullscreen");
|
||||
sysFullScreen=true;
|
||||
} else {
|
||||
sysFullScreen=false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SDL_WINDOWEVENT_MOVED:
|
||||
scrX=ev.window.data1;
|
||||
scrY=ev.window.data2;
|
||||
|
|
@ -4160,7 +4185,7 @@ bool FurnaceGUI::loop() {
|
|||
// update config x/y/w/h values based on scrMax state
|
||||
if (updateWindow) {
|
||||
logV("updateWindow is true");
|
||||
if (!scrMax && !fullScreen) {
|
||||
if (!scrMax && !fullScreen && !sysFullScreen) {
|
||||
logV("updating scrConf");
|
||||
scrConfX=scrX;
|
||||
scrConfY=scrY;
|
||||
|
|
@ -4829,9 +4854,14 @@ bool FurnaceGUI::loop() {
|
|||
}
|
||||
if (ImGui::BeginMenu(settings.capitalMenuBar?_("Settings"):_("settings"))) {
|
||||
#ifndef IS_MOBILE
|
||||
if (ImGui::MenuItem(_("full screen"),BIND_FOR(GUI_ACTION_FULLSCREEN),fullScreen)) {
|
||||
ImGui::BeginDisabled(sysFullScreen);
|
||||
if (ImGui::MenuItem(_("full screen"),BIND_FOR(GUI_ACTION_FULLSCREEN),fullScreen || sysFullScreen)) {
|
||||
doAction(GUI_ACTION_FULLSCREEN);
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
if (sysFullScreen) {
|
||||
ImGui::SetItemTooltip(_("the system has set Furnace to full screen."));
|
||||
}
|
||||
#endif
|
||||
if (ImGui::MenuItem(_("lock layout"),NULL,lockLayout)) {
|
||||
lockLayout=!lockLayout;
|
||||
|
|
@ -8773,6 +8803,7 @@ FurnaceGUI::FurnaceGUI():
|
|||
displayNew(false),
|
||||
displayPalette(false),
|
||||
fullScreen(false),
|
||||
sysFullScreen(false),
|
||||
preserveChanPos(false),
|
||||
sysDupCloneChannels(true),
|
||||
sysDupEnd(false),
|
||||
|
|
|
|||
|
|
@ -1740,7 +1740,7 @@ class FurnaceGUI {
|
|||
bool vgmExportDirectStream, displayInsTypeList, displayWaveSizeList;
|
||||
bool portrait, injectBackUp, mobileMenuOpen, warnColorPushed;
|
||||
bool wantCaptureKeyboard, oldWantCaptureKeyboard, displayMacroMenu;
|
||||
bool displayNew, displayExport, displayPalette, fullScreen, preserveChanPos, sysDupCloneChannels, sysDupEnd;
|
||||
bool displayNew, displayExport, displayPalette, fullScreen, sysFullScreen, preserveChanPos, sysDupCloneChannels, sysDupEnd;
|
||||
unsigned char noteInputMode;
|
||||
bool notifyWaveChange, notifySampleChange;
|
||||
bool recalcTimestamps;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue