[FarGroup/FarManager] master: Refactoring (901d3ca56)

0 views
Skip to first unread message

farg...@farmanager.com

unread,
Jun 10, 2026, 5:16:00 PM (7 days ago) Jun 10
to farco...@googlegroups.com
Repository : https://github.com/FarGroup/FarManager
On branch : master
Link : https://github.com/FarGroup/FarManager/commit/901d3ca563469822e52f062da071df8e39c6fa24

>---------------------------------------------------------------

commit 901d3ca563469822e52f062da071df8e39c6fa24
Author: Alex Alabuzhev <alab...@gmail.com>
Date: Wed Jun 10 22:12:44 2026 +0100

Refactoring

More explicit com initialisation


>---------------------------------------------------------------

901d3ca563469822e52f062da071df8e39c6fa24
far/filestr.cpp | 2 +-
far/platform.com.cpp | 10 +++++-----
far/platform.com.hpp | 8 +++++++-
far/stddlg.cpp | 2 +-
far/taskbar.cpp | 2 +-
5 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/far/filestr.cpp b/far/filestr.cpp
index 656b5d07e..66fc7443c 100644
--- a/far/filestr.cpp
+++ b/far/filestr.cpp
@@ -406,7 +406,7 @@ static bool GetUnicodeCpUsingWindows(const void* Data, size_t Size, uintptr_t& C

static bool GetCpUsingML(std::string_view Str, uintptr_t& Codepage, function_ref<bool(uintptr_t)> const IsCodepageAcceptable)
{
- SCOPED_ACTION(os::com::initialize);
+ SCOPED_ACTION(os::com::initialize)(os::com::mode::sta);

os::com::ptr<IMultiLanguage2> ML;
if (const auto Result = CoCreateInstance(CLSID_CMultiLanguage, {}, CLSCTX_INPROC_SERVER, IID_IMultiLanguage2, IID_PPV_ARGS_Helper(&ptr_setter(ML))); FAILED(Result))
diff --git a/far/platform.com.cpp b/far/platform.com.cpp
index 5f85ec608..33ebce2da 100644
--- a/far/platform.com.cpp
+++ b/far/platform.com.cpp
@@ -52,9 +52,9 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

namespace os::com
{
- static bool initialize_impl()
+ static bool initialize_impl(mode const Mode)
{
- if (const auto Result = CoInitializeEx({}, COINIT_DISABLE_OLE1DDE | COINIT_MULTITHREADED); FAILED(Result))
+ if (const auto Result = CoInitializeEx({}, COINIT_DISABLE_OLE1DDE | (Mode == mode::sta? COINIT_APARTMENTTHREADED : COINIT_MULTITHREADED)); FAILED(Result))
{
LOG(Result == RPC_E_CHANGED_MODE? logging::level::warning : logging::level::error, L"CoInitializeEx(): {}"sv, format_error(Result));
return false;
@@ -63,8 +63,8 @@ namespace os::com
return true;
}

- initialize::initialize():
- m_Initialised(initialize_impl())
+ initialize::initialize(mode const Mode):
+ m_Initialised(initialize_impl(Mode))
{
}

@@ -97,7 +97,7 @@ namespace os::com

try
{
- SCOPED_ACTION(initialize);
+ SCOPED_ACTION(initialize)(mode::sta);

ptr<IShellFolder> ShellFolder;
COM_INVOKE(SHGetDesktopFolder, (&ptr_setter(ShellFolder)));
diff --git a/far/platform.com.hpp b/far/platform.com.hpp
index 8f22dbda7..d5bf1f575 100644
--- a/far/platform.com.hpp
+++ b/far/platform.com.hpp
@@ -48,12 +48,18 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

namespace os::com
{
+ enum class mode
+ {
+ sta,
+ mta,
+ };
+
class initialize
{
public:
NONCOPYABLE(initialize);

- initialize();
+ explicit initialize(mode Mode);
~initialize();

private:
diff --git a/far/stddlg.cpp b/far/stddlg.cpp
index dcf36c7cd..5297657b1 100644
--- a/far/stddlg.cpp
+++ b/far/stddlg.cpp
@@ -790,7 +790,7 @@ operation OperationFailed(const error_state_ex& ErrorState, string_view const Ob
{
const auto FullName = ConvertNameToFull(Object);

- ComInitialiser.emplace();
+ ComInitialiser.emplace(os::com::mode::sta);
FileIsInUse = os::com::create_file_is_in_use(FullName);
if (FileIsInUse)
{
diff --git a/far/taskbar.cpp b/far/taskbar.cpp
index 2ff1949f3..f9cdcb7a6 100644
--- a/far/taskbar.cpp
+++ b/far/taskbar.cpp
@@ -112,7 +112,7 @@ private:
{
os::debug::set_thread_name(L"Taskbar processor");

- SCOPED_ACTION(os::com::initialize);
+ SCOPED_ACTION(os::com::initialize)(os::com::mode::sta);

os::com::ptr<ITaskbarList3> TaskbarList;
if (const auto Result = CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, IID_ITaskbarList3, IID_PPV_ARGS_Helper(&ptr_setter(TaskbarList))); FAILED(Result))


Reply all
Reply to author
Forward
0 new messages