diff options
-rw-r--r-- | include/delphi/m_clist.inc | 16 | ||||
-rw-r--r-- | include/m_clist.h | 15 | ||||
-rw-r--r-- | src/modules/clist/clistmenus.cpp | 29 |
3 files changed, 48 insertions, 12 deletions
diff --git a/include/delphi/m_clist.inc b/include/delphi/m_clist.inc index db69c8050b..5fe6680289 100644 --- a/include/delphi/m_clist.inc +++ b/include/delphi/m_clist.inc @@ -148,6 +148,14 @@ const MS_CLIST_MODIFYMENUITEM:PAnsiChar = 'CList/ModifyMenuItem';
{
+ wParam : (HGENMENU)hMenuItem
+ lParam : (BOOL) enable = TRUE, disable = FALSE
+ Notes : changes menu item's visibility
+ Version: v0.94.2+
+ }
+ MS_CLIST_SHOWHIDEMENUITEM:PAnsiChar = 'CList/ShowHideMenuItem';
+
+ {
wParam : HCONTACT
lParam : 0
Affect : the context menu for a contact is about to be built, see notes
@@ -374,11 +382,11 @@ const to ensure that WM_COMMAND was realy from clist menu not from other menu
it is reserved range of menu ids from CLISTMENUIDMIN to CLISTMENUIDMAX
the menu items with ids outside from such range will not be processed by service.
- Moreover if you process WM_COMMAND youself and your window contains self menu
+ Moreover if you process WM_COMMAND youself and your window contains self menu
please be sure that you will not call service for non-clist menu items.
The simplest way is to ensure that your menus are not use item ids from such range.
Otherwise, you HAVE TO distinguish WM_COMMAND from clist menus and from your
- internal menu and DO NOT call MS_CLIST_MENUPROCESSCOMMAND for non clist menus.
+ internal menu and DO NOT call MS_CLIST_MENUPROCESSCOMMAND for non clist menus.
}
MPCF_CONTACTMENU = 1; // test commands from a contact menu
MPCF_MAINMENU = 2; // test commands from the main menu
@@ -467,8 +475,8 @@ const {
sent when the group get modified (created, renamed or deleted)
- or contact is moving from group to group
- wParam=hContact - NULL if operation on group
+ or contact is moving from group to group
+ wParam=hContact - NULL if operation on group
lParam=pointer to CLISTGROUPCHANGE
}
type
diff --git a/include/m_clist.h b/include/m_clist.h index 8890462108..bcf0a3aaa7 100644 --- a/include/m_clist.h +++ b/include/m_clist.h @@ -175,7 +175,7 @@ __forceinline HGENMENU Menu_AddProtoMenuItem(CLISTMENUITEM *mi) }
//modify an existing menu item v0.1.0.1+
-//wParam = (WPARAM)(HANDLE)hMenuItem
+//wParam = (WPARAM)(HGENMENU)hMenuItem
//lParam = (LPARAM)(CLISTMENUITEM*)&clmi
//returns 0 on success, nonzero on failure
//hMenuItem will have been returned by clist/add*menuItem
@@ -188,6 +188,19 @@ __forceinline HGENMENU Menu_AddProtoMenuItem(CLISTMENUITEM *mi) #define CMIM_ALL 0xF0000000
#define MS_CLIST_MODIFYMENUITEM "CList/ModifyMenuItem"
+__forceinline void Menu_ModifyItem(HGENMENU hMenuItem, CLISTMENUITEM *clmi)
+{ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuItem, (LPARAM)clmi);
+}
+
+//changes menu item's visibility v0.94.2+
+//wParam = (WPARAM)(HGENMENU)hMenuItem
+//lParam = (BOOL) enable = TRUE, disable = FALSE
+#define MS_CLIST_SHOWHIDEMENUITEM "CList/ShowHideMenuItem"
+
+__forceinline void Menu_ShowItem(HGENMENU hMenuItem, BOOL bShow)
+{ CallService(MS_CLIST_SHOWHIDEMENUITEM, (WPARAM)hMenuItem, bShow);
+}
+
//the context menu for a contact is about to be built v0.1.0.1+
//wParam = (WPARAM)(HANDLE)hContact
//lParam = 0
diff --git a/src/modules/clist/clistmenus.cpp b/src/modules/clist/clistmenus.cpp index a8b4bfd0c3..2039e7ca7f 100644 --- a/src/modules/clist/clistmenus.cpp +++ b/src/modules/clist/clistmenus.cpp @@ -657,6 +657,22 @@ INT_PTR FreeOwnerDataStatusMenu(WPARAM, LPARAM lParam) /////////////////////////////////////////////////////////////////////////////////////////
// Other menu functions
+static INT_PTR ShowHideMenuItem(WPARAM wParam, LPARAM lParam)
+{
+ PMO_IntMenuItem pimi = MO_GetIntMenuItem((HGENMENU)wParam);
+ if (pimi == NULL)
+ return 1;
+
+ TMO_MenuItem tmi = { sizeof(tmi) };
+ tmi.flags = CMIM_FLAGS + pimi->mi.flags;
+ if (lParam)
+ tmi.flags &= ~CMIF_HIDDEN;
+ else
+ tmi.flags |= CMIF_HIDDEN;
+
+ return MO_ModifyMenuItem((PMO_IntMenuItem)wParam, &tmi);
+}
+
//wparam MenuItemHandle
static INT_PTR ModifyCustomMenuItem(WPARAM wParam, LPARAM lParam)
{
@@ -694,17 +710,15 @@ INT_PTR MenuProcessCommand(WPARAM wParam, LPARAM lParam) BOOL FindMenuHanleByGlobalID(HMENU hMenu, PMO_IntMenuItem id, MenuItemData* itdat)
{
- int i;
- PMO_IntMenuItem pimi;
- MENUITEMINFO mii = {0};
- BOOL inSub = FALSE;
-
if ( !itdat)
return FALSE;
+ BOOL inSub = FALSE;
+
+ MENUITEMINFO mii = {0};
mii.cbSize = MENUITEMINFO_V4_SIZE;
mii.fMask = MIIM_SUBMENU | MIIM_DATA;
- for (i = GetMenuItemCount(hMenu)-1; i >= 0; i--) {
+ for (int i = GetMenuItemCount(hMenu)-1; i >= 0; i--) {
GetMenuItemInfo(hMenu, i, TRUE, &mii);
if (mii.fType == MFT_SEPARATOR)
continue;
@@ -714,7 +728,7 @@ BOOL FindMenuHanleByGlobalID(HMENU hMenu, PMO_IntMenuItem id, MenuItemData* itda if (inSub)
return inSub;
- pimi = MO_GetIntMenuItem((HGENMENU)mii.dwItemData);
+ PMO_IntMenuItem pimi = MO_GetIntMenuItem((HGENMENU)mii.dwItemData);
if (pimi != NULL) {
if (pimi == id) {
itdat->OwnerMenu = hMenu;
@@ -1302,6 +1316,7 @@ void InitCustomMenus(void) CreateServiceFunction(MS_CLIST_MENUBUILDCONTACT, BuildContactMenu);
CreateServiceFunction(MS_CLIST_REMOVECONTACTMENUITEM, RemoveContactMenuItem);
+ CreateServiceFunction(MS_CLIST_SHOWHIDEMENUITEM, ShowHideMenuItem);
CreateServiceFunction(MS_CLIST_MODIFYMENUITEM, ModifyCustomMenuItem);
CreateServiceFunction(MS_CLIST_MENUMEASUREITEM, MeasureMenuItem);
CreateServiceFunction(MS_CLIST_MENUDRAWITEM, DrawMenuItem);
|