summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Plugins/extraicons/Docs/extraicons_changelog.txt3
-rw-r--r--Plugins/extraicons/Docs/extraicons_version.txt2
-rw-r--r--Plugins/extraicons/ExtraIconGroup.cpp68
-rw-r--r--Plugins/extraicons/ExtraIconGroup.h1
-rw-r--r--Plugins/extraicons/extraicons.cpp2
5 files changed, 57 insertions, 19 deletions
diff --git a/Plugins/extraicons/Docs/extraicons_changelog.txt b/Plugins/extraicons/Docs/extraicons_changelog.txt
index 2691db4..789981b 100644
--- a/Plugins/extraicons/Docs/extraicons_changelog.txt
+++ b/Plugins/extraicons/Docs/extraicons_changelog.txt
@@ -2,6 +2,9 @@ Extra Icons Service
Changelog:
+. 0.2.4.0
+ * Fix for removing grouped icon
+
. 0.2.3.0
* Fix for initial position of icons
diff --git a/Plugins/extraicons/Docs/extraicons_version.txt b/Plugins/extraicons/Docs/extraicons_version.txt
index d375c54..9ce190c 100644
--- a/Plugins/extraicons/Docs/extraicons_version.txt
+++ b/Plugins/extraicons/Docs/extraicons_version.txt
@@ -1 +1 @@
-Extra Icons Service 0.2.3.0 \ No newline at end of file
+Extra Icons Service 0.2.4.0 \ No newline at end of file
diff --git a/Plugins/extraicons/ExtraIconGroup.cpp b/Plugins/extraicons/ExtraIconGroup.cpp
index 64edf5b..b7862e0 100644
--- a/Plugins/extraicons/ExtraIconGroup.cpp
+++ b/Plugins/extraicons/ExtraIconGroup.cpp
@@ -20,7 +20,7 @@
#include "commons.h"
ExtraIconGroup::ExtraIconGroup(const char *name) :
- ExtraIcon(name), setValidExtraIcon(false)
+ ExtraIcon(name), setValidExtraIcon(false), insideApply(false)
{
char setting[512];
mir_snprintf(setting, MAX_REGS(setting), "%s/%s", MODULE_NAME, name);
@@ -53,11 +53,13 @@ void ExtraIconGroup::rebuildIcons()
void ExtraIconGroup::applyIcon(HANDLE hContact)
{
- if (hContact == NULL)
+ if (!isEnabled() || hContact == NULL)
return;
setValidExtraIcon = false;
+ insideApply = true;
+
unsigned int i;
for (i = 0; i < items.size(); ++i)
{
@@ -67,6 +69,8 @@ void ExtraIconGroup::applyIcon(HANDLE hContact)
break;
}
+ insideApply = false;
+
DBWriteContactSettingDword(hContact, MODULE_NAME, name.c_str(), setValidExtraIcon ? items[i]->getID() : 0);
}
@@ -108,42 +112,72 @@ void ExtraIconGroup::onClick(HANDLE hContact)
int ExtraIconGroup::setIcon(int id, HANDLE hContact, void *icon)
{
+ if (insideApply)
+ {
+ for (unsigned int i = 0; i < items.size(); ++i)
+ if (items[i]->getID() == id)
+ return items[i]->setIcon(id, hContact, icon);
+
+ return -1;
+ }
+
ExtraIcon *current = getCurrentItem(hContact);
int currentPos = items.size();
- ExtraIcon *store = NULL;
int storePos = items.size();
for (unsigned int i = 0; i < items.size(); ++i)
{
if (items[i]->getID() == id)
- {
- store = items[i];
storePos = i;
- }
if (items[i] == current)
- {
currentPos = i;
- }
}
- if (store == NULL)
+ if (storePos == items.size())
{
return -1;
}
- else if (storePos < currentPos)
+ else if (storePos > currentPos)
{
- DBWriteContactSettingDword(hContact, MODULE_NAME, name.c_str(), id);
- return store->setIcon(id, hContact, icon);
+ items[storePos]->storeIcon(hContact, icon);
+ return 0;
}
- else if (storePos == currentPos) // store == current
+
+ // Ok, we have to set the icon, but we have to assert it is a valid icon
+
+ setValidExtraIcon = false;
+
+ int ret = items[storePos]->setIcon(id, hContact, icon);
+
+ if (storePos < currentPos)
{
- return store->setIcon(id, hContact, icon);
+ if (setValidExtraIcon)
+ DBWriteContactSettingDword(hContact, MODULE_NAME, name.c_str(), items[storePos]->getID());
}
- else // if (storePos > currentPos)
+ else if (storePos == currentPos)
{
- store->storeIcon(hContact, icon);
- return 0;
+ if (!setValidExtraIcon)
+ {
+ DBWriteContactSettingDword(hContact, MODULE_NAME, name.c_str(), 0);
+
+ insideApply = true;
+
+ for (++storePos; storePos < items.size(); ++storePos)
+ {
+ items[storePos]->applyIcon(hContact);
+
+ if (setValidExtraIcon)
+ break;
+ }
+
+ insideApply = false;
+
+ if (setValidExtraIcon)
+ DBWriteContactSettingDword(hContact, MODULE_NAME, name.c_str(), items[storePos]->getID());
+ }
}
+
+ return ret;
}
void ExtraIconGroup::storeIcon(HANDLE hContact, void *icon)
diff --git a/Plugins/extraicons/ExtraIconGroup.h b/Plugins/extraicons/ExtraIconGroup.h
index aa02a03..9065099 100644
--- a/Plugins/extraicons/ExtraIconGroup.h
+++ b/Plugins/extraicons/ExtraIconGroup.h
@@ -54,6 +54,7 @@ public:
protected:
std::string description;
bool setValidExtraIcon;
+ bool insideApply;
virtual ExtraIcon * getCurrentItem(HANDLE hContact) const;
};
diff --git a/Plugins/extraicons/extraicons.cpp b/Plugins/extraicons/extraicons.cpp
index cf87a3b..26dd9b5 100644
--- a/Plugins/extraicons/extraicons.cpp
+++ b/Plugins/extraicons/extraicons.cpp
@@ -24,7 +24,7 @@
PLUGININFOEX pluginInfo = {
sizeof(PLUGININFOEX),
"Extra Icons Service",
- PLUGIN_MAKE_VERSION(0,2,3,0),
+ PLUGIN_MAKE_VERSION(0,2,4,0),
"Extra Icons Service",
"Ricardo Pescuma Domenecci",
"",