Skip to content

Commit 8fd5ccd

Browse files
committed
Handle restoring of non-tiled windows size and position.
1 parent 27fd5dd commit 8fd5ccd

1 file changed

Lines changed: 49 additions & 8 deletions

File tree

tiling.js

Lines changed: 49 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -509,8 +509,8 @@ export class Space extends Array {
509509
let resizable = !mw.fullscreen &&
510510
mw.get_maximized() !== Meta.MaximizeFlags.BOTH;
511511

512-
if (mw._fullscreen_width) {
513-
targetWidth = mw._fullscreen_width;
512+
if (mw._fullscreen_frame) {
513+
targetWidth = mw._fullscreen_frame.width;
514514
}
515515

516516
if (mw.preferredWidth) {
@@ -3080,8 +3080,7 @@ export function positionChangeHandler(metaWindow) {
30803080
return;
30813081
}
30823082

3083-
const f = metaWindow.get_frame_rect();
3084-
metaWindow._fullscreen_x = f.x;
3083+
saveFullscreenFrame(metaWindow);
30853084
}
30863085

30873086
export function resizeHandler(metaWindow) {
@@ -3098,8 +3097,10 @@ export function resizeHandler(metaWindow) {
30983097
metaWindow._targetHeight = null;
30993098

31003099
const space = spaces.spaceOfWindow(metaWindow);
3101-
if (space.indexOf(metaWindow) === -1)
3100+
if (space.indexOf(metaWindow) === -1) {
3101+
nonTiledSizeHandler(metaWindow);
31023102
return;
3103+
}
31033104

31043105
const selected = metaWindow === space.selectedWindow;
31053106
let addCallback = false;
@@ -3114,17 +3115,17 @@ export function resizeHandler(metaWindow) {
31143115
x = 0;
31153116
}
31163117
else {
3117-
x = metaWindow._fullscreen_x ?? f.x - space.monitor.x;
3118+
x = metaWindow?._fullscreen_frame?.x ?? f.x - space.monitor.x;
31183119
x = Math.max(x, Settings.prefs.horizontal_margin);
31193120

31203121
// if pwm fullscreen previously
31213122
if (metaWindow._fullscreen_lock) {
3122-
addCallback = true;
31233123
delete metaWindow._fullscreen_lock;
3124+
addCallback = true;
31243125
}
31253126
else {
31263127
// save width for later exit-fullscreen restoring
3127-
metaWindow._fullscreen_width = f.width;
3128+
saveFullscreenFrame(metaWindow);
31283129
}
31293130
}
31303131

@@ -3145,6 +3146,46 @@ export function resizeHandler(metaWindow) {
31453146
}
31463147
}
31473148

3149+
/**
3150+
* ResizeHandler for non-tiled windows
3151+
* @param {*} metaWindow
3152+
*/
3153+
export function nonTiledSizeHandler(metaWindow) {
3154+
// if window is fullscreen ==> set lock
3155+
if (metaWindow.fullscreen) {
3156+
metaWindow._fullscreen_lock = true;
3157+
return;
3158+
}
3159+
3160+
// if pwm fullscreen previously
3161+
if (metaWindow._fullscreen_lock) {
3162+
delete metaWindow._fullscreen_lock;
3163+
let fsf = metaWindow._fullscreen_frame;
3164+
if (fsf) {
3165+
metaWindow.move_resize_frame(true, fsf.x, fsf.y, fsf.width, fsf.height);
3166+
delete metaWindow._fullscreen_frame;
3167+
}
3168+
}
3169+
else {
3170+
saveFullscreenFrame(metaWindow);
3171+
}
3172+
}
3173+
3174+
/**
3175+
* Saves a metaWindow's frame x, y ,width, and height for restoring
3176+
* after exiting fullscreen mode.
3177+
* @param {MetaWindow} metaWindow
3178+
*/
3179+
export function saveFullscreenFrame(metaWindow) {
3180+
const f = metaWindow.get_frame_rect();
3181+
metaWindow._fullscreen_frame = {
3182+
x: f.x,
3183+
y: f.y,
3184+
width: f.width,
3185+
height: f.height,
3186+
};
3187+
}
3188+
31483189
/**
31493190
* Saves current state for controlled restarts of PaperWM.
31503191
*/

0 commit comments

Comments
 (0)