summaryrefslogtreecommitdiffstats
path: root/src/windows/leash
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows/leash')
-rw-r--r--src/windows/leash/LeashView.cpp28
-rw-r--r--src/windows/leash/LeashView.h8
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)