summaryrefslogtreecommitdiff
path: root/unity-shared
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2021-06-01 18:11:30 +0200
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2021-06-01 18:11:30 +0200
commit70f8f523ad89cd8854241ed0240c5163b458bf6d (patch)
tree2d8d6235e7d4531e1bbb8fcef9b816dee0486a88 /unity-shared
parenta6d1ac34354c80cbeff5bd6d28b9c31323da600c (diff)
ApplicationManager: Add function to find a window by an (unique) property
This is relevant for unique property values, otherwise we'd just return the firs window matching it.
Diffstat (limited to 'unity-shared')
-rw-r--r--unity-shared/ApplicationManager.h1
-rw-r--r--unity-shared/BamfApplicationManager.cpp20
-rw-r--r--unity-shared/BamfApplicationManager.h1
3 files changed, 22 insertions, 0 deletions
diff --git a/unity-shared/ApplicationManager.h b/unity-shared/ApplicationManager.h
index 36a4959f7..e60a56fb5 100644
--- a/unity-shared/ApplicationManager.h
+++ b/unity-shared/ApplicationManager.h
@@ -227,6 +227,7 @@ public:
virtual WindowList GetWindowsForMonitor(int monitor = -1) const = 0;
virtual ApplicationPtr GetApplicationForWindow(Window xid) const = 0;
virtual ApplicationWindowPtr GetWindowForId(Window xid) const = 0;
+ virtual ApplicationWindowPtr GetWindowForProperty(const std::string& name, const std::string& value) const = 0;
virtual void FocusWindowGroup(WindowList const&, bool show_on_visible, int monitor) const = 0;
sigc::signal<void, ApplicationPtr const&> application_started;
diff --git a/unity-shared/BamfApplicationManager.cpp b/unity-shared/BamfApplicationManager.cpp
index 5973bd031..fb580ef75 100644
--- a/unity-shared/BamfApplicationManager.cpp
+++ b/unity-shared/BamfApplicationManager.cpp
@@ -730,6 +730,26 @@ ApplicationWindowPtr Manager::GetWindowForId(Window xid) const
return nullptr;
}
+ApplicationWindowPtr Manager::GetWindowForProperty(std::string const& name, std::string const& value) const
+{
+ if (name.empty())
+ return nullptr;
+
+ for (auto const& win_pair : pool::wins_)
+ {
+ if (win_pair.second->property(name) == value)
+ return win_pair.second;
+ }
+
+ for (auto const& win : GetWindowsForMonitor())
+ {
+ if (win->property(name) == value)
+ return win;
+ }
+
+ return nullptr;
+}
+
ApplicationList Manager::GetRunningApplications() const
{
ApplicationList result;
diff --git a/unity-shared/BamfApplicationManager.h b/unity-shared/BamfApplicationManager.h
index 822a3b0b2..eac6d2508 100644
--- a/unity-shared/BamfApplicationManager.h
+++ b/unity-shared/BamfApplicationManager.h
@@ -173,6 +173,7 @@ public:
WindowList GetWindowsForMonitor(int monitor = -1) const override;
ApplicationPtr GetApplicationForWindow(Window xid) const override;
ApplicationWindowPtr GetWindowForId(Window xid) const override;
+ ApplicationWindowPtr GetWindowForProperty(const std::string& name, const std::string& value) const override;
ApplicationPtr EnsureApplication(BamfView*) const;
ApplicationWindowPtr EnsureWindow(BamfView*) const;