讨论下我对窗口管理的看法。
首先吐嘈:为什么全局菜单不是个好设计?
考虑一下窗口化和最大化两种情况,窗口化的话,菜单会在距离窗口有一定距离的地方,无论是在鼠标移动,或者是视觉上都带来了一定的距离。
最大化的话,本来菜单就在和全局菜单差不多的地方了,还需要全局菜单吗?
有很多其他的Choice,例如最近KWin开发者提到的,窗口边框和菜单合并(不是直接放在边框上,是弄个像Firefox一样的button)。比如plasma-netbook的最大化隐藏窗口边框。一个设计会带来另一个设计,比如说oxygen的drag anywhere(窗口可以用任意空白位置拖拽),因为plasma-netbook最大化无边框,有了这个功能移动起来也会好得多。比如gnome3的drag anywhere(说起来我看了那么多gnome3评测为什么没有人提这个改进?),因为没有了最大化最小化按钮,为了使得拖拽并tiling更加方便,才更加需要这样的功能。
空间利用的极致应该算是tiling wm了,但是学习曲线比较陡峭,我一直也没习惯。我觉得最大化无边框是个不错的想法,但需要注意几件事。如何恢复窗口化?如何移动?如何一步到位?unity和plasma-netbook采用的方法是窗口控制和面板合体。但也有微妙的区别。由于unity的面板是常驻的,为了剩下那个菜单的空间,也采用了全局菜单。plasma-netbook的面板是自动隐藏的,所以用不上全局菜单。
自动隐藏带来其他问题,是否会触发的太容易?是否会影响窗口中其他功能?无论触发距离的长短,顶部永远是最容易触发的,因为菜单,工具栏等等功能都在窗口上方,让鼠标在距离窗口上方做一个急刹车是完全不现实的行为,所以很容易出现挡住的情况。plasma-netbook的窗口切换可以采用右上角触发,使得恢复窗口的需求最小化(你说关闭也在面板上?都关闭了这窗口就不用管了)。
我个人经过几翻尝试,目前使用的是这样的,窗口边框正常,全面板自动隐藏,顶部有一个窄面板,高度和窗口边框高度相近,因此不会挡住窗口内功能,位置也在不会挡住窗口控制的按钮,内容是快速启动图标。下方一个非全场面板,放时间,系统托盘。下方的面板几乎不会误触发,因为很少会有鼠标在屏幕下方的情况。三个常用的窗口控制的按钮都在左上,(类似mac),顺序是,最小化,最大化,关闭,理由是最左上的位置的按钮在窗口最大化的时候会和右上角的窗口边缘冲突,因此放了对最大化窗口来说最不常用的最小化,右上为了功能放了一个保持最上的控制按钮。这样基本保证核心的鼠标功能是在屏幕左上这样的范围,减少鼠标移动。
其实还可以改进的是,最大化无边框,窗口控制功能所在面板偏左很窄一条,以减少触发冲突。不过由于KDE的最大化无边框在记忆窗口形状上有bug(https://bugs.kde.org/show_bug.cgi?id=269059),因此没有采用。