From 1d4701d67eb10d78a3095040fce61baceaaa3bc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Fri, 6 Mar 2015 15:04:59 +0100 Subject: [PATCH] Workspace::takeActivity operates on AbstractClient --- abstract_client.h | 3 +++ activation.cpp | 8 ++++---- client.h | 6 +++--- workspace.h | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/abstract_client.h b/abstract_client.h index a6572113d..e08da8e00 100644 --- a/abstract_client.h +++ b/abstract_client.h @@ -64,6 +64,7 @@ public: */ virtual bool isSpecialWindow() const = 0; virtual bool isActive() const = 0; + virtual void setActive(bool) =0; virtual void sendToScreen(int screen) = 0; virtual const QKeySequence &shortcut() const = 0; virtual void setShortcut(const QString &cut) = 0; @@ -99,6 +100,8 @@ public: virtual bool userCanSetNoBorder() const = 0; virtual void setOnAllActivities(bool set) = 0; virtual const WindowRules* rules() const = 0; + virtual void takeFocus() = 0; + virtual bool wantsInput() const = 0; // TODO: remove boolean trap static bool belongToSameApplication(const AbstractClient* c1, const AbstractClient* c2, bool active_hack = false); diff --git a/activation.cpp b/activation.cpp index 5bb3a73d6..fa0caaf41 100644 --- a/activation.cpp +++ b/activation.cpp @@ -337,10 +337,10 @@ void Workspace::activateClient(AbstractClient* c, bool force) */ void Workspace::requestFocus(AbstractClient* c, bool force) { - takeActivity(dynamic_cast(c), force ? ActivityFocusForce : ActivityFocus); + takeActivity(c, force ? ActivityFocusForce : ActivityFocus); } -void Workspace::takeActivity(Client* c, ActivityFlags flags) +void Workspace::takeActivity(AbstractClient* c, ActivityFlags flags) { // the 'if ( c == active_client ) return;' optimization mustn't be done here if (!focusChangeEnabled() && (c != active_client)) @@ -352,7 +352,7 @@ void Workspace::takeActivity(Client* c, ActivityFlags flags) } if (flags & ActivityFocus) { - Client* modal = dynamic_cast(c->findModal()); + AbstractClient* modal = c->findModal(); if (modal != NULL && modal != c) { if (!modal->isOnDesktop(c->desktop())) { modal->setDesktop(c->desktop()); @@ -380,7 +380,7 @@ void Workspace::takeActivity(Client* c, ActivityFlags flags) flags &= ~ActivityFocus; } if (c->tabGroup() && c->tabGroup()->current() != c) - c->tabGroup()->setCurrent(c); + c->tabGroup()->setCurrent(dynamic_cast(c)); if (!c->isShown(true)) { // shouldn't happen, call activateClient() if needed qCWarning(KWIN_CORE) << "takeActivity: not shown" ; return; diff --git a/client.h b/client.h index d5ea957f3..309fa491c 100644 --- a/client.h +++ b/client.h @@ -352,7 +352,7 @@ public: const QIcon &icon() const override; bool isActive() const override; - void setActive(bool); + void setActive(bool) override; virtual int desktop() const; void setDesktop(int) override; @@ -440,14 +440,14 @@ public: // Auxiliary functions, depend on the windowType bool wantsTabFocus() const override; - bool wantsInput() const; + bool wantsInput() const override; bool isResizable() const override; bool isMovable() const override; bool isMovableAcrossScreens() const override; bool isCloseable() const override; ///< May be closed by the user (May have a close button) - void takeFocus(); + void takeFocus() override; bool isDemandingAttention() const { return demands_attention; } diff --git a/workspace.h b/workspace.h index 906c5a202..cbec683ed 100644 --- a/workspace.h +++ b/workspace.h @@ -156,7 +156,7 @@ public: ActivityRaise = 1 << 2 // raise the window }; Q_DECLARE_FLAGS(ActivityFlags, ActivityFlag) - void takeActivity(Client* c, ActivityFlags flags); + void takeActivity(AbstractClient* c, ActivityFlags flags); bool allowClientActivation(const Client* c, xcb_timestamp_t time = -1U, bool focus_in = false, bool ignore_desktop = false); void restoreFocus();