When those apps go fullscreen, they turn off some widgets, thus decreasing minimum window size. And it seems like icewm can't properly handle this change for fullscreen windows, so after switching back it uses "bad" hints.
Working patch attached. It saves size hints before going fullscreen and restores them back after leaving fullscreen. I don't know if this is a proper way to handle this (spotted this trick in lwm), but it seems to be working fine for me. Apply in `src` directory. Done for icewm 1.2.37-1, applies to icewm_1.2.37+1.3.4pre2-4 cleanly.
diff -r d584d305656c -r a1ad5efdfa3f wmclient.cc --- a/wmclient.cc Sun May 03 19:42:28 2009 +0700 +++ b/wmclient.cc Fri Oct 09 20:17:07 2009 +0700 @@ -863,6 +863,15 @@ if (fMwmHints) *fMwmHints = mwm; } + +void YFrameClient::saveSizeHints() +{ + memcpy(&savedSizeHints, fSizeHints, sizeof(XSizeHints)); +}; +void YFrameClient::restoreSizeHints() { + memcpy(fSizeHints, &savedSizeHints, sizeof(XSizeHints)); +}; + long YFrameClient::mwmFunctions() { long functions = ~0U; diff -r d584d305656c -r a1ad5efdfa3f wmclient.h --- a/wmclient.h Sun May 03 19:42:28 2009 +0700 +++ b/wmclient.h Fri Oct 09 20:17:07 2009 +0700 @@ -94,6 +94,11 @@ void getSizeHints(); XSizeHints *sizeHints() const { return fSizeHints; } + + // for going fullscreen and back + XSizeHints savedSizeHints; + void saveSizeHints(); + void restoreSizeHints(); unsigned long protocols() const { return fProtocols; } void getProtocols(bool force); diff -r d584d305656c -r a1ad5efdfa3f wmframe.cc --- a/wmframe.cc Sun May 03 19:42:28 2009 +0700 +++ b/wmframe.cc Fri Oct 09 20:17:07 2009 +0700 @@ -3129,6 +3129,17 @@ //if (fNewState == fOldState) // return ; + if ((fOldState ^ fNewState) & WinStateFullscreen) { + if ((fNewState & WinStateFullscreen)) { + // going fullscreen + client()->saveSizeHints(); + } + else { + // going back + client()->restoreSizeHints(); + } + } + // !!! move here fWinState = fNewState;