summaryrefslogtreecommitdiff
path: root/lib/icon_buffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/icon_buffer.cpp')
-rw-r--r--lib/icon_buffer.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/lib/icon_buffer.cpp b/lib/icon_buffer.cpp
index 9274a0b4..1d391dfc 100644
--- a/lib/icon_buffer.cpp
+++ b/lib/icon_buffer.cpp
@@ -97,7 +97,6 @@ public:
wxIcon newIcon; //attention: wxIcon uses reference counting!
#ifdef FFS_WIN
newIcon.SetHICON(clone.handle_);
-
{
//this block costs ~0.04 ms
ICONINFO icoInfo = {};
@@ -129,8 +128,14 @@ public:
//no stretching for now
//newIcon.SetSize(expectedSize, expectedSize); //icon is stretched to this size if referenced HICON differs
-#elif defined FFS_LINUX //
- newIcon.SetPixbuf(clone.handle_); // transfer ownership!!
+#elif defined FFS_LINUX
+ // transfer ownership!!
+#if wxCHECK_VERSION(2, 9, 4)
+ newIcon.CopyFromBitmap(wxBitmap(clone.handle_));
+#else
+ newIcon.SetPixbuf(clone.handle_);
+#endif
+
#endif //
clone.handle_ = nullptr; //
return newIcon;
@@ -273,8 +278,8 @@ IconHolder getGenericFileIcon(IconBuffer::IconSize sz)
const int requestedSize = cvrtSize(sz);
if (GtkIconTheme* defaultTheme = gtk_icon_theme_get_default()) //not owned!
- for (auto iter = std::begin(mimeFileIcons); iter != std::end(mimeFileIcons); ++iter)
- if (GdkPixbuf* pixBuf = gtk_icon_theme_load_icon(defaultTheme, *iter, requestedSize, GTK_ICON_LOOKUP_USE_BUILTIN, nullptr))
+ for (auto it = std::begin(mimeFileIcons); it != std::end(mimeFileIcons); ++it)
+ if (GdkPixbuf* pixBuf = gtk_icon_theme_load_icon(defaultTheme, *it, requestedSize, GTK_ICON_LOOKUP_USE_BUILTIN, nullptr))
return IconHolder(pixBuf); //pass ownership (may be nullptr)
return IconHolder();
#endif
@@ -374,10 +379,8 @@ IconHolder getGenericDirectoryIcon(IconBuffer::IconSize sz)
#endif
}
-
//################################################################################################################################################
-
//---------------------- Shared Data -------------------------
class WorkLoad
{
@@ -400,7 +403,8 @@ public:
boost::unique_lock<boost::mutex> dummy(lockFiles);
filesToLoad = newLoad;
}
- conditionNewFiles.notify_one();
+
+ conditionNewFiles.notify_all(); //instead of notify_one(); workaround bug: https://svn.boost.org/trac/boost/ticket/7796
//condition handling, see: http://www.boost.org/doc/libs/1_43_0/doc/html/thread/synchronization.html#thread.synchronization.condvar_ref
}
@@ -411,7 +415,7 @@ private:
};
-typedef std::map<Zstring, IconHolder, LessFilename> NameIconMap; //entryName/icon -> note: Zstring is thread-safe
+typedef std::map<Zstring, IconHolder, LessFilename> NameIconMap; //entryName/icon -> note: Zstring is "thread-safe like an int"
typedef std::queue<Zstring> IconDbSequence; //entryName
class Buffer
@@ -421,11 +425,11 @@ public:
{
boost::lock_guard<boost::mutex> dummy(lockBuffer);
- auto iter = iconMappping.find(fileName);
- if (iter != iconMappping.end())
+ auto it = iconMappping.find(fileName);
+ if (it != iconMappping.end())
{
if (icon != nullptr)
- *icon = iter->second;
+ *icon = it->second;
return true;
}
return false;
bgstack15