From 1e978e69cc3fdd3482091c770014646349812023 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Sun, 15 Dec 2019 22:08:05 +0100 Subject: MacOSX: Ensure that the heading bar is always visible when window is moved so that it can still be moved by user using mouse (https://github.com/veracrypt/VeraCrypt/issues/546) --- src/Main/Forms/MainFrame.cpp | 13 +++++++++++++ src/Main/Forms/MainFrame.h | 19 ++++++++++++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/Main/Forms/MainFrame.cpp b/src/Main/Forms/MainFrame.cpp index 8e0c401b..25853193 100644 --- a/src/Main/Forms/MainFrame.cpp +++ b/src/Main/Forms/MainFrame.cpp @@ -99,6 +99,9 @@ namespace VeraCrypt Connect( wxID_ANY, wxEVT_COMMAND_PREF_UPDATED, wxCommandEventHandler( MainFrame::OnPreferencesUpdated ) ); Connect( wxID_ANY, wxEVT_COMMAND_OPEN_VOLUME_REQUEST, wxCommandEventHandler( MainFrame::OnOpenVolumeSystemRequest ) ); +#ifdef TC_MACOSX + Connect( wxID_ANY, wxEVT_MOVE, wxMoveEventHandler( MainFrame::OnMoveHandler ) ); +#endif } MainFrame::~MainFrame () @@ -119,6 +122,9 @@ namespace VeraCrypt Disconnect( wxID_ANY, wxEVT_COMMAND_UPDATE_VOLUME_LIST, wxCommandEventHandler( MainFrame::OnUpdateVolumeList ) ); Disconnect( wxID_ANY, wxEVT_COMMAND_PREF_UPDATED, wxCommandEventHandler( MainFrame::OnPreferencesUpdated ) ); Disconnect( wxID_ANY, wxEVT_COMMAND_OPEN_VOLUME_REQUEST, wxCommandEventHandler( MainFrame::OnOpenVolumeSystemRequest ) ); +#ifdef TC_MACOSX + Disconnect( wxID_ANY, wxEVT_MOVE, wxMoveEventHandler( MainFrame::OnMoveHandler ) ); +#endif Core->VolumeMountedEvent.Disconnect (this); Core->VolumeDismountedEvent.Disconnect (this); Gui->OpenVolumeSystemRequestEvent.Disconnect (this); @@ -1723,4 +1729,11 @@ namespace VeraCrypt Core->WipePasswordCache(); UpdateWipeCacheButton(); } + +#ifdef TC_MACOSX + void MainFrame::OnMoveHandler(wxMoveEvent& event) + { + EnsureVisible (true); + } +#endif } diff --git a/src/Main/Forms/MainFrame.h b/src/Main/Forms/MainFrame.h index b8991b73..d481daf5 100644 --- a/src/Main/Forms/MainFrame.h +++ b/src/Main/Forms/MainFrame.h @@ -162,8 +162,12 @@ namespace VeraCrypt void UpdateVolumeList (); void UpdateWipeCacheButton (); void WipeCache (); - - void EnsureVisible() + +#ifdef TC_MACOSX + void OnMoveHandler(wxMoveEvent& event); +#endif + + void EnsureVisible(bool bOnlyHeadingBar = false) { wxDisplay display (this); wxRect displayRect = display.GetClientArea(); @@ -171,14 +175,19 @@ namespace VeraCrypt bool bMove = false; wxPoint p = GetScreenPosition(); wxRect r = GetRect (); - if (p.x < displayRect.x) + wxRect rc = GetClientRect (); + int titleBarHeight = r.height - rc.height; + + if (!bOnlyHeadingBar && (p.x < displayRect.x)) p.x = 0, bMove = true; if (p.y < displayRect.y) p.y = displayRect.y, bMove = true; - if (p.x + r.width > displayRect.x + displayRect.width) + if (!bOnlyHeadingBar && (p.x + r.width > displayRect.x + displayRect.width)) p.x = displayRect.x + displayRect.width - r.width, bMove = true; - if (p.y + r.height > displayRect.y + displayRect.height) + if (!bOnlyHeadingBar && (p.y + r.height > displayRect.y + displayRect.height)) p.y = displayRect.y + displayRect.height - r.height, bMove = true; + if (bOnlyHeadingBar && (p.y > (displayRect.y + displayRect.height - titleBarHeight))) + p.y = displayRect.y + displayRect.height - titleBarHeight, bMove = true; if (bMove) Move (p); } -- cgit v1.2.3