summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-05-18 14:57:07 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-05-18 14:57:07 +0300
commitc532dd787e249378642546173de437bac5a6eed6 (patch)
treef559de8901c703a6005679511004ec01fecc90e5 /src
parent5ba7647062ed142af980f9f06349c1e27d52fd9b (diff)
parent05e766ad3cabf6bb637e647a6396b9637a8c4cb2 (diff)
Merge branch 'master' of https://github.com/miranda-ng/miranda-ng
Diffstat (limited to 'src')
-rw-r--r--src/mir_app/mir_app.mk25
-rw-r--r--src/mir_app/mir_app.project2
-rw-r--r--src/mir_app/src/CMPluginBase.cpp2
-rw-r--r--src/mir_app/src/addcontact.cpp2
-rw-r--r--src/mir_app/src/auth.cpp102
-rw-r--r--src/mir_app/src/db_ini.cpp94
-rw-r--r--src/mir_app/src/miranda.cpp139
-rw-r--r--src/mir_app/src/miranda.h3
-rw-r--r--src/mir_app/src/stdafx.h2
-rw-r--r--src/mir_core/src/Linux/CCtrlBase.cpp2
-rw-r--r--src/mir_core/src/Linux/CCtrlButton.cpp2
-rw-r--r--src/mir_core/src/Linux/CCtrlCheck.cpp2
-rw-r--r--src/mir_core/src/Linux/CCtrlCombo.cpp2
-rw-r--r--src/mir_core/src/Linux/CCtrlEdit.cpp2
-rw-r--r--src/mir_core/src/Linux/CDlgBase.cpp8
15 files changed, 222 insertions, 167 deletions
diff --git a/src/mir_app/mir_app.mk b/src/mir_app/mir_app.mk
index 5163e32169..e46fe270da 100644
--- a/src/mir_app/mir_app.mk
+++ b/src/mir_app/mir_app.mk
@@ -14,7 +14,7 @@ CurrentFileName :=
CurrentFilePath :=
CurrentFileFullPath :=
User :=George Hazan
-Date :=10/05/22
+Date :=17/05/22
CodeLitePath :=/home/ghazan/.codelite
MakeDirCommand :=mkdir -p
LinkerName :=g++
@@ -62,7 +62,8 @@ AS := as
## User defined environment variables
##
CodeLiteDir:=/usr/share/codelite
-Objects0=$(IntermediateDirectory)/src_miranda.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_database.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_db_intf.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_db_events.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_contact.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_CMPluginBase.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_addcontact.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_stdafx.cxx$(ObjectSuffix)
+Objects0=$(IntermediateDirectory)/src_db_ini.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_auth.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_miranda.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_db_intf.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_db_events.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_database.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_contact.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_CMPluginBase.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_addcontact.cpp$(ObjectSuffix) $(IntermediateDirectory)/src_stdafx.cxx$(ObjectSuffix) \
+
@@ -94,16 +95,21 @@ PreBuild:
##
## Objects
##
+$(IntermediateDirectory)/src_db_ini.cpp$(ObjectSuffix): src/db_ini.cpp
+ $(CXX) $(IncludePCH) $(SourceSwitch) "/home/ghazan/miranda-ng/src/mir_app/src/db_ini.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/src_db_ini.cpp$(ObjectSuffix) $(IncludePath)
+$(IntermediateDirectory)/src_db_ini.cpp$(PreprocessSuffix): src/db_ini.cpp
+ $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/src_db_ini.cpp$(PreprocessSuffix) src/db_ini.cpp
+
+$(IntermediateDirectory)/src_auth.cpp$(ObjectSuffix): src/auth.cpp
+ $(CXX) $(IncludePCH) $(SourceSwitch) "/home/ghazan/miranda-ng/src/mir_app/src/auth.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/src_auth.cpp$(ObjectSuffix) $(IncludePath)
+$(IntermediateDirectory)/src_auth.cpp$(PreprocessSuffix): src/auth.cpp
+ $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/src_auth.cpp$(PreprocessSuffix) src/auth.cpp
+
$(IntermediateDirectory)/src_miranda.cpp$(ObjectSuffix): src/miranda.cpp
$(CXX) $(IncludePCH) $(SourceSwitch) "/home/ghazan/miranda-ng/src/mir_app/src/miranda.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/src_miranda.cpp$(ObjectSuffix) $(IncludePath)
$(IntermediateDirectory)/src_miranda.cpp$(PreprocessSuffix): src/miranda.cpp
$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/src_miranda.cpp$(PreprocessSuffix) src/miranda.cpp
-$(IntermediateDirectory)/src_database.cpp$(ObjectSuffix): src/database.cpp
- $(CXX) $(IncludePCH) $(SourceSwitch) "/home/ghazan/miranda-ng/src/mir_app/src/database.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/src_database.cpp$(ObjectSuffix) $(IncludePath)
-$(IntermediateDirectory)/src_database.cpp$(PreprocessSuffix): src/database.cpp
- $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/src_database.cpp$(PreprocessSuffix) src/database.cpp
-
$(IntermediateDirectory)/src_db_intf.cpp$(ObjectSuffix): src/db_intf.cpp
$(CXX) $(IncludePCH) $(SourceSwitch) "/home/ghazan/miranda-ng/src/mir_app/src/db_intf.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/src_db_intf.cpp$(ObjectSuffix) $(IncludePath)
$(IntermediateDirectory)/src_db_intf.cpp$(PreprocessSuffix): src/db_intf.cpp
@@ -114,6 +120,11 @@ $(IntermediateDirectory)/src_db_events.cpp$(ObjectSuffix): src/db_events.cpp
$(IntermediateDirectory)/src_db_events.cpp$(PreprocessSuffix): src/db_events.cpp
$(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/src_db_events.cpp$(PreprocessSuffix) src/db_events.cpp
+$(IntermediateDirectory)/src_database.cpp$(ObjectSuffix): src/database.cpp
+ $(CXX) $(IncludePCH) $(SourceSwitch) "/home/ghazan/miranda-ng/src/mir_app/src/database.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/src_database.cpp$(ObjectSuffix) $(IncludePath)
+$(IntermediateDirectory)/src_database.cpp$(PreprocessSuffix): src/database.cpp
+ $(CXX) $(CXXFLAGS) $(IncludePCH) $(IncludePath) $(PreprocessOnlySwitch) $(OutputSwitch) $(IntermediateDirectory)/src_database.cpp$(PreprocessSuffix) src/database.cpp
+
$(IntermediateDirectory)/src_contact.cpp$(ObjectSuffix): src/contact.cpp
$(CXX) $(IncludePCH) $(SourceSwitch) "/home/ghazan/miranda-ng/src/mir_app/src/contact.cpp" $(CXXFLAGS) $(ObjectSwitch)$(IntermediateDirectory)/src_contact.cpp$(ObjectSuffix) $(IncludePath)
$(IntermediateDirectory)/src_contact.cpp$(PreprocessSuffix): src/contact.cpp
diff --git a/src/mir_app/mir_app.project b/src/mir_app/mir_app.project
index 121dc016a2..74517f991d 100644
--- a/src/mir_app/mir_app.project
+++ b/src/mir_app/mir_app.project
@@ -3,6 +3,8 @@
<Description/>
<Dependencies/>
<VirtualDirectory Name="src">
+ <File Name="src/db_ini.cpp"/>
+ <File Name="src/auth.cpp"/>
<File Name="src/miranda.cpp"/>
<File Name="src/database.cpp"/>
<File Name="src/db_intf.cpp"/>
diff --git a/src/mir_app/src/CMPluginBase.cpp b/src/mir_app/src/CMPluginBase.cpp
index d22d410f41..3561132c44 100644
--- a/src/mir_app/src/CMPluginBase.cpp
+++ b/src/mir_app/src/CMPluginBase.cpp
@@ -82,7 +82,7 @@ MIR_APP_DLL(int) IsPluginLoaded(const MUUID &uuid)
return false;
}
-char* GetPluginNameByInstance(HINSTANCE hInst)
+const char* GetPluginNameByInstance(HINSTANCE hInst)
{
HINSTANCE boo[2] = { 0, hInst };
CMPluginBase *pPlugin = g_arPlugins.find((CMPluginBase*)&boo);
diff --git a/src/mir_app/src/addcontact.cpp b/src/mir_app/src/addcontact.cpp
index 0e97ec518d..afefeda2b4 100644
--- a/src/mir_app/src/addcontact.cpp
+++ b/src/mir_app/src/addcontact.cpp
@@ -182,7 +182,7 @@ MIR_APP_DLL(void) Contact_Add(MCONTACT hContact, HWND hwndParent)
else (new CAddByContact(hContact))->Show();
}
-MIR_APP_DLL(void) Contact_AddByEvent(MEVENT hEvent, HWND hwndParent)
+MIR_APP_DLL(void) Contact_AddByEvent(MEVENT hEvent, MWindow hwndParent)
{
struct CAddByEvent : public CAddContactDlg
{
diff --git a/src/mir_app/src/auth.cpp b/src/mir_app/src/auth.cpp
index 8c12b475ff..8518bc1a63 100644
--- a/src/mir_app/src/auth.cpp
+++ b/src/mir_app/src/auth.cpp
@@ -33,13 +33,19 @@ class CAuthReqDlg : public CDlgBase
MCONTACT m_hContact;
const char *m_szProto;
+ CCtrlBase fldHeader, fldReason;
+ CCtrlEdit edtReason;
CCtrlCheck chkAdd;
- CCtrlButton btnDetails, btnLater;
+ CCtrlButton btnAdd, btnDetails, btnLater;
public:
CAuthReqDlg(MEVENT hEvent) :
CDlgBase(g_plugin, IDD_AUTHREQ),
m_hDbEvent(hEvent),
+ fldHeader(this, IDC_HEADERBAR),
+ fldReason(this, IDC_REASON),
+ edtReason(this, IDC_DENYREASON),
+ btnAdd(this, IDC_ADD),
btnLater(this, IDC_DECIDELATER),
btnDetails(this, IDC_DETAILS),
chkAdd(this, IDC_ADDCHECK)
@@ -60,6 +66,7 @@ public:
return false;
m_szProto = dbei.szModule;
+ PROTOACCOUNT *acc = Proto_GetAccount(dbei.szModule);
uint32_t uin = *(uint32_t*)dbei.pBlob;
m_hContact = DbGetAuthEventContact(&dbei);
@@ -69,8 +76,10 @@ public:
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));
+ #ifdef _WINDOWS
+ 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));
+ #endif
ptrW lastT(dbei.flags & DBEF_UTF ? mir_utf8decodeW(last) : mir_a2u(last));
ptrW firstT(dbei.flags & DBEF_UTF ? mir_utf8decodeW(first) : mir_a2u(first));
@@ -78,43 +87,40 @@ public:
ptrW emailT(dbei.flags & DBEF_UTF ? mir_utf8decodeW(email) : mir_a2u(email));
ptrW reasonT(dbei.flags & DBEF_UTF ? mir_utf8decodeW(reason) : mir_a2u(reason));
- wchar_t name[128] = L"";
- int off = 0;
+ CMStringW wszHeader;
if (firstT[0] && lastT[0])
- off = mir_snwprintf(name, L"%s %s", (wchar_t*)firstT, (wchar_t*)lastT);
+ wszHeader.Format(L"%s %s", (wchar_t*)firstT, (wchar_t*)lastT);
else if (firstT[0])
- off = mir_snwprintf(name, L"%s", (wchar_t*)firstT);
+ wszHeader = firstT.get();
else if (lastT[0])
- off = mir_snwprintf(name, L"%s", (wchar_t*)lastT);
+ wszHeader = lastT.get();
+
if (mir_wstrlen(nickT)) {
- if (off)
- mir_snwprintf(name + off, _countof(name) - off, L" (%s)", (wchar_t*)nickT);
+ if (wszHeader.IsEmpty())
+ wszHeader = nickT.get();
else
- wcsncpy_s(name, nickT, _TRUNCATE);
+ wszHeader.AppendFormat(L" %s", nickT.get());
}
- if (!name[0])
- wcsncpy_s(name, TranslateT("<Unknown>"), _TRUNCATE);
+ if (wszHeader.IsEmpty())
+ wszHeader = TranslateT("<Unknown>");
- 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);
+ wszHeader.AppendFormat(TranslateT(" requested authorization\n%u (%s) on %s"), uin, emailT.get(), acc->tszAccountName);
else if (uin)
- mir_snwprintf(hdr, TranslateT("%s requested authorization\n%u on %s"), name, uin, acc->tszAccountName);
+ wszHeader.AppendFormat(TranslateT(" requested authorization\n%u on %s"), 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);
+ wszHeader.AppendFormat(TranslateT(" requested authorization\n%s on %s"), emailT[0] ? emailT.get() : TranslateT("(Unknown)"), acc->tszAccountName);
+ fldHeader.SetText(wszHeader);
- SetDlgItemText(m_hwnd, IDC_HEADERBAR, hdr);
- SetDlgItemText(m_hwnd, IDC_REASON, reasonT);
+ fldReason.SetText(reasonT);
if (m_hContact == INVALID_CONTACT_ID || Contact_OnList(m_hContact))
- ShowWindow(GetDlgItem(m_hwnd, IDC_ADD), FALSE);
+ btnAdd.Hide();
- SendDlgItemMessage(m_hwnd, IDC_DENYREASON, EM_LIMITTEXT, 255, 0);
+ edtReason.SetMaxLength(255);
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"));
+ edtReason.Disable();
+ edtReason.SetText(TranslateT("Feature is not supported by protocol"));
}
if (Contact_OnList(m_hContact)) {
@@ -137,18 +143,19 @@ public:
void OnDestroy() override
{
if (!m_bSucceeded) {
- 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);
+ if (edtReason.Enabled())
+ CallProtoService(m_szProto, PS_AUTHDENY, m_hDbEvent, (LPARAM)ptrW(edtReason.GetText()));
+ else
+ CallProtoService(m_szProto, PS_AUTHDENY, m_hDbEvent, 0);
}
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));
+
+ #ifdef _WINDOWS
+ DestroyIcon((HICON)SendMessage(m_hwnd, WM_SETICON, ICON_BIG, 0));
+ DestroyIcon((HICON)SendMessage(m_hwnd, WM_SETICON, ICON_SMALL, 0));
+ #endif
}
void onClick_Later(CCtrlButton*)
@@ -176,6 +183,7 @@ class CAddedDlg : public CDlgBase
MEVENT m_hDbEvent;
MCONTACT m_hContact;
+ CCtrlBase fldHeader;
CCtrlButton btnDetails, btnAdd;
public:
@@ -183,7 +191,8 @@ public:
CDlgBase(g_plugin, IDD_ADDED),
m_hDbEvent(hEvent),
btnAdd(this, IDC_ADD),
- btnDetails(this, IDC_DETAILS)
+ btnDetails(this, IDC_DETAILS),
+ fldHeader(this, IDC_HEADERBAR)
{
btnAdd.OnClick = Callback(this, &CAddedDlg::onClick_Add);
btnDetails.OnClick = Callback(this, &CAddedDlg::onClick_Details);
@@ -201,14 +210,16 @@ public:
m_hContact = DbGetAuthEventContact(&dbei);
- uint32_t uin = *(PDWORD)dbei.pBlob;
+ uint32_t uin = *(uint32_t*)dbei.pBlob;
char* nick = (char*)dbei.pBlob + sizeof(uint32_t) * 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));
+ #ifdef _WINDOWS
+ 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));
+ #endif
PROTOACCOUNT* acc = Proto_GetAccount(dbei.szModule);
@@ -241,10 +252,10 @@ public:
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.get() : TranslateT("(Unknown)"), acc->tszAccountName);
- SetDlgItemText(m_hwnd, IDC_HEADERBAR, hdr);
+ fldHeader.SetText(hdr);
if (m_hContact == INVALID_CONTACT_ID || Contact_OnList(m_hContact))
- ShowWindow(GetDlgItem(m_hwnd, IDC_ADD), FALSE);
+ btnAdd.Hide();
return true;
}
@@ -258,8 +269,11 @@ public:
{
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));
+
+ #ifdef _WINDOWS
+ DestroyIcon((HICON)SendMessage(m_hwnd, WM_SETICON, ICON_BIG, 0));
+ DestroyIcon((HICON)SendMessage(m_hwnd, WM_SETICON, ICON_SMALL, 0));
+ #endif
}
void onClick_Add(CCtrlButton*)
@@ -267,7 +281,7 @@ public:
Contact_AddByEvent(m_hDbEvent, m_hwnd);
if (m_hContact == INVALID_CONTACT_ID || Contact_OnList(m_hContact))
- ShowWindow(GetDlgItem(m_hwnd, IDC_ADD), FALSE);
+ btnAdd.Hide();
}
void onClick_Details(CCtrlButton*)
@@ -316,7 +330,7 @@ static int AuthEventAdded(WPARAM, LPARAM lParam)
if (szUid)
mir_snwprintf(szTooltip, TranslateT("%s requests authorization"), szUid.get());
else
- mir_snwprintf(szTooltip, TranslateT("%u requests authorization"), *(PDWORD)dbei.pBlob);
+ mir_snwprintf(szTooltip, TranslateT("%u requests authorization"), *(uint32_t*)dbei.pBlob);
cle.hIcon = Skin_LoadIcon(SKINICON_AUTH_REQUEST);
cle.pszService = MS_AUTH_SHOWREQUEST;
@@ -327,7 +341,7 @@ static int AuthEventAdded(WPARAM, LPARAM lParam)
if (szUid)
mir_snwprintf(szTooltip, TranslateT("%s added you to their contact list"), szUid.get());
else
- mir_snwprintf(szTooltip, TranslateT("%u added you to their contact list"), *(PDWORD)dbei.pBlob);
+ mir_snwprintf(szTooltip, TranslateT("%u added you to their contact list"), *(uint32_t*)dbei.pBlob);
cle.hIcon = Skin_LoadIcon(SKINICON_AUTH_ADD);
cle.pszService = MS_AUTH_SHOWADDED;
diff --git a/src/mir_app/src/db_ini.cpp b/src/mir_app/src/db_ini.cpp
index 910f0732f6..a51e4858b9 100644
--- a/src/mir_app/src/db_ini.cpp
+++ b/src/mir_app/src/db_ini.cpp
@@ -130,11 +130,11 @@ static bool IsInSpaceSeparatedList(const char *szWord, const char *szList)
struct warnSettingChangeInfo_t
{
wchar_t *szIniPath;
- char *szSection;
- char *szSafeSections;
- char *szUnsafeSections;
- char *szName;
- char *szValue;
+ const char *szSection;
+ const char *szSafeSections;
+ const char *szUnsafeSections;
+ const char *szName;
+ const char *szValue;
int warnNoMore, cancel;
};
@@ -230,12 +230,14 @@ public:
m_iniPath.SetText(m_path);
m_newPath.SetText(m_path);
- if (!PU::IsMirandaFolderWritable()) {
- bool bIsElevated = PU::IsProcessElevated();
- Button_SetElevationRequiredState(btnMove.GetHwnd(), !bIsElevated);
- Button_SetElevationRequiredState(btnDelete.GetHwnd(), !bIsElevated);
- Button_SetElevationRequiredState(btnRecycle.GetHwnd(), !bIsElevated);
- }
+ #ifdef _WINDOWS
+ if (!PU::IsMirandaFolderWritable()) {
+ bool bIsElevated = PU::IsProcessElevated();
+ Button_SetElevationRequiredState(btnMove.GetHwnd(), !bIsElevated);
+ Button_SetElevationRequiredState(btnDelete.GetHwnd(), !bIsElevated);
+ Button_SetElevationRequiredState(btnRecycle.GetHwnd(), !bIsElevated);
+ }
+ #endif
return true;
}
@@ -244,7 +246,7 @@ public:
{
ptrW wszOldFile(m_iniPath.GetText()), wszNewFile(ptrW(m_newPath.GetText()));
if (!wcsicmp(wszOldFile, wszNewFile)) {
- MessageBoxW(m_hwnd, TranslateT("File names must be different"), TranslateT("Error"), MB_ICONERROR | MB_OK);
+ // MessageBoxW(m_hwnd, TranslateT("File names must be different"), TranslateT("Error"), MB_ICONERROR | MB_OK);
return;
}
@@ -283,22 +285,6 @@ int SettingsEnumProc(const char *szSetting, void *)
return 0;
}
-static void ConvertBackslashes(char *str, UINT fileCp)
-{
- char *pstr;
- for (pstr = str; *pstr; pstr = CharNextExA(fileCp, pstr, 0)) {
- if (*pstr == '\\') {
- switch (pstr[1]) {
- case 'n': *pstr = '\n'; break;
- case 't': *pstr = '\t'; break;
- case 'r': *pstr = '\r'; break;
- default: *pstr = pstr[1]; break;
- }
- memmove(pstr + 1, pstr + 2, mir_strlen(pstr + 2) + 1);
- }
- }
-}
-
struct ESFDParam
{
LIST<char> *pList;
@@ -313,7 +299,7 @@ static int EnumSettingsForDeletion(const char *szSetting, void *param)
return 0;
}
-static void ProcessIniFile(wchar_t* szIniPath, char *szSafeSections, char *szUnsafeSections, int secur, bool secFN)
+static void ProcessIniFile(wchar_t* szIniPath, const char *szSafeSections, const char *szUnsafeSections, int secur, bool secFN)
{
FILE *fp = _wfopen(szIniPath, L"rt");
if (fp == nullptr)
@@ -362,6 +348,7 @@ LBL_NewLine:
}
if (secFN) warnThisSection = 0;
}
+
if (szLine[1] == '?' || szLine[1] == '-') {
mir_strncpy(szSection, szLine + 2, min(sizeof(szSection), (size_t)(szEnd - szLine - 1)));
db_enum_settings(0, SettingsEnumProc, szSection);
@@ -437,7 +424,15 @@ LBL_NewLine:
break;
case 'e':
case 'E':
- ConvertBackslashes(szValue + 1, Langpack_GetDefaultCodePage());
+ {
+ CMStringA str(szValue + 1);
+ str.Replace("\\n", "\n");
+ str.Replace("\\t", "\t");
+ str.Replace("\\r", "\r");
+ str.Replace("\\\\", "\\");
+ db_set_s(0, szSection, szName, str);
+ }
+ break;
case 's':
case 'S':
db_set_s(0, szSection, szName, szValue + 1);
@@ -541,21 +536,17 @@ static void DoAutoExec(void)
PathToAbsoluteW(VARSW(szFindPath), szFindPath);
- WIN32_FIND_DATA fd;
- HANDLE hFind = FindFirstFile(szFindPath, &fd);
- if (hFind == INVALID_HANDLE_VALUE)
- return;
-
+ MFilePath path(szFindPath);
wchar_t *str2 = wcsrchr(szFindPath, '\\');
if (str2 == nullptr)
szFindPath[0] = 0;
else
str2[1] = 0;
- do {
- bool secFN = mir_wstrcmpi(fd.cFileName, szOverrideSecurityFilename) == 0;
+ for (auto &it: path.search()) {
+ bool secFN = mir_wstrcmpi(it.getPath(), szOverrideSecurityFilename) == 0;
- mir_snwprintf(szIniPath, L"%s%s", szFindPath, fd.cFileName);
+ mir_snwprintf(szIniPath, L"%s%s", szFindPath, it.getPath());
if (!mir_wstrcmpi(szUse, L"prompt") && !secFN) {
CInstallIniDlg dlg(szIniPath);
int result = dlg.DoModal();
@@ -578,7 +569,7 @@ static void DoAutoExec(void)
else if (!mir_wstrcmpi(szOnCompletion, L"rename")) {
wchar_t wszRenamePrefix[MAX_PATH], wszNewPath[MAX_PATH];
Profile_GetSetting(L"AutoExec/RenamePrefix", wszRenamePrefix, L"done_");
- mir_snwprintf(wszNewPath, L"%s%s%s", szFindPath, wszRenamePrefix, fd.cFileName);
+ mir_snwprintf(wszNewPath, L"%s%s%s", szFindPath, wszRenamePrefix, it.getPath());
MyMoveFile(szIniPath, wszNewPath);
}
else if (!mir_wstrcmpi(szOnCompletion, L"ask")) {
@@ -586,15 +577,16 @@ static void DoAutoExec(void)
dlg.DoModal();
}
}
- } while (FindNextFile(hFind, &fd));
-
- FindClose(hFind);
+ }
}
static void CALLBACK CheckIniImportNow()
{
DoAutoExec();
- FindNextChangeNotification(hIniChangeNotification);
+
+ #ifdef _WINDOWS
+ FindNextChangeNotification(hIniChangeNotification);
+ #endif
}
static INT_PTR ImportINI(WPARAM wParam, LPARAM)
@@ -610,11 +602,13 @@ int InitIni(void)
CreateServiceFunction("DB/Ini/ImportFile", ImportINI);
DoAutoExec();
- wchar_t szMirandaDir[MAX_PATH];
- PathToAbsoluteW(L".", szMirandaDir);
- hIniChangeNotification = FindFirstChangeNotification(szMirandaDir, 0, FILE_NOTIFY_CHANGE_FILE_NAME);
- if (hIniChangeNotification != INVALID_HANDLE_VALUE)
- Miranda_WaitOnHandle(CheckIniImportNow, hIniChangeNotification);
+ #ifdef _WINDOWS
+ wchar_t szMirandaDir[MAX_PATH];
+ PathToAbsoluteW(L".", szMirandaDir);
+ hIniChangeNotification = FindFirstChangeNotification(szMirandaDir, 0, FILE_NOTIFY_CHANGE_FILE_NAME);
+ if (hIniChangeNotification != INVALID_HANDLE_VALUE)
+ Miranda_WaitOnHandle(CheckIniImportNow, hIniChangeNotification);
+ #endif
return 0;
}
@@ -624,5 +618,7 @@ void UninitIni(void)
if (!bModuleInitialized)
return;
- FindCloseChangeNotification(hIniChangeNotification);
+ #ifdef _WINDOWS
+ FindCloseChangeNotification(hIniChangeNotification);
+ #endif
}
diff --git a/src/mir_app/src/miranda.cpp b/src/mir_app/src/miranda.cpp
index 12c4d64c69..4f6e7b1beb 100644
--- a/src/mir_app/src/miranda.cpp
+++ b/src/mir_app/src/miranda.cpp
@@ -61,6 +61,8 @@ CMPlugin::CMPlugin() :
PLUGIN<CMPlugin>(nullptr, pluginInfoEx)
{}
+#ifdef _WINDOWS
+
/////////////////////////////////////////////////////////////////////////////////////////
// dll entry point
@@ -83,6 +85,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, uint32_t dwReason, LPVOID)
return TRUE;
}
+#endif
+
/////////////////////////////////////////////////////////////////////////////////////////
static int SystemShutdownProc(WPARAM, LPARAM)
@@ -117,10 +121,13 @@ protected:
{
if (m_progress.Move() == MIRANDA_PROCESS_WAIT_STEPS)
EndModal(0);
- if (WaitForSingleObject(m_hProcess, 1) != WAIT_TIMEOUT) {
- m_progress.SetPosition(MIRANDA_PROCESS_WAIT_STEPS);
- EndModal(0);
- }
+
+ #ifdef _WINDOWS
+ if (WaitForSingleObject(m_hProcess, 1) != WAIT_TIMEOUT) {
+ m_progress.SetPosition(MIRANDA_PROCESS_WAIT_STEPS);
+ EndModal(0);
+ }
+ #endif
}
void Cancel_OnClick(CCtrlBase*)
@@ -145,12 +152,14 @@ INT_PTR CheckRestart()
{
LPCTSTR tszPID = CmdLine_GetOption(L"restart");
if (tszPID) {
- HANDLE hProcess = OpenProcess(SYNCHRONIZE, FALSE, _wtol(tszPID));
- if (hProcess) {
- INT_PTR result = CWaitRestartDlg(hProcess).DoModal();
- CloseHandle(hProcess);
- return result;
- }
+ #ifdef _WINDOWS
+ HANDLE hProcess = OpenProcess(SYNCHRONIZE, FALSE, _wtol(tszPID));
+ if (hProcess) {
+ INT_PTR result = CWaitRestartDlg(hProcess).DoModal();
+ CloseHandle(hProcess);
+ return result;
+ }
+ #endif
}
return 0;
}
@@ -171,7 +180,7 @@ static MSystemWindow *g_pSystemWindow;
/////////////////////////////////////////////////////////////////////////////////////////
-int WINAPI mir_main(LPTSTR cmdLine)
+int CALLBACK mir_main(LPTSTR cmdLine)
{
hMainThreadId = GetCurrentThreadId();
@@ -227,15 +236,19 @@ MIR_APP_DLL(bool) Miranda_OkToExit()
MIR_APP_DLL(void) Miranda_Close()
{
while (!Miranda_OkToExit()) {
- MSG msg;
- while (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- Sleep(0);
+ #ifdef _WINDOWS
+ MSG msg;
+ while (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ Sleep(0);
+ #endif
}
- DestroyWindow(g_clistApi.hwndContactList);
+ #ifdef _WINDOWS
+ DestroyWindow(g_clistApi.hwndContactList);
+ #endif
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -243,53 +256,67 @@ MIR_APP_DLL(void) Miranda_Close()
MIR_APP_DLL(uint32_t) Miranda_GetVersion()
{
- wchar_t filename[MAX_PATH];
- GetModuleFileName(g_plugin.getInst(), filename, _countof(filename));
-
- DWORD unused, verInfoSize = GetFileVersionInfoSize(filename, &unused);
- PVOID pVerInfo = _alloca(verInfoSize);
- GetFileVersionInfo(filename, 0, verInfoSize, pVerInfo);
-
- UINT blockSize;
- VS_FIXEDFILEINFO *vsffi;
- VerQueryValue(pVerInfo, L"\\", (PVOID*)&vsffi, &blockSize);
- return (((vsffi->dwProductVersionMS >> 16) & 0xFF) << 24) |
- ((vsffi->dwProductVersionMS & 0xFF) << 16) |
- (((vsffi->dwProductVersionLS >> 16) & 0xFF) << 8) |
- (vsffi->dwProductVersionLS & 0xFF);
+ #ifdef _WINDOWS
+ wchar_t filename[MAX_PATH];
+ GetModuleFileName(g_plugin.getInst(), filename, _countof(filename));
+
+ DWORD unused, verInfoSize = GetFileVersionInfoSize(filename, &unused);
+ PVOID pVerInfo = _alloca(verInfoSize);
+ GetFileVersionInfo(filename, 0, verInfoSize, pVerInfo);
+
+ UINT blockSize;
+ VS_FIXEDFILEINFO *vsffi;
+ VerQueryValue(pVerInfo, L"\\", (PVOID*)&vsffi, &blockSize);
+ return (((vsffi->dwProductVersionMS >> 16) & 0xFF) << 24) |
+ ((vsffi->dwProductVersionMS & 0xFF) << 16) |
+ (((vsffi->dwProductVersionLS >> 16) & 0xFF) << 8) |
+ (vsffi->dwProductVersionLS & 0xFF);
+ #else
+ return MIRANDA_VERSION_DWORD;
+ #endif
}
MIR_APP_DLL(void) Miranda_GetFileVersion(MFileVersion *pVer)
{
- wchar_t filename[MAX_PATH];
- GetModuleFileName(g_plugin.getInst(), filename, _countof(filename));
-
- DWORD unused, verInfoSize = GetFileVersionInfoSize(filename, &unused);
- PVOID pVerInfo = _alloca(verInfoSize);
- GetFileVersionInfo(filename, 0, verInfoSize, pVerInfo);
-
- UINT blockSize;
- VS_FIXEDFILEINFO *vsffi;
- VerQueryValue(pVerInfo, L"\\", (PVOID*)&vsffi, &blockSize);
-
- (*pVer)[0] = HIWORD(vsffi->dwProductVersionMS);
- (*pVer)[1] = LOWORD(vsffi->dwProductVersionMS);
- (*pVer)[2] = HIWORD(vsffi->dwProductVersionLS);
- (*pVer)[3] = LOWORD(vsffi->dwProductVersionLS);
+ #ifdef _WINDOWS
+ wchar_t filename[MAX_PATH];
+ GetModuleFileName(g_plugin.getInst(), filename, _countof(filename));
+
+ DWORD unused, verInfoSize = GetFileVersionInfoSize(filename, &unused);
+ PVOID pVerInfo = _alloca(verInfoSize);
+ GetFileVersionInfo(filename, 0, verInfoSize, pVerInfo);
+
+ UINT blockSize;
+ VS_FIXEDFILEINFO *vsffi;
+ VerQueryValue(pVerInfo, L"\\", (PVOID*)&vsffi, &blockSize);
+
+ (*pVer)[0] = HIWORD(vsffi->dwProductVersionMS);
+ (*pVer)[1] = LOWORD(vsffi->dwProductVersionMS);
+ (*pVer)[2] = HIWORD(vsffi->dwProductVersionLS);
+ (*pVer)[3] = LOWORD(vsffi->dwProductVersionLS);
+ #else
+ uint16_t tmp[4] = { MIRANDA_VERSION_FILEVERSION };
+ memcpy(pVer, tmp, sizeof(tmp));
+ #endif
}
MIR_APP_DLL(void) Miranda_GetVersionText(char *pDest, size_t cbSize)
{
- wchar_t filename[MAX_PATH], *productVersion;
- GetModuleFileName(g_plugin.getInst(), filename, _countof(filename));
-
- DWORD unused, verInfoSize = GetFileVersionInfoSize(filename, &unused);
- PVOID pVerInfo = _alloca(verInfoSize);
- GetFileVersionInfo(filename, 0, verInfoSize, pVerInfo);
+ #ifdef _WINDOWS
+ wchar_t filename[MAX_PATH], *productVersion;
+ GetModuleFileName(g_plugin.getInst(), filename, _countof(filename));
+
+ DWORD unused, verInfoSize = GetFileVersionInfoSize(filename, &unused);
+ PVOID pVerInfo = _alloca(verInfoSize);
+ GetFileVersionInfo(filename, 0, verInfoSize, pVerInfo);
+
+ UINT blockSize;
+ VerQueryValue(pVerInfo, L"\\StringFileInfo\\000004b0\\ProductVersion", (LPVOID*)&productVersion, &blockSize);
+ strncpy_s(pDest, cbSize, _T2A(productVersion), _TRUNCATE);
+ #else
+ strncpy_s(pDest, cbSize, "Miranda NG " MIRANDA_VERSION_DISPLAY, _TRUNCATE);
+ #endif
- UINT blockSize;
- VerQueryValue(pVerInfo, L"\\StringFileInfo\\000004b0\\ProductVersion", (LPVOID*)&productVersion, &blockSize);
- strncpy_s(pDest, cbSize, _T2A(productVersion), _TRUNCATE);
#if defined(_WIN64)
strcat_s(pDest, cbSize, " x64");
#endif
diff --git a/src/mir_app/src/miranda.h b/src/mir_app/src/miranda.h
index c3f476c21a..97aee60c7b 100644
--- a/src/mir_app/src/miranda.h
+++ b/src/mir_app/src/miranda.h
@@ -54,7 +54,8 @@ extern bool g_bModulesLoadedFired;
/**** newplugins.cpp *******************************************************************/
-char* GetPluginNameByInstance(HINSTANCE hInstance);
+const char* GetPluginNameByInstance(HINSTANCE hInstance);
+
int LoadStdPlugins(void);
int LaunchServicePlugin(pluginEntry *p);
diff --git a/src/mir_app/src/stdafx.h b/src/mir_app/src/stdafx.h
index d6770083fa..9e8bb456c8 100644
--- a/src/mir_app/src/stdafx.h
+++ b/src/mir_app/src/stdafx.h
@@ -41,6 +41,8 @@ typedef struct SslHandle *HSSL;
#include <io.h>
#include <direct.h>
#include <process.h>
+#else
+ #include <pthread.h>
#endif
#include <assert.h>
diff --git a/src/mir_core/src/Linux/CCtrlBase.cpp b/src/mir_core/src/Linux/CCtrlBase.cpp
index 61d03c99af..cba8567e52 100644
--- a/src/mir_core/src/Linux/CCtrlBase.cpp
+++ b/src/mir_core/src/Linux/CCtrlBase.cpp
@@ -28,6 +28,7 @@ static int CompareControls(const CCtrlBase *p1, const CCtrlBase *p2)
{
return (INT_PTR)p1->GetHwnd() - (INT_PTR)p2->GetHwnd();
}
+
static LIST<CCtrlBase> arControls(10, CompareControls);
/////////////////////////////////////////////////////////////////////////////////////////
@@ -60,6 +61,7 @@ void CCtrlBase::OnDestroy()
arControls.remove(pCtrl);
}
+ evas_object_del(m_hwnd);
m_hwnd = nullptr;
}
diff --git a/src/mir_core/src/Linux/CCtrlButton.cpp b/src/mir_core/src/Linux/CCtrlButton.cpp
index 1fb547bef8..e8c107b888 100644
--- a/src/mir_core/src/Linux/CCtrlButton.cpp
+++ b/src/mir_core/src/Linux/CCtrlButton.cpp
@@ -29,7 +29,7 @@ CCtrlButton::CCtrlButton(CDlgBase* wnd, int idCtrl)
: CCtrlBase(wnd, idCtrl)
{}
-BOOL CCtrlButton::OnCommand(HWND, uint16_t, uint16_t idCode)
+BOOL CCtrlButton::OnCommand(MWindow, uint16_t, uint16_t idCode)
{
// if (idCode == BN_CLICKED)
// OnClick(this);
diff --git a/src/mir_core/src/Linux/CCtrlCheck.cpp b/src/mir_core/src/Linux/CCtrlCheck.cpp
index 15c9ab0f1b..7c821f0329 100644
--- a/src/mir_core/src/Linux/CCtrlCheck.cpp
+++ b/src/mir_core/src/Linux/CCtrlCheck.cpp
@@ -31,7 +31,7 @@ CCtrlCheck::CCtrlCheck(CDlgBase *dlg, int ctrlId)
m_bNotifiable = true;
}
-BOOL CCtrlCheck::OnCommand(HWND, uint16_t, uint16_t)
+BOOL CCtrlCheck::OnCommand(MWindow, uint16_t, uint16_t)
{
NotifyChange();
return TRUE;
diff --git a/src/mir_core/src/Linux/CCtrlCombo.cpp b/src/mir_core/src/Linux/CCtrlCombo.cpp
index 905ebc7a24..063588e39e 100644
--- a/src/mir_core/src/Linux/CCtrlCombo.cpp
+++ b/src/mir_core/src/Linux/CCtrlCombo.cpp
@@ -29,7 +29,7 @@ CCtrlCombo::CCtrlCombo(CDlgBase *dlg, int ctrlId)
: CCtrlData(dlg, ctrlId)
{}
-BOOL CCtrlCombo::OnCommand(HWND, uint16_t, uint16_t idCode)
+BOOL CCtrlCombo::OnCommand(MWindow, uint16_t, uint16_t idCode)
{
switch (idCode) {
// case CBN_CLOSEUP: OnCloseup(this); break;
diff --git a/src/mir_core/src/Linux/CCtrlEdit.cpp b/src/mir_core/src/Linux/CCtrlEdit.cpp
index b2b5e14d46..7f1ac14cc2 100644
--- a/src/mir_core/src/Linux/CCtrlEdit.cpp
+++ b/src/mir_core/src/Linux/CCtrlEdit.cpp
@@ -29,7 +29,7 @@ CCtrlEdit::CCtrlEdit(CDlgBase *dlg, int ctrlId)
: CCtrlData(dlg, ctrlId)
{}
-BOOL CCtrlEdit::OnCommand(HWND, uint16_t, uint16_t idCode)
+BOOL CCtrlEdit::OnCommand(MWindow, uint16_t, uint16_t idCode)
{
// if (idCode == EN_CHANGE)
// NotifyChange();
diff --git a/src/mir_core/src/Linux/CDlgBase.cpp b/src/mir_core/src/Linux/CDlgBase.cpp
index 425e71ee31..3504a7e74c 100644
--- a/src/mir_core/src/Linux/CDlgBase.cpp
+++ b/src/mir_core/src/Linux/CDlgBase.cpp
@@ -175,7 +175,7 @@ int CDlgBase::Resizer(UTILRESIZECONTROL*)
return RD_ANCHORX_LEFT | RD_ANCHORY_TOP;
}
-BOOL CALLBACK CDlgBase::GlobalFieldEnum(HWND hwnd, LPARAM lParam)
+BOOL CALLBACK CDlgBase::GlobalFieldEnum(MWindow hwnd, LPARAM lParam)
{
return TRUE;
}
@@ -185,7 +185,7 @@ INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
return FALSE;
}
-int CDlgBase::GlobalDlgResizer(HWND hwnd, LPARAM, UTILRESIZECONTROL *urc)
+int CDlgBase::GlobalDlgResizer(MWindow hwnd, LPARAM, UTILRESIZECONTROL *urc)
{
CDlgBase *wnd = CDlgBase::Find(hwnd);
return (wnd == nullptr) ? 0 : wnd->Resizer(urc);
@@ -226,7 +226,7 @@ CCtrlBase* CDlgBase::FindControl(int idCtrl)
return m_controls.find(&search);
}
-CCtrlBase* CDlgBase::FindControl(HWND hwnd)
+CCtrlBase* CDlgBase::FindControl(MWindow hwnd)
{
for (auto &it : m_controls)
if (it->GetHwnd() == hwnd)
@@ -252,7 +252,7 @@ CTimer* CDlgBase::FindTimer(int idEvent)
return m_timers.find(&search);
}
-CDlgBase* CDlgBase::Find(HWND hwnd)
+CDlgBase* CDlgBase::Find(MWindow hwnd)
{
void *bullshit[2]; // vfptr + hwnd
bullshit[1] = hwnd;