Workspace::allowClientActivation operates on AbstractClient

Still requires a dynamic_cast for check on should_get_focus. To be
removed once Workspace::should_get_focus is a list of AbstractClients.
This commit is contained in:
Martin Gräßlin 2015-03-12 11:35:31 +01:00
parent dde1947461
commit f28d759352
2 changed files with 8 additions and 6 deletions

View file

@ -534,7 +534,7 @@ void Workspace::setShouldGetFocus(Client* c)
// focus_in -> the window got FocusIn event // focus_in -> the window got FocusIn event
// ignore_desktop - call comes from _NET_ACTIVE_WINDOW message, don't refuse just because of window // ignore_desktop - call comes from _NET_ACTIVE_WINDOW message, don't refuse just because of window
// is on a different desktop // is on a different desktop
bool Workspace::allowClientActivation(const KWin::Client *c, xcb_timestamp_t time, bool focus_in, bool ignore_desktop) bool Workspace::allowClientActivation(const KWin::AbstractClient *c, xcb_timestamp_t time, bool focus_in, bool ignore_desktop)
{ {
// options->focusStealingPreventionLevel : // options->focusStealingPreventionLevel :
// 0 - none - old KWin behaviour, new windows always get focus // 0 - none - old KWin behaviour, new windows always get focus
@ -550,10 +550,12 @@ bool Workspace::allowClientActivation(const KWin::Client *c, xcb_timestamp_t tim
if (session_saving && level <= 2) { // <= normal if (session_saving && level <= 2) { // <= normal
return true; return true;
} }
Client* ac = mostRecentlyActivatedClient(); AbstractClient* ac = mostRecentlyActivatedClient();
if (focus_in) { if (focus_in) {
if (should_get_focus.contains(const_cast< Client* >(c))) if (const Client *cc = dynamic_cast<const Client*>(c)) {
return true; // FocusIn was result of KWin's action if (should_get_focus.contains(const_cast< Client* >(cc)))
return true; // FocusIn was result of KWin's action
}
// Before getting FocusIn, the active Client already // Before getting FocusIn, the active Client already
// got FocusOut, and therefore got deactivated. // got FocusOut, and therefore got deactivated.
ac = last_active_client; ac = last_active_client;
@ -573,7 +575,7 @@ bool Workspace::allowClientActivation(const KWin::Client *c, xcb_timestamp_t tim
return true; // no active client -> always allow return true; // no active client -> always allow
} }
// TODO window urgency -> return true? // TODO window urgency -> return true?
if (Client::belongToSameApplication(c, ac, true)) { if (AbstractClient::belongToSameApplication(c, ac, true)) {
qCDebug(KWIN_CORE) << "Activation: Belongs to active application"; qCDebug(KWIN_CORE) << "Activation: Belongs to active application";
return true; return true;
} }

View file

@ -157,7 +157,7 @@ public:
}; };
Q_DECLARE_FLAGS(ActivityFlags, ActivityFlag) Q_DECLARE_FLAGS(ActivityFlags, ActivityFlag)
void takeActivity(AbstractClient* 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 AbstractClient* c, xcb_timestamp_t time = -1U, bool focus_in = false,
bool ignore_desktop = false); bool ignore_desktop = false);
void restoreFocus(); void restoreFocus();
void gotFocusIn(const Client*); void gotFocusIn(const Client*);