Workspace::takeActivity operates on AbstractClient

icc-effect-5.14.5
Martin Gräßlin 2015-03-06 15:04:59 +01:00
parent 484f9b6e65
commit 1d4701d67e
4 changed files with 11 additions and 8 deletions

View File

@ -64,6 +64,7 @@ public:
*/ */
virtual bool isSpecialWindow() const = 0; virtual bool isSpecialWindow() const = 0;
virtual bool isActive() const = 0; virtual bool isActive() const = 0;
virtual void setActive(bool) =0;
virtual void sendToScreen(int screen) = 0; virtual void sendToScreen(int screen) = 0;
virtual const QKeySequence &shortcut() const = 0; virtual const QKeySequence &shortcut() const = 0;
virtual void setShortcut(const QString &cut) = 0; virtual void setShortcut(const QString &cut) = 0;
@ -99,6 +100,8 @@ public:
virtual bool userCanSetNoBorder() const = 0; virtual bool userCanSetNoBorder() const = 0;
virtual void setOnAllActivities(bool set) = 0; virtual void setOnAllActivities(bool set) = 0;
virtual const WindowRules* rules() const = 0; virtual const WindowRules* rules() const = 0;
virtual void takeFocus() = 0;
virtual bool wantsInput() const = 0;
// TODO: remove boolean trap // TODO: remove boolean trap
static bool belongToSameApplication(const AbstractClient* c1, const AbstractClient* c2, bool active_hack = false); static bool belongToSameApplication(const AbstractClient* c1, const AbstractClient* c2, bool active_hack = false);

View File

@ -337,10 +337,10 @@ void Workspace::activateClient(AbstractClient* c, bool force)
*/ */
void Workspace::requestFocus(AbstractClient* c, bool force) void Workspace::requestFocus(AbstractClient* c, bool force)
{ {
takeActivity(dynamic_cast<Client*>(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 // the 'if ( c == active_client ) return;' optimization mustn't be done here
if (!focusChangeEnabled() && (c != active_client)) if (!focusChangeEnabled() && (c != active_client))
@ -352,7 +352,7 @@ void Workspace::takeActivity(Client* c, ActivityFlags flags)
} }
if (flags & ActivityFocus) { if (flags & ActivityFocus) {
Client* modal = dynamic_cast<Client*>(c->findModal()); AbstractClient* modal = c->findModal();
if (modal != NULL && modal != c) { if (modal != NULL && modal != c) {
if (!modal->isOnDesktop(c->desktop())) { if (!modal->isOnDesktop(c->desktop())) {
modal->setDesktop(c->desktop()); modal->setDesktop(c->desktop());
@ -380,7 +380,7 @@ void Workspace::takeActivity(Client* c, ActivityFlags flags)
flags &= ~ActivityFocus; flags &= ~ActivityFocus;
} }
if (c->tabGroup() && c->tabGroup()->current() != c) if (c->tabGroup() && c->tabGroup()->current() != c)
c->tabGroup()->setCurrent(c); c->tabGroup()->setCurrent(dynamic_cast<Client*>(c));
if (!c->isShown(true)) { // shouldn't happen, call activateClient() if needed if (!c->isShown(true)) { // shouldn't happen, call activateClient() if needed
qCWarning(KWIN_CORE) << "takeActivity: not shown" ; qCWarning(KWIN_CORE) << "takeActivity: not shown" ;
return; return;

View File

@ -352,7 +352,7 @@ public:
const QIcon &icon() const override; const QIcon &icon() const override;
bool isActive() const override; bool isActive() const override;
void setActive(bool); void setActive(bool) override;
virtual int desktop() const; virtual int desktop() const;
void setDesktop(int) override; void setDesktop(int) override;
@ -440,14 +440,14 @@ public:
// Auxiliary functions, depend on the windowType // Auxiliary functions, depend on the windowType
bool wantsTabFocus() const override; bool wantsTabFocus() const override;
bool wantsInput() const; bool wantsInput() const override;
bool isResizable() const override; bool isResizable() const override;
bool isMovable() const override; bool isMovable() const override;
bool isMovableAcrossScreens() const override; bool isMovableAcrossScreens() const override;
bool isCloseable() const override; ///< May be closed by the user (May have a close button) bool isCloseable() const override; ///< May be closed by the user (May have a close button)
void takeFocus(); void takeFocus() override;
bool isDemandingAttention() const { bool isDemandingAttention() const {
return demands_attention; return demands_attention;
} }

View File

@ -156,7 +156,7 @@ public:
ActivityRaise = 1 << 2 // raise the window ActivityRaise = 1 << 2 // raise the window
}; };
Q_DECLARE_FLAGS(ActivityFlags, ActivityFlag) 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 allowClientActivation(const Client* c, xcb_timestamp_t time = -1U, bool focus_in = false,
bool ignore_desktop = false); bool ignore_desktop = false);
void restoreFocus(); void restoreFocus();