make WindowsTracking activity filtering accurate

pull/6/head
Michail Vourlakos 6 years ago
parent 1b5de7d859
commit c2bfda46d3

@ -774,24 +774,38 @@ void View::setFontPixelSize(int size)
emit fontPixelSizeChanged();
}
bool View::isOnAllActivities() const
{
return m_activities.isEmpty() || m_activities[0] == "0";
}
bool View::isOnActivity(const QString &activity) const
{
return isOnAllActivities() || m_activities.contains(activity);
}
QStringList View::activities() const
{
return m_activities;
}
void View::applyActivitiesToWindows()
{
if (m_visibility && m_layout) {
QStringList activities = m_layout->appliedActivities();
m_windowsTracker->setWindowOnActivities(*this, activities);
m_windowsTracker->setWindowOnActivities(*this, m_activities);
if (m_configView) {
m_windowsTracker->setWindowOnActivities(*m_configView, activities);
m_windowsTracker->setWindowOnActivities(*m_configView, m_activities);
auto configView = qobject_cast<ViewPart::PrimaryConfigView *>(m_configView);
if (configView && configView->secondaryWindow()) {
m_windowsTracker->setWindowOnActivities(*configView->secondaryWindow(), activities);
m_windowsTracker->setWindowOnActivities(*configView->secondaryWindow(), m_activities);
}
}
if (m_visibility->supportsKWinEdges()) {
m_visibility->applyActivitiesToHiddenWindows(activities);
m_visibility->applyActivitiesToHiddenWindows(m_activities);
}
}
}
@ -829,7 +843,8 @@ void View::setLayout(Layout::GenericLayout *layout)
//! we try to catch up
QTimer::singleShot(100, [this]() {
if (m_layout && m_visibility) {
qDebug() << "DOCK VIEW FROM LAYOUT ::: " << m_layout->name() << " - activities: " << m_layout->appliedActivities();
m_activities = m_layout->appliedActivities();
qDebug() << "DOCK VIEW FROM LAYOUT ::: " << m_layout->name() << " - activities: " << m_activities;
applyActivitiesToWindows();
emit activitiesChanged();
}
@ -843,8 +858,9 @@ void View::setLayout(Layout::GenericLayout *layout)
if (latteCorona->layoutsManager()->memoryUsage() == Types::MultipleLayouts) {
connectionsLayout << connect(latteCorona->activitiesConsumer(), &KActivities::Consumer::runningActivitiesChanged, this, [&]() {
if (m_layout && m_visibility) {
m_activities = m_layout->appliedActivities();
qDebug() << "DOCK VIEW FROM LAYOUT (runningActivitiesChanged) ::: " << m_layout->name()
<< " - activities: " << m_layout->appliedActivities();
<< " - activities: " << m_activities;
applyActivitiesToWindows();
emit activitiesChanged();
}
@ -852,6 +868,7 @@ void View::setLayout(Layout::GenericLayout *layout)
connectionsLayout << connect(m_layout, &Layout::GenericLayout::activitiesChanged, this, [&]() {
if (m_layout) {
m_activities = m_layout->appliedActivities();
applyActivitiesToWindows();
emit activitiesChanged();
}
@ -859,6 +876,7 @@ void View::setLayout(Layout::GenericLayout *layout)
connectionsLayout << connect(latteCorona->layoutsManager(), &Layouts::Manager::layoutsChanged, this, [&]() {
if (m_layout) {
m_activities = m_layout->appliedActivities();
applyActivitiesToWindows();
emit activitiesChanged();
}
@ -906,6 +924,8 @@ void View::setLayout(Layout::GenericLayout *layout)
}
emit layoutChanged();
} else {
m_activities.clear();
}
}

@ -176,6 +176,10 @@ public:
QRect localGeometry() const;
void setLocalGeometry(const QRect &geometry);
bool isOnActivity(const QString &activity) const;
bool isOnAllActivities() const;
QStringList activities() const;
bool settingsWindowIsShown();
void showSettingsWindow();
@ -312,6 +316,8 @@ private:
QRect m_localGeometry;
QRect m_absoluteGeometry;
QStringList m_activities;
//! HACK: Timers in order to handle KWin faulty
//! behavior that hides Views when closing Activities
//! with no actual reason

@ -289,6 +289,7 @@ void LastActiveWindow::windowChanged(const WindowId &wid)
//! and update information accordingly with the first window found from
//! history after the removal
WindowInfoWrap winfo = m_windowsTracker->infoFor(wid);
if (winfo.isMinimized() || !m_trackedInfo->isTracking(winfo)) {
m_history.removeAll(wid);

@ -148,7 +148,8 @@ bool TrackedGeneralInfo::isTracking(const WindowInfoWrap &winfo) const
&& !winfo.isPlasmaDesktop()
&& !winfo.isMinimized()
&& winfo.isOnDesktop(m_wm->currentDesktop())
&& winfo.isOnActivity(m_wm->currentActivity()));
&& winfo.isOnActivity(m_wm->currentActivity())
&& m_view->isOnActivity(m_wm->currentActivity()));
}
}

@ -512,7 +512,7 @@ void Windows::updateViewsHints()
void Windows::updateHints(Latte::View *view)
{
if (!m_views.contains(view)) {
if (!m_views.contains(view) || !view->isOnActivity(m_wm->currentActivity())) {
return;
}

Loading…
Cancel
Save