Hi, Many thanks for the feedback. Actually I have investigated this by writing printfs in between statements to print out the 'self rect' values, and apparently the statement [normalWindow setFrame:NSMakeRect([normalWindow frame].origin.x, ... modifies this 'self rect' values, for reason I am not sure why, hence the suggested additional statement to undo this. So yes, case 2 seems to make more sense, but it will not be executed in windowed (non-fullscreen) mode.
Many thanks for the code rewrite patch. It seems like a more proper work and I will definitely test this. I will get back to you soon once done. Regards, Imran Yusuff On Sun, Jun 19, 2022 at 5:00 AM Akihiko Odaki <akihiko.od...@gmail.com> wrote: > On 2022/06/19 9:41, Imran Yusuff wrote: > > This applies only on macOS using cocoa UI library. > > > > In zoom-to-fit fullscreen mode, upon graphics mode switch, > > the viewport size is wrong, and the usual consequence > > is only a part of the screen is visible. One have to exit > > and reenter fullscreen mode to fix this. > > > > This is reproducible by setting up a Windows 3.11 system, > > booting into DOS, enable zoom-to-fit, enter fullscreen mode and > > start Windows by 'win'. Then you can see only part of the screen. > > > > This commit fixes this problem, by including one line of code > > which is from the fullscreen mode initialization. > > > > Signed-off-by: Imran Yusuff <imranyus...@gmail.com> > > --- > > ui/cocoa.m | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/ui/cocoa.m b/ui/cocoa.m > > index 84c84e98fc..bd602817cd 100644 > > --- a/ui/cocoa.m > > +++ b/ui/cocoa.m > > @@ -636,6 +636,7 @@ - (void) switchSurface:(pixman_image_t *)image > > if (isFullscreen) { > > [[fullScreenWindow contentView] setFrame:[[NSScreen > mainScreen] frame]]; > > [normalWindow setFrame:NSMakeRect([normalWindow > frame].origin.x, [normalWindow frame].origin.y - h + oldh, w, h + > [normalWindow frame].size.height - oldh) display:NO animate:NO]; > > + [self setFrame:NSMakeRect(cx, cy, cw, ch)]; > > } else { > > if (qemu_name) > > [normalWindow setTitle:[NSString stringWithFormat:@"QEMU > %s", qemu_name]]; > > [self setFrame:NSMakeRect(cx, cy, cw, ch)] already exist in the earlier > part of the method. It is redundant and not a proper way to fix. It is > necessary to understand why adding the same statement fixes the problem, > and to fix it without duplicate statements. I can think of two > possibilities: > 1. The isResize variable is not enough to cover all the situations when > the statement needs to be executed. > 2. The statement needs to be executed after [normalWindow setFrame:]. > > In case 1, you need to assign a correct value to isResize or add [self > setFrame:] to somewhere else, but not in [-CocoaView switchSurface]. > Putting the statement in [-CocoaView switchSurface] may cause redundant > execution of the statement when isResize is true as I explained. > > In case 2, the existing statement should be simply moved. > > By the way, I have a patch to rewrite the code implementing full screen > so you may try it. If you tested the patch, please give Tested-by. > https://patchew.org/QEMU/20220316060244.46669-1-akihiko.od...@gmail.com/ > > Regards, > Akihiko Odaki >