Aaron J. Seigo 写道:
On Tuesday 07 July 2009, 潘卫平 wrote:
Reproduce steps:
1、set "By Program Name" grouping strategy, uncheck "Only when the
taskbar is full".
2、run one konsole application.
3、run two dolphin applications, they will group together on the taskbar.
4、click the dolphin group, a popup dialog will show.
5、move the mouse over konsole on the taskbar, a tooltip will show, but
the popup dialog of dolphin doesn't hide automatically. It is still
there! see
https://bugs.kde.org/show_bug.cgi?id=199107#c2

i don't think the solution is to automatically hide the popup, however. that will just be rather annoying if you move the mouse out of the popup accidentally or just to get it out of the way so you can read it better.

I still think that hiding the popup automatically is more convenient than rejecting showing tooltip and context menu.

what could happen is to reject showing tooltips when there is a popup. that seems more sensible to me, as then what the user specifically chose to show remains and the conflicting mouse-overs are suppressed.

in AbstractTaskItem::toolTipAboutToShow() there could be a check added to see if there are any group popups and if so to just set an empty ToolTipContent object.



------------------------------------------------------------------------

_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


Since AbstractTaskItem has a m_applet pointer, I add a function to hide the popup dialog in class Tasks. Every time a WindowTaskItem or a TaskGroupItem wants to show a tooltip or a context menu, it first calls that function to hide the popup dialog which is showing.

regards

--
潘卫平(Peter Pan)
Red Flag Software Co., Ltd
Index: taskgroupitem.cpp
===================================================================
--- taskgroupitem.cpp	(revision 994260)
+++ taskgroupitem.cpp	(working copy)
@@ -259,6 +259,8 @@
 
 void TaskGroupItem::updateToolTip()
 {
+    m_applet->hidePopupDialog(m_applet->rootGroupItem(), this);
+
     if (!m_group) {
         return;
     }
@@ -370,6 +372,8 @@
 
 void TaskGroupItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *e)
 {
+    m_applet->hidePopupDialog(m_applet->rootGroupItem(), this);
+    
     //kDebug();
     if (!KAuthorized::authorizeKAction("kwin_rmb") || !m_group) {
         QGraphicsWidget::contextMenuEvent(e);
Index: windowtaskitem.cpp
===================================================================
--- windowtaskitem.cpp	(revision 994260)
+++ windowtaskitem.cpp	(working copy)
@@ -183,6 +183,8 @@
 
 void WindowTaskItem::updateToolTip()
 {
+    m_applet->hidePopupDialog(m_applet->rootGroupItem(), this);
+
     if (!m_task) {
         return;
     }
@@ -273,6 +275,8 @@
 
 void WindowTaskItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *e)
 {
+    m_applet->hidePopupDialog(m_applet->rootGroupItem(), this);
+    
     if (!KAuthorized::authorizeKAction("kwin_rmb") || !m_task) {
         QGraphicsWidget::contextMenuEvent(e);
         return;
Index: tasks.cpp
===================================================================
--- tasks.cpp	(revision 994260)
+++ tasks.cpp	(working copy)
@@ -391,7 +391,26 @@
     return m_rootGroupItem;
 }
 
+void Tasks::hidePopupDialog(TaskGroupItem *group, AbstractTaskItem *abstractTaskItem)
+{
+    foreach (AbstractTaskItem *item, group->members().values()) {
+        TaskGroupItem *groupItem = qobject_cast<TaskGroupItem *>(item);
+        if (groupItem) {
+            if (groupItem->popupDialog()->isVisible()) {
+                if (!groupItem->members().values().contains(abstractTaskItem)) {
+                    groupItem->popupDialog()->hide();
+                }
+                
+                return;
+            } else {
+                hidePopupDialog(groupItem, abstractTaskItem);
+            }
+        }
+    }
 
+    return;
+}
+
 K_EXPORT_PLASMA_APPLET(tasks, Tasks)
 
 #include "tasks.moc"
Index: tasks.h
===================================================================
--- tasks.h	(revision 994260)
+++ tasks.h	(working copy)
@@ -106,6 +106,7 @@
 
         void needsVisualFocus();
 
+        void hidePopupDialog(TaskGroupItem *group, AbstractTaskItem *abstractTaskItem);
 
 signals:
     /**
_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel

Reply via email to