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:
parent
dde1947461
commit
f28d759352
2 changed files with 8 additions and 6 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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*);
|
||||||
|
|
Loading…
Reference in a new issue