From 9e9aded042fcf8b1d9806a3e59a45613d0099b71 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 20 Apr 2018 19:47:15 +0300 Subject: fix for setting container's name --- src/core/stdmsg/src/chat_window.cpp | 6 ++- src/core/stdmsg/src/msgdialog.cpp | 95 +++++++++++++++++++++---------------- src/core/stdmsg/src/msgs.h | 3 +- 3 files changed, 61 insertions(+), 43 deletions(-) (limited to 'src/core/stdmsg') diff --git a/src/core/stdmsg/src/chat_window.cpp b/src/core/stdmsg/src/chat_window.cpp index f6644e82df..8ae395baff 100644 --- a/src/core/stdmsg/src/chat_window.cpp +++ b/src/core/stdmsg/src/chat_window.cpp @@ -96,7 +96,7 @@ void CChatRoomDlg::onActivate() g_Settings.iWidth = wp.rcNormalPosition.right - wp.rcNormalPosition.left; g_Settings.iHeight = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top; - SendMessage(m_hwnd, DM_UPDATETITLE, 0, 0); + UpdateTitle(); pci->SetActiveSession(m_si); UpdateStatusBar(); @@ -1166,6 +1166,10 @@ INT_PTR CChatRoomDlg::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) SetFocus(m_message.GetHwnd()); break; + case DM_UPDATETITLE: + UpdateTitle(); + break; + case DM_CLOSETAB: CloseTab(); break; diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp index 53c8179620..cc656c7754 100644 --- a/src/core/stdmsg/src/msgdialog.cpp +++ b/src/core/stdmsg/src/msgdialog.cpp @@ -372,7 +372,7 @@ void CSrmmWindow::OnOptionsApplied(bool bUpdateAvatar) m_btnOk.Enable(GetWindowTextLength(m_message.GetHwnd()) != 0); if (m_avatarPic == nullptr || !g_dat.bShowAvatar) m_avatar.Hide(); - SendMessage(m_hwnd, DM_UPDATETITLE, 0, 0); + UpdateTitle(); Resize(); if (m_hBkgBrush) @@ -576,6 +576,27 @@ void CSrmmWindow::SetStatusText(const wchar_t *wszText, HICON hIcon) SendMessage(m_pOwner->m_hwndStatus, SB_SETTEXT, 0, (LPARAM)(wszText == nullptr ? L"" : wszText)); } +void CSrmmWindow::UpdateIcon(WPARAM wParam) +{ + if (!m_hContact || !m_szProto) + return; + + DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING *)wParam; + if (!cws || (!mir_strcmp(cws->szModule, m_szProto) && !mir_strcmp(cws->szSetting, "Status"))) { + if (m_szProto) { + HICON hIcon = Skin_LoadProtoIcon(m_szProto, m_wStatus); + if (hIcon) { + if (m_hStatusIcon) + IcoLib_ReleaseIcon(m_hStatusIcon); + m_hStatusIcon = hIcon; + SendDlgItemMessage(m_hwnd, IDC_USERMENU, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon); + } + } + if (g_dat.bUseStatusWinIcon) + SendMessage(m_hwnd, DM_UPDATEWINICON, 0, 0); + } +} + void CSrmmWindow::UpdateReadChars() { if (g_dat.bShowReadChar) { @@ -587,6 +608,31 @@ void CSrmmWindow::UpdateReadChars() } } +void CSrmmWindow::UpdateTitle() +{ + wchar_t newtitle[256]; + if (m_hContact && m_szProto) { + m_wStatus = db_get_w(m_hContact, m_szProto, "Status", ID_STATUS_OFFLINE); + wchar_t *contactName = Clist_GetContactDisplayName(m_hContact); + + wchar_t *szStatus = Clist_GetStatusModeDescription(m_szProto == nullptr ? ID_STATUS_OFFLINE : db_get_w(m_hContact, m_szProto, "Status", ID_STATUS_OFFLINE), 0); + if (g_dat.bUseStatusWinIcon) + mir_snwprintf(newtitle, L"%s - %s", contactName, TranslateT("Message session")); + else + mir_snwprintf(newtitle, L"%s (%s): %s", contactName, szStatus, TranslateT("Message session")); + + m_wOldStatus = m_wStatus; + } + else mir_wstrncpy(newtitle, TranslateT("Message session"), _countof(newtitle)); + + wchar_t oldtitle[256]; + GetWindowText(m_hwnd, oldtitle, _countof(oldtitle)); + if (mir_wstrcmp(newtitle, oldtitle)) { //swt() flickers even if the title hasn't actually changed + SetWindowText(m_pOwner->GetHwnd(), newtitle); + Resize(); + } +} + ///////////////////////////////////////////////////////////////////////////////////////// int CSrmmWindow::Resizer(UTILRESIZECONTROL *urc) @@ -1011,45 +1057,6 @@ INT_PTR CSrmmWindow::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) OnOptionsApplied(wParam != 0); break; - case DM_UPDATETITLE: - wchar_t newtitle[256]; - if (m_hContact && m_szProto) { - m_wStatus = db_get_w(m_hContact, m_szProto, "Status", ID_STATUS_OFFLINE); - wchar_t *contactName = Clist_GetContactDisplayName(m_hContact); - - wchar_t *szStatus = Clist_GetStatusModeDescription(m_szProto == nullptr ? ID_STATUS_OFFLINE : db_get_w(m_hContact, m_szProto, "Status", ID_STATUS_OFFLINE), 0); - if (g_dat.bUseStatusWinIcon) - mir_snwprintf(newtitle, L"%s - %s", contactName, TranslateT("Message session")); - else - mir_snwprintf(newtitle, L"%s (%s): %s", contactName, szStatus, TranslateT("Message session")); - - DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING *)wParam; - if (!cws || (!mir_strcmp(cws->szModule, m_szProto) && !mir_strcmp(cws->szSetting, "Status"))) { - if (m_szProto) { - HICON hIcon = Skin_LoadProtoIcon(m_szProto, m_wStatus); - if (hIcon) { - if (m_hStatusIcon) - IcoLib_ReleaseIcon(m_hStatusIcon); - m_hStatusIcon = hIcon; - SendDlgItemMessage(m_hwnd, IDC_USERMENU, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon); - } - } - if (g_dat.bUseStatusWinIcon) - SendMessage(m_hwnd, DM_UPDATEWINICON, 0, 0); - } - - m_wOldStatus = m_wStatus; - } - else mir_wstrncpy(newtitle, TranslateT("Message session"), _countof(newtitle)); - - wchar_t oldtitle[256]; - GetWindowText(m_hwnd, oldtitle, _countof(oldtitle)); - if (mir_wstrcmp(newtitle, oldtitle)) { //swt() flickers even if the title hasn't actually changed - SetWindowText(m_pOwner->GetHwnd(), newtitle); - Resize(); - } - break; - case DM_NEWTIMEZONE: m_hTimeZone = TimeZone_CreateByContact(m_hContact, nullptr, TZF_KNOWNONLY); m_wMinute = 61; @@ -1076,7 +1083,7 @@ INT_PTR CSrmmWindow::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) SetFocus(m_message.GetHwnd()); // fall through case WM_MOUSEACTIVATE: - SendMessage(m_hwnd, DM_UPDATETITLE, 0, 0); + UpdateTitle(); if (KillTimer(m_hwnd, TIMERID_FLASHWND)) FlashWindow(m_pOwner->GetHwnd(), FALSE); break; @@ -1389,6 +1396,12 @@ INT_PTR CSrmmWindow::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) } break; + case DM_UPDATETITLE: + if (wParam) + UpdateIcon(wParam); + UpdateTitle(); + break; + case DM_CLOSETAB: CloseTab(); break; diff --git a/src/core/stdmsg/src/msgs.h b/src/core/stdmsg/src/msgs.h index 2c14795074..cc1c72b125 100644 --- a/src/core/stdmsg/src/msgs.h +++ b/src/core/stdmsg/src/msgs.h @@ -76,6 +76,7 @@ class CSrmmWindow : public CMsgDialog void ShowTime(void); void SetupStatusBar(void); void StreamInEvents(MEVENT hDbEventFirst, int count, bool bAppend); + void UpdateIcon(WPARAM wParam); char *m_szProto; HICON m_hStatusIcon = nullptr; @@ -123,7 +124,7 @@ public: virtual void LoadSettings() override {} virtual void ScrollToBottom() override; virtual void SetStatusText(const wchar_t*, HICON) override; - virtual void UpdateTitle() override {} + virtual void UpdateTitle() override; void OnSplitterMoved(CSplitter*); -- cgit v1.2.3