diff options
Diffstat (limited to 'src/mir_app/src/chat_svc.cpp')
-rw-r--r-- | src/mir_app/src/chat_svc.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/mir_app/src/chat_svc.cpp b/src/mir_app/src/chat_svc.cpp index 4f941372a6..d51b9b6487 100644 --- a/src/mir_app/src/chat_svc.cpp +++ b/src/mir_app/src/chat_svc.cpp @@ -797,12 +797,18 @@ static HGENMENU hJoinMenuItem, hLeaveMenuItem, hMuteRootMenuItem, hMute0MenuItem static INT_PTR JoinChat(WPARAM hContact, LPARAM lParam)
{
if (hContact) {
- char *szProto = Proto_GetBaseAccountName(hContact);
- if (szProto) {
- if (db_get_w(hContact, szProto, "Status", 0) == ID_STATUS_OFFLINE)
- CallProtoService(szProto, PS_JOINCHAT, hContact, lParam);
- else
- RoomDoubleclicked(hContact, 0);
+ if (char *szProto = Proto_GetBaseAccountName(hContact)) {
+ if (Proto_GetStatus(szProto) != ID_STATUS_OFFLINE) {
+ if (db_get_w(hContact, szProto, "Status", 0) == ID_STATUS_OFFLINE)
+ CallProtoService(szProto, PS_JOINCHAT, hContact, lParam);
+ else
+ RoomDoubleclicked(hContact, 0);
+ }
+ else {
+ auto *pMM = MM_FindModule(szProto);
+ if (pMM->bDatabase)
+ CallService(MS_HISTORY_SHOWCONTACTHISTORY, hContact, 0);
+ }
}
}
@@ -904,6 +910,12 @@ static int PrebuildContactMenu(WPARAM hContact, LPARAM) Menu_ModifyItem(hJoinMenuItem, LPGENW("&Open/close chat window"));
}
}
+ else if (auto *pMM = MM_FindModule(szProto))
+ if (pMM->bDatabase) {
+ bEnabledJoin = true;
+ Menu_ModifyItem(hJoinMenuItem, LPGENW("&History"));
+ }
+
bEnabledLeave = ProtoServiceExists(szProto, PS_LEAVECHAT) != 0;
}
}
|