• 8
  • Apr

在桌面图形设计中,窗口是基本的容器元素,由此衍生,一般会有“应用程序窗口”、“面板”和“对话框”等。

在这里说的对话框,实际上又分“标准对话框”和“模态对话框(Modal Dialog,以下均用英文)”,Modal Dialog不同于标准对话框,它会覆盖父窗体的行为,必须得响应该对话框的操作,才能进行下一步。

但是这个设计在GNOME桌面当中却不是很好,请看下文。

先来看看在Mac OS X当中,是如何处理Modal Dialog的:

下图是OS X当中常见的Modal Dialog的展示方式,它通过动画的形式,从上边框伸出一个无边框的、吸附在原窗口标题栏上的“Modal Dialog”,它没有关闭或最小化按钮,你必须得响应操作才能进行下一步,要不然,你也可以把整个窗口移开(它也会跟着移开)推迟操作,或者最小化整个窗口。

Model Dialog OS X

再看GNOME吧。

同样是Modal Dialog,同样是提醒用户是否要保存文件。GNOME会弹出一个标准的窗口,除了三个按钮:No, Cancel和Yes外,还有窗口上的“关闭”按钮。

我会犹豫一下:如果按该对话框的关闭按钮,到底会触发“No”,还是“Cancel”呢?

另外,虽然此时父窗口的正文区域已经不能操作,但是我依然可以按住父窗口的标题栏进行移动,从而让这两个窗口(一个父窗口,一个Modal Dialog)看上去分离了。

也就是说如果我暂时不想响应,把它们拽到一边,必须得对两个窗体进行移动。

这样的操作,我认为是不合理的。

Model Dialog GNOME 01

既然不合理,那咱们就开始Hack吧~谁叫Linux平台,天生就是为hack的呢!

下面开始Hack GNOME Shell,补丁来自:Bug 612726 -window modal dialogs should appear attached to parent window

…………省略中间过程10000字…………

看看完成后的效果。

当我在Leafpad里打了一行字,然后随手按下了左上角关闭按钮,这时,Modal Dialog会以动画的形式从标题栏从上往下展开……

Model Dialog GNOME 02

展开后就是这个样子,嗯,就是Mac OS X的样式了。

没有之前具备的窗口边框和关闭按钮,你必须得从这三个选项中选出一个来,又或者你可以暂时将父窗口拖拽至一边,待会处理——当然Modal Dialog已经具备吸附性,父窗口在哪,它就在哪里。

Model Dialog GNOME 03

总结:

这个hack只是把GNOME的窗口管理行为变得更像Mac OS X了,尽管只是一个小小细节,但是我认为Mac OS X在用户体验和交互方面的设计是相当用心和科学的,好的东西就要不断的学习,更何况GNOME本来就是一个自由的Hacker平台

» You can leave a comment.

1 Pingbacks

19 Comments

  1. lh

    有兴趣。。这个补丁我上哪里找呢,怎么一个需要登录的?

    这个是给GTK打补丁还是窗口管理器?

  2. 这个是 GNOME-SHELL 特定吗?如果换用其他窗口管理器会不会有问题……

  3. 嗯,这个细节确实很容易忽视

  4. 哈哈,开始研究交互了呀

  5. lh

    找到了。https://bugzilla.gnome.org/show_bug.cgi?id=612726

    可是只是gnome-shell的。。如果是gtk的补丁就好了。。。

  6. 细节决定成败,现在有点佩服MAC了,linux要小心啊~

  7. Mike

    其实我很讨厌mac的那个动画的。。。
    而且这个modal出现的位置也非常别扭。
    modal窗口应该出现在中央才是最方便的。因为它本身就是要求用户尽快响应的警告性问题。

    所以我觉得应该放到中央。但是标题栏真的应该去掉。

    • webzhao

      出现在中间不一定好。因为这样的一个对话框一般是你在点击标题栏上的按钮或工具栏上的按钮后弹出来的,此时你的鼠标位置就在窗体上半部分。

      • Bob

        有道理,而且我还认为出现在中央是没有任何道理的,倒是有点windows的惯性。

      • 我会去按 Alt-F4 的。

        另外,并不是只有这种情况下才会有模态窗口出现。比如火狐启动后就会向我要主密码,这时候放那么高就不合理了。

  8. firefoxmmx

    昨天晚上把GENTOO的GNOME-2.30安装了, 也安装了GNOME-SHELL~~ GNOME-SHELL里的搜索栏好像不可以输入中文~~(好久没有打五笔了,今天开始重回五笔怀抱~感觉很好~~)

  9. Bob

    gnome的处理方式也有它的好处,我自己曾经觉得这样很方便,在你要选择对话框的按钮时,不记得父窗口中的一个内容细节,想看看再选择,那么把对话框移动后直接可以看到然后再做选择。当然mac这种设计确实更符合自然思维。

  10. 恩, Mac的这个实现像是Modal Dialog和Modaless Hint的折衷。没有Dialog弹出给用户带来太多恐慌,也不至于让用户忽略必须做出的选择。

  11. 主席啊,要通用的话,
    几行 Python WNCK 程序就可以了

  12. moexizer

    这样会遮盖住一部分窗体的内容,有时候在关闭之前还要再看看以确保真的要保存……

  13. moexizer

    如果设计成点击关闭之后标题栏按钮变成选择操作按钮,标题栏(或者状态栏)文字变成保存提示信息,这样感觉会更好些……

    • 同意。不过有个小细节还是没有处理好。OS X点击关闭后的模式对话框是don't save,cancel和save,Gnome是No,cancel和yes,从语言表达的角度看,OS X处理得更清晰更人性些~

Leave a Comment