diff options
Diffstat (limited to 'src')
60 files changed, 769 insertions, 883 deletions
diff --git a/src/core/stdautoaway/src/autoaway.cpp b/src/core/stdautoaway/src/autoaway.cpp index c1ebc6bbe5..c21b77253f 100644 --- a/src/core/stdautoaway/src/autoaway.cpp +++ b/src/core/stdautoaway/src/autoaway.cpp @@ -47,8 +47,8 @@ static void Proto_SetStatus(const char *szProto, unsigned status) static int AutoAwayEvent(WPARAM, LPARAM lParam)
{
- MIRANDA_IDLE_INFO mii = { sizeof(mii) };
- CallService(MS_IDLE_GETIDLEINFO, 0, (LPARAM)&mii);
+ MIRANDA_IDLE_INFO mii;
+ Idle_GetInfo(mii);
if (mii.idlesoundsoff)
iBreakSounds = (lParam & IDF_ISIDLE) != 0;
diff --git a/src/core/stdautoaway/src/main.cpp b/src/core/stdautoaway/src/main.cpp index 58f414e5ac..16bf735564 100644 --- a/src/core/stdautoaway/src/main.cpp +++ b/src/core/stdautoaway/src/main.cpp @@ -32,7 +32,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stdautoaway/src/version.h b/src/core/stdautoaway/src/version.h index 84fee2edca..3952127b07 100644 --- a/src/core/stdautoaway/src/version.h +++ b/src/core/stdautoaway/src/version.h @@ -7,6 +7,5 @@ #define __FILENAME "stdautoaway.dll"
#define __DESCRIPTION "Core module for away state processing."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdAutoAway/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/core/stdaway/src/main.cpp b/src/core/stdaway/src/main.cpp index c176bff75e..3ab44e8bd4 100644 --- a/src/core/stdaway/src/main.cpp +++ b/src/core/stdaway/src/main.cpp @@ -33,7 +33,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stdaway/src/sendmsg.cpp b/src/core/stdaway/src/sendmsg.cpp index af476d6a07..e6df6ddea6 100644 --- a/src/core/stdaway/src/sendmsg.cpp +++ b/src/core/stdaway/src/sendmsg.cpp @@ -27,42 +27,41 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. static DWORD protoModeMsgFlags;
static HWND hwndStatusMsg;
-static const wchar_t *GetDefaultMessage(int status)
+static const wchar_t* GetDefaultMessage(int status)
{
- switch(status) {
- case ID_STATUS_AWAY: return TranslateT("I've been away since %time%.");
- case ID_STATUS_NA: return TranslateT("Give it up, I'm not in!");
- case ID_STATUS_OCCUPIED: return TranslateT("Not right now.");
- case ID_STATUS_DND: return TranslateT("Give a guy some peace, would ya?");
- case ID_STATUS_FREECHAT: return TranslateT("I'm a chatbot!");
- case ID_STATUS_ONLINE: return TranslateT("Yep, I'm here.");
- case ID_STATUS_OFFLINE: return TranslateT("Nope, not here.");
- case ID_STATUS_INVISIBLE: return TranslateT("I'm hiding from the mafia.");
+ switch (status) {
+ case ID_STATUS_AWAY: return TranslateT("I've been away since %time%.");
+ case ID_STATUS_NA: return TranslateT("Give it up, I'm not in!");
+ case ID_STATUS_OCCUPIED: return TranslateT("Not right now.");
+ case ID_STATUS_DND: return TranslateT("Give a guy some peace, would ya?");
+ case ID_STATUS_FREECHAT: return TranslateT("I'm a chatbot!");
+ case ID_STATUS_ONLINE: return TranslateT("Yep, I'm here.");
+ case ID_STATUS_OFFLINE: return TranslateT("Nope, not here.");
+ case ID_STATUS_INVISIBLE: return TranslateT("I'm hiding from the mafia.");
case ID_STATUS_ONTHEPHONE: return TranslateT("That'll be the phone.");
case ID_STATUS_OUTTOLUNCH: return TranslateT("Mmm... food.");
- case ID_STATUS_IDLE: return TranslateT("idleeeeeeee");
+ case ID_STATUS_IDLE: return TranslateT("idleeeeeeee");
}
return nullptr;
}
-static const char *StatusModeToDbSetting(int status, const char *suffix)
+static const char* StatusModeToDbSetting(int status, const char *suffix)
{
const char *prefix;
static char str[64];
- switch(status)
- {
- case ID_STATUS_AWAY: prefix = "Away"; break;
- case ID_STATUS_NA: prefix = "Na"; break;
- case ID_STATUS_DND: prefix = "Dnd"; break;
- case ID_STATUS_OCCUPIED: prefix = "Occupied"; break;
- case ID_STATUS_FREECHAT: prefix = "FreeChat"; break;
- case ID_STATUS_ONLINE: prefix = "On"; break;
- case ID_STATUS_OFFLINE: prefix = "Off"; break;
- case ID_STATUS_INVISIBLE: prefix = "Inv"; break;
- case ID_STATUS_ONTHEPHONE: prefix = "Otp"; break;
- case ID_STATUS_OUTTOLUNCH: prefix = "Otl"; break;
- case ID_STATUS_IDLE: prefix = "Idl"; break;
+ switch (status) {
+ case ID_STATUS_AWAY: prefix = "Away"; break;
+ case ID_STATUS_NA: prefix = "Na"; break;
+ case ID_STATUS_DND: prefix = "Dnd"; break;
+ case ID_STATUS_OCCUPIED: prefix = "Occupied"; break;
+ case ID_STATUS_FREECHAT: prefix = "FreeChat"; break;
+ case ID_STATUS_ONLINE: prefix = "On"; break;
+ case ID_STATUS_OFFLINE: prefix = "Off"; break;
+ case ID_STATUS_INVISIBLE: prefix = "Inv"; break;
+ case ID_STATUS_ONTHEPHONE: prefix = "Otp"; break;
+ case ID_STATUS_OUTTOLUNCH: prefix = "Otl"; break;
+ case ID_STATUS_IDLE: prefix = "Idl"; break;
default: return nullptr;
}
mir_snprintf(str, "%s%s", prefix, suffix);
@@ -84,26 +83,26 @@ static wchar_t* GetAwayMessage(int statusMode, char *szProto) if (szProto && !(CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_3, 0) & Proto_Status2Flag(statusMode)))
return nullptr;
- if ( GetStatusModeByte(statusMode, "Ignore"))
+ if (GetStatusModeByte(statusMode, "Ignore"))
return nullptr;
DBVARIANT dbv;
- if ( GetStatusModeByte(statusMode, "UsePrev")) {
- if ( db_get_ws(NULL, "SRAway", StatusModeToDbSetting(statusMode, "Msg"), &dbv))
+ if (GetStatusModeByte(statusMode, "UsePrev")) {
+ if (db_get_ws(NULL, "SRAway", StatusModeToDbSetting(statusMode, "Msg"), &dbv))
dbv.ptszVal = mir_wstrdup(GetDefaultMessage(statusMode));
}
else {
- if ( db_get_ws(NULL, "SRAway", StatusModeToDbSetting(statusMode, "Default"), &dbv))
+ if (db_get_ws(NULL, "SRAway", StatusModeToDbSetting(statusMode, "Default"), &dbv))
dbv.ptszVal = mir_wstrdup(GetDefaultMessage(statusMode));
- for (int i=0; dbv.ptszVal[i]; i++) {
+ for (int i = 0; dbv.ptszVal[i]; i++) {
if (dbv.ptszVal[i] != '%')
continue;
wchar_t substituteStr[128];
- if ( !wcsnicmp(dbv.ptszVal + i, L"%time%", 6)) {
- MIRANDA_IDLE_INFO mii = { sizeof(mii) };
- CallService(MS_IDLE_GETIDLEINFO, 0, (LPARAM)&mii);
+ if (!wcsnicmp(dbv.ptszVal + i, L"%time%", 6)) {
+ MIRANDA_IDLE_INFO mii;
+ Idle_GetInfo(mii);
if (mii.idleType == 1) {
int mm;
@@ -117,14 +116,14 @@ static wchar_t* GetAwayMessage(int statusMode, char *szProto) }
else GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, NULL, NULL, substituteStr, _countof(substituteStr));
}
- else if ( !wcsnicmp(dbv.ptszVal + i, L"%date%", 6))
+ else if (!wcsnicmp(dbv.ptszVal + i, L"%date%", 6))
GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, NULL, NULL, substituteStr, _countof(substituteStr));
else continue;
if (mir_wstrlen(substituteStr) > 6)
dbv.ptszVal = (wchar_t*)mir_realloc(dbv.ptszVal, (mir_wstrlen(dbv.ptszVal) + 1 + mir_wstrlen(substituteStr) - 6) * sizeof(wchar_t));
memmove(dbv.ptszVal + i + mir_wstrlen(substituteStr), dbv.ptszVal + i + 6, (mir_wstrlen(dbv.ptszVal) - i - 5) * sizeof(wchar_t));
- memcpy(dbv.ptszVal+i, substituteStr, mir_wstrlen(substituteStr) * sizeof(wchar_t));
+ memcpy(dbv.ptszVal + i, substituteStr, mir_wstrlen(substituteStr) * sizeof(wchar_t));
}
}
return dbv.ptszVal;
@@ -132,10 +131,9 @@ static wchar_t* GetAwayMessage(int statusMode, char *szProto) static LRESULT CALLBACK MessageEditSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- switch(msg) {
+ switch (msg) {
case WM_CHAR:
- if (wParam == '\n' && GetKeyState(VK_CONTROL) & 0x8000)
- {
+ if (wParam == '\n' && GetKeyState(VK_CONTROL) & 0x8000) {
PostMessage(GetParent(hwnd), WM_COMMAND, IDOK, 0);
return 0;
}
@@ -321,7 +319,7 @@ static int StatusModeChange(WPARAM wParam, LPARAM lParam) // If its a single protocol check the PFLAGNUM_3 for the single protocol
if (!(CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_1, 0) & PF1_MODEMSGSEND) ||
!(CallProtoService(szProto, PS_GETCAPS, PFLAGNUM_3, 0) & Proto_Status2Flag(statusMode)))
- return 0;
+ return 0;
}
BOOL bScreenSaverRunning = IsScreenSaverRunning();
@@ -539,7 +537,7 @@ static int AwayMsgSendAccountsChanged(WPARAM, LPARAM) protoModeMsgFlags = 0;
int nAccounts;
- PROTOACCOUNT** accounts;
+ PROTOACCOUNT **accounts;
Proto_EnumAccounts(&nAccounts, &accounts);
for (int i = 0; i < nAccounts; i++) {
if (!Proto_IsAccountEnabled(accounts[i]))
@@ -560,7 +558,7 @@ static int AwayMsgSendModulesLoaded(WPARAM, LPARAM) return 0;
}
-//remember to mir_free() the return value
+// remember to mir_free() the return value
static INT_PTR sttGetAwayMessageT(WPARAM wParam, LPARAM lParam)
{
return (INT_PTR)GetAwayMessage((int)wParam, (char*)lParam);
diff --git a/src/core/stdaway/src/version.h b/src/core/stdaway/src/version.h index c611618b3a..54199a498b 100644 --- a/src/core/stdaway/src/version.h +++ b/src/core/stdaway/src/version.h @@ -7,6 +7,5 @@ #define __FILENAME "stdaway.dll"
#define __DESCRIPTION "Core module for the away messages processing."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdAway/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/core/stdclist/src/init.cpp b/src/core/stdclist/src/init.cpp index e9a5b547f0..7fb57bdec1 100644 --- a/src/core/stdclist/src/init.cpp +++ b/src/core/stdclist/src/init.cpp @@ -58,7 +58,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stdclist/src/version.h b/src/core/stdclist/src/version.h index ba56c650ec..07fceac156 100644 --- a/src/core/stdclist/src/version.h +++ b/src/core/stdclist/src/version.h @@ -8,6 +8,5 @@ #define __FILENAME "stdclist.dll"
#define __DESCRIPTION "Core module for displaying contacts."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdClist/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/core/stdcrypt/src/main.cpp b/src/core/stdcrypt/src/main.cpp index 48983fceb7..a9805b82d6 100644 --- a/src/core/stdcrypt/src/main.cpp +++ b/src/core/stdcrypt/src/main.cpp @@ -31,7 +31,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stdcrypt/src/version.h b/src/core/stdcrypt/src/version.h index a45c96afb9..f2a287aa7b 100644 --- a/src/core/stdcrypt/src/version.h +++ b/src/core/stdcrypt/src/version.h @@ -7,6 +7,5 @@ #define __FILENAME "stdcrypt.dll"
#define __DESCRIPTION "Core module for encryption."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdCrypt/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/core/stdemail/src/main.cpp b/src/core/stdemail/src/main.cpp index f4a3299c77..4bb4247596 100644 --- a/src/core/stdemail/src/main.cpp +++ b/src/core/stdemail/src/main.cpp @@ -32,7 +32,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stdemail/src/version.h b/src/core/stdemail/src/version.h index 1dbb386bea..c2ebdc6ab8 100644 --- a/src/core/stdemail/src/version.h +++ b/src/core/stdemail/src/version.h @@ -7,6 +7,5 @@ #define __FILENAME "stdemail.dll"
#define __DESCRIPTION "Core module for e-mail urls handling."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdEmail/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/core/stdfile/src/filerecvdlg.cpp b/src/core/stdfile/src/filerecvdlg.cpp index 49d1fcd3b1..9feef53743 100644 --- a/src/core/stdfile/src/filerecvdlg.cpp +++ b/src/core/stdfile/src/filerecvdlg.cpp @@ -346,15 +346,10 @@ INT_PTR CALLBACK DlgProcRecvFile(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM l break;
case IDC_ADD:
- {
- ADDCONTACTSTRUCT acs = { 0 };
- acs.hContact = dat->hContact;
- acs.handleType = HANDLE_CONTACT;
- acs.szProto = "";
- CallService(MS_ADDCONTACT_SHOW, (WPARAM)hwndDlg, (LPARAM)&acs);
- if (!db_get_b(dat->hContact, "CList", "NotOnList", 0))
- ShowWindow(GetDlgItem(hwndDlg, IDC_ADD), SW_HIDE);
- }
+ Contact_Add(dat->hContact, hwndDlg);
+
+ if (!db_get_b(dat->hContact, "CList", "NotOnList", 0))
+ ShowWindow(GetDlgItem(hwndDlg, IDC_ADD), SW_HIDE);
break;
case IDC_USERMENU:
diff --git a/src/core/stdfile/src/main.cpp b/src/core/stdfile/src/main.cpp index 2e3c002907..67ae29ac03 100644 --- a/src/core/stdfile/src/main.cpp +++ b/src/core/stdfile/src/main.cpp @@ -35,7 +35,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stdfile/src/stdafx.h b/src/core/stdfile/src/stdafx.h index cc4b8d3742..512cc93ad7 100644 --- a/src/core/stdfile/src/stdafx.h +++ b/src/core/stdfile/src/stdafx.h @@ -60,7 +60,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include <m_message.h>
#include <m_userinfo.h>
#include <m_history.h>
-#include <m_addcontact.h>
#include <m_findadd.h>
#include <m_file.h>
#include <m_icolib.h>
diff --git a/src/core/stdfile/src/version.h b/src/core/stdfile/src/version.h index 61ada99635..54750eb07e 100644 --- a/src/core/stdfile/src/version.h +++ b/src/core/stdfile/src/version.h @@ -7,6 +7,5 @@ #define __FILENAME "stdfile.dll"
#define __DESCRIPTION "Core module for sending/receiving files."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdFile/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/core/stdidle/res/resource.rc b/src/core/stdidle/res/resource.rc index ebecfa7b37..1b926065de 100644 --- a/src/core/stdidle/res/resource.rc +++ b/src/core/stdidle/res/resource.rc @@ -35,7 +35,7 @@ BEGIN CONTROL "Windows",IDC_IDLEONWINDOWS,"Button",BS_AUTORADIOBUTTON,45,31,104,9
CONTROL "Miranda",IDC_IDLEONMIRANDA,"Button",BS_AUTORADIOBUTTON,45,43,103,9
EDITTEXT IDC_IDLE1STTIME,59,59,27,14,ES_AUTOHSCROLL | ES_NUMBER
- CONTROL "Spin2",IDC_IDLESPIN,"msctls_updown32",UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,71,55,12,23
+ CONTROL "Spin2",IDC_IDLESPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,86,59,11,14
CONTROL "Become idle if the screen saver is active",IDC_SCREENSAVER,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,83,265,9
CONTROL "Become idle if the computer is locked",IDC_LOCKED,
@@ -44,7 +44,7 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,116,265,10
CONTROL "Do not let protocols report any idle information",IDC_IDLEPRIVATE,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,131,251,9
- LTEXT "minute(s)",IDC_STATIC,91,61,76,9
+ LTEXT "minute(s)",IDC_STATIC,99,61,76,9
RTEXT "for",IDC_STATIC,12,62,41,8
COMBOBOX IDC_AASTATUS,161,146,64,50,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Change my status mode to:",IDC_AASHORTIDLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,147,132,11
diff --git a/src/core/stdidle/src/idle.cpp b/src/core/stdidle/src/idle.cpp index eb0ef2568c..64974bff02 100644 --- a/src/core/stdidle/src/idle.cpp +++ b/src/core/stdidle/src/idle.cpp @@ -24,209 +24,88 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h"
-#define IDLEMOD "Idle"
-#define IDL_USERIDLECHECK "UserIdleCheck"
-#define IDL_IDLEMETHOD "IdleMethod"
-#define IDL_IDLETIME1ST "IdleTime1st"
-#define IDL_IDLEONSAVER "IdleOnSaver" // IDC_SCREENSAVER
-#define IDL_IDLEONFULLSCR "IdleOnFullScr" // IDC_FULLSCREEN
-#define IDL_IDLEONLOCK "IdleOnLock" // IDC_LOCKED
-#define IDL_IDLEONTSDC "IdleOnTerminalDisconnect" //
-#define IDL_IDLEPRIVATE "IdlePrivate" // IDC_IDLEPRIVATE
-#define IDL_IDLESTATUSLOCK "IdleStatusLock" // IDC_IDLESTATUSLOCK
-#define IDL_AAENABLE "AAEnable"
-#define IDL_AASTATUS "AAStatus"
-#define IDL_IDLESOUNDSOFF "IdleSoundsOff"
+Settings S;
-#define IdleObject_IsIdle(obj) (obj->state&0x1)
-#define IdleObject_SetIdle(obj) (obj->state|=0x1)
-#define IdleObject_ClearIdle(obj) (obj->state&=~0x1)
+static bool bModuleInitialized = false;
-// either use meth 0, 1 or figure out which one
-#define IdleObject_UseMethod0(obj) (obj->state&=~0x2)
-#define IdleObject_UseMethod1(obj) (obj->state|=0x2)
-#define IdleObject_GetMethod(obj) (obj->state&0x2)
-
-#define IdleObject_IdleCheckSaver(obj) (obj->state&0x4)
-#define IdleObject_SetSaverCheck(obj) (obj->state|=0x4)
-
-#define IdleObject_IdleCheckWorkstation(obj) (obj->state&0x8)
-#define IdleObject_SetWorkstationCheck(obj) (obj->state|=0x8)
-
-#define IdleObject_IsPrivacy(obj) (obj->state&0x10)
-#define IdleObject_SetPrivacy(obj) (obj->state|=0x10)
-
-#define IdleObject_SetStatusLock(obj) (obj->state|=0x20)
-
-#define IdleObject_IdleCheckTerminal(obj) (obj->state&0x40)
-#define IdleObject_SetTerminalCheck(obj) (obj->state|=0x40)
-
-#define IdleObject_IdleCheckFullScr(obj) (obj->state&0x80)
-#define IdleObject_SetFullScrCheck(obj) (obj->state|=0x80)
-
-//#include <Wtsapi32.h>
-
-#ifndef _INC_WTSAPI
-
-#define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL)
-#define WTS_CURRENT_SESSION ((DWORD)-1)
-
-typedef enum _WTS_CONNECTSTATE_CLASS {
- WTSActive, // User logged on to WinStation
- WTSConnected, // WinStation connected to client
- WTSConnectQuery, // In the process of connecting to client
- WTSShadow, // Shadowing another WinStation
- WTSDisconnected, // WinStation logged on without client
- WTSIdle, // Waiting for client to connect
- WTSListen, // WinStation is listening for connection
- WTSReset, // WinStation is being reset
- WTSDown, // WinStation is down due to error
- WTSInit, // WinStation in initialization
-} WTS_CONNECTSTATE_CLASS;
-
-typedef enum _WTS_INFO_CLASS {
- WTSInitialProgram,
- WTSApplicationName,
- WTSWorkingDirectory,
- WTSOEMId,
- WTSSessionId,
- WTSUserName,
- WTSWinStationName,
- WTSDomainName,
- WTSConnectState,
- WTSClientBuildNumber,
- WTSClientName,
- WTSClientDirectory,
- WTSClientProductId,
- WTSClientHardwareId,
- WTSClientAddress,
- WTSClientDisplay,
- WTSClientProtocolType,
-} WTS_INFO_CLASS;
-
-#endif
-
-static BOOL bModuleInitialized = FALSE;
-
-BOOL IsTerminalDisconnected()
+struct IdleObject
{
- PVOID pBuffer = nullptr;
- DWORD pBytesReturned = 0;
- BOOL result = FALSE;
-
- if (WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSConnectState, (LPTSTR *)&pBuffer, &pBytesReturned)) {
- if (*(PDWORD)pBuffer == WTSDisconnected)
- result = TRUE;
- }
-
- if (pBuffer)
- WTSFreeMemory(pBuffer);
- return result;
-}
-
-typedef struct {
UINT_PTR hTimer;
- unsigned int useridlecheck;
- unsigned int state;
- unsigned int minutes; // user setting, number of minutes of inactivity to wait for
- POINT mousepos;
- unsigned int mouseidle;
- int aastatus;
int idleType;
- int aasoundsoff;
-}
- IdleObject;
-
-static const WORD aa_Status[] = {ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, ID_STATUS_DND, ID_STATUS_ONTHEPHONE, ID_STATUS_OUTTOLUNCH};
+ int bIsIdle;
+};
static IdleObject gIdleObject;
static HANDLE hIdleEvent;
void CALLBACK IdleTimer(HWND hwnd, UINT umsg, UINT_PTR idEvent, DWORD dwTime);
+int IdleOptInit(WPARAM wParam, LPARAM);
-static void IdleObject_ReadSettings(IdleObject * obj)
-{
- obj->useridlecheck = db_get_b(NULL, IDLEMOD, IDL_USERIDLECHECK, 0);
- obj->minutes = db_get_b(NULL, IDLEMOD, IDL_IDLETIME1ST, 10);
- obj->aastatus = !db_get_b(NULL, IDLEMOD, IDL_AAENABLE, 0) ? 0 : db_get_w(NULL, IDLEMOD, IDL_AASTATUS, 0);
- if ( db_get_b(NULL, IDLEMOD, IDL_IDLESOUNDSOFF, 1))
- obj->aasoundsoff = 1;
- else
- obj->aasoundsoff = 0;
- if ( db_get_b(NULL, IDLEMOD, IDL_IDLEMETHOD, 0)) IdleObject_UseMethod1(obj);
- else IdleObject_UseMethod0(obj);
- if ( db_get_b(NULL, IDLEMOD, IDL_IDLEONSAVER, 0)) IdleObject_SetSaverCheck(obj);
- if ( db_get_b(NULL, IDLEMOD, IDL_IDLEONFULLSCR, 0)) IdleObject_SetFullScrCheck(obj);
- if ( db_get_b(NULL, IDLEMOD, IDL_IDLEONLOCK, 0)) IdleObject_SetWorkstationCheck(obj);
- if ( db_get_b(NULL, IDLEMOD, IDL_IDLEPRIVATE, 0)) IdleObject_SetPrivacy(obj);
- if ( db_get_b(NULL, IDLEMOD, IDL_IDLESTATUSLOCK, 0)) IdleObject_SetStatusLock(obj);
- if ( db_get_b(NULL, IDLEMOD, IDL_IDLEONTSDC, 0)) IdleObject_SetTerminalCheck(obj);
-}
-
-static void IdleObject_Create(IdleObject * obj)
+void IdleObject_Create()
{
- memset(obj, 0, sizeof(IdleObject));
- obj->hTimer = SetTimer(nullptr, 0, 2000, IdleTimer);
- IdleObject_ReadSettings(obj);
+ memset(&gIdleObject, 0, sizeof(gIdleObject));
+ gIdleObject.hTimer = SetTimer(nullptr, 0, 2000, IdleTimer);
}
-static void IdleObject_Destroy(IdleObject * obj)
+void IdleObject_Destroy()
{
- if (IdleObject_IsIdle(obj))
+ if (gIdleObject.bIsIdle)
NotifyEventHooks(hIdleEvent, 0, 0);
- IdleObject_ClearIdle(obj);
- KillTimer(nullptr, obj->hTimer);
+ gIdleObject.bIsIdle = false;
+ KillTimer(nullptr, gIdleObject.hTimer);
}
-static int IdleObject_IsUserIdle(IdleObject * obj)
+static int IdleObject_IsUserIdle()
{
- DWORD dwTick;
- if (IdleObject_GetMethod(obj)) {
+ if (S.bIdleMethod) {
+ DWORD dwTick;
CallService(MS_SYSTEM_GETIDLE, 0, (LPARAM)&dwTick);
- return GetTickCount() - dwTick > (obj->minutes * 60 * 1000);
+ return GetTickCount() - dwTick > (S.iIdleTime1st * 60 * 1000);
}
LASTINPUTINFO ii = { sizeof(ii) };
- if ( GetLastInputInfo(&ii))
- return GetTickCount() - ii.dwTime > (obj->minutes * 60 * 1000);
+ if (GetLastInputInfo(&ii))
+ return GetTickCount() - ii.dwTime > (S.iIdleTime1st * 60 * 1000);
return FALSE;
}
-static void IdleObject_Tick(IdleObject * obj)
+static void IdleObject_Tick(IdleObject *obj)
{
bool idle = false;
- int idleType = 0, flags = 0;
+ int idleType = 0, flags = 0;
- if (obj->useridlecheck && IdleObject_IsUserIdle(obj)) {
+ if (S.bIdleCheck && IdleObject_IsUserIdle()) {
idleType = 1; idle = true;
}
- else if (IdleObject_IdleCheckSaver(obj) && IsScreenSaverRunning()) {
+ else if (S.bIdleOnSaver && IsScreenSaverRunning()) {
idleType = 2; idle = true;
}
- else if (IdleObject_IdleCheckFullScr(obj) && IsFullScreen()) {
+ else if (S.bIdleOnFullScr && IsFullScreen()) {
idleType = 5; idle = true;
}
- else if (IdleObject_IdleCheckWorkstation(obj) && IsWorkstationLocked()) {
+ else if (S.bIdleOnLock && IsWorkstationLocked()) {
idleType = 3; idle = true;
}
- else if (IdleObject_IdleCheckTerminal(obj) && IsTerminalDisconnected()) {
+ else if (S.bIdleOnTerminal && IsTerminalDisconnected()) {
idleType = 4; idle = true;
}
- if (IdleObject_IsPrivacy(obj))
+ if (S.bIdlePrivate)
flags |= IDF_PRIVACY;
- if ( !IdleObject_IsIdle(obj) && idle) {
- IdleObject_SetIdle(obj);
+ if (!obj->bIsIdle && idle) {
+ obj->bIsIdle = true;
obj->idleType = idleType;
NotifyEventHooks(hIdleEvent, 0, IDF_ISIDLE | flags);
}
- if (IdleObject_IsIdle(obj) && !idle) {
- IdleObject_ClearIdle(obj);
+
+ if (obj->bIsIdle && !idle) {
+ obj->bIsIdle = false;
obj->idleType = 0;
NotifyEventHooks(hIdleEvent, 0, flags);
-} }
+ }
+}
void CALLBACK IdleTimer(HWND, UINT, UINT_PTR idEvent, DWORD)
{
@@ -234,137 +113,17 @@ void CALLBACK IdleTimer(HWND, UINT, UINT_PTR idEvent, DWORD) IdleObject_Tick(&gIdleObject);
}
-int IdleGetStatusIndex(WORD status)
-{
- for (int j = 0; j < _countof(aa_Status); j++)
- if (aa_Status[j] == status)
- return j;
-
- return 0;
-}
-
-static INT_PTR CALLBACK IdleOptsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- switch (msg) {
- case WM_INITDIALOG:
- {
- int j;
- int method = db_get_b(NULL, IDLEMOD, IDL_IDLEMETHOD, 0);
- TranslateDialogDefault(hwndDlg);
- CheckDlgButton(hwndDlg, IDC_IDLESHORT, db_get_b(NULL, IDLEMOD, IDL_USERIDLECHECK, 0) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_IDLEONWINDOWS, method == 0 ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_IDLEONMIRANDA, method ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_SCREENSAVER, db_get_b(NULL, IDLEMOD, IDL_IDLEONSAVER, 0) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_FULLSCREEN, db_get_b(NULL, IDLEMOD, IDL_IDLEONFULLSCR, 0) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_LOCKED, db_get_b(NULL, IDLEMOD, IDL_IDLEONLOCK, 0) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_IDLEPRIVATE, db_get_b(NULL, IDLEMOD, IDL_IDLEPRIVATE, 0) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_IDLESTATUSLOCK, db_get_b(NULL, IDLEMOD, IDL_IDLESTATUSLOCK, 0) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_IDLETERMINAL, db_get_b(NULL, IDLEMOD, IDL_IDLEONTSDC, 0) ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_IDLESOUNDSOFF, db_get_b(NULL, IDLEMOD, IDL_IDLESOUNDSOFF, 1) ? BST_CHECKED : BST_UNCHECKED);
- SendDlgItemMessage(hwndDlg, IDC_IDLESPIN, UDM_SETBUDDY, (WPARAM)GetDlgItem(hwndDlg, IDC_IDLE1STTIME), 0);
- SendDlgItemMessage(hwndDlg, IDC_IDLESPIN, UDM_SETRANGE32, 1, 60);
- SendDlgItemMessage(hwndDlg, IDC_IDLESPIN, UDM_SETPOS, 0, MAKELONG((short) db_get_b(NULL, IDLEMOD, IDL_IDLETIME1ST, 10), 0));
- SendDlgItemMessage(hwndDlg, IDC_IDLE1STTIME, EM_LIMITTEXT, (WPARAM)2, 0);
-
- CheckDlgButton(hwndDlg, IDC_AASHORTIDLE, db_get_b(NULL, IDLEMOD, IDL_AAENABLE, 0) ? BST_CHECKED : BST_UNCHECKED);
- for (j = 0; j < _countof(aa_Status); j++)
- SendDlgItemMessage(hwndDlg, IDC_AASTATUS, CB_ADDSTRING, 0, (LPARAM)pcli->pfnGetStatusModeDescription(aa_Status[j], 0));
-
- j = IdleGetStatusIndex((WORD)(db_get_w(NULL, IDLEMOD, IDL_AASTATUS, 0)));
- SendDlgItemMessage(hwndDlg, IDC_AASTATUS, CB_SETCURSEL, j, 0);
- SendMessage(hwndDlg, WM_USER+2, 0, 0);
- return TRUE;
- }
- case WM_USER+2:
- {
- BOOL checked = IsDlgButtonChecked(hwndDlg, IDC_IDLESHORT) == BST_CHECKED;
- EnableWindow(GetDlgItem(hwndDlg, IDC_IDLEONWINDOWS), checked);
- EnableWindow(GetDlgItem(hwndDlg, IDC_IDLEONMIRANDA), checked);
- EnableWindow(GetDlgItem(hwndDlg, IDC_IDLE1STTIME), checked);
- EnableWindow(GetDlgItem(hwndDlg, IDC_AASTATUS), IsDlgButtonChecked(hwndDlg, IDC_AASHORTIDLE) == BST_CHECKED?1:0);
- EnableWindow(GetDlgItem(hwndDlg, IDC_IDLESTATUSLOCK), IsDlgButtonChecked(hwndDlg, IDC_AASHORTIDLE) == BST_CHECKED?1:0);
- break;
- }
- case WM_NOTIFY:
- {
- NMHDR * hdr = (NMHDR *)lParam;
- if (hdr && hdr->code == PSN_APPLY) {
- int method = IsDlgButtonChecked(hwndDlg, IDC_IDLEONWINDOWS) == BST_CHECKED;
- int mins = SendDlgItemMessage(hwndDlg, IDC_IDLESPIN, UDM_GETPOS, 0, 0);
- db_set_b(NULL, IDLEMOD, IDL_IDLETIME1ST, (BYTE)(HIWORD(mins) == 0 ? LOWORD(mins) : 10));
- db_set_b(NULL, IDLEMOD, IDL_USERIDLECHECK, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_IDLESHORT) == BST_CHECKED));
- db_set_b(NULL, IDLEMOD, IDL_IDLEMETHOD, (BYTE)(method ? 0 : 1));
- db_set_b(NULL, IDLEMOD, IDL_IDLEONSAVER, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_SCREENSAVER) == BST_CHECKED));
- db_set_b(NULL, IDLEMOD, IDL_IDLEONFULLSCR, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_FULLSCREEN) == BST_CHECKED));
- db_set_b(NULL, IDLEMOD, IDL_IDLEONLOCK, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_LOCKED) == BST_CHECKED));
- db_set_b(NULL, IDLEMOD, IDL_IDLEONTSDC, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_IDLETERMINAL) == BST_CHECKED));
- db_set_b(NULL, IDLEMOD, IDL_IDLEPRIVATE, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_IDLEPRIVATE) == BST_CHECKED));
- db_set_b(NULL, IDLEMOD, IDL_AAENABLE, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_AASHORTIDLE) == BST_CHECKED?1:0));
- db_set_b(NULL, IDLEMOD, IDL_IDLESTATUSLOCK, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_IDLESTATUSLOCK) == BST_CHECKED?1:0));
- {
- int curSel = SendDlgItemMessage(hwndDlg, IDC_AASTATUS, CB_GETCURSEL, 0, 0);
- if (curSel != CB_ERR) {
- db_set_w(NULL, IDLEMOD, IDL_AASTATUS, (WORD)(aa_Status[curSel]));
- }
- }
- db_set_b(NULL, IDLEMOD, IDL_IDLESOUNDSOFF, (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_IDLESOUNDSOFF) == BST_CHECKED));
- // destroy any current idle and reset settings.
- IdleObject_Destroy(&gIdleObject);
- IdleObject_Create(&gIdleObject);
- }
- break;
- }
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_IDLE1STTIME:
- {
- int min;
- if ((HWND)lParam != GetFocus() || HIWORD(wParam) != EN_CHANGE) return FALSE;
- min = GetDlgItemInt(hwndDlg, IDC_IDLE1STTIME, NULL, FALSE);
- if (min == 0 && GetWindowTextLength(GetDlgItem(hwndDlg, IDC_IDLE1STTIME)))
- SendDlgItemMessage(hwndDlg, IDC_IDLESPIN, UDM_SETPOS, 0, MAKELONG((short) 1, 0));
- break;
- }
- case IDC_IDLESHORT:
- case IDC_AASHORTIDLE:
- SendMessage(hwndDlg, WM_USER+2, 0, 0);
- break;
-
- case IDC_AASTATUS:
- if (HIWORD(wParam) != CBN_SELCHANGE)
- return TRUE;
- }
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
- }
- return FALSE;
-}
-
-static int IdleOptInit(WPARAM wParam, LPARAM)
-{
- OPTIONSDIALOGPAGE odp = { 0 };
- odp.position = 100000000;
- odp.hInstance = hInst;
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_IDLE);
- odp.szGroup.a = LPGEN("Status");
- odp.szTitle.a = LPGEN("Idle");
- odp.pfnDlgProc = IdleOptsDlgProc;
- odp.flags = ODPF_BOLDGROUPS;
- Options_AddPage(wParam, &odp);
- return 0;
-}
-
static INT_PTR IdleGetInfo(WPARAM, LPARAM lParam)
{
MIRANDA_IDLE_INFO *mii = (MIRANDA_IDLE_INFO*)lParam;
- if ( !mii || mii->cbSize != sizeof(MIRANDA_IDLE_INFO))
+ if (!mii)
return 1;
- mii->idleTime = gIdleObject.minutes;
- mii->privacy = gIdleObject.state&0x10;
- mii->aaStatus = gIdleObject.aastatus;
- mii->aaLock = gIdleObject.state&0x20;
- mii->idlesoundsoff = gIdleObject.aasoundsoff;
+ mii->idleTime = S.iIdleTime1st;
+ mii->privacy = S.bIdlePrivate;
+ mii->aaStatus = (S.bAAEnable) ? S.bAAStatus : 0;
+ mii->aaLock = S.bIdleStatusLock;
+ mii->idlesoundsoff = S.bIdleSoundsOff;
mii->idleType = gIdleObject.idleType;
return 0;
}
@@ -374,7 +133,7 @@ int LoadIdleModule(void) bModuleInitialized = TRUE;
hIdleEvent = CreateHookableEvent(ME_IDLE_CHANGED);
- IdleObject_Create(&gIdleObject);
+ IdleObject_Create();
CreateServiceFunction(MS_IDLE_GETIDLEINFO, IdleGetInfo);
HookEvent(ME_OPT_INITIALISE, IdleOptInit);
return 0;
@@ -382,9 +141,9 @@ int LoadIdleModule(void) void UnloadIdleModule()
{
- if ( !bModuleInitialized) return;
+ if (!bModuleInitialized) return;
- IdleObject_Destroy(&gIdleObject);
+ IdleObject_Destroy();
DestroyHookableEvent(hIdleEvent);
hIdleEvent = nullptr;
}
diff --git a/src/core/stdidle/src/main.cpp b/src/core/stdidle/src/main.cpp index bbc78d8281..4ca3c99d33 100644 --- a/src/core/stdidle/src/main.cpp +++ b/src/core/stdidle/src/main.cpp @@ -34,7 +34,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stdidle/src/options.cpp b/src/core/stdidle/src/options.cpp new file mode 100644 index 0000000000..58484c7650 --- /dev/null +++ b/src/core/stdidle/src/options.cpp @@ -0,0 +1,134 @@ +/* + +Miranda NG: the free IM client for Microsoft* Windows* + +Copyright (c) 2012-17 Miranda NG project (https://miranda-ng.org), +Copyright (c) 2000-12 Miranda IM project, +all portions of this codebase are copyrighted to the people +listed in contributors.txt. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "stdafx.h" + +static const WORD aa_Status[] = { ID_STATUS_AWAY, ID_STATUS_NA, ID_STATUS_OCCUPIED, ID_STATUS_DND, ID_STATUS_ONTHEPHONE, ID_STATUS_OUTTOLUNCH }; + +int IdleGetStatusIndex(WORD status) +{ + for (int j = 0; j < _countof(aa_Status); j++) + if (aa_Status[j] == status) + return j; + + return 0; +} + +class COptionsDlg : public CPluginDlgBase +{ + CCtrlEdit edt1sttime; + CCtrlSpin spinIdle; + CCtrlCombo cmbAAStatus; + CCtrlCheck chkShort, chkOnWindows, chkOnMiranda, chkScreenSaver, chkFullScreen, chkLocked; + CCtrlCheck chkPrivate, chkStatusLock, chkTerminal, chkSoundsOff, chkShortIdle; + + void ShowHide() + { + BOOL bChecked = chkShort.GetState(); + chkOnWindows.Enable(bChecked); + chkOnMiranda.Enable(bChecked); + edt1sttime.Enable(bChecked); + + bChecked = chkShortIdle.GetState(); + cmbAAStatus.Enable(bChecked); + chkStatusLock.Enable(bChecked); + } + +public: + COptionsDlg() : + CPluginDlgBase(hInst, IDD_OPT_IDLE, IDLEMOD), + edt1sttime(this, IDC_IDLE1STTIME), + spinIdle(this, IDC_IDLESPIN), + cmbAAStatus(this, IDC_AASTATUS), + chkShort(this, IDC_IDLESHORT), + chkLocked(this, IDC_LOCKED), + chkPrivate(this, IDC_IDLEPRIVATE), + chkTerminal(this, IDC_IDLETERMINAL), + chkOnWindows(this, IDC_IDLEONWINDOWS), + chkSoundsOff(this, IDC_IDLESOUNDSOFF), + chkOnMiranda(this, IDC_IDLEONMIRANDA), + chkShortIdle(this, IDC_AASHORTIDLE), + chkStatusLock(this, IDC_IDLESTATUSLOCK), + chkFullScreen(this, IDC_FULLSCREEN), + chkScreenSaver(this, IDC_SCREENSAVER) + { + CreateLink(chkShort, S.bIdleCheck); + CreateLink(chkLocked, S.bIdleOnLock); + CreateLink(chkPrivate, S.bIdlePrivate); + CreateLink(chkTerminal, S.bIdleOnTerminal); + CreateLink(chkShortIdle, S.bAAEnable); + CreateLink(chkOnMiranda, S.bIdleMethod); + CreateLink(chkSoundsOff, S.bIdleSoundsOff); + CreateLink(chkStatusLock, S.bIdleStatusLock); + CreateLink(chkFullScreen, S.bIdleOnFullScr); + CreateLink(chkScreenSaver, S.bIdleOnSaver); + + chkShortIdle.OnChange = chkShort.OnChange = Callback(this, &COptionsDlg::onChange); + } + + virtual void OnInitDialog() override + { + chkOnWindows.SetState(!S.bIdleMethod); + + spinIdle.SetRange(60, 1); + spinIdle.SetPosition(S.iIdleTime1st); + + for (int j = 0; j < _countof(aa_Status); j++) + cmbAAStatus.AddString(pcli->pfnGetStatusModeDescription(aa_Status[j], 0)); + cmbAAStatus.SetCurSel(IdleGetStatusIndex(S.bAAStatus)); + + ShowHide(); + } + + virtual void OnApply() override + { + S.iIdleTime1st = spinIdle.GetPosition(); + + int curSel = cmbAAStatus.GetCurSel(); + if (curSel != CB_ERR) + S.bAAStatus = aa_Status[curSel]; + + // destroy any current idle and reset settings. + IdleObject_Destroy(); + IdleObject_Create(); + } + + void onChange(CCtrlCheck*) + { + ShowHide(); + } +}; + +int IdleOptInit(WPARAM wParam, LPARAM) +{ + OPTIONSDIALOGPAGE odp = { 0 }; + odp.position = 100000000; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_IDLE); + odp.szGroup.a = LPGEN("Status"); + odp.szTitle.a = LPGEN("Idle"); + odp.flags = ODPF_BOLDGROUPS; + odp.pDialog = new COptionsDlg(); + Options_AddPage(wParam, &odp); + return 0; +} diff --git a/src/core/stdidle/src/stdafx.h b/src/core/stdidle/src/stdafx.h index 19c886f65e..2060da635d 100644 --- a/src/core/stdidle/src/stdafx.h +++ b/src/core/stdidle/src/stdafx.h @@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include <shlobj.h>
#include <commctrl.h>
#include <vssym32.h>
-#include <Wtsapi32.h>
#include <stdio.h>
#include <time.h>
@@ -52,6 +51,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include <m_protocols.h>
#include <m_options.h>
#include <m_skin.h>
+#include <m_gui.h>
#include <m_contacts.h>
#include <m_message.h>
#include <m_userinfo.h>
@@ -64,4 +64,35 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "../../mir_app/src/resource.h"
+#define IDLEMOD "Idle"
+
extern HINSTANCE hInst;
+
+struct Settings
+{
+ Settings() :
+ bIdleCheck(IDLEMOD, "UserIdleCheck", 0),
+ bIdleMethod(IDLEMOD, "IdleMethod", 0),
+ bIdleOnSaver(IDLEMOD, "IdleOnSaver", 0),
+ bIdleOnFullScr(IDLEMOD, "IdleOnFullScr", 0),
+ bIdleOnLock(IDLEMOD, "IdleOnLock", 0),
+ bIdlePrivate(IDLEMOD, "IdlePrivate", 0),
+ bIdleSoundsOff(IDLEMOD, "IdleSoundsOff", 1),
+ bIdleOnTerminal(IDLEMOD, "IdleOnTerminalDisconnect", 0),
+ bIdleStatusLock(IDLEMOD, "IdleStatusLock", 0),
+ bAAEnable(IDLEMOD, "AAEnable", 0),
+ bAAStatus(IDLEMOD, "AAStatus", 0),
+ iIdleTime1st(IDLEMOD, "IdleTime1st", 10)
+ {}
+
+ CMOption<BYTE> bIdleCheck, bIdleMethod, bIdleOnSaver, bIdleOnFullScr, bIdleOnLock;
+ CMOption<BYTE> bIdlePrivate, bIdleSoundsOff, bIdleOnTerminal, bIdleStatusLock;
+ CMOption<BYTE> bAAEnable;
+ CMOption<WORD> bAAStatus;
+ CMOption<DWORD> iIdleTime1st;
+};
+
+extern Settings S;
+
+void IdleObject_Destroy();
+void IdleObject_Create();
diff --git a/src/core/stdidle/src/version.h b/src/core/stdidle/src/version.h index e791573b3a..79f0d6a8b5 100644 --- a/src/core/stdidle/src/version.h +++ b/src/core/stdidle/src/version.h @@ -7,6 +7,5 @@ #define __FILENAME "stdidle.dll"
#define __DESCRIPTION "Core module for idle state processing."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdIdle/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/core/stdmsg/src/msgdialog.cpp b/src/core/stdmsg/src/msgdialog.cpp index 104b5fff31..937bb69857 100644 --- a/src/core/stdmsg/src/msgdialog.cpp +++ b/src/core/stdmsg/src/msgdialog.cpp @@ -1291,13 +1291,8 @@ INT_PTR CSrmmWindow::DlgProc(UINT uMsg, WPARAM wParam, LPARAM lParam) break;
case IDC_ADD:
- {
- ADDCONTACTSTRUCT acs = {};
- acs.hContact = m_hContact;
- acs.handleType = HANDLE_CONTACT;
- acs.szProto = nullptr;
- CallService(MS_ADDCONTACT_SHOW, (WPARAM)m_hwnd, (LPARAM)&acs);
- }
+ Contact_Add(m_hContact, m_hwnd);
+
if (!db_get_b(m_hContact, "CList", "NotOnList", 0))
ShowWindow(GetDlgItem(m_hwnd, IDC_ADD), FALSE);
break;
diff --git a/src/core/stdmsg/src/srmm.cpp b/src/core/stdmsg/src/srmm.cpp index 0b2ead1a17..37cd4f6b33 100644 --- a/src/core/stdmsg/src/srmm.cpp +++ b/src/core/stdmsg/src/srmm.cpp @@ -34,7 +34,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stdmsg/src/stdafx.h b/src/core/stdmsg/src/stdafx.h index 6069356b35..cfdb92aa2a 100644 --- a/src/core/stdmsg/src/stdafx.h +++ b/src/core/stdmsg/src/stdafx.h @@ -55,7 +55,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include <m_contacts.h>
#include <m_userinfo.h>
#include <m_history.h>
-#include <m_addcontact.h>
#include <m_chat_int.h>
#include <m_message.h>
#include <m_file.h>
diff --git a/src/core/stdmsg/src/version.h b/src/core/stdmsg/src/version.h index 55820233cb..64a2cec97c 100644 --- a/src/core/stdmsg/src/version.h +++ b/src/core/stdmsg/src/version.h @@ -8,6 +8,5 @@ #define __FILENAME "stdmsg.dll"
#define __DESCRIPTION "Core module for send/receive instant messages."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdMsg/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/core/stdssl/src/main.cpp b/src/core/stdssl/src/main.cpp index 584ff7335b..90aab5f72f 100644 --- a/src/core/stdssl/src/main.cpp +++ b/src/core/stdssl/src/main.cpp @@ -33,7 +33,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stdssl/src/version.h b/src/core/stdssl/src/version.h index 3029aeafe1..a71217e95e 100644 --- a/src/core/stdssl/src/version.h +++ b/src/core/stdssl/src/version.h @@ -8,6 +8,5 @@ #define __FILENAME "stdssl.dll"
#define __DESCRIPTION "Core driver for Windows native SSL support."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdSSL/"
#define __COPYRIGHT "© 2014-17 Miranda NG Development Team"
diff --git a/src/core/stduihist/src/main.cpp b/src/core/stduihist/src/main.cpp index 287c043f8a..9b2bf33812 100644 --- a/src/core/stduihist/src/main.cpp +++ b/src/core/stduihist/src/main.cpp @@ -33,7 +33,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stduihist/src/version.h b/src/core/stduihist/src/version.h index 618c3c0661..8b3eae6dfc 100644 --- a/src/core/stduihist/src/version.h +++ b/src/core/stduihist/src/version.h @@ -7,6 +7,5 @@ #define __FILENAME "stduihist.dll"
#define __DESCRIPTION "Core module for built-in history viewer."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdUIHist/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/core/stduserinfo/src/main.cpp b/src/core/stduserinfo/src/main.cpp index bd569fa829..7563b8e37e 100644 --- a/src/core/stduserinfo/src/main.cpp +++ b/src/core/stduserinfo/src/main.cpp @@ -33,7 +33,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stduserinfo/src/version.h b/src/core/stduserinfo/src/version.h index 1f9f1d330d..e6c6551488 100644 --- a/src/core/stduserinfo/src/version.h +++ b/src/core/stduserinfo/src/version.h @@ -7,6 +7,5 @@ #define __FILENAME "stduserinfo.dll"
#define __DESCRIPTION "Core module for providing user information."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdUserInfo/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/core/stduseronline/src/main.cpp b/src/core/stduseronline/src/main.cpp index 433c91e033..5bc9d43059 100644 --- a/src/core/stduseronline/src/main.cpp +++ b/src/core/stduseronline/src/main.cpp @@ -33,7 +33,6 @@ PLUGININFOEX pluginInfo = { MIRANDA_VERSION_DWORD,
__DESCRIPTION,
__AUTHOR,
- __AUTHOREMAIL,
__COPYRIGHT,
__AUTHORWEB,
UNICODE_AWARE,
diff --git a/src/core/stduseronline/src/version.h b/src/core/stduseronline/src/version.h index de5b14de25..7a7922cac6 100644 --- a/src/core/stduseronline/src/version.h +++ b/src/core/stduseronline/src/version.h @@ -7,6 +7,5 @@ #define __FILENAME "stduseronline.dll"
#define __DESCRIPTION "Core module for user-is-online event processing."
#define __AUTHOR "Miranda NG Development Team"
-#define __AUTHOREMAIL ""
#define __AUTHORWEB "https://miranda-ng.org/p/StdUserOnline/"
#define __COPYRIGHT "© 2012-17 Miranda NG Development Team"
diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index 34acde8b42..465247f6cc 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -402,10 +402,8 @@ BEGIN GROUPBOX "",IDC_PLUGININFOFRAME,4,125,307,125,BS_RIGHT
RTEXT "Description:",IDC_STATIC,6,136,61,10
EDITTEXT IDC_PLUGINLONGINFO,70,136,236,25,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | NOT WS_BORDER
- RTEXT "Author(s):",IDC_STATIC,6,165,61,10
- EDITTEXT IDC_PLUGINAUTHOR,70,165,236,18,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | NOT WS_BORDER
- RTEXT "E-mail:",IDC_STATIC,6,188,61,10
- CONTROL "",IDC_PLUGINEMAIL,"Hyperlink",WS_TABSTOP,70,188,236,10
+ RTEXT "Author(s):",IDC_STATIC,6,175,61,10
+ EDITTEXT IDC_PLUGINAUTHOR,70,175,236,18,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | NOT WS_BORDER
RTEXT "Homepage:",IDC_STATIC,6,200,61,9
CONTROL "",IDC_PLUGINURL,"Hyperlink",WS_TABSTOP,70,201,236,10
RTEXT "Unique ID:",IDC_STATIC,6,214,61,10
diff --git a/src/mir_app/src/MDatabaseCommon.cpp b/src/mir_app/src/MDatabaseCommon.cpp index 34f1d68caf..9d3025603a 100644 --- a/src/mir_app/src/MDatabaseCommon.cpp +++ b/src/mir_app/src/MDatabaseCommon.cpp @@ -233,7 +233,7 @@ STDMETHODIMP_(BOOL) MDatabaseCommon::GetContactSettingStr(MCONTACT contactID, LP STDMETHODIMP_(BOOL) MDatabaseCommon::GetContactSettingStatic(MCONTACT contactID, LPCSTR szModule, LPCSTR szSetting, DBVARIANT *dbv) { bool bNeedsWchars; - size_t cbSaved; + size_t cbSaved = 0; if (dbv->type == DBVT_WCHAR) { // there's no wchar_t strings in a database, we need conversion cbSaved = dbv->cchVal - 1; diff --git a/src/mir_app/src/addcontact.cpp b/src/mir_app/src/addcontact.cpp index 9f13b06811..8c44e895e1 100644 --- a/src/mir_app/src/addcontact.cpp +++ b/src/mir_app/src/addcontact.cpp @@ -37,15 +37,20 @@ static wchar_t* sttDecodeString(DWORD dwFlags, MAllStrings &src) class CAddContactDlg : public CDlgBase
{
- ADDCONTACTSTRUCT m_acs;
-
CCtrlEdit m_authReq, m_myHandle;
CCtrlCheck m_chkAdded, m_chkAuth, m_chkOpen;
CCtrlButton m_btnOk;
CCtrlCombo m_group;
+protected:
+ MEVENT m_hDbEvent = 0;
+ MCONTACT m_hContact = 0;
+ const char *m_szProto;
+ PROTOSEARCHRESULT *m_psr = nullptr;
+ CMStringW m_szName;
+
public:
- CAddContactDlg(ADDCONTACTSTRUCT *acs) :
+ CAddContactDlg() :
CDlgBase(g_hInst, IDD_ADDCONTACT),
m_chkAdded(this, IDC_ADDED),
m_chkAuth(this, IDC_AUTH),
@@ -58,67 +63,19 @@ public: m_chkAuth.OnChange = Callback(this, &CAddContactDlg::OnAuthClicked);
m_chkOpen.OnChange = Callback(this, &CAddContactDlg::OnOpenClicked);
m_btnOk.OnClick = Callback(this, &CAddContactDlg::OnOk);
-
- m_acs = *acs;
}
void OnInitDialog()
{
- char szUin[10];
Window_SetSkinIcon_IcoLib(m_hwnd, SKINICON_OTHER_ADDCONTACT);
- if (m_acs.handleType == HANDLE_EVENT) {
- DWORD dwUin;
- DBEVENTINFO dbei = {};
- dbei.cbBlob = sizeof(DWORD);
- dbei.pBlob = (PBYTE)&dwUin;
- db_event_get(m_acs.hDbEvent, &dbei);
- _ltoa(dwUin, szUin, 10);
- m_acs.szProto = dbei.szModule;
- }
-
- MCONTACT hContact;
- wchar_t *szName = nullptr, *tmpStr = nullptr;
- if (m_acs.handleType == HANDLE_CONTACT)
- szName = cli.pfnGetContactDisplayName(hContact = m_acs.hContact, 0);
- else {
- int isSet = 0;
- hContact = 0;
-
- if (m_acs.handleType == HANDLE_EVENT) {
- DBEVENTINFO dbei = {};
- dbei.cbBlob = db_event_getBlobSize(m_acs.hDbEvent);
- dbei.pBlob = (PBYTE)mir_alloc(dbei.cbBlob);
- db_event_get(m_acs.hDbEvent, &dbei);
- hContact = *(MCONTACT*)(dbei.pBlob + sizeof(DWORD));
- mir_free(dbei.pBlob);
- if (hContact != INVALID_CONTACT_ID) {
- szName = cli.pfnGetContactDisplayName(hContact, 0);
- isSet = 1;
- }
- }
- if (!isSet) {
- if (m_acs.handleType == HANDLE_EVENT)
- szName = mir_a2u(szUin);
- else {
- szName = sttDecodeString(m_acs.psr->flags, m_acs.psr->id);
- if (szName == nullptr)
- szName = sttDecodeString(m_acs.psr->flags, m_acs.psr->nick);
- }
- }
- }
- if (szName && szName[0])
- SetCaption(CMStringW(FORMAT, TranslateT("Add %s"), szName));
+ if (!m_szName.IsEmpty())
+ SetCaption(CMStringW(FORMAT, TranslateT("Add %s"), m_szName.c_str()));
else
SetCaption(TranslateT("Add contact"));
- mir_free(tmpStr);
-
- if (m_acs.handleType == HANDLE_CONTACT && m_acs.hContact)
- if (m_acs.szProto == nullptr || (m_acs.szProto != nullptr && *m_acs.szProto == 0))
- m_acs.szProto = GetContactProto(m_acs.hContact);
int groupSel = 0;
- ptrW tszGroup(db_get_wsa(hContact, "CList", "Group"));
+ ptrW tszGroup(db_get_wsa(m_hContact, "CList", "Group"));
wchar_t *grpName;
for (int groupId = 1; (grpName = Clist_GroupGetName(groupId, nullptr)) != nullptr; groupId++) {
int id = m_group.AddString(grpName, groupId);
@@ -137,7 +94,7 @@ public: if (db_get_b(0, "Miranda", "AuthOpenWindow", 1))
m_chkOpen.SetState(true);
- DWORD flags = (m_acs.szProto) ? CallProtoServiceInt(0, m_acs.szProto, PS_GETCAPS, PFLAGNUM_4, 0) : 0;
+ DWORD flags = (m_szProto) ? CallProtoServiceInt(0, m_szProto, PS_GETCAPS, PFLAGNUM_4, 0) : 0;
if (flags & PF4_FORCEADDED) // force you were added requests for this protocol
m_chkAdded.Enable(false);
@@ -159,7 +116,7 @@ public: void OnAuthClicked(CCtrlButton*)
{
- DWORD flags = CallProtoServiceInt(0, m_acs.szProto, PS_GETCAPS, PFLAGNUM_4, 0);
+ DWORD flags = CallProtoServiceInt(0, m_szProto, PS_GETCAPS, PFLAGNUM_4, 0);
if (flags & PF4_NOCUSTOMAUTH)
m_authReq.Enable(false);
else
@@ -174,26 +131,15 @@ public: void OnOk(CCtrlButton*)
{
- MCONTACT hContact = INVALID_CONTACT_ID;
- switch (m_acs.handleType) {
- case HANDLE_EVENT:
- {
- DBEVENTINFO dbei = {};
- db_event_get(m_acs.hDbEvent, &dbei);
- hContact = (MCONTACT)CallProtoServiceInt(0, dbei.szModule, PS_ADDTOLISTBYEVENT, 0, (LPARAM)m_acs.hDbEvent);
- }
- break;
-
- case HANDLE_SEARCHRESULT:
- hContact = (MCONTACT)CallProtoServiceInt(0, m_acs.szProto, PS_ADDTOLIST, 0, (LPARAM)m_acs.psr);
- break;
-
- case HANDLE_CONTACT:
- hContact = m_acs.hContact;
- break;
- }
+ MCONTACT hContact = 0;
+ if (m_hDbEvent)
+ hContact = (MCONTACT)CallProtoServiceInt(0, m_szProto, PS_ADDTOLISTBYEVENT, 0, m_hDbEvent);
+ else if (m_psr)
+ hContact = (MCONTACT)CallProtoServiceInt(0, m_szProto, PS_ADDTOLIST, 0, (LPARAM)m_psr);
+ else
+ hContact = m_hContact;
- if (hContact == 0)
+ if (hContact == 0) // something went wrong
return;
ptrW szHandle(m_myHandle.GetText());
@@ -210,7 +156,7 @@ public: ProtoChainSend(hContact, PSS_ADDED, 0, 0);
if (m_chkAuth.GetState()) {
- DWORD flags = CallProtoServiceInt(0, m_acs.szProto, PS_GETCAPS, PFLAGNUM_4, 0);
+ DWORD flags = CallProtoServiceInt(0, m_szProto, PS_GETCAPS, PFLAGNUM_4, 0);
if (flags & PF4_NOCUSTOMAUTH)
ProtoChainSend(hContact, PSS_AUTHREQUEST, 0, 0);
else
@@ -222,23 +168,85 @@ public: }
};
-INT_PTR AddContactDialog(WPARAM wParam, LPARAM lParam)
+MIR_APP_DLL(void) Contact_Add(MCONTACT hContact, HWND hwndParent)
{
- if (lParam == 0)
- return 1;
+ if (hContact == 0)
+ return;
+
+ struct CAddByContact : public CAddContactDlg
+ {
+ CAddByContact(MCONTACT hContact)
+ {
+ m_hContact = hContact;
+ m_szName = cli.pfnGetContactDisplayName(hContact, 0);
+ m_szProto = GetContactProto(hContact);
+ }
+ };
- ADDCONTACTSTRUCT *acs = (ADDCONTACTSTRUCT*)lParam;
- if (wParam) {
- CAddContactDlg dlg(acs);
- dlg.SetParent((HWND)wParam);
+ if (hwndParent != nullptr) {
+ CAddByContact dlg(hContact);
+ dlg.SetParent(hwndParent);
dlg.DoModal();
}
- else (new CAddContactDlg(acs))->Show();
- return 0;
+ else (new CAddByContact(hContact))->Show();
}
-int LoadAddContactModule(void)
+MIR_APP_DLL(void) Contact_AddByEvent(MEVENT hEvent, HWND hwndParent)
{
- CreateServiceFunction(MS_ADDCONTACT_SHOW, AddContactDialog);
- return 0;
+ struct CAddByEvent : public CAddContactDlg
+ {
+ CAddByEvent(MEVENT hEvent)
+ {
+ m_hDbEvent = hEvent;
+
+ DWORD dwData[2];
+ DBEVENTINFO dbei = {};
+ dbei.cbBlob = sizeof(dwData);
+ dbei.pBlob = (PBYTE)&dwData;
+ db_event_get(hEvent, &dbei);
+ if (dwData[0] != 0)
+ m_szName.Format(L"%d", dwData[0]);
+
+ m_hContact = dwData[1];
+ if (m_hContact != INVALID_CONTACT_ID)
+ m_szName = cli.pfnGetContactDisplayName(m_hContact, 0);
+
+ m_szProto = dbei.szModule;
+ }
+ };
+
+ if (hwndParent != nullptr) {
+ CAddByEvent dlg(hEvent);
+ dlg.SetParent(hwndParent);
+ dlg.DoModal();
+ }
+ else (new CAddByEvent(hEvent))->Show();
+}
+
+MIR_APP_DLL(void) Contact_AddBySearch(const char *szProto, struct PROTOSEARCHRESULT *psr, HWND hwndParent)
+{
+ struct CAddBySearch : public CAddContactDlg
+ {
+ CAddBySearch(const char *szProto, struct PROTOSEARCHRESULT *psr)
+ {
+ m_szProto = szProto;
+ m_psr = psr;
+
+ wchar_t *p = sttDecodeString(psr->flags, psr->id);
+ if (p == nullptr)
+ p = sttDecodeString(psr->flags, psr->nick);
+
+ if (p) {
+ m_szName = p;
+ mir_free(p);
+ }
+ }
+ };
+
+ if (hwndParent != nullptr) {
+ CAddBySearch dlg(szProto, psr);
+ dlg.SetParent(hwndParent);
+ dlg.DoModal();
+ }
+ else (new CAddBySearch(szProto, psr))->Show();
}
diff --git a/src/mir_app/src/auth.cpp b/src/mir_app/src/auth.cpp index 119b86e061..375c37967d 100644 --- a/src/mir_app/src/auth.cpp +++ b/src/mir_app/src/auth.cpp @@ -24,24 +24,277 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" -#define MS_AUTH_SHOWREQUEST "Auth/ShowRequest" -#define MS_AUTH_SHOWADDED "Auth/ShowAdded" +///////////////////////////////////////////////////////////////////////////////////////// +// Auth Request dialog -INT_PTR CALLBACK DlgProcAuthReq(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK DlgProcAdded(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); +class CAuthReqDlg : public CDlgBase +{ + MEVENT m_hDbEvent; + MCONTACT m_hContact; + const char *m_szProto; + + CCtrlCheck chkAdd; + CCtrlButton btnDetails, btnLater, btnOk, btnCancel; + +public: + CAuthReqDlg(MEVENT hEvent) : + CDlgBase(g_hInst, IDD_AUTHREQ), + m_hDbEvent(hEvent), + btnOk(this, IDOK), + btnCancel(this, IDCANCEL), + btnLater(this, IDC_DECIDELATER), + btnDetails(this, IDC_DETAILS), + chkAdd(this, IDC_ADDCHECK) + { + btnOk.OnClick = Callback(this, &CAuthReqDlg::onClick_OK); + btnCancel.OnClick = Callback(this, &CAuthReqDlg::onClick_Cancel); + btnLater.OnClick = Callback(this, &CAuthReqDlg::onClick_Later); + btnDetails.OnClick = Callback(this, &CAuthReqDlg::onClick_Details); + } + + virtual void OnInitDialog() override + { + Button_SetIcon_IcoLib(m_hwnd, IDC_DETAILS, SKINICON_OTHER_USERDETAILS, LPGEN("View user's details")); + Button_SetIcon_IcoLib(m_hwnd, IDC_ADD, SKINICON_OTHER_ADDCONTACT, LPGEN("Add contact permanently to list")); + + int iBlobSize = db_event_getBlobSize(m_hDbEvent); + if (iBlobSize == -1) + return; + + // blob is: uin(DWORD), hcontact(DWORD), nick(ASCIIZ), first(ASCIIZ), last(ASCIIZ), email(ASCIIZ), reason(ASCIIZ) + DBEVENTINFO dbei = {}; + dbei.cbBlob = iBlobSize; + dbei.pBlob = (PBYTE)alloca(dbei.cbBlob); + if (db_event_get(m_hDbEvent, &dbei)) + return; + + m_szProto = dbei.szModule; + + DWORD uin = *(PDWORD)dbei.pBlob; + m_hContact = DbGetAuthEventContact(&dbei); + char *nick = (char*)dbei.pBlob + sizeof(DWORD) * 2; + char *first = nick + mir_strlen(nick) + 1; + char *last = first + mir_strlen(first) + 1; + char *email = last + mir_strlen(last) + 1; + char *reason = email + mir_strlen(email) + 1; + + SendMessage(m_hwnd, WM_SETICON, ICON_SMALL, CallProtoService(dbei.szModule, PS_LOADICON, PLI_PROTOCOL | PLIF_SMALL, 0)); + SendMessage(m_hwnd, WM_SETICON, ICON_BIG, CallProtoService(dbei.szModule, PS_LOADICON, PLI_PROTOCOL | PLIF_LARGE, 0)); + + ptrW lastT(dbei.flags & DBEF_UTF ? Utf8DecodeW(last) : mir_a2u(last)); + ptrW firstT(dbei.flags & DBEF_UTF ? Utf8DecodeW(first) : mir_a2u(first)); + ptrW nickT(dbei.flags & DBEF_UTF ? Utf8DecodeW(nick) : mir_a2u(nick)); + ptrW emailT(dbei.flags & DBEF_UTF ? Utf8DecodeW(email) : mir_a2u(email)); + ptrW reasonT(dbei.flags & DBEF_UTF ? Utf8DecodeW(reason) : mir_a2u(reason)); + + wchar_t name[128] = L""; + int off = 0; + if (firstT[0] && lastT[0]) + off = mir_snwprintf(name, L"%s %s", (wchar_t*)firstT, (wchar_t*)lastT); + else if (firstT[0]) + off = mir_snwprintf(name, L"%s", (wchar_t*)firstT); + else if (lastT[0]) + off = mir_snwprintf(name, L"%s", (wchar_t*)lastT); + if (mir_wstrlen(nickT)) { + if (off) + mir_snwprintf(name + off, _countof(name) - off, L" (%s)", (wchar_t*)nickT); + else + wcsncpy_s(name, nickT, _TRUNCATE); + } + if (!name[0]) + wcsncpy_s(name, TranslateT("<Unknown>"), _TRUNCATE); + + PROTOACCOUNT *acc = Proto_GetAccount(dbei.szModule); + + wchar_t hdr[256]; + if (uin && emailT[0]) + mir_snwprintf(hdr, TranslateT("%s requested authorization\n%u (%s) on %s"), name, uin, (wchar_t*)emailT, acc->tszAccountName); + else if (uin) + mir_snwprintf(hdr, TranslateT("%s requested authorization\n%u on %s"), name, uin, acc->tszAccountName); + else + mir_snwprintf(hdr, TranslateT("%s requested authorization\n%s on %s"), name, emailT[0] ? (wchar_t*)emailT : TranslateT("(Unknown)"), acc->tszAccountName); + + SetDlgItemText(m_hwnd, IDC_HEADERBAR, hdr); + SetDlgItemText(m_hwnd, IDC_REASON, reasonT); -INT_PTR ShowReqWindow(WPARAM, LPARAM lParam) + if (m_hContact == INVALID_CONTACT_ID || !db_get_b(m_hContact, "CList", "NotOnList", 0)) + ShowWindow(GetDlgItem(m_hwnd, IDC_ADD), FALSE); + + SendDlgItemMessage(m_hwnd, IDC_DENYREASON, EM_LIMITTEXT, 255, 0); + if (CallProtoService(dbei.szModule, PS_GETCAPS, PFLAGNUM_4, 0) & PF4_NOAUTHDENYREASON) { + EnableWindow(GetDlgItem(m_hwnd, IDC_DENYREASON), FALSE); + SetDlgItemText(m_hwnd, IDC_DENYREASON, TranslateT("Feature is not supported by protocol")); + } + + if (!db_get_b(m_hContact, "CList", "NotOnList", 0)) { + chkAdd.Disable(); + chkAdd.SetState(false); + } + else chkAdd.SetState(true); + } + + virtual void OnDestroy() override + { + Button_FreeIcon_IcoLib(m_hwnd, IDC_ADD); + Button_FreeIcon_IcoLib(m_hwnd, IDC_DETAILS); + DestroyIcon((HICON)SendMessage(m_hwnd, WM_SETICON, ICON_BIG, 0)); + DestroyIcon((HICON)SendMessage(m_hwnd, WM_SETICON, ICON_SMALL, 0)); + } + + void onClick_OK(CCtrlButton*) + { + CallProtoService(m_szProto, PS_AUTHALLOW, m_hDbEvent, 0); + + if (chkAdd.GetState()) + Contact_AddByEvent(m_hDbEvent, m_hwnd); + } + + void onClick_Cancel(CCtrlButton*) + { + if (IsWindowEnabled(GetDlgItem(m_hwnd, IDC_DENYREASON))) { + wchar_t tszReason[256]; + GetDlgItemText(m_hwnd, IDC_DENYREASON, tszReason, _countof(tszReason)); + CallProtoService(m_szProto, PS_AUTHDENY, m_hDbEvent, (LPARAM)tszReason); + } + else CallProtoService(m_szProto, PS_AUTHDENY, m_hDbEvent, 0); + } + + void onClick_Later(CCtrlButton*) + { + Close(); + } + + void onClick_Details(CCtrlButton*) + { + CallService(MS_USERINFO_SHOWDIALOG, m_hContact, 0); + } +}; + +static INT_PTR ShowReqWindow(WPARAM, LPARAM lParam) { - CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_AUTHREQ), NULL, DlgProcAuthReq, (LPARAM)((CLISTEVENT *)lParam)->hDbEvent); + (new CAuthReqDlg(((CLISTEVENT *)lParam)->hDbEvent))->Show(); return 0; } -INT_PTR ShowAddedWindow(WPARAM, LPARAM lParam) +///////////////////////////////////////////////////////////////////////////////////////// + +class CAddedDlg : public CDlgBase { - CreateDialogParam(g_hInst, MAKEINTRESOURCE(IDD_ADDED), NULL, DlgProcAdded, (LPARAM)((CLISTEVENT *)lParam)->hDbEvent); + MEVENT m_hDbEvent; + MCONTACT m_hContact; + + CCtrlButton btnDetails, btnAdd, btnOk; + +public: + CAddedDlg(MEVENT hEvent) : + CDlgBase(g_hInst, IDD_ADDED), + m_hDbEvent(hEvent), + btnOk(this, IDOK), + btnAdd(this, IDC_ADD), + btnDetails(this, IDC_DETAILS) + { + btnOk.OnClick = Callback(this, &CAddedDlg::onClick_OK); + btnAdd.OnClick = Callback(this, &CAddedDlg::onClick_Add); + btnDetails.OnClick = Callback(this, &CAddedDlg::onClick_Details); + } + + virtual void OnInitDialog() override + { + Button_SetIcon_IcoLib(m_hwnd, IDC_DETAILS, SKINICON_OTHER_USERDETAILS, LPGEN("View user's details")); + Button_SetIcon_IcoLib(m_hwnd, IDC_ADD, SKINICON_OTHER_ADDCONTACT, LPGEN("Add contact permanently to list")); + + // blob is: uin(DWORD), hcontact(HANDLE), nick(ASCIIZ), first(ASCIIZ), last(ASCIIZ), email(ASCIIZ) + DBEVENTINFO dbei = {}; + dbei.cbBlob = db_event_getBlobSize(m_hDbEvent); + dbei.pBlob = (PBYTE)alloca(dbei.cbBlob); + db_event_get(m_hDbEvent, &dbei); + + m_hContact = DbGetAuthEventContact(&dbei); + + DWORD uin = *(PDWORD)dbei.pBlob; + char* nick = (char*)dbei.pBlob + sizeof(DWORD) * 2; + char* first = nick + mir_strlen(nick) + 1; + char* last = first + mir_strlen(first) + 1; + char* email = last + mir_strlen(last) + 1; + + SendMessage(m_hwnd, WM_SETICON, ICON_SMALL, CallProtoService(dbei.szModule, PS_LOADICON, PLI_PROTOCOL | PLIF_SMALL, 0)); + SendMessage(m_hwnd, WM_SETICON, ICON_BIG, CallProtoService(dbei.szModule, PS_LOADICON, PLI_PROTOCOL | PLIF_LARGE, 0)); + + PROTOACCOUNT* acc = Proto_GetAccount(dbei.szModule); + + ptrW lastT(dbei.flags & DBEF_UTF ? Utf8DecodeW(last) : mir_a2u(last)); + ptrW firstT(dbei.flags & DBEF_UTF ? Utf8DecodeW(first) : mir_a2u(first)); + ptrW nickT(dbei.flags & DBEF_UTF ? Utf8DecodeW(nick) : mir_a2u(nick)); + ptrW emailT(dbei.flags & DBEF_UTF ? Utf8DecodeW(email) : mir_a2u(email)); + + wchar_t name[128] = L""; + int off = 0; + if (firstT[0] && lastT[0]) + off = mir_snwprintf(name, L"%s %s", firstT, lastT); + else if (firstT[0]) + off = mir_snwprintf(name, L"%s", firstT); + else if (lastT[0]) + off = mir_snwprintf(name, L"%s", lastT); + if (nickT[0]) { + if (off) + mir_snwprintf(name + off, _countof(name) - off, L" (%s)", nickT); + else + wcsncpy_s(name, nickT, _TRUNCATE); + } + if (!name[0]) + wcsncpy_s(name, TranslateT("<Unknown>"), _TRUNCATE); + + wchar_t hdr[256]; + if (uin && emailT[0]) + mir_snwprintf(hdr, TranslateT("%s added you to the contact list\n%u (%s) on %s"), name, uin, emailT, acc->tszAccountName); + else if (uin) + mir_snwprintf(hdr, TranslateT("%s added you to the contact list\n%u on %s"), name, uin, acc->tszAccountName); + else + mir_snwprintf(hdr, TranslateT("%s added you to the contact list\n%s on %s"), name, emailT[0] ? emailT : TranslateT("(Unknown)"), acc->tszAccountName); + SetDlgItemText(m_hwnd, IDC_HEADERBAR, hdr); + + if (m_hContact == INVALID_CONTACT_ID || !db_get_b(m_hContact, "CList", "NotOnList", 0)) + ShowWindow(GetDlgItem(m_hwnd, IDC_ADD), FALSE); + } + + virtual void OnDestroy() override + { + Button_FreeIcon_IcoLib(m_hwnd, IDC_ADD); + Button_FreeIcon_IcoLib(m_hwnd, IDC_DETAILS); + DestroyIcon((HICON)SendMessage(m_hwnd, WM_SETICON, ICON_BIG, 0)); + DestroyIcon((HICON)SendMessage(m_hwnd, WM_SETICON, ICON_SMALL, 0)); + } + + void onClick_OK(CCtrlButton*) + { + Contact_AddByEvent(m_hDbEvent, m_hwnd); + } + + void onClick_Add(CCtrlButton*) + { + Contact_AddByEvent(m_hDbEvent, m_hwnd); + + if (m_hContact == INVALID_CONTACT_ID || !db_get_b(m_hContact, "CList", "NotOnList", 0)) + ShowWindow(GetDlgItem(m_hwnd, IDC_ADD), FALSE); + } + + void onClick_Details(CCtrlButton*) + { + CallService(MS_USERINFO_SHOWDIALOG, m_hContact, 0); + } +}; + +static INT_PTR ShowAddedWindow(WPARAM, LPARAM lParam) +{ + (new CAddedDlg(((CLISTEVENT *)lParam)->hDbEvent))->Show(); return 0; } +///////////////////////////////////////////////////////////////////////////////////////// + +#define MS_AUTH_SHOWADDED "Auth/ShowAdded" +#define MS_AUTH_SHOWREQUEST "Auth/ShowRequest" + static int AuthEventAdded(WPARAM, LPARAM lParam) { wchar_t szTooltip[256]; @@ -92,11 +345,16 @@ static int AuthEventAdded(WPARAM, LPARAM lParam) return 0; } +static void CALLBACK LaunchAuth() +{ + HookEvent(ME_DB_EVENT_ADDED, AuthEventAdded); +} + int LoadSendRecvAuthModule(void) { CreateServiceFunction(MS_AUTH_SHOWREQUEST, ShowReqWindow); CreateServiceFunction(MS_AUTH_SHOWADDED, ShowAddedWindow); - HookEvent(ME_DB_EVENT_ADDED, AuthEventAdded); + Miranda_WaitOnHandle(LaunchAuth); Skin_AddSound("AuthRequest", LPGENW("Alerts"), LPGENW("Authorization request")); Skin_AddSound("AddedEvent", LPGENW("Alerts"), LPGENW("Added event")); diff --git a/src/mir_app/src/authdialogs.cpp b/src/mir_app/src/authdialogs.cpp deleted file mode 100644 index 81ab47bfd3..0000000000 --- a/src/mir_app/src/authdialogs.cpp +++ /dev/null @@ -1,286 +0,0 @@ -/* - -Miranda NG: the free IM client for Microsoft* Windows* - -Copyright (c) 2012-17 Miranda NG project (https://miranda-ng.org), -Copyright (c) 2000-12 Miranda IM project, -all portions of this codebase are copyrighted to the people -listed in contributors.txt. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include "stdafx.h" - -INT_PTR CALLBACK DlgProcAdded(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - MEVENT hDbEvent = (MEVENT)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - Button_SetIcon_IcoLib(hwndDlg, IDC_DETAILS, SKINICON_OTHER_USERDETAILS, LPGEN("View user's details")); - Button_SetIcon_IcoLib(hwndDlg, IDC_ADD, SKINICON_OTHER_ADDCONTACT, LPGEN("Add contact permanently to list")); - - hDbEvent = lParam; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); - { - //blob is: uin(DWORD), hcontact(HANDLE), nick(ASCIIZ), first(ASCIIZ), last(ASCIIZ), email(ASCIIZ) - DBEVENTINFO dbei = {}; - dbei.cbBlob = db_event_getBlobSize(hDbEvent); - dbei.pBlob = (PBYTE)alloca(dbei.cbBlob); - db_event_get(hDbEvent, &dbei); - - DWORD uin = *(PDWORD)dbei.pBlob; - MCONTACT hContact = DbGetAuthEventContact(&dbei); - char* nick = (char*)dbei.pBlob + sizeof(DWORD) * 2; - char* first = nick + mir_strlen(nick) + 1; - char* last = first + mir_strlen(first) + 1; - char* email = last + mir_strlen(last) + 1; - - SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, CallProtoService(dbei.szModule, PS_LOADICON, PLI_PROTOCOL | PLIF_SMALL, 0)); - SendMessage(hwndDlg, WM_SETICON, ICON_BIG, CallProtoService(dbei.szModule, PS_LOADICON, PLI_PROTOCOL | PLIF_LARGE, 0)); - - PROTOACCOUNT* acc = Proto_GetAccount(dbei.szModule); - - wchar_t* lastT = dbei.flags & DBEF_UTF ? Utf8DecodeW(last) : mir_a2u(last); - wchar_t* firstT = dbei.flags & DBEF_UTF ? Utf8DecodeW(first) : mir_a2u(first); - wchar_t* nickT = dbei.flags & DBEF_UTF ? Utf8DecodeW(nick) : mir_a2u(nick); - wchar_t* emailT = dbei.flags & DBEF_UTF ? Utf8DecodeW(email) : mir_a2u(email); - - wchar_t name[128] = L""; - int off = 0; - if (firstT[0] && lastT[0]) - off = mir_snwprintf(name, L"%s %s", firstT, lastT); - else if (firstT[0]) - off = mir_snwprintf(name, L"%s", firstT); - else if (lastT[0]) - off = mir_snwprintf(name, L"%s", lastT); - if (nickT[0]) { - if (off) - mir_snwprintf(name + off, _countof(name) - off, L" (%s)", nickT); - else - wcsncpy_s(name, nickT, _TRUNCATE); - } - if (!name[0]) - wcsncpy_s(name, TranslateT("<Unknown>"), _TRUNCATE); - - wchar_t hdr[256]; - if (uin && emailT[0]) - mir_snwprintf(hdr, TranslateT("%s added you to the contact list\n%u (%s) on %s"), name, uin, emailT, acc->tszAccountName); - else if (uin) - mir_snwprintf(hdr, TranslateT("%s added you to the contact list\n%u on %s"), name, uin, acc->tszAccountName); - else - mir_snwprintf(hdr, TranslateT("%s added you to the contact list\n%s on %s"), name, emailT[0] ? emailT : TranslateT("(Unknown)"), acc->tszAccountName); - - SetDlgItemText(hwndDlg, IDC_HEADERBAR, hdr); - - mir_free(lastT); - mir_free(firstT); - mir_free(nickT); - mir_free(emailT); - - SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_DETAILS), GWLP_USERDATA, (LONG_PTR)hContact); - - if (hContact == INVALID_CONTACT_ID || !db_get_b(hContact, "CList", "NotOnList", 0)) - ShowWindow(GetDlgItem(hwndDlg, IDC_ADD), FALSE); - } - return TRUE; - - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDC_ADD: - { - ADDCONTACTSTRUCT acs = { 0 }; - acs.hDbEvent = hDbEvent; - acs.handleType = HANDLE_EVENT; - acs.szProto = ""; - CallService(MS_ADDCONTACT_SHOW, (WPARAM)hwndDlg, (LPARAM)&acs); - - MCONTACT hContact = (MCONTACT)GetWindowLongPtr(GetDlgItem(hwndDlg, IDC_DETAILS), GWLP_USERDATA); - if ((hContact == INVALID_CONTACT_ID) || !db_get_b(hContact, "CList", "NotOnList", 0)) - ShowWindow(GetDlgItem(hwndDlg, IDC_ADD), FALSE); - } - break; - - case IDC_DETAILS: - { - MCONTACT hContact = (MCONTACT)GetWindowLongPtr(GetDlgItem(hwndDlg, IDC_DETAILS), GWLP_USERDATA); - CallService(MS_USERINFO_SHOWDIALOG, hContact, 0); - } - break; - - case IDOK: - { - ADDCONTACTSTRUCT acs = { 0 }; - acs.hDbEvent = hDbEvent; - acs.handleType = HANDLE_EVENT; - acs.szProto = ""; - CallService(MS_ADDCONTACT_SHOW, (WPARAM)hwndDlg, (LPARAM)&acs); - } - //fall through - case IDCANCEL: - DestroyWindow(hwndDlg); - break; - } - break; - - case WM_DESTROY: - Button_FreeIcon_IcoLib(hwndDlg, IDC_ADD); - Button_FreeIcon_IcoLib(hwndDlg, IDC_DETAILS); - DestroyIcon((HICON)SendMessage(hwndDlg, WM_SETICON, ICON_BIG, 0)); - DestroyIcon((HICON)SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, 0)); - break; - } - return FALSE; -} - -INT_PTR CALLBACK DlgProcAuthReq(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - MEVENT hDbEvent = (MEVENT)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - - switch (msg) { - case WM_INITDIALOG: - TranslateDialogDefault(hwndDlg); - Button_SetIcon_IcoLib(hwndDlg, IDC_DETAILS, SKINICON_OTHER_USERDETAILS, LPGEN("View user's details")); - Button_SetIcon_IcoLib(hwndDlg, IDC_ADD, SKINICON_OTHER_ADDCONTACT, LPGEN("Add contact permanently to list")); - { - hDbEvent = lParam; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam); - - //blob is: uin(DWORD), hcontact(DWORD), nick(ASCIIZ), first(ASCIIZ), last(ASCIIZ), email(ASCIIZ), reason(ASCIIZ) - DBEVENTINFO dbei = {}; - dbei.cbBlob = db_event_getBlobSize(hDbEvent); - dbei.pBlob = (PBYTE)alloca(dbei.cbBlob); - db_event_get(hDbEvent, &dbei); - - DWORD uin = *(PDWORD)dbei.pBlob; - MCONTACT hContact = DbGetAuthEventContact(&dbei); - char *nick = (char*)dbei.pBlob + sizeof(DWORD) * 2; - char *first = nick + mir_strlen(nick) + 1; - char *last = first + mir_strlen(first) + 1; - char *email = last + mir_strlen(last) + 1; - char *reason = email + mir_strlen(email) + 1; - - SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, CallProtoService(dbei.szModule, PS_LOADICON, PLI_PROTOCOL | PLIF_SMALL, 0)); - SendMessage(hwndDlg, WM_SETICON, ICON_BIG, CallProtoService(dbei.szModule, PS_LOADICON, PLI_PROTOCOL | PLIF_LARGE, 0)); - - PROTOACCOUNT *acc = Proto_GetAccount(dbei.szModule); - - ptrW lastT(dbei.flags & DBEF_UTF ? Utf8DecodeW(last) : mir_a2u(last)); - ptrW firstT(dbei.flags & DBEF_UTF ? Utf8DecodeW(first) : mir_a2u(first)); - ptrW nickT(dbei.flags & DBEF_UTF ? Utf8DecodeW(nick) : mir_a2u(nick)); - ptrW emailT(dbei.flags & DBEF_UTF ? Utf8DecodeW(email) : mir_a2u(email)); - ptrW reasonT(dbei.flags & DBEF_UTF ? Utf8DecodeW(reason) : mir_a2u(reason)); - - wchar_t name[128] = L""; - int off = 0; - if (firstT[0] && lastT[0]) - off = mir_snwprintf(name, L"%s %s", (wchar_t*)firstT, (wchar_t*)lastT); - else if (firstT[0]) - off = mir_snwprintf(name, L"%s", (wchar_t*)firstT); - else if (lastT[0]) - off = mir_snwprintf(name, L"%s", (wchar_t*)lastT); - if (mir_wstrlen(nickT)) { - if (off) - mir_snwprintf(name + off, _countof(name) - off, L" (%s)", (wchar_t*)nickT); - else - wcsncpy_s(name, nickT, _TRUNCATE); - } - if (!name[0]) - wcsncpy_s(name, TranslateT("<Unknown>"), _TRUNCATE); - - wchar_t hdr[256]; - if (uin && emailT[0]) - mir_snwprintf(hdr, TranslateT("%s requested authorization\n%u (%s) on %s"), name, uin, (wchar_t*)emailT, acc->tszAccountName); - else if (uin) - mir_snwprintf(hdr, TranslateT("%s requested authorization\n%u on %s"), name, uin, acc->tszAccountName); - else - mir_snwprintf(hdr, TranslateT("%s requested authorization\n%s on %s"), name, emailT[0] ? (wchar_t*)emailT : TranslateT("(Unknown)"), acc->tszAccountName); - - SetDlgItemText(hwndDlg, IDC_HEADERBAR, hdr); - SetDlgItemText(hwndDlg, IDC_REASON, reasonT); - - if (hContact == INVALID_CONTACT_ID || !db_get_b(hContact, "CList", "NotOnList", 0)) - ShowWindow(GetDlgItem(hwndDlg, IDC_ADD), FALSE); - - SendDlgItemMessage(hwndDlg, IDC_DENYREASON, EM_LIMITTEXT, 255, 0); - if (CallProtoService(dbei.szModule, PS_GETCAPS, PFLAGNUM_4, 0) & PF4_NOAUTHDENYREASON) { - EnableWindow(GetDlgItem(hwndDlg, IDC_DENYREASON), FALSE); - SetDlgItemText(hwndDlg, IDC_DENYREASON, TranslateT("Feature is not supported by protocol")); - } - if (!db_get_b(hContact, "CList", "NotOnList", 0)) { - EnableWindow(GetDlgItem(hwndDlg, IDC_ADDCHECK), FALSE); - CheckDlgButton(hwndDlg, IDC_ADDCHECK, BST_UNCHECKED); - } - else CheckDlgButton(hwndDlg, IDC_ADDCHECK, BST_CHECKED); - - SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_DETAILS), GWLP_USERDATA, (LONG_PTR)hContact); - } - return TRUE; - - case WM_COMMAND: - switch (LOWORD(wParam)) { - case IDC_DETAILS: - CallService(MS_USERINFO_SHOWDIALOG, GetWindowLongPtr((HWND)lParam, GWLP_USERDATA), 0); - break; - - case IDC_DECIDELATER: - DestroyWindow(hwndDlg); - break; - - case IDOK: - { - DBEVENTINFO dbei = {}; - db_event_get(hDbEvent, &dbei); - CallProtoService(dbei.szModule, PS_AUTHALLOW, (WPARAM)hDbEvent, 0); - - if (IsDlgButtonChecked(hwndDlg, IDC_ADDCHECK)) { - ADDCONTACTSTRUCT acs = { 0 }; - acs.hDbEvent = hDbEvent; - acs.handleType = HANDLE_EVENT; - acs.szProto = ""; - CallService(MS_ADDCONTACT_SHOW, (WPARAM)hwndDlg, (LPARAM)&acs); - } - } - DestroyWindow(hwndDlg); - break; - - case IDCANCEL: - { - DBEVENTINFO dbei = {}; - db_event_get(hDbEvent, &dbei); - - if (IsWindowEnabled(GetDlgItem(hwndDlg, IDC_DENYREASON))) { - wchar_t tszReason[256]; - GetDlgItemText(hwndDlg, IDC_DENYREASON, tszReason, _countof(tszReason)); - CallProtoService(dbei.szModule, PS_AUTHDENY, hDbEvent, (LPARAM)tszReason); - } - else CallProtoService(dbei.szModule, PS_AUTHDENY, hDbEvent, 0); - } - DestroyWindow(hwndDlg); - break; - } - break; - - case WM_DESTROY: - Button_FreeIcon_IcoLib(hwndDlg, IDC_ADD); - Button_FreeIcon_IcoLib(hwndDlg, IDC_DETAILS); - DestroyIcon((HICON)SendMessage(hwndDlg, WM_SETICON, ICON_BIG, 0)); - DestroyIcon((HICON)SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, 0)); - break; - } - return FALSE; -} diff --git a/src/mir_app/src/clui.cpp b/src/mir_app/src/clui.cpp index 40db3c69ca..4e82f1ac36 100644 --- a/src/mir_app/src/clui.cpp +++ b/src/mir_app/src/clui.cpp @@ -204,11 +204,7 @@ static INT_PTR MenuItem_DeleteContact(WPARAM wParam, LPARAM lParam) static INT_PTR MenuItem_AddContactToList(WPARAM hContact, LPARAM)
{
- ADDCONTACTSTRUCT acs = { 0 };
- acs.hContact = hContact;
- acs.handleType = HANDLE_CONTACT;
- acs.szProto = "";
- CallService(MS_ADDCONTACT_SHOW, 0, (LPARAM)&acs);
+ Contact_Add(hContact);
return 0;
}
diff --git a/src/mir_app/src/colorchooser.cpp b/src/mir_app/src/colorchooser.cpp index e437c4a5a2..3d4f2004bc 100644 --- a/src/mir_app/src/colorchooser.cpp +++ b/src/mir_app/src/colorchooser.cpp @@ -32,6 +32,15 @@ static COLORREF colorTable[] = RGB(0,255,0), RGB(255,255,0), RGB(255,0,0), RGB(255,255,255)
};
+MIR_APP_DLL(COLORREF*) Srmm_GetColorTable(int *pSize)
+{
+ if (pSize != nullptr)
+ *pSize = _countof(colorTable);
+ return colorTable;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
class CColorChooserDlg : public CDlgBase
{
CCtrlBase m_text;
@@ -175,31 +184,26 @@ public: break;
case WM_MOUSEMOVE:
+ if (iCurrentHotTrack == -2)
+ return 0; // prevent focussing when not drawn yet!
{
HDC hdc = GetDC(m_hwnd);
- POINT pt;
- RECT rect;
- int but;
+ // weird stuff
+ POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
-
- if (iCurrentHotTrack == -2)
- return 0; // prevent focussing when not drawn yet!
-
- but = CalculateCoordinatesToButton(pt);
-
- // weird stuff
+ int but = CalculateCoordinatesToButton(pt);
if (but != iCurrentHotTrack) {
if (iCurrentHotTrack >= 0) {
- rect = CalculateButtonToCoordinates(iCurrentHotTrack);
+ RECT rect = CalculateButtonToCoordinates(iCurrentHotTrack);
DrawFocusRect(hdc, &rect);
iCurrentHotTrack = -1;
}
iCurrentHotTrack = but;
if (iCurrentHotTrack >= 0) {
- rect = CalculateButtonToCoordinates(iCurrentHotTrack);
+ RECT rect = CalculateButtonToCoordinates(iCurrentHotTrack);
DrawFocusRect(hdc, &rect);
}
}
@@ -208,20 +212,18 @@ public: break;
case WM_PAINT:
+ RECT rc;
+ GetClientRect(m_hwnd, &rc);
+ rc.top += 20;
{
PAINTSTRUCT ps;
- int iThisRow = 1;
- int iThisColumn = 0;
-
- RECT rc;
- GetClientRect(m_hwnd, &rc);
- rc.top += 20;
-
HDC hdc = BeginPaint(m_hwnd, &ps);
// fill background
FillRect(hdc, &rc, GetSysColorBrush(COLOR_WINDOW));
+ int iThisRow = 1;
+ int iThisColumn = 0;
for (int i = 0; i < 16; i++) {
// decide place to draw the color block in the window
iThisColumn++;
diff --git a/src/mir_app/src/db_ini.cpp b/src/mir_app/src/db_ini.cpp index dac3cc202f..6600a853a0 100644 --- a/src/mir_app/src/db_ini.cpp +++ b/src/mir_app/src/db_ini.cpp @@ -516,7 +516,7 @@ static void DoAutoExec(void) if (!mir_wstrcmpi(szUse, L"no")) return;
GetPrivateProfileString(L"AutoExec", L"Safe", L"CLC Icons CLUI CList SkinSounds", buf, _countof(buf), mirandabootini);
ptrA szSafeSections(mir_u2a(buf));
- GetPrivateProfileString(L"AutoExec", L"Unsafe", L"AIM Facebook GG ICQ IRC JABBER MRA MSN SKYPE TWITTER VKontakte", buf, _countof(buf), mirandabootini);
+ GetPrivateProfileString(L"AutoExec", L"Unsafe", L"Facebook GG ICQ IRC JABBER MRA MSN SKYPE TWITTER VKontakte", buf, _countof(buf), mirandabootini);
ptrA szUnsafeSections(mir_u2a(buf));
GetPrivateProfileString(L"AutoExec", L"Warn", L"notsafe", szSecurity, _countof(szSecurity), mirandabootini);
diff --git a/src/mir_app/src/findadd.cpp b/src/mir_app/src/findadd.cpp index 8d6fd86e88..0a66352c4a 100644 --- a/src/mir_app/src/findadd.cpp +++ b/src/mir_app/src/findadd.cpp @@ -745,36 +745,28 @@ static INT_PTR CALLBACK DlgProcFindAdd(HWND hwndDlg, UINT msg, WPARAM wParam, LP break; case IDC_ADD: - { - ADDCONTACTSTRUCT acs = { 0 }; - - if (ListView_GetSelectedCount(hwndList) == 1) { - LVITEM lvi; - lvi.mask = LVIF_PARAM; - lvi.iItem = ListView_GetNextItem(hwndList, -1, LVNI_ALL | LVNI_SELECTED); - ListView_GetItem(hwndList, &lvi); - ListSearchResult *lsr = (ListSearchResult*)lvi.lParam; - acs.szProto = lsr->szProto; - acs.psr = &lsr->psr; - } - else { - wchar_t str[256]; - GetDlgItemText(hwndDlg, IDC_PROTOID, str, _countof(str)); - if (*rtrimw(str) == 0) - break; - - PROTOSEARCHRESULT psr = { 0 }; - psr.cbSize = sizeof(psr); - psr.flags = PSR_UNICODE; - psr.id.w = str; + if (ListView_GetSelectedCount(hwndList) == 1) { + LVITEM lvi; + lvi.mask = LVIF_PARAM; + lvi.iItem = ListView_GetNextItem(hwndList, -1, LVNI_ALL | LVNI_SELECTED); + ListView_GetItem(hwndList, &lvi); + ListSearchResult *lsr = (ListSearchResult*)lvi.lParam; + Contact_AddBySearch(lsr->szProto, &lsr->psr, hwndDlg); + } + else { + wchar_t str[256]; + GetDlgItemText(hwndDlg, IDC_PROTOID, str, _countof(str)); + if (*rtrimw(str) == 0) + break; - acs.psr = &psr; - acs.szProto = (char*)SendDlgItemMessage(hwndDlg, IDC_PROTOLIST, CB_GETITEMDATA, - SendDlgItemMessage(hwndDlg, IDC_PROTOLIST, CB_GETCURSEL, 0, 0), 0); - } + char *szProto = (char*)SendDlgItemMessage(hwndDlg, IDC_PROTOLIST, CB_GETITEMDATA, + SendDlgItemMessage(hwndDlg, IDC_PROTOLIST, CB_GETCURSEL, 0, 0), 0); - acs.handleType = HANDLE_SEARCHRESULT; - CallService(MS_ADDCONTACT_SHOW, (WPARAM)hwndDlg, (LPARAM)&acs); + PROTOSEARCHRESULT psr = { 0 }; + psr.cbSize = sizeof(psr); + psr.flags = PSR_UNICODE; + psr.id.w = str; + Contact_AddBySearch(szProto, &psr, hwndDlg); } break; diff --git a/src/mir_app/src/mir_app.def b/src/mir_app/src/mir_app.def index 055c4aa466..73fd746295 100644 --- a/src/mir_app/src/mir_app.def +++ b/src/mir_app/src/mir_app.def @@ -488,3 +488,7 @@ Clist_SetStatusMode @464 ?MetaSetDefault@MDatabaseCommon@@UAGHPAUDBCachedContact@@@Z @493 NONAME
?EnumResidentSettings@MDatabaseCommon@@UAGHP6AHPBDPAX@Z1@Z @494 NONAME
KillModuleOptions @495
+Srmm_GetColorTable @496
+Contact_Add @497
+Contact_AddByEvent @498
+Contact_AddBySearch @499
diff --git a/src/mir_app/src/mir_app64.def b/src/mir_app/src/mir_app64.def index fa96e4fb75..defbe2c365 100644 --- a/src/mir_app/src/mir_app64.def +++ b/src/mir_app/src/mir_app64.def @@ -488,3 +488,7 @@ Clist_SetStatusMode @464 ?MetaSetDefault@MDatabaseCommon@@UEAAHPEAUDBCachedContact@@@Z @493 NONAME
?EnumResidentSettings@MDatabaseCommon@@UEAAHP6AHPEBDPEAX@Z1@Z @494 NONAME
KillModuleOptions @495
+Srmm_GetColorTable @496
+Contact_Add @497
+Contact_AddByEvent @498
+Contact_AddBySearch @499
diff --git a/src/mir_app/src/modules.cpp b/src/mir_app/src/modules.cpp index 3576c79056..fc992baa5a 100644 --- a/src/mir_app/src/modules.cpp +++ b/src/mir_app/src/modules.cpp @@ -53,7 +53,6 @@ int LoadSkinHotkeys(void); int LoadUserInfoModule(void); // ui: user info
int LoadVisibilityModule(void); // ui: visibility control
-int LoadAddContactModule(void); // ui: authcontrol contacts
int LoadUtilsModule(void); // ui: utils (has a few window classes, like HyperLink)
int LoadCLCModule(void); // window class: CLC control
int LoadButtonModule(void); // window class: button class
@@ -150,7 +149,6 @@ int LoadDefaultModules(void) if (LoadProtocolsModule()) return 1;
LoadDbAccounts(); // retrieves the account array from a database
if (LoadContactsModule()) return 1;
- if (LoadAddContactModule()) return 1;
if (LoadMetacontacts()) return 1;
if (LoadNewPluginsModule()) return 1; // will call Load(void) on everything, clist will load first
diff --git a/src/mir_app/src/netlibsecurity.cpp b/src/mir_app/src/netlibsecurity.cpp index ee507c7d13..0c678ea6b7 100644 --- a/src/mir_app/src/netlibsecurity.cpp +++ b/src/mir_app/src/netlibsecurity.cpp @@ -218,7 +218,7 @@ char* NtlmCreateResponseFromChallenge(HANDLE hSecurity, const char *szChallenge, bool isGSSAPI = mir_wstrcmpi(hNtlm->szProvider, L"Kerberos") == 0;
bool hasChallenge = szChallenge != nullptr && szChallenge[0] != '\0';
if (hasChallenge) {
- unsigned tokenLen;
+ size_t tokenLen;
BYTE *token = (BYTE*)mir_base64_decode(szChallenge, &tokenLen);
if (token == nullptr)
return nullptr;
@@ -336,14 +336,14 @@ char* NtlmCreateResponseFromChallenge(HANDLE hSecurity, const char *szChallenge, return nullptr;
}
- szOutputToken = mir_base64_encode((PBYTE)outputSecurityToken.pvBuffer, outputSecurityToken.cbBuffer);
+ szOutputToken = mir_base64_encode(outputSecurityToken.pvBuffer, outputSecurityToken.cbBuffer);
}
else {
if (!login || !psw)
return nullptr;
CMStringA szAuth(FORMAT, "%S:%S", login, psw);
- szOutputToken = mir_base64_encode((BYTE*)szAuth.c_str(), szAuth.GetLength());
+ szOutputToken = mir_base64_encode(szAuth.c_str(), szAuth.GetLength());
complete = true;
}
diff --git a/src/mir_app/src/newplugins.cpp b/src/mir_app/src/newplugins.cpp index a080c0eab0..aa74284892 100644 --- a/src/mir_app/src/newplugins.cpp +++ b/src/mir_app/src/newplugins.cpp @@ -39,20 +39,13 @@ static int sttComparePluginsByName(const pluginEntry* p1, const pluginEntry* p2) }
LIST<pluginEntry>
- pluginList(10, sttComparePluginsByName),
- servicePlugins(5, sttComparePluginsByName),
- clistPlugins(5, sttComparePluginsByName);
+pluginList(10, sttComparePluginsByName),
+servicePlugins(5, sttComparePluginsByName),
+clistPlugins(5, sttComparePluginsByName);
/////////////////////////////////////////////////////////////////////////////////////////
MUUID miid_last = MIID_LAST;
-MUUID miid_srmm = MIID_SRMM;
-MUUID miid_clist = MIID_CLIST;
-MUUID miid_database = MIID_DATABASE;
-MUUID miid_protocol = MIID_PROTOCOL;
-MUUID miid_servicemode = MIID_SERVICEMODE;
-MUUID miid_crypto = MIID_CRYPTO;
-MUUID miid_ssl = MIID_SSL;
/////////////////////////////////////////////////////////////////////////////////////////
@@ -73,7 +66,7 @@ static pluginEntry *plugin_freeimg, *plugin_crshdmp, *serviceModePlugin, *plugin /////////////////////////////////////////////////////////////////////////////////////////
// basic functions
-bool hasMuuid(const MUUID* p, const MUUID& uuid)
+bool hasMuuid(const MUUID *p, const MUUID &uuid)
{
if (p == nullptr)
return false;
@@ -85,7 +78,7 @@ bool hasMuuid(const MUUID* p, const MUUID& uuid) return false;
}
-bool hasMuuid(const BASIC_PLUGIN_INFO& bpi, const MUUID& uuid)
+bool hasMuuid(const BASIC_PLUGIN_INFO &bpi, const MUUID &uuid)
{
if (bpi.Interfaces)
return hasMuuid(bpi.Interfaces, uuid);
@@ -272,7 +265,7 @@ static int checkPI(BASIC_PLUGIN_INFO* bpi, PLUGININFOEX* pi) return FALSE;
if (pi->shortName == nullptr || pi->description == nullptr || pi->author == nullptr ||
- pi->authorEmail == nullptr || pi->copyright == nullptr || pi->homepage == nullptr)
+ pi->copyright == nullptr || pi->homepage == nullptr)
return FALSE;
return TRUE;
@@ -344,7 +337,7 @@ void Plugin_Uninit(pluginEntry *p) FreeLibrary(hInst);
memset(&p->bpi, 0, sizeof(p->bpi));
}
-
+
if (p == plugin_crshdmp)
plugin_crshdmp = nullptr;
pluginList.remove(p);
@@ -448,8 +441,8 @@ pluginEntry* OpenPlugin(wchar_t *tszFileName, wchar_t *dir, wchar_t *path) }
// plugin declared that it's a database or a cryptor. load it asap!
- bool bIsDb = hasMuuid(pIds, miid_database);
- if (bIsDb || hasMuuid(pIds, miid_crypto)) {
+ bool bIsDb = hasMuuid(pIds, MIID_DATABASE);
+ if (bIsDb || hasMuuid(pIds, MIID_CRYPTO)) {
BASIC_PLUGIN_INFO bpi;
if (checkAPI(tszFullPath, &bpi, mirandaVersion, CHECKAPI_NONE)) {
// plugin is valid
@@ -466,24 +459,24 @@ pluginEntry* OpenPlugin(wchar_t *tszFileName, wchar_t *dir, wchar_t *path) else p->pclass |= PCLASS_FAILED;
}
// plugin declared that it's a contact list. mark it for the future load
- else if (hasMuuid(pIds, miid_clist)) {
+ else if (hasMuuid(pIds, MIID_CLIST)) {
// keep a note of this plugin for later
clistPlugins.insert(p);
p->pclass |= PCLASS_CLIST;
}
// plugin declared that it's a ssl provider. mark it for the future load
- else if (hasMuuid(pIds, miid_ssl)) {
+ else if (hasMuuid(pIds, MIID_SSL)) {
plugin_ssl = p;
p->pclass |= PCLASS_LAST;
}
// plugin declared that it's a service mode plugin.
// load it for a profile manager's window
- else if (hasMuuid(pIds, miid_servicemode)) {
+ else if (hasMuuid(pIds, MIID_SERVICEMODE)) {
BASIC_PLUGIN_INFO bpi;
if (checkAPI(tszFullPath, &bpi, mirandaVersion, CHECKAPI_NONE)) {
p->pclass |= (PCLASS_OK | PCLASS_BASICAPI);
p->bpi = bpi;
- if (hasMuuid(bpi, miid_servicemode)) {
+ if (hasMuuid(bpi, MIID_SERVICEMODE)) {
p->pclass |= (PCLASS_SERVICE);
servicePlugins.insert(p);
}
@@ -756,18 +749,15 @@ void EnsureCheckerLoaded(bool bEnable) int LoadSslModule(void)
{
bool bExtSSLLoaded = false;
-
- if (plugin_ssl != nullptr)
- {
- if (!TryLoadPlugin(plugin_ssl, false))
- {
+
+ if (plugin_ssl != nullptr) {
+ if (!TryLoadPlugin(plugin_ssl, false)) {
Plugin_Uninit(plugin_ssl);
}
else
bExtSSLLoaded = true;
}
- if (!bExtSSLLoaded)
- {
+ if (!bExtSSLLoaded) {
MuuidReplacement stdSsl = { MIID_SSL, L"stdssl", nullptr };
if (!LoadCorePlugin(stdSsl))
return 1;
diff --git a/src/mir_app/src/options.cpp b/src/mir_app/src/options.cpp index 78ec37c135..2db108f1a4 100644 --- a/src/mir_app/src/options.cpp +++ b/src/mir_app/src/options.cpp @@ -1202,6 +1202,13 @@ static INT_PTR OpenOptionsDialog(WPARAM, LPARAM) return 0;
}
+static int OptDynamicLoadOptions(WPARAM, LPARAM hInstance)
+{
+ OptionsPageList arPages(1);
+ CallPluginEventHook((HINSTANCE)hInstance, hOptionsInitEvent, (WPARAM)&arPages, 0);
+ return 0;
+}
+
static int OptModulesLoaded(WPARAM, LPARAM)
{
CMenuItem mi;
@@ -1226,6 +1233,7 @@ int LoadOptionsModule(void) hOptionsInitEvent = CreateHookableEvent(ME_OPT_INITIALISE);
HookEvent(ME_OPT_INITIALISE, LangpackOptionsInit);
+ HookEvent(ME_SYSTEM_MODULELOAD, OptDynamicLoadOptions);
HookEvent(ME_SYSTEM_MODULESLOADED, OptModulesLoaded);
HookEvent(ME_SYSTEM_PRESHUTDOWN, ShutdownOptionsModule);
return 0;
diff --git a/src/mir_app/src/pluginopts.cpp b/src/mir_app/src/pluginopts.cpp index 02e6d7b10c..200ac98f51 100644 --- a/src/mir_app/src/pluginopts.cpp +++ b/src/mir_app/src/pluginopts.cpp @@ -29,7 +29,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "chat.h"
#include "plugins.h"
-extern MUUID miid_clist, miid_database, miid_protocol, miid_srmm;
HANDLE hevLoadModule, hevUnloadModule;
static bool bOldMode = false;
@@ -44,7 +43,7 @@ struct PluginListItemData wchar_t fileName[MAX_PATH];
HINSTANCE hInst;
int flags, stdPlugin;
- wchar_t *author, *authorEmail, *description, *copyright, *homepage;
+ wchar_t *author, *description, *copyright, *homepage;
MUUID uuid;
};
@@ -101,7 +100,7 @@ static BOOL dialogListPlugins(WIN32_FIND_DATA *fd, wchar_t *path, WPARAM, LPARAM it.mask = LVIF_PARAM | LVIF_IMAGE;
it.iImage = (hInst != nullptr) ? 2 : 3;
bool bNoCheckbox = (dat->flags & STATIC_PLUGIN) != 0;
- if (bNoCheckbox || hasMuuid(pi, miid_clist) || hasMuuid(pi, miid_protocol))
+ if (bNoCheckbox || hasMuuid(pi, MIID_CLIST) || hasMuuid(pi, MIID_PROTOCOL))
it.iImage += 2;
it.lParam = (LPARAM)dat;
int iRow = ListView_InsertItem(hwndList, &it);
@@ -119,7 +118,6 @@ static BOOL dialogListPlugins(WIN32_FIND_DATA *fd, wchar_t *path, WPARAM, LPARAM ListView_SetItem(hwndList, &it);
dat->author = sttUtf8auto(pi.pluginInfo->author);
- dat->authorEmail = sttUtf8auto(pi.pluginInfo->authorEmail);
dat->copyright = sttUtf8auto(pi.pluginInfo->copyright);
dat->description = sttUtf8auto(pi.pluginInfo->description);
dat->homepage = sttUtf8auto(pi.pluginInfo->homepage);
@@ -179,7 +177,6 @@ static void RemoveAllItems(HWND hwnd) while (ListView_GetItem(hwnd, &lvi)) {
PluginListItemData *dat = (PluginListItemData*)lvi.lParam;
mir_free(dat->author);
- mir_free(dat->authorEmail);
mir_free(dat->copyright);
mir_free(dat->description);
mir_free(dat->homepage);
@@ -426,8 +423,7 @@ INT_PTR CALLBACK DlgPluginOpt(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPar ListView_GetItemText(hwndList, hdr->iItem, 2, buf, _countof(buf));
SetDlgItemText(hwndDlg, IDC_PLUGININFOFRAME, sel ? buf : L"");
SetDlgItemText(hwndDlg, IDC_PLUGINAUTHOR, sel ? dat->author : L"");
- SetDlgItemText(hwndDlg, IDC_PLUGINEMAIL, sel ? dat->authorEmail : L"");
- SetDlgItemText(hwndDlg, IDC_PLUGINLONGINFO, sel ? dat->description : L"");
+ SetDlgItemText(hwndDlg, IDC_PLUGINLONGINFO, sel ? TranslateW_LP(dat->description, GetPluginLangByInstance(dat->hInst)) : L"");
SetDlgItemText(hwndDlg, IDC_PLUGINCPYR, sel ? dat->copyright : L"");
SetDlgItemText(hwndDlg, IDC_PLUGINURL, sel ? dat->homepage : L"");
@@ -513,13 +509,10 @@ INT_PTR CALLBACK DlgPluginOpt(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPar Utils_OpenUrl("https://miranda-ng.org/downloads/");
break;
- case IDC_PLUGINEMAIL:
case IDC_PLUGINURL:
char buf[512];
- char *p = &buf[7];
- mir_strcpy(buf, "mailto:");
- if (GetDlgItemTextA(hwndDlg, LOWORD(wParam), p, _countof(buf) - 7))
- Utils_OpenUrl(LOWORD(wParam) == IDC_PLUGINEMAIL ? buf : p);
+ if (GetDlgItemTextA(hwndDlg, LOWORD(wParam), buf, _countof(buf)))
+ Utils_OpenUrl(buf);
break;
}
}
diff --git a/src/mir_app/src/resource.h b/src/mir_app/src/resource.h index 1230a2e293..d4302e4ca7 100644 --- a/src/mir_app/src/resource.h +++ b/src/mir_app/src/resource.h @@ -498,7 +498,6 @@ #define IDC_PLUGINCPYR 1681
#define IDC_PLUGINURL 1682
#define IDC_PLUGINPID 1683
-#define IDC_PLUGINEMAIL 1684
#define IDC_IDLESPIN 1687
#define IDC_NODBDRIVERS 1690
#define IDC_IDLESTATUSLOCK 1691
diff --git a/src/mir_app/src/searchresults.cpp b/src/mir_app/src/searchresults.cpp index fd8395c8d7..da1224ff7a 100644 --- a/src/mir_app/src/searchresults.cpp +++ b/src/mir_app/src/searchresults.cpp @@ -353,14 +353,9 @@ void ShowMoreOptionsMenu(HWND hwndDlg, int x, int y) int commandId = TrackPopupMenu(hPopupMenu, TPM_RIGHTBUTTON | TPM_RETURNCMD, x, y, 0, hwndDlg, nullptr);
switch (commandId) {
case IDC_ADD:
- {
- ADDCONTACTSTRUCT acs = { 0 };
- acs.handleType = HANDLE_SEARCHRESULT;
- acs.szProto = lsr->szProto;
- acs.psr = &lsr->psr;
- CallService(MS_ADDCONTACT_SHOW, (WPARAM)hwndDlg, (LPARAM)&acs);
- }
+ Contact_AddBySearch(lsr->szProto, &lsr->psr, hwndDlg);
break;
+
case IDC_DETAILS:
{
MCONTACT hContact = (MCONTACT)CallProtoServiceInt(0, lsr->szProto, PS_ADDTOLIST, PALF_TEMPORARY, (LPARAM)&lsr->psr);
diff --git a/src/mir_app/src/srmm_base.cpp b/src/mir_app/src/srmm_base.cpp index db80ec8f33..a1c7a6c595 100644 --- a/src/mir_app/src/srmm_base.cpp +++ b/src/mir_app/src/srmm_base.cpp @@ -148,6 +148,8 @@ static LRESULT CALLBACK Srmm_ButtonSubclassProc(HWND hwnd, UINT msg, WPARAM wPar ///////////////////////////////////////////////////////////////////////////////////////// +static wchar_t szTrimString[] = L":;,.!?\'\"><()[]- \r\n"; + EXTERN_C MIR_APP_DLL(LRESULT) CALLBACK stubLogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { CSrmmBaseDialog *pDlg = (CSrmmBaseDialog*)GetWindowLongPtr(GetParent(hwnd), GWLP_USERDATA); @@ -185,9 +187,12 @@ LRESULT CSrmmBaseDialog::WndProc_Log(UINT msg, WPARAM wParam, LPARAM lParam) break; case WM_CHAR: - SetFocus(m_message.GetHwnd()); - if (wParam != '\t') + if (wParam >= ' ') { + SetFocus(m_message.GetHwnd()); m_message.SendMsg(WM_CHAR, wParam, lParam); + } + else if (wParam == '\t') + SetFocus(m_message.GetHwnd()); break; case WM_CONTEXTMENU: @@ -195,9 +200,9 @@ LRESULT CSrmmBaseDialog::WndProc_Log(UINT msg, WPARAM wParam, LPARAM lParam) break; POINT pt, ptl; - m_message.SendMsg(EM_EXGETSEL, 0, (LPARAM)&sel); + m_log.SendMsg(EM_EXGETSEL, 0, (LPARAM)&sel); if (lParam == 0xFFFFFFFF) { - m_message.SendMsg(EM_POSFROMCHAR, (WPARAM)&pt, (LPARAM)sel.cpMax); + m_log.SendMsg(EM_POSFROMCHAR, (WPARAM)&pt, (LPARAM)sel.cpMax); ClientToScreen(m_log.GetHwnd(), &pt); } else { @@ -218,8 +223,6 @@ LRESULT CSrmmBaseDialog::WndProc_Log(UINT msg, WPARAM wParam, LPARAM lParam) int end = m_log.SendMsg(EM_FINDWORDBREAK, WB_RIGHT, iCharIndex); if (end - start > 0) { - static wchar_t szTrimString[] = L":;,.!?\'\"><()[]- \r\n"; - CHARRANGE cr; cr.cpMin = start; cr.cpMax = end; @@ -229,6 +232,9 @@ LRESULT CSrmmBaseDialog::WndProc_Log(UINT msg, WPARAM wParam, LPARAM lParam) tr.lpstrText = (wchar_t*)pszWord; int iRes = m_log.SendMsg(EM_GETTEXTRANGE, 0, (LPARAM)&tr); if (iRes > 0) { + wchar_t *p = wcschr(pszWord, '\r'); + if (p) *p = 0; + size_t iLen = mir_wstrlen(pszWord) - 1; while (wcschr(szTrimString, pszWord[iLen])) { pszWord[iLen] = '\0'; @@ -246,10 +252,10 @@ LRESULT CSrmmBaseDialog::WndProc_Log(UINT msg, WPARAM wParam, LPARAM lParam) break; case IDM_COPYALL: - m_message.SendMsg(EM_EXGETSEL, 0, (LPARAM)&sel); - m_message.SendMsg(EM_EXSETSEL, 0, (LPARAM)&all); - m_message.SendMsg(WM_COPY, 0, 0); - m_message.SendMsg(EM_EXSETSEL, 0, (LPARAM)&sel); + m_log.SendMsg(EM_EXGETSEL, 0, (LPARAM)&sel); + m_log.SendMsg(EM_EXSETSEL, 0, (LPARAM)&all); + m_log.SendMsg(WM_COPY, 0, 0); + m_log.SendMsg(EM_EXSETSEL, 0, (LPARAM)&sel); PostMessage(m_hwnd, WM_MOUSEACTIVATE, 0, 0); break; @@ -331,6 +337,23 @@ EXTERN_C MIR_APP_DLL(LRESULT) CALLBACK stubMessageProc(HWND hwnd, UINT msg, WPAR LRESULT CSrmmBaseDialog::WndProc_Message(UINT msg, WPARAM wParam, LPARAM lParam) { + if (msg == WM_CHAR) { + switch (wParam) { + case 0x02: + if (m_btnBold.Enabled()) + return 1; + break; + case 0x09: + if (m_btnItalic.Enabled()) + return 1; + break; + case 0x15: + if (m_btnUnderline.Enabled()) + return 1; + break; + } + } + LRESULT res = mir_callNextSubclass(m_message.GetHwnd(), stubMessageProc, msg, wParam, lParam); switch (msg) { case WM_GETDLGCODE: diff --git a/src/mir_app/src/stdafx.h b/src/mir_app/src/stdafx.h index cfcf71bf9e..7019ad5f50 100644 --- a/src/mir_app/src/stdafx.h +++ b/src/mir_app/src/stdafx.h @@ -78,7 +78,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include <m_contacts.h>
#include <m_message.h>
#include <m_userinfo.h>
-#include <m_addcontact.h>
#include <m_findadd.h>
#include <m_file.h>
#include <m_awaymsg.h>
diff --git a/src/mir_core/src/http.cpp b/src/mir_core/src/http.cpp index 3b9140c1e9..d46886a5b7 100755 --- a/src/mir_core/src/http.cpp +++ b/src/mir_core/src/http.cpp @@ -61,7 +61,7 @@ MIR_CORE_DLL(char*) mir_urlEncode(const char *szUrl) static char cb64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-MIR_CORE_DLL(char*) mir_base64_encode(const BYTE *input, unsigned inputLen)
+MIR_CORE_DLL(char*) mir_base64_encode(const void *input, size_t inputLen)
{
if (input == nullptr)
return nullptr;
@@ -74,7 +74,7 @@ MIR_CORE_DLL(char*) mir_base64_encode(const BYTE *input, unsigned inputLen) return mir_base64_encodebuf(input, inputLen, output, outputLen);
}
-MIR_CORE_DLL(char*) mir_base64_encodebuf(const BYTE *input, unsigned inputLen, char *output, unsigned outputLen)
+MIR_CORE_DLL(char*) mir_base64_encodebuf(const void *input, size_t inputLen, char *output, size_t outputLen)
{
if (input == nullptr)
return nullptr;
@@ -82,13 +82,14 @@ MIR_CORE_DLL(char*) mir_base64_encodebuf(const BYTE *input, unsigned inputLen, c if (outputLen < mir_base64_encode_bufsize(inputLen))
return nullptr;
+ const BYTE *s = (const BYTE*)input;
char *p = output;
for (unsigned i=0; i < inputLen; ) {
int rest = 0;
BYTE chr[3];
- chr[0] = input[i++];
- chr[1] = (i < inputLen) ? input[i++] : rest++, 0;
- chr[2] = (i < inputLen) ? input[i++] : rest++, 0;
+ chr[0] = s[i++];
+ chr[1] = (i < inputLen) ? s[i++] : rest++, 0;
+ chr[2] = (i < inputLen) ? s[i++] : rest++, 0;
*p++ = cb64[ chr[0] >> 2 ];
*p++ = cb64[ ((chr[0] & 0x03) << 4) | (chr[1] >> 4) ];
@@ -126,7 +127,7 @@ static BYTE Base64DecodeTable[] = -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1
};
-MIR_CORE_DLL(void*) mir_base64_decode(const char *input, unsigned *outputLen)
+MIR_CORE_DLL(void*) mir_base64_decode(const char *input, size_t *outputLen)
{
if (input == nullptr)
return nullptr;
diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def index 7d0d544d86..700a447198 100644 --- a/src/mir_core/src/mir_core.def +++ b/src/mir_core/src/mir_core.def @@ -1054,3 +1054,4 @@ HookTemporaryEvent @1241 ?Click@CCtrlButton@@QAEXXZ @1242 NONAME
??0CTimer@@QAE@$$QAV0@@Z @1243 NONAME
??4CTimer@@QAEAAV0@$$QAV0@@Z @1244 NONAME
+IsTerminalDisconnected @1245
diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def index c1d716b5d9..6608c359c7 100644 --- a/src/mir_core/src/mir_core64.def +++ b/src/mir_core/src/mir_core64.def @@ -1054,3 +1054,4 @@ HookTemporaryEvent @1241 ?Click@CCtrlButton@@QEAAXXZ @1242 NONAME
??0CTimer@@QEAA@$$QEAV0@@Z @1243 NONAME
??4CTimer@@QEAAAEAV0@$$QEAV0@@Z @1244 NONAME
+IsTerminalDisconnected @1245
diff --git a/src/mir_core/src/stdafx.h b/src/mir_core/src/stdafx.h index e72153c8b7..67dea82922 100644 --- a/src/mir_core/src/stdafx.h +++ b/src/mir_core/src/stdafx.h @@ -33,6 +33,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include <vssym32.h>
#include <Uxtheme.h>
#include <Richedit.h>
+#include <Wtsapi32.h>
#include <malloc.h>
#include <stdio.h>
diff --git a/src/mir_core/src/utf.cpp b/src/mir_core/src/utf.cpp index b6151a40d9..f159586cc0 100644 --- a/src/mir_core/src/utf.cpp +++ b/src/mir_core/src/utf.cpp @@ -392,7 +392,7 @@ MIR_CORE_DLL(char*) Utf8EncodeW(const wchar_t* src) }
/////////////////////////////////////////////////////////////////////////////////////////
-// Utf8Encode - converts UCS2 string to the UTF8-encoded format
+// Utf8CheckString - checks if a string is a valid utf8-encoded string
MIR_CORE_DLL(BOOL) Utf8CheckString(const char *str)
{
diff --git a/src/mir_core/src/winver.cpp b/src/mir_core/src/winver.cpp index 07faca4d1c..a724f6e443 100644 --- a/src/mir_core/src/winver.cpp +++ b/src/mir_core/src/winver.cpp @@ -100,6 +100,21 @@ MIR_CORE_DLL(BOOL) IsWorkstationLocked(void) return bLocked;
}
+MIR_CORE_DLL(BOOL) IsTerminalDisconnected(void)
+{
+ PVOID pBuffer = nullptr;
+ DWORD pBytesReturned = 0;
+ BOOL result = FALSE;
+
+ if (WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSConnectState, (LPTSTR *)&pBuffer, &pBytesReturned))
+ if (*(PDWORD)pBuffer == WTSDisconnected)
+ result = TRUE;
+
+ if (pBuffer)
+ WTSFreeMemory(pBuffer);
+ return result;
+}
+
MIR_CORE_DLL(BOOL) IsScreenSaverRunning(void)
{
BOOL rc = FALSE;
|