LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 862|回复: 1

终于解决了fvwm最大化状态的问题

[复制链接]
发表于 2006-3-11 00:51:06 | 显示全部楼层 |阅读模式
问题:
fvwm不会记住一个程序退出时的最大化状态,只能记住退出时的窗口大小.
这样下次启动时有些程序将会以一个很大窗口的形式出现. 而且会丢失原来窗口的普通大小的信息.
其实这可能的fvwm的maximize命令的问题.因为在gnome下最大化状态下的窗口到fvwm下依然处于最大化状态,尽管窗口的大小可能没有满屏.

解决方法:
我的想法是通过程序启动时窗口的大小占桌面的比例来猜测原窗口是否处于最大化.
因为我觉得这种判定方法可能比恢复窗口原来的状态来的好.
比如terminal,gvim等最大化后退出重新运行, 窗口还是处于80x24的状态.
下面是具体实现:

  1. DestroyModuleConfig FvwmEvent: *
  2. *FvwmEvent: Cmd
  3. *FvwmEvent: add_window FuncAW
  4. *FvwmEvent: destroy_window FuncDW

  5. AddToFunc StartFunction
  6. + I Module FvwmEvent
  7. DestroyFunc FuncAW
  8. AddToFunc   FuncAW
  9. + I ThisWindow PipeRead `if [ '$[w.width]' -gt 1000 ] && [ '$[w.height]' -gt 750 ]; \
  10.         then echo 'ThisWindow Maximize True';\
  11.         if [ -f '$[HOME]/.fvwm/winpos/$[w.class]' ];\
  12.         then read ax ay aw ah <'$[HOME]/.fvwm/winpos/$[w.class]';\
  13.         else ax=110;ay=60;aw=800;ah=600;\
  14.         fi;\
  15.         echo SetEnv x-$[w.id] $ax;\
  16.         echo SetEnv y-$[w.id] $ay;\
  17.         echo SetEnv w-$[w.id] $aw;\
  18.         echo SetEnv h-$[w.id] $ah;\
  19.         fi`
  20. + I ThisWindow (Iconic) IconifyAndRearrange

  21. DestroyFunc FuncDW
  22. AddToFunc   FuncDW
  23. + I ThisWindow Test (EnvIsSet x-$[w.id], EnvIsSet w-$[w.id], EnvIsSet y-$[w.id], EnvIsSet h-$[w.id]) PipeRead `echo PipeRead \"echo \\'\\$\\[x-$[w.id]\\] \\$\\[y-$[w.id]\\] \\$\\[w-$[w.id]\\] \\$\\[h-$[w.id]\\]\\'\
  24. \\>"$[HOME]/.fvwm/winpos/$[w.id]"\\;mv "$[HOME]/.fvwm/winpos/$[w.id]" \\'$[HOME]/.fvwm/winpos/$[w.class]\\'\"`
  25. + I ThisWindow PipeRead `echo -e "UnsetEnv x-$[w.id]\\nUnsetEnv y-$[w.id]\\nUnsetEnv w-$[w.id]\\nUnsetEnv h-$[w.id]"`

  26. DestroyFunc CustomMaximize
  27. AddToFunc   CustomMaximize
  28. + I ThisWindow (Maximized) PipeRead "echo ResizeMove \\$\\[w-$[w.id]\\]p \\$\\[h-$[w.id]\\]p \\$\\[x-$[w.id]\\]p \\$\\[y-$[w.id]\\]p"
  29. + I TestRc (Match) Break
  30. + I ThisWindow SetEnv w-$[w.id] $[w.width]
  31. + I ThisWindow SetEnv h-$[w.id] $[w.height]
  32. + I ThisWindow SetEnv x-$[w.id] $[w.x]
  33. + I ThisWindow SetEnv y-$[w.id] $[w.y]
  34. + I Maximize $*
复制代码


用CustomMaximize代替默认的Maximize命令.

其实主要难度在要动态记住每个窗口的普通状态的大小和位置.
很久以前就想解决了它了.
看了用截屏来做程序icon的处理方法,才知道变量还可以这样定义.

贴出来给觉得有意义的人做个参考.

另外,我的fvwm用新的xorg(只有freetype支持,没有xtt)时候, 不能使用truetype的字显示.
而且xmms也不能运行. 是不是我的fonts.dir的设置的问题.我在里面加了粗体,斜体等的设置,比如:
ab=y:simsun.ttf -misc-SimSun-bold-r-normal--0-0-0-0-p-0-gbk-0
发表于 2006-3-11 01:20:06 | 显示全部楼层
谢谢,,偶也有这个困扰!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表