VeraCrypt
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2018-04-29 17:33:33 +0200
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2018-04-29 17:52:43 +0200
commite39f5fa5d6b1b09df16271cabb1dda5d42c0b980 (patch)
treecb3aff4a8c04c6b39c014a37e0683fd5b7817d94
parent7a842266b3f2e69d1706aec3039b661e3a5b25dd (diff)
downloadVeraCrypt-e39f5fa5d6b1b09df16271cabb1dda5d42c0b980.tar.gz
VeraCrypt-e39f5fa5d6b1b09df16271cabb1dda5d42c0b980.zip
MacOSX: support pasting values to password fields using keyboard (CMD+V and CMD+A now working properly). This make using password managers with VeraCrypt easier.
-rw-r--r--src/Main/Forms/ChangePasswordDialog.cpp15
-rw-r--r--src/Main/Forms/ChangePasswordDialog.h4
-rw-r--r--src/Main/Forms/MountOptionsDialog.cpp16
-rw-r--r--src/Main/Forms/MountOptionsDialog.h4
-rw-r--r--src/Main/Forms/VolumeCreationWizard.cpp15
-rw-r--r--src/Main/Forms/VolumeCreationWizard.h4
-rwxr-xr-xsrc/Main/GraphicUserInterface.cpp42
-rw-r--r--src/Main/GraphicUserInterface.h7
8 files changed, 107 insertions, 0 deletions
diff --git a/src/Main/Forms/ChangePasswordDialog.cpp b/src/Main/Forms/ChangePasswordDialog.cpp
index 2f8e1e47..819d9bf2 100644
--- a/src/Main/Forms/ChangePasswordDialog.cpp
+++ b/src/Main/Forms/ChangePasswordDialog.cpp
@@ -18,6 +18,17 @@
namespace VeraCrypt
{
+#ifdef TC_MACOSX
+
+ bool ChangePasswordDialog::ProcessEvent(wxEvent& event)
+ {
+ if(GraphicUserInterface::HandlePasswordEntryCustomEvent (event))
+ return true;
+ else
+ return ChangePasswordDialogBase::ProcessEvent(event);
+ }
+#endif
+
ChangePasswordDialog::ChangePasswordDialog (wxWindow* parent, shared_ptr <VolumePath> volumePath, Mode::Enum mode, shared_ptr <VolumePassword> password, shared_ptr <KeyfileList> keyfiles, shared_ptr <VolumePassword> newPassword, shared_ptr <KeyfileList> newKeyfiles)
: ChangePasswordDialogBase (parent), DialogMode (mode), Path (volumePath)
{
@@ -57,6 +68,10 @@ namespace VeraCrypt
default:
throw ParameterIncorrect (SRC_POS);
}
+
+#ifdef TC_MACOSX
+ GraphicUserInterface::InstallPasswordEntryCustomKeyboardShortcuts (this);
+#endif
CurrentPasswordPanel = new VolumePasswordPanel (this, NULL, password, false, keyfiles, false, true, true, false, true, true);
CurrentPasswordPanel->UpdateEvent.Connect (EventConnector <ChangePasswordDialog> (this, &ChangePasswordDialog::OnPasswordPanelUpdate));
diff --git a/src/Main/Forms/ChangePasswordDialog.h b/src/Main/Forms/ChangePasswordDialog.h
index 242bd965..66fbfecf 100644
--- a/src/Main/Forms/ChangePasswordDialog.h
+++ b/src/Main/Forms/ChangePasswordDialog.h
@@ -35,6 +35,10 @@ namespace VeraCrypt
ChangePasswordDialog (wxWindow* parent, shared_ptr <VolumePath> volumePath, Mode::Enum mode = Mode::ChangePasswordAndKeyfiles, shared_ptr <VolumePassword> password = shared_ptr <VolumePassword> (), shared_ptr <KeyfileList> keyfiles = shared_ptr <KeyfileList> (), shared_ptr <VolumePassword> newPassword = shared_ptr <VolumePassword> (), shared_ptr <KeyfileList> newKeyfiles = shared_ptr <KeyfileList> ());
virtual ~ChangePasswordDialog ();
+
+#ifdef TC_MACOSX
+ virtual bool ProcessEvent(wxEvent& event);
+#endif
protected:
void OnOKButtonClick (wxCommandEvent& event);
diff --git a/src/Main/Forms/MountOptionsDialog.cpp b/src/Main/Forms/MountOptionsDialog.cpp
index 9a9f2691..c33cf9fe 100644
--- a/src/Main/Forms/MountOptionsDialog.cpp
+++ b/src/Main/Forms/MountOptionsDialog.cpp
@@ -17,6 +17,17 @@
namespace VeraCrypt
{
+#ifdef TC_MACOSX
+
+ bool MountOptionsDialog::ProcessEvent(wxEvent& event)
+ {
+ if(GraphicUserInterface::HandlePasswordEntryCustomEvent (event))
+ return true;
+ else
+ return MountOptionsDialogBase::ProcessEvent(event);
+ }
+#endif
+
MountOptionsDialog::MountOptionsDialog (wxWindow *parent, MountOptions &options, const wxString &title, bool disableMountOptions)
: MountOptionsDialogBase (parent, wxID_ANY, wxString()
#ifdef __WXGTK__ // GTK apparently needs wxRESIZE_BORDER to support dynamic resizing
@@ -33,6 +44,11 @@ namespace VeraCrypt
if (disableMountOptions)
OptionsButton->Show (false);
+
+
+#ifdef TC_MACOSX
+ GraphicUserInterface::InstallPasswordEntryCustomKeyboardShortcuts (this);
+#endif
PasswordPanel = new VolumePasswordPanel (this, &options, options.Password, disableMountOptions, options.Keyfiles, !disableMountOptions, true, true, false, true, true);
PasswordPanel->SetCacheCheckBoxValidator (wxGenericValidator (&Options.CachePassword));
diff --git a/src/Main/Forms/MountOptionsDialog.h b/src/Main/Forms/MountOptionsDialog.h
index 4a2b38be..6366ce85 100644
--- a/src/Main/Forms/MountOptionsDialog.h
+++ b/src/Main/Forms/MountOptionsDialog.h
@@ -24,6 +24,10 @@ namespace VeraCrypt
public:
MountOptionsDialog (wxWindow* parent, MountOptions &options, const wxString &title = wxEmptyString, bool disableMountOptions = false);
void OnShow ();
+
+#ifdef TC_MACOSX
+ virtual bool ProcessEvent(wxEvent& event);
+#endif
protected:
void OnInitDialog (wxInitDialogEvent& event);
diff --git a/src/Main/Forms/VolumeCreationWizard.cpp b/src/Main/Forms/VolumeCreationWizard.cpp
index 15c92c32..b28b1c37 100644
--- a/src/Main/Forms/VolumeCreationWizard.cpp
+++ b/src/Main/Forms/VolumeCreationWizard.cpp
@@ -36,6 +36,17 @@
namespace VeraCrypt
{
+#ifdef TC_MACOSX
+
+ bool VolumeCreationWizard::ProcessEvent(wxEvent& event)
+ {
+ if(GraphicUserInterface::HandlePasswordEntryCustomEvent (event))
+ return true;
+ else
+ return WizardFrame::ProcessEvent(event);
+ }
+#endif
+
VolumeCreationWizard::VolumeCreationWizard (wxWindow* parent)
: WizardFrame (parent),
CrossPlatformSupport (true),
@@ -55,6 +66,10 @@ namespace VeraCrypt
SetTitle (LangString["INTRO_TITLE"]);
SetImage (Resources::GetVolumeCreationWizardBitmap (Gui->GetCharHeight (this) * 21));
SetMaxStaticTextWidth (55);
+
+#ifdef TC_MACOSX
+ GraphicUserInterface::InstallPasswordEntryCustomKeyboardShortcuts (this);
+#endif
SetStep (Step::VolumeHostType);
diff --git a/src/Main/Forms/VolumeCreationWizard.h b/src/Main/Forms/VolumeCreationWizard.h
index 85203b9a..c4087426 100644
--- a/src/Main/Forms/VolumeCreationWizard.h
+++ b/src/Main/Forms/VolumeCreationWizard.h
@@ -24,6 +24,10 @@ namespace VeraCrypt
VolumeCreationWizard (wxWindow* parent);
~VolumeCreationWizard ();
+#ifdef TC_MACOSX
+ virtual bool ProcessEvent(wxEvent& event);
+#endif
+
protected:
struct Step
{
diff --git a/src/Main/GraphicUserInterface.cpp b/src/Main/GraphicUserInterface.cpp
index 9ae735e4..ba283af4 100755
--- a/src/Main/GraphicUserInterface.cpp
+++ b/src/Main/GraphicUserInterface.cpp
@@ -37,6 +37,11 @@
namespace VeraCrypt
{
+#ifdef TC_MACOSX
+ int GraphicUserInterface::g_customIdCmdV = 0;
+ int GraphicUserInterface::g_customIdCmdA = 0;
+#endif
+
GraphicUserInterface::GraphicUserInterface () :
ActiveFrame (nullptr),
BackgroundMode (false),
@@ -51,6 +56,8 @@ namespace VeraCrypt
#endif
#ifdef TC_MACOSX
+ g_customIdCmdV = wxNewId();
+ g_customIdCmdA = wxNewId();
wxApp::s_macHelpMenuTitleName = _("&Help");
#endif
}
@@ -657,6 +664,41 @@ namespace VeraCrypt
{
SetBackgroundMode (false);
}
+
+ bool GraphicUserInterface::HandlePasswordEntryCustomEvent (wxEvent& event)
+ {
+ bool bHandled = false;
+ if ( (event.GetEventType() == wxEVT_MENU)
+ && ((event.GetId() == g_customIdCmdV) || (event.GetId() == g_customIdCmdA)))
+ {
+ wxWindow* focusedCtrl = wxWindow::FindFocus();
+ if (focusedCtrl
+ && (focusedCtrl->IsKindOf(wxCLASSINFO(wxTextCtrl)))
+ && (focusedCtrl->GetWindowStyle() & wxTE_PASSWORD))
+ {
+ wxTextCtrl* passwordCtrl = (wxTextCtrl*) focusedCtrl;
+ if (event.GetId() == g_customIdCmdV)
+ passwordCtrl->Paste ();
+ else if (event.GetId() == g_customIdCmdA)
+ passwordCtrl->SelectAll ();
+ bHandled = true;
+ }
+ }
+
+ return bHandled;
+ }
+
+ void GraphicUserInterface::InstallPasswordEntryCustomKeyboardShortcuts (wxWindow* window)
+ {
+ // we manually handle CMD+V and CMD+A on password fields in order to support
+ // pasting password values into them. By default, wxWidgets doesn't handle this
+ // for password entry fields.
+ wxAcceleratorEntry entries[2];
+ entries[0].Set(wxACCEL_CMD, (int) 'V', g_customIdCmdV);
+ entries[1].Set(wxACCEL_CMD, (int) 'A', g_customIdCmdA);
+ wxAcceleratorTable accel(sizeof(entries) / sizeof(wxAcceleratorEntry), entries);
+ window->SetAcceleratorTable(accel);
+ }
#endif
void GraphicUserInterface::MoveListCtrlItem (wxListCtrl *listCtrl, long itemIndex, long newItemIndex) const
diff --git a/src/Main/GraphicUserInterface.h b/src/Main/GraphicUserInterface.h
index f170d9a6..01f385a3 100644
--- a/src/Main/GraphicUserInterface.h
+++ b/src/Main/GraphicUserInterface.h
@@ -100,6 +100,8 @@ namespace VeraCrypt
#ifdef TC_MACOSX
virtual void MacOpenFiles (const wxArrayString &fileNames);
virtual void MacReopenApp ();
+ static bool HandlePasswordEntryCustomEvent (wxEvent& event);
+ static void InstallPasswordEntryCustomKeyboardShortcuts (wxWindow* window);
#endif
template <class T>
@@ -133,6 +135,11 @@ namespace VeraCrypt
auto_ptr <wxSingleInstanceChecker> SingleInstanceChecker;
mutable WaitDialog* mWaitDialog;
+public:
+#ifdef TC_MACOSX
+ static int g_customIdCmdV;
+ static int g_customIdCmdA;
+#endif
private:
GraphicUserInterface (const GraphicUserInterface &);