summaryrefslogtreecommitdiff
path: root/otr/dllmain.cpp
diff options
context:
space:
mode:
authorsje <sje@4f64403b-2f21-0410-a795-97e2b3489a10>2007-06-12 02:18:11 +0000
committersje <sje@4f64403b-2f21-0410-a795-97e2b3489a10>2007-06-12 02:18:11 +0000
commit408a0da710805ea5e762fe27a7e799fdf33b89b3 (patch)
tree77052cb9bb7fcfa21ec3195b924e0eba05b6a2e6 /otr/dllmain.cpp
parentc8282e792539673d070b197d20e5e61c9dbe0b1d (diff)
added 'end session on window close' option
git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@202 4f64403b-2f21-0410-a795-97e2b3489a10
Diffstat (limited to 'otr/dllmain.cpp')
-rw-r--r--otr/dllmain.cpp58
1 files changed, 34 insertions, 24 deletions
diff --git a/otr/dllmain.cpp b/otr/dllmain.cpp
index 878688e..d3aad33 100644
--- a/otr/dllmain.cpp
+++ b/otr/dllmain.cpp
@@ -546,6 +546,32 @@ int StatusModeChange(WPARAM wParam, LPARAM lParam) {
return 0;
}
+void FinishSession(HANDLE hContact) {
+ char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ char *uname = (char *)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hContact, 0);
+ if(!proto || !uname) return; // error - just bail
+
+ lib_cs_lock();
+ ConnContext *context = otrl_context_find(otr_user_state, uname, MODULE, proto, FALSE, 0, 0, 0);
+
+ if(context && context->msgstate == OTRL_MSGSTATE_ENCRYPTED) {
+ //otrl_message_disconnect(otr_user_state, &ops, hContact, MODULE, proto, uname);
+ //SetEncryptionStatus(hContact, false);
+
+ // FINISHED is not 'unencrypted', for e.g. srmm icon (still need to be able to 'stop OTR')
+ otrl_context_force_finished(context);
+ if(options.timeout_finished) ResetFinishedTimer();
+
+ // removed - don't need a popup everytime an OTR user goes offline!
+ //char buff[512];
+ //mir_snprintf(buff, 512, Translate("User '%s' ended encrypted session"), uname);
+ //ShowPopup(Translate("OTR Information"), buff, 0);
+
+ // opdata is hContact
+ }
+ lib_cs_unlock();
+}
+
int SettingChanged(WPARAM wParam, LPARAM lParam) {
HANDLE hContact = (HANDLE)wParam;
DBCONTACTWRITESETTING *cws = (DBCONTACTWRITESETTING *)lParam;
@@ -561,30 +587,8 @@ int SettingChanged(WPARAM wParam, LPARAM lParam) {
const char *proto = cws->szModule;
StatusModeChange((WPARAM)ID_STATUS_OFFLINE, (LPARAM)proto);
return 0;
- } else {
- char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
- char *uname = (char *)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hContact, 0);
- if(!proto || !uname) return 0; // error - just bail
-
- lib_cs_lock();
- ConnContext *context = otrl_context_find(otr_user_state, uname, MODULE, proto, FALSE, 0, 0, 0);
-
- if(context && context->msgstate == OTRL_MSGSTATE_ENCRYPTED) {
- //otrl_message_disconnect(otr_user_state, &ops, hContact, MODULE, proto, uname);
- //SetEncryptionStatus(hContact, false);
-
- // FINISHED is not 'unencrypted', for e.g. srmm icon (still need to be able to 'stop OTR')
- otrl_context_force_finished(context);
- if(options.timeout_finished) ResetFinishedTimer();
-
- // removed - don't need a popup everytime an OTR user goes offline!
- //char buff[512];
- //mir_snprintf(buff, 512, Translate("User '%s' ended encrypted session"), uname);
- //ShowPopup(Translate("OTR Information"), buff, 0);
-
- // opdata is hContact
- }
- lib_cs_unlock();
+ } else if(options.end_offline) {
+ FinishSession(hContact);
}
}
@@ -1092,6 +1096,12 @@ int StopOTR(WPARAM wParam, LPARAM lParam) {
int WindowEvent(WPARAM wParam, LPARAM lParam) {
MessageWindowEventData *mwd = (MessageWindowEventData *)lParam;
+
+ if(mwd->uType == MSG_WINDOW_EVT_CLOSE && options.end_window_close) {
+ FinishSession(mwd->hContact);
+ return 0;
+ }
+
if(mwd->uType != MSG_WINDOW_EVT_OPEN) return 0;
if(!ServiceExists(MS_MSG_MODIFYICON)) return 0;