diff options
| author | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2021-06-01 18:11:30 +0200 |
|---|---|---|
| committer | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2021-06-01 18:11:30 +0200 |
| commit | 70f8f523ad89cd8854241ed0240c5163b458bf6d (patch) | |
| tree | 2d8d6235e7d4531e1bbb8fcef9b816dee0486a88 /unity-shared | |
| parent | a6d1ac34354c80cbeff5bd6d28b9c31323da600c (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.h | 1 | ||||
| -rw-r--r-- | unity-shared/BamfApplicationManager.cpp | 20 | ||||
| -rw-r--r-- | unity-shared/BamfApplicationManager.h | 1 |
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; |
