diff --git a/keepassxc-browser/content/autocomplete.js b/keepassxc-browser/content/autocomplete.js index b120520..e382d0c 100644 --- a/keepassxc-browser/content/autocomplete.js +++ b/keepassxc-browser/content/autocomplete.js @@ -92,6 +92,9 @@ class Autocomplete { item.addEventListener('mouseover', ev => this.mouseOver(ev, div, item)); item.addEventListener('mouseout', ev => this.mouseOut(ev, item)); + item.addEventListener('mousedown', ev => ev.stopPropagation()); + item.addEventListener('mouseup', ev => ev.stopPropagation()); + div.appendChild(item); } diff --git a/keepassxc-browser/content/credential-autocomplete.js b/keepassxc-browser/content/credential-autocomplete.js index 68d4a89..0975657 100644 --- a/keepassxc-browser/content/credential-autocomplete.js +++ b/keepassxc-browser/content/credential-autocomplete.js @@ -6,6 +6,8 @@ CredentialAutocomplete.prototype.click = async function(e, input) { return; } + e.stopPropagation(); + if (input.value !== '') { input.select(); } @@ -21,6 +23,8 @@ CredentialAutocomplete.prototype.itemClick = async function(e, item, input, uuid return; } + e.stopPropagation(); + const index = Array.prototype.indexOf.call(e.currentTarget.parentElement.childNodes, e.currentTarget); const usernameValue = item.getElementsByTagName('input')[0].value; await this.fillPassword(usernameValue, index, uuid); diff --git a/keepassxc-browser/content/pwgen.js b/keepassxc-browser/content/pwgen.js index 71608f8..2f444b3 100644 --- a/keepassxc-browser/content/pwgen.js +++ b/keepassxc-browser/content/pwgen.js @@ -75,10 +75,13 @@ PasswordIcon.prototype.createIcon = function(field) { return; } - e.preventDefault(); + e.stopPropagation(); kpxcPasswordDialog.showDialog(field, icon); }); + icon.addEventListener('mousedown', ev => ev.stopPropagation()); + icon.addEventListener('mouseup', ev => ev.stopPropagation()); + kpxcUI.setIconPosition(icon, field, this.rtl); this.icon = icon; diff --git a/keepassxc-browser/content/totp-field.js b/keepassxc-browser/content/totp-field.js index 70646aa..aaaf970 100644 --- a/keepassxc-browser/content/totp-field.js +++ b/keepassxc-browser/content/totp-field.js @@ -122,11 +122,14 @@ TOTPFieldIcon.prototype.createIcon = function(field, segmented = false) { return; } - e.preventDefault(); + e.stopPropagation(); await kpxc.receiveCredentialsIfNecessary(); kpxc.fillFromTOTP(field); }); + icon.addEventListener('mousedown', ev => ev.stopPropagation()); + icon.addEventListener('mouseup', ev => ev.stopPropagation()); + kpxcUI.setIconPosition(icon, field, this.rtl, segmented); this.icon = icon; diff --git a/keepassxc-browser/content/ui.js b/keepassxc-browser/content/ui.js index d90549e..6cfce2d 100644 --- a/keepassxc-browser/content/ui.js +++ b/keepassxc-browser/content/ui.js @@ -257,6 +257,8 @@ document.addEventListener('mousemove', function(e) { return; } + e.stopPropagation(); + if (kpxcPasswordDialog.selected === kpxcPasswordDialog.titleBar) { const xPos = e.clientX - kpxcPasswordDialog.diffX; const yPos = e.clientY - kpxcPasswordDialog.diffY; @@ -283,6 +285,7 @@ document.addEventListener('mousedown', function(e) { return; } + e.stopPropagation(); kpxcUI.mouseDown = true; }); @@ -291,6 +294,7 @@ document.addEventListener('mouseup', function(e) { return; } + e.stopPropagation(); kpxcPasswordDialog.selected = null; kpxcDefine.selected = null; kpxcUI.mouseDown = false; diff --git a/keepassxc-browser/content/username-field.js b/keepassxc-browser/content/username-field.js index 5fa0f28..c251104 100644 --- a/keepassxc-browser/content/username-field.js +++ b/keepassxc-browser/content/username-field.js @@ -91,10 +91,13 @@ UsernameFieldIcon.prototype.createIcon = function(field) { return; } - e.preventDefault(); + e.stopPropagation(); iconClicked(field, icon); }); + icon.addEventListener('mousedown', ev => ev.stopPropagation()); + icon.addEventListener('mouseup', ev => ev.stopPropagation()); + kpxcUI.setIconPosition(icon, field, this.rtl); this.icon = icon;