summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/bemenu.h2
-rw-r--r--lib/menu.c10
2 files changed, 7 insertions, 5 deletions
diff --git a/lib/bemenu.h b/lib/bemenu.h
index 9ef684f..37c7d1e 100644
--- a/lib/bemenu.h
+++ b/lib/bemenu.h
@@ -252,8 +252,6 @@ bmItem* bmMenuGetHighlightedItem(const bmMenu *menu);
/**
* Set selected items to bmMenu instance.
*
- * @warning The list won't be copied, do not free it.
- *
* @param menu bmMenu instance where items will be set.
* @param items Array of bmItem pointers to set.
* @param nmemb Total count of items in array.
diff --git a/lib/menu.c b/lib/menu.c
index f414772..e31c25f 100644
--- a/lib/menu.c
+++ b/lib/menu.c
@@ -346,8 +346,6 @@ bmItem* bmMenuGetHighlightedItem(const bmMenu *menu)
/**
* Set selected items to bmMenu instance.
*
- * @warning The list won't be copied, do not free it.
- *
* @param menu bmMenu instance where items will be set.
* @param items Array of bmItem pointers to set.
* @param nmemb Total count of items in array.
@@ -356,7 +354,13 @@ bmItem* bmMenuGetHighlightedItem(const bmMenu *menu)
int bmMenuSetSelectedItems(bmMenu *menu, bmItem **items, unsigned int nmemb)
{
assert(menu);
- return _bmItemListSetItemsNoCopy(&menu->selection, items, nmemb);
+
+ bmItem **newItems;
+ if (!(newItems = calloc(sizeof(bmItem*), nmemb)))
+ return 0;
+
+ memcpy(newItems, items, sizeof(bmItem*) * nmemb);
+ return _bmItemListSetItemsNoCopy(&menu->selection, newItems, nmemb);
}
/**