Restrict forced panning to known bad platforms
Let's not punish systems that implement overlay scrollbars in a functional way. The only current example is Firefox on Windows 11 and on Linux.
This commit is contained in:
parent
12a7c6f0de
commit
5de478d6e7
21
app/ui.js
21
app/ui.js
|
@ -8,7 +8,8 @@
|
||||||
|
|
||||||
import * as Log from '../core/util/logging.js';
|
import * as Log from '../core/util/logging.js';
|
||||||
import _, { l10n } from './localization.js';
|
import _, { l10n } from './localization.js';
|
||||||
import { isTouchDevice, isSafari, hasScrollbarGutter, dragThreshold }
|
import { isTouchDevice, isMac, isIOS, isAndroid, isChromeOS, isSafari,
|
||||||
|
hasScrollbarGutter, dragThreshold }
|
||||||
from '../core/util/browser.js';
|
from '../core/util/browser.js';
|
||||||
import { setCapture, getPointerEvent } from '../core/util/events.js';
|
import { setCapture, getPointerEvent } from '../core/util/events.js';
|
||||||
import KeyTable from "../core/input/keysym.js";
|
import KeyTable from "../core/input/keysym.js";
|
||||||
|
@ -1326,13 +1327,25 @@ const UI = {
|
||||||
|
|
||||||
const scaling = UI.getSetting('resize') === 'scale';
|
const scaling = UI.getSetting('resize') === 'scale';
|
||||||
|
|
||||||
|
// Some platforms have overlay scrollbars that are difficult
|
||||||
|
// to use in our case, which means we have to force panning
|
||||||
|
// FIXME: Working scrollbars can still be annoying to use with
|
||||||
|
// touch, so we should ideally be able to have both
|
||||||
|
// panning and scrollbars at the same time
|
||||||
|
|
||||||
|
let brokenScrollbars = false;
|
||||||
|
|
||||||
|
if (!hasScrollbarGutter) {
|
||||||
|
if (isIOS() || isAndroid() || isMac() || isChromeOS()) {
|
||||||
|
brokenScrollbars = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (scaling) {
|
if (scaling) {
|
||||||
// Can't be clipping if viewport is scaled to fit
|
// Can't be clipping if viewport is scaled to fit
|
||||||
UI.forceSetting('view_clip', false);
|
UI.forceSetting('view_clip', false);
|
||||||
UI.rfb.clipViewport = false;
|
UI.rfb.clipViewport = false;
|
||||||
} else if (!hasScrollbarGutter) {
|
} else if (brokenScrollbars) {
|
||||||
// Some platforms have scrollbars that are difficult
|
|
||||||
// to use in our case, so we always use our own panning
|
|
||||||
UI.forceSetting('view_clip', true);
|
UI.forceSetting('view_clip', true);
|
||||||
UI.rfb.clipViewport = true;
|
UI.rfb.clipViewport = true;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue