Compare commits

...

17 commits

Author SHA1 Message Date
wackyideas
50af3b2fc2 Merge branch 'fedora-fixes' into 'master'
Fedora fixes

See merge request wackyideas/aerothemeplasma!51
2026-02-11 02:25:41 +01:00
beryesa
4ec8620804 fix: correct sanity check on Fedora 2026-02-07 19:26:18 +01:00
beryesa
5d3fc5e2f1 chore: add extra dependencies for Fedora 2026-02-07 19:40:54 +01:00
wackyideas
8bea94f794 Update README.md 2026-02-04 12:14:39 +01:00
wackyideas
1c5e228e0f digitalclocklite: improve font rendering for >=200% scaling 2026-02-03 22:36:32 +01:00
wackyideas
6094d287ed desktopcontainment: mitigate font rendering issues on HiDPI screens 2026-02-03 22:09:06 +01:00
wackyideas
eac5887b00 notifications: mitigate font rendering issues on HiDPI 2026-02-03 14:24:35 +01:00
wackyideas
334611612a Merge branch 'patch-1' into 'master'
fix: remove plasma applets in uninstall.sh

See merge request wackyideas/aerothemeplasma!49
2026-02-03 13:23:36 +01:00
wackyideas
57f7ce5f73 Bring back badges to SevenTasks 2026-02-03 13:13:51 +01:00
meowkatee
144be00d9d fix: do not override $SHELL special environment 2026-02-03 08:26:44 +00:00
meowkatee
0f0467bfe7 fix: remove plasma applets in uninstall.sh 2026-02-02 16:46:52 +00:00
wackyideas
cbcabcfaa9 Update Ubuntu 25.10 dependencies 2026-02-02 01:14:31 +01:00
wackyideas
6d6de995c3 Merge branch 'desktop-watermark' into 'master'
Add desktop watermarks to the desktop containment

See merge request wackyideas/aerothemeplasma!48
2026-02-02 01:10:23 +01:00
catpswin56
d0bf694f02 Desktop Containment: add support for adding, modifying and removing watermarks 2026-02-01 20:54:00 -03:00
wackyideas
83ea9cf998 Update README.md 2026-02-01 20:21:30 +01:00
wackyideas
b319ffbdd7 Explicitly use bash instead of sh 2026-02-01 20:07:40 +01:00
wackyideas
fe9175f6c9 Add uninstall script, update INSTALL.md
This script undoes the install process that is performed by the install
scripts. It doesn't revert settings back to their defaults, consult the
install guide for details. The install guide also has a written manual
guide on uninstalling AeroThemePlasma, for additional clarity.

This script also acts as a migration script for the future restructuring
of the project, which will make everything installable by only using
CMake, which is what should have been implemented a long time ago.

This will be one of the last few commits before the project is
restructured, introducing AUR packages as an option for installing
ATP.
2026-02-01 18:44:03 +01:00
19 changed files with 1395 additions and 85 deletions

View file

