diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/windows/leash/LeashView.cpp | 28 | ||||
-rw-r--r-- | src/windows/leash/LeashView.h | 8 |
2 files changed, 32 insertions, 4 deletions
diff --git a/src/windows/leash/LeashView.cpp b/src/windows/leash/LeashView.cpp index c16feeff1b..1b67937c51 100644 --- a/src/windows/leash/LeashView.cpp +++ b/src/windows/leash/LeashView.cpp @@ -44,6 +44,7 @@ IMPLEMENT_DYNCREATE(CLeashView, CFormView) BEGIN_MESSAGE_MAP(CLeashView, CFormView) //{{AFX_MSG_MAP(CLeashView) + ON_MESSAGE(WM_WARNINGPOPUP, OnWarningPopup) ON_MESSAGE(WM_GOODBYE, OnGoodbye) ON_MESSAGE(WM_TRAYICON, OnTrayIcon) ON_NOTIFY(TVN_ITEMEXPANDED, IDC_TREEVIEW, OnItemexpandedTreeview) @@ -172,7 +173,7 @@ CFormView(CLeashView::IDD) m_publicIPAddress = 0; m_autoRenewTickets = 0; m_autoRenewalAttempted = 0; - + m_pWarningMessage = NULL; m_bIconAdded = FALSE; m_bIconDeleted = FALSE; #ifndef KRB5_TC_NOTICKET @@ -2073,6 +2074,27 @@ void CLeashView::SetTrayIcon(int nim, int state) m_bIconDeleted = TRUE; } +BOOL CLeashView::PostWarningMessage(const CString& message) +{ + if (m_pWarningMessage) + { + return FALSE; // can't post more than one warning at a time + } + m_pWarningMessage = new CString(message); + PostMessage(WM_WARNINGPOPUP); + return TRUE; +} + +LRESULT CLeashView::OnWarningPopup(WPARAM wParam, LPARAM lParam) +{ + CLeashMessageBox leashMessageBox(CMainFrame::m_isMinimum ? GetDesktopWindow() : NULL, + *m_pWarningMessage, 100000); + leashMessageBox.DoModal(); + delete m_pWarningMessage; + m_pWarningMessage = NULL; + return 0L; +} + BOOL CLeashView::PreTranslateMessage(MSG* pMsg) { if ( pMsg->message == ID_OBTAIN_TGT_WITH_LPARAM ) @@ -2464,9 +2486,7 @@ BOOL CLeashView::PreTranslateMessage(MSG* pMsg) ReleaseMutex(ticketinfo.lockObj); AlarmBeep(); - CLeashMessageBox leashMessageBox(!CMainFrame::m_isMinimum ? GetDesktopWindow() : NULL, - lowTicketWarning, 100000); - leashMessageBox.DoModal(); + PostWarningMessage(lowTicketWarning); if (WaitForSingleObject( ticketinfo.lockObj, 100 ) != WAIT_OBJECT_0) throw("Unable to lock ticketinfo"); } diff --git a/src/windows/leash/LeashView.h b/src/windows/leash/LeashView.h index e469058ae0..0d9009a34c 100644 --- a/src/windows/leash/LeashView.h +++ b/src/windows/leash/LeashView.h @@ -59,6 +59,7 @@ #endif #define WM_TRAYICON (WM_USER+100) +#define WM_WARNINGPOPUP (WM_USER+101) enum ticketTimeLeft{NO_TICKETS, ZERO_MINUTES_LEFT, FIVE_MINUTES_LEFT, TEN_MINUTES_LEFT, FIFTEEN_MINUTES_LEFT, TWENTY_MINUTES_LEFT, PLENTY_OF_TIME, @@ -106,6 +107,7 @@ private: #endif INT m_hKerb5State; INT m_hAFSState; + CString* m_pWarningMessage; BOOL m_bIconAdded; BOOL m_bIconDeleted; @@ -154,6 +156,12 @@ private: static UINT InitTicket(void *); static UINT RenewTicket(void *); static UINT ImportTicket(void *); + // Queue a warning popup message. + // This is a workaround to the MFC deficiency that you cannot safely create + // a modal dialog while processing messages within AfxPreTranslateMessage() + // returns TRUE if message is queued successfully. + BOOL PostWarningMessage(const CString& message); + afx_msg LRESULT OnWarningPopup(WPARAM wParam, LPARAM lParam); protected: // create from serialization only DECLARE_DYNCREATE(CLeashView) |