Prepare for navigator refactor + refactor switch-left/right/up/down

This commit is contained in:
Ole Jørgen Brønner
2018-07-15 20:41:38 +02:00
committed by Tor Hedin Brønner
parent 2a4199029d
commit f0386de74c
5 changed files with 85 additions and 81 deletions
+26 -20
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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());
}
+43
View File
@@ -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;