Skip to content

Commit 4df8183

Browse files
committed
Added distance and delay to settings
1 parent 530eedc commit 4df8183

File tree

4 files changed

+104
-31
lines changed

4 files changed

+104
-31
lines changed

extension.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ let config = {
3030
preview: {
3131
enabled: true,
3232
doubleWidth: true,
33-
close: 75,
33+
distance: 75,
3434
delay: 500
3535
}
3636
}
@@ -52,6 +52,8 @@ function updateSettings() {
5252
config.preview.doubleWidth = settings.get_value('double-width').deep_unpack();
5353
config.useMaximize = settings.get_value('use-maximize').deep_unpack();
5454
config.preview.enabled = settings.get_value('preview').deep_unpack();
55+
config.preview.distance = settings.get_value('distance').deep_unpack();
56+
config.preview.delay = settings.get_value('delay').deep_unpack();
5557
config.debug = settings.get_value('debug').deep_unpack();
5658
_log(JSON.stringify(config));
5759
}
@@ -63,8 +65,8 @@ let settingsChangedId = settings.connect('changed', updateSettings.bind());
6365

6466
const Config = imports.misc.config;
6567
window.gsconnect = {
66-
extdatadir: imports.misc.extensionUtils.getCurrentExtension().path,
67-
shell_version: parseInt(Config.PACKAGE_VERSION.split('.')[1], 10)
68+
extdatadir: imports.misc.extensionUtils.getCurrentExtension().path,
69+
shell_version: parseInt(Config.PACKAGE_VERSION.split('.')[1], 10)
6870
};
6971
imports.searchPath.unshift(gsconnect.extdatadir);
7072

@@ -676,9 +678,9 @@ function changeBinding(settings, key, oldBinding, newBinding) {
676678
}
677679

678680
function isClose(a, b) {
679-
if (a <= b && a > b - config.preview.close)
681+
if (a <= b && a > b - config.preview.distance)
680682
return true;
681-
else if (a >= b && a < b + config.preview.close)
683+
else if (a >= b && a < b + config.preview.distance)
682684
return true;
683685
else
684686
return false;
@@ -808,7 +810,7 @@ function checkIfNearGrid(app) {
808810
}
809811
if (!close)
810812
hidePreview();
811-
Mainloop.timeout_add(500, function () {
813+
Mainloop.timeout_add(config.preview.delay, function () {
812814
checkIfNearGrid(app);
813815
});
814816
}

prefs.js

+79-20
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ const Me = ExtensionUtils.getCurrentExtension();
1010
const Gettext = imports.gettext;
1111
const _ = Gettext.domain('wintile').gettext;
1212

13+
let gschema = Gio.SettingsSchemaSource.new_from_directory(
14+
Me.dir.get_child('schemas').get_path(),
15+
Gio.SettingsSchemaSource.get_default(),
16+
false
17+
);
18+
19+
const gsettings = new Gio.Settings({
20+
settings_schema: gschema.lookup('org.gnome.shell.extensions.wintile', true)
21+
});
22+
23+
1324
function init() {
1425
}
1526

@@ -30,17 +41,6 @@ function createColOptions(){
3041
}
3142

3243
function buildPrefsWidget() {
33-
// Copy the same GSettings code from `extension.js`
34-
let gschema = Gio.SettingsSchemaSource.new_from_directory(
35-
Me.dir.get_child('schemas').get_path(),
36-
Gio.SettingsSchemaSource.get_default(),
37-
false
38-
);
39-
40-
this.settings = new Gio.Settings({
41-
settings_schema: gschema.lookup('org.gnome.shell.extensions.wintile', true)
42-
});
43-
4444
let rendererText = new Gtk.CellRendererText();
4545

4646
// Create a parent widget that we'll return from this function
@@ -86,15 +86,15 @@ function buildPrefsWidget() {
8686
halign: Gtk.Align.START
8787
});
8888
let maximizeInput = new Gtk.Switch({
89-
active: this.settings.get_boolean ('use-maximize'),
89+
active: gsettings.get_boolean ('use-maximize'),
9090
halign: Gtk.Align.END,
9191
visible: true
9292
});
9393
layout.attach(maximizeLabel, 0, row, 1, 1);
9494
layout.attach(maximizeInput, 1, row++, 1, 1);
9595

9696
// Preview settings
97-
let previewEnabled = this.settings.get_boolean ('preview');
97+
let previewEnabled = gsettings.get_boolean ('preview');
9898
let previewLabel = new Gtk.Label({
9999
label: _("Enable preview and snapping when dragging windows"),
100100
visible: true,
@@ -117,13 +117,65 @@ function buildPrefsWidget() {
117117
halign: Gtk.Align.START
118118
});
119119
let doubleWidthInput = new Gtk.Switch({
120-
active: this.settings.get_boolean ('double-width'),
120+
active: gsettings.get_boolean ('double-width'),
121121
halign: Gtk.Align.END,
122122
visible: true
123123
});
124124
layout.attach(doubleWidthLabel, 0, row, 1, 1);
125125
layout.attach(doubleWidthInput, 1, row++, 1, 1);
126126

127+
// Preview distance
128+
let previewDistanceLabel = new Gtk.Label({
129+
label: _(" Pixels from edge to start preview"),
130+
visible: true,
131+
hexpand: true,
132+
halign: Gtk.Align.START
133+
});
134+
let previewDistanceInput = new Gtk.Box({
135+
orientation: Gtk.Orientation.HORIZONTAL,
136+
visible: true
137+
});
138+
let previewDistanceAdjustment = new Gtk.Adjustment({
139+
lower: 0,
140+
upper: 150,
141+
step_increment: 1
142+
});
143+
let previewDistanceSettingInt = new Gtk.SpinButton({
144+
adjustment: previewDistanceAdjustment,
145+
snap_to_ticks: true,
146+
visible: true
147+
});
148+
previewDistanceSettingInt.set_value(gsettings.get_int('distance'));
149+
previewDistanceInput.add(previewDistanceSettingInt);
150+
layout.attach(previewDistanceLabel, 0, row, 1, 1);
151+
layout.attach(previewDistanceInput, 1, row++, 1, 1);
152+
153+
// Delay
154+
let previewDelayLabel = new Gtk.Label({
155+
label: _(" Delay in ms before preview dislpays"),
156+
visible: true,
157+
hexpand: true,
158+
halign: Gtk.Align.START
159+
});
160+
let previewDelayInput = new Gtk.Box({
161+
orientation: Gtk.Orientation.HORIZONTAL,
162+
visible: true
163+
});
164+
let previewDelayAdjustment = new Gtk.Adjustment({
165+
lower: 100,
166+
upper: 1000,
167+
step_increment: 1
168+
});
169+
let previewDelaySettingInt = new Gtk.SpinButton({
170+
adjustment: previewDelayAdjustment,
171+
snap_to_ticks: true,
172+
visible: true
173+
});
174+
previewDelaySettingInt.set_value(gsettings.get_int('delay'));
175+
previewDelayInput.add(previewDelaySettingInt);
176+
layout.attach(previewDelayLabel, 0, row, 1, 1);
177+
layout.attach(previewDelayInput, 1, row++, 1, 1);
178+
127179
// Debug setting
128180
let debugLabel = new Gtk.Label({
129181
label: _("Turn on debugging"),
@@ -132,18 +184,25 @@ function buildPrefsWidget() {
132184
halign: Gtk.Align.START
133185
});
134186
let debugInput = new Gtk.Switch({
135-
active: this.settings.get_boolean ('debug'),
187+
active: gsettings.get_boolean ('debug'),
136188
halign: Gtk.Align.END,
137189
visible: true
138190
});
139191
layout.attach(debugLabel, 0, row, 1, 1);
140192
layout.attach(debugInput, 1, row++, 1, 1);
141193

142-
this.settings.bind('cols', colsInput, 'active', Gio.SettingsBindFlags.DEFAULT);
143-
this.settings.bind('double-width', doubleWidthInput, 'active', Gio.SettingsBindFlags.DEFAULT);
144-
this.settings.bind('use-maximize', maximizeInput, 'active', Gio.SettingsBindFlags.DEFAULT);
145-
this.settings.bind('preview', previewInput, 'active', Gio.SettingsBindFlags.DEFAULT);
146-
this.settings.bind('debug', debugInput, 'active', Gio.SettingsBindFlags.DEFAULT);
194+
gsettings.bind('cols', colsInput, 'active', Gio.SettingsBindFlags.DEFAULT);
195+
gsettings.bind('use-maximize', maximizeInput, 'active', Gio.SettingsBindFlags.DEFAULT);
196+
gsettings.bind('preview', previewInput, 'active', Gio.SettingsBindFlags.DEFAULT);
197+
gsettings.bind('double-width', doubleWidthInput, 'active', Gio.SettingsBindFlags.DEFAULT);
198+
previewDistanceSettingInt.connect('value-changed', function(entry) {
199+
gsettings.set_int('distance', entry.value);
200+
});
201+
previewDelaySettingInt.connect('value-changed', function(entry) {
202+
gsettings.set_int('delay', entry.value);
203+
});
204+
gsettings.bind('debug', debugInput, 'active', Gio.SettingsBindFlags.DEFAULT);
205+
147206

148207
let setDoubleWidthWidgetsEnabled = function(enabled) {
149208
doubleWidthLabel.set_sensitive(enabled);

schemas/gschemas.compiled

136 Bytes
Binary file not shown.

schemas/org.gnome.shell.extensions.wintile.gschema.xml

+17-5
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@
77
<description></description>
88
<range min="0" max="2"/>
99
</key>
10-
<key name="double-width" type="b">
11-
<default>true</default>
12-
<summary>Use double width previews on sides in 4 column mode</summary>
13-
<description>When on, dragging a window to the side will preview 2 columns wide instead of 1.</description>
14-
</key>
1510
<key name="use-maximize" type="b">
1611
<default>true</default>
1712
<summary>Turn on/off use of maximizing windows</summary>
@@ -22,6 +17,23 @@
2217
<summary>Turn on/off mouse positioning</summary>
2318
<description>When on, dragging windows with the mouse will allow placement into the grid.</description>
2419
</key>
20+
<key name="double-width" type="b">
21+
<default>true</default>
22+
<summary>Use double width previews on sides in 4 column mode</summary>
23+
<description>When on, dragging a window to the side will preview 2 columns wide instead of 1.</description>
24+
</key>
25+
<key name="distance" type="i">
26+
<default>25</default>
27+
<summary>Pixels from edge to start preview</summary>
28+
<description></description>
29+
<range min="0" max="150"/>
30+
</key>
31+
<key name="delay" type="i">
32+
<default>500</default>
33+
<summary>Delay in ms before preview dislpays</summary>
34+
<description></description>
35+
<range min="100" max="1000"/>
36+
</key>
2537
<key name="debug" type="b">
2638
<default>false</default>
2739
<summary>Turn on/off debug output</summary>

0 commit comments

Comments
 (0)