mirror of
https://github.com/gosticks/PaperWM.git
synced 2026-10-05 03:46:53 +00:00
Prepare for navigator refactor + refactor switch-left/right/up/down
This commit is contained in:
committed by
Tor Hedin Brønner
parent
2a4199029d
commit
f0386de74c
+26
-20
@@ -48,6 +48,14 @@ function registerPaperAction(actionName, handler, flags) {
|
||||
{settings: settings, mutterFlags: flags, activeInNavigator: true})
|
||||
}
|
||||
|
||||
function registerNavigatorAction(name, handler) {
|
||||
let settings = convenience.getSettings('org.gnome.Shell.Extensions.PaperWM.Keybindings');
|
||||
Keybindings.registerAction(
|
||||
name,
|
||||
handler,
|
||||
{settings: settings, opensNavigator: true})
|
||||
}
|
||||
|
||||
function init() {
|
||||
SESSIONID += "#";
|
||||
log(`init: ${SESSIONID}`);
|
||||
@@ -86,10 +94,10 @@ function init() {
|
||||
registerPaperAction("switch-first", Tiling.activateFirstWindow);
|
||||
registerPaperAction("switch-last", Tiling.activateLastWindow);
|
||||
|
||||
registerPaperAction("switch-right", previewNavigate);
|
||||
registerPaperAction("switch-left", previewNavigate);
|
||||
registerPaperAction("switch-up", previewNavigate);
|
||||
registerPaperAction("switch-down", previewNavigate);
|
||||
registerNavigatorAction("switch-right", (mw, space) => space.switchRight());
|
||||
registerNavigatorAction("switch-left", (mw, space) => space.switchLeft());
|
||||
registerNavigatorAction("switch-up", (mw, space) => space.switchUp());
|
||||
registerNavigatorAction("switch-down", (mw, space) => space.switchDown());
|
||||
|
||||
registerPaperAction("move-left", previewNavigate);
|
||||
registerPaperAction("move-right", previewNavigate);
|
||||
@@ -101,7 +109,7 @@ function init() {
|
||||
Scratch));
|
||||
|
||||
registerPaperAction("toggle-scratch",
|
||||
utils.as_key_handler("toggle",
|
||||
dynamic_function_ref("toggle",
|
||||
Scratch),
|
||||
Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
@@ -110,54 +118,52 @@ function init() {
|
||||
utils));
|
||||
|
||||
registerPaperAction("cycle-width",
|
||||
as_key_handler("cycleWindowWidth",
|
||||
dynamic_function_ref("cycleWindowWidth",
|
||||
Tiling),
|
||||
Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
registerPaperAction("center-horizontally",
|
||||
as_key_handler("centerWindowHorizontally",
|
||||
dynamic_function_ref("centerWindowHorizontally",
|
||||
Tiling),
|
||||
Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
registerPaperAction("tile-visible",
|
||||
as_key_handler("tileVisible",
|
||||
dynamic_function_ref("tileVisible",
|
||||
Tiling),
|
||||
Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
registerPaperAction('new-window',
|
||||
as_key_handler('newWindow',
|
||||
dynamic_function_ref('newWindow',
|
||||
App),
|
||||
Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
registerPaperAction('close-window',
|
||||
as_key_handler(
|
||||
(metaWindow) =>
|
||||
metaWindow.delete(global.get_current_time())),
|
||||
(metaWindow) =>
|
||||
metaWindow.delete(global.get_current_time()),
|
||||
Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
registerPaperAction('slurp-in',
|
||||
as_key_handler('slurp',
|
||||
Tiling),
|
||||
dynamic_function_ref('slurp',
|
||||
Tiling),
|
||||
Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
registerPaperAction('barf-out',
|
||||
as_key_handler('barf',
|
||||
Tiling),
|
||||
dynamic_function_ref('barf',
|
||||
Tiling),
|
||||
Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
registerPaperAction('toggle-maximize-width',
|
||||
as_key_handler("toggleMaximizeHorizontally",
|
||||
Tiling),
|
||||
dynamic_function_ref("toggleMaximizeHorizontally",
|
||||
Tiling),
|
||||
Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
registerPaperAction('paper-toggle-fullscreen',
|
||||
as_key_handler(
|
||||
(metaWindow) => {
|
||||
if (metaWindow.fullscreen)
|
||||
metaWindow.unmake_fullscreen();
|
||||
else
|
||||
metaWindow.make_fullscreen();
|
||||
}), Meta.KeyBindingFlags.PER_WINDOW);
|
||||
}, Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
initUserConfig();
|
||||
}
|
||||
|
||||
+13
-8
@@ -47,11 +47,14 @@ function byId(mutterId) {
|
||||
return actions.find(action => action.id == mutterId);
|
||||
}
|
||||
|
||||
function asKeyHandler(actionHandler) {
|
||||
return (display, screen, mw, binding) => {
|
||||
return actionHandler(mw, null, {display, screen, binding});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* NB: handler interface not stabilized: atm. its the same as mutter keyhandler
|
||||
* interface, but we'll change that in the future
|
||||
*
|
||||
* handler: function(ignored, ignored, metaWindow) -> ignored
|
||||
* handler: function(metaWindow, space, {binding, display, screen}) -> ignored
|
||||
*/
|
||||
function registerAction(actionName, handler, options) {
|
||||
options = Object.assign({}, options);
|
||||
@@ -72,7 +75,9 @@ function registerAction(actionName, handler, options) {
|
||||
if (settings) {
|
||||
Utils.assert(actionName, "Schema action must have a name");
|
||||
mutterName = actionName;
|
||||
keyHandler = opensNavigator ? Navigator.preview_navigate : handler;
|
||||
keyHandler = opensNavigator
|
||||
? asKeyHandler(Navigator.preview_navigate)
|
||||
: asKeyHandler(handler)
|
||||
} else {
|
||||
// actionId, mutterName and keyHandler will be set if/when the action is bound
|
||||
}
|
||||
@@ -137,7 +142,7 @@ function bindkey(keystr, actionName=null, handler=null, options=null) {
|
||||
if (action.options.opensNavigator) {
|
||||
action.keyHandler = openNavigatorHandler(mutterName, keystr);
|
||||
} else {
|
||||
action.keyHandler = Utils.as_key_handler(handler);
|
||||
action.keyHandler = asKeyHandler(handler);
|
||||
}
|
||||
|
||||
Main.wm.allowKeybinding(action.mutterName, Shell.ActionMode.ALL);
|
||||
@@ -195,14 +200,14 @@ function rawMaskOfKeystr(keystr) {
|
||||
function openNavigatorHandler(actionName, keystr) {
|
||||
const mask = rawMaskOfKeystr(keystr) & 0xff;
|
||||
|
||||
const dummyEvent = {
|
||||
const binding = {
|
||||
get_name: () => actionName,
|
||||
get_mask: () => mask,
|
||||
is_reversed: () => false,
|
||||
}
|
||||
return function(display, screen, metaWindow) {
|
||||
return Navigator.preview_navigate(
|
||||
display, screen, metaWindow, dummyEvent);
|
||||
metaWindow, null, {screen, display, binding});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -104,7 +104,7 @@ var LiveAltTab = Lang.Class({
|
||||
}
|
||||
})
|
||||
|
||||
function liveAltTab(display, screen, meta_window, binding) {
|
||||
function liveAltTab(meta_window, space, {display, screen, binding}) {
|
||||
let tabPopup = new LiveAltTab();
|
||||
tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask());
|
||||
}
|
||||
|
||||
+2
-52
@@ -286,18 +286,6 @@ var PreviewedWindowNavigator = new Lang.Class({
|
||||
} else if (mutterActionId === Keybindings.idOf("switch-previous")) {
|
||||
this._select(this._previous());
|
||||
return true;
|
||||
} else if (mutterActionId === Keybindings.idOf("switch-right")) {
|
||||
this._switch(Meta.MotionDirection.RIGHT);
|
||||
return true;
|
||||
} else if (mutterActionId === Keybindings.idOf("switch-left")) {
|
||||
this._switch(Meta.MotionDirection.LEFT);
|
||||
return true;
|
||||
} else if (mutterActionId === Keybindings.idOf("switch-up")) {
|
||||
this._switch(Meta.MotionDirection.UP);
|
||||
return true;
|
||||
} else if (mutterActionId === Keybindings.idOf("switch-down")) {
|
||||
this._switch(Meta.MotionDirection.DOWN);
|
||||
return true;
|
||||
} else if (mutterActionId === Keybindings.idOf("move-left")) {
|
||||
this._showMinimap();
|
||||
this.space.swap(Meta.MotionDirection.LEFT);
|
||||
@@ -335,7 +323,7 @@ var PreviewedWindowNavigator = new Lang.Class({
|
||||
log("Show minimap and do action..")
|
||||
this._showMinimap();
|
||||
let metaWindow = this.space.selectedWindow;
|
||||
action.handler(null, null, metaWindow);
|
||||
action.handler(metaWindow, this.space);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -343,44 +331,6 @@ var PreviewedWindowNavigator = new Lang.Class({
|
||||
return false;
|
||||
},
|
||||
|
||||
_switch(direction) {
|
||||
let space = this.space;
|
||||
let index = space.selectedIndex();
|
||||
let row = space[index].indexOf(space.selectedWindow);
|
||||
switch (direction) {
|
||||
case Meta.MotionDirection.RIGHT:
|
||||
index++;
|
||||
row = -1;
|
||||
break;;
|
||||
case Meta.MotionDirection.LEFT:
|
||||
index--;
|
||||
row = -1;
|
||||
}
|
||||
if (index < 0 || index >= space.length)
|
||||
return;
|
||||
|
||||
let column = space[index];
|
||||
|
||||
if (row === -1) {
|
||||
let mru = global.display.get_tab_list(Meta.TabList.NORMAL,
|
||||
space.workspace);
|
||||
let selected = mru.filter(w => column.includes(w))[0];
|
||||
row = column.indexOf(selected);
|
||||
}
|
||||
|
||||
switch (direction) {
|
||||
case Meta.MotionDirection.UP:
|
||||
row--;
|
||||
break;;
|
||||
case Meta.MotionDirection.DOWN:
|
||||
row++;
|
||||
}
|
||||
if (row < 0 || row >= column.length)
|
||||
return;
|
||||
|
||||
this._select([index, row]);
|
||||
},
|
||||
|
||||
_keyPressHandler: function(keysym, action) {
|
||||
if (keysym !== Clutter.KEY_Escape && this._doAction(action)) {
|
||||
return Clutter.EVENT_STOP;
|
||||
@@ -504,7 +454,7 @@ var PreviewedWindowNavigator = new Lang.Class({
|
||||
}
|
||||
});
|
||||
|
||||
function preview_navigate(display, screen, meta_window, binding) {
|
||||
function preview_navigate(meta_window, space, {display, screen, binding}) {
|
||||
let tabPopup = new PreviewedWindowNavigator();
|
||||
tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask());
|
||||
}
|
||||
|
||||
@@ -391,6 +391,49 @@ class Space extends Array {
|
||||
ensureViewport(this.selectedWindow, this, true);
|
||||
}
|
||||
|
||||
switchLeft() { this.switch(Meta.MotionDirection.LEFT) }
|
||||
switchRight() { this.switch(Meta.MotionDirection.RIGHT) }
|
||||
switchUp() { this.switch(Meta.MotionDirection.UP) }
|
||||
switchDown() { this.switch(Meta.MotionDirection.DOWN) }
|
||||
switch(direction) {
|
||||
let space = this;
|
||||
let index = space.selectedIndex();
|
||||
let row = space[index].indexOf(space.selectedWindow);
|
||||
switch (direction) {
|
||||
case Meta.MotionDirection.RIGHT:
|
||||
index++;
|
||||
row = -1;
|
||||
break;;
|
||||
case Meta.MotionDirection.LEFT:
|
||||
index--;
|
||||
row = -1;
|
||||
}
|
||||
if (index < 0 || index >= space.length)
|
||||
return;
|
||||
|
||||
let column = space[index];
|
||||
|
||||
if (row === -1) {
|
||||
let mru = global.display.get_tab_list(Meta.TabList.NORMAL,
|
||||
space.workspace);
|
||||
let selected = mru.filter(w => column.includes(w))[0];
|
||||
row = column.indexOf(selected);
|
||||
}
|
||||
|
||||
switch (direction) {
|
||||
case Meta.MotionDirection.UP:
|
||||
row--;
|
||||
break;;
|
||||
case Meta.MotionDirection.DOWN:
|
||||
row++;
|
||||
}
|
||||
if (row < 0 || row >= column.length)
|
||||
return;
|
||||
|
||||
let metaWindow = space.getWindow(index, row);
|
||||
ensureViewport(metaWindow, space);
|
||||
}
|
||||
|
||||
positionOf(metaWindow) {
|
||||
metaWindow = metaWindow || this.selectedWindow;
|
||||
let index, row;
|
||||
|
||||
Reference in New Issue
Block a user