@@ -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
30873086export 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