diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d6048b1..3779bf18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,6 +92,7 @@ add_subdirectory(components) add_subdirectory(quicksettings) add_subdirectory(kcms) add_subdirectory(kded) +add_subdirectory(kwin) find_program(PlasmaOpenSettings plasma-open-settings) set_package_properties(PlasmaOpenSettings PROPERTIES diff --git a/kwin/CMakeLists.txt b/kwin/CMakeLists.txt new file mode 100644 index 00000000..e2c3f25f --- /dev/null +++ b/kwin/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(scripts) diff --git a/kwin/scripts/CMakeLists.txt b/kwin/scripts/CMakeLists.txt new file mode 100644 index 00000000..c78bd7e9 --- /dev/null +++ b/kwin/scripts/CMakeLists.txt @@ -0,0 +1,10 @@ +function(add_kwin_script name) + kpackage_install_package(${name} ${name} scripts kwin) + + # Copy the script to the build directory so one can run tests without prior + # make install. FIXME: use add_custom_command. + file(COPY ${name} DESTINATION ${CMAKE_BINARY_DIR}/bin/kwin/scripts/) +endfunction() + +add_kwin_script(convergentwindows) + diff --git a/kwin/scripts/convergentwindows/contents/code/main.js b/kwin/scripts/convergentwindows/contents/code/main.js new file mode 100644 index 00000000..016fa990 --- /dev/null +++ b/kwin/scripts/convergentwindows/contents/code/main.js @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: 2023 Plata Hill +// SPDX-License-Identifier: LGPL-2.1-or-later + +function run(client) { + if (client.screen === 0) { + client.setMaximize(true, true); + client.noBorder = true; + } else { + client.noBorder = false; + } +} + +workspace.clientAdded.connect((client) => { + if (client.normalWindow) { + client.clientFinishUserMovedResized.connect((client) => { + run(client); + }); + run(client); + } +}); + +// Windows are moved from the external screen +// to the internal screen if the external screen +// is disconnected. +workspace.numberScreensChanged.connect((count) => { + const clients = workspace.clientList(); + + for (var i = 0; i < clients.length; i++) { + if (clients[i].normalWindow) { + run(clients[i]); + } + } +}); diff --git a/kwin/scripts/convergentwindows/metadata.json b/kwin/scripts/convergentwindows/metadata.json new file mode 100644 index 00000000..301cf066 --- /dev/null +++ b/kwin/scripts/convergentwindows/metadata.json @@ -0,0 +1,24 @@ +{ + "KPlugin": { + "Name": "Convergent Windows", + "Description": "Removes window decorations and maximizes windows on the first screen only.", + "Icon": "preferences-system-windows", + + "Authors": [ + { + "Email": "plata.hill@kdemail.net", + "Name": "Plata Hill" + } + ], + "Id": "convergentwindows", + "ServiceTypes": [ + "KWin/Script" + ], + "Version": "1.0", + "Licsense": "LGPL-2.1-or-later", + "Website": "https://invent.kde.org/plata/convergentwindows" + }, + "X-Plasma-API": "javascript", + "X-Plasma-MainScript": "code/main.js" +} +