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 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);

View File

@ -337,10 +337,10 @@ void Workspace::activateClient(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
if (!focusChangeEnabled() && (c != active_client))
@ -352,7 +352,7 @@ void Workspace::takeActivity(Client* c, ActivityFlags flags)
}
if (flags & ActivityFocus) {
Client* modal = dynamic_cast<Client*>(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<Client*>(c));
if (!c->isShown(true)) { // shouldn't happen, call activateClient() if needed
qCWarning(KWIN_CORE) << "takeActivity: not shown" ;
return;

View File

@ -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;
}

View File

@ -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();