Merge pull request #2771 from kristijanribaric/feature/change-workspaces-by-pressing-mouse-side-buttons

Add workspace navigation via mouse back/forward buttons
This commit is contained in:
mr. m 🤙
2024-11-09 17:29:12 +01:00
committed by GitHub

View File

@@ -11,6 +11,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
cumulativeDelta: 0,
direction: null
};
_hoveringSidebar = false;
async init() {
if (!this.shouldHaveWorkspaces) {
@@ -47,10 +48,58 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
console.info('ZenWorkspaces: ZenWorkspaces initialized');
this.initializeGestureHandlers();
this.initializeWorkspaceNavigation();
Services.obs.addObserver(this, 'weave:engine:sync:finish');
}
initializeWorkspaceNavigation() {
this._setupAppCommandHandlers();
this._setupHoverDetection();
}
_setupAppCommandHandlers() {
// Remove existing handler temporarily - this is needed so that _handleAppCommand is called before the original
window.removeEventListener("AppCommand", HandleAppCommandEvent, true);
// Add our handler first
window.addEventListener("AppCommand", this._handleAppCommand.bind(this), true);
// Re-add original handler
window.addEventListener("AppCommand", HandleAppCommandEvent, true);
}
_handleAppCommand(event) {
if (!this.workspaceEnabled || !this._hoveringSidebar) {
return;
}
switch (event.command) {
case "Forward":
this.changeWorkspaceShortcut(1);
event.stopImmediatePropagation();
event.preventDefault();
break;
case "Back":
this.changeWorkspaceShortcut(-1);
event.stopImmediatePropagation();
event.preventDefault();
break;
}
}
_setupHoverDetection() {
const toolbox = document.getElementById('navigator-toolbox');
toolbox.addEventListener('mouseenter', () => {
this._hoveringSidebar = true;
});
toolbox.addEventListener('mouseleave', () => {
this._hoveringSidebar = false;
});
}
initializeGestureHandlers() {
const elements = [
document.getElementById('navigator-toolbox'),
@@ -113,7 +162,6 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
this._swipeState.direction = this._swipeState.cumulativeDelta > 0 ? 'right' : 'left';
}
console.log('MozSwipeGestureUpdateEND', this._swipeState);
}
async _handleSwipeEnd(event) {