Skip to content

Commit

Permalink
feat: add an option to disable "drag out to float" behavior
Browse files Browse the repository at this point in the history
  • Loading branch information
ikajdan committed Mar 20, 2022
1 parent d2753ab commit bb68131
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 10 deletions.
5 changes: 5 additions & 0 deletions src/config/bismuth_config.kcfg
Expand Up @@ -103,6 +103,11 @@
<default>false</default>
</entry>

<entry name="untileByDragging" type="Bool">
<label>Float windows by dragging them out of a layout.</label>
<default>true</default>
</entry>

<entry name="monocleMaximize" type="Bool">
<label>Always maximize windows in Monocle layout</label>
<default>true</default>
Expand Down
1 change: 1 addition & 0 deletions src/core/ts-proxy.cpp
Expand Up @@ -53,6 +53,7 @@ QJSValue TSProxy::jsConfig()
setProp("monocleMaximize", m_config.monocleMaximize());
setProp("maximizeSoleTile", m_config.maximizeSoleTile());
setProp("monocleMinimizeRest", m_config.monocleMinimizeRest());
setProp("untileByDragging", m_config.untileByDragging());

setProp("keepFloatAbove", m_config.keepFloatAbove());
setProp("noTileBorder", m_config.noTileBorder());
Expand Down
5 changes: 5 additions & 0 deletions src/kcm/package/contents/ui/Behaviour.qml
Expand Up @@ -58,6 +58,11 @@ Kirigami.FormLayout {
settingName: "maximizeSoleTile"
}

BIC.ConfigCheckBox {
text: i18n("Untile windows by dragging")
settingName: "untileByDragging"
}

BIC.ConfigCheckBox {
text: i18n("Floating windows always on top")
settingName: "keepFloatAbove"
Expand Down
1 change: 1 addition & 0 deletions src/kwinscript/config.ts
Expand Up @@ -9,6 +9,7 @@ export interface Config {
monocleMaximize: boolean;
maximizeSoleTile: boolean;
monocleMinimizeRest: boolean; // KWin-specific
untileByDragging: boolean;
//#endregion

//#region Features
Expand Down
23 changes: 13 additions & 10 deletions src/kwinscript/controller/index.ts
Expand Up @@ -285,16 +285,19 @@ export class ControllerImpl implements Controller {
}
}

/* ... or float window by dragging */
if (window.state === WindowState.Tiled) {
const diff = window.actualGeometry.subtract(window.geometry);
const distance = Math.sqrt(diff.x ** 2 + diff.y ** 2);
// TODO: arbitrary constant
if (distance > 30) {
window.floatGeometry = window.actualGeometry;
window.state = WindowState.Floating;
this.engine.arrange();
return;
/* ... or float window */
if (this.config.untileByDragging) {
if (window.state === WindowState.Tiled) {
const diff = window.actualGeometry.subtract(window.geometry);
const distance = Math.sqrt(diff.x ** 2 + diff.y ** 2);
// TODO: arbitrary constant
if (distance > 30) {
window.floatGeometry = window.actualGeometry;
window.state = WindowState.Floating;
this.engine.arrange();
this.engine.showNotification("Window Untiled");
return;
}
}
}

Expand Down

0 comments on commit bb68131

Please sign in to comment.