Mercurial > minori
comparison dep/animone/src/strategist.cc @ 340:74e2365326c6
dep/animone: add experimental accessibility strategy
I also moved most of the functions out of util/win32.cc, because that
file is meant for things that are shared between the different functions,
and currently that is only wide string conversion helpers.
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Wed, 19 Jun 2024 23:13:55 -0400 |
parents | b1f625b0227c |
children | 886f66775f31 |
comparison
equal
deleted
inserted
replaced
339:eac06513db86 | 340:74e2365326c6 |
---|---|
1 #include <regex> | 1 #include <regex> |
2 #include <unordered_map> | 2 #include <unordered_map> |
3 | 3 |
4 #include "animone.h" | 4 #include "animone.h" |
5 #include "animone/a11y.h" | |
5 #include "animone/fd.h" | 6 #include "animone/fd.h" |
6 #include "animone/strategies.h" | 7 #include "animone/strategies.h" |
7 #include "animone/util.h" | 8 #include "animone/util.h" |
8 | 9 |
9 /* this was STUPIDLY slow in Anisthesia, oops! */ | 10 /* This file was changed lots from anisthesia. Most notably we don't use classes here |
11 * anymore, and we just pass the result vector to different function that append | |
12 * to the result (which is better imo) */ | |
10 | 13 |
11 namespace animone::internal { | 14 namespace animone::internal { |
12 | 15 |
13 static bool ApplyWindowTitleFormat(const std::string& format, std::string& title) { | 16 static bool ApplyWindowTitleFormat(const std::string& format, std::string& title) { |
14 if (format.empty()) | 17 if (format.empty()) |
43 | 46 |
44 static bool AddMedia(Result& result, const MediaInfo media_information) { | 47 static bool AddMedia(Result& result, const MediaInfo media_information) { |
45 if (media_information.value.empty()) | 48 if (media_information.value.empty()) |
46 return false; | 49 return false; |
47 | 50 |
48 Media media; | 51 Media media = { |
49 media.information.push_back(media_information); | 52 .information = {media_information} |
53 }; | |
50 result.media.push_back(std::move(media)); | 54 result.media.push_back(std::move(media)); |
51 | 55 |
52 return true; | 56 return true; |
53 } | 57 } |
58 | |
59 /* ------------------------------------------------------------------------- */ | |
60 /* strategies */ | |
54 | 61 |
55 static bool ApplyWindowTitleStrategy(std::vector<Result>& results) { | 62 static bool ApplyWindowTitleStrategy(std::vector<Result>& results) { |
56 bool success = false; | 63 bool success = false; |
57 | 64 |
58 for (auto& result : results) { | 65 for (auto& result : results) { |
92 EnumerateOpenFiles(pids, open_file_proc); | 99 EnumerateOpenFiles(pids, open_file_proc); |
93 | 100 |
94 return success; | 101 return success; |
95 } | 102 } |
96 | 103 |
104 static bool ApplyAccessibilityStrategy(std::vector<Result>& results) { | |
105 bool success = false; | |
106 | |
107 for (Result& result : results) { | |
108 auto web_browser_proc = [&result](const WebBrowserInformation& info) { | |
109 auto value = info.value; | |
110 | |
111 switch (info.type) { | |
112 case WebBrowserInformationType::Address: | |
113 AddMedia(result, {MediaInfoType::Url, value}); | |
114 break; | |
115 case WebBrowserInformationType::Title: | |
116 ApplyWindowTitleFormat(result.player.window_title_format, value); | |
117 AddMedia(result, {MediaInfoType::Title, value}); | |
118 break; | |
119 case WebBrowserInformationType::Tab: | |
120 AddMedia(result, {MediaInfoType::Tab, value}); | |
121 break; | |
122 } | |
123 }; | |
124 | |
125 success |= GetWebBrowserInformation(result.window, web_browser_proc); | |
126 } | |
127 | |
128 return success; | |
129 } | |
130 | |
131 /* ------------------------------------------------------------------------- */ | |
132 | |
97 bool ApplyStrategies(std::vector<Result>& results) { | 133 bool ApplyStrategies(std::vector<Result>& results) { |
98 bool success = false; | 134 bool success = false; |
99 | 135 |
100 success |= ApplyWindowTitleStrategy(results); | 136 success |= ApplyWindowTitleStrategy(results); |
101 success |= ApplyOpenFilesStrategy(results); | 137 success |= ApplyOpenFilesStrategy(results); |
138 success |= ApplyAccessibilityStrategy(results); | |
102 | 139 |
103 return success; | 140 return success; |
104 } | 141 } |
105 | 142 |
106 //////////////////////////////////////////////////////////////////////////////// | |
107 | |
108 } // namespace animone::internal | 143 } // namespace animone::internal |