Reuse existing window when a layer with the same package already exists

This commit is contained in:
Simon Fels 2016-11-08 09:47:15 +01:00
commit f7be0f8747

View file

@ -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());