Skip to content

Commit

Permalink
Merge pull request #2771 from kristijanribaric/feature/change-workspa…
Browse files Browse the repository at this point in the history
…ces-by-pressing-mouse-side-buttons

Add workspace navigation via mouse back/forward buttons
  • Loading branch information
mr-cheff authored Nov 9, 2024
2 parents e9e2e9a + 14b8a1d commit e2e46d6
Showing 1 changed file with 49 additions and 1 deletion.
50 changes: 49 additions & 1 deletion src/browser/base/zen-components/ZenWorkspaces.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ var ZenWorkspaces = new (class extends ZenMultiWindowFeature {
cumulativeDelta: 0,
direction: null
};
_hoveringSidebar = false;

async init() {
if (!this.shouldHaveWorkspaces) {
Expand Down Expand Up @@ -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'),
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit e2e46d6

Please sign in to comment.