Reuse existing window when a layer with the same package already exists
This commit is contained in:
parent
c4a09f75af
commit
f7be0f8747
1 changed files with 24 additions and 5 deletions
|
|
@ -19,6 +19,8 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
std::string get_package_name(const std::string &name) {
|
std::string get_package_name(const std::string &name) {
|
||||||
return name;
|
return name;
|
||||||
|
|
@ -37,6 +39,23 @@ bool is_layer_blacklisted(const std::string &name) {
|
||||||
};
|
};
|
||||||
return std::find(blacklist.begin(), blacklist.end(), name) != blacklist.end();
|
return std::find(blacklist.begin(), blacklist.end(), name) != blacklist.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ActivityInfo {
|
||||||
|
ActivityInfo(const std::string &name) :
|
||||||
|
name(name) {
|
||||||
|
std::vector<std::string> parts;
|
||||||
|
boost::split(parts, name, boost::is_any_of("/"));
|
||||||
|
if (parts.size() > 1)
|
||||||
|
package = parts[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string package;
|
||||||
|
std::string name;
|
||||||
|
};
|
||||||
|
|
||||||
|
bool from_same_package(const std::string &a, const std::string &b) {
|
||||||
|
return ActivityInfo(a).package == ActivityInfo(b).package;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<LayerManager> LayerManager::get() {
|
std::shared_ptr<LayerManager> LayerManager::get() {
|
||||||
|
|
@ -57,11 +76,11 @@ void LayerManager::post_layer(const LayerInfo &layer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
FrameBufferWindow *window = nullptr;
|
FrameBufferWindow *window = nullptr;
|
||||||
auto l = layers_.find(layer.name);
|
for (auto &l : layers_) {
|
||||||
if (l != layers_.end()) {
|
if (l.first == layer.name || from_same_package(l.first, layer.name)) {
|
||||||
printf("Using existing layer '%s'\n", layer.name.c_str());
|
window = l.second.window;
|
||||||
window = l->second.window;
|
l.second.updated = true;
|
||||||
l->second.updated = true;
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printf("New layer '%s' {%d,%d,%d,%d}\n", layer.name.c_str());
|
printf("New layer '%s' {%d,%d,%d,%d}\n", layer.name.c_str());
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue