Always pass an owner object to dynamic_function_ref

This way we can remove a bunch more globally declared variables.
This commit is contained in:
Tor Hedin Brønner
2017-10-27 21:03:53 +02:00
parent bfb4414cb9
commit e260fc25b7
5 changed files with 52 additions and 34 deletions
+28 -11
View File
@@ -3,7 +3,7 @@ const convenience = Extension.imports.convenience;
const Tiling = Extension.imports.tiling;
const Scratch = Extension.imports.scratch;
const LiveAltTab = Extension.imports.liveAltTab;
const utils = Extension.utils;
const utils = Extension.imports.utils;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Meta = imports.gi.Meta;
@@ -100,6 +100,8 @@ function enable() {
initWorkspaces();
}
let dynamic_function_ref = utils.dynamic_function_ref;
settings = new Gio.Settings({ schema_id: "org.gnome.desktop.wm.keybindings"});
settings.set_strv("close", ['<super>c'])
@@ -114,24 +116,39 @@ function enable() {
as_key_handler("toggle_maximize_horizontally"));
Meta.keybindings_set_custom_handler("switch-applications",
dynamic_function_ref("liveAltTab"));
dynamic_function_ref("liveAltTab",
LiveAltTab));
Meta.keybindings_set_custom_handler("switch-to-workspace-up",
dynamic_function_ref("preview_navigate"));
dynamic_function_ref("preview_navigate",
Tiling));
Meta.keybindings_set_custom_handler("switch-to-workspace-down",
dynamic_function_ref("preview_navigate"));
dynamic_function_ref("preview_navigate",
Tiling));
paperActions.register("switch-next", dynamic_function_ref("preview_navigate"));
paperActions.register("switch-previous", dynamic_function_ref("preview_navigate"),
Meta.KeyBindingFlags.IS_REVERSED);
paperActions.register("switch-next",
dynamic_function_ref("preview_navigate",
Tiling));
paperActions.register("switch-previous",
dynamic_function_ref("preview_navigate",
Tiling),
Meta.KeyBindingFlags.IS_REVERSED);
paperActions.register("move-left", dynamic_function_ref("preview_navigate"));
paperActions.register("move-right", dynamic_function_ref("preview_navigate"));
paperActions.register("toggle-scratch-layer", dynamic_function_ref("toggleScratch"));
paperActions.register("move-left",
dynamic_function_ref("preview_navigate",
Tiling));
paperActions.register("move-right",
dynamic_function_ref("preview_navigate",
Tiling));
paperActions.register("toggle-scratch-layer",
dynamic_function_ref("toggleScratch",
Scratch));
paperActions.register("develop-set-globals", dynamic_function_ref("setDevGlobals"));
paperActions.register("develop-set-globals",
dynamic_function_ref("setDevGlobals",
utils));
paperActions.register("cycle-width", as_key_handler("cycleWindowWidth"),
Meta.KeyBindingFlags.PER_WINDOW);
+1 -1
View File
@@ -206,7 +206,7 @@ var LiveAltTab = Lang.Class({
})
liveAltTab = (display, screen, meta_window, binding) => {
var liveAltTab = (display, screen, meta_window, binding) => {
let tabPopup = new LiveAltTab();
tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask());
}
+1 -1
View File
@@ -14,7 +14,7 @@ function isScratchActive() {
return getScratchWindows().some(metaWindow => !metaWindow.minimized);
}
toggleScratch = function() {
var toggleScratch = function() {
let windows = getScratchWindows();
let isSomeShown = isScratchActive();
+20 -19
View File
@@ -11,6 +11,7 @@ const utils = Extension.imports.utils;
const Clutter = imports.gi.Clutter;
var Minimap = Extension.imports.minimap;
var Me = Extension.imports.tiling;
let preferences = Extension.imports.convenience.getSettings();
// Gap between windows
@@ -60,10 +61,10 @@ var Space = (workspace) => {
space.workspace = workspace;
space.addSignal =
workspace.connect("window-added",
dynamic_function_ref("add_handler"));
utils.dynamic_function_ref("add_handler", Me));
space.removeSignal =
workspace.connect("window-removed",
dynamic_function_ref("remove_handler"));
utils.dynamic_function_ref("remove_handler", Me));
space.selectedWindow = null;
space.moving = false;
space.leftStack = 0; // not implemented
@@ -110,11 +111,11 @@ var spaces = (function () {
spaces.nWorkspacesSignal =
global.screen.connect('notify::n-workspaces',
Lang.bind(spaces, dynamic_function_ref('workspacesChanged', spaces)));
Lang.bind(spaces, utils.dynamic_function_ref('workspacesChanged', spaces)));
spaces.windowCreatedSignal =
global.display.connect('window-created',
dynamic_function_ref('window_created'));
utils.dynamic_function_ref('window_created', spaces));
spaces.workspacesChanged = function () {
let nWorkspaces = global.screen.n_workspaces;
@@ -162,6 +163,18 @@ var spaces = (function () {
return this._spaces[workspace];
};
spaces.window_created = function (display, metaWindow, user_data) {
// Only run setInitialPosition on inserted windows
if (!metaWindow[isInserted])
return;
delete metaWindow[isInserted];
debug('window-created', metaWindow.title);
let actor = metaWindow.get_compositor_private();
let signal = Symbol();
metaWindow[signal] = actor.connect('first-frame',
Lang.bind({metaWindow, signal}, setInitialPosition));
};
return spaces;
})();
window.spaces = spaces;
@@ -292,18 +305,6 @@ var insertWindow = function(space, metaWindow, index) {
}
}
window_created = (display, metaWindow, user_data) => {
// Only run setInitialPosition on inserted windows
if (!metaWindow[isInserted])
return;
delete metaWindow[isInserted];
debug('window-created', metaWindow.title);
let actor = metaWindow.get_compositor_private();
let signal = Symbol();
metaWindow[signal] = actor.connect('first-frame',
Lang.bind({metaWindow, signal}, setInitialPosition));
}
// Needs to be called by {metaWindow, signal}
setInitialPosition = function(actor, existing) {
let {metaWindow, signal} = this;
@@ -582,7 +583,7 @@ defwinprop({
scratch_layer: true
});
add_handler = (ws, meta_window) => {
var add_handler = (ws, meta_window) => {
debug("window-added", meta_window, meta_window.title, meta_window.window_type, ws.index());
if (!add_filter(meta_window)) {
return;
@@ -628,7 +629,7 @@ add_handler = (ws, meta_window) => {
insertWindow(space, meta_window, insert_after_i + 1);
}
remove_handler = (workspace, meta_window) => {
var remove_handler = (workspace, meta_window) => {
debug("window-removed", meta_window, meta_window.title, workspace.index());
// Note: If `meta_window` was closed and had focus at the time, the next
// window has already received the `focus` signal at this point.
@@ -973,7 +974,7 @@ var PreviewedWindowNavigator = new Lang.Class({
}
});
preview_navigate = (display, screen, meta_window, binding) => {
var preview_navigate = (display, screen, meta_window, binding) => {
let tabPopup = new PreviewedWindowNavigator();
tabPopup.show(binding.is_reversed(), binding.get_name(), binding.get_mask())
}
+2 -2
View File
@@ -41,7 +41,7 @@ var framestr = (rect) => {
* redefine the function without re-registering all signal handler, keybindings,
* etc. (this is like a function symbol in lisp)
*/
dynamic_function_ref = function(handler_name, owner_obj) {
var dynamic_function_ref = function(handler_name, owner_obj) {
owner_obj = owner_obj || window;
return function() {
owner_obj[handler_name].apply(this, arguments);
@@ -72,7 +72,7 @@ function in_bounds(array, i) {
//// Debug and development utils
setDevGlobals = function() {
var setDevGlobals = function() {
// Accept the risk of this interfering with existing code for now
metaWindow = global.display.focus_window;
workspace = global.screen.get_active_workspace();