[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdevplatform] shell: assistant: Prevent QGraphicsView from raising a window activation event
From:       Sven Brauch <svenbrauch () googlemail ! com>
Date:       2014-01-31 23:22:42
Message-ID: E1W9NQ2-00041H-LF () scm ! kde ! org
[Download RAW message or body]

Git commit a829c459a365eaadc200359b828ce5fa70395c3f by Sven Brauch.
Committed on 31/01/2014 at 16:09.
Pushed by brauch into branch 'master'.

assistant: Prevent QGraphicsView from raising a window activation event

Different from QToolBar (which the old assistant inherited from),
QGraphicsView raises a WindowActivate event when it is shown. There is a
flag (WA_ShowWithoutActivating) which *should* prevent that but it
does not work. Thus, we re-implement QGraphicsView's ViewportEvent and
take the Show event away from it.

This is an ugly hack. However, with Qt5, QDeclarativeView goes away
anyways; so it is guaranteed to go away in at most half a year,
when I port this code to KDevelop 5. Until then, it's not going to
break, since Qt4 will not change.

CCMAIL:mail@milianw.de

M  +12   -0    shell/assistantpopup.cpp
M  +1    -0    shell/assistantpopup.h

http://commits.kde.org/kdevplatform/a829c459a365eaadc200359b828ce5fa70395c3f

diff --git a/shell/assistantpopup.cpp b/shell/assistantpopup.cpp
index 8f91b68..09e2bac 100644
--- a/shell/assistantpopup.cpp
+++ b/shell/assistantpopup.cpp
@@ -80,6 +80,18 @@ AssistantPopup::AssistantPopup(KTextEditor::View* parent, const IAssistant::Ptr&
     m_view->installEventFilter(this);
 }
 
+bool AssistantPopup::viewportEvent(QEvent *event)
+{
+    // For some reason, QGraphicsView posts a WindowActivate event
+    // when it is shown, even if disabled through setting the WA_ShowWithoutActivate
+    // attribute. This causes all focus-driven popups (QuickOpen, tooltips, ...)
+    // to hide when the assistant opens. Thus, prevent it from processing the Show event here.
+    if ( event->type() == QEvent::Show ) {
+        return true;
+    }
+    return QGraphicsView::viewportEvent(event);
+}
+
 AssistantPopupConfig::AssistantPopupConfig(QObject *parent): QObject(parent)
 {
 
diff --git a/shell/assistantpopup.h b/shell/assistantpopup.h
index 0f838f0..c279fba 100644
--- a/shell/assistantpopup.h
+++ b/shell/assistantpopup.h
@@ -103,6 +103,7 @@ public:
      */
     AssistantPopup(KTextEditor::View* widget, const KDevelop::IAssistant::Ptr& assistant);
     KDevelop::IAssistant::Ptr assistant() const;
+    virtual bool viewportEvent(QEvent *event);
 
 public slots:
     void executeHideAction();

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic