It is several Maximize function in Fvwm-Crystal. When a new window is
opened, a SetEnv made a variable with its window id and its
maximized state. 2 temporary files are also created, one with the
window width, the other with its height. I done this because I found no
other to do what I want and this to survive a restart. May be it is
simpler solution, but I didn't find it if it exist.

When a given Maximize function is called, I want the window to go in
that state. Only the SetEnv is updated. If the same Maximize function
is called 2 consecutive times, I want the window to return in its
original state and at its original location. The 2 temporary files are
used to get the original size.

It is a wrapper function:

DestroyFunc Window-Resize
AddToFunc Window-Resize
+ I Test (EnvMatch CurrentWindowState_$[w.id] "$0") NS-Default
+ I TestRc (NoMatch) NS-"$0"

which is called by

Window-Resize argument

where argument can be one of

Maximize Minimize Default A100 H100 V100 VHgrow Hgrow Vgrow

The function that return to the original size is:

DestroyFunc NS-Default
AddToFunc NS-Default
+ I Maximize $[WindowWidth_$[w.id]] $[WindowHeight_$[w.id]]
+ I SetEnv CurrentWindowState_$[w.id] Default

And the other functions look like:

DestroyFunc NS-Maximize
AddToFunc NS-Maximize
+ I Maximize True 100 100
+ I SetEnv CurrentWindowState_$[w.id] Maximize

DestroyFunc NS-Minimize
AddToFunc NS-Minimize
+ I ResizeMaximize direction East 200p 60p
+ I SetEnv CurrentWindowState_$[w.id] Minimize

It is also the Fullscreen function that is called directly, and when
quitting the full screen style, NS-Default is called directly.

If I open a new window, place it in the middle of the screen and do

With NS-Minimize the window get very small and go to its left corner. I
try other direction like West, and to add fixeddirection, but I was not
able to get it to minimize around its right corner, which I would

Beside that, NS-Maximize -> NS-Minimize -> NS-Minimize work as expected
and described above.

Another issue is with the FullScreen function. When returning to the
normal state, NS-Default is called with:

DestroyFunc Fullscreen
AddToFunc Fullscreen
+ I ThisWindow (State 19, !FvwmButtons, !MPlayer) Fullscreen-Stop
+ I TestRc (NoMatch) ThisWindow (!State 19, !FvwmButtons, !MPlayer)

AddToFunc FullScreen-Stop
+ I NS-Default

Normally, it work just fine and the window is restored to its original
size and location. But sometime after a restart, only the window
borders and title style are restored and the window remain in its full
maximized state. When this append, I can call FulScreen several times,
the window never return to its original size and location.

I done some experiment. If I run

WindowID id FullScrenn-Stop

the problem is the same.

If I change NS-Default to

+ I Maximize False $[WindowWidth_$[w.id]] $[WindowHeight_$[w.id]]

the problem is the same.
If I change it to

+ I Maximize True $[WindowWidth_$[w.id]] $[WindowHeight_$[w.id]]

I get the original size, but the window is always at the top left
border of the screen, that even with a newly opened window or when
restoring NS-Default from another Maximize function than FullScreen.

And I want the location to be restored too.

At restart, it is a fullscreen recover function that apply again
the styles to the maximized windows:

DestroyFunc Fullscreen-Recover
AddToFunc Fullscreen-Recover
+ I WindowStyle !Title, !Borders, !Handles, Iconifiable,
+ I UpdateStyles
+ I WindowStyle State 19
+ I WindowStyle State 20
+ I Maximize ewmhiwa True 100 100
+ I WindowStyle !Maximizable, FixedSize
+ I UpdateStyles

DestroyFunc RecoverFullscreen
AddToFunc RecoverFullscreen
PipeRead 'for i in $[infostore.TmpDirectory]/fullscreen.19.*; do
wid=`basename "$i" | awk --field-separator .  \'{print $$3}\'`; echo "+
I WindowId ${wid} Fullscreen-Recover"; done'

AddToFunc StartFunction I Schedule 1000 RecoverFullscreen

Is it possible to insure the correct location will be restored after
a restart and to not use more SetEnv or temporary files for that?


"We have the heroes we deserve."

Reply via email to