@ -8,6 +8,7 @@
4. [Manual installation](#manual) 4. [Manual installation](#manual)
5. [Configuring AeroThemePlasma](#conf) 5. [Configuring AeroThemePlasma](#conf)
6. [GTK](#gtk) 6. [GTK](#gtk)
7. [Uninstalling AeroThemePlasma](#uninstall)
## Prerequisites <a name="preq"></a> ## Prerequisites <a name="preq"></a>
@ -35,7 +36,7 @@ KSysGuard has been officially deprecated by KDE, however an unofficial [port](ht
Required Packages: Required Packages:
```bash ```bash
dnf install plasma-workspace-devel unzip kvantum qt6-qtmultimedia-devel qt6-qt5compat-devel libplasma-devel qt6-qtbase-devel qt6-qtwayland-devel plasma-activities-devel kf6-kpackage-devel kf6-kglobalaccel-devel qt6-qtsvg-devel wayland-devel plasma-wayland-protocols kf6-ksvg-devel kf6-kcrash-devel kf6-kguiaddons-devel kf6-kcmutils-devel kf6-kio-devel kdecoration-devel kf6-ki18n-devel kf6-knotifications-devel kf6-kirigami-devel kf6-kiconthemes-devel cmake gmp-ecm-devel kf5-plasma-devel libepoxy-devel kwin-devel kf6-karchive kf6-karchive-devel plasma-wayland-protocols-devel qt6-qtbase-private-devel qt6-qtbase-devel kf6-knewstuff-devel kf6-knotifyconfig-devel kf6-attica-devel kf6-krunner-devel kf6-kdbusaddons-devel kf6-sonnet-devel plasma5support-devel plasma-activities-stats-devel polkit-qt6-1-devel qt-devel libdrm-devel kf6-kitemmodels-devel kf6-kstatusnotifieritem-devel dnf install plasma-workspace-devel unzip kvantum qt6-qtmultimedia-devel qt6-qt5compat-devel libplasma-devel qt6-qtbase-devel qt6-qtwayland-devel plasma-activities-devel kf6-kpackage-devel kf6-kglobalaccel-devel qt6-qtsvg-devel wayland-devel plasma-wayland-protocols kf6-ksvg-devel kf6-kcrash-devel kf6-kguiaddons-devel kf6-kcmutils-devel kf6-kio-devel kdecoration-devel kf6-ki18n-devel kf6-knotifications-devel kf6-kirigami-devel kf6-kiconthemes-devel cmake gmp-ecm-devel kf5-plasma-devel libepoxy-devel kwin-devel kf6-karchive kf6-karchive-devel plasma-wayland-protocols-devel qt6-qtbase-private-devel qt6-qtbase-devel kf6-knewstuff-devel kf6-knotifyconfig-devel kf6-attica-devel kf6-krunner-devel kf6-kdbusaddons-devel kf6-sonnet-devel plasma5support-devel plasma-activities-stats-devel polkit-qt6-1-devel qt-devel libdrm-devel kf6-kitemmodels-devel kf6-kstatusnotifieritem-devel kf6-frameworkintegration-devel
``` ```
On Fedora, additional dependencies for X11 include: On Fedora, additional dependencies for X11 include:
@ -58,7 +59,7 @@ In openSUSE, additional dependencies for X11 include:
### Ubuntu 25.10 ### Ubuntu 25.10
```bash ```bash
apt install build-essential cmake ninja-build curl libqt6virtualkeyboard6 libqt6multimedia6 libqt6core5compat6 libplasma5support6 libkdecorations3-dev libkf6colorscheme-dev libkf6i18n-dev libkf6iconthemes-dev libkf6kcmutils-dev libkirigami-dev libkf6kio-dev libkf6notifications-dev libkf6svg-dev libkf6crash-dev libkf6globalaccel-dev libplasma-dev libplasmaactivities-dev libxcb-composite0-dev libxcb-randr0-dev libxcb-shm0-dev libxcb-damage0-dev libepoxy-dev libqt6svg6-dev kwin-dev plasma-wayland-protocols apt install build-essential cmake ninja-build curl libqt6virtualkeyboard6 libqt6multimedia6 libqt6core5compat6 libplasma5support6 libkdecorations3-dev libkf6colorscheme-dev libkf6i18n-dev libkf6iconthemes-dev libkf6kcmutils-dev libkirigami-dev libkf6kio-dev libkf6notifications-dev libkf6svg-dev libkf6crash-dev libkf6globalaccel-dev libplasma-dev libplasmaactivities-dev libxcb-composite0-dev libxcb-randr0-dev libxcb-shm0-dev libxcb-damage0-dev libepoxy-dev libqt6svg6-dev kwin-dev plasma-wayland-protocols libkf5qqc2desktopstyle-dev libkf6qqc2desktopstyle-dev libplasma5support-dev libkf6auth-dev libkf6newstuff-dev libkf6notifyconfig-dev libkf6attica-dev libkf6runner-dev libkf6dbusaddons-dev libkf6sonnet-dev libkf6xmlgui-dev libkf6coreaddons-dev libkf6widgetsaddons-dev libkf6guiaddons-dev qt6-base-dev qt6-5compat-dev qml-module-org-kde-qqc2desktopstyle libplasmaactivitiesstats-dev plasma-workspace-dev libkf6statusnotifieritem-dev qml-module-org-kde-kirigami-addons-sounds qml6-module-org-kde-kirigamiaddons-sounds
``` ```
On Ubuntu, additional dependencies for X11 include: On Ubuntu, additional dependencies for X11 include:
@ -84,11 +85,11 @@ There are two ways to install AeroThemePlasma: Using the provided install script
This is the recommended way of installing ATP. The install scripts compile and deploy the components required for ATP to work. Run the install scripts in the terminal: This is the recommended way of installing ATP. The install scripts compile and deploy the components required for ATP to work. Run the install scripts in the terminal:
```sh ```sh
$ sh compile.sh --ninja $ bash compile.sh --ninja
$ sh install_plasmoids.sh --ninja $ bash install_plasmoids.sh --ninja
$ sh install_kwin_components.sh $ bash install_kwin_components.sh
$ sh install_plasma_components.sh $ bash install_plasma_components.sh
$ sh install_misc_components.sh $ bash install_misc_components.sh
``` ```
During execution, some scripts may require admin privileges or other prompts from the user. Do **NOT** run any of the provided install scripts with sudo or as root. During execution, some scripts may require admin privileges or other prompts from the user. Do **NOT** run any of the provided install scripts with sudo or as root.
@ -109,18 +110,23 @@ You can additionally pass `--ninja` to any of the following scripts in order to
- `install_plasmoids.sh` - `install_plasmoids.sh`
- Any individual `install.sh` script - Any individual `install.sh` script
Other notable flags include:
1. `--skip-libplasma` in `compile.sh`, which skips libplasma patches from being compiled and installed
2. `--skip-kpackages` in `install_plasmoids.sh`, which skips installing the QML components of plasmoids
### Note for Wayland users ### Note for Wayland users
The compile script must be run while passing the `--wayland` argument for KWin effects: The compile script must be run while passing the `--wayland` argument for KWin effects:
```bash ```bash
$ sh compile.sh --wayland --ninja $ bash compile.sh --wayland --ninja
``` ```
If compiling individual KWin effects by running their respective `install.sh` scripts, you can also pass the `--wayland` argument there: If compiling individual KWin effects by running their respective `install.sh` scripts, you can also pass the `--wayland` argument there:
```bash ```bash
$ sh install.sh --wayland --ninja $ bash install.sh --wayland --ninja
``` ```
### Updating AeroThemePlasma ### Updating AeroThemePlasma
@ -135,12 +141,12 @@ $ git pull
and re-run the install scripts: and re-run the install scripts:
```sh ```sh
$ sh compile.sh $ bash compile.sh
$ sh install_plasmoids.sh $ bash install_plasmoids.sh
$ sh install_plasmoids.sh --no-compile # If there's no need to recompile the C++ parts of the plasmoids, you can pass this argument to speed things up $ bash install_plasmoids.sh --no-compile # If there's no need to recompile the C++ parts of the plasmoids, you can pass this argument to speed things up
$ sh install_kwin_components.sh $ bash install_kwin_components.sh
$ sh install_plasma_components.sh $ bash install_plasma_components.sh
$ sh install_misc_components.sh # Usually not required to run again $ bash install_misc_components.sh # Usually not required to run again
``` ```
Typically it's enough to run the first four scripts after ATP has been updated. It's highly recommended to check for new commits and read the extended descriptions in order to see what has actually changed and what's required when updating. Typically it's enough to run the first four scripts after ATP has been updated. It's highly recommended to check for new commits and read the extended descriptions in order to see what has actually changed and what's required when updating.
@ -169,7 +175,7 @@ SevenTasks relies on modifications found in `misc/libplasma` in order to work pr
2. Compile all the C++ components found in the `plasmoids/src` directory like this for each source directory: 2. Compile all the C++ components found in the `plasmoids/src` directory like this for each source directory:
```bash ```bash
$ sh install.sh --ninja $ bash install.sh --ninja
``` ```
3. Move `sddm/sddm-theme-mod` to `/usr/share/sddm/themes`. Optionally, to enable the Vista start screen, set `enableStartup=true` in `theme.conf.user` 3. Move `sddm/sddm-theme-mod` to `/usr/share/sddm/themes`. Optionally, to enable the Vista start screen, set `enableStartup=true` in `theme.conf.user`
@ -281,3 +287,151 @@ echo -e "Microsoft Windows [Version 6.1.7600]\nCopyright (c) 2009 Microsoft Corp
AeroThemePlasma officially doesn't have any kind of maintenance, development or support for GTK applications. Instead, check out AeroThemePlasma officially doesn't have any kind of maintenance, development or support for GTK applications. Instead, check out
[Windows 7 Better](https://gitgud.io/Gamer95875/Windows-7-Better) by [Gamer95875](https://gitgud.io/Gamer95875), which is the recommended set of themes that works best with AeroThemePlasma. [Windows 7 Better](https://gitgud.io/Gamer95875/Windows-7-Better) by [Gamer95875](https://gitgud.io/Gamer95875), which is the recommended set of themes that works best with AeroThemePlasma.
## Uninstalling AeroThemePlasma <a name="uninstall"></a>
AeroThemePlasma provides an uninstall script that undoes much of what's installed on the system. The script assumes that all of the CMake build files are still present in the repo, most importantly the `install_manifest.txt` files generated as a result of installing compiled parts of ATP. If these files are missing from the repo, they need to be regenerated by once again rerunning the necessary scripts like this:
```bash
$ bash compile.sh --skip-libplasma [--wayland] [--ninja]
$ bash install_plasmoids.sh --skip-kpackages [--ninja]
```
Once this is done, the script is simply executed:
```bash
$ bash uninstall.sh
```
This should be run outside of the AeroThemePlasma session, preferrably in a regular Plasma session. The script will ask for confirmation to uninstall components of the system. **Please check that none of the locations are ill-formed before accepting each prompt, especially those that require additional privileges to uninstall. In case this happens to you, report it as an issue ASAP.**
Afterwards, `libplasma` and `polkit-kde-agent` should be reinstalled using your distro's package manager. For example, on Arch Linux:
```bash
sudo pacman -Sy libplasma polkit-kde-agent
```
### Manual uninstallation
The script performs the following steps in order to uninstall ATP. Uninstalling ATP should be done outside of the ATP session itself. Log into the Plasma session before performing any of these steps.
### CMake
- Perform `sudo make uninstall` or `sudo ninja uninstall` in the following directories if applicable:
```
kwin/decoration/build
plasma/sddm/login-sessions/build
plasma/aerothemeplasma-kcmloader/build
plasma/plasmoids/src/systemtray_src/build
plasma/plasmoids/src/notifications_src/build
plasma/plasmoids/src/volume_src/build
plasma/plasmoids/src/sevenstart_src/build
plasma/plasmoids/src/seventasks_src/build
plasma/plasmoids/src/desktopcontainment/build
kwin/effects_cpp/kde-effects-aeroglassblur/build
kwin/effects_cpp/kwin-effect-smodsnap-v2/build
kwin/effects_cpp/smodglow/build
kwin/effects_cpp/aeroglide/build
kwin/effects_cpp/startupfeedback/build
# For Wayland builds
kwin/effects_cpp/kde-effects-aeroglassblur/build-wl
kwin/effects_cpp/kwin-effect-smodsnap-v2/build-wl
kwin/effects_cpp/smodglow/build-wl
kwin/effects_cpp/aeroglide/build-wl
kwin/effects_cpp/startupfeedback/build-wl
```
### Plasmoids
- Perform `kpackagetool6 -t "Plasma/Applet" -r "plasmoid_id"` for each plasmoid, replacing `plasmoid_id` with the following:
```
io.gitgud.wackyideas.battery
io.gitgud.wackyideas.desktopcontainment
io.gitgud.wackyideas.digitalclocklite
io.gitgud.wackyideas.keyboardlayout
io.gitgud.wackyideas.networkmanagement
io.gitgud.wackyideas.panel
io.gitgud.wackyideas.SevenStart
io.gitgud.wackyideas.seventasks
io.gitgud.wackyideas.volume
io.gitgud.wackyideas.win7showdesktop
```
### Plasma components
- Perform the following commands:
```bash
kpackagetool6 -t "Plasma/LookAndFeel" -r "authui7"
kpackagetool6 -t "Plasma/LayoutTemplate" -r "io.gitgud.wackyideas.taskbar"
kpackagetool6 -t "Plasma/Theme" -r "Seven-Black"
kpackagetool6 -t "Plasma/Shell" -r "io.gitgud.wackyideas.desktop"
```
- Delete `~/.local/share/color-schemes/Aero.colors`
- Delete `~/.config/Kvantum/Windows7Aero`
- Delete the sound themes from `~/.local/share/sounds`:
```
'Windows 7'
'Windows 7 Afternoon'
'Windows 7 Calligraphy'
'Windows 7 Characters'
'Windows 7 Cityscape'
'Windows 7 Delta'
'Windows 7 Festival'
'Windows 7 Garden'
'Windows 7 Heritage'
'Windows 7 Landscape'
'Windows 7 Quirky'
'Windows 7 Raga'
'Windows 7 Savanna'
'Windows 7 Sonata'
```
- Delete the icon theme at `~/.local/share/icons/Windows 7 Aero`
- Delete the following files at `~/.local/share/mime/packages`:
```
application-vnd.microsoft.portable-executable.xml
application-x-ms-dll.xml
application-x-msdownload.xml
application-x-ms-ne-executable.xml
```
and run `update-mime-database ~/.local/share/mime` to refresh MIME associations
### KWin components
- Perform `kpackagetool6 -t "KWin/Effect" -r "effect_id"` for each effect, replacing `effect_id` with the following:
```
dimscreenaero
fadingpopupsaero
loginaero
seventasks-thumbnails
smodpeekeffect
squashaero
```
- Perform the following:
```bash
kpackagetool6 -t "KWin/Script" -r "smodpeekscript"
kpackagetool6 -t "KWin/WindowSwitcher" -r "flip3d"
kpackagetool6 -t "KWin/WindowSwitcher" -r "thumbnail_seven"
```
- Delete the outline at `~/.local/share/kwin/outline`
- Delete the symlinks `~/.local/share/kwin-x11` and `~/.local/share/kwin-wayland`
- Delete the branding at `~/.config/kdedefaults/kcm-about-distrorc` and the logo (`~/.config/kdedefaults/kcminfo.png`)
### Other components
- Delete the cursor theme at `/usr/share/icons/aero-drop`
- Delete the SDDM theme at `/usr/share/sddm/themes/sddm-theme-mod`
- Delete the SMOD files at `/usr/share/smod` and `~/.local/share/smod`
- Delete `/opt/aerothemeplasma`

View file

@ -9,7 +9,7 @@ This is a project which aims to recreate the look and feel of Windows 7 as much
ATP is in constant development and testing, it has been tested on: ATP is in constant development and testing, it has been tested on:
- Arch Linux x64 and other Arch derivatives - Arch Linux x64 and other Arch derivatives
- Plasma 6.5.0, KDE Frameworks 6.19.0, Qt 6.10.0 - Plasma 6.5.5, KDE Frameworks 6.22.0, Qt 6.10.1
- 96 DPI scaling, multi monitor - 96 DPI scaling, multi monitor
- X11, Wayland* - X11, Wayland*
@ -59,6 +59,7 @@ Huge thanks to everyone who helped out along the way by contributing, testing, p
- [AngelBruni](https://github.com/angelbruni) for contributing several SVG textures, most notably the clock in DigitalClockLite Seven - [AngelBruni](https://github.com/angelbruni) for contributing several SVG textures, most notably the clock in DigitalClockLite Seven
- [ricewind012](https://github.com/ricewind012/) for .bashrc Microsoft Windows header - [ricewind012](https://github.com/ricewind012/) for .bashrc Microsoft Windows header
- [furkrn](https://gitgud.io/furkrn) for creating and maintaining the [Plymouth theme](https://github.com/furkrn/PlymouthVista) - [furkrn](https://gitgud.io/furkrn) for creating and maintaining the [Plymouth theme](https://github.com/furkrn/PlymouthVista)
- [IcyGuidance](https://gitgud.io/IcyGuidance) for designing the notification badges in SevenTasks
### Special Thanks ### Special Thanks

View file

@ -3,6 +3,7 @@
# You can pass the following arguments to this script: # You can pass the following arguments to this script:
# --ninja Uses Ninja for faster compilation # --ninja Uses Ninja for faster compilation
# --wayland Tells the KWin build scripts to compile the C++ effects for Wayland # --wayland Tells the KWin build scripts to compile the C++ effects for Wayland
# --skip-libplasma Skips compiling libplasma patches
CUR_DIR=$(pwd) CUR_DIR=$(pwd)
USE_SCRIPT="install.sh" USE_SCRIPT="install.sh"
@ -21,9 +22,11 @@ fi
# Compiles the libplasma patches required for other components of ATP. # Compiles the libplasma patches required for other components of ATP.
# Requires a restart to be applied. # Requires a restart to be applied.
cd "$PWD/misc/libplasma" if [[ "$*" != *"--skip-libplasma"* ]]; then
sh $USE_SCRIPT $@ cd "$PWD/misc/libplasma"
cd "$CUR_DIR" bash $USE_SCRIPT $@
cd "$CUR_DIR"
fi
#echo "Compiling plasmoids..." #echo "Compiling plasmoids..."
#for filename in "$PWD/plasma/plasmoids/src/"*; do #for filename in "$PWD/plasma/plasmoids/src/"*; do
@ -37,14 +40,19 @@ cd "$CUR_DIR"
# Compiles the window decoration theme engine. # Compiles the window decoration theme engine.
echo "Compiling SMOD decorations..." echo "Compiling SMOD decorations..."
cd "$PWD/kwin/decoration" cd "$PWD/kwin/decoration"
sh $USE_SCRIPT $@ bash $USE_SCRIPT $@
cd "$CUR_DIR" cd "$CUR_DIR"
echo "Done." echo "Done."
echo -e "Installing login manager entries..."
cd "$PWD/plasma/sddm/login-sessions"
bash $USE_SCRIPT
echo "Done."
# Compiles the settings KCM loader used for development and quick access of certain settings pages. # Compiles the settings KCM loader used for development and quick access of certain settings pages.
echo "Compiling KCM loader..." echo "Compiling KCM loader..."
cd "$PWD/plasma/aerothemeplasma-kcmloader" cd "$PWD/plasma/aerothemeplasma-kcmloader"
sh $USE_SCRIPT $@ bash $USE_SCRIPT $@
cd "$CUR_DIR" cd "$CUR_DIR"
echo "Done." echo "Done."
@ -53,7 +61,7 @@ echo "Compiling KWin effects..."
for filename in "$PWD/kwin/effects_cpp/"*; do for filename in "$PWD/kwin/effects_cpp/"*; do
cd "$filename" cd "$filename"
echo "Compiling $(pwd)" echo "Compiling $(pwd)"
sh $USE_SCRIPT $@ bash $USE_SCRIPT $@
echo "Done." echo "Done."
cd "$CUR_DIR" cd "$CUR_DIR"
done done

View file

@ -7,10 +7,6 @@ if [[ -z "$(command -v kpackagetool6)" ]]; then
echo "kpackagetool6 not found. Stopping." echo "kpackagetool6 not found. Stopping."
exit exit
fi fi
if [[ -z "$(command -v cmake)" ]]; then
echo "CMake not found. Stopping."
exit
fi
if [[ -z "$(command -v tar)" ]]; then if [[ -z "$(command -v tar)" ]]; then
echo "tar not found. Stopping." echo "tar not found. Stopping."
exit exit
@ -54,9 +50,6 @@ cp "$PWD/plasma/color_scheme/Aero.colors" "$COLOR_DIR"
#plasma-apply-colorscheme Aero #plasma-apply-colorscheme Aero
# Installs the SDDM theme, as well as the SDDM entries required for ATP. # Installs the SDDM theme, as well as the SDDM entries required for ATP.
echo -e "Installing login manager entries..."
cd "plasma/sddm/login-sessions"
sh install.sh
echo -e "Installing SDDM theme..." echo -e "Installing SDDM theme..."
cd "$CUR_DIR/plasma/sddm" cd "$CUR_DIR/plasma/sddm"
tar -zcvf "sddm-theme-mod.tar.gz" "sddm-theme-mod" tar -zcvf "sddm-theme-mod.tar.gz" "sddm-theme-mod"

View file

@ -27,7 +27,7 @@ fi
# Skips the build process of plasmoids that have C++ components # Skips the build process of plasmoids that have C++ components
# Most of the time, recompiling isn't needed as most changes are done # Most of the time, recompiling isn't needed as most changes are done
# on the QML side. # on the QML side.
if [[ $1 == '--no-compile' ]]; then if [[ "$*" == *"--no-compile"* ]]; then
echo "Skipping compilation..." echo "Skipping compilation..."
else else
echo "Compiling plasmoids..." echo "Compiling plasmoids..."
@ -35,7 +35,7 @@ else
for filename in "$PWD/plasma/plasmoids/src/"*; do for filename in "$PWD/plasma/plasmoids/src/"*; do
cd "$filename" cd "$filename"
echo "Compiling $(pwd)" echo "Compiling $(pwd)"
sh $USE_SCRIPT $@ bash $USE_SCRIPT $@
echo "Done." echo "Done."
cd "$CUR_DIR" cd "$CUR_DIR"
done done
@ -65,12 +65,15 @@ function install_plasmoid {
# As such, we need to first terminate plasmashell in order to retain # As such, we need to first terminate plasmashell in order to retain
# saved configurations # saved configurations
killall plasmashell if [[ "$*" == *"--skip-kpackages"* ]]; then
echo -e "Skipping QML Plasmoids"
for filename in "$PWD/plasma/plasmoids/"*; do else
killall plasmashell
for filename in "$PWD/plasma/plasmoids/"*; do
install_plasmoid "$filename" install_plasmoid "$filename"
done done
setsid plasmashell --replace & # Restart plasmashell and detach it from the script
setsid plasmashell --replace & # Restart plasmashell and detach it from the script fi

View file

@ -10,26 +10,27 @@ import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.configuration 2.0 import org.kde.plasma.configuration 2.0
ConfigModel { ConfigModel {
property bool isFolder: true //(Plasmoid.pluginName === "org.kde.plasma.folder")
ConfigCategory { ConfigCategory {
name: i18n("Location") name: i18n("Location")
icon: "inode-directory" icon: "inode-directory"
source: "ConfigLocation.qml" source: "ConfigLocation.qml"
visible: isFolder
} }
ConfigCategory { ConfigCategory {
name: i18n("Icons") name: i18n("Icons")
icon: "preferences-desktop-icons" icon: "preferences-desktop-icons"
source: "ConfigIcons.qml" source: "ConfigIcons.qml"
visible: isFolder
} }
ConfigCategory { ConfigCategory {
name: i18n("Filter") name: i18n("Filter")
icon: "preferences-desktop-filter" icon: "preferences-desktop-filter"
source: "ConfigFilter.qml" source: "ConfigFilter.qml"
visible: isFolder }
ConfigCategory {
name: i18n("Watermark")
icon: "plasma"
source: "ConfigWatermark.qml"
} }
} }

View file

@ -148,4 +148,13 @@
<default>false</default> <default>false</default>
</entry> </entry>
</group> </group>
<group name="Watermark">
<entry name="watermarkVisible" type="Bool">
<default>false</default>
</entry>
<entry name="watermarks" type="String">
<default>[]</default>
</entry>
</group>
</kcfg> </kcfg>

View file

@ -0,0 +1,510 @@
/*
* SPDX-FileCopyrightText: 2018 Friedrich W. H. Kossebau <kossebau@kde.org>
* SPDX-FileCopyrightText: 2022 Ismael Asensio <isma.af@gmail.com>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import org.kde.kirigami as Kirigami
import org.kde.plasma.plasmoid
import org.kde.kcmutils as KCM
Item {
id: root
property var cfg_watermarks
property alias cfg_watermarkVisible: watermarkVisible.checked
property Window watermarkConfigure: null
component CustomGroupBox: GroupBox {
id: gbox
label: Label {
id: lbl
x: gbox.leftPadding + 2
y: lbl.implicitHeight/2-gbox.bottomPadding-1
width: lbl.implicitWidth
text: gbox.title
elide: Text.ElideRight
Rectangle {
anchors.fill: parent
anchors.leftMargin: -2
anchors.rightMargin: -2
color: "white"
z: -1
}
}
background: Rectangle {
y: gbox.topPadding - gbox.bottomPadding*2
width: parent.width
height: parent.height - gbox.topPadding + gbox.bottomPadding*2
color: "transparent"
border.color: "#d5dfe5"
radius: 3
}
}
ListModel {
id: presets
ListElement { text: "Windows 10" }
ListElement { text: "Windows 8.1" }
ListElement { text: "Windows 8" }
ListElement { text: "Windows 7" }
ListElement { text: "Windows Vista" }
ListElement { text: "AeroThemePlasma" }
}
Item {
id: watermarkManager
property var watermarks
property int count: 0
function setWatermark(index: int, text: string, bold: bool, color: string, horizontalAlignment: int) {
watermarks[index].text = text;
watermarks[index].bold = bold;
watermarks[index].color = color;
watermarks[index].horizontalAlignment = horizontalAlignment;
save();
}
function addWatermark(index: int, text: string, bold: bool, color: string, horizontalAlignment: int) {
var watermark = {
"text":text,
"bold":bold,
"color":color,
"horizontalAlignment":horizontalAlignment
};
watermarks.push(watermark);
repeater_watermarks.selected_delegate = watermarks.length - 1;
save();
}
function deleteWatermark(index: int) {
watermarks.splice(index, 1);
repeater_watermarks.selected_delegate--;
repeater_watermarks.selected_delegate--;
save();
}
function moveUp(index: int) {
if(index !== 0) {
var object = watermarks[index];
watermarks.splice(index, 1);
watermarks.splice(index-1, 0, object);
}
save();
}
function newWatermark() {
var component = Qt.createComponent("WatermarkConfigure.qml");
watermarkConfigure = component.createObject(root, { purpose: "new" });
watermarkConfigure.done.connect(watermarkManager.addWatermark);
watermarkConfigure.show();
}
function modify(index: int) {
var watermark = watermarkManager.watermarks[repeater_watermarks.selected_delegate];
var component = Qt.createComponent("WatermarkConfigure.qml");
watermarkConfigure = component.createObject(root, {
index: repeater_watermarks.selected_delegate,
purpose: "modify",
text: watermark.text,
bold: watermark.bold,
color: watermark.color,
horizontalAlignment: watermark.horizontalAlignment
});
watermarkConfigure.done.connect(watermarkManager.setWatermark);
watermarkConfigure.show();
}
function moveDown(index: int) {
if(index < count) {
var object = watermarks[index];
watermarks.splice(index, 1);
watermarks.splice(index+1, 0, object);
}
save();
}
function remove(index: int) {
watermarks.splice(index, 1);
repeater_watermarks.selected_delegate--;
save();
}
function clear() {
watermarks.splice(0, count);
save();
}
function save() {
repeater_watermarks.model = null;
root.cfg_watermarks = JSON.stringify(watermarks);
count = watermarks.length;
repeater_watermarks.model = count;
}
function loadPreset(preset: int) {
clear();
switch(preset) {
case 0: {
addWatermark(0, "Windows 10", false, "FFFFFF", 2);
addWatermark(0, "Build 22H2", false, "FFFFFF", 2);
break;
}
case 1: {
addWatermark(0, "Windows 8.1", false, "FFFFFF", 2);
addWatermark(0, "Build 9600", false, "FFFFFF", 2);
break;
}
case 2: {
addWatermark(0, "Windows 8", false, "FFFFFF", 2);
addWatermark(0, "Build 9200", false, "FFFFFF", 2);
break;
}
case 3: {
addWatermark(0, "Windows 7", false, "FFFFFF", 2);
addWatermark(0, "Build 7601", false, "FFFFFF", 2);
break;
}
case 4: {
addWatermark(0, "Windows Vista(TM)", false, "FFFFFF", 2);
addWatermark(0, "Build 6003", false, "FFFFFF", 2);
break;
}
case 5: {
addWatermark(0, "AeroThemePlasma", false, "FFFFFF", 2);
addWatermark(0, "Build 6.5.0", false, "FFFFFF", 2);
break;
}
}
}
Component.onCompleted: {
watermarks = JSON.parse(Plasmoid.configuration.watermarks);
count = watermarks.length;
}
}
ColumnLayout {
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: Kirigami.Units.gridUnit*4
anchors.rightMargin: Kirigami.Units.gridUnit*4
CheckBox {
id: watermarkVisible
text: i18n("Enabled")
}
CustomGroupBox {
Layout.fillWidth: true
title: i18n("Presets")
enabled: watermarkVisible.checked
RowLayout {
anchors.fill: parent
Button {
Layout.alignment: Qt.AlignTop
text: i18n("Load")
onClicked: {
watermarkManager.loadPreset(repeater_presets.selected_delegate)
repeater_presets.selected_delegate = -1
}
enabled: repeater_presets.selected_delegate !== -1 && watermarkVisible.checked
}
Item {
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
Layout.horizontalStretchFactor: 1
Layout.minimumHeight: 22
Layout.preferredHeight: list_presets.height
Rectangle {
anchors.fill: parent
anchors.margins: -1
border.width: 1
border.color: "lightgray"
}
ColumnLayout {
id: list_presets
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
spacing: 0
Repeater {
id: repeater_presets
property int selected_delegate: -1
model: presets
delegate: Item {
id: delegate
required property var model
required property int index
property bool selected: repeater_presets.selected_delegate == index
property bool hovered: ma.containsMouse
Layout.fillWidth: true
Layout.preferredHeight: 22
enabled: watermarkVisible.checked
opacity: enabled ? 1.0 : 0.5
Rectangle {
anchors.fill: parent
color: "#3399FF"
visible: (delegate.hovered || delegate.selected) && delegate.enabled
opacity: delegate.selected ? 1.0 : 0.5
}
Text {
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
text: model.text
leftPadding: 3
rightPadding: 3
}
MouseArea {
id: ma
anchors.fill: parent
hoverEnabled: true
enabled: delegate.enabled
onPressed: repeater_presets.selected_delegate = delegate.index;
onDoubleClicked: {
watermarkManager.loadPreset(model.index);
repeater_presets.selected_delegate = -1;
}
}
}
}
}
}
}
}
CustomGroupBox {
Layout.fillWidth: true
title: i18n("Watermarks")
enabled: watermarkVisible.checked
RowLayout {
anchors.fill: parent
ColumnLayout {
id: control_column
Layout.alignment: Qt.AlignTop
uniformCellSizes: true
spacing: 4
Button {
Layout.fillWidth: true
text: i18n("New")
onClicked: watermarkManager.newWatermark();
enabled: watermarkVisible.checked
}
Button {
Layout.fillWidth: true
text: i18n("Clear")
onClicked: watermarkManager.clear();
enabled: watermarkVisible.checked
}
Item { }
Button {
Layout.fillWidth: true
text: i18n("Remove")
onClicked: watermarkManager.remove(repeater_watermarks.selected_delegate)
enabled: repeater_watermarks.selected_delegate !== -1 && watermarkVisible.checked
}
Button {
Layout.fillWidth: true
text: i18n("Modify")
onClicked: watermarkManager.modify(repeater_watermarks.selected_delegate)
enabled: repeater_watermarks.selected_delegate !== -1 && watermarkVisible.checked
}
Button {
Layout.fillWidth: true
text: i18n("Up")
onClicked: {
watermarkManager.moveUp(repeater_watermarks.selected_delegate);
repeater_watermarks.selected_delegate--;
}
enabled: repeater_watermarks.selected_delegate !== -1 && watermarkVisible.checked
}
Button {
Layout.fillWidth: true
text: i18n("Down")
onClicked: {
watermarkManager.moveDown(repeater_watermarks.selected_delegate);
repeater_watermarks.selected_delegate++;
}
enabled: repeater_watermarks.selected_delegate !== -1 && watermarkVisible.checked
}
}
Item {
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
Layout.horizontalStretchFactor: 1
Layout.preferredHeight: control_column.height
Rectangle {
anchors.fill: parent
anchors.margins: -1
border.width: 1
border.color: "lightgray"
}
ScrollView {
anchors.fill: parent
ColumnLayout {
id: list_watermarks
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
spacing: 0
Repeater {
id: repeater_watermarks
property int selected_delegate: -1
model: watermarkManager.count
delegate: Item {
id: delegate
required property int index
property bool selected: repeater_watermarks.selected_delegate == index
property bool hovered: ma.containsMouse
Layout.fillWidth: true
Layout.preferredHeight: 22
enabled: watermarkVisible.checked
opacity: enabled ? 1.0 : 0.5
Rectangle {
anchors.fill: parent
color: "#3399FF"
visible: delegate.hovered || delegate.selected
opacity: delegate.selected ? 1.0 : 0.5
}
RowLayout {
id: row
anchors.fill: parent
anchors.leftMargin: 3
anchors.rightMargin: 3
Rectangle {
Layout.alignment: Qt.AlignVCenter
Layout.preferredWidth: 16
Layout.preferredHeight: 16
color: "#" + watermarkManager.watermarks[delegate.index].color
border.width: 1
border.color: "gray"
}
Text {
Layout.alignment: Qt.AlignVCenter
Layout.fillWidth: true
Layout.fillHeight: true
elide: Text.ElideRight
verticalAlignment: Text.AlignVCenter
text: watermarkManager.watermarks[delegate.index].text
font.bold: watermarkManager.watermarks[delegate.index].bold
horizontalAlignment: {
switch(watermarkManager.watermarks[delegate.index].horizontalAlignment) {
case 0:
return Text.AlignLeft;
case 1:
return Text.AlignHCenter;
case 2:
return Text.AlignRight;
}
}
}
}
MouseArea {
id: ma
anchors.fill: parent
hoverEnabled: true
enabled: delegate.enabled
onPressed: repeater_watermarks.selected_delegate = delegate.index;
onDoubleClicked: {
repeater_watermarks.selected_delegate = delegate.index;
watermarkManager.modify(repeater_watermarks.selected_delegate);
}
}
}
}
}
}
}
}
}
}
}

View file

@ -205,17 +205,7 @@ Item {
active: impl.iconAndLabelsShouldlookSelected || model.selected active: impl.iconAndLabelsShouldlookSelected || model.selected
asynchronous: true asynchronous: true
width: { width: parent.width
if (root.useListViewMode) {
if (main.GridView.view.overflowing) {
return parent.width// - Kirigami.Units.smallSpacing;
} else {
return parent.width;
}
}
return parent.width// - (Kirigami.Units.smallSpacing * 2);
}
height: root.useListViewMode height: root.useListViewMode
? parent.height ? parent.height
@ -322,7 +312,19 @@ Item {
renderType: Text.NativeRendering renderType: Text.NativeRendering
font.hintingPreference: Font.PreferFullHinting font.hintingPreference: Font.PreferFullHinting
z: 2 // So it's always above the highlight effect z: 2 // So it's always above the highlight effect
font.kerning: Screen.devicePixelRatio == 1.0
Timer {
id: hidpi_hack
interval: 50
onTriggered: {
front.anchors.rightMargin += 1;
front.anchors.rightMargin -= 1;
behind.anchors.rightMargin += 1;
behind.anchors.rightMargin -= 1;
}
}
// Hacks to improve font rendering to increase contrast and text brightness // Hacks to improve font rendering to increase contrast and text brightness
// This is done to get darker subpixel rendering, closer to ClearType // This is done to get darker subpixel rendering, closer to ClearType
PlasmaComponents.Label { PlasmaComponents.Label {
@ -334,29 +336,14 @@ Item {
color: model.selected && Plasmoid.configuration.selectionStyle ? "black" : "#F9000000" color: model.selected && Plasmoid.configuration.selectionStyle ? "black" : "#F9000000"
renderType: Text.NativeRendering renderType: Text.NativeRendering
font.hintingPreference: Font.PreferFullHinting font.hintingPreference: Font.PreferFullHinting
font.kerning: Screen.devicePixelRatio == 1.0
text: parent.text text: parent.text
elide: Text.ElideRight elide: Text.ElideRight
maximumLineCount: parent.maximumLineCount maximumLineCount: parent.maximumLineCount
wrapMode: (maximumLineCount === 1) ? Text.NoWrap : Text.Wrap wrapMode: (maximumLineCount === 1) ? Text.NoWrap : Text.Wrap
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
visible: Plasmoid.configuration.textShadows visible: Plasmoid.configuration.textShadows
} }
/*PlasmaComponents.Label { // One is enough
id: behind_right
z: -1
anchors.fill: parent
anchors.rightMargin: -1
anchors.leftMargin: 1
color: "#d9000000"
renderType: Text.NativeRendering
font.hintingPreference: Font.PreferFullHinting
text: parent.text
elide: Text.ElideRight
maximumLineCount: parent.maximumLineCount
wrapMode: (maximumLineCount === 1) ? Text.NoWrap : Text.Wrap
horizontalAlignment: Text.AlignHCenter
}*/
PlasmaComponents.Label { PlasmaComponents.Label {
id: front id: front
z: -2 z: -2
@ -365,6 +352,7 @@ Item {
color: model.selected && Plasmoid.configuration.selectionStyle ? "black" : "#ffffffff" color: model.selected && Plasmoid.configuration.selectionStyle ? "black" : "#ffffffff"
renderType: Text.NativeRendering renderType: Text.NativeRendering
font.hintingPreference: Font.PreferFullHinting font.hintingPreference: Font.PreferFullHinting
font.kerning: Screen.devicePixelRatio == 1.0
text: parent.text text: parent.text
elide: Text.ElideRight elide: Text.ElideRight
maximumLineCount: parent.maximumLineCount maximumLineCount: parent.maximumLineCount
@ -377,17 +365,42 @@ Item {
State { // icon view State { // icon view
when: !root.useListViewMode when: !root.useListViewMode
PropertyChanges {
target: label
anchors.topMargin: Kirigami.Units.smallSpacing
// Ffs
width: Math.floor((parent.width - Kirigami.Units.smallSpacing + (Screen.devicePixelRatio != 1.0) * 2 * Screen.devicePixelRatio) * Screen.devicePixelRatio) / Screen.devicePixelRatio
maximumLineCount: Plasmoid.configuration.textLines
horizontalAlignment: Text.AlignHCenter
}
AnchorChanges { AnchorChanges {
target: label target: label
anchors.top: icon.bottom anchors.top: icon.bottom
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
} }
AnchorChanges {
target: behind
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
}
AnchorChanges {
target: front
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
}
PropertyChanges { PropertyChanges {
target: label target: behind
anchors.topMargin: Kirigami.Units.smallSpacing anchors.rightMargin: 1
width: parent.width - Kirigami.Units.smallSpacing anchors.leftMargin: -1
maximumLineCount: Plasmoid.configuration.textLines }
horizontalAlignment: Text.AlignHCenter StateChangeScript {
script: {
hidpi_hack.start();
}
} }
}, },
State { // list view State { // list view
@ -576,7 +589,6 @@ Item {
toolTip.hideImmediately(); toolTip.hideImmediately();
} }
} }
} }
states: [ states: [

View file

@ -244,6 +244,20 @@ FocusScope {
id: eventGenerator id: eventGenerator
} }
Watermark {
id: watermark
anchors {
right: parent.right
bottom: parent.bottom
rightMargin: 5
bottomMargin: 5
}
width: Math.floor(parent.width/4)
}
MouseEventListener { MouseEventListener {
id: listener id: listener

View file

@ -0,0 +1,59 @@
import QtQuick
import QtQuick.Layouts
import org.kde.plasma.plasmoid
ColumnLayout {
spacing: 0
opacity: Plasmoid.configuration.watermarkVisible
z: -1
Item {
id: watermarkManager
property var watermarks
property int count: 0
function load() {
watermarks = JSON.parse(Plasmoid.configuration.watermarks);
count = watermarks.length;
}
Connections {
target: Plasmoid.configuration
function onWatermarksChanged() {
watermarkManager.load();
}
}
Component.onCompleted: load()
}
Repeater {
model: watermarkManager.count
delegate: Text {
id: delegate
required property int index
Layout.fillWidth: true
text: watermarkManager.watermarks[index].text
font.bold: watermarkManager.watermarks[index].bold
color: "#" + watermarkManager.watermarks[index].color
wrapMode: Text.WordWrap
horizontalAlignment: {
switch(watermarkManager.watermarks[index].horizontalAlignment) {
case 0:
return Text.AlignLeft;
case 1:
return Text.AlignHCenter;
case 2:
return Text.AlignRight;
}
}
}
}
}

View file

@ -0,0 +1,163 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as QQC2
import org.kde.kirigami as Kirigami
Window {
id: root
property string purpose
property int index
property string text: "New watermark"
property bool bold: false
property string color: "FFFFFF"
property int horizontalAlignment: 2
signal done(int index, string text, bool bold, string color, int horizontalAlignment)
onDone: destroy();
minimumWidth: width
minimumHeight: height
width: 418
height: column.height < 1 ? 1 : column.height
maximumWidth: width
maximumHeight: height
title: i18n("Desktop")
FontMetrics { id: systemFont; font: color.font }
ColumnLayout {
id: column
anchors.left: parent.left
anchors.right: parent.right
spacing: 0
Rectangle {
id: topContents
Layout.preferredWidth: parent.width
Layout.preferredHeight: row.implicitHeight + 24
color: "white"
RowLayout {
id: row
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.margins: 12
spacing: 8
Kirigami.Icon {
Layout.alignment: Qt.AlignTop
implicitWidth: 32
implicitHeight: 32
source: "plasma"
}
ColumnLayout {
Text {
Layout.fillWidth: true
text: root.purpose == "new" ? i18n("Create a new watermark") : i18n("Modify an existing watermark")
color: "#003399"
font.pointSize: 11
}
RowLayout {
Layout.fillWidth: true
Text { Layout.fillWidth: true; text: i18n("Text:") }
QQC2.TextField { id: text; Layout.fillWidth: true; text: root.text }
}
QQC2.CheckBox {
id: bold
text: i18n("Use bold text")
checked: root.bold
}
RowLayout {
Text {
Layout.fillWidth: true
text: i18n("Color (HEX):")
}
Text {
text: "#"
}
QQC2.TextField {
id: color
Layout.minimumWidth: Math.round(systemFont.maximumCharacterWidth)*6
Layout.maximumWidth: Math.round(systemFont.maximumCharacterWidth)*6
validator: RegularExpressionValidator { regularExpression: /[0-9A-Fa-f]+/ }
maximumLength: 6
text: root.color
color: "black"
}
}
RowLayout {
Text {
Layout.fillWidth: true
text: i18n("Horizontal alignment:")
}
QQC2.ComboBox {
id: horizontalAlignment
currentIndex: root.horizontalAlignment
model: [
"Left",
"Center",
"Right"
]
}
}
}
}
}
Rectangle { Layout.preferredWidth: parent.width; Layout.preferredHeight: 1; color: "#dfdfdf" }
Rectangle {
Layout.preferredWidth: parent.width
Layout.preferredHeight: 40
color: "#f0f0f0"
RowLayout {
anchors.fill: parent
anchors.rightMargin: 11
spacing: 8
Item { Layout.fillWidth: true }
QQC2.Button {
text: i18n("OK")
onClicked: root.done(root.index, text.text, bold.checked, color.text, horizontalAlignment.currentIndex);
}
QQC2.Button {
text: i18n("Cancel")
onClicked: root.destroy();
}
}
}
}
}

View file

@ -559,11 +559,15 @@ Item {
family: Plasmoid.configuration.fontFamily || Kirigami.Theme.defaultFont.family family: Plasmoid.configuration.fontFamily || Kirigami.Theme.defaultFont.family
weight: Plasmoid.configuration.boldText ? Font.Bold : Kirigami.Theme.defaultFont.weight weight: Plasmoid.configuration.boldText ? Font.Bold : Kirigami.Theme.defaultFont.weight
italic: Plasmoid.configuration.italicText italic: Plasmoid.configuration.italicText
pointSize: Plasmoid.configuration.fontSize || Kirigami.Theme.defaultFont.pointSize pointSize: (Plasmoid.configuration.fontSize || Kirigami.Theme.defaultFont.pointSize)
hintingPreference: Font.PreferFullHinting hintingPreference: Font.PreferFullHinting
} }
minimumPixelSize: 1 minimumPixelSize: 1
style: Screen.devicePixelRatio == 1.0 ? Text.Outline : Text.Raised style: {
if(Screen.devicePixelRatio == 1.0) return Text.Outline;
if(Screen.devicePixelRatio >= 2.0) return Text.Normal;
return Text.Raised;
}
styleColor: "transparent" styleColor: "transparent"
text: { text: {
// get the time for the given timezone from the dataengine // get the time for the given timezone from the dataengine
@ -606,8 +610,12 @@ Item {
font.hintingPreference: Font.PreferFullHinting font.hintingPreference: Font.PreferFullHinting
minimumPixelSize: 1 minimumPixelSize: 1
style: Screen.devicePixelRatio == 1.0 ? Text.Outline : Text.Raised
styleColor: "transparent" styleColor: "transparent"
style: {
if(Screen.devicePixelRatio == 1.0) return Text.Outline;
if(Screen.devicePixelRatio >= 2.0) return Text.Normal;
return Text.Raised;
}
visible: false visible: false
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
@ -625,7 +633,11 @@ Item {
font.pixelSize: timeLabel.font.pixelSize font.pixelSize: timeLabel.font.pixelSize
font.hintingPreference: Font.PreferFullHinting font.hintingPreference: Font.PreferFullHinting
minimumPixelSize: 1 minimumPixelSize: 1
style: Screen.devicePixelRatio == 1.0 ? Text.Outline : Text.Raised style: {
if(Screen.devicePixelRatio == 1.0) return Text.Outline;
if(Screen.devicePixelRatio >= 2.0) return Text.Normal;
return Text.Raised;
}
styleColor: "transparent" styleColor: "transparent"
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter

View file

@ -0,0 +1,72 @@
/*
SPDX-FileCopyrightText: 2018 Kai Uwe Broulik <kde@privat.broulik.de>
SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.components as PlasmaComponents3
import org.kde.ksvg as KSvg
import org.kde.kirigami as Kirigami
import QtQuick.Effects
// This top-level item is an opaque background that goes behind the colored
// background, for contrast. It's not an Item since that it would be square,
// and not round, as required here
KSvg.SvgItem {
id: badgeRect
property int number: 0
property color badgeColor: "black"
implicitWidth: Kirigami.Units.iconSizes.small//Math.max(height, Math.round(label.contentWidth)) // Add some padding around.
implicitHeight: Kirigami.Units.iconSizes.small//implicitWidth
svg: badgeRing
elementId: "ring"
KSvg.SvgItem {
id: badgeGradient
svg: badgeRing
elementId: "gradient"
z: -1
anchors.fill: parent
layer.enabled: true
layer.effect: MultiEffect {
colorization: 1.0
colorizationColor: badgeRect.badgeColor
brightness: {
if(badgeRect.badgeColor.hslLightness < 0.5) return 0.75;
if(badgeRect.badgeColor.hslLightness > 0.7) { return 0.15; }
return 0.25
}
}
}
// Number
PlasmaComponents3.Label {
id: label
anchors.centerIn: parent
anchors.alignWhenCentered: false
width: height
height: Math.min(Kirigami.Units.gridUnit * 2, Math.round(parent.height)-2)
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
fontSizeMode: Text.VerticalFit
font.pointSize: 1024
font.letterSpacing: -1
minimumPointSize: 5
text: {
if (badgeRect.number < 0) {
return i18nc("Invalid number of new messages, overlay, keep short", "—");
} else if (badgeRect.number > 9) {
return i18nc("Over 9 new messages, overlay, keep short", "9+");
} else {
return badgeRect.number.toLocaleString(Qt.locale(), 'f', 0);
}
}
textFormat: Text.PlainText
}
}

View file

@ -605,6 +605,7 @@ TaskManagerApplet.SmartLauncherItem { }
onTapped: leftClick() onTapped: leftClick()
function leftClick() { function leftClick() {
if(tasksRoot.pinnedToolTipOpen) { if(tasksRoot.pinnedToolTipOpen) {
task.hideImmediately(); task.hideImmediately();
tasksRoot.pinnedToolTipOpen = false; tasksRoot.pinnedToolTipOpen = false;
@ -1367,6 +1368,20 @@ TaskManagerApplet.SmartLauncherItem { }
onSourceChanged: { onSourceChanged: {
containerRect.glowColor = Plasmoid.getDominantColor(iconBox.source); containerRect.glowColor = Plasmoid.getDominantColor(iconBox.source);
badge.badgeColor = containerRect.glowColor
}
Badge {
id: badge
visible: task.smartLauncherItem && task.smartLauncherItem.countVisible
number: task.smartLauncherItem.count
anchors.top: parent.top
anchors.right: parent.right
anchors.rightMargin: (tasksRoot.height <= 30) ? -Kirigami.Units.largeSpacing : -Kirigami.Units.smallSpacing
anchors.topMargin: (tasksRoot.height <= 30) ? -Kirigami.Units.smallSpacing : 0
Component.onCompleted: {
badgeColor = containerRect.glowColor
}
} }
} }

View file

@ -23,6 +23,7 @@ import org.kde.plasma.plasma5support as Plasma5Support
import org.kde.kquickcontrolsaddons import org.kde.kquickcontrolsaddons
import org.kde.kwindowsystem import org.kde.kwindowsystem
import org.kde.notificationmanager as NotificationManager
import "code/layoutmetrics.js" as LayoutMetrics import "code/layoutmetrics.js" as LayoutMetrics
import "code/tools.js" as TaskTools import "code/tools.js" as TaskTools
@ -71,6 +72,14 @@ PlasmoidItem {
} }
] ]
NotificationManager.Notifications {
id: historyModel
showExpired: true
showDismissed: true
showJobs: true
groupLimit: 2
expandUnread: true
}
onIconsOnlyChanged: { onIconsOnlyChanged: {
iconGeometryTimer.start(); iconGeometryTimer.start();
@ -448,6 +457,10 @@ PlasmoidItem {
Drag.onDragFinished: tasks.dragSource = null; Drag.onDragFinished: tasks.dragSource = null;
} }
KSvg.Svg {
id: badgeRing
imagePath: Qt.resolvedUrl("svgs/badge.svgz")
}
KSvg.FrameSvgItem { KSvg.FrameSvgItem {
id: taskFrame id: taskFrame

View file

@ -28,6 +28,12 @@ import "components" as Components
PlasmaExtras.Representation { PlasmaExtras.Representation {
id: fullRepresentationRoot id: fullRepresentationRoot
function fixDpi(val) {
if(Screen.devicePixelRatio !== 1.0) {
return Math.floor(val*Screen.devicePixelRatio) / Screen.devicePixelRatio;
}
return val;
}
// TODO these should be configurable in the future // TODO these should be configurable in the future
readonly property int dndMorningHour: 6 readonly property int dndMorningHour: 6
readonly property int dndEveningHour: 20 readonly property int dndEveningHour: 20
@ -263,6 +269,7 @@ PlasmaExtras.Representation {
anchors.fill: parent anchors.fill: parent
anchors.bottomMargin: 2 anchors.bottomMargin: 2
anchors.rightMargin: -2 anchors.rightMargin: -2
anchors.leftMargin: -2
background: null background: null
focus: true focus: true
clip: true clip: true
@ -370,7 +377,7 @@ PlasmaExtras.Representation {
delegate: DraggableDelegate { delegate: DraggableDelegate {
id: delegate id: delegate
width: ListView.view.width width: fixDpi(ListView.view.width)
opacity: 0 opacity: 0
required property int index required property int index
@ -643,8 +650,7 @@ PlasmaExtras.Representation {
Loader { Loader {
anchors.centerIn: parent anchors.centerIn: parent
width: parent.width - (Kirigami.Units.gridUnit * 4) width: fixDpi(parent.width - Kirigami.Units.gridUnit * 4);
active: list.count === 0 active: list.count === 0
visible: active visible: active
asynchronous: true asynchronous: true
@ -657,6 +663,7 @@ PlasmaExtras.Representation {
PlasmaExtras.PlaceholderMessage { PlasmaExtras.PlaceholderMessage {
anchors.centerIn: parent anchors.centerIn: parent
anchors.alignWhenCentered: Screen.devicePixelRatio == 1.0
width: parent.width width: parent.width
iconName: "checkmark" iconName: "checkmark"
@ -672,6 +679,7 @@ PlasmaExtras.Representation {
readonly property NotificationManager.ServerInfo currentOwner: NotificationManager.Server.currentOwner readonly property NotificationManager.ServerInfo currentOwner: NotificationManager.Server.currentOwner
anchors.centerIn: parent anchors.centerIn: parent
anchors.alignWhenCentered: Screen.devicePixelRatio == 1.0
width: parent.width width: parent.width
iconName: "notifications-disabled" iconName: "notifications-disabled"

263
uninstall.sh Normal file
View file

@ -0,0 +1,263 @@
#!/bin/bash
CUR_DIR=$(pwd)
QDBUS_BIN="qdbus6"
# Sanity check to see if the proper tools are installed.
if [[ -z "$(command -v kpackagetool6)" ]]; then
echo "kpackagetool6 not found. Stopping."
exit
fi
if [[ -n "$(command -v qdbus6)" ]]; then # Arch
QDBUS_BIN=$(command -v qdbus6)
elif [[ -n "$(command -v qdbus-qt6)" ]]; then # Fedora
QDBUS_BIN=$(command -v qdbus-qt6)
else
echo "qdbus6 not found."
echo "qdbus-qt6 not found."
echo "Stopping."
exit
fi
PLASMASHELL=$($QDBUS_BIN org.kde.plasmashell /PlasmaShell shell)
if [ $PLASMASHELL == "io.gitgud.wackyideas.desktop" ]; then
echo -e "You shouldn't run the uninstall script from AeroThemePlasma itself."
echo -e "Please run the uninstall script from the Plasma session or another session."
exit
fi
BUILD_FILES=("kwin/decoration/build"
"plasma/sddm/login-sessions/build"
"plasma/aerothemeplasma-kcmloader/build"
"plasma/plasmoids/src/systemtray_src/build"
"plasma/plasmoids/src/notifications_src/build"
"plasma/plasmoids/src/volume_src/build"
"plasma/plasmoids/src/sevenstart_src/build"
"plasma/plasmoids/src/seventasks_src/build"
"plasma/plasmoids/src/desktopcontainment/build"
"kwin/effects_cpp/kde-effects-aeroglassblur/build"
"kwin/effects_cpp/kwin-effect-smodsnap-v2/build"
"kwin/effects_cpp/smodglow/build"
"kwin/effects_cpp/aeroglide/build"
"kwin/effects_cpp/startupfeedback/build"
"kwin/effects_cpp/kde-effects-aeroglassblur/build-wl"
"kwin/effects_cpp/kwin-effect-smodsnap-v2/build-wl"
"kwin/effects_cpp/smodglow/build-wl"
"kwin/effects_cpp/aeroglide/build-wl"
"kwin/effects_cpp/startupfeedback/build-wl"
)
function uninstall_cmake_component {
if [ ! -f "$CUR_DIR/$1/install_manifest.txt" ]; then
echo -e "File install_manifest.txt in $CUR_DIR/$1 was not found."
echo -e "If this component was already removed from the system, you can ignore this message.\n"
echo -e "Otherwise, to generate this file, run the compile.sh and install_plasmoids.sh scripts again like this:"
echo -e "$ bash compile.sh --skip-libplasma [--ninja]"
echo -e "$ bash install_plasmoids.sh --skip-kpackages [--ninja]"
echo -e "Afterwards, re-run this script."
else
cd "$CUR_DIR/$1"
BUILD_TOOL=make
if [ -f "build.ninja" ]; then
BUILD_TOOL=ninja
fi
sudo $BUILD_TOOL uninstall
echo -e "Done."
cd "$CUR_DIR"
fi
}
for path in ${BUILD_FILES[@]}; do
uninstall_cmake_component "$path"
done
function uninstall_prompt {
echo -e "Do you want to uninstall: $1? (y/N)"
if [ ! -z "$2" ]; then
echo -e "The following will be removed: $2"
fi
read answer
if [ "$answer" != "${answer#[Yy]}" ]; then
return 1
else
return 0
fi
}
function uninstall_plasmoid {
PLASMOID=$(basename "$1")
if [[ $PLASMOID == 'src' ]]; then
echo "Skipping $PLASMOID"
return
fi
if [[ $PLASMOID == 'io.gitgud.wackyideas.systemtray' ]]; then
pkexec kpackagetool6 -t "Plasma/Applet" -g -r "$1"
else
kpackagetool6 -t "Plasma/Applet" -r "$1"
fi
echo -e "Uninstalled $1.\n"
cd "$CUR_DIR"
}
function uninstall_component {
COMPONENT=$(basename "$1")
kpackagetool6 -t "$2" -r "$1"
echo -e "Uninstalled $1.\n"
cd "$CUR_DIR"
}
uninstall_prompt "Plasmoids"
if [ "$?" == 1 ]; then
echo "Uninstalling plasmoids..."
for filename in "$PWD/plasma/plasmoids/"*; do
uninstall_plasmoid "$filename"
done
fi
uninstall_prompt "Plasma components"
if [ "$?" == 1 ]; then
echo "Uninstalling Plasma components..."
uninstall_component "authui7" "Plasma/LookAndFeel"
uninstall_component "io.gitgud.wackyideas.taskbar" "Plasma/LayoutTemplate"
uninstall_component "Seven-Black" "Plasma/Theme"
uninstall_component "io.gitgud.wackyideas.desktop" "Plasma/Shell"
fi
COLOR_DIR="$HOME/.local/share/color-schemes"
uninstall_prompt "Color scheme" "$COLOR_DIR/Aero.colors"
if [ "$?" == 1 ]; then
echo "Uninstalling color scheme..."
rm "$COLOR_DIR/Aero.colors"
echo "Done."
fi
KV_DIR="$HOME/.config/Kvantum"
uninstall_prompt "Kvantum theme" "$KV_DIR/Windows7Aero"
if [ "$?" == 1 ]; then
echo "Uninstalling Kvantum theme..."
kvantummanager --set KvAdapta
rm -r "$KV_DIR/Windows7Aero"
echo "Done."
fi
uninstall_prompt "Sound themes" "$(echo "$HOME/.local/share/sounds/Windows 7"*)"
if [ "$?" == 1 ]; then
echo "Uninstalling sound themes..."
for filename in "$HOME/.local/share/sounds/Windows 7"*; do
rm -r "$filename"
done
echo "Done."
fi
ICONS_DIR="$HOME/.local/share/icons"
uninstall_prompt "Icon theme" "$ICONS_DIR/Windows 7 Aero"
if [ "$?" == 1 ]; then
echo "Uninstalling icon theme..."
rm -r "$ICONS_DIR/Windows 7 Aero"
echo "Done."
fi
MIMETYPE_DIR="$HOME/.local/share/mime/packages"
uninstall_prompt "Mimetypes" "$MIMETYPE_DIR/application-vnd.microsoft.portable-executable.xml application-x-ms-dll.xml application-x-msdownload.xml application-x-ms-ne-executable.xml"
if [ "$?" == 1 ]; then
echo "Uninstalling mimetypes..."
for filename in "$PWD/misc/mimetype/"*; do
MIME=$(basename $filename)
rm "$MIMETYPE_DIR/$MIME"
done
update-mime-database "$HOME/.local/share/mime"
echo "Done."
fi
uninstall_prompt "KWin JS effects"
if [ "$?" == 1 ]; then
echo "Uninstalling KWin effects (JS)..."
for filename in "$PWD/kwin/effects/"*; do
uninstall_component "$filename" "KWin/Effect"
done
echo "Done."
fi
uninstall_prompt "KWin scripts"
if [ "$?" == 1 ]; then
echo "Uninstalling KWin scripts..."
for filename in "$PWD/kwin/scripts/"*; do
uninstall_component "$filename" "KWin/Script"
done
echo "Done."
fi
uninstall_prompt "KWin task switchers"
if [ "$?" == 1 ]; then
echo "Uninstalling KWin task switchers..."
for filename in "$PWD/kwin/tabbox/"*; do
uninstall_component "$filename" "KWin/WindowSwitcher"
done
echo "Done."
fi
KWIN_DIR="$HOME/.local/share/kwin"
echo "Uninstalling KWin outline"
rm -r "$KWIN_DIR/outline"
if [[ -L "$KWIN_DIR-x11" && -d "$KWIN_DIR-x11" ]]; then
echo "kwin-x11 folder is a symlink, remove it."
rm "$KWIN_DIR-x11"
fi
if [[ -L "$KWIN_DIR-wayland" && -d "$KWIN_DIR-wayland" ]]; then
echo "kwin-wayland folder is a symlink, remove it."
rm "$KWIN_DIR-wayland"
fi
BRANDING_DIR="$HOME/.config/kdedefaults"
if [ ! -z "$(grep -rni "aerothemeplasma" "$BRANDING_DIR/kcm-about-distrorc")" ]; then
echo "Uninstalling branding..."
rm "$BRANDING_DIR/kcm-about-distrorc"
rm "$BRANDING_DIR/kcminfo.png"
fi
CURSOR_DIR="/usr/share/icons/aero-drop"
uninstall_prompt "Cursor theme (requires sudo privileges)" "$CURSOR_DIR"
if [ "$?" == 1 ]; then
echo "Uninstalling cursor theme..."
pkexec rm -r "$CURSOR_DIR"
echo "Done."
fi
SDDM_DIR="/usr/share/sddm/themes/sddm-theme-mod"
uninstall_prompt "SDDM theme (requires sudo privileges)" "$SDDM_DIR"
if [ "$?" == 1 ]; then
echo "Uninstalling SDDM theme..."
pkexec rm -r "$SDDM_DIR"
echo "Done."
fi
SMOD_DIR="/usr/share/smod"
uninstall_prompt "SMOD files (requires sudo privileges)" "$SMOD_DIR"
if [ "$?" == 1 ]; then
echo "Uninstalling SMOD files..."
pkexec rm -r "$SMOD_DIR"
echo "Done."
fi
LIBDIR="/usr/lib/x86_64-linux-gnu/"
if [ ! -d ${LIBDIR} ]; then
LIBDIR="/usr/lib64/"
fi
APPLET_DIR="${LIBDIR}qt6/plugins/plasma/applets/"
uninstall_prompt "Plasma applets (requires sudo privileges)" "${APPLET_DIR}/io.gitgud.wackyideas."*
if [ "$?" == 1 ]; then
echo "Uninstalling Plasma applet plugins..."
pkexec rm -r "${APPLET_DIR}/io.gitgud.wackyideas."*
echo "Done."
fi
echo "Uninstalling /opt/aerothemeplasma..."
pkexec rm -r "/opt/aerothemeplasma"
echo "Done."
echo -e "Uninstallation complete."
echo -e "In order to uninstall the libplasma and polkit agent modifications, simply reinstall those packages using your distro's package manager."