libfetion / libfetion-gui

Automatically exported from code.google.com/p/libfetion-gui
2 stars 0 forks source link

[GUI] Linux 下任务栏图标显示问题 (讨论) #162

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
FEATURE DESCRIPTION:
问题描述请见:
http://www.libfetion.cn/bbs/viewthread.php?tid=2874&extra=page%3D1
即包括在登录前,登录后,任务栏无法显示主窗口的 Libfetion 
的图标,显示的是一个白板的默认应
用程序图标。

该问题的产生主要是由于没有设置相应的 Window 
Icon。用以下代码可以 fix 这个问题:
Index: src/fxloginwindow.cpp
===================================================================
--- src/fxloginwindow.cpp   (revision 468)
+++ src/fxloginwindow.cpp   (working copy)
@@ -528,6 +528,7 @@

     login_image->setPixmap(getLoginImage());
     LibFetion_image->setPixmap(getLibFetionImage());
+    setWindowIcon(getSysTrayIcon(0));

     if (willLogin)
     {
Index: src/fxmainwindow.cpp
===================================================================
--- src/fxmainwindow.cpp    (revision 469)
+++ src/fxmainwindow.cpp    (working copy)
@@ -1074,6 +1074,7 @@

     //UI set all images of main windows
     portrait->setIcon(getPortraitImage());
+    this->setWindowIcon(getSysTrayIcon(fx_get_user_state()));

     lineSearch->setText(tr("search friends..."));
     nickname->setText(QString::fromUtf8(fx_get_usr_show_name()));

其效果如图 pre_set_task.png 和 post_set_task.png 
所示。但是会带来新的问题:
1. 很多主题中,登录窗口是没有 Window Icon 的,加上 Window Icon 
之后,会破坏主题的整体
感觉,如图:pre_set_login.png 和 post_set_login.png 所示。
2. 很多主题中,主窗口有自定义的 Icon,加上 Window Icon 
之后,主题的主窗口 icon 被替
换,如图:pre_set_main 和 post_set_main.png 所示。

那么有几个问题要考虑:
1. 
任务栏的图标到底要不要?这个是完全可选的,根据大家喜��
�来确定。
2. 如果要的话,到底该设置成什么图标?是 Libfetion 
一直使用的图标,还是主题自定义图标?

Original issue reported on code.google.com by solrex on 13 Dec 2009 at 9:02

Attachments:

GoogleCodeExporter commented 9 years ago
那么有几个问题要考虑:
1. 
任务栏的图标到底要不要?这个是完全可选的,根据大家喜��
�来确定。
2. 如果要的话,到底该设置成什么图标?是 Libfetion 
一直使用的图标,还是主题自定义图
标?

正是因为考虑一些皮肤的可定制性,所以我没有加程序窗口��
�标。如:
http://code.google.com/p/libfetion-gui/source/detail?r=445

但这回过头来又破坏了程序部分属性.

我觉得我们修改 fxwidgettitlebar.cpp,将里面的icon显示部分去掉,
而在主窗口里面还是设置为Libfetion 一直使用的图标。

这即不破坏程序皮肤的统一性,而在任务栏又可以显示LibFetio
n的统一标志.

你觉得这个如何?

Original comment by libfet...@gmail.com on 13 Dec 2009 at 9:40

GoogleCodeExporter commented 9 years ago
我觉得我们修改 fxwidgettitlebar.cpp,将里面的icon显示部分去掉,
而在主窗口里面还是设置为Libfetion 一直使用的图标。

目前程序里面显示的系统标题栏,都是由fxwidgettitlebar.cpp来完
成的,既然这样。
我们可以考虑通过修改它来实现我们的目的. :)

Original comment by libfet...@gmail.com on 13 Dec 2009 at 9:41

GoogleCodeExporter commented 9 years ago
好,我同意这样做,我尝试了一下,貌似可行。
但最好还是要确保修改它不会影响其它模块。

Original comment by solrex on 13 Dec 2009 at 10:19

GoogleCodeExporter commented 9 years ago
目前来看是会有影响的,比如聊天窗口的标题栏里,icon 
就无法显示了。
不知道可否在 FxWidgetTitleBar::setWindowIcon(const QIcon &_icon) 
函数中判断该 TitleBar 所属
的窗口是什么窗口?
如果是主窗口或者登录窗口,就不设置 title bar 
icon;否则就设置 title bar icon。

Original comment by solrex on 13 Dec 2009 at 10:26

GoogleCodeExporter commented 9 years ago
聊天窗口也需要和主窗口一样显示的设置窗口的icon. :)

不知道可否在 FxWidgetTitleBar::setWindowIcon(const QIcon &_icon) 
函数中判断该 TitleBar 
所属的窗口是什么窗口?

这个是使用FxWidget封装过的窗口. 即可以使用皮肤覆盖的窗口.
那些窗口都是派生自FxWidget.

Original comment by libfet...@gmail.com on 13 Dec 2009 at 10:30

GoogleCodeExporter commented 9 years ago
我想我们两个理解可能有误差,那我整理一下,看你的意思��
�不是这样:

1. 所有的 title bar 都不显示 icon,由皮肤来决定该显示 icon 
的地方显示什么东西。
2. widget 还是应该有 icon,用来在任务栏显示,但不显示到 
title bar。
3. 任务栏显示的 icon 都应该是 libfetion 的主 icon。

Original comment by solrex on 13 Dec 2009 at 10:38

GoogleCodeExporter commented 9 years ago
1. 所有的 title bar 都不显示 icon,由皮肤来决定该显示 icon 
的地方显示什么东西。
2. widget 还是应该有 icon,用来在任务栏显示,但不显示到 
title bar。
3. 任务栏显示的 icon 都应该是 libfetion 的主 icon。

是的. :)

Original comment by libfet...@gmail.com on 13 Dec 2009 at 11:30

GoogleCodeExporter commented 9 years ago
记录我和solrex在gtalk上有关这个issue的讨论.

Wenbo: 皮肤设置主窗口title bar的icon,好像是不通过那个函数的
6:42 PM 
FxWidget::setWindowIcon
6:43 PM 
就是如果你把title bar中设置title bar icon的那句话注释掉

主窗口的 title bar icon 还可以显示皮肤的自定义 icon
50 minutes
7:34 PM 
me: 是的

Wenbo: 那还有一些其它的地方可能需要改

me: 
那个icon可以在皮肤里面配置,皮肤可以通过CSS来控制程序icon

Wenbo: 对话框的 css 可能要修改

me: 你可以查看皮肤文件的style.css
7:35 PM 
里面有个mainWindow #icon

这个是通过CSS来控制icon

如果我们觉得不需要了,我们可以把它从那里删掉. :)

Wenbo: 比如 FxMsgWindow::setCurrentTabTitle 中

就有修改对话框的 title
7:36 PM 
和 icon

这个不是通过css控制的

也不是说不是通过css控制

me: 嗯,这个是为了体现当前聊天用户的在线状态

CSS是初始化状态的.

Wenbo: 但是是通过调用那个函数来显示 title icon

me: 但最终状态是看最后谁设,就是谁的

Wenbo: 如果那个函数不修改 title icon,那么这个 title 
bar就显示不出来了
7:37 PM 
这个 title bar 的 icon

me: 在皮肤里设置icon
7:38 PM 
只有主窗口的ICON被设置了,在皮肤里面

而聊天窗口没有设置,

而且有些皮肤的css写得不是很好,所以.

Wenbo: 那么如果不让那个函数设置 title icon
7:39 PM 
聊天窗口也就没 icon 了

me: 那个函数还是要设置的. :)

而且还是使用系统的

Wenbo: 聊天窗口的 icon 使用系统的 icon?
7:40 PM 
那聊天状态怎么显示?
7:41 PM 
me: 我想想. :)
7:42 PM 
你指的聊天状态是?

Wenbo: 就是聊天时候会闪烁吧

还是会变化,我记得

就是在左上角
7:43 PM 
在聊天窗口左上角显示的icon,会显示对方状态的变化

在线,不在线或者忙碌

me: 嗯,

这个目前是使用皮肤的状态

Wenbo: 对
7:44 PM 
而且不同皮肤的图标是不一样的

me: 嗯,

Wenbo: 其实我们关注的只是 主窗口 和 登录窗口 的问题

me: 那只能这样了

Wenbo: 如果这两个问题能解决,就不用动其它的。
7:45 PM 
me: 我觉得最好的方式是: 
任务栏的icon使用libfetion的系统的,而显示在窗口的icon则使用
皮肤的

这样可能需要改动不少代码.

Wenbo: 对

titleBar->setWindowIcon(icon);
QWidget::setWindowIcon(icon);

这里有两句
7:46 PM 
其实这两句就应该是对应的titlebar和任务栏的icon吧?

me: 嗯

Wenbo: 聊天窗口的任务栏和标题栏其实一样完全没有问题

现在的代码就是这样
7:47 PM 
我们需要区分的是主窗口的任务栏和标题栏

我在尝试不知道 typeid

可否探测出来this指针所属的类

me: 不用这么麻烦
7:48 PM 
Wenbo: 或者说从 object name 来判断

me: 那个类都是派生自fxwidget了,

属性是一样的,对于任何窗口来说
7:49 PM 
Wenbo: 
虽然都是从基类派生,如果能判断是哪个派生类,就可以对��
�同的派生类做不同的区分了

或者增加一个属性,这个属性显示该类是主窗口还是其它窗��
�

me: 可以把那函数差分成两个
7:50 PM 
不是,将那个函数后面的 QWidget::setWindowIcon(icon);
去掉

并且将这个函数改动名称表示只是修改显示的windowIcon,

而要显示系统的icon则还是调用setWindowIcon(
7:51 PM 
这样的话,每次设置可能需要调用两个函数

你觉得这个如何?

Wenbo: 这样也可以

这样就跟原始的函数名保持一致了

me: 嗯,

Wenbo: 专门分开出来一个函数来设置 title icon
7:52 PM 
me: 是的. :)

Original comment by libfet...@gmail.com on 13 Dec 2009 at 11:57

GoogleCodeExporter commented 9 years ago
这个 Issue 在 revision 470 被 Fix,请验证。
如有问题,请重新 Open。

Original comment by solrex on 13 Dec 2009 at 4:25

GoogleCodeExporter commented 9 years ago
非常好. :)

自从我们增加了setTitleBarIcon函数,也许下面的函数可以删除��
�. :)
void FxWidget::setWindowIcon(const QIcon &icon)

Original comment by libfet...@gmail.com on 13 Dec 2009 at 6:23

GoogleCodeExporter commented 9 years ago

r471 删除.
void FxWidget::setWindowIcon(const QIcon &icon)

我已在ubuntu上验证这两个patch成功.
change status to verified.

Original comment by libfet...@gmail.com on 13 Dec 2009 at 6:33