mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-15 01:45:55 +08:00
Fix for SPE-2245 : The window maximizes after log in to Connect
This commit is contained in:
parent
490b267ad6
commit
3caf24e233
@ -119,11 +119,14 @@ namespace instance_check_internal
|
||||
other_instance_hash_major = PtrToUint(handle);
|
||||
other_instance_hash_major = other_instance_hash_major << 32;
|
||||
other_instance_hash += other_instance_hash_major;
|
||||
handle = GetProp(hwnd, L"Instance_Is_Maximized");
|
||||
const bool maximized = PtrToUint(handle) == 1;
|
||||
|
||||
if(my_instance_hash == other_instance_hash)
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(debug) << "win enum - found correct instance";
|
||||
l_prusa_slicer_hwnd = hwnd;
|
||||
ShowWindow(hwnd, SW_SHOWMAXIMIZED);
|
||||
ShowWindow(hwnd, maximized ? SW_SHOWMAXIMIZED : SW_SHOW);
|
||||
SetForegroundWindow(hwnd);
|
||||
return false;
|
||||
}
|
||||
@ -411,6 +414,7 @@ void OtherInstanceMessageHandler::shutdown(MainFrame* main_frame)
|
||||
HWND hwnd = main_frame->GetHandle();
|
||||
RemoveProp(hwnd, L"Instance_Hash_Minor");
|
||||
RemoveProp(hwnd, L"Instance_Hash_Major");
|
||||
RemoveProp(hwnd, L"Instance_Is_Maximized");
|
||||
#endif //_WIN32
|
||||
#if __APPLE__
|
||||
//delete macos implementation
|
||||
@ -440,14 +444,30 @@ void OtherInstanceMessageHandler::init_windows_properties(MainFrame* main_frame,
|
||||
{
|
||||
size_t minor_hash = instance_hash & 0xFFFFFFFF;
|
||||
size_t major_hash = (instance_hash & 0xFFFFFFFF00000000) >> 32;
|
||||
size_t is_maximized = main_frame->IsMaximized() ? 1 : 0;
|
||||
HWND hwnd = main_frame->GetHandle();
|
||||
HANDLE handle_minor = UIntToPtr(minor_hash);
|
||||
HANDLE handle_major = UIntToPtr(major_hash);
|
||||
HANDLE handle_is_maximized = UIntToPtr(is_maximized);
|
||||
SetProp(hwnd, L"Instance_Hash_Minor", handle_minor);
|
||||
SetProp(hwnd, L"Instance_Hash_Major", handle_major);
|
||||
SetProp(hwnd, L"Instance_Is_Maximized", handle_is_maximized);
|
||||
//BOOST_LOG_TRIVIAL(debug) << "window properties initialized " << instance_hash << " (" << minor_hash << " & "<< major_hash;
|
||||
}
|
||||
|
||||
void OtherInstanceMessageHandler::update_windows_properties(MainFrame* main_frame)
|
||||
{
|
||||
if (m_initialized) {
|
||||
// dlete old value of "Instance_Is_Maximized" property
|
||||
HWND hwnd = main_frame->GetHandle();
|
||||
RemoveProp(hwnd, L"Instance_Is_Maximized");
|
||||
// set new value for "Instance_Is_Maximized" property
|
||||
size_t is_maximized = main_frame->IsMaximized() ? 1 : 0;
|
||||
HANDLE handle_is_maximized = UIntToPtr(is_maximized);
|
||||
SetProp(hwnd, L"Instance_Is_Maximized", handle_is_maximized);
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
void OtherInstanceMessageHandler::print_window_info(HWND hwnd)
|
||||
|
@ -81,6 +81,7 @@ public:
|
||||
#endif //__APPLE__
|
||||
#ifdef _WIN32
|
||||
static void init_windows_properties(MainFrame* main_frame, size_t instance_hash);
|
||||
void update_windows_properties(MainFrame* main_frame);
|
||||
#endif //WIN32
|
||||
private:
|
||||
bool m_initialized { false };
|
||||
|
@ -278,6 +278,15 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S
|
||||
event.Skip();
|
||||
});
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
Bind(wxEVT_SIZE, [this](wxSizeEvent& event) {
|
||||
event.Skip();
|
||||
// Update window property to mainframe so other instances can indentify it.
|
||||
wxGetApp().other_instance_message_handler()->update_windows_properties(this);
|
||||
});
|
||||
#endif //WIN32
|
||||
|
||||
// OSX specific issue:
|
||||
// When we move application between Retina and non-Retina displays, The legend on a canvas doesn't redraw
|
||||
// So, redraw explicitly canvas, when application is moved
|
||||
|
Loading…
x
Reference in New Issue
Block a user