Opened 15 years ago

Closed 15 years ago

Last modified 11 months ago

#1834 closed defect (fixed)

GUI: Starting games in fullscreen doesn't work

Reported by: SF/trinity78 Owned by: cyxx
Priority: blocker Component: Ports
Keywords: Cc:
Game:

Description

ScummVM Daily Build 0.7.0 CVS
Windows 2000 Service Pack 4

If you start ScummVM in window mode and then switch to
fullscreen using the alt+enter button, ScummVM
exits/crashes without an error message when pressing
the "start"-button.
For some strange if you start a game in window mode and
after the game has started switch to fullscreen using
alt+enter, everything works fine.

Ticket imported from: #1074931. Ticket imported from: bugs/1834.

Change History (14)

comment:1 by SF/trinity78, 15 years ago

Sorry typos:
alt + enter button = alt + enter keys
For some strange "reason"

I'm tired. *sigh*

comment:2 by SF/trinity78, 15 years ago

Found the error message:
Assertion failed: _transactionMode == kTransactionNone, file
backends/sdl/graphics.cpp, line 1153

comment:3 by sev-, 15 years ago

Owner: set to sev-
Resolution: outdated
Status: newclosed

comment:4 by sev-, 15 years ago

It was fixed couple days ago. Use latest build.

comment:5 by SF/trinity78, 15 years ago

Hmm ok.
In this case the Windows Daily Snapshot (November 28, 2004,
4:40 pm) seems to be quite old, because I downloaded it one
hour ago.

Couple of days = couple of hours maybe?

comment:6 by sev-, 15 years ago

To reproduce the bug:
1. Run ScummVM without parameters
2. Switch to full screen mode
3. Run any game

comment:7 by sev-, 15 years ago

Resolution: outdated
Status: closednew
Summary: Starting games in fullscreen doesn't workGUI: Starting games in fullscreen doesn't work

comment:8 by fingolfin, 15 years ago

Priority: normalhigh

comment:9 by fingolfin, 15 years ago

This is release criticial, setting priority to 9.

comment:10 by fingolfin, 15 years ago

Priority: highblocker

comment:11 by cyxx, 15 years ago

I add a quick look at it. For the reference, here's the
backtrace :
#0 OSystem_SDL::undrawMouse() (this=<incomplete type>)
at backends/sdl/graphics.cpp:1153
#1 0x00402f7b in OSystem_SDL::setFullscreenMode(bool) (
this=<incomplete type>, enable=false) at
backends/sdl/graphics.cpp:564
#2 0x00402072 in OSystem_SDL::endGFXTransaction()
(this=<incomplete type>)
at backends/sdl/graphics.cpp:78
#3 0x004c52e6 in Queen::QueenEngine::init(GameDetector&) (
this=<incomplete type>, detector=@0x22ff18) at
queen/queen.cpp:333
#4 0x00406b97 in runGame(GameDetector&, OSystem*)
(detector=@0x22ff18,
system=0x1078428) at base/main.cpp:263
#5 0x0040708c in main (argc=1, argv=0x3f2570) at
base/main.cpp:389

Basically, a call to undrawMouse() is made from
setFullscreen() with _transactionMode == kTransactionCommit

As I am not that familiar with the SDL backend nor the
transaction stuff (_sev told me it was semi-implemented), I
can only give 2 suggestions :
- change the assert in undrawMouse to accept the
kTransactionCommit (quite hackish)
- remove the undrawMouse() call in setFullscreen();
afterall, is it really necessary ? setFullscreen() calls
internUpdateScreen() which refresh the whole screen and call
drawMouse()....

comment:12 by fingolfin, 15 years ago

Owner: changed from sev- to cyxx
Resolution: fixed
Status: newclosed

comment:13 by fingolfin, 15 years ago

Actually, the undrawMouse() is needed, because otherwise the
mouse may leave traces in some systems (like in mine, because it
switches between 555 and 565 mode; so when we switch the mode,
the data gets converted, except the data behind the mouse).

So I commited the first suggested solution, I don't think that it
is *that* hackish, actually :-)

comment:14 by digitall, 11 months ago

Component: --Unset--Ports
Note: See TracTickets for help on using tickets.