From 07340d7d052745a257bd84f0afdd29bacd889018 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 18 Jun 2025 22:28:08 +0200 Subject: [PATCH 001/222] Clean up Seven-Black Plasma Style --- .../Seven-Black/backup/background.svg | 1330 - .../Seven-Black/backup/panel-background.svg | 1800 - .../Seven-Black/backup/tooltip.svg | 4883 --- .../Seven-Black/bicons/.directory | 4 - .../Seven-Black/bicons/akonadi.svg | 122 - .../Seven-Black/bicons/akregator.svg | 82 - .../Seven-Black/bicons/amarok.svg | 160 - .../Seven-Black/bicons/applications.svg | 98 - .../Seven-Black/bicons/apport.svg | 107 - .../desktoptheme/Seven-Black/bicons/audio.svg | 254 - .../desktoptheme/Seven-Black/bicons/baloo.svg | 175 - .../Seven-Black/bicons/bangarang.svg | 247 - .../Seven-Black/bicons/basket.svg | 823 - .../Seven-Black/bicons/battery.svg | 1110 - .../Seven-Black/bicons/bookmarks.svg | 86 - .../Seven-Black/bicons/cantata.svg | 94 - .../Seven-Black/bicons/choqok.svg | 80 - .../Seven-Black/bicons/choqok_offline.svg | 80 - .../Seven-Black/bicons/clementine.svg | 47 - .../Seven-Black/bicons/computer.svg | 217 - .../Seven-Black/bicons/configure.svg | 279 - .../Seven-Black/bicons/device.svg | 127 - .../Seven-Black/bicons/dialog.svg | 116 - .../Seven-Black/bicons/distribute.svg | 128 - .../Seven-Black/bicons/document.svg | 146 - .../desktoptheme/Seven-Black/bicons/drive.svg | 96 - .../Seven-Black/bicons/dropbox.svg | 82 - .../desktoptheme/Seven-Black/bicons/edit.svg | 116 - .../desktoptheme/Seven-Black/bicons/fcitx.svg | 95 - plasma/desktoptheme/Seven-Black/bicons/go.svg | 1624 - .../desktoptheme/Seven-Black/bicons/ibus.svg | 255 - .../desktoptheme/Seven-Black/bicons/input.svg | 193 - .../desktoptheme/Seven-Black/bicons/juk.svg | 85 - .../Seven-Black/bicons/kaffeine.svg | 145 - .../Seven-Black/bicons/kalarm.svg | 607 - .../Seven-Black/bicons/kdeconnect.svg | 120 - .../Seven-Black/bicons/keyboard.svg | 96 - .../desktoptheme/Seven-Black/bicons/kget.svg | 159 - .../desktoptheme/Seven-Black/bicons/kgpg.svg | 74 - .../Seven-Black/bicons/klipper.svg | 110 - .../desktoptheme/Seven-Black/bicons/kmail.svg | 100 - .../desktoptheme/Seven-Black/bicons/kmess.svg | 131 - .../Seven-Black/bicons/knotes.svg | 74 - .../Seven-Black/bicons/konqueror.svg | 104 - .../Seven-Black/bicons/konv_message.svg | 128 - .../Seven-Black/bicons/konversation.svg | 128 - .../Seven-Black/bicons/kopete.svg | 104 - .../Seven-Black/bicons/korgac.svg | 225 - .../Seven-Black/bicons/kpackagekit.svg | 153 - .../Seven-Black/bicons/kruler.svg | 85 - .../Seven-Black/bicons/kteatime.svg | 119 - .../Seven-Black/bicons/ktimer.svg | 222 - .../Seven-Black/bicons/ktorrent.svg | 90 - .../desktoptheme/Seven-Black/bicons/list.svg | 247 - .../Seven-Black/bicons/location.svg | 180 - .../Seven-Black/bicons/mail-unread-new.svg | 138 - .../desktoptheme/Seven-Black/bicons/mail.svg | 100 - .../desktoptheme/Seven-Black/bicons/media.svg | 1018 - .../Seven-Black/bicons/message-indicator.svg | 102 - .../Seven-Black/bicons/nepomuk.svg | 175 - .../Seven-Black/bicons/network.svg | 14606 -------- .../Seven-Black/bicons/notification.svg | 252 - .../desktoptheme/Seven-Black/bicons/phone.svg | 120 - .../bicons/plasma-networkmanagement.svg | 8507 ----- .../Seven-Black/bicons/preferences.svg | 379 - .../Seven-Black/bicons/presence-applet.svg | 225 - .../Seven-Black/bicons/printer.svg | 88 - .../Seven-Black/bicons/quassel.svg | 163 - .../desktoptheme/Seven-Black/bicons/quota.svg | 264 - .../Seven-Black/bicons/recorditnow.svg | 134 - .../Seven-Black/bicons/simpleaudioplayer.svg | 118 - .../desktoptheme/Seven-Black/bicons/skype.svg | 414 - .../desktoptheme/Seven-Black/bicons/slc.svg | 166 - .../Seven-Black/bicons/smartphone.svg | 111 - .../desktoptheme/Seven-Black/bicons/smb4k.svg | 73 - .../Seven-Black/bicons/software-updates.svg | 384 - .../Seven-Black/bicons/software.svg | 384 - .../desktoptheme/Seven-Black/bicons/start.svg | 2393 -- .../desktoptheme/Seven-Black/bicons/steam.svg | 88 - .../Seven-Black/bicons/synaptiks.svg | 93 - .../Seven-Black/bicons/system.svg | 367 - .../Seven-Black/bicons/tomahawk.svg | 118 - .../Seven-Black/bicons/touchpad.svg | 124 - .../Seven-Black/bicons/transmission-qt.svg | 75 - .../Seven-Black/bicons/transmission.svg | 112 - .../desktoptheme/Seven-Black/bicons/user.svg | 291 - .../Seven-Black/bicons/video-display.svg | 129 - .../desktoptheme/Seven-Black/bicons/video.svg | 196 - .../desktoptheme/Seven-Black/bicons/view.svg | 217 - .../desktoptheme/Seven-Black/bicons/vlc.svg | 133 - .../Seven-Black/bicons/wallet.svg | 158 - .../Seven-Black/bicons/weather.svg | 1757 - .../Seven-Black/bicons/window.svg | 234 - .../Seven-Black/bicons/yarock.svg | 118 - .../desktoptheme/Seven-Black/bicons/zoom.svg | 160 - .../Seven-Black/bubblemon/bubble.svg | 145 - .../Seven-Black/calendar/mini-calendar.svg | 1167 - plasma/desktoptheme/Seven-Black/colors | 2 +- .../Seven-Black/dialogs/.directory | 4 - .../Seven-Black/dialogs/background.svg.old | 3556 -- .../Seven-Black/dialogs/kickoff.svg | 328 - .../Seven-Black/dialogs/krunner.svg | 677 - .../Seven-Black/dialogs/shutdowndialog.svg | 1237 - .../Seven-Black/discburner/k3b.svg | 160 - .../discburner/media-optical-audio.svg | 86 - .../discburner/media-optical-blu-ray.svg | 86 - .../discburner/media-optical-dvd-video.svg | 86 - .../discburner/media-optical-dvd.svg | 86 - .../discburner/media-optical-recordable.svg | 160 - .../discburner/media-optical-video.svg | 86 - .../Seven-Black/discburner/media-optical.svg | 86 - .../Seven-Black/fifteenPuzzle/blanksquare.svg | 141 - .../Seven-Black/icontasks/badge.svg | 1727 - .../Seven-Black/icontasks/dropindicators.svg | 128 - .../Seven-Black/icontasks/indicators.svg | 1204 - .../icontasks/launcherseparator.svg | 558 - .../Seven-Black/icontasks/progress.svg | 767 - .../action-list-view-categories-applet.svg | 1089 - .../action-list-view-categories-extender.svg | 737 - .../lancelot/action-list-view-categories.svg | 1089 - ...action-list-view-headers-plasma-applet.svg | 736 - .../lancelot/action-list-view-headers.svg | 736 - .../action-list-view-items-extender.svg | 737 - .../lancelot/action-list-view-items.svg | 943 - .../lancelot/extender-button-icon.svg | 1108 - .../Seven-Black/lancelot/inner-background.svg | 336 - .../lancelot/inner-backgroundoud.svg | 330 - .../lancelot/lancelot-context-extender.svg | 1302 - .../Seven-Black/lancelot/lancelot-context.svg | 1302 - .../lancelot/oudeextender-button-icon.svg | 355 - .../passageway-view-buttons-extender.svg | 830 - .../lancelot/passageway-view-buttons.svg | 997 - .../passageway-view-inactivebuttons.svg | 725 - .../lancelot/passageway-view-spacer.svg | 662 - .../Seven-Black/lancelot/section-buttons.svg | 927 - .../lancelot/system-buttons-extender.svg | 1275 - .../Seven-Black/lancelot/system-buttons.svg | 1275 - .../Seven-Black/lancelot/theme.config | 188 - .../desktoptheme/Seven-Black/metadata.desktop | 22 - plasma/desktoptheme/Seven-Black/metadata.json | 4 + .../networkmanagement-wireless.svg | 157 - plasma/desktoptheme/Seven-Black/news/down.svg | 74 - plasma/desktoptheme/Seven-Black/news/up.svg | 74 - .../Seven-Black/nowplaying/nocover.svg | 3593 -- .../opaque/dialogs/background.svgz | Bin 0 -> 8354 bytes .../Seven-Black/rssnow/arrows.svg | 106 - .../Seven-Black/rssnow/background.svg | 72 - .../desktoptheme/Seven-Black/rssnow/left.svg | 88 - .../desktoptheme/Seven-Black/rssnow/right.svg | 66 - .../Seven-Black/rssnow/rssnow.svg | 169 - .../solid/dialogs/background_backup.svg | 2584 -- .../solid/dialogs/background_old.svg | 2279 -- .../Seven-Black/stylesheets/news.css | 13 - .../Seven-Black/system-monitor/hdd_panel.svg | 130 - .../Seven-Black/toolbar-icons/configure.svg | 158 - .../Seven-Black/toolbar-icons/edit.svg | 130 - .../Seven-Black/toolbar-icons/go.svg | 565 - .../Seven-Black/toolbar-icons/list.svg | 188 - .../Seven-Black/toolbar-icons/media.svg | 704 - .../Seven-Black/toolbar-icons/window.svg | 179 - .../translucent/dialogs/background.svg | 7747 ---- .../translucent/dialogs/background.svgz | Bin 0 -> 8354 bytes .../translucent/widgets/panel-background.svg | 696 +- .../translucent/widgets/tooltip.svg | 4753 +-- .../Seven-Black/widgets/.directory | 4 - .../Seven-Black/widgets/activities.svg | 15885 -------- .../Seven-Black/widgets/amarok-albums.svg | 252 - .../widgets/amarok-currenttrack.svg | 3184 -- .../widgets/amarok-info-applet.svg | 74 - .../Seven-Black/widgets/amarok-wikipedia.svg | 80 - .../widgets/amarok-wikipediaheader.svg | 2317 -- .../Seven-Black/widgets/atipslogo.svg | 452 - .../Seven-Black/widgets/atipsoffbtn.svg | 86 - .../Seven-Black/widgets/atipsonbtn.svg | 86 - .../Seven-Black/widgets/battery-oxygen.svg | 3650 -- .../Seven-Black/widgets/battery.svg | 682 - .../Seven-Black/widgets/button.svg | 5112 +-- .../widgets/connection-established.svg | 1717 - .../widgets/extender-background.svg | 1415 - .../Seven-Black/widgets/extender-dragger.svg | 283 - .../Seven-Black/widgets/identiconshapes.svg | 793 - .../Seven-Black/widgets/identicontheme.svg | 739 - .../Seven-Black/widgets/lineb.svg | 8580 ----- .../Seven-Black/widgets/lineedit.svgz.old | Bin 10998 -> 0 bytes .../Seven-Black/widgets/lineeditb.svg | 283 - .../Seven-Black/widgets/listitemb.svg | 862 - .../desktoptheme/Seven-Black/widgets/luna.svg | 1482 - .../Seven-Black/widgets/microblog.svg | 120 - .../widgets/mock przelacznik pulpitow.svg | 749 - .../Seven-Black/widgets/onoff_switch.svg | 708 - .../widgets/panel-background_original.svg | 1848 - .../widgets/panelspacer-separator.svg | 8983 ----- .../widgets/picture-frame-default.svg | 3946 -- .../Seven-Black/widgets/pownce.svg | 475 - .../Seven-Black/widgets/previewer-16.svg | 84 - .../Seven-Black/widgets/previewer-22.svg | 84 - .../Seven-Black/widgets/sliderb.svg | 1264 - .../widgets/system-lock-screen.svg | 54 - .../Seven-Black/widgets/systemtray.svg | 2354 -- .../Seven-Black/widgets/tasksb.svg | 30486 ---------------- .../Seven-Black/widgets/toolbox-button.svg | 832 - .../Seven-Black/widgets/toolbox.svg | 1285 - .../Seven-Black/widgets/twitter.svg | 474 - .../Seven-Black/widgets/viewitem.svg.bak | 2285 -- .../Seven-Black/widgets/viewitemb.svg | 1419 - 205 files changed, 4092 insertions(+), 209309 deletions(-) delete mode 100755 plasma/desktoptheme/Seven-Black/backup/background.svg delete mode 100755 plasma/desktoptheme/Seven-Black/backup/panel-background.svg delete mode 100755 plasma/desktoptheme/Seven-Black/backup/tooltip.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/.directory delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/akonadi.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/akregator.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/amarok.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/applications.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/apport.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/audio.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/baloo.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/bangarang.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/basket.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/battery.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/bookmarks.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/cantata.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/choqok.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/choqok_offline.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/clementine.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/computer.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/configure.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/device.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/dialog.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/distribute.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/document.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/drive.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/dropbox.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/edit.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/fcitx.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/go.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/ibus.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/input.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/juk.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kaffeine.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kalarm.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kdeconnect.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/keyboard.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kget.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kgpg.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/klipper.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kmail.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kmess.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/knotes.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/konqueror.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/konv_message.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/konversation.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kopete.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/korgac.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kpackagekit.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kruler.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/kteatime.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/ktimer.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/ktorrent.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/list.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/location.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/mail-unread-new.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/mail.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/media.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/message-indicator.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/nepomuk.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/network.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/notification.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/phone.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/plasma-networkmanagement.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/preferences.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/presence-applet.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/printer.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/quassel.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/quota.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/recorditnow.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/simpleaudioplayer.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/skype.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/slc.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/smartphone.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/smb4k.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/software-updates.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/software.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/start.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/steam.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/synaptiks.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/system.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/tomahawk.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/touchpad.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/transmission-qt.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/transmission.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/user.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/video-display.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/video.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/view.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/vlc.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/wallet.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/weather.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/window.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/yarock.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bicons/zoom.svg delete mode 100755 plasma/desktoptheme/Seven-Black/bubblemon/bubble.svg delete mode 100755 plasma/desktoptheme/Seven-Black/calendar/mini-calendar.svg delete mode 100755 plasma/desktoptheme/Seven-Black/dialogs/.directory delete mode 100755 plasma/desktoptheme/Seven-Black/dialogs/background.svg.old delete mode 100755 plasma/desktoptheme/Seven-Black/dialogs/kickoff.svg delete mode 100755 plasma/desktoptheme/Seven-Black/dialogs/krunner.svg delete mode 100755 plasma/desktoptheme/Seven-Black/dialogs/shutdowndialog.svg delete mode 100755 plasma/desktoptheme/Seven-Black/discburner/k3b.svg delete mode 100755 plasma/desktoptheme/Seven-Black/discburner/media-optical-audio.svg delete mode 100755 plasma/desktoptheme/Seven-Black/discburner/media-optical-blu-ray.svg delete mode 100755 plasma/desktoptheme/Seven-Black/discburner/media-optical-dvd-video.svg delete mode 100755 plasma/desktoptheme/Seven-Black/discburner/media-optical-dvd.svg delete mode 100755 plasma/desktoptheme/Seven-Black/discburner/media-optical-recordable.svg delete mode 100755 plasma/desktoptheme/Seven-Black/discburner/media-optical-video.svg delete mode 100755 plasma/desktoptheme/Seven-Black/discburner/media-optical.svg delete mode 100755 plasma/desktoptheme/Seven-Black/fifteenPuzzle/blanksquare.svg delete mode 100755 plasma/desktoptheme/Seven-Black/icontasks/badge.svg delete mode 100755 plasma/desktoptheme/Seven-Black/icontasks/dropindicators.svg delete mode 100755 plasma/desktoptheme/Seven-Black/icontasks/indicators.svg delete mode 100755 plasma/desktoptheme/Seven-Black/icontasks/launcherseparator.svg delete mode 100755 plasma/desktoptheme/Seven-Black/icontasks/progress.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories-applet.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories-extender.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/action-list-view-headers-plasma-applet.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/action-list-view-headers.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/action-list-view-items-extender.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/action-list-view-items.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/extender-button-icon.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/inner-background.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/inner-backgroundoud.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/lancelot-context-extender.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/lancelot-context.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/oudeextender-button-icon.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/passageway-view-buttons-extender.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/passageway-view-buttons.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/passageway-view-inactivebuttons.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/passageway-view-spacer.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/section-buttons.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/system-buttons-extender.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/system-buttons.svg delete mode 100755 plasma/desktoptheme/Seven-Black/lancelot/theme.config delete mode 100755 plasma/desktoptheme/Seven-Black/metadata.desktop delete mode 100755 plasma/desktoptheme/Seven-Black/networkmanagement/networkmanagement-wireless.svg delete mode 100755 plasma/desktoptheme/Seven-Black/news/down.svg delete mode 100755 plasma/desktoptheme/Seven-Black/news/up.svg delete mode 100755 plasma/desktoptheme/Seven-Black/nowplaying/nocover.svg create mode 100644 plasma/desktoptheme/Seven-Black/opaque/dialogs/background.svgz delete mode 100755 plasma/desktoptheme/Seven-Black/rssnow/arrows.svg delete mode 100755 plasma/desktoptheme/Seven-Black/rssnow/background.svg delete mode 100755 plasma/desktoptheme/Seven-Black/rssnow/left.svg delete mode 100755 plasma/desktoptheme/Seven-Black/rssnow/right.svg delete mode 100755 plasma/desktoptheme/Seven-Black/rssnow/rssnow.svg delete mode 100755 plasma/desktoptheme/Seven-Black/solid/dialogs/background_backup.svg delete mode 100644 plasma/desktoptheme/Seven-Black/solid/dialogs/background_old.svg delete mode 100755 plasma/desktoptheme/Seven-Black/stylesheets/news.css delete mode 100755 plasma/desktoptheme/Seven-Black/system-monitor/hdd_panel.svg delete mode 100755 plasma/desktoptheme/Seven-Black/toolbar-icons/configure.svg delete mode 100755 plasma/desktoptheme/Seven-Black/toolbar-icons/edit.svg delete mode 100755 plasma/desktoptheme/Seven-Black/toolbar-icons/go.svg delete mode 100755 plasma/desktoptheme/Seven-Black/toolbar-icons/list.svg delete mode 100755 plasma/desktoptheme/Seven-Black/toolbar-icons/media.svg delete mode 100755 plasma/desktoptheme/Seven-Black/toolbar-icons/window.svg delete mode 100755 plasma/desktoptheme/Seven-Black/translucent/dialogs/background.svg create mode 100644 plasma/desktoptheme/Seven-Black/translucent/dialogs/background.svgz delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/.directory delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/activities.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/amarok-albums.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/amarok-currenttrack.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/amarok-info-applet.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/amarok-wikipedia.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/amarok-wikipediaheader.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/atipslogo.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/atipsoffbtn.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/atipsonbtn.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/battery-oxygen.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/battery.svg mode change 100755 => 100644 plasma/desktoptheme/Seven-Black/widgets/button.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/connection-established.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/extender-background.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/extender-dragger.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/identiconshapes.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/identicontheme.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/lineb.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/lineedit.svgz.old delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/lineeditb.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/listitemb.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/luna.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/microblog.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/mock przelacznik pulpitow.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/onoff_switch.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/panel-background_original.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/panelspacer-separator.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/picture-frame-default.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/pownce.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/previewer-16.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/previewer-22.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/sliderb.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/system-lock-screen.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/systemtray.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/tasksb.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/toolbox-button.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/toolbox.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/twitter.svg delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/viewitem.svg.bak delete mode 100755 plasma/desktoptheme/Seven-Black/widgets/viewitemb.svg diff --git a/plasma/desktoptheme/Seven-Black/backup/background.svg b/plasma/desktoptheme/Seven-Black/backup/background.svg deleted file mode 100755 index 127b09c8..00000000 --- a/plasma/desktoptheme/Seven-Black/backup/background.svg +++ /dev/null @@ -1,1330 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/backup/panel-background.svg b/plasma/desktoptheme/Seven-Black/backup/panel-background.svg deleted file mode 100755 index 70fb4d9b..00000000 --- a/plasma/desktoptheme/Seven-Black/backup/panel-background.svg +++ /dev/null @@ -1,1800 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - image/svg+xml - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/backup/tooltip.svg b/plasma/desktoptheme/Seven-Black/backup/tooltip.svg deleted file mode 100755 index 0791de56..00000000 --- a/plasma/desktoptheme/Seven-Black/backup/tooltip.svg +++ /dev/null @@ -1,4883 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/.directory b/plasma/desktoptheme/Seven-Black/bicons/.directory deleted file mode 100755 index 1c685e6d..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -PreviewsShown=true -Timestamp=2015,9,13,12,24,56 -Version=3 diff --git a/plasma/desktoptheme/Seven-Black/bicons/akonadi.svg b/plasma/desktoptheme/Seven-Black/bicons/akonadi.svg deleted file mode 100755 index c14dc99f..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/akonadi.svg +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/akregator.svg b/plasma/desktoptheme/Seven-Black/bicons/akregator.svg deleted file mode 100755 index 3f19f7de..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/akregator.svg +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/amarok.svg b/plasma/desktoptheme/Seven-Black/bicons/amarok.svg deleted file mode 100755 index cadbb274..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/amarok.svg +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/applications.svg b/plasma/desktoptheme/Seven-Black/bicons/applications.svg deleted file mode 100755 index a5fc0726..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/applications.svg +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/apport.svg b/plasma/desktoptheme/Seven-Black/bicons/apport.svg deleted file mode 100755 index da60eac0..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/apport.svg +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/audio.svg b/plasma/desktoptheme/Seven-Black/bicons/audio.svg deleted file mode 100755 index 72a6d982..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/audio.svg +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/baloo.svg b/plasma/desktoptheme/Seven-Black/bicons/baloo.svg deleted file mode 100755 index f4e6ea62..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/baloo.svg +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/bangarang.svg b/plasma/desktoptheme/Seven-Black/bicons/bangarang.svg deleted file mode 100755 index 074d289d..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/bangarang.svg +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/basket.svg b/plasma/desktoptheme/Seven-Black/bicons/basket.svg deleted file mode 100755 index bfacd3ac..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/basket.svg +++ /dev/null @@ -1,823 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/battery.svg b/plasma/desktoptheme/Seven-Black/bicons/battery.svg deleted file mode 100755 index 19159ec5..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/battery.svg +++ /dev/null @@ -1,1110 +0,0 @@ - - - - - - image/svg+xml - - Artboard 1 - - - - - - - Artboard 1 - Created with Sketch (http://www.bohemiancoding.com/sketch) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/bookmarks.svg b/plasma/desktoptheme/Seven-Black/bicons/bookmarks.svg deleted file mode 100755 index d5b1ddd2..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/bookmarks.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/cantata.svg b/plasma/desktoptheme/Seven-Black/bicons/cantata.svg deleted file mode 100755 index 17d97acb..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/cantata.svg +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/choqok.svg b/plasma/desktoptheme/Seven-Black/bicons/choqok.svg deleted file mode 100755 index aac3e0e5..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/choqok.svg +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/choqok_offline.svg b/plasma/desktoptheme/Seven-Black/bicons/choqok_offline.svg deleted file mode 100755 index abaae514..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/choqok_offline.svg +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/clementine.svg b/plasma/desktoptheme/Seven-Black/bicons/clementine.svg deleted file mode 100755 index 6c097e1d..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/clementine.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/computer.svg b/plasma/desktoptheme/Seven-Black/bicons/computer.svg deleted file mode 100755 index 79662732..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/computer.svg +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/configure.svg b/plasma/desktoptheme/Seven-Black/bicons/configure.svg deleted file mode 100755 index d43ffc1f..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/configure.svg +++ /dev/null @@ -1,279 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - Malcer - - - - Icons for Caledonia plasma theme. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/device.svg b/plasma/desktoptheme/Seven-Black/bicons/device.svg deleted file mode 100755 index 0b15a216..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/device.svg +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/dialog.svg b/plasma/desktoptheme/Seven-Black/bicons/dialog.svg deleted file mode 100755 index 636a3858..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/dialog.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/distribute.svg b/plasma/desktoptheme/Seven-Black/bicons/distribute.svg deleted file mode 100755 index fcd7720f..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/distribute.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/document.svg b/plasma/desktoptheme/Seven-Black/bicons/document.svg deleted file mode 100755 index ddbf0368..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/document.svg +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/drive.svg b/plasma/desktoptheme/Seven-Black/bicons/drive.svg deleted file mode 100755 index 1ebf54d2..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/drive.svg +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/dropbox.svg b/plasma/desktoptheme/Seven-Black/bicons/dropbox.svg deleted file mode 100755 index 8c0109a0..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/dropbox.svg +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/edit.svg b/plasma/desktoptheme/Seven-Black/bicons/edit.svg deleted file mode 100755 index 93a5266f..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/edit.svg +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/fcitx.svg b/plasma/desktoptheme/Seven-Black/bicons/fcitx.svg deleted file mode 100755 index cb3ac5ac..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/fcitx.svg +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/go.svg b/plasma/desktoptheme/Seven-Black/bicons/go.svg deleted file mode 100755 index 96ad7252..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/go.svg +++ /dev/null @@ -1,1624 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Gnome Symbolic Icon Theme - - - - Gnome Symbolic Icon Theme - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/ibus.svg b/plasma/desktoptheme/Seven-Black/bicons/ibus.svg deleted file mode 100755 index 6db7bd04..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/ibus.svg +++ /dev/null @@ -1,255 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/input.svg b/plasma/desktoptheme/Seven-Black/bicons/input.svg deleted file mode 100755 index 7ca62657..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/input.svg +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/juk.svg b/plasma/desktoptheme/Seven-Black/bicons/juk.svg deleted file mode 100755 index b9dd101e..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/juk.svg +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kaffeine.svg b/plasma/desktoptheme/Seven-Black/bicons/kaffeine.svg deleted file mode 100755 index 6941dbde..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kaffeine.svg +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kalarm.svg b/plasma/desktoptheme/Seven-Black/bicons/kalarm.svg deleted file mode 100755 index 472473b0..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kalarm.svg +++ /dev/null @@ -1,607 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kdeconnect.svg b/plasma/desktoptheme/Seven-Black/bicons/kdeconnect.svg deleted file mode 100755 index a8eee95f..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kdeconnect.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/keyboard.svg b/plasma/desktoptheme/Seven-Black/bicons/keyboard.svg deleted file mode 100755 index a8f166a2..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/keyboard.svg +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kget.svg b/plasma/desktoptheme/Seven-Black/bicons/kget.svg deleted file mode 100755 index 42196b1a..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kget.svg +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kgpg.svg b/plasma/desktoptheme/Seven-Black/bicons/kgpg.svg deleted file mode 100755 index 8c964ec0..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kgpg.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/klipper.svg b/plasma/desktoptheme/Seven-Black/bicons/klipper.svg deleted file mode 100755 index db8725c2..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/klipper.svg +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kmail.svg b/plasma/desktoptheme/Seven-Black/bicons/kmail.svg deleted file mode 100755 index bfa04123..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kmail.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kmess.svg b/plasma/desktoptheme/Seven-Black/bicons/kmess.svg deleted file mode 100755 index 2164c8f8..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kmess.svg +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/knotes.svg b/plasma/desktoptheme/Seven-Black/bicons/knotes.svg deleted file mode 100755 index f0ec4b7b..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/knotes.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/konqueror.svg b/plasma/desktoptheme/Seven-Black/bicons/konqueror.svg deleted file mode 100755 index d7ca9adb..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/konqueror.svg +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/konv_message.svg b/plasma/desktoptheme/Seven-Black/bicons/konv_message.svg deleted file mode 100755 index 627db361..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/konv_message.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/konversation.svg b/plasma/desktoptheme/Seven-Black/bicons/konversation.svg deleted file mode 100755 index 0d7c5b4e..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/konversation.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kopete.svg b/plasma/desktoptheme/Seven-Black/bicons/kopete.svg deleted file mode 100755 index bbe3e458..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kopete.svg +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/korgac.svg b/plasma/desktoptheme/Seven-Black/bicons/korgac.svg deleted file mode 100755 index 1c13e086..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/korgac.svg +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kpackagekit.svg b/plasma/desktoptheme/Seven-Black/bicons/kpackagekit.svg deleted file mode 100755 index 2e85c086..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kpackagekit.svg +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kruler.svg b/plasma/desktoptheme/Seven-Black/bicons/kruler.svg deleted file mode 100755 index 24ab674f..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kruler.svg +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/kteatime.svg b/plasma/desktoptheme/Seven-Black/bicons/kteatime.svg deleted file mode 100755 index 128ab4ff..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/kteatime.svg +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/ktimer.svg b/plasma/desktoptheme/Seven-Black/bicons/ktimer.svg deleted file mode 100755 index 9f46c62b..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/ktimer.svg +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - - Icons for Caledonia plasma theme. - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/ktorrent.svg b/plasma/desktoptheme/Seven-Black/bicons/ktorrent.svg deleted file mode 100755 index 1f9764ee..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/ktorrent.svg +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/list.svg b/plasma/desktoptheme/Seven-Black/bicons/list.svg deleted file mode 100755 index c75d9730..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/list.svg +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/location.svg b/plasma/desktoptheme/Seven-Black/bicons/location.svg deleted file mode 100755 index 6aab211b..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/location.svg +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/mail-unread-new.svg b/plasma/desktoptheme/Seven-Black/bicons/mail-unread-new.svg deleted file mode 100755 index a2705416..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/mail-unread-new.svg +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - Icons for Caledonia plasma theme - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/mail.svg b/plasma/desktoptheme/Seven-Black/bicons/mail.svg deleted file mode 100755 index 09a9059f..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/mail.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/media.svg b/plasma/desktoptheme/Seven-Black/bicons/media.svg deleted file mode 100755 index f51750d4..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/media.svg +++ /dev/null @@ -1,1018 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/message-indicator.svg b/plasma/desktoptheme/Seven-Black/bicons/message-indicator.svg deleted file mode 100755 index 608973c8..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/message-indicator.svg +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/nepomuk.svg b/plasma/desktoptheme/Seven-Black/bicons/nepomuk.svg deleted file mode 100755 index fc1d4ddc..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/nepomuk.svg +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/network.svg b/plasma/desktoptheme/Seven-Black/bicons/network.svg deleted file mode 100755 index f27569e5..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/network.svg +++ /dev/null @@ -1,14606 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/notification.svg b/plasma/desktoptheme/Seven-Black/bicons/notification.svg deleted file mode 100755 index c38bbbc2..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/notification.svg +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/phone.svg b/plasma/desktoptheme/Seven-Black/bicons/phone.svg deleted file mode 100755 index 7ef2ec46..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/phone.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/plasma-networkmanagement.svg b/plasma/desktoptheme/Seven-Black/bicons/plasma-networkmanagement.svg deleted file mode 100755 index c37886e4..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/plasma-networkmanagement.svg +++ /dev/null @@ -1,8507 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/preferences.svg b/plasma/desktoptheme/Seven-Black/bicons/preferences.svg deleted file mode 100755 index 07411ba4..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/preferences.svg +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/presence-applet.svg b/plasma/desktoptheme/Seven-Black/bicons/presence-applet.svg deleted file mode 100755 index 132c5389..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/presence-applet.svg +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/printer.svg b/plasma/desktoptheme/Seven-Black/bicons/printer.svg deleted file mode 100755 index c28bb452..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/printer.svg +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/quassel.svg b/plasma/desktoptheme/Seven-Black/bicons/quassel.svg deleted file mode 100755 index 14e7e502..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/quassel.svg +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/quota.svg b/plasma/desktoptheme/Seven-Black/bicons/quota.svg deleted file mode 100755 index b22177c2..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/quota.svg +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/recorditnow.svg b/plasma/desktoptheme/Seven-Black/bicons/recorditnow.svg deleted file mode 100755 index 2f9d251e..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/recorditnow.svg +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/simpleaudioplayer.svg b/plasma/desktoptheme/Seven-Black/bicons/simpleaudioplayer.svg deleted file mode 100755 index c83bc0db..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/simpleaudioplayer.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - image/svg+xml - - - - - Malcer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/skype.svg b/plasma/desktoptheme/Seven-Black/bicons/skype.svg deleted file mode 100755 index 8439bbd4..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/skype.svg +++ /dev/null @@ -1,414 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/slc.svg b/plasma/desktoptheme/Seven-Black/bicons/slc.svg deleted file mode 100755 index 89075d3f..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/slc.svg +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/smartphone.svg b/plasma/desktoptheme/Seven-Black/bicons/smartphone.svg deleted file mode 100755 index 0b992839..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/smartphone.svg +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/smb4k.svg b/plasma/desktoptheme/Seven-Black/bicons/smb4k.svg deleted file mode 100755 index 94077e68..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/smb4k.svg +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/software-updates.svg b/plasma/desktoptheme/Seven-Black/bicons/software-updates.svg deleted file mode 100755 index 4e65140a..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/software-updates.svg +++ /dev/null @@ -1,384 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/software.svg b/plasma/desktoptheme/Seven-Black/bicons/software.svg deleted file mode 100755 index 05e047f3..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/software.svg +++ /dev/null @@ -1,384 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/start.svg b/plasma/desktoptheme/Seven-Black/bicons/start.svg deleted file mode 100755 index ea1d13e1..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/start.svg +++ /dev/null @@ -1,2393 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/steam.svg b/plasma/desktoptheme/Seven-Black/bicons/steam.svg deleted file mode 100755 index b349fc53..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/steam.svg +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/synaptiks.svg b/plasma/desktoptheme/Seven-Black/bicons/synaptiks.svg deleted file mode 100755 index 5f4ac25b..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/synaptiks.svg +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/system.svg b/plasma/desktoptheme/Seven-Black/bicons/system.svg deleted file mode 100755 index a41904eb..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/system.svg +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/tomahawk.svg b/plasma/desktoptheme/Seven-Black/bicons/tomahawk.svg deleted file mode 100755 index 09fa85ea..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/tomahawk.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - image/svg+xml - - - - - Malcer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/touchpad.svg b/plasma/desktoptheme/Seven-Black/bicons/touchpad.svg deleted file mode 100755 index 044b78c3..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/touchpad.svg +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/transmission-qt.svg b/plasma/desktoptheme/Seven-Black/bicons/transmission-qt.svg deleted file mode 100755 index e637dc0f..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/transmission-qt.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/transmission.svg b/plasma/desktoptheme/Seven-Black/bicons/transmission.svg deleted file mode 100755 index d3fd1814..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/transmission.svg +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - Icons for Caledonia plasma theme. - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/user.svg b/plasma/desktoptheme/Seven-Black/bicons/user.svg deleted file mode 100755 index 78b1d43e..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/user.svg +++ /dev/null @@ -1,291 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/video-display.svg b/plasma/desktoptheme/Seven-Black/bicons/video-display.svg deleted file mode 100755 index 76c30039..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/video-display.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - Icons for Caledonia plasma theme. - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/video.svg b/plasma/desktoptheme/Seven-Black/bicons/video.svg deleted file mode 100755 index 88eb806c..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/video.svg +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/view.svg b/plasma/desktoptheme/Seven-Black/bicons/view.svg deleted file mode 100755 index b8aa8805..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/view.svg +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/vlc.svg b/plasma/desktoptheme/Seven-Black/bicons/vlc.svg deleted file mode 100755 index ff52d6f8..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/vlc.svg +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/wallet.svg b/plasma/desktoptheme/Seven-Black/bicons/wallet.svg deleted file mode 100755 index eb4bf10e..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/wallet.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/weather.svg b/plasma/desktoptheme/Seven-Black/bicons/weather.svg deleted file mode 100755 index d741a9de..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/weather.svg +++ /dev/null @@ -1,1757 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/window.svg b/plasma/desktoptheme/Seven-Black/bicons/window.svg deleted file mode 100755 index 2e26a543..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/window.svg +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - Icons for Caledonia plasma theme. - - - Malcer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/yarock.svg b/plasma/desktoptheme/Seven-Black/bicons/yarock.svg deleted file mode 100755 index 9b5e972b..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/yarock.svg +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - image/svg+xml - - - - - Malcer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bicons/zoom.svg b/plasma/desktoptheme/Seven-Black/bicons/zoom.svg deleted file mode 100755 index 4cea76e7..00000000 --- a/plasma/desktoptheme/Seven-Black/bicons/zoom.svg +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - Caledonia plasma theme icon - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/bubblemon/bubble.svg b/plasma/desktoptheme/Seven-Black/bubblemon/bubble.svg deleted file mode 100755 index a4ceab28..00000000 --- a/plasma/desktoptheme/Seven-Black/bubblemon/bubble.svg +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/calendar/mini-calendar.svg b/plasma/desktoptheme/Seven-Black/calendar/mini-calendar.svg deleted file mode 100755 index ba82cb67..00000000 --- a/plasma/desktoptheme/Seven-Black/calendar/mini-calendar.svg +++ /dev/null @@ -1,1167 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/colors b/plasma/desktoptheme/Seven-Black/colors index ef03ef84..32c090b8 100755 --- a/plasma/desktoptheme/Seven-Black/colors +++ b/plasma/desktoptheme/Seven-Black/colors @@ -48,7 +48,7 @@ ForegroundVisited=25,182,238 [Colors:Selection] BackgroundAlternate=48,138,183 -BackgroundNormal=25,182,238 +BackgroundNormal=51,153,255 DecorationFocus=30,146,255 DecorationHover=25,182,238 ForegroundActive=245,121,0 diff --git a/plasma/desktoptheme/Seven-Black/dialogs/.directory b/plasma/desktoptheme/Seven-Black/dialogs/.directory deleted file mode 100755 index 7aa080e8..00000000 --- a/plasma/desktoptheme/Seven-Black/dialogs/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -PreviewsShown=true -Timestamp=2015,8,29,10,19,25 -Version=3 diff --git a/plasma/desktoptheme/Seven-Black/dialogs/background.svg.old b/plasma/desktoptheme/Seven-Black/dialogs/background.svg.old deleted file mode 100755 index 5471d57b..00000000 --- a/plasma/desktoptheme/Seven-Black/dialogs/background.svg.old +++ /dev/null @@ -1,3556 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/dialogs/kickoff.svg b/plasma/desktoptheme/Seven-Black/dialogs/kickoff.svg deleted file mode 100755 index 4195a3ab..00000000 --- a/plasma/desktoptheme/Seven-Black/dialogs/kickoff.svg +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - - - - - image/svg+xml - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/dialogs/krunner.svg b/plasma/desktoptheme/Seven-Black/dialogs/krunner.svg deleted file mode 100755 index 51dca686..00000000 --- a/plasma/desktoptheme/Seven-Black/dialogs/krunner.svg +++ /dev/null @@ -1,677 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/dialogs/shutdowndialog.svg b/plasma/desktoptheme/Seven-Black/dialogs/shutdowndialog.svg deleted file mode 100755 index 02714e5c..00000000 --- a/plasma/desktoptheme/Seven-Black/dialogs/shutdowndialog.svg +++ /dev/null @@ -1,1237 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/discburner/k3b.svg b/plasma/desktoptheme/Seven-Black/discburner/k3b.svg deleted file mode 100755 index 88df3edb..00000000 --- a/plasma/desktoptheme/Seven-Black/discburner/k3b.svg +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/discburner/media-optical-audio.svg b/plasma/desktoptheme/Seven-Black/discburner/media-optical-audio.svg deleted file mode 100755 index 2d18fb30..00000000 --- a/plasma/desktoptheme/Seven-Black/discburner/media-optical-audio.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/discburner/media-optical-blu-ray.svg b/plasma/desktoptheme/Seven-Black/discburner/media-optical-blu-ray.svg deleted file mode 100755 index 2d18fb30..00000000 --- a/plasma/desktoptheme/Seven-Black/discburner/media-optical-blu-ray.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/discburner/media-optical-dvd-video.svg b/plasma/desktoptheme/Seven-Black/discburner/media-optical-dvd-video.svg deleted file mode 100755 index 2d18fb30..00000000 --- a/plasma/desktoptheme/Seven-Black/discburner/media-optical-dvd-video.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/discburner/media-optical-dvd.svg b/plasma/desktoptheme/Seven-Black/discburner/media-optical-dvd.svg deleted file mode 100755 index 2d18fb30..00000000 --- a/plasma/desktoptheme/Seven-Black/discburner/media-optical-dvd.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/discburner/media-optical-recordable.svg b/plasma/desktoptheme/Seven-Black/discburner/media-optical-recordable.svg deleted file mode 100755 index 88df3edb..00000000 --- a/plasma/desktoptheme/Seven-Black/discburner/media-optical-recordable.svg +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/discburner/media-optical-video.svg b/plasma/desktoptheme/Seven-Black/discburner/media-optical-video.svg deleted file mode 100755 index 2d18fb30..00000000 --- a/plasma/desktoptheme/Seven-Black/discburner/media-optical-video.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/discburner/media-optical.svg b/plasma/desktoptheme/Seven-Black/discburner/media-optical.svg deleted file mode 100755 index 2d18fb30..00000000 --- a/plasma/desktoptheme/Seven-Black/discburner/media-optical.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/fifteenPuzzle/blanksquare.svg b/plasma/desktoptheme/Seven-Black/fifteenPuzzle/blanksquare.svg deleted file mode 100755 index 746bfb34..00000000 --- a/plasma/desktoptheme/Seven-Black/fifteenPuzzle/blanksquare.svg +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/icontasks/badge.svg b/plasma/desktoptheme/Seven-Black/icontasks/badge.svg deleted file mode 100755 index 3097c13a..00000000 --- a/plasma/desktoptheme/Seven-Black/icontasks/badge.svg +++ /dev/null @@ -1,1727 +0,0 @@ - - - - - - - - - - - image/svg+xml - - - - image/svg+xml - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/icontasks/dropindicators.svg b/plasma/desktoptheme/Seven-Black/icontasks/dropindicators.svg deleted file mode 100755 index 24face92..00000000 --- a/plasma/desktoptheme/Seven-Black/icontasks/dropindicators.svg +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - Malcer - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/icontasks/indicators.svg b/plasma/desktoptheme/Seven-Black/icontasks/indicators.svg deleted file mode 100755 index f3de12b2..00000000 --- a/plasma/desktoptheme/Seven-Black/icontasks/indicators.svg +++ /dev/null @@ -1,1204 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - - Caledonia plasma theme stuff - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/icontasks/launcherseparator.svg b/plasma/desktoptheme/Seven-Black/icontasks/launcherseparator.svg deleted file mode 100755 index 8b6d3411..00000000 --- a/plasma/desktoptheme/Seven-Black/icontasks/launcherseparator.svg +++ /dev/null @@ -1,558 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - Caledonia plasma theme parts - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/icontasks/progress.svg b/plasma/desktoptheme/Seven-Black/icontasks/progress.svg deleted file mode 100755 index 8dd752e8..00000000 --- a/plasma/desktoptheme/Seven-Black/icontasks/progress.svg +++ /dev/null @@ -1,767 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories-applet.svg b/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories-applet.svg deleted file mode 100755 index f3f73336..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories-applet.svg +++ /dev/null @@ -1,1089 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories-extender.svg b/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories-extender.svg deleted file mode 100755 index 3ebf8998..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories-extender.svg +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories.svg b/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories.svg deleted file mode 100755 index 9a088848..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-categories.svg +++ /dev/null @@ -1,1089 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-headers-plasma-applet.svg b/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-headers-plasma-applet.svg deleted file mode 100755 index bdad6c0a..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-headers-plasma-applet.svg +++ /dev/null @@ -1,736 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-headers.svg b/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-headers.svg deleted file mode 100755 index cb7c78b4..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-headers.svg +++ /dev/null @@ -1,736 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-items-extender.svg b/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-items-extender.svg deleted file mode 100755 index 898cfacd..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-items-extender.svg +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-items.svg b/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-items.svg deleted file mode 100755 index ffcd43f7..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/action-list-view-items.svg +++ /dev/null @@ -1,943 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/extender-button-icon.svg b/plasma/desktoptheme/Seven-Black/lancelot/extender-button-icon.svg deleted file mode 100755 index b90ff564..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/extender-button-icon.svg +++ /dev/null @@ -1,1108 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/inner-background.svg b/plasma/desktoptheme/Seven-Black/lancelot/inner-background.svg deleted file mode 100755 index 674ff22e..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/inner-background.svg +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/inner-backgroundoud.svg b/plasma/desktoptheme/Seven-Black/lancelot/inner-backgroundoud.svg deleted file mode 100755 index 95eb4260..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/inner-backgroundoud.svg +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/lancelot-context-extender.svg b/plasma/desktoptheme/Seven-Black/lancelot/lancelot-context-extender.svg deleted file mode 100755 index cddbf93c..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/lancelot-context-extender.svg +++ /dev/null @@ -1,1302 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Checked - Active - - - - stretchborders - Hints - - - Down - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/lancelot-context.svg b/plasma/desktoptheme/Seven-Black/lancelot/lancelot-context.svg deleted file mode 100755 index 621db858..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/lancelot-context.svg +++ /dev/null @@ -1,1302 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Checked - Active - - - - stretchborders - Hints - - - Down - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/oudeextender-button-icon.svg b/plasma/desktoptheme/Seven-Black/lancelot/oudeextender-button-icon.svg deleted file mode 100755 index c35f3417..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/oudeextender-button-icon.svg +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-buttons-extender.svg b/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-buttons-extender.svg deleted file mode 100755 index 5efc6e8c..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-buttons-extender.svg +++ /dev/null @@ -1,830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-buttons.svg b/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-buttons.svg deleted file mode 100755 index 06203477..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-buttons.svg +++ /dev/null @@ -1,997 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-inactivebuttons.svg b/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-inactivebuttons.svg deleted file mode 100755 index 97b9f393..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-inactivebuttons.svg +++ /dev/null @@ -1,725 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-spacer.svg b/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-spacer.svg deleted file mode 100755 index 15878310..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/passageway-view-spacer.svg +++ /dev/null @@ -1,662 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - - - - stretchborders - Hints - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/section-buttons.svg b/plasma/desktoptheme/Seven-Black/lancelot/section-buttons.svg deleted file mode 100755 index 9412b24d..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/section-buttons.svg +++ /dev/null @@ -1,927 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Active - - Down - Checked - - - - stretchborders - Hints - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/system-buttons-extender.svg b/plasma/desktoptheme/Seven-Black/lancelot/system-buttons-extender.svg deleted file mode 100755 index 2208d420..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/system-buttons-extender.svg +++ /dev/null @@ -1,1275 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Checked - Active - - - - stretchborders - Hints - - - Down - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/system-buttons.svg b/plasma/desktoptheme/Seven-Black/lancelot/system-buttons.svg deleted file mode 100755 index 0f403ae6..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/system-buttons.svg +++ /dev/null @@ -1,1275 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Normal - Disabled - Checked - Active - - - - stretchborders - Hints - - - Down - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/lancelot/theme.config b/plasma/desktoptheme/Seven-Black/lancelot/theme.config deleted file mode 100755 index 4cc0aa86..00000000 --- a/plasma/desktoptheme/Seven-Black/lancelot/theme.config +++ /dev/null @@ -1,188 +0,0 @@ -[Group-Default] -background.type=none -background.color.normal=255,255,255 -background.color.active=255,255,255 -background.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -foreground.color.disabled=255,255,255 - -# generic groups -[Group-BasicWidget] # del -parent=Default - -[Group-ExtenderButton] -parent=Default - -[Group-ExtenderButton-Extender] # del -parent=Default - -[Group-Panel] -background.type=none - -[Group-Panel-Title] -parent=Default - -[Group-ActionListView] # deprecated -parent=Default - -[Group-ActionListView-Items] # deprecated -foreground.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/action-list-view-items - -[Group-ActionListView-Items-Extender] # deprecated -background.type=svg -background.svg=lancelot/action-list-view-items-extender - -[Group-ActionListView-ItemsLeft] # deprecated -parent=ActionListView-Items - -[Group-ActionListView-ItemsRight] # deprecated -parent=ActionListView-Items - -[Group-ActionListView-ItemsLeft-Extender] # deprecated -parent=ActionListView-Items-Extender - -[Group-ActionListView-ItemsRight-Extender] # deprecated -parent=ActionListView-Items-Extender - -[Group-ActionListView-CategoriesPass] # deprecated -foreground.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/action-list-view-categories - -[Group-ActionListView-CategoriesPass-Extender] # deprecated -background.type=svg -background.svg=lancelot/action-list-view-categories-extender - -[Group-ActionListView-Categories] # deprecated -foreground.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/action-list-view-headers - -[Group-PassagewayView-Button] -foreground.color.disabled=255,255,255 -foreground.color.active=255,255,255 -foreground.color.normal=255,255,255 -background.type=svg -background.svg=lancelot/passageway-view-buttons - -[Group-PassagewayView-Button-Extender] -background.type=svg -background.svg=lancelot/passageway-view-buttons-extender - -[Group-PassagewayView-Spacer] -foreground.color.normal=255,255,255 -foreground.color.disabled=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/passageway-view-spacer - -[Group-PassagewayView-InactiveButton] -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -foreground.color.disabled=255,255,255 -background.type=svg -background.svg=lancelot/passageway-view-inactivebuttons - -[Group-InnerPanel-InactiveButton] -parent=PassagewayView-InactiveButton - -# application groups -[Group-SystemButtons] # del -foreground.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/system-buttons - -[Group-LancelotContext] # del -background.type=svg -background.svg=lancelot/lancelot-context - -[Group-SystemButtons-Extender] # del -background.type=svg -background.svg=lancelot/system-buttons-extender - -[Group-LancelotContext-Extender] # del -background.type=svg -background.svg=lancelot/lancelot-context-extender - -[Group-SectionButtons] # del -foreground.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/section-buttons - -[Group-SectionButtons-Extender] # del -background.type=none - -[Group-AppletLaunchButton] # del -background.type=svg -background.svg=lancelot/launch-applet-button - -[Group-MainPanel] # del -background.type=svg -background.svg=lancelot/main-panel - -[Group-RootPanel] # del -background.type=svg -#background.svg=lancelot/main-background -background.svg=dialogs/background - -[Group-InnerPanel] # del -background.type=svg -background.svg=lancelot/inner-background - -[Group-PassagewayView] # del -parent=InnerPanel - -[Group-InnerPanel-Button] # del -parent=PassagewayView-Button - -[Group-InnerPanel-Button-Extender] # del -parent=PassagewayView-Button-Extender - -[Group-PopupList-Items] -foreground.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/action-list-view-items - -[Group-PopupList-Categories] -foreground.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/action-list-view-categories-applet - -[Group-PopupList-CategoriesPass] -foreground.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/action-list-view-categories-applet - -[Group-PopupList-CategoriesPass-Extender] -foreground.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/action-list-view-items-applet - -[Group-PopupList-Categories-Extender] -foreground.color.disabled=255,255,255 -foreground.color.normal=255,255,255 -foreground.color.active=255,255,255 -background.type=svg -background.svg=lancelot/action-list-view-items-applet - diff --git a/plasma/desktoptheme/Seven-Black/metadata.desktop b/plasma/desktoptheme/Seven-Black/metadata.desktop deleted file mode 100755 index 2c500386..00000000 --- a/plasma/desktoptheme/Seven-Black/metadata.desktop +++ /dev/null @@ -1,22 +0,0 @@ -[Contrast Effect] -contrast=1 -enabled=True -intensity=1 -saturation=1.7 - -[Desktop Entry] -Comment=Seven Black theme with glass effect and reflections -Name=Seven Black -X-KDE-PluginInfo-Author=Mirko Gennari -X-KDE-PluginInfo-Category=Plasma Theme -X-KDE-PluginInfo-Depends=KDE5 -X-KDE-PluginInfo-Email=mirkogen@hotmail.it -X-KDE-PluginInfo-EnabledByDefault=True -X-KDE-PluginInfo-License=GPL -X-KDE-PluginInfo-Name=Seven Black -X-KDE-PluginInfo-Version=1.0.91 -X-KDE-PluginInfo-Website=http://www.techbulk.net -X-Plasma-API=5.0 - -[Settings] -UseNativeWidgetStyle=True diff --git a/plasma/desktoptheme/Seven-Black/metadata.json b/plasma/desktoptheme/Seven-Black/metadata.json index 363e6b3b..91db04bd 100644 --- a/plasma/desktoptheme/Seven-Black/metadata.json +++ b/plasma/desktoptheme/Seven-Black/metadata.json @@ -5,6 +5,10 @@ { "Email": "mirkogen@hotmail.it", "Name": "Mirko Gennari" + }, + { + "Email": "wackyideas@disroot.org", + "Name": "WackyIdeas" } ], "Category": "Plasma Theme", diff --git a/plasma/desktoptheme/Seven-Black/networkmanagement/networkmanagement-wireless.svg b/plasma/desktoptheme/Seven-Black/networkmanagement/networkmanagement-wireless.svg deleted file mode 100755 index 84494c0a..00000000 --- a/plasma/desktoptheme/Seven-Black/networkmanagement/networkmanagement-wireless.svg +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/news/down.svg b/plasma/desktoptheme/Seven-Black/news/down.svg deleted file mode 100755 index 16f1f419..00000000 --- a/plasma/desktoptheme/Seven-Black/news/down.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/news/up.svg b/plasma/desktoptheme/Seven-Black/news/up.svg deleted file mode 100755 index 7162e935..00000000 --- a/plasma/desktoptheme/Seven-Black/news/up.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/nowplaying/nocover.svg b/plasma/desktoptheme/Seven-Black/nowplaying/nocover.svg deleted file mode 100755 index 1f18d995..00000000 --- a/plasma/desktoptheme/Seven-Black/nowplaying/nocover.svg +++ /dev/null @@ -1,3593 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - Original design by Malcer. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/opaque/dialogs/background.svgz b/plasma/desktoptheme/Seven-Black/opaque/dialogs/background.svgz new file mode 100644 index 0000000000000000000000000000000000000000..c7317e5e7b967f7f3d8c5996fe78cf117b30b9e9 GIT binary patch literal 8354 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 - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/rssnow/background.svg b/plasma/desktoptheme/Seven-Black/rssnow/background.svg deleted file mode 100755 index cb61b372..00000000 --- a/plasma/desktoptheme/Seven-Black/rssnow/background.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/rssnow/left.svg b/plasma/desktoptheme/Seven-Black/rssnow/left.svg deleted file mode 100755 index d19796fe..00000000 --- a/plasma/desktoptheme/Seven-Black/rssnow/left.svg +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/rssnow/right.svg b/plasma/desktoptheme/Seven-Black/rssnow/right.svg deleted file mode 100755 index 70eac163..00000000 --- a/plasma/desktoptheme/Seven-Black/rssnow/right.svg +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/rssnow/rssnow.svg b/plasma/desktoptheme/Seven-Black/rssnow/rssnow.svg deleted file mode 100755 index 44170b5c..00000000 --- a/plasma/desktoptheme/Seven-Black/rssnow/rssnow.svg +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/solid/dialogs/background_backup.svg b/plasma/desktoptheme/Seven-Black/solid/dialogs/background_backup.svg deleted file mode 100755 index 6910b36a..00000000 --- a/plasma/desktoptheme/Seven-Black/solid/dialogs/background_backup.svg +++ /dev/null @@ -1,2584 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/solid/dialogs/background_old.svg b/plasma/desktoptheme/Seven-Black/solid/dialogs/background_old.svg deleted file mode 100644 index ef3072cc..00000000 --- a/plasma/desktoptheme/Seven-Black/solid/dialogs/background_old.svg +++ /dev/null @@ -1,2279 +0,0 @@ - - - - - - - - - -image/svg+xml diff --git a/plasma/desktoptheme/Seven-Black/stylesheets/news.css b/plasma/desktoptheme/Seven-Black/stylesheets/news.css deleted file mode 100755 index 75c75d87..00000000 --- a/plasma/desktoptheme/Seven-Black/stylesheets/news.css +++ /dev/null @@ -1,13 +0,0 @@ -.header { font-size:11pt; font-weight:bold; color:#fcfcfc; background-color:#4f4f4f; } -.date { font-size:10pt; font-weight:bold; color:#fcfcfc; background-color:#333333; } -.line-0 { font-size:10pt; color:#fcfcfc; background-color:#0f0f0f; } -.line-1 { font-size:10pt; color:#fcfcfc; background-color:#2f2f2f; } -.time { font-size:7pt; color:#cccccc; padding-top:3px; } -.title, .description { } -.description { font-size:9pt; } -.text { width:100%; } -.title_with_description { font-weight:bold; } -a { text-decoration:none; color:#fcfcfc; } -table { width:100%; border-spacing:0px; } -td { vertical-align: top; } -body { margin:0px; background-color:#000000 } diff --git a/plasma/desktoptheme/Seven-Black/system-monitor/hdd_panel.svg b/plasma/desktoptheme/Seven-Black/system-monitor/hdd_panel.svg deleted file mode 100755 index 562fd36c..00000000 --- a/plasma/desktoptheme/Seven-Black/system-monitor/hdd_panel.svg +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/toolbar-icons/configure.svg b/plasma/desktoptheme/Seven-Black/toolbar-icons/configure.svg deleted file mode 100755 index 7be86c2b..00000000 --- a/plasma/desktoptheme/Seven-Black/toolbar-icons/configure.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/toolbar-icons/edit.svg b/plasma/desktoptheme/Seven-Black/toolbar-icons/edit.svg deleted file mode 100755 index 88f60adb..00000000 --- a/plasma/desktoptheme/Seven-Black/toolbar-icons/edit.svg +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/toolbar-icons/go.svg b/plasma/desktoptheme/Seven-Black/toolbar-icons/go.svg deleted file mode 100755 index 028a8c47..00000000 --- a/plasma/desktoptheme/Seven-Black/toolbar-icons/go.svg +++ /dev/null @@ -1,565 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/toolbar-icons/list.svg b/plasma/desktoptheme/Seven-Black/toolbar-icons/list.svg deleted file mode 100755 index ae2697bb..00000000 --- a/plasma/desktoptheme/Seven-Black/toolbar-icons/list.svg +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/toolbar-icons/media.svg b/plasma/desktoptheme/Seven-Black/toolbar-icons/media.svg deleted file mode 100755 index 140f88a9..00000000 --- a/plasma/desktoptheme/Seven-Black/toolbar-icons/media.svg +++ /dev/null @@ -1,704 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/toolbar-icons/window.svg b/plasma/desktoptheme/Seven-Black/toolbar-icons/window.svg deleted file mode 100755 index 7ae4213d..00000000 --- a/plasma/desktoptheme/Seven-Black/toolbar-icons/window.svg +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/translucent/dialogs/background.svg b/plasma/desktoptheme/Seven-Black/translucent/dialogs/background.svg deleted file mode 100755 index 17c24bf1..00000000 --- a/plasma/desktoptheme/Seven-Black/translucent/dialogs/background.svg +++ /dev/null @@ -1,7747 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/translucent/dialogs/background.svgz b/plasma/desktoptheme/Seven-Black/translucent/dialogs/background.svgz new file mode 100644 index 0000000000000000000000000000000000000000..c7317e5e7b967f7f3d8c5996fe78cf117b30b9e9 GIT binary patch literal 8354 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 + + id="style703"> +.color_area { + stroke-width:0.425266; + opacity:1; + fill-opacity:0; + fill:#e61f8c; +} + .grey_area { stroke-width:0.425266; fill:#7f7f7f; fill-opacity:0; opacity:1; } + + + + + + + + + + + + + + + + + + + + + + + + id="feComposite7772" + k3="0" + k4="0" /> - + + + + inkscape:pagecheckerboard="1" + inkscape:showpageshadow="0" + inkscape:deskcolor="#d1d1d1"> + enabled="true" + originx="0" + originy="0" + spacingy="1" + spacingx="1" + units="px" /> @@ -1181,9 +1265,9 @@ y="109" width="59.433529" id="rect7809" - style="fill:#cdddee;fill-opacity:0.90000000000000002;stroke:none;stroke-width:3.20000004999999987;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:#ffffff;fill-opacity:0.40000001;stroke:none;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + style="fill:#ffffff;fill-opacity:0.40000001;stroke:none;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + style="opacity:1;fill:#000000;fill-opacity:0.60000002;stroke:none;stroke-width:3.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + style="opacity:1"> + style="opacity:1;fill:#000000;fill-opacity:0.60000002;stroke:none;stroke-width:3.19978726;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + - - - - - - + class="color_area" + style="" /> - - - - - - - - - - - + - - + class="color_area" + style="" /> + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - image/svg+xml - - - - - image/svg+xmlimage/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="rotate(180,97.368347,508.1202)"> diff --git a/plasma/desktoptheme/Seven-Black/widgets/.directory b/plasma/desktoptheme/Seven-Black/widgets/.directory deleted file mode 100755 index 6d43a058..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/.directory +++ /dev/null @@ -1,4 +0,0 @@ -[Dolphin] -PreviewsShown=true -Timestamp=2015,8,29,10,20,4 -Version=3 diff --git a/plasma/desktoptheme/Seven-Black/widgets/activities.svg b/plasma/desktoptheme/Seven-Black/widgets/activities.svg deleted file mode 100755 index db347f37..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/activities.svg +++ /dev/null @@ -1,15885 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/amarok-albums.svg b/plasma/desktoptheme/Seven-Black/widgets/amarok-albums.svg deleted file mode 100755 index 91646e21..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/amarok-albums.svg +++ /dev/null @@ -1,252 +0,0 @@ - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/amarok-currenttrack.svg b/plasma/desktoptheme/Seven-Black/widgets/amarok-currenttrack.svg deleted file mode 100755 index 143467e9..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/amarok-currenttrack.svg +++ /dev/null @@ -1,3184 +0,0 @@ - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/amarok-info-applet.svg b/plasma/desktoptheme/Seven-Black/widgets/amarok-info-applet.svg deleted file mode 100755 index 406beeba..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/amarok-info-applet.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/amarok-wikipedia.svg b/plasma/desktoptheme/Seven-Black/widgets/amarok-wikipedia.svg deleted file mode 100755 index 1b34f49e..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/amarok-wikipedia.svg +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - image/svg+xml - - - - image/svg+xml - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/amarok-wikipediaheader.svg b/plasma/desktoptheme/Seven-Black/widgets/amarok-wikipediaheader.svg deleted file mode 100755 index da2dd9d9..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/amarok-wikipediaheader.svg +++ /dev/null @@ -1,2317 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/atipslogo.svg b/plasma/desktoptheme/Seven-Black/widgets/atipslogo.svg deleted file mode 100755 index 9a0dd6f3..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/atipslogo.svg +++ /dev/null @@ -1,452 +0,0 @@ - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/atipsoffbtn.svg b/plasma/desktoptheme/Seven-Black/widgets/atipsoffbtn.svg deleted file mode 100755 index 29685b40..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/atipsoffbtn.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/atipsonbtn.svg b/plasma/desktoptheme/Seven-Black/widgets/atipsonbtn.svg deleted file mode 100755 index a8dc7922..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/atipsonbtn.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/battery-oxygen.svg b/plasma/desktoptheme/Seven-Black/widgets/battery-oxygen.svg deleted file mode 100755 index 424fac15..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/battery-oxygen.svg +++ /dev/null @@ -1,3650 +0,0 @@ - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/battery.svg b/plasma/desktoptheme/Seven-Black/widgets/battery.svg deleted file mode 100755 index a8ab672f..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/battery.svg +++ /dev/null @@ -1,682 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/plasma/desktoptheme/Seven-Black/widgets/button.svg b/plasma/desktoptheme/Seven-Black/widgets/button.svg old mode 100755 new mode 100644 index 24266c63..0d527dab --- a/plasma/desktoptheme/Seven-Black/widgets/button.svg +++ b/plasma/desktoptheme/Seven-Black/widgets/button.svg @@ -7,8 +7,9 @@ viewBox="0 0 192.00004 113.00058" version="1.1" id="svg8" - inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" + inkscape:version="1.4 (e7c3feb100, 2024-10-09)" sodipodi:docname="button.svg" + xml:space="preserve" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -16,758 +17,526 @@ xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" - xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + transform="matrix(0.1,0,0,0.1,345.10172,167.96734)"> diff --git a/plasma/desktoptheme/Seven-Black/widgets/connection-established.svg b/plasma/desktoptheme/Seven-Black/widgets/connection-established.svg deleted file mode 100755 index 92e8fee6..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/connection-established.svg +++ /dev/null @@ -1,1717 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - Oxygen team - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/extender-background.svg b/plasma/desktoptheme/Seven-Black/widgets/extender-background.svg deleted file mode 100755 index 57e41ca0..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/extender-background.svg +++ /dev/null @@ -1,1415 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/extender-dragger.svg b/plasma/desktoptheme/Seven-Black/widgets/extender-dragger.svg deleted file mode 100755 index 9ed5c063..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/extender-dragger.svg +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - - - - - - image/svg+xml - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/identiconshapes.svg b/plasma/desktoptheme/Seven-Black/widgets/identiconshapes.svg deleted file mode 100755 index dc4e91d0..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/identiconshapes.svg +++ /dev/null @@ -1,793 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/identicontheme.svg b/plasma/desktoptheme/Seven-Black/widgets/identicontheme.svg deleted file mode 100755 index 39eb7121..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/identicontheme.svg +++ /dev/null @@ -1,739 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - common - normal - disabled - active - selected - - - - - - - - - - - - overlay - background - mask - content - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/lineb.svg b/plasma/desktoptheme/Seven-Black/widgets/lineb.svg deleted file mode 100755 index 9a49f487..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/lineb.svg +++ /dev/null @@ -1,8580 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/lineedit.svgz.old b/plasma/desktoptheme/Seven-Black/widgets/lineedit.svgz.old deleted file mode 100755 index 52d6fc829aed46f950a2438cfc7934397280f0d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10998 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 z zmSTj=bX#+HRHGDFiUKd9;2hr8z>aomuTQmfbjXcdJTl?93|2-AHs;L06j|jb?RNEl zR2uH4{7QZ4O=`|dfAf{D%Wlp{4NJu}Gc7@undzi`kz&7nIeaYmlD>E}E}aW@2I#J5 zRTMDlKa)AZ)WzdrPQF2Ng8rB?T|L37)I+QmhLB2B(hZvwLvJoD!vCD~ zS)ZW$0QwX@r0x*T9MmAY(^XdNS?R25RO-JjyNEXHA}%VH{w1FO`1s-F_44KCk8l6} zgTF2`{_!8vAHRGFsdj5YUYYsw$Lw2QLfwIpqXTAQ{RL5>0*<(wI{CqTB)Jy;9fBu+SI+eDiQB!<#J16P0-G_ zf6kXM6r)inK;+W|dR(qrBjk}4o_mBmZY4khBLUhHb0GGbtrw3Gl!82SF%{QHO|TwY zSs15UZ+Y9z?&N)LyG96gAK@8MGLdr|l7%1rQ}OK?X27}8J= z{j+61wJy*<#9p;CW=Q+Vak-I$lMsl-z~P@t`AB(h6T}!*()GZn&N8igW z8iq*U-7SK@ZrP5j1j|)1RkpHYl!*OY-2gC+Hr`D^9ol}Xx(x}XvbrT}X?W&#-V++e zWpB>~-foA{SMYvFlca`oCn80iLNXZq9)vo6&oHz5u6|E}Al=XJsV*pYk4T$gMEU{Q zY&A$SDm2F9X`Ces$${uus-&N{v>~8myRYSW9MEdd2oFjBkM3KO9o{bS#|3bME}QJY zP=hvK^zd7L_WX=ayS=bVKN8j*X1|l3j1X>L(|E)o9&_L>I={P?|2d_ z^dYoDxas2mi|`i!j^~;)L{wK+eIDagW>ffYMQ+yYH2-wuu$XM|&!ybWO~*?32u2@lATiMYmCT)&S? kqg-o`qu - - - - - - - - - - image/svg+xml - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/listitemb.svg b/plasma/desktoptheme/Seven-Black/widgets/listitemb.svg deleted file mode 100755 index 18ccf40f..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/listitemb.svg +++ /dev/null @@ -1,862 +0,0 @@ - - - - - - - - - - - image/svg+xml - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/luna.svg b/plasma/desktoptheme/Seven-Black/widgets/luna.svg deleted file mode 100755 index 9f938623..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/luna.svg +++ /dev/null @@ -1,1482 +0,0 @@ - - - - - - - image/svg+xml - - - Luna.svgz (Full Vector) - 2009 - - - J.M.Todaro - - - - - J.M.Todaro - - - - - http://kde-look.org - - - A fully vectorized version of luna.svgz created for use with the Luna Plasmoid. - - - Jose Alcalá - Project Manager & Concept -Dominique Bribanick - Style Concept -Jeremy M. Todaro - Artwork & Layout - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Master copy(The rest are clones.) - Luna.svgz (Full Vector) - Jose Alcalá - Project Manager & ConceptDominique Bribanick - Style ConceptJeremy M. Todaro - Artwork & Layout - - - - - - - - - Artistic License 2.0 2009 - diff --git a/plasma/desktoptheme/Seven-Black/widgets/microblog.svg b/plasma/desktoptheme/Seven-Black/widgets/microblog.svg deleted file mode 100755 index 02b5a055..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/microblog.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - Malcer - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/mock przelacznik pulpitow.svg b/plasma/desktoptheme/Seven-Black/widgets/mock przelacznik pulpitow.svg deleted file mode 100755 index 19e2ee59..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/mock przelacznik pulpitow.svg +++ /dev/null @@ -1,749 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/onoff_switch.svg b/plasma/desktoptheme/Seven-Black/widgets/onoff_switch.svg deleted file mode 100755 index 2f1f9414..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/onoff_switch.svg +++ /dev/null @@ -1,708 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/panel-background_original.svg b/plasma/desktoptheme/Seven-Black/widgets/panel-background_original.svg deleted file mode 100755 index b0065849..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/panel-background_original.svg +++ /dev/null @@ -1,1848 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - image/svg+xml - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/plasma/desktoptheme/Seven-Black/widgets/panelspacer-separator.svg b/plasma/desktoptheme/Seven-Black/widgets/panelspacer-separator.svg deleted file mode 100755 index e70671dc..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/panelspacer-separator.svg +++ /dev/null @@ -1,8983 +0,0 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/picture-frame-default.svg b/plasma/desktoptheme/Seven-Black/widgets/picture-frame-default.svg deleted file mode 100755 index 2ca69d67..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/picture-frame-default.svg +++ /dev/null @@ -1,3946 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - Under the See - 2006-07-11 - - - it-s - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/pownce.svg b/plasma/desktoptheme/Seven-Black/widgets/pownce.svg deleted file mode 100755 index f0448566..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/pownce.svg +++ /dev/null @@ -1,475 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The things that im doingare not for you to know....... - There is no reson to get excited - I see offline people - Wow plasma rules so much i think im faling in love with a piece of softaware.... - - - - - - - - - Mike - Andre Walssov... - 00:13 - - 04:34 - - Me mysef and I - 09:19 - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/previewer-16.svg b/plasma/desktoptheme/Seven-Black/widgets/previewer-16.svg deleted file mode 100755 index f8e4e55e..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/previewer-16.svg +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/previewer-22.svg b/plasma/desktoptheme/Seven-Black/widgets/previewer-22.svg deleted file mode 100755 index a1aac03a..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/previewer-22.svg +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/sliderb.svg b/plasma/desktoptheme/Seven-Black/widgets/sliderb.svg deleted file mode 100755 index f68b1244..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/sliderb.svg +++ /dev/null @@ -1,1264 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/system-lock-screen.svg b/plasma/desktoptheme/Seven-Black/widgets/system-lock-screen.svg deleted file mode 100755 index 4a7f5905..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/system-lock-screen.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/systemtray.svg b/plasma/desktoptheme/Seven-Black/widgets/systemtray.svg deleted file mode 100755 index cf1a81ea..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/systemtray.svg +++ /dev/null @@ -1,2354 +0,0 @@ - - - - - - - - image/svg+xml - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/tasksb.svg b/plasma/desktoptheme/Seven-Black/widgets/tasksb.svg deleted file mode 100755 index 01c3037b..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/tasksb.svg +++ /dev/null @@ -1,30486 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/toolbox-button.svg b/plasma/desktoptheme/Seven-Black/widgets/toolbox-button.svg deleted file mode 100755 index c3158d60..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/toolbox-button.svg +++ /dev/null @@ -1,832 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/toolbox.svg b/plasma/desktoptheme/Seven-Black/widgets/toolbox.svg deleted file mode 100755 index 3a7ea4f9..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/toolbox.svg +++ /dev/null @@ -1,1285 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/twitter.svg b/plasma/desktoptheme/Seven-Black/widgets/twitter.svg deleted file mode 100755 index a926d120..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/twitter.svg +++ /dev/null @@ -1,474 +0,0 @@ - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The things that im doingare not for you to know....... - There is no reson to get excited - I see offline people - Wow plasma rules so much i think im faling in love with a piece of softaware.... - - - - - - - - - Mike - Andre Walssov... - 00:13 - - 04:34 - - Me mysef and I - 09:19 - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/viewitem.svg.bak b/plasma/desktoptheme/Seven-Black/widgets/viewitem.svg.bak deleted file mode 100755 index d9580a2d..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/viewitem.svg.bak +++ /dev/null @@ -1,2285 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plasma/desktoptheme/Seven-Black/widgets/viewitemb.svg b/plasma/desktoptheme/Seven-Black/widgets/viewitemb.svg deleted file mode 100755 index 125e133b..00000000 --- a/plasma/desktoptheme/Seven-Black/widgets/viewitemb.svg +++ /dev/null @@ -1,1419 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 529d73a9e5821247ec359d4ec10aba9615ec39fc Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 18 Jun 2025 23:07:04 +0200 Subject: [PATCH 002/222] Update INSTALL.md --- INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index cba9f3ed..6c81b015 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -27,7 +27,7 @@ KSysGuard has been officially deprecated by KDE, however an unofficial [port](ht Required Packages: ```bash -dnf install plasma-workspace-devel 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 +dnf install plasma-workspace-devel 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 ``` ## Compiling From c567a81b7d40b21f70282a6a724fcf15e67e5c38 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 18 Jun 2025 23:29:49 +0200 Subject: [PATCH 003/222] Update README.md --- README.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9c91dac5..b80353bc 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,21 @@ # AEROTHEMEPLASMA FOR KDE 6 -## WARNING: This version is very early WIP and is not fully finished. Proceed with caution. - ## Microsoft® Windows™ is a registered trademark of Microsoft® Corporation. This name is used for referential use only, and does not aim to usurp copyrights from Microsoft. Microsoft Ⓒ 2025 All rights reserved. All resources belong to Microsoft Corporation. ## Introduction This is a project which aims to recreate the look and feel of Windows 7 as much as possible on KDE Plasma, whilst adapting the design to fit in with modern features provided by KDE Plasma and Linux. -It is still in heavy development and testing. ATP has been tested on: -1. Arch Linux x64 and other Arch derivatives -2. Plasma 6.3.4, KDE Frameworks 6.12.0, Qt 6.9.0 -3. 96 DPI scaling, multi monitor -4. X11, Wayland* +ATP is in constant development and testing, it has been tested on: + +- Arch Linux x64 and other Arch derivatives +- Plasma 6.3.4, KDE Frameworks 6.12.0, Qt 6.9.0 +- 96 DPI scaling, multi monitor +- X11, Wayland* *AeroThemePlasma currently lacks full Wayland support, which may result in Wayland-specific issues. -## This release is meant for early adopters, debuggers and developers alike. This port lacks certain components which still need to be ported over to KDE Plasma 6. I am not responsible for broken systems, please proceed with caution. +## This project overwrites a small number of [system](https://gitgud.io/wackyideas/aerothemeplasma/-/tree/master/misc/defaulttooltip) [files](https://gitgud.io/wackyideas/aerothemeplasma/-/tree/master/misc/uac-polkitagent), it's always recommended to make backups of your system just in case. I am not responsible for broken systems, please proceed with caution. The Plasma 5 version of ATP is available as a tag in this repository, however it is unmaintained and no longer supported. From a0b78a968d280f24a2bbad08f17cea883592bfe6 Mon Sep 17 00:00:00 2001 From: furkrn Date: Thu, 19 Jun 2025 11:59:10 +0300 Subject: [PATCH 004/222] Edit INSTALL.md --- INSTALL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index 6c81b015..d930ad73 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -27,7 +27,7 @@ KSysGuard has been officially deprecated by KDE, however an unofficial [port](ht Required Packages: ```bash -dnf install plasma-workspace-devel 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 +dnf install plasma-workspace-devel 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 ``` ## Compiling From 7e71eba278b488504c7f14778f170118b319ac6e Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 15:21:40 +0200 Subject: [PATCH 005/222] Fix system tray on Plasma 6.4 --- .../contents/applet/CompactApplet.qml | 0 .../contents/config/config.qml | 0 .../contents/config/main.xml | 0 .../contents/ui/ConfigEntries.qml | 0 .../contents/ui/ConfigGeneral.qml | 0 .../contents/ui/CurrentItemHighLight.qml | 0 .../contents/ui/ExpandedRepresentation.qml | 0 .../contents/ui/ExpanderArrow.qml | 0 .../contents/ui/HiddenItemsView.qml | 0 .../contents/ui/PlasmoidPopupsContainer.qml | 0 .../contents/ui/ScrollView.qml | 0 .../contents/ui/SystemTrayState.qml | 0 .../contents/ui/ToolButton.qml | 0 .../contents/ui/items/AbstractItem.qml | 0 .../contents/ui/items/ItemLoader.qml | 0 .../contents/ui/items/PlasmoidItem.qml | 0 .../contents/ui/items/PulseAnimation.qml | 0 .../contents/ui/items/StatusNotifierItem.qml | 0 .../contents/ui/main.qml | 0 .../contents/ui/svgs/button.svgz | Bin .../contents/ui/svgs/icons.svg | 0 .../contents/ui/svgs/systray.svg | 0 .../contents/ui/svgs/tabbar.svgz | Bin .../metadata.json | 2 +- 24 files changed, 1 insertion(+), 1 deletion(-) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/applet/CompactApplet.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/config/config.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/config/main.xml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/ConfigEntries.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/ConfigGeneral.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/CurrentItemHighLight.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/ExpandedRepresentation.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/ExpanderArrow.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/HiddenItemsView.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/PlasmoidPopupsContainer.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/ScrollView.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/SystemTrayState.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/ToolButton.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/items/AbstractItem.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/items/ItemLoader.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/items/PlasmoidItem.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/items/PulseAnimation.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/items/StatusNotifierItem.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/main.qml (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/svgs/button.svgz (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/svgs/icons.svg (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/svgs/systray.svg (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/contents/ui/svgs/tabbar.svgz (100%) rename plasma/plasmoids/{org.kde.plasma.private.systemtray => org.kde.plasma.systemtray}/metadata.json (99%) diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/applet/CompactApplet.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/applet/CompactApplet.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/applet/CompactApplet.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/applet/CompactApplet.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/config/config.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/config/config.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/config/config.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/config/config.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/config/main.xml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/config/main.xml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/config/main.xml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/config/main.xml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ConfigEntries.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ConfigEntries.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ConfigEntries.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ConfigEntries.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ConfigGeneral.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ConfigGeneral.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ConfigGeneral.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ConfigGeneral.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/CurrentItemHighLight.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/CurrentItemHighLight.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/CurrentItemHighLight.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/CurrentItemHighLight.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ExpandedRepresentation.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpandedRepresentation.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ExpandedRepresentation.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpandedRepresentation.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ExpanderArrow.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpanderArrow.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ExpanderArrow.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpanderArrow.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/HiddenItemsView.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/HiddenItemsView.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/HiddenItemsView.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/HiddenItemsView.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/PlasmoidPopupsContainer.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/PlasmoidPopupsContainer.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/PlasmoidPopupsContainer.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/PlasmoidPopupsContainer.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ScrollView.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ScrollView.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ScrollView.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ScrollView.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/SystemTrayState.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/SystemTrayState.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/SystemTrayState.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/SystemTrayState.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ToolButton.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ToolButton.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/ToolButton.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ToolButton.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/items/AbstractItem.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/AbstractItem.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/items/AbstractItem.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/AbstractItem.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/items/ItemLoader.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/ItemLoader.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/items/ItemLoader.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/ItemLoader.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/items/PlasmoidItem.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/PlasmoidItem.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/items/PlasmoidItem.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/PlasmoidItem.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/items/PulseAnimation.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/PulseAnimation.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/items/PulseAnimation.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/PulseAnimation.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/items/StatusNotifierItem.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/StatusNotifierItem.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/items/StatusNotifierItem.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/StatusNotifierItem.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/main.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/main.qml rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/svgs/button.svgz b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/svgs/button.svgz similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/svgs/button.svgz rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/svgs/button.svgz diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/svgs/icons.svg b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/svgs/icons.svg similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/svgs/icons.svg rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/svgs/icons.svg diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/svgs/systray.svg b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/svgs/systray.svg similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/svgs/systray.svg rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/svgs/systray.svg diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/svgs/tabbar.svgz b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/svgs/tabbar.svgz similarity index 100% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/contents/ui/svgs/tabbar.svgz rename to plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/svgs/tabbar.svgz diff --git a/plasma/plasmoids/org.kde.plasma.private.systemtray/metadata.json b/plasma/plasmoids/org.kde.plasma.systemtray/metadata.json similarity index 99% rename from plasma/plasmoids/org.kde.plasma.private.systemtray/metadata.json rename to plasma/plasmoids/org.kde.plasma.systemtray/metadata.json index 1da07543..e6ad7f14 100644 --- a/plasma/plasmoids/org.kde.plasma.private.systemtray/metadata.json +++ b/plasma/plasmoids/org.kde.plasma.systemtray/metadata.json @@ -62,7 +62,7 @@ "desktop" ], "Icon": "preferences-desktop-notification", - "Id": "org.kde.plasma.private.systemtray", + "Id": "org.kde.plasma.systemtray", "License": "GPL-2.0+", "Name": "System Tray", "Name[af]": "Stelsellaai", From 5460ae7a348a04cecef7387ecd934888475e1604 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 15:32:17 +0200 Subject: [PATCH 006/222] Fix SevenTasks for Plasma 6.4 --- .../contents/ui/GroupThumbnails.qml | 1 + .../contents/ui/Task.qml | 7 ++--- .../contents/ui/TasksMenuItem.qml | 30 +++++++++++++++++++ .../contents/ui/code/tools.js | 2 +- .../contents/ui/main.qml | 26 ++++++++++++---- 5 files changed, 56 insertions(+), 10 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml index 12a56925..9914f78d 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml @@ -84,6 +84,7 @@ MouseArea { else { for(var i = 0; i < thumbnailList.count; i++) { thumbnailItem = itemAtIndex(i); + console.log(thumbnailItem.implicitHeight); if(thumbnailItem.implicitHeight >= thumbnailList.maxThumbnailHeight) thumbnailList.maxThumbnailItem = thumbnailItem; } diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml index 619c06e6..9e4a6c59 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml @@ -12,7 +12,7 @@ import org.kde.ksvg 1.0 as KSvg import org.kde.plasma.extras 2.0 as PlasmaExtras import org.kde.plasma.components 3.0 as PlasmaComponents3 import org.kde.kirigami 2.20 as Kirigami -import org.kde.plasma.private.taskmanager 0.1 as TaskManagerApplet +import org.kde.plasma.private.taskmanager as TaskManagerApplet import org.kde.plasma.plasmoid 2.0 import Qt5Compat.GraphicalEffects @@ -264,8 +264,7 @@ PlasmaCore.ToolTipArea { onHighlightedChanged: { // ensure it doesn't get stuck with a window highlighted - backend.cancelHighlightWindows(); - + tasksRoot.cancelHighlightWindows(); } onPidChanged: updateAudioStreams({delay: false}) @@ -645,7 +644,7 @@ TaskManagerApplet.SmartLauncherItem { } } } - backend.cancelHighlightWindows(); + tasksRoot.cancelHighlightWindows(); } } Rectangle { diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/TasksMenuItem.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/TasksMenuItem.qml index 5b03eeb5..b480214d 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/TasksMenuItem.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/TasksMenuItem.qml @@ -29,6 +29,15 @@ Item { property bool selected: false property QtObject wrapperItem: tasksMenuItem.parent + onSelectedChanged: { + if(selected) { + toolTipTimer.start() + } else { + toolTipTimer.stop(); + toolTip.hideToolTip(); + } + } + KSvg.FrameSvgItem { id: texture z: -1 @@ -38,6 +47,26 @@ Item { visible: (tasksMA.containsMouse || selected) && parent.enabled opacity: selected ? 1.0 : 0.6 } + Timer { + id: toolTipTimer + interval: Kirigami.Units.longDuration*2 + onTriggered: { + toolTip.showToolTip(); + } + } + PlasmaCore.ToolTipArea { + id: toolTip + + anchors { + fill: parent + } + + active: menuTitle.truncated + interactive: false + + mainText: menuTitle.text + } + MouseArea { id: tasksMA z: 1 @@ -53,6 +82,7 @@ Item { onPositionChanged: { tasksMenu.setCurrentItem(wrapperItem); } + onEntered: { tasksMenu.setCurrentItem(wrapperItem); //tasksMenu.clearIndices(); diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/code/tools.js b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/code/tools.js index 7a5b5a9e..ec0b360c 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/code/tools.js +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/code/tools.js @@ -7,7 +7,7 @@ .pragma library -.import org.kde.taskmanager 0.1 as TaskManager +.import org.kde.taskmanager as TaskManager .import org.kde.plasma.core as PlasmaCore // Needed by TaskManager // Can't be `let`, or else QML counterpart won't be able to assign to it. diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/main.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/main.qml index 2db0d595..1dba0c0b 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/main.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/main.qml @@ -16,8 +16,8 @@ import org.kde.plasma.private.mpris as Mpris import org.kde.kirigami 2.20 as Kirigami import org.kde.kitemmodels as KItemModels -import org.kde.taskmanager 0.1 as TaskManager -import org.kde.plasma.private.taskmanager 0.1 as TaskManagerApplet +import org.kde.taskmanager as TaskManager +import org.kde.plasma.private.taskmanager as TaskManagerApplet import org.kde.plasma.workspace.dbus as DBus import org.kde.plasma.plasma5support as Plasma5Support @@ -180,8 +180,25 @@ PlasmoidItem { property Item dragItem: null signal requestLayout - signal windowsHovered(variant winIds, bool hovered) - signal activateWindowView(variant winIds) + + function windowsHovered(winIds: var, hovered: bool): DBus.DBusPendingReply { + if (!Plasmoid.configuration.highlightWindows) { + return; + } + return DBus.SessionBus.asyncCall({service: "org.kde.KWin.HighlightWindow", path: "/org/kde/KWin/HighlightWindow", iface: "org.kde.KWin.HighlightWindow", member: "highlightWindows", arguments: [hovered ? winIds : []], signature: "(as)"}); + } + + function cancelHighlightWindows(): DBus.DBusPendingReply { + return DBus.SessionBus.asyncCall({service: "org.kde.KWin.HighlightWindow", path: "/org/kde/KWin/HighlightWindow", iface: "org.kde.KWin.HighlightWindow", member: "highlightWindows", arguments: [[]], signature: "(as)"}); + } + + function activateWindowView(winIds: var): DBus.DBusPendingReply { + if (!effectWatcher.registered) { + return; + } + cancelHighlightWindows(); + return DBus.SessionBus.asyncCall({service: "org.kde.KWin.Effect.WindowView1", path: "/org/kde/KWin/Effect/WindowView1", iface: "org.kde.KWin.Effect.WindowView1", member: "activate", arguments: [winIds.map(s => String(s))], signature: "(as)"}); + } Timer { id: syncDelay @@ -314,7 +331,6 @@ PlasmoidItem { property TaskManagerApplet.Backend backend: TaskManagerApplet.Backend { id: backend - highlightWindows: Plasmoid.configuration.highlightWindows onAddLauncher: { tasks.addLauncher(url); From 160d548bbb60896017e5a6dd00569b3285e5c6f5 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 18:24:28 +0200 Subject: [PATCH 007/222] Add kwin-x11 and kwin-wayland as symlink directories --- INSTALL.md | 16 +++++++++++++++- install_kwin_components.sh | 4 ++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/INSTALL.md b/INSTALL.md index 6c81b015..6010404d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -20,6 +20,13 @@ Required packages: pacman -S cmake extra-cmake-modules ninja qt6-virtualkeyboard qt6-multimedia qt6-5compat plasma-wayland-protocols plasma5support kvantum base-devel ``` +### Note: + +Since Plasma 6.4, the X11 session has been separated from the main codebase. On Arch Linux, additional dependencies for X11 include: + +- `kwin-x11` +- `plasma-x11-session` + KSysGuard has been officially deprecated by KDE, however an unofficial [port](https://github.com/zvova7890/ksysguard6) exists for Qt6, which can be installed using the [AUR](https://aur.archlinux.org/packages/ksysguard6-git) package on Arch-based distros. ### Fedora KDE @@ -87,7 +94,14 @@ $ chmod +x install_kwin_components.sh && ./install_kwin_components.sh This section relates to the directories found in the `kwin` folder. 1. Move `effects`, `tabbox`, `outline`, `scripts` to `~/.local/share/kwin`. -2. In System Settings, apply the following settings: +2. Run the following inside `~/.local/share/`: + +```bash +$ ln -s kwin kwin-x11 +$ ln -s kwin kwin-wayland +``` + +3. In System Settings, apply the following settings: - In Window Behavior -> Titlebar Actions: - Mouse wheel: Do nothing diff --git a/install_kwin_components.sh b/install_kwin_components.sh index 1a7f1b26..834aa094 100644 --- a/install_kwin_components.sh +++ b/install_kwin_components.sh @@ -46,6 +46,10 @@ KWIN_DIR="$HOME/.local/share/kwin" cp -r "$PWD/kwin/outline" "$KWIN_DIR" echo "Done." +echo "Making kwin-x11 and kwin-wayland symlinks..." +ln -s kwin kwin-x11 +ln -s kwin kwin-wayland +echo "Done." From ba121ce02332918514277ede25552f11af58a21d Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 18:32:43 +0200 Subject: [PATCH 008/222] Fix AeroGlassBlur for Plasma 6.4 --- .../kde-effects-aeroglassblur/CMakeLists.txt | 14 +++++++++++--- .../src/CMakeLists.txt | 19 ++++++++++++++----- .../kde-effects-aeroglassblur/src/blur.cpp | 9 +++++++-- .../src/kcm/CMakeLists.txt | 6 +++++- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/CMakeLists.txt b/kwin/effects_cpp/kde-effects-aeroglassblur/CMakeLists.txt index 8c17ecd0..2e9ed51a 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/CMakeLists.txt +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/CMakeLists.txt @@ -20,6 +20,8 @@ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DQT_NO_DEBUG_OUTPUT") find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) +option(KWIN_BUILD_WAYLAND "Build with Wayland support" OFF) + include(FeatureSummary) include(KDEInstallDirs) include(KDECMakeSettings) @@ -64,9 +66,15 @@ find_package(epoxy REQUIRED) find_package(X11 REQUIRED) find_package(XCB REQUIRED COMPONENTS XCB) -find_package(KWin REQUIRED COMPONENTS - kwineffects -) +if (KWIN_BUILD_WAYLAND) + find_package(KWin REQUIRED COMPONENTS + kwineffects + ) +else() + find_package(KWinX11 REQUIRED COMPONENTS + kwineffects + ) +endif() find_package(KDecoration3 REQUIRED) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/CMakeLists.txt b/kwin/effects_cpp/kde-effects-aeroglassblur/src/CMakeLists.txt index 9e8f0ab1..085a1412 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/CMakeLists.txt +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/CMakeLists.txt @@ -11,14 +11,23 @@ kconfig_add_kcfg_files(aeroglassblur_SOURCES ) add_library(aeroglassblur MODULE ${aeroglassblur_SOURCES}) + + target_link_libraries(aeroglassblur PRIVATE - KWin::kwin - KF6::ConfigGui - KDecoration3::KDecoration KF6::Svg - ) +if (KWIN_BUILD_WAYLAND) + target_link_libraries(aeroglassblur PRIVATE + KWin::kwin + ) + install(TARGETS aeroglassblur DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/plugins) +else() + target_link_libraries(aeroglassblur PRIVATE + KWinX11::kwin + ) + install(TARGETS aeroglassblur DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin-x11/effects/plugins) +endif() + -install(TARGETS aeroglassblur DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/plugins) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 0af17a1c..19b64943 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -812,7 +812,7 @@ void BlurEffect::ensureReflectTexture() QImage textureImage(m_texturePath); if(effects->waylandDisplay()) { - textureImage.mirror(true, false); + textureImage.flip(Qt::Horizontal); } m_reflectPass.reflectTexture = GLTexture::upload(textureImage); @@ -1132,6 +1132,11 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi float g = m_aeroColorG; float b = m_aeroColorB; + if(w->isOnScreenDisplay()) + { + bb *= 0.66; + } + AeroPasses selectedPass = AeroPasses::AERO; // A window is maximized, use opaque colorization @@ -1303,7 +1308,7 @@ bool BlurEffect::treatAsActive(const EffectWindow *w) { QString windowClass = w->windowClass().split(' ')[1]; if (m_basicColorization && (w->isDock() || w->caption() == "sevenstart-menurepresentation")) return false; - return (w->isFullScreen() || windowClass == "plasmashell" || windowClass == "kwin" || w == effects->activeWindow()); + return (w->isOnScreenDisplay() || w->isFullScreen() || windowClass == "plasmashell" || windowClass == "kwin" || w == effects->activeWindow()); } bool BlurEffect::isActive() const diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/CMakeLists.txt b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/CMakeLists.txt index 73af8fbf..78177261 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/CMakeLists.txt +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/CMakeLists.txt @@ -25,4 +25,8 @@ target_link_libraries(kwin_aeroglassblur_config KF6::WindowSystem ) -install(TARGETS kwin_aeroglassblur_config DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/configs) +if (KWIN_BUILD_WAYLAND) + install(TARGETS kwin_aeroglassblur_config DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/configs) +else() + install(TARGETS kwin_aeroglassblur_config DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin-x11/effects/configs) +endif() From 14a2f129cbe7e249143d24f8e9d8161fa9309269 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 18:33:00 +0200 Subject: [PATCH 009/222] Fix Aero Glide for Plasma 6.4 --- kwin/effects_cpp/aeroglide/CMakeLists.txt | 18 +++++++++++----- kwin/effects_cpp/aeroglide/src/CMakeLists.txt | 21 +++++++++++++++---- kwin/effects_cpp/aeroglide/src/glide.cpp | 8 +++---- kwin/effects_cpp/aeroglide/src/glide.h | 8 +++---- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/kwin/effects_cpp/aeroglide/CMakeLists.txt b/kwin/effects_cpp/aeroglide/CMakeLists.txt index 4551e59f..b21345a5 100755 --- a/kwin/effects_cpp/aeroglide/CMakeLists.txt +++ b/kwin/effects_cpp/aeroglide/CMakeLists.txt @@ -20,6 +20,8 @@ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DQT_NO_DEBUG_OUTPUT") find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) +option(KWIN_BUILD_WAYLAND "Build with Wayland support" OFF) + include(FeatureSummary) include(KDEInstallDirs) include(KDECMakeSettings) @@ -36,9 +38,9 @@ find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Xml ) -set(KWIN_INCLUDE "/usr/include/kwin") +#set(KWIN_INCLUDE "/usr/include/kwin") set(KPLUGINFACTORY_INCLUDE "/usr/include/KF6/KCoreAddons") -include_directories(${Qt6Widgets_INCLUDE_DIRS} ${Qt6Network_INCLUDE_DIRS} ${Qt6OpenGL_INCLUDE_DIRS} ${Qt6Xml_INCLUDE_DIRS} ${KWIN_INCLUDE} ${KPLUGINFACTORY_INCLUDE}) +include_directories(${Qt6Widgets_INCLUDE_DIRS} ${Qt6Network_INCLUDE_DIRS} ${Qt6OpenGL_INCLUDE_DIRS} ${Qt6Xml_INCLUDE_DIRS} ${KPLUGINFACTORY_INCLUDE}) add_definitions(${Qt6Widgets_DEFINITIONS}) @@ -67,9 +69,15 @@ find_package(epoxy REQUIRED) find_package(X11 REQUIRED) find_package(XCB REQUIRED COMPONENTS XCB) -find_package(KWin REQUIRED COMPONENTS - kwineffects -) +if (KWIN_BUILD_WAYLAND) + find_package(KWin REQUIRED COMPONENTS + kwineffects + ) +else() + find_package(KWinX11 REQUIRED COMPONENTS + kwineffects + ) +endif() find_package(KDecoration3 REQUIRED) diff --git a/kwin/effects_cpp/aeroglide/src/CMakeLists.txt b/kwin/effects_cpp/aeroglide/src/CMakeLists.txt index 9ccc8017..ff72021a 100644 --- a/kwin/effects_cpp/aeroglide/src/CMakeLists.txt +++ b/kwin/effects_cpp/aeroglide/src/CMakeLists.txt @@ -14,11 +14,19 @@ add_library(aeroglide MODULE ${aeroglide_SOURCES}) #kwin_add_builtin_effect(glide ${glide_SOURCES}) target_link_libraries(aeroglide PRIVATE - kwin - KF6::CoreAddons KF6::ConfigGui ) +if (KWIN_BUILD_WAYLAND) + target_link_libraries(aeroglide PRIVATE + KWin::kwin + ) +else() + target_link_libraries(aeroglide PRIVATE + KWinX11::kwin + ) +endif() + ####################################### # Config @@ -39,5 +47,10 @@ target_link_libraries(kwin_aeroglide_config #KWinEffectsInterface ) -install(TARGETS aeroglide DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/plugins) -install(TARGETS kwin_aeroglide_config DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/configs) +if (KWIN_BUILD_WAYLAND) + install(TARGETS aeroglide DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/plugins) + install(TARGETS kwin_aeroglide_config DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/configs) +else() + install(TARGETS aeroglide DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin-x11/effects/plugins) + install(TARGETS kwin_aeroglide_config DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin-x11/effects/configs) +endif() diff --git a/kwin/effects_cpp/aeroglide/src/glide.cpp b/kwin/effects_cpp/aeroglide/src/glide.cpp index 08728de4..4bc614b9 100644 --- a/kwin/effects_cpp/aeroglide/src/glide.cpp +++ b/kwin/effects_cpp/aeroglide/src/glide.cpp @@ -16,10 +16,10 @@ // KConfigSkeleton #include "glideconfig.h" -#include -#include -#include -#include +#include "core/rendertarget.h" +#include "core/renderviewport.h" +#include "effect/effecthandler.h" +#include "scene/windowitem.h" // Qt #include diff --git a/kwin/effects_cpp/aeroglide/src/glide.h b/kwin/effects_cpp/aeroglide/src/glide.h index adfcbd82..5255ae60 100644 --- a/kwin/effects_cpp/aeroglide/src/glide.h +++ b/kwin/effects_cpp/aeroglide/src/glide.h @@ -13,10 +13,10 @@ #pragma once // kwineffects -#include -#include -#include -#include +#include "effect/effectwindow.h" +#include "effect/offscreeneffect.h" +#include "effect/timeline.h" +#include "scene/item.h" #include From 04545ac6e1537ff5748610153cb0825fa75603ac Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 18:51:19 +0200 Subject: [PATCH 010/222] Fix SMOD snap for Plasma 6.4 --- .../kwin-effect-smodsnap-v2/CMakeLists.txt | 28 ++++++++++++++++++- .../kwin-effect-smodsnap-v2/src/smodsnap.h | 14 +++++----- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/kwin/effects_cpp/kwin-effect-smodsnap-v2/CMakeLists.txt b/kwin/effects_cpp/kwin-effect-smodsnap-v2/CMakeLists.txt index e5838072..057f8bc0 100644 --- a/kwin/effects_cpp/kwin-effect-smodsnap-v2/CMakeLists.txt +++ b/kwin/effects_cpp/kwin-effect-smodsnap-v2/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.16.0) project(effect_smodsnap) option(BUILD_KF6 "Build for KDE Plasma 6" OFF) +option(KWIN_BUILD_WAYLAND "Build with Wayland support" OFF) if (BUILD_KF6) set(QT_MAJOR_VERSION "6") @@ -54,7 +55,15 @@ find_package(KWinEffects REQUIRED find_package(XCB REQUIRED XCB) find_package(epoxy REQUIRED) else () -find_package(KWin REQUIRED kwineffects) +if (KWIN_BUILD_WAYLAND) + find_package(KWin REQUIRED COMPONENTS + kwineffects + ) +else() + find_package(KWinX11 REQUIRED COMPONENTS + kwineffects + ) +endif() endif () pkg_check_modules(smoddecoration REQUIRED IMPORTED_TARGET smoddecoration) @@ -98,16 +107,33 @@ target_link_libraries(${TARGET_NAME} KWinEffects::kwinglutils ) else () + +if (KWIN_BUILD_WAYLAND) target_link_libraries(${TARGET_NAME} PRIVATE KWin::kwin ) +else() +target_link_libraries(${TARGET_NAME} + PRIVATE + KWinX11::kwin +) +endif() endif () +if (KWIN_BUILD_WAYLAND) install( TARGETS ${TARGET_NAME} DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/plugins ) +else() +install( + TARGETS + ${TARGET_NAME} + DESTINATION + ${KDE_INSTALL_PLUGINDIR}/kwin-x11/effects/plugins +) +endif() diff --git a/kwin/effects_cpp/kwin-effect-smodsnap-v2/src/smodsnap.h b/kwin/effects_cpp/kwin-effect-smodsnap-v2/src/smodsnap.h index 380c14a6..f4d8f03c 100644 --- a/kwin/effects_cpp/kwin-effect-smodsnap-v2/src/smodsnap.h +++ b/kwin/effects_cpp/kwin-effect-smodsnap-v2/src/smodsnap.h @@ -13,13 +13,13 @@ #define IS_KF6 QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #if IS_KF6 -#include -#include -#include -#include -#include -#include -#include +#include "effect/effecthandler.h" +#include "effect/effectwindow.h" +#include "opengl/glshadermanager.h" +#include "opengl/glshader.h" +#include "opengl/gltexture.h" +#include "core/renderviewport.h" +#include "core/pixelgrid.h" #else #include #include From 91a6f687b2679fb60d17cb45afd38112632baf0f Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 18:51:31 +0200 Subject: [PATCH 011/222] Fix SMOD Glow for Plasma 6.4 --- kwin/effects_cpp/smodglow/CMakeLists.txt | 30 ++++++++++++++++++++---- kwin/effects_cpp/smodglow/src/smodglow.h | 16 ++++++------- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/kwin/effects_cpp/smodglow/CMakeLists.txt b/kwin/effects_cpp/smodglow/CMakeLists.txt index 494a0a21..ad2775c9 100644 --- a/kwin/effects_cpp/smodglow/CMakeLists.txt +++ b/kwin/effects_cpp/smodglow/CMakeLists.txt @@ -4,6 +4,8 @@ project(effect_smodglow) option(BUILD_KF6 "Build for KDE Plasma 6" OFF) +option(KWIN_BUILD_WAYLAND "Build with Wayland support" OFF) + if (BUILD_KF6) set(QT_MAJOR_VERSION "6") set(TARGET_NAME "smodglow") @@ -54,7 +56,13 @@ find_package(KWinEffects REQUIRED find_package(XCB REQUIRED XCB) find_package(epoxy REQUIRED) else () -find_package(KWin REQUIRED kwineffects) + +if(KWIN_BUILD_WAYLAND) + find_package(KWin REQUIRED kwineffects) +else() + find_package(KWinX11 REQUIRED kwineffects) +endif() + endif () find_package(KDecoration3 REQUIRED) @@ -109,15 +117,27 @@ target_link_libraries(${TARGET_NAME} KWinEffects::kwinglutils ) else () -target_link_libraries(${TARGET_NAME} - PRIVATE - KWin::kwin -) + +if(KWIN_BUILD_WAYLAND) + target_link_libraries(${TARGET_NAME} PRIVATE KWin::kwin) +else() + target_link_libraries(${TARGET_NAME} PRIVATE KWinX11::kwin) +endif() + endif () +if(KWIN_BUILD_WAYLAND) install( TARGETS ${TARGET_NAME} DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/plugins ) +else() +install( + TARGETS + ${TARGET_NAME} + DESTINATION + ${KDE_INSTALL_PLUGINDIR}/kwin-x11/effects/plugins +) +endif() diff --git a/kwin/effects_cpp/smodglow/src/smodglow.h b/kwin/effects_cpp/smodglow/src/smodglow.h index c34cf6aa..d05dd469 100644 --- a/kwin/effects_cpp/smodglow/src/smodglow.h +++ b/kwin/effects_cpp/smodglow/src/smodglow.h @@ -7,14 +7,14 @@ #include #ifdef BUILD_KF6 -#include -#include -#include -#include -#include -#include -#include -#include +#include "window.h" +#include "effect/effecthandler.h" +#include "effect/effectwindow.h" +#include "opengl/glshadermanager.h" +#include "opengl/glshader.h" +#include "opengl/gltexture.h" +#include "core/renderviewport.h" +#include "core/pixelgrid.h" #else #include #include From bb291bee1276ff333fbd015ca082b9d09fc4a299 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 20:00:51 +0200 Subject: [PATCH 012/222] Fix passive launch feedback for Plasma 6.4 --- kwin/effects_cpp/startupfeedback/CMakeLists.txt | 17 ++++++++++++----- .../startupfeedback/src/CMakeLists.txt | 16 +++++++++++++--- .../startupfeedback/src/startupfeedback.cpp | 16 ++++++++-------- .../startupfeedback/src/startupfeedback.h | 16 ++++++++-------- 4 files changed, 41 insertions(+), 24 deletions(-) diff --git a/kwin/effects_cpp/startupfeedback/CMakeLists.txt b/kwin/effects_cpp/startupfeedback/CMakeLists.txt index d8681aa5..caf65fc0 100644 --- a/kwin/effects_cpp/startupfeedback/CMakeLists.txt +++ b/kwin/effects_cpp/startupfeedback/CMakeLists.txt @@ -20,6 +20,8 @@ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DQT_NO_DEBUG_OUTPUT") find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) +option(KWIN_BUILD_WAYLAND "Build with Wayland support" OFF) + include(FeatureSummary) include(KDEInstallDirs) include(KDECMakeSettings) @@ -36,11 +38,10 @@ find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Xml ) -set(KWIN_INCLUDE "/usr/include/kwin") set(KPLUGINFACTORY_INCLUDE "/usr/include/KF6/KCoreAddons") set(KCONFIGCORE_INCLUDE "/usr/include/KF6/KConfigCore") include_directories(${Qt6Widgets_INCLUDE_DIRS} ${Qt6Network_INCLUDE_DIRS} ${Qt6OpenGL_INCLUDE_DIRS} ${Qt6Xml_INCLUDE_DIRS} - ${KWIN_INCLUDE} ${KPLUGINFACTORY_INCLUDE} ${KCONFIGCORE_INCLUDE} ) + ${KPLUGINFACTORY_INCLUDE} ${KCONFIGCORE_INCLUDE} ) add_definitions(${Qt6Widgets_DEFINITIONS}) @@ -69,9 +70,15 @@ find_package(epoxy REQUIRED) find_package(X11 REQUIRED) find_package(XCB REQUIRED COMPONENTS XCB) -find_package(KWin REQUIRED COMPONENTS - kwineffects -) +if (KWIN_BUILD_WAYLAND) + find_package(KWin REQUIRED COMPONENTS + kwineffects + ) +else() + find_package(KWinX11 REQUIRED COMPONENTS + kwineffects + ) +endif() find_package(KDecoration3 REQUIRED) diff --git a/kwin/effects_cpp/startupfeedback/src/CMakeLists.txt b/kwin/effects_cpp/startupfeedback/src/CMakeLists.txt index 743a0375..2f45c8ef 100644 --- a/kwin/effects_cpp/startupfeedback/src/CMakeLists.txt +++ b/kwin/effects_cpp/startupfeedback/src/CMakeLists.txt @@ -10,13 +10,23 @@ set(startupfeedback_SOURCES add_library(launchfeedback MODULE ${startupfeedback_SOURCES}) #kwin_add_builtin_effect(startupfeedback ${startupfeedback_SOURCES}) -target_link_libraries(launchfeedback PRIVATE - KWin::kwin +target_link_libraries(launchfeedback PRIVATE KF6::ConfigCore KF6::ConfigGui Qt::DBus Qt::Widgets KF6::WindowSystem ) -install(TARGETS launchfeedback DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/plugins) +if(KWIN_BUILD_WAYLAND) + target_link_libraries(launchfeedback PRIVATE + KWin::kwin + ) + install(TARGETS launchfeedback DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin/effects/plugins) +else() + target_link_libraries(launchfeedback PRIVATE + KWinX11::kwin + ) + install(TARGETS launchfeedback DESTINATION ${KDE_INSTALL_PLUGINDIR}/kwin-x11/effects/plugins) +endif() + diff --git a/kwin/effects_cpp/startupfeedback/src/startupfeedback.cpp b/kwin/effects_cpp/startupfeedback/src/startupfeedback.cpp index aef4101e..3dd13947 100644 --- a/kwin/effects_cpp/startupfeedback/src/startupfeedback.cpp +++ b/kwin/effects_cpp/startupfeedback/src/startupfeedback.cpp @@ -26,14 +26,14 @@ #include #include // KWin -#include -#include -#include -#include -#include -#include -#include -#include +#include "core/output.h" +#include "core/pixelgrid.h" +#include "core/rendertarget.h" +#include "core/renderviewport.h" +#include "cursor.h" +#include "cursorsource.h" +#include "effect/effecthandler.h" +#include "opengl/glutils.h" // based on StartupId in KRunner by Lubos Lunak // SPDX-FileCopyrightText: 2001 Lubos Lunak diff --git a/kwin/effects_cpp/startupfeedback/src/startupfeedback.h b/kwin/effects_cpp/startupfeedback/src/startupfeedback.h index e7a4b653..407e0889 100644 --- a/kwin/effects_cpp/startupfeedback/src/startupfeedback.h +++ b/kwin/effects_cpp/startupfeedback/src/startupfeedback.h @@ -8,15 +8,15 @@ */ #pragma once -#include #include -#include -#include -#include -#include -#include -#include -#include +#include "effect/effect.h" +#include "cursor.h" +#include "cursorsource.h" +#include "scene/cursoritem.h" +#include "scene/imageitem.h" +#include "scene/scene.h" +#include "scene/itemrenderer.h" +#include "scene/workspacescene.h" #if KWIN_BUILD_X11 #include From a400d3ad4853645ce10c23877455b43fb8fe5396 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 20:27:02 +0200 Subject: [PATCH 013/222] Remove incorrect import version in SevenTasks --- .../io.gitgud.wackyideas.seventasks/contents/ui/ContextMenu.qml | 2 +- .../contents/ui/MouseHandler.qml | 2 +- .../contents/ui/PipeWireThumbnail.qml | 2 +- .../io.gitgud.wackyideas.seventasks/contents/ui/Task.qml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/ContextMenu.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/ContextMenu.qml index b6252f27..7b08c5d8 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/ContextMenu.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/ContextMenu.qml @@ -12,7 +12,7 @@ import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.core as PlasmaCore import org.kde.plasma.extras 2.0 as PlasmaExtras -import org.kde.taskmanager 0.1 as TaskManager +import org.kde.taskmanager as TaskManager import org.kde.plasma.private.mpris as Mpris import "code/layoutmetrics.js" as LayoutMetrics diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/MouseHandler.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/MouseHandler.qml index 918211cf..2c96fe82 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/MouseHandler.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/MouseHandler.qml @@ -6,7 +6,7 @@ import QtQuick -import org.kde.taskmanager 0.1 as TaskManager +import org.kde.taskmanager as TaskManager import org.kde.plasma.plasmoid 2.0 import "code/tools.js" as TaskTools diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/PipeWireThumbnail.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/PipeWireThumbnail.qml index 4fb56574..167f51ef 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/PipeWireThumbnail.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/PipeWireThumbnail.qml @@ -6,7 +6,7 @@ import QtQuick 2.15 import org.kde.pipewire 0.1 as PipeWire -import org.kde.taskmanager 0.1 as TaskManager +import org.kde.taskmanager as TaskManager PipeWire.PipeWireSourceItem { id: pipeWireSourceItem diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml index 9e4a6c59..10a969ce 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml @@ -296,7 +296,7 @@ PlasmaCore.ToolTipArea { onSmartLauncherEnabledChanged: { if (smartLauncherEnabled && !smartLauncherItem) { const smartLauncher = Qt.createQmlObject(` -import org.kde.plasma.private.taskmanager 0.1 as TaskManagerApplet +import org.kde.plasma.private.taskmanager as TaskManagerApplet TaskManagerApplet.SmartLauncherItem { } `, task); From d05dbb09e50273525905a256a18db7ba97163188 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 20:29:32 +0200 Subject: [PATCH 014/222] Update compile script to work with KWin and KWin-X11 When running compile.sh, you can now pass --wayland to build the KWin effects for Wayland. By default effects will be built for X11. This argument also works for install.sh and install_ninja.sh scripts for KWin effects. --- .gitignore | 10 +++++----- compile.sh | 2 +- kwin/effects_cpp/aeroglide/install.sh | 18 ++++++++++++++---- kwin/effects_cpp/aeroglide/install_ninja.sh | 17 +++++++++++++---- .../kde-effects-aeroglassblur/install.sh | 11 ++++++++++- .../install_ninja.sh | 10 +++++++++- .../kwin-effect-smodsnap-v2/CMakeLists.txt | 2 +- .../kwin-effect-smodsnap-v2/install.sh | 19 +++++++++++++++---- .../kwin-effect-smodsnap-v2/install_ninja.sh | 18 ++++++++++++++---- kwin/effects_cpp/smodglow/CMakeLists.txt | 2 +- kwin/effects_cpp/smodglow/install.sh | 18 ++++++++++++++---- kwin/effects_cpp/smodglow/install_ninja.sh | 17 +++++++++++++---- kwin/effects_cpp/startupfeedback/install.sh | 18 ++++++++++++++---- .../startupfeedback/install_ninja.sh | 17 +++++++++++++---- 14 files changed, 137 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index 9dbbf339..63eaa69f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,10 +6,10 @@ 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/kwin-effect-smodsnap-v2/build-kf6 kwin/effects_cpp/kde-effects-aeroglassblur/build -kwin/effects_cpp/smodglow/build-kf6 -kwin/effects_cpp/aeroglide/build-kf6 -kwin/effects_cpp/startupfeedback/build-kf6 -kwin/effects_cpp/minimize3d/build-kf6 +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/minimize3d/build experimental/ diff --git a/compile.sh b/compile.sh index f85972c9..ba33e4d1 100755 --- a/compile.sh +++ b/compile.sh @@ -38,7 +38,7 @@ echo "Compiling KWin effects..." for filename in "$PWD/kwin/effects_cpp/"*; do cd "$filename" echo "Compiling $(pwd)" - sh $USE_SCRIPT + sh $USE_SCRIPT $1 echo "Done." cd "$CUR_DIR" done diff --git a/kwin/effects_cpp/aeroglide/install.sh b/kwin/effects_cpp/aeroglide/install.sh index 2e93f5a5..5e69709c 100644 --- a/kwin/effects_cpp/aeroglide/install.sh +++ b/kwin/effects_cpp/aeroglide/install.sh @@ -1,6 +1,16 @@ #!/bin/bash +rm -rf build +mkdir build +cd build -rm -rf build-kf6 -cmake -B build-kf6 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_KF6=ON . -make -C build-kf6 -sudo make -C build-kf6 install +if [ "$1" == "--wayland" ] +then + echo "Building Wayland effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON +else + echo "Building X11 effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr +fi + +make +sudo make install diff --git a/kwin/effects_cpp/aeroglide/install_ninja.sh b/kwin/effects_cpp/aeroglide/install_ninja.sh index 19686b96..8f2c38f8 100644 --- a/kwin/effects_cpp/aeroglide/install_ninja.sh +++ b/kwin/effects_cpp/aeroglide/install_ninja.sh @@ -1,6 +1,15 @@ #!/bin/bash +rm -rf build +mkdir build +cd build +if [ "$1" == "--wayland" ] +then + echo "Building Wayland effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DKWIN_BUILD_WAYLAND=ON +else + echo "Building X11 effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja +fi -rm -rf build-kf6 -cmake -B build-kf6 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -G Ninja -DBUILD_KF6=ON . -ninja -C build-kf6 -sudo ninja -C build-kf6 install +ninja +sudo ninja install diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/install.sh b/kwin/effects_cpp/kde-effects-aeroglassblur/install.sh index 05ddde28..5e69709c 100644 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/install.sh +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/install.sh @@ -2,6 +2,15 @@ rm -rf build mkdir build cd build -cmake ../ -DCMAKE_INSTALL_PREFIX=/usr + +if [ "$1" == "--wayland" ] +then + echo "Building Wayland effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON +else + echo "Building X11 effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr +fi + make sudo make install diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/install_ninja.sh b/kwin/effects_cpp/kde-effects-aeroglassblur/install_ninja.sh index a5ff2714..8f2c38f8 100644 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/install_ninja.sh +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/install_ninja.sh @@ -2,6 +2,14 @@ rm -rf build mkdir build cd build -cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja +if [ "$1" == "--wayland" ] +then + echo "Building Wayland effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DKWIN_BUILD_WAYLAND=ON +else + echo "Building X11 effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja +fi + ninja sudo ninja install diff --git a/kwin/effects_cpp/kwin-effect-smodsnap-v2/CMakeLists.txt b/kwin/effects_cpp/kwin-effect-smodsnap-v2/CMakeLists.txt index 057f8bc0..f1a6af0d 100644 --- a/kwin/effects_cpp/kwin-effect-smodsnap-v2/CMakeLists.txt +++ b/kwin/effects_cpp/kwin-effect-smodsnap-v2/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16.0) project(effect_smodsnap) -option(BUILD_KF6 "Build for KDE Plasma 6" OFF) +option(BUILD_KF6 "Build for KDE Plasma 6" ON) option(KWIN_BUILD_WAYLAND "Build with Wayland support" OFF) if (BUILD_KF6) diff --git a/kwin/effects_cpp/kwin-effect-smodsnap-v2/install.sh b/kwin/effects_cpp/kwin-effect-smodsnap-v2/install.sh index d27695fd..5e69709c 100644 --- a/kwin/effects_cpp/kwin-effect-smodsnap-v2/install.sh +++ b/kwin/effects_cpp/kwin-effect-smodsnap-v2/install.sh @@ -1,5 +1,16 @@ #!/bin/bash -rm -rf build-kf6 -cmake -B build-kf6 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_KF6=ON . -make -C build-kf6 -sudo make -C build-kf6 install +rm -rf build +mkdir build +cd build + +if [ "$1" == "--wayland" ] +then + echo "Building Wayland effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON +else + echo "Building X11 effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr +fi + +make +sudo make install diff --git a/kwin/effects_cpp/kwin-effect-smodsnap-v2/install_ninja.sh b/kwin/effects_cpp/kwin-effect-smodsnap-v2/install_ninja.sh index 0ef013bd..8f2c38f8 100644 --- a/kwin/effects_cpp/kwin-effect-smodsnap-v2/install_ninja.sh +++ b/kwin/effects_cpp/kwin-effect-smodsnap-v2/install_ninja.sh @@ -1,5 +1,15 @@ #!/bin/bash -rm -rf build-kf6 -cmake -B build-kf6 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -G Ninja -DBUILD_KF6=ON . -ninja -C build-kf6 -sudo ninja -C build-kf6 install +rm -rf build +mkdir build +cd build +if [ "$1" == "--wayland" ] +then + echo "Building Wayland effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DKWIN_BUILD_WAYLAND=ON +else + echo "Building X11 effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja +fi + +ninja +sudo ninja install diff --git a/kwin/effects_cpp/smodglow/CMakeLists.txt b/kwin/effects_cpp/smodglow/CMakeLists.txt index ad2775c9..3ea121bd 100644 --- a/kwin/effects_cpp/smodglow/CMakeLists.txt +++ b/kwin/effects_cpp/smodglow/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.16.0) project(effect_smodglow) -option(BUILD_KF6 "Build for KDE Plasma 6" OFF) +option(BUILD_KF6 "Build for KDE Plasma 6" ON) option(KWIN_BUILD_WAYLAND "Build with Wayland support" OFF) diff --git a/kwin/effects_cpp/smodglow/install.sh b/kwin/effects_cpp/smodglow/install.sh index 2e93f5a5..5e69709c 100644 --- a/kwin/effects_cpp/smodglow/install.sh +++ b/kwin/effects_cpp/smodglow/install.sh @@ -1,6 +1,16 @@ #!/bin/bash +rm -rf build +mkdir build +cd build -rm -rf build-kf6 -cmake -B build-kf6 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_KF6=ON . -make -C build-kf6 -sudo make -C build-kf6 install +if [ "$1" == "--wayland" ] +then + echo "Building Wayland effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON +else + echo "Building X11 effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr +fi + +make +sudo make install diff --git a/kwin/effects_cpp/smodglow/install_ninja.sh b/kwin/effects_cpp/smodglow/install_ninja.sh index 19686b96..8f2c38f8 100644 --- a/kwin/effects_cpp/smodglow/install_ninja.sh +++ b/kwin/effects_cpp/smodglow/install_ninja.sh @@ -1,6 +1,15 @@ #!/bin/bash +rm -rf build +mkdir build +cd build +if [ "$1" == "--wayland" ] +then + echo "Building Wayland effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DKWIN_BUILD_WAYLAND=ON +else + echo "Building X11 effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja +fi -rm -rf build-kf6 -cmake -B build-kf6 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -G Ninja -DBUILD_KF6=ON . -ninja -C build-kf6 -sudo ninja -C build-kf6 install +ninja +sudo ninja install diff --git a/kwin/effects_cpp/startupfeedback/install.sh b/kwin/effects_cpp/startupfeedback/install.sh index 2e93f5a5..5e69709c 100644 --- a/kwin/effects_cpp/startupfeedback/install.sh +++ b/kwin/effects_cpp/startupfeedback/install.sh @@ -1,6 +1,16 @@ #!/bin/bash +rm -rf build +mkdir build +cd build -rm -rf build-kf6 -cmake -B build-kf6 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_KF6=ON . -make -C build-kf6 -sudo make -C build-kf6 install +if [ "$1" == "--wayland" ] +then + echo "Building Wayland effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON +else + echo "Building X11 effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr +fi + +make +sudo make install diff --git a/kwin/effects_cpp/startupfeedback/install_ninja.sh b/kwin/effects_cpp/startupfeedback/install_ninja.sh index 19686b96..8f2c38f8 100644 --- a/kwin/effects_cpp/startupfeedback/install_ninja.sh +++ b/kwin/effects_cpp/startupfeedback/install_ninja.sh @@ -1,6 +1,15 @@ #!/bin/bash +rm -rf build +mkdir build +cd build +if [ "$1" == "--wayland" ] +then + echo "Building Wayland effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DKWIN_BUILD_WAYLAND=ON +else + echo "Building X11 effect..." + cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja +fi -rm -rf build-kf6 -cmake -B build-kf6 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -G Ninja -DBUILD_KF6=ON . -ninja -C build-kf6 -sudo ninja -C build-kf6 install +ninja +sudo ninja install From 16e0446ddf0f502f2f9f3d6f9d7063481db9dd2e Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 22:09:54 +0200 Subject: [PATCH 015/222] Update INSTALL.md --- INSTALL.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/INSTALL.md b/INSTALL.md index 6010404d..6e2e550b 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -51,6 +51,22 @@ or $ sh compile.sh ``` +## Note for Wayland users: + +The compile script must be run while passing the `--wayland` argument for KWin effects: + +```bash +$ ./compile.sh --wayland +$ sh compile.sh --wayland # Or like this +``` + +If compiling individual KWin effects by running their respective `install.sh` or `install_ninja.sh`, you can also pass the `--wayland` argument there: + +```bash +$ ./install_ninja.sh --wayland +$ sh install_ninja.sh --wayland # Or like this +``` + ## Plasma components This section relates to the directories found in the `plasma` folder. From 4945bf6e70e3f87da5c5e7e9a5cbb49d6f1b8154 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 22:10:39 +0200 Subject: [PATCH 016/222] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b80353bc..8018b819 100644 --- a/README.md +++ b/README.md @@ -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: - Arch Linux x64 and other Arch derivatives -- Plasma 6.3.4, KDE Frameworks 6.12.0, Qt 6.9.0 +- Plasma 6.4.0, KDE Frameworks 6.15.0, Qt 6.9.1 - 96 DPI scaling, multi monitor - X11, Wayland* From bde6315744c7b889b70cfc33002fd42e1576349e Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 22:17:14 +0200 Subject: [PATCH 017/222] Update INSTALL.md --- INSTALL.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 6bdb5382..2c3b9557 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -4,9 +4,10 @@ 1. [Prerequisites](#preq) 2. [Plasma components](#plasma) -3. [KWin components](#kwin) -4. [Miscellaneous components](#misc) -5. [Configuring AeroThemePlasma](#conf) +3. [Compiling](#compile) +4. [KWin components](#kwin) +5. [Miscellaneous components](#misc) +6. [Configuring AeroThemePlasma](#conf) ## Prerequisites @@ -37,7 +38,7 @@ Required Packages: dnf install plasma-workspace-devel 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 ``` -## Compiling +## Compiling To build the components that need to be compiled (KWin effects, Decoration theme, etc.), run `compile.sh`: From 7cd4581154d65b211c7c95f34097d1c5f65c2f6d Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 22:26:31 +0200 Subject: [PATCH 018/222] Fix Gadgets not resetting page on category switch --- .../contents/explorer/WidgetExplorer.qml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plasma/shells/org.kde.plasma.desktop/contents/explorer/WidgetExplorer.qml b/plasma/shells/org.kde.plasma.desktop/contents/explorer/WidgetExplorer.qml index 51b0b7a5..cd88f518 100644 --- a/plasma/shells/org.kde.plasma.desktop/contents/explorer/WidgetExplorer.qml +++ b/plasma/shells/org.kde.plasma.desktop/contents/explorer/WidgetExplorer.qml @@ -338,6 +338,10 @@ PC3.Page { //categoryButton.text = (model.filterData ? model.display : i18nd("plasma_shell_org.kde.plasma.desktop", "All Widgets")) widgetExplorer.widgetsModel.filterQuery = model.filterData widgetExplorer.widgetsModel.filterType = model.filterType + pageSwitcher.pageIndex = 0; + list.positionViewAtBeginning() + list.currentIndex = list.count ? 0 : -1 + } } From 0d9e4a53701f6f6bbb792e235a61ca1350f978c8 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 22:38:02 +0200 Subject: [PATCH 019/222] Remove unnecessary connections --- .../io.gitgud.wackyideas.seventasks/contents/ui/main.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/main.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/main.qml index 1dba0c0b..29b61fcb 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/main.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/main.qml @@ -577,8 +577,8 @@ PlasmoidItem { Component.onCompleted: { TaskTools.taskManagerInstanceCount += 1; tasks.requestLayout.connect(iconGeometryTimer.restart); - tasks.windowsHovered.connect(backend.windowsHovered); - tasks.activateWindowView.connect(backend.activateWindowView); + //tasks.windowsHovered.connect(backend.windowsHovered); + //tasks.activateWindowView.connect(backend.activateWindowView); } Component.onDestruction: { From 13f0b6114dbefda49739589adeeb933ed32659c4 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 20 Jun 2025 22:41:23 +0200 Subject: [PATCH 020/222] Fix SevenTasks metadata.json --- plasma/plasmoids/io.gitgud.wackyideas.seventasks/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/metadata.json b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/metadata.json index a2025f81..1c1f2675 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/metadata.json +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/metadata.json @@ -1,4 +1,5 @@ { + "KPackageStructure": "Plasma/Applet", "KPlugin": { "Authors": [ { @@ -89,7 +90,7 @@ "Name[zh_TW]": "SevenTasks", "KPackageStructure": "Plasma/Applet", "Version": "1.0", - "Website": "https://plasma.kde.org/" + "Website": "https://gitgud.io/wackyideas/aerothemeplasma" }, "X-Plasma-API-Minimum-Version": "6.0", "X-Plasma-Provides": [ From 7d89f258a5b39f5dacdb867954a504ba44e380a6 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 21 Jun 2025 01:18:25 +0200 Subject: [PATCH 021/222] Fix Wallpaper KCM appearing as blank window --- .../contents/configuration/ContainmentConfiguration.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/plasma/shells/org.kde.plasma.desktop/contents/configuration/ContainmentConfiguration.qml b/plasma/shells/org.kde.plasma.desktop/contents/configuration/ContainmentConfiguration.qml index e69b9b55..af512b85 100644 --- a/plasma/shells/org.kde.plasma.desktop/contents/configuration/ContainmentConfiguration.qml +++ b/plasma/shells/org.kde.plasma.desktop/contents/configuration/ContainmentConfiguration.qml @@ -27,7 +27,6 @@ AppletConfiguration { name: i18nd("plasma_shell_org.kde.plasma.desktop", "Wallpaper") icon: "preferences-desktop-wallpaper" source: "ConfigurationContainmentAppearance.qml" - includeMargins: false } ConfigCategory { name: i18nd("plasma_shell_org.kde.plasma.desktop", "Mouse Actions") From 0ffbd0effd95cb99ebf618cd7b601ded7fc090d0 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 21 Jun 2025 02:38:07 +0200 Subject: [PATCH 022/222] AeroGlassBlur: Ensure blur texture is at least 1x1 Credit: https://github.com/taj-ny/kwin-effects-forceblur/pull/174/files --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 19b64943..ffd677fa 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -901,7 +901,8 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi renderInfo.textures.clear(); for (size_t i = 0; i <= m_iterationCount; ++i) { - auto texture = GLTexture::allocate(textureFormat, backgroundRect.size() / (1 << i)); + const QSize textureSize(std::max(1, deviceBackgroundRect.width() / (1 << i)), std::max(1, deviceBackgroundRect.height() / (1 << i))); + auto texture = GLTexture::allocate(textureFormat, textureSize); if (!texture) { qCWarning(KWIN_BLUR) << "Failed to allocate an offscreen texture"; return; From 74137380c3172bdfeaf495bd07659494a95654c1 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 21 Jun 2025 02:51:00 +0200 Subject: [PATCH 023/222] Refactor Show Desktop (Win7) --- .../contents/config/main.xml | 13 +-- .../contents/ui/MinimizeAllController.qml | 82 ++++--------------- .../contents/ui/config/ConfigGeneral.qml | 25 +----- .../contents/ui/main.qml | 52 +----------- 4 files changed, 23 insertions(+), 149 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/config/main.xml b/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/config/main.xml index ccec9b61..51ac60d5 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/config/main.xml +++ b/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/config/main.xml @@ -4,10 +4,10 @@ - run_command + minimizeall - qdbus6 org.kde.kglobalaccel /component/kwin invokeShortcut "MinimizeAll" + qdbus6 org.kde.kglobalaccel /component/kwin invokeShortcut "ExposeAll" run_commands @@ -27,14 +27,5 @@ 750 - - - - - - - - - diff --git a/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/MinimizeAllController.qml b/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/MinimizeAllController.qml index 8eb90006..99d23bc5 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/MinimizeAllController.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/MinimizeAllController.qml @@ -10,6 +10,7 @@ import QtQml 2.15 import org.kde.taskmanager 0.1 as TaskManager +import org.kde.plasma.workspace.dbus as DBus Controller { id: controller @@ -20,74 +21,21 @@ Controller { descriptionActive: i18nc("@info:tooltip", "Restores the previously minimized windows") descriptionInactive: i18nc("@info:tooltip", "Shows the Desktop by minimizing all windows") - readonly property QtObject tasksModel: TaskManager.TasksModel { - id: tasksModel - sortMode: TaskManager.TasksModel.SortDisabled - groupMode: TaskManager.TasksModel.GroupDisabled - } - - readonly property Connections activeTaskChangedConnection: Connections { - target: tasksModel - enabled: controller.active - - function onActiveTaskChanged() { - if (tasksModel.activeTask.valid) { // to suppress changing focus to non windows, such as the desktop - controller.active = false; - controller.minimizedClients = []; - } - } - - function onVirtualDesktopChanged() { - controller.deactivate(); - } - - function onActivityChanged() { - controller.deactivate(); - } - } - - /** - * List of persistent model indexes from task manager model of - * clients minimized by us - */ - property var minimizedClients: [] - - function activate() { - const clients = []; - for (let i = 0; i < tasksModel.count; i++) { - const idx = tasksModel.makeModelIndex(i); - if (!tasksModel.data(idx, TaskManager.AbstractTasksModel.IsHidden)) { - tasksModel.requestToggleMinimized(idx); - clients.push(tasksModel.makePersistentModelIndex(i)); - } - } - minimizedClients = clients; - active = true; - } - - function deactivate() { - active = false; - for (let i = 0; i < minimizedClients.length; i++) { - const idx = minimizedClients[i]; - // client deleted, do nothing - if (!idx.valid) { - continue; - } - // if the user has restored it already, do nothing - if (!tasksModel.data(idx, TaskManager.AbstractTasksModel.IsHidden)) { - continue; - } - tasksModel.requestToggleMinimized(idx); - } - minimizedClients = []; - } - // override function toggle() { - if (active) { - deactivate(); - } else { - activate(); - } + const promise = new Promise((resolve, reject) => { + DBus.SessionBus.asyncCall({ + service: "org.kde.kglobalaccel", + path: "/component/kwin", + iface: "org.kde.kglobalaccel.Component", + member: "invokeShortcut", + arguments: [new DBus.string("MinimizeAll")], + signature: "(s)"}, + resolve, reject); + }).then((reply) => { + console.log(reply.value); + }).catch((reply) => { + console.log(reply.value); + }); } } diff --git a/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/config/ConfigGeneral.qml b/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/config/ConfigGeneral.qml index 039dbe82..a28d027b 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/config/ConfigGeneral.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/config/ConfigGeneral.qml @@ -9,7 +9,7 @@ import "../lib" ConfigPage { id: page - showAppletVersion: true + showAppletVersion: false property string cfg_click_action: 'showdesktop' property alias cfg_click_command: click_command.text @@ -49,27 +49,6 @@ ConfigPage { configKey: 'size' suffix: i18n("px") } - - ConfigColor { - Kirigami.FormData.label: i18n("Edge Color:") - configKey: "edgeColor" - defaultColor: config.defaultEdgeColor - label: "" - } - - ConfigColor { - Kirigami.FormData.label: i18n("Hovered Color:") - configKey: "hoveredColor" - defaultColor: config.defaultHoveredColor - label: "" - } - - ConfigColor { - Kirigami.FormData.label: i18n("Pressed Color:") - configKey: "pressedColor" - defaultColor: config.defaultPressedColor - label: "" - } } } @@ -141,7 +120,7 @@ ConfigPage { ConfigSection { title: i18n("Mouse Wheel") - + visible: false RadioButton { id: mousewheelGroup_runcommands ButtonGroup.group: mousewheelGroup diff --git a/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/main.qml b/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/main.qml index 66101bd1..ea236cdc 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/main.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.win7showdesktop/contents/ui/main.qml @@ -15,6 +15,8 @@ import org.kde.plasma.plasma5support as Plasma5Support import org.kde.kirigami as Kirigami import org.kde.ksvg as KSvg +import org.kde.plasma.workspace.dbus as DBus + import org.kde.plasma.plasmoid PlasmoidItem { @@ -217,44 +219,6 @@ PlasmoidItem { } - /*ButtonSurface { - id: hoverSurface - color: Plasmoid.configuration.hoveredColor - opacity: mouseArea.state === "hover" ? 1 : 0 - } - - ButtonSurface { - id: pressedSurface - color: Plasmoid.configuration.pressedColor - opacity: mouseArea.state === "pressed" ? 1 : 0 - } - - ButtonSurface { - id: edgeLine - border.color: Plasmoid.configuration.edgeColor - color: "transparent" - border.width: 1 - KSvg.FrameSvgItem { - anchors { - fill: parent; - } - imagePath: Qt.resolvedUrl("svgs/showdesktop.svg") - prefix: { - return "normal" - } - - } - - }*/ - - - /*PlasmaCore.ToolTipArea { - id: toolTip - anchors.fill: parent - mainText: Plasmoid.title - subText: toolTipSubText - textFormat: Text.PlainText - }*/ } // org.kde.plasma.mediacontrollercompact @@ -285,22 +249,14 @@ PlasmoidItem { } function performMouseWheelUp() { - root.exec(Plasmoid.configuration.mousewheel_up) + DBus.SessionBus.asyncCall({service: "org.kde.kglobalaccel", path: "/component/kmix", iface: "org.kde.kglobalaccel.Component", member: "invokeShortcut", arguments: [new DBus.string("increase_volume")], signature: "(s)"}); } function performMouseWheelDown() { - root.exec(Plasmoid.configuration.mousewheel_down) + DBus.SessionBus.asyncCall({service: "org.kde.kglobalaccel", path: "/component/kmix", iface: "org.kde.kglobalaccel.Component", member: "invokeShortcut", arguments: [new DBus.string("decrease_volume")], signature: "(s)"}); } Plasmoid.contextualActions: [ - PlasmaCore.Action { - text: i18n("Toggle Lock Widgets") - icon.name: "object-locked" - onTriggered: { - var cmd = 'qdbus org.kde.plasmashell /PlasmaShell evaluateScript "lockCorona(!locked)"' - root.exec(cmd) - } - }, PlasmaCore.Action { text: minimizeAllController.titleInactive checkable: true From 957f35854ace010e13449127c31295848f2e5b81 Mon Sep 17 00:00:00 2001 From: catpswin56 Date: Sat, 21 Jun 2025 10:32:03 -0300 Subject: [PATCH 024/222] Add a highlight for new items in SevenStart --- .../contents/ui/KickoffItem.qml | 58 +- .../contents/ui/KickoffItemChild.qml | 54 +- .../contents/ui/KickoffListView.qml | 5 + .../contents/ui/MenuRepresentation.qml | 33 +- .../contents/ui/main.qml | 2 +- .../contents/ui/svgs/menuitem.svg | 2018 ++++------------- 6 files changed, 528 insertions(+), 1642 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml index 92da2a5e..113b4082 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml @@ -68,6 +68,8 @@ Item { property var childModel property var listView: listItem.ListView.view + readonly property bool isNew: model?.isNewlyInstalled ?? false + onAboutToShowActionMenu: (actionMenu) => { // Loads context menu items here var actionList = hasActionList ? model.actionList : []; if(kicker.isValidUrl(model.url)) { // If we have a launchable application, try allowing the user to pin it @@ -135,6 +137,44 @@ Item { } } + KSvg.FrameSvgItem { + id: newHighlight + + property bool completed: false + + anchors.fill: background + + imagePath: Qt.resolvedUrl("svgs/menuitem.svg") + prefix: "new" + + visible: isNew + + Rectangle { + anchors.fill: parent + + color: "#ffe599" + + visible: listItem.smallIcon + } + } + + KSvg.FrameSvgItem { + id: background + imagePath: Qt.resolvedUrl("svgs/menuitem.svg") + prefix: "hover" + opacity: { + if(ma.containsMouse) return 1; + if(listItem.listView.currentIndex === listItem.itemIndex && listItem.parent.childIndex === -1) return 0.5; + return 0; + } + anchors { + fill: parent + leftMargin: listItem.smallIcon ? Kirigami.Units.smallSpacing/2+1 : Kirigami.Units.smallSpacing + rightMargin: listItem.smallIcon ? Kirigami.Units.smallSpacing/2+1 : Kirigami.Units.smallSpacing + + } + } + Kirigami.Icon { id: elementIcon @@ -195,24 +235,6 @@ Item { listItem.activate(); } } - - KSvg.FrameSvgItem { - id: background - imagePath: Qt.resolvedUrl("svgs/menuitem.svg") - prefix: "hover" - opacity: { - if(ma.containsMouse) return 1; - if(listItem.listView.currentIndex === listItem.itemIndex && listItem.parent.childIndex === -1) return 0.5; - return 0; - } - z: -1 - anchors { - fill: parent - leftMargin: listItem.smallIcon ? Kirigami.Units.smallSpacing/2+1 : Kirigami.Units.smallSpacing - rightMargin: listItem.smallIcon ? Kirigami.Units.smallSpacing/2+1 : Kirigami.Units.smallSpacing - - } - } PlasmaCore.ToolTipArea { id: toolTip diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml index 2e89cf8c..ade70389 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml @@ -135,6 +135,42 @@ Item { } } + KSvg.FrameSvgItem { + id: newHighlight + + anchors.fill: background + + imagePath: Qt.resolvedUrl("svgs/menuitem.svg") + prefix: "new" + + visible: model?.isNewlyInstalled ?? false + + Rectangle { + anchors.fill: parent + + color: "#ffe599" + + visible: listItem.smallIcon + } + } + + KSvg.FrameSvgItem { + id: background + imagePath: Qt.resolvedUrl("svgs/menuitem.svg") + prefix: "hover" + opacity: { + if(ma.containsMouse) return 1; + if(listItem.parentLayout.childIndex === model.index) return 0.5; + return 0; + } + anchors { + fill: parent + leftMargin: listItem.smallIcon ? Kirigami.Units.smallSpacing/2+1 : Kirigami.Units.smallSpacing + rightMargin: listItem.smallIcon ? Kirigami.Units.smallSpacing/2+1 : Kirigami.Units.smallSpacing + + } + } + Kirigami.Icon { id: elementIcon @@ -195,24 +231,6 @@ Item { listItem.activate(); } } - - KSvg.FrameSvgItem { - id: background - imagePath: Qt.resolvedUrl("svgs/menuitem.svg") - prefix: "hover" - opacity: { - if(ma.containsMouse) return 1; - if(listItem.parentLayout.childIndex === model.index) return 0.5; - return 0; - } - z: -1 - anchors { - fill: parent - leftMargin: listItem.smallIcon ? Kirigami.Units.smallSpacing/2+1 : Kirigami.Units.smallSpacing - rightMargin: listItem.smallIcon ? Kirigami.Units.smallSpacing/2+1 : Kirigami.Units.smallSpacing - - } - } PlasmaCore.ToolTipArea { id: toolTip diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffListView.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffListView.qml index eed8ccbe..205f042d 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffListView.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffListView.qml @@ -199,6 +199,7 @@ FocusScope { property alias delegateRepeater: colRepeater readonly property bool expanded: delegateItem.expanded readonly property int childCount: colRepeater.count + property alias isNew: delegateItem.isNew spacing: 0 property int childIndex: -1 @@ -208,6 +209,8 @@ FocusScope { else childIndex = -1; } + Component.onCompleted: root.checkForNewItems(); + KickoffItem { id: delegateItem @@ -221,6 +224,8 @@ FocusScope { smallIcon: view.small listView: listView + onIsNewChanged: root.checkForNewItems(); + onReset: view.reset() } Column { diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index 825a6d7c..0a67632b 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -91,6 +91,20 @@ PlasmaCore.Dialog { property alias m_delayTimer: delayTimer property alias dialogBackgroundTexture: dialogBackground + property bool newItemsAvailable: false + + function checkForNewItems() { + for(var i = 0; i < appsView.count; i++) { + var item = appsView.listView.itemAtIndex(i); + if(item?.isNew) { + root.newItemsAvailable = true; + return; + } + } + root.newItemsAvailable = false; + return; + } + function setFloatingAvatarPosition() { // It's at this point where everything actually gets properly initialized and we don't have to worry about // random unpredictable values, so we can safely allow the popup icon to show up. @@ -157,6 +171,7 @@ PlasmaCore.Dialog { compositingIcon.iconSource = ""; nonCompositingIcon.iconSource = ""; searchField.forceActiveFocus(); + checkForNewItems(); } property int shutdownIndex: -1 @@ -658,6 +673,22 @@ PlasmaCore.Dialog { } Layout.preferredHeight: Kirigami.Units.iconSizes.smallMedium+1 + KSvg.FrameSvgItem { + id: allPBNew + + anchors.fill: parent + + imagePath: Qt.resolvedUrl("svgs/menuitem.svg") + prefix: "new" + + visible: root.newItemsAvailable + opacity: !showingAllPrograms + + Behavior on opacity { + NumberAnimation { easing.type: Easing.Linear; duration: animationDuration } + } + } + KSvg.FrameSvgItem { id: allProgramsButton anchors.fill: parent @@ -1253,6 +1284,6 @@ PlasmaCore.Dialog { popupPosition(); Plasmoid.setDialogAppearance(root, dialogBackground.mask); - + checkForNewItems(); } } diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/main.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/main.qml index f7e78243..c7334b37 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/main.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/main.qml @@ -121,7 +121,7 @@ PlasmoidItem { showAllAppsCategorized: false showRecentApps: false showRecentDocs: false - //showRecentContacts: false + highlightNewlyInstalledApps: true showPowerSession: false onFavoritesModelChanged: { diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/svgs/menuitem.svg b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/svgs/menuitem.svg index 44258567..15e879d5 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/svgs/menuitem.svg +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/svgs/menuitem.svg @@ -6,10 +6,11 @@ height="161" id="svg7080" sodipodi:version="0.32" - inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" version="1.0" sodipodi:docname="menuitem.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" + xml:space="preserve" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -17,74 +18,40 @@ xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://creativecommons.org/ns#" - xmlns:dc="http://purl.org/dc/elements/1.1/"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + style="opacity:0.875;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> From aaf1c26b31c2918d223a22f34a1c7a23a12d0d31 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 21 Jun 2025 17:03:44 +0200 Subject: [PATCH 025/222] Fix Search view item highlight overlapping labels --- .../io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml index b55f7666..ff4a30c9 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml @@ -133,6 +133,7 @@ Item { anchors.fill: parent anchors.leftMargin: Kirigami.Units.iconSizes.small opacity: (listView.currentIndex === index) * 0.7 + ma.containsMouse * 0.3 + z: -1 } Timer { From a492dc1bb7f8c09134c3da6197a1d9bd76c79172 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 21 Jun 2025 18:14:18 +0200 Subject: [PATCH 026/222] Optimize checks for newly installed items --- .../contents/ui/KickoffListView.qml | 4 --- .../contents/ui/MenuRepresentation.qml | 29 +++++++++---------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffListView.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffListView.qml index 205f042d..86c79697 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffListView.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffListView.qml @@ -209,8 +209,6 @@ FocusScope { else childIndex = -1; } - Component.onCompleted: root.checkForNewItems(); - KickoffItem { id: delegateItem @@ -224,8 +222,6 @@ FocusScope { smallIcon: view.small listView: listView - onIsNewChanged: root.checkForNewItems(); - onReset: view.reset() } Column { diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index 0a67632b..ec3c627f 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -91,19 +91,7 @@ PlasmaCore.Dialog { property alias m_delayTimer: delayTimer property alias dialogBackgroundTexture: dialogBackground - property bool newItemsAvailable: false - - function checkForNewItems() { - for(var i = 0; i < appsView.count; i++) { - var item = appsView.listView.itemAtIndex(i); - if(item?.isNew) { - root.newItemsAvailable = true; - return; - } - } - root.newItemsAvailable = false; - return; - } + property bool newItemsAvailable: filteredNewItems.count > 0 function setFloatingAvatarPosition() { // It's at this point where everything actually gets properly initialized and we don't have to worry about @@ -171,7 +159,6 @@ PlasmaCore.Dialog { compositingIcon.iconSource = ""; nonCompositingIcon.iconSource = ""; searchField.forceActiveFocus(); - checkForNewItems(); } property int shutdownIndex: -1 @@ -229,6 +216,19 @@ PlasmaCore.Dialog { focus: true clip: false + KItemModels.KSortFilterProxyModel { + id: filteredNewItems + sourceModel: kicker.rootModel + + function containsNewItem(sourceRow, sourceParent) { + const isNewlyInstalledRole = sourceModel.KItemModels.KRoleNames.role("isNewlyInstalled"); + const isNewlyInstalled = sourceModel.data(sourceModel.index(sourceRow, 0, sourceParent), isNewlyInstalledRole); + return isNewlyInstalled === true; + } + filterRowCallback: (sourceRow, sourceParent) => containsNewItem(sourceRow, sourceParent) + } + + Timer { id: shadow_fix interval: 25 @@ -1284,6 +1284,5 @@ PlasmaCore.Dialog { popupPosition(); Plasmoid.setDialogAppearance(root, dialogBackground.mask); - checkForNewItems(); } } From c23f414cb85b784435bd4089f407bb99a665d943 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 21 Jun 2025 19:04:32 +0200 Subject: [PATCH 027/222] Remove Wayland workaround Seems that Qt.openUrlExternally() no longer crashes the Wayland session, so the xdg-open workaround can be removed. --- .../contents/ui/SidePanelItemDelegate.qml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml index 5960eb27..0afc5bf9 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml @@ -6,13 +6,14 @@ import QtQuick.Dialogs import QtQuick.Window 2.1 import org.kde.plasma.plasmoid 2.0 -import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.core as PlasmaCore import org.kde.plasma.components as PlasmaComponents -import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.plasma.extras as PlasmaExtras import org.kde.kwindowsystem 1.0 import org.kde.ksvg as KSvg import org.kde.kirigami as Kirigami + Item { id: sidePanelDelegate objectName: "SidePanelItemDelegate" @@ -166,11 +167,7 @@ Item { if(executeProgram) executable.exec(executableString); else { - if(KWindowSystem.isPlatformX11) - Qt.callLater(Qt.openUrlExternally, executableString) - else // Workaround for Wayland to prevent crashing - executable.exec("xdg-open " + executableString) - + Qt.callLater(Qt.openUrlExternally, executableString) } } hoverEnabled: true From 16866e2148c9f441c60df3666233ad3076814240 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 21 Jun 2025 20:59:19 +0200 Subject: [PATCH 028/222] Fix SevenStart appearing opaque in Wayland --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index ffd677fa..fc392abc 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -1146,7 +1146,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi bool useTransparency = m_transparencyEnabled; QString windowClass = w->windowClass().split(' ')[1]; - bool opaqueMaximize = (maximizeState == MaximizeMode::MaximizeFull || (m_maximizedWindows.size() != 0 && w->isDock())) && m_maximizeColorization && windowClass != "kwin"; + bool opaqueMaximize = (maximizeState == MaximizeMode::MaximizeFull || (m_maximizedWindows.size() != 0 && w->isDock())) && m_maximizeColorization && windowClass != "kwin" && w->caption() != "sevenstart-menurepresentation"; if(opaqueMaximize) { From bcd95aea817c027fe79097db7e8b2f394950264d Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 22 Jun 2025 14:47:30 +0200 Subject: [PATCH 029/222] Fix maximized blur being opaque at incorrect times - Blur now takes into account different activities and virtual desktops - Blur now takes multiple monitors into account, fixing issue https://gitgud.io/catpswin56/vistathemeplasma/-/issues/9 --- .../kde-effects-aeroglassblur/src/blur.cpp | 28 +++++++++++++++---- .../kde-effects-aeroglassblur/src/blur.h | 2 ++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index fc392abc..3ccc6bf4 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -693,6 +693,15 @@ void BlurEffect::prePaintScreen(ScreenPrePaintData &data, std::chrono::milliseco m_currentBlur = QRegion(); m_currentScreen = effects->waylandDisplay() ? data.screen : nullptr; + // We can avoid checking for every window by evaluating the condition here + auto maximizedWindowsOnCurrentActivity = [&]() -> bool { + return std::find_if(m_maximizedWindows.begin(), m_maximizedWindows.end(), + [](const EffectWindow *a) { return a->isOnCurrentDesktop() && a->isOnCurrentActivity(); }) != m_maximizedWindows.end(); + }; + if(m_maximizeColorization) { + m_maximizedWindowsInCurrentActivity = maximizedWindowsOnCurrentActivity(); + } + effects->prePaintScreen(data, presentTime); } @@ -1107,10 +1116,6 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi projectionMatrix = viewport.projectionMatrix(); projectionMatrix.translate(deviceBackgroundRect.x(), deviceBackgroundRect.y()); - /*if(!winData.isNull()) - { - projectionMatrix *= transformedMatrix; - }*/ /********************* * COLORIZATION PASS * @@ -1145,8 +1150,20 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi bool basicCol = m_basicColorization; bool useTransparency = m_transparencyEnabled; + auto maximizedWindowsShareScreen = [&]() -> bool { + return std::find_if(m_maximizedWindows.begin(), m_maximizedWindows.end(), + [&](const EffectWindow *a) { return a->screen() == w->screen(); }) != m_maximizedWindows.end(); + }; QString windowClass = w->windowClass().split(' ')[1]; - bool opaqueMaximize = (maximizeState == MaximizeMode::MaximizeFull || (m_maximizedWindows.size() != 0 && w->isDock())) && m_maximizeColorization && windowClass != "kwin" && w->caption() != "sevenstart-menurepresentation"; + bool opaqueMaximize = false; + if(m_maximizeColorization) { + if(maximizeState != MaximizeMode::MaximizeFull && !w->isDock()) opaqueMaximize = false; + else if(!m_maximizedWindowsInCurrentActivity) opaqueMaximize = false; + else if (w->isDock()) { + if(maximizedWindowsShareScreen()) opaqueMaximize = true; + } + else opaqueMaximize = maximizeState == MaximizeMode::MaximizeFull && windowClass != "kwin" && w->caption() != "sevenstart-menurepresentation"; + } if(opaqueMaximize) { @@ -1224,7 +1241,6 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi QMatrix4x4 projectionMatrix = viewport.projectionMatrix(); projectionMatrix.translate(deviceBackgroundRect.x(), deviceBackgroundRect.y()); - m_reflectPass.shader->setUniform(m_reflectPass.mvpMatrixLocation, projectionMatrix); m_reflectPass.shader->setUniform(m_reflectPass.screenResolutionLocation, QVector2D(screenSize.width(), screenSize.height())); diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h index 41969cd7..597fdaa7 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h @@ -224,6 +224,8 @@ private: bool m_maximizeColorization; bool m_enableCornerGlow; + bool m_maximizedWindowsInCurrentActivity = false; + struct OffsetStruct { float minOffset; From 25689d38c76f7e89cad4749ddf49844ae1b6c5bb Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 23 Jun 2025 23:41:42 +0200 Subject: [PATCH 030/222] Fix blur texture disobeying display scale --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 3ccc6bf4..89bbd227 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -910,7 +910,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi renderInfo.textures.clear(); for (size_t i = 0; i <= m_iterationCount; ++i) { - const QSize textureSize(std::max(1, deviceBackgroundRect.width() / (1 << i)), std::max(1, deviceBackgroundRect.height() / (1 << i))); + const QSize textureSize(std::max(1, backgroundRect.width() / (1 << i)), std::max(1, backgroundRect.height() / (1 << i))); auto texture = GLTexture::allocate(textureFormat, textureSize); if (!texture) { qCWarning(KWIN_BLUR) << "Failed to allocate an offscreen texture"; From 82abf0a93c36cbbc6788be585b5473605c410875 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Tue, 24 Jun 2025 00:17:26 +0200 Subject: [PATCH 031/222] Hopefully fix other HiDPI issues with AeroGlassBlur --- .../kde-effects-aeroglassblur/src/blur.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 89bbd227..4f8ed068 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -1241,11 +1241,12 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi QMatrix4x4 projectionMatrix = viewport.projectionMatrix(); projectionMatrix.translate(deviceBackgroundRect.x(), deviceBackgroundRect.y()); + const auto scale = viewport.scale(); m_reflectPass.shader->setUniform(m_reflectPass.mvpMatrixLocation, projectionMatrix); - m_reflectPass.shader->setUniform(m_reflectPass.screenResolutionLocation, QVector2D(screenSize.width(), screenSize.height())); - m_reflectPass.shader->setUniform(m_reflectPass.windowPosLocation, QVector2D(windowPos.x(), windowPos.y())); - m_reflectPass.shader->setUniform(m_reflectPass.windowSizeLocation, QVector2D(windowSize.width(), windowSize.height())); + m_reflectPass.shader->setUniform(m_reflectPass.screenResolutionLocation, QVector2D(screenSize.width() * scale, screenSize.height() * scale)); + m_reflectPass.shader->setUniform(m_reflectPass.windowPosLocation, QVector2D(deviceBackgroundRect.x(), deviceBackgroundRect.y())); + m_reflectPass.shader->setUniform(m_reflectPass.windowSizeLocation, QVector2D(backgroundRect.width(), backgroundRect.height())); m_reflectPass.shader->setUniform(m_reflectPass.opacityLocation, float(finalOpacity)); m_reflectPass.shader->setUniform(m_reflectPass.translateTextureLocation, m_translateTexture ? float(1.0) : float(0.0)); m_reflectPass.shader->setUniform(m_reflectPass.colorMatrixLocation, colorMat); @@ -1270,12 +1271,12 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi const auto scale = viewport.scale(); bool scaleY = false; - if(deviceBackgroundRect.height() != windowSize.height() && !scaledOrTransformed(w, mask, data)) scaleY = true; + if(backgroundRect.height() != windowSize.height() && !scaledOrTransformed(w, mask, data)) scaleY = true; const QRectF pixelGeometry = snapToPixelGridF(scaledRect(QRectF(0, 0, glowTex->width(), glowTex->height()), scale)); m_glowPass.shader->setUniform(m_glowPass.mvpMatrixLocation, projectionMatrix); m_glowPass.shader->setUniform(m_glowPass.opacityLocation, float(opacity*0.8)); - m_glowPass.shader->setUniform(m_glowPass.windowPosLocation, QVector2D(windowPos.x(), windowPos.y())); - m_glowPass.shader->setUniform(m_glowPass.windowSizeLocation, QVector2D(windowSize.width(), windowSize.height())); + m_glowPass.shader->setUniform(m_glowPass.windowPosLocation, QVector2D(deviceBackgroundRect.x(), deviceBackgroundRect.y())); + m_glowPass.shader->setUniform(m_glowPass.windowSizeLocation, QVector2D(backgroundRect.width(), backgroundRect.height())); m_glowPass.shader->setUniform(m_glowPass.textureSizeLocation, QVector2D(pixelGeometry.width(), pixelGeometry.height())); m_glowPass.shader->setUniform(m_glowPass.scaleYLocation, scaleY); m_glowPass.shader->setUniform(m_glowPass.colorMatrixLocation, colorMat); From adc956eb78ea5746d3629a8c25ca872f735e0c66 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Tue, 24 Jun 2025 01:41:26 +0200 Subject: [PATCH 032/222] Update INSTALL.md --- INSTALL.md | 12 +++++------- screenshots/animations.png | Bin 0 -> 41535 bytes 2 files changed, 5 insertions(+), 7 deletions(-) create mode 100644 screenshots/animations.png diff --git a/INSTALL.md b/INSTALL.md index 2c3b9557..a2f4ff71 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -129,24 +129,22 @@ $ ln -s kwin kwin-wayland - Enable Minimize All, SMOD Peek - In Window Behavior -> Desktop Effects, enable the following: - Aero Glass Blur - - Aero Glide - Desaturate Unresponsive Applications - - Fading Popups - - Login - SMOD Glow - SMOD Snap - - Squash - - SMOD Peek - Dim Screen for Administrator Mode - Animations for SevenTasks Thumbnails - In Window Behavior -> Desktop Effects, **disable** the following: - Background Contrast - Blur - Maximize - - Sliding Popups - Dialog Parent - Dim Inactive - - Logout + +4. Configure KWin animations to the following: + +![animations](screenshots/animations.png) + ## Miscellaneous components diff --git a/screenshots/animations.png b/screenshots/animations.png new file mode 100644 index 0000000000000000000000000000000000000000..7307e24e5b456d106491b498ea25489333600a34 GIT binary patch literal 41535 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 D$BhG& literal 0 HcmV?d00001 From 51424ea937e2105d3bf775e392fd38f473b61587 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Tue, 24 Jun 2025 02:16:52 +0200 Subject: [PATCH 033/222] Slightly improve smodglow HiDPI positioning - Not perfectly aligned with the caption buttons because SMOD decorations aren't written to support HiDPI yet. --- kwin/effects_cpp/smodglow/src/smodglow-kf6.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kwin/effects_cpp/smodglow/src/smodglow-kf6.cpp b/kwin/effects_cpp/smodglow/src/smodglow-kf6.cpp index 696b64f1..57fd569c 100644 --- a/kwin/effects_cpp/smodglow/src/smodglow-kf6.cpp +++ b/kwin/effects_cpp/smodglow/src/smodglow-kf6.cpp @@ -127,7 +127,7 @@ void SmodGlowEffect::paintWindow(const RenderTarget &renderTarget, const RenderV float opacity = handler->m_min->hoverProgress() * w->opacity() * data.opacity(); const QRectF pixelGeometry = snapToPixelGridF(scaledRect(handler->m_min_rect, scale)); QMatrix4x4 mvp = viewport.projectionMatrix(); - mvp.translate(handler->m_min_rect.x(), handler->m_min_rect.y()); + mvp.translate(handler->m_min_rect.x() * scale, handler->m_min_rect.y() * scale); m_shader->setUniform(GLShader::Mat4Uniform::ModelViewProjectionMatrix, mvp); m_shader->setUniform(uniform_opacity, opacity); m_shader->setUniform(uniform_bordertop, MINMAXGLOW_SMT); @@ -144,7 +144,7 @@ void SmodGlowEffect::paintWindow(const RenderTarget &renderTarget, const RenderV float opacity = handler->m_max->hoverProgress() * w->opacity() * data.opacity(); const QRectF pixelGeometry = snapToPixelGridF(scaledRect(handler->m_max_rect, scale)); QMatrix4x4 mvp = viewport.projectionMatrix(); - mvp.translate(handler->m_max_rect.x(), handler->m_max_rect.y()); + mvp.translate(handler->m_max_rect.x() * scale, handler->m_max_rect.y() * scale); m_shader->setUniform(GLShader::Mat4Uniform::ModelViewProjectionMatrix, mvp); m_shader->setUniform(uniform_opacity, opacity); m_shader->setUniform(uniform_bordertop, MINMAXGLOW_SMT); @@ -161,7 +161,7 @@ void SmodGlowEffect::paintWindow(const RenderTarget &renderTarget, const RenderV float opacity = handler->m_close->hoverProgress() * w->opacity() * data.opacity(); const QRectF pixelGeometry = snapToPixelGridF(scaledRect(handler->m_close_rect, scale)); QMatrix4x4 mvp = viewport.projectionMatrix(); - mvp.translate(handler->m_close_rect.x(), handler->m_close_rect.y()); + mvp.translate(handler->m_close_rect.x() * scale, handler->m_close_rect.y() * scale); m_shader->setUniform(GLShader::Mat4Uniform::ModelViewProjectionMatrix, mvp); m_shader->setUniform(uniform_opacity, opacity); m_shader->setUniform(uniform_bordertop, CLOSEGLOW_SMT); From 391d40b7aa0623d42903cbf0c979c7b0e4eef5bd Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 25 Jun 2025 02:39:20 +0200 Subject: [PATCH 034/222] Change colorization for OSD popups As of Plasma 6.4, OSD popups are no longer themable, which reverts ATP's modifications to them, which makes text look oftentimes illegible. This addresses the issue by applying the "maximized colorization" to OSDs, which ensures readable text. --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 4f8ed068..e5262166 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -1138,10 +1138,6 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi float g = m_aeroColorG; float b = m_aeroColorB; - if(w->isOnScreenDisplay()) - { - bb *= 0.66; - } AeroPasses selectedPass = AeroPasses::AERO; @@ -1165,6 +1161,8 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi else opaqueMaximize = maximizeState == MaximizeMode::MaximizeFull && windowClass != "kwin" && w->caption() != "sevenstart-menurepresentation"; } + if(w->isOnScreenDisplay()) opaqueMaximize = true; + if(opaqueMaximize) { getMaximizedColorization(m_aeroIntensity, m_aeroColorR, m_aeroColorG, m_aeroColorB, r, g, b); @@ -1317,7 +1315,7 @@ QMatrix4x4 BlurEffect::colorMatrix(const float &brightness, const float &saturat bool BlurEffect::shouldHaveCornerGlow(const EffectWindow *w) const { QString windowClass = w->windowClass().split(' ')[1]; - if(w->isTooltip() || w->isSplash()) return false; + if(w->isOnScreenDisplay() || w->isTooltip() || w->isSplash()) return false; if(w->caption() == "sevenstart-menurepresentation" || (windowClass != "kwin" && w->isDock())) return false; // Disables panels and start menu return true; } From 2724786e343bea1696a397a53e648707b1959ef6 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 25 Jun 2025 15:57:08 +0200 Subject: [PATCH 035/222] Combine install.sh and install_ninja.sh scripts When running compile scripts, you can now pass --ninja to enable Ninja. This argument also works with the following scripts: - compile.sh - install_plasmoids.sh --- .gitignore | 6 +++ INSTALL.md | 24 ++++++--- compile.sh | 9 ++-- install_plasmoids.sh | 5 +- kwin/decoration/install.sh | 29 ++++++++--- kwin/decoration/install_ninja.sh | 7 --- kwin/effects_cpp/aeroglide/install.sh | 41 +++++++++++----- kwin/effects_cpp/aeroglide/install_ninja.sh | 15 ------ .../kde-effects-aeroglassblur/install.sh | 41 +++++++++++----- .../install_ninja.sh | 15 ------ .../kwin-effect-smodsnap-v2/install.sh | 41 +++++++++++----- .../kwin-effect-smodsnap-v2/install_ninja.sh | 15 ------ kwin/effects_cpp/smodglow/install.sh | 41 +++++++++++----- kwin/effects_cpp/smodglow/install_ninja.sh | 15 ------ kwin/effects_cpp/startupfeedback/install.sh | 41 +++++++++++----- .../startupfeedback/install_ninja.sh | 15 ------ misc/defaulttooltip/install.sh | 16 +++++- misc/defaulttooltip/install_ninja.sh | 49 ------------------- misc/uac-polkitagent/install.sh | 20 ++++++-- .../src/desktopcontainment/install.sh | 31 +++++++++--- .../src/desktopcontainment/install_ninja.sh | 7 --- .../plasmoids/src/sevenstart_src/install.sh | 31 +++++++++--- .../src/sevenstart_src/install_ninja.sh | 7 --- .../plasmoids/src/seventasks_src/install.sh | 31 +++++++++--- .../src/seventasks_src/install_ninja.sh | 7 --- plasma/plasmoids/src/volume_src/install.sh | 31 +++++++++--- .../plasmoids/src/volume_src/install_ninja.sh | 7 --- 27 files changed, 334 insertions(+), 263 deletions(-) delete mode 100644 kwin/decoration/install_ninja.sh delete mode 100644 kwin/effects_cpp/aeroglide/install_ninja.sh delete mode 100644 kwin/effects_cpp/kde-effects-aeroglassblur/install_ninja.sh delete mode 100644 kwin/effects_cpp/kwin-effect-smodsnap-v2/install_ninja.sh delete mode 100644 kwin/effects_cpp/smodglow/install_ninja.sh delete mode 100644 kwin/effects_cpp/startupfeedback/install_ninja.sh delete mode 100755 misc/defaulttooltip/install_ninja.sh mode change 100644 => 100755 plasma/plasmoids/src/desktopcontainment/install.sh delete mode 100644 plasma/plasmoids/src/desktopcontainment/install_ninja.sh delete mode 100755 plasma/plasmoids/src/sevenstart_src/install_ninja.sh delete mode 100755 plasma/plasmoids/src/seventasks_src/install_ninja.sh delete mode 100755 plasma/plasmoids/src/volume_src/install_ninja.sh diff --git a/.gitignore b/.gitignore index 63eaa69f..b0518f6b 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,10 @@ kwin/effects_cpp/smodglow/build kwin/effects_cpp/aeroglide/build kwin/effects_cpp/startupfeedback/build kwin/effects_cpp/minimize3d/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 +kwin/effects_cpp/minimize3d/build-wl experimental/ diff --git a/INSTALL.md b/INSTALL.md index a2f4ff71..6475a4f6 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -52,20 +52,32 @@ or $ sh compile.sh ``` +You can additionally pass `--ninja` to any of the following scripts in order to build using Ninja, which is recommended to reduce build times: + +- `compile.sh` +- `install_plasmoids.sh` +- Any individual `install.sh` script + +Example: + +```bash +$ sh compile.sh --ninja +``` + ## Note for Wayland users: The compile script must be run while passing the `--wayland` argument for KWin effects: ```bash -$ ./compile.sh --wayland -$ sh compile.sh --wayland # Or like this +$ ./compile.sh --wayland --ninja +$ sh compile.sh --wayland --ninja # Or like this ``` -If compiling individual KWin effects by running their respective `install.sh` or `install_ninja.sh`, 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 -$ ./install_ninja.sh --wayland -$ sh install_ninja.sh --wayland # Or like this +$ ./install_ninja.sh --wayland --ninja +$ sh install_ninja.sh --wayland --ninja # Or like this ``` ## Plasma components @@ -77,7 +89,7 @@ This section relates to the directories found in the `plasma` folder. 1. Run the following scripts: ```bash -$ chmod +x install_plasmoids.sh && ./install_plasmoids.sh +$ chmod +x install_plasmoids.sh && ./install_plasmoids.sh --ninja $ chmod +x install_plasma_components.sh && ./install_plasma_components.sh # Requires authorization for SMOD resources and SDDM themes ``` diff --git a/compile.sh b/compile.sh index ba33e4d1..535fe523 100755 --- a/compile.sh +++ b/compile.sh @@ -1,14 +1,13 @@ #!/bin/bash CUR_DIR=$(pwd) -USE_SCRIPT="install_ninja.sh" +USE_SCRIPT="install.sh" if [[ -z "$(command -v cmake)" ]]; then echo "CMake not found. Stopping." exit fi if [[ -z "$(command -v ninja)" ]]; then - USE_SCRIPT="install.sh" if [[ -z "$(command -v make)" ]]; then echo "Neither Ninja or GNU Make were found. Stopping" exit @@ -16,7 +15,7 @@ if [[ -z "$(command -v ninja)" ]]; then fi cd "$PWD/misc/defaulttooltip" -sh $USE_SCRIPT +sh $USE_SCRIPT $@ cd "$CUR_DIR" #echo "Compiling plasmoids..." @@ -30,7 +29,7 @@ cd "$CUR_DIR" echo "Compiling SMOD decorations..." cd "$PWD/kwin/decoration" -sh $USE_SCRIPT +sh $USE_SCRIPT $@ cd "$CUR_DIR" echo "Done." @@ -38,7 +37,7 @@ echo "Compiling KWin effects..." for filename in "$PWD/kwin/effects_cpp/"*; do cd "$filename" echo "Compiling $(pwd)" - sh $USE_SCRIPT $1 + sh $USE_SCRIPT $@ echo "Done." cd "$CUR_DIR" done diff --git a/install_plasmoids.sh b/install_plasmoids.sh index 755f6794..7ae69ac1 100755 --- a/install_plasmoids.sh +++ b/install_plasmoids.sh @@ -1,7 +1,7 @@ #!/bin/bash CUR_DIR=$(pwd) -USE_SCRIPT="install_ninja.sh" +USE_SCRIPT="install.sh" if [[ -z "$(command -v kpackagetool6)" ]]; then echo "kpackagetool6 not found. Stopping." @@ -13,7 +13,6 @@ if [[ -z "$(command -v cmake)" ]]; then exit fi if [[ -z "$(command -v ninja)" ]]; then - USE_SCRIPT="install.sh" if [[ -z "$(command -v make)" ]]; then echo "Neither Ninja or GNU Make were found. Stopping" exit @@ -28,7 +27,7 @@ else for filename in "$PWD/plasma/plasmoids/src/"*; do cd "$filename" echo "Compiling $(pwd)" - sh $USE_SCRIPT + sh $USE_SCRIPT $@ echo "Done." cd "$CUR_DIR" done diff --git a/kwin/decoration/install.sh b/kwin/decoration/install.sh index 5f2464b5..232faa7f 100644 --- a/kwin/decoration/install.sh +++ b/kwin/decoration/install.sh @@ -1,7 +1,24 @@ #!/bin/bash -rm -rf build -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=/usr .. -make -sudo make install + +BUILD_DST="build" +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] +then + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi +fi + + +rm -rf "$BUILD_DST" +mkdir "$BUILD_DST" +cd "$BUILD_DST" +cmake -DCMAKE_INSTALL_PREFIX=/usr .. $USE_NINJA +$BUILD_COMMAND +sudo $BUILD_COMMAND install diff --git a/kwin/decoration/install_ninja.sh b/kwin/decoration/install_ninja.sh deleted file mode 100644 index 6f76d4ea..00000000 --- a/kwin/decoration/install_ninja.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -rm -rf build -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. -ninja -sudo ninja install diff --git a/kwin/effects_cpp/aeroglide/install.sh b/kwin/effects_cpp/aeroglide/install.sh index 5e69709c..79cb0a26 100644 --- a/kwin/effects_cpp/aeroglide/install.sh +++ b/kwin/effects_cpp/aeroglide/install.sh @@ -1,16 +1,35 @@ #!/bin/bash -rm -rf build -mkdir build -cd build -if [ "$1" == "--wayland" ] +BUILD_DST="build" +BUILD_PLATFORM="X11" +BUILD_PARAM= +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] then - echo "Building Wayland effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON -else - echo "Building X11 effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi fi -make -sudo make install +if [[ "$*" == *"--wayland"* ]] +then + BUILD_DST="build-wl" + BUILD_PLATFORM="Wayland" + BUILD_PARAM="-DKWIN_BUILD_WAYLAND=ON" +fi +rm -rf "${BUILD_DST}" +mkdir "${BUILD_DST}" +cd "${BUILD_DST}" + + +echo "Building ${BUILD_PLATFORM} effect..." +cmake ../ -DCMAKE_INSTALL_PREFIX=/usr $BUILD_PARAM $USE_NINJA + +$BUILD_COMMAND +sudo $BUILD_COMMAND install diff --git a/kwin/effects_cpp/aeroglide/install_ninja.sh b/kwin/effects_cpp/aeroglide/install_ninja.sh deleted file mode 100644 index 8f2c38f8..00000000 --- a/kwin/effects_cpp/aeroglide/install_ninja.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -rm -rf build -mkdir build -cd build -if [ "$1" == "--wayland" ] -then - echo "Building Wayland effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DKWIN_BUILD_WAYLAND=ON -else - echo "Building X11 effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -fi - -ninja -sudo ninja install diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/install.sh b/kwin/effects_cpp/kde-effects-aeroglassblur/install.sh index 5e69709c..79cb0a26 100644 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/install.sh +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/install.sh @@ -1,16 +1,35 @@ #!/bin/bash -rm -rf build -mkdir build -cd build -if [ "$1" == "--wayland" ] +BUILD_DST="build" +BUILD_PLATFORM="X11" +BUILD_PARAM= +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] then - echo "Building Wayland effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON -else - echo "Building X11 effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi fi -make -sudo make install +if [[ "$*" == *"--wayland"* ]] +then + BUILD_DST="build-wl" + BUILD_PLATFORM="Wayland" + BUILD_PARAM="-DKWIN_BUILD_WAYLAND=ON" +fi +rm -rf "${BUILD_DST}" +mkdir "${BUILD_DST}" +cd "${BUILD_DST}" + + +echo "Building ${BUILD_PLATFORM} effect..." +cmake ../ -DCMAKE_INSTALL_PREFIX=/usr $BUILD_PARAM $USE_NINJA + +$BUILD_COMMAND +sudo $BUILD_COMMAND install diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/install_ninja.sh b/kwin/effects_cpp/kde-effects-aeroglassblur/install_ninja.sh deleted file mode 100644 index 8f2c38f8..00000000 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/install_ninja.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -rm -rf build -mkdir build -cd build -if [ "$1" == "--wayland" ] -then - echo "Building Wayland effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DKWIN_BUILD_WAYLAND=ON -else - echo "Building X11 effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -fi - -ninja -sudo ninja install diff --git a/kwin/effects_cpp/kwin-effect-smodsnap-v2/install.sh b/kwin/effects_cpp/kwin-effect-smodsnap-v2/install.sh index 5e69709c..79cb0a26 100644 --- a/kwin/effects_cpp/kwin-effect-smodsnap-v2/install.sh +++ b/kwin/effects_cpp/kwin-effect-smodsnap-v2/install.sh @@ -1,16 +1,35 @@ #!/bin/bash -rm -rf build -mkdir build -cd build -if [ "$1" == "--wayland" ] +BUILD_DST="build" +BUILD_PLATFORM="X11" +BUILD_PARAM= +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] then - echo "Building Wayland effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON -else - echo "Building X11 effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi fi -make -sudo make install +if [[ "$*" == *"--wayland"* ]] +then + BUILD_DST="build-wl" + BUILD_PLATFORM="Wayland" + BUILD_PARAM="-DKWIN_BUILD_WAYLAND=ON" +fi +rm -rf "${BUILD_DST}" +mkdir "${BUILD_DST}" +cd "${BUILD_DST}" + + +echo "Building ${BUILD_PLATFORM} effect..." +cmake ../ -DCMAKE_INSTALL_PREFIX=/usr $BUILD_PARAM $USE_NINJA + +$BUILD_COMMAND +sudo $BUILD_COMMAND install diff --git a/kwin/effects_cpp/kwin-effect-smodsnap-v2/install_ninja.sh b/kwin/effects_cpp/kwin-effect-smodsnap-v2/install_ninja.sh deleted file mode 100644 index 8f2c38f8..00000000 --- a/kwin/effects_cpp/kwin-effect-smodsnap-v2/install_ninja.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -rm -rf build -mkdir build -cd build -if [ "$1" == "--wayland" ] -then - echo "Building Wayland effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DKWIN_BUILD_WAYLAND=ON -else - echo "Building X11 effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -fi - -ninja -sudo ninja install diff --git a/kwin/effects_cpp/smodglow/install.sh b/kwin/effects_cpp/smodglow/install.sh index 5e69709c..79cb0a26 100644 --- a/kwin/effects_cpp/smodglow/install.sh +++ b/kwin/effects_cpp/smodglow/install.sh @@ -1,16 +1,35 @@ #!/bin/bash -rm -rf build -mkdir build -cd build -if [ "$1" == "--wayland" ] +BUILD_DST="build" +BUILD_PLATFORM="X11" +BUILD_PARAM= +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] then - echo "Building Wayland effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON -else - echo "Building X11 effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi fi -make -sudo make install +if [[ "$*" == *"--wayland"* ]] +then + BUILD_DST="build-wl" + BUILD_PLATFORM="Wayland" + BUILD_PARAM="-DKWIN_BUILD_WAYLAND=ON" +fi +rm -rf "${BUILD_DST}" +mkdir "${BUILD_DST}" +cd "${BUILD_DST}" + + +echo "Building ${BUILD_PLATFORM} effect..." +cmake ../ -DCMAKE_INSTALL_PREFIX=/usr $BUILD_PARAM $USE_NINJA + +$BUILD_COMMAND +sudo $BUILD_COMMAND install diff --git a/kwin/effects_cpp/smodglow/install_ninja.sh b/kwin/effects_cpp/smodglow/install_ninja.sh deleted file mode 100644 index 8f2c38f8..00000000 --- a/kwin/effects_cpp/smodglow/install_ninja.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -rm -rf build -mkdir build -cd build -if [ "$1" == "--wayland" ] -then - echo "Building Wayland effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DKWIN_BUILD_WAYLAND=ON -else - echo "Building X11 effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -fi - -ninja -sudo ninja install diff --git a/kwin/effects_cpp/startupfeedback/install.sh b/kwin/effects_cpp/startupfeedback/install.sh index 5e69709c..79cb0a26 100644 --- a/kwin/effects_cpp/startupfeedback/install.sh +++ b/kwin/effects_cpp/startupfeedback/install.sh @@ -1,16 +1,35 @@ #!/bin/bash -rm -rf build -mkdir build -cd build -if [ "$1" == "--wayland" ] +BUILD_DST="build" +BUILD_PLATFORM="X11" +BUILD_PARAM= +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] then - echo "Building Wayland effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON -else - echo "Building X11 effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi fi -make -sudo make install +if [[ "$*" == *"--wayland"* ]] +then + BUILD_DST="build-wl" + BUILD_PLATFORM="Wayland" + BUILD_PARAM="-DKWIN_BUILD_WAYLAND=ON" +fi +rm -rf "${BUILD_DST}" +mkdir "${BUILD_DST}" +cd "${BUILD_DST}" + + +echo "Building ${BUILD_PLATFORM} effect..." +cmake ../ -DCMAKE_INSTALL_PREFIX=/usr $BUILD_PARAM $USE_NINJA + +$BUILD_COMMAND +sudo $BUILD_COMMAND install diff --git a/kwin/effects_cpp/startupfeedback/install_ninja.sh b/kwin/effects_cpp/startupfeedback/install_ninja.sh deleted file mode 100644 index 8f2c38f8..00000000 --- a/kwin/effects_cpp/startupfeedback/install_ninja.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -rm -rf build -mkdir build -cd build -if [ "$1" == "--wayland" ] -then - echo "Building Wayland effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -DKWIN_BUILD_WAYLAND=ON -else - echo "Building X11 effect..." - cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -fi - -ninja -sudo ninja install diff --git a/misc/defaulttooltip/install.sh b/misc/defaulttooltip/install.sh index 3e6efcdc..70a494e2 100644 --- a/misc/defaulttooltip/install.sh +++ b/misc/defaulttooltip/install.sh @@ -1,5 +1,19 @@ #!/bin/bash +USE_NINJA= + +if [[ "$*" == *"--ninja"* ]] +then + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + fi +fi + + + OUTPUT=$(plasmashell --version) IFS=' ' read -a array <<< "$OUTPUT" VERSION="${array[1]}" @@ -37,7 +51,7 @@ mkdir build cd build echo "Stopping plasmashell to prevent crashes. Will be restarted after the script has finished." killall plasmashell -cmake -DCMAKE_INSTALL_PREFIX=/usr .. +cmake -DCMAKE_INSTALL_PREFIX=/usr .. $USE_NINJA cmake --build . --target corebindingsplugin # Implicitly compiles plasmaquick sudo cp ./bin/org/kde/plasma/core/libcorebindingsplugin.so $INSTALLDST diff --git a/misc/defaulttooltip/install_ninja.sh b/misc/defaulttooltip/install_ninja.sh deleted file mode 100755 index 3ad0d4ef..00000000 --- a/misc/defaulttooltip/install_ninja.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -OUTPUT=$(plasmashell --version) -IFS=' ' read -a array <<< "$OUTPUT" -VERSION="${array[1]}" -URL="https://invent.kde.org/plasma/libplasma/-/archive/v${VERSION}/libplasma-v${VERSION}.tar.gz" -ARCHIVE="libplasma-v${VERSION}.tar.gz" -SRCDIR="libplasma-v${VERSION}" - -INSTALLDST="/usr/lib/x86_64-linux-gnu/qt6/qml/org/kde/plasma/core/libcorebindingsplugin.so" -LIBDIR="/usr/lib/x86_64-linux-gnu/" - -if [ ! -d ${LIBDIR} ]; then - LIBDIR="/usr/lib64/" -fi - -if [ ! -f ${INSTALLDST} ]; then - INSTALLDST="/usr/lib64/qt6/qml/org/kde/plasma/core/libcorebindingsplugin.so" -fi - -if [ ! -d ./build/${SRCDIR} ]; then - rm -rf build - mkdir build - echo "Downloading $ARCHIVE" - curl $URL -o ./build/$ARCHIVE - tar -xvf ./build/$ARCHIVE -C ./build/ - echo "Extracted $ARCHIVE" -fi - -cp DefaultToolTip.qml ./build/$SRCDIR/src/declarativeimports/core/private/DefaultToolTip.qml -cp tooltiparea.h ./build/$SRCDIR/src/declarativeimports/core/tooltiparea.h -cp tooltiparea.cpp ./build/$SRCDIR/src/declarativeimports/core/tooltiparea.cpp -cp tooltipdialog.cpp ./build/$SRCDIR/src/declarativeimports/core/tooltipdialog.cpp -cp plasmawindow.cpp ./build/$SRCDIR/src/plasmaquick/plasmawindow.cpp -cd ./build/$SRCDIR/ -mkdir build -cd build -echo "Stopping plasmashell to prevent crashes. Will be restarted after the script has finished." -killall plasmashell -cmake -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. -cmake --build . --target corebindingsplugin # Implicitly compiles plasmaquick -sudo cp ./bin/org/kde/plasma/core/libcorebindingsplugin.so $INSTALLDST - -for filename in "$PWD/bin/libPlasma"*; do - echo "Copying $filename to $LIBDIR" - sudo cp "$filename" "$LIBDIR" -done -setsid plasmashell --replace & -echo "Done." diff --git a/misc/uac-polkitagent/install.sh b/misc/uac-polkitagent/install.sh index 6fc6acd9..1827e967 100755 --- a/misc/uac-polkitagent/install.sh +++ b/misc/uac-polkitagent/install.sh @@ -1,11 +1,23 @@ #!/bin/bash +USE_NINJA= + +if [[ "$*" == *"--ninja"* ]] +then + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + fi +fi + OUTPUT=$(plasmashell --version) IFS=' ' read -a array <<< "$OUTPUT" VERSION="${array[1]}" -URL="https://invent.kde.org/plasma/polkit-kde-agent-1/-/archive/master/polkit-kde-agent-1-master.tar.gz" -ARCHIVE="polkit-kde-agent-1-master.tar.gz" -SRCDIR="polkit-kde-agent-1-master" +URL="https://invent.kde.org/plasma/polkit-kde-agent-1/-/archive/v${VERSION}/polkit-kde-agent-1-v${VERSION}.tar.gz" +ARCHIVE="polkit-kde-agent-1-v${VERSION}.tar.gz" +SRCDIR="polkit-kde-agent-1-v${VERSION}" INSTALLDST="/usr/lib/x86_64-linux-gnu/polkit-kde-authentication-agent-1" @@ -30,7 +42,7 @@ cp -r patches/* ./build/$SRCDIR/ cd ./build/$SRCDIR/ mkdir build cd build -cmake -DCMAKE_INSTALL_PREFIX=/usr .. +cmake -DCMAKE_INSTALL_PREFIX=/usr .. $USE_NINJA cmake --build . echo "Installing..." systemctl --user stop plasma-polkit-agent diff --git a/plasma/plasmoids/src/desktopcontainment/install.sh b/plasma/plasmoids/src/desktopcontainment/install.sh old mode 100644 new mode 100755 index 05ddde28..f0ca9ce4 --- a/plasma/plasmoids/src/desktopcontainment/install.sh +++ b/plasma/plasmoids/src/desktopcontainment/install.sh @@ -1,7 +1,26 @@ #!/bin/bash -rm -rf build -mkdir build -cd build -cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -make -sudo make install + +BUILD_DST="build" +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] +then + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi +fi + + +rm -rf "$BUILD_DST" +mkdir "$BUILD_DST" +cd "$BUILD_DST" +cmake -DCMAKE_INSTALL_PREFIX=/usr .. $USE_NINJA +$BUILD_COMMAND +sudo $BUILD_COMMAND install + + diff --git a/plasma/plasmoids/src/desktopcontainment/install_ninja.sh b/plasma/plasmoids/src/desktopcontainment/install_ninja.sh deleted file mode 100644 index a5ff2714..00000000 --- a/plasma/plasmoids/src/desktopcontainment/install_ninja.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -rm -rf build -mkdir build -cd build -cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -G Ninja -ninja -sudo ninja install diff --git a/plasma/plasmoids/src/sevenstart_src/install.sh b/plasma/plasmoids/src/sevenstart_src/install.sh index 5f2464b5..f0ca9ce4 100755 --- a/plasma/plasmoids/src/sevenstart_src/install.sh +++ b/plasma/plasmoids/src/sevenstart_src/install.sh @@ -1,7 +1,26 @@ #!/bin/bash -rm -rf build -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=/usr .. -make -sudo make install + +BUILD_DST="build" +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] +then + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi +fi + + +rm -rf "$BUILD_DST" +mkdir "$BUILD_DST" +cd "$BUILD_DST" +cmake -DCMAKE_INSTALL_PREFIX=/usr .. $USE_NINJA +$BUILD_COMMAND +sudo $BUILD_COMMAND install + + diff --git a/plasma/plasmoids/src/sevenstart_src/install_ninja.sh b/plasma/plasmoids/src/sevenstart_src/install_ninja.sh deleted file mode 100755 index 6f76d4ea..00000000 --- a/plasma/plasmoids/src/sevenstart_src/install_ninja.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -rm -rf build -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. -ninja -sudo ninja install diff --git a/plasma/plasmoids/src/seventasks_src/install.sh b/plasma/plasmoids/src/seventasks_src/install.sh index 5f2464b5..f0ca9ce4 100755 --- a/plasma/plasmoids/src/seventasks_src/install.sh +++ b/plasma/plasmoids/src/seventasks_src/install.sh @@ -1,7 +1,26 @@ #!/bin/bash -rm -rf build -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=/usr .. -make -sudo make install + +BUILD_DST="build" +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] +then + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi +fi + + +rm -rf "$BUILD_DST" +mkdir "$BUILD_DST" +cd "$BUILD_DST" +cmake -DCMAKE_INSTALL_PREFIX=/usr .. $USE_NINJA +$BUILD_COMMAND +sudo $BUILD_COMMAND install + + diff --git a/plasma/plasmoids/src/seventasks_src/install_ninja.sh b/plasma/plasmoids/src/seventasks_src/install_ninja.sh deleted file mode 100755 index 6f76d4ea..00000000 --- a/plasma/plasmoids/src/seventasks_src/install_ninja.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -rm -rf build -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. -ninja -sudo ninja install diff --git a/plasma/plasmoids/src/volume_src/install.sh b/plasma/plasmoids/src/volume_src/install.sh index 5f2464b5..f0ca9ce4 100755 --- a/plasma/plasmoids/src/volume_src/install.sh +++ b/plasma/plasmoids/src/volume_src/install.sh @@ -1,7 +1,26 @@ #!/bin/bash -rm -rf build -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=/usr .. -make -sudo make install + +BUILD_DST="build" +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] +then + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi +fi + + +rm -rf "$BUILD_DST" +mkdir "$BUILD_DST" +cd "$BUILD_DST" +cmake -DCMAKE_INSTALL_PREFIX=/usr .. $USE_NINJA +$BUILD_COMMAND +sudo $BUILD_COMMAND install + + diff --git a/plasma/plasmoids/src/volume_src/install_ninja.sh b/plasma/plasmoids/src/volume_src/install_ninja.sh deleted file mode 100755 index 6f76d4ea..00000000 --- a/plasma/plasmoids/src/volume_src/install_ninja.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -rm -rf build -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. -ninja -sudo ninja install From f9524303c2e2e404862278470c8d21deab40f1f7 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 25 Jun 2025 16:08:47 +0200 Subject: [PATCH 036/222] Update INSTALL.md --- INSTALL.md | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 6475a4f6..1a06ee4d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -3,11 +3,12 @@ ## TABLE OF CONTENTS 1. [Prerequisites](#preq) -2. [Plasma components](#plasma) +2. [Getting Started](#started) 3. [Compiling](#compile) -4. [KWin components](#kwin) -5. [Miscellaneous components](#misc) -6. [Configuring AeroThemePlasma](#conf) +4. [Plasma components](#plasma) +5. [KWin components](#kwin) +6. [Miscellaneous components](#misc) +7. [Configuring AeroThemePlasma](#conf) ## Prerequisites @@ -18,7 +19,7 @@ Required packages: ```bash -pacman -S cmake extra-cmake-modules ninja qt6-virtualkeyboard qt6-multimedia qt6-5compat plasma-wayland-protocols plasma5support kvantum base-devel +pacman -S git cmake extra-cmake-modules ninja qt6-virtualkeyboard qt6-multimedia qt6-5compat plasma-wayland-protocols plasma5support kvantum base-devel ``` ### Note: @@ -38,6 +39,36 @@ Required Packages: dnf install plasma-workspace-devel 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 ``` +## Getting started + +To download this repository, clone it with `git`: + +```bash +$ git clone https://gitgud.io/wackyideas/aerothemeplasma.git aerothemeplasma +$ cd aerothemeplasma +``` + +Whenever a new update is released, update the downloaded repository by pulling the new changes: + +```bash +$ cd /path/to/aerothemeplasma +$ git pull +``` + +and re-run the install scripts: + +```sh +$ sh compile.sh +$ sh install_plasmoids.sh +$ sh install_kwin_components.sh +$ sh install_plasma_components.sh +$ sh 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, although it's recommended to check new commits to see what has actually changed. + +When doing a full system upgrade, KWin effects and `libplasma` modifications tend to stop working. Running `compile.sh` after a full system upgrade is required for them to work again (assuming no breaking upstream changes). + ## Compiling To build the components that need to be compiled (KWin effects, Decoration theme, etc.), run `compile.sh`: From 61594858cad1f0111d85980b1ad980dfd51556a3 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 25 Jun 2025 22:02:34 +0200 Subject: [PATCH 037/222] Fix broken DigitalClockLite KCM pages --- .../contents/config/config.qml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/config/config.qml b/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/config/config.qml index 07853431..589bb49a 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/config/config.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/config/config.qml @@ -23,7 +23,7 @@ import QtQuick 2.0 import QtQml 2.2 import org.kde.plasma.plasmoid 2.0 -import org.kde.plasma.configuration 2.0 +import org.kde.plasma.configuration import org.kde.plasma.workspace.calendar 2.0 as PlasmaCalendar ConfigModel { @@ -57,7 +57,6 @@ ConfigModel { name: model.display icon: model.decoration source: model.configUi - includeMargins: false visible: Plasmoid.configuration.enabledCalendarPlugins.indexOf(model.pluginId) > -1 } From 6cc06938e66c62a2f1943802fba7689151849f3c Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 25 Jun 2025 22:07:51 +0200 Subject: [PATCH 038/222] Update INSTALL.md --- INSTALL.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 1a06ee4d..7ce2c780 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -60,6 +60,7 @@ and re-run the install scripts: ```sh $ sh compile.sh $ sh install_plasmoids.sh +$ sh install_plasmoids.sh --no-compile # If there's no need to recompile the C++ parts of the plasmoids, you can just run this $ sh install_kwin_components.sh $ sh install_plasma_components.sh $ sh install_misc_components.sh # Usually not required to run again @@ -107,8 +108,8 @@ $ sh compile.sh --wayland --ninja # Or like this If compiling individual KWin effects by running their respective `install.sh` scripts, you can also pass the `--wayland` argument there: ```bash -$ ./install_ninja.sh --wayland --ninja -$ sh install_ninja.sh --wayland --ninja # Or like this +$ ./install.sh --wayland --ninja +$ sh install.sh --wayland --ninja # Or like this ``` ## Plasma components @@ -218,12 +219,12 @@ Optionally, install [PlymouthVista](https://github.com/furkrn/PlymouthVista) whi # WARNING: -## Installing random modifications to programs that deal with privilege escalation (giving sudo or root access to users) from unknown or untrustworthy sources is reckless and a giant security risk. Even though this modification to KDE's polkit authentication UI is purely cosmetic (and even hotfixes a [longstanding](https://bugs.kde.org/show_bug.cgi?id=448554) [issue](https://bugs.kde.org/show_bug.cgi?id=502763)), it's generally not recommended to modify sensitive applications such as this. If you don't know what you're doing, or do not trust the modified source code, do not install this particular component of AeroThemePlasma. +## Installing random modifications to programs that deal with privilege escalation (giving sudo or root access to users) from unknown or untrustworthy sources is reckless and a giant security risk. Even though this modification to KDE's polkit authentication UI is purely cosmetic, it's generally not recommended to modify sensitive applications such as this. If you don't know what you're doing, or do not trust the modified source code, do not install this particular component of AeroThemePlasma. -1. Navigate to the `uac-polkitagent` folder, and run `install.sh` (or `install_ninja.sh` if you have Ninja installed): +1. Navigate to the `uac-polkitagent` folder, and run `install.sh`: ```bash -$ chmod +x install.sh && ./install.sh +$ chmod +x install.sh && ./install.sh --ninja ``` 2. To remove the minimize and maximize buttons from the window, run `add_rule.sh` which will generate the appropriate KWin rule: From 3487bdd269ce483d42b70a40059f7f8c9541787a Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 27 Jun 2025 00:43:01 +0200 Subject: [PATCH 039/222] Update INSTALL.md --- INSTALL.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/INSTALL.md b/INSTALL.md index 7ce2c780..3ef052e5 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -125,6 +125,10 @@ $ chmod +x install_plasmoids.sh && ./install_plasmoids.sh --ninja $ chmod +x install_plasma_components.sh && ./install_plasma_components.sh # Requires authorization for SMOD resources and SDDM themes ``` +### Note for SevenTasks: + +SevenTasks relies on modifications found in `misc/defaulttooltip` in order to work properly. Make sure that they're compiled and installed correctly before enabling SevenTasks. + ### Manual 1. Move the `smod` folder to `~/.local/share`, or `/usr/share/` for a system-wide installation. This will install the resources required by many other components in this project. From 2993b560d5118a9ea943b9f04ad12e709f60c5df Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 28 Jun 2025 00:37:23 +0200 Subject: [PATCH 040/222] Refactor Alt+Tab switcher, possibly fix Wayland visual glitch --- .../contents/ui/Controller.qml | 26 ----- .../contents/ui/MinimizeAllController.qml | 93 ------------------ .../thumbnail_seven/contents/ui/main.qml | 52 +++++----- .../contents/ui/textures/sideglow_left.png | Bin 9880 -> 0 bytes .../contents/ui/textures/sideglow_right.png | Bin 11314 -> 0 bytes 5 files changed, 29 insertions(+), 142 deletions(-) delete mode 100644 kwin/tabbox/thumbnail_seven/contents/ui/Controller.qml delete mode 100644 kwin/tabbox/thumbnail_seven/contents/ui/MinimizeAllController.qml delete mode 100644 kwin/tabbox/thumbnail_seven/contents/ui/textures/sideglow_left.png delete mode 100644 kwin/tabbox/thumbnail_seven/contents/ui/textures/sideglow_right.png diff --git a/kwin/tabbox/thumbnail_seven/contents/ui/Controller.qml b/kwin/tabbox/thumbnail_seven/contents/ui/Controller.qml deleted file mode 100644 index 138a6e03..00000000 --- a/kwin/tabbox/thumbnail_seven/contents/ui/Controller.qml +++ /dev/null @@ -1,26 +0,0 @@ -/* - SPDX-FileCopyrightText: 2022 ivan (@ratijas) tkachenko - - SPDX-License-Identifier: GPL-2.0-or-later -*/ - -import QtQml 2.15 - -QtObject { - /** - * Whether the effect is currently active, and can be deactivated. - */ - property bool active - - property string titleActive - property string titleInactive - - property string descriptionActive - property string descriptionInactive - - readonly property string title: active ? titleActive : titleInactive - readonly property string description: active ? descriptionActive : descriptionInactive - - // virtual - function toggle() {} -} diff --git a/kwin/tabbox/thumbnail_seven/contents/ui/MinimizeAllController.qml b/kwin/tabbox/thumbnail_seven/contents/ui/MinimizeAllController.qml deleted file mode 100644 index 8eb90006..00000000 --- a/kwin/tabbox/thumbnail_seven/contents/ui/MinimizeAllController.qml +++ /dev/null @@ -1,93 +0,0 @@ -/* - SPDX-FileCopyrightText: 2015 Sebastian Kügler - SPDX-FileCopyrightText: 2016 Anthony Fieroni - SPDX-FileCopyrightText: 2018 David Edmundson - SPDX-FileCopyrightText: 2022 ivan (@ratijas) tkachenko - - SPDX-License-Identifier: GPL-2.0-or-later -*/ - -import QtQml 2.15 - -import org.kde.taskmanager 0.1 as TaskManager - -Controller { - id: controller - - titleActive: i18nc("@action:button", "Restore All Minimized Windows") - titleInactive: i18nc("@action:button", "Minimize All Windows") - - descriptionActive: i18nc("@info:tooltip", "Restores the previously minimized windows") - descriptionInactive: i18nc("@info:tooltip", "Shows the Desktop by minimizing all windows") - - readonly property QtObject tasksModel: TaskManager.TasksModel { - id: tasksModel - sortMode: TaskManager.TasksModel.SortDisabled - groupMode: TaskManager.TasksModel.GroupDisabled - } - - readonly property Connections activeTaskChangedConnection: Connections { - target: tasksModel - enabled: controller.active - - function onActiveTaskChanged() { - if (tasksModel.activeTask.valid) { // to suppress changing focus to non windows, such as the desktop - controller.active = false; - controller.minimizedClients = []; - } - } - - function onVirtualDesktopChanged() { - controller.deactivate(); - } - - function onActivityChanged() { - controller.deactivate(); - } - } - - /** - * List of persistent model indexes from task manager model of - * clients minimized by us - */ - property var minimizedClients: [] - - function activate() { - const clients = []; - for (let i = 0; i < tasksModel.count; i++) { - const idx = tasksModel.makeModelIndex(i); - if (!tasksModel.data(idx, TaskManager.AbstractTasksModel.IsHidden)) { - tasksModel.requestToggleMinimized(idx); - clients.push(tasksModel.makePersistentModelIndex(i)); - } - } - minimizedClients = clients; - active = true; - } - - function deactivate() { - active = false; - for (let i = 0; i < minimizedClients.length; i++) { - const idx = minimizedClients[i]; - // client deleted, do nothing - if (!idx.valid) { - continue; - } - // if the user has restored it already, do nothing - if (!tasksModel.data(idx, TaskManager.AbstractTasksModel.IsHidden)) { - continue; - } - tasksModel.requestToggleMinimized(idx); - } - minimizedClients = []; - } - - // override - function toggle() { - if (active) { - deactivate(); - } else { - activate(); - } - } -} diff --git a/kwin/tabbox/thumbnail_seven/contents/ui/main.qml b/kwin/tabbox/thumbnail_seven/contents/ui/main.qml index cd1fc6a7..830dbfbb 100644 --- a/kwin/tabbox/thumbnail_seven/contents/ui/main.qml +++ b/kwin/tabbox/thumbnail_seven/contents/ui/main.qml @@ -17,6 +17,7 @@ import org.kde.ksvg 1.0 as KSvg import org.kde.kirigami 2.20 as Kirigami import org.kde.plasma.plasma5support as Plasma5Support import org.kde.kwindowsystem 1.0 +import org.kde.plasma.workspace.dbus as DBus import Qt5Compat.GraphicalEffects @@ -24,32 +25,41 @@ import Qt5Compat.GraphicalEffects // https://github.com/KDE/kwin/blob/master/tabbox/switcheritem.h KWin.TabBoxSwitcher { id: tabBox - MinimizeAllController { - id: minimizeAllController - } + function toggleMinimizeAll() { + const promise = new Promise((resolve, reject) => { + DBus.SessionBus.asyncCall({ + service: "org.kde.kglobalaccel", + path: "/component/kwin", + iface: "org.kde.kglobalaccel.Component", + member: "invokeShortcut", + arguments: [new DBus.string("MinimizeAll")], + signature: "(s)"}, + resolve, reject); + }).then((reply) => { + console.log(reply.value); + }).catch((reply) => { + console.log(reply.value); + }); + } + PlasmaCore.Dialog { id: dialog location: PlasmaCore.Types.Floating visible: tabBox.visible && dialog.mainItem.count > 1 opacity: 1 - flags: Qt.X11BypassWindowManagerHint | Qt.WindowStaysOnTopHint | Qt.Popup + flags: Qt.BypassWindowManagerHint | Qt.WindowStaysOnTopHint | Qt.Popup x: tabBox.screenGeometry.x + tabBox.screenGeometry.width * 0.5 - dialogMainItem.width * 0.5 y: tabBox.screenGeometry.y + tabBox.screenGeometry.height * 0.5 - dialogMainItem.height * 0.5 - minimumWidth: dialogMainItem.intendedWidth - width: dialogMainItem.intendedWidth - onWidthChanged: { - if(width !== dialogMainItem.intendedWidth) width = dialogMainItem.intendedWidth // Because QML is sentient apparently - } onVisibleChanged: { if(!visible) { if(mainItem.currentItem.isShowDesktop) { - minimizeAllController.toggle(); + tabBox.toggleMinimizeAll(); KWindowSystem.showingDesktop = false; } } } - mainItem: FocusScope { + FocusScope { id: dialogMainItem focus: true @@ -66,11 +76,11 @@ KWin.TabBoxSwitcher { property int currentColumnCount: Math.min(7, count) property int intendedWidth: Math.max(360, thumbnailGridView.cellWidth*currentColumnCount + Kirigami.Units.largeSpacing*2) - onWidthChanged: { - if(dialog.width !== intendedWidth) dialog.width = dialogMainItem.intendedWidth // Because QML is sentient apparently - } - width: intendedWidth - height: columnLayout.implicitHeight + Layout.minimumWidth: intendedWidth + Layout.minimumHeight: windowTitle.Layout.preferredHeight + windowTitle.Layout.topMargin + windowTitle.Layout.bottomMargin + + thumbnailGridView.height + thumbnailGridView.Layout.bottomMargin; + Layout.maximumHeight: Layout.minimumHeight + Layout.maximumWidth: Layout.minimumWidth // Just to get the margin sizes KSvg.FrameSvgItem { @@ -79,16 +89,12 @@ KWin.TabBoxSwitcher { prefix: "hover" visible: false } - KSvg.FrameSvgItem { - id: dialogSvg - imagePath: "dialogs/background" - visible: false - - } ColumnLayout { id: columnLayout spacing: 0 - anchors.fill: parent + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right Text { id: windowTitle Layout.fillWidth: true diff --git a/kwin/tabbox/thumbnail_seven/contents/ui/textures/sideglow_left.png b/kwin/tabbox/thumbnail_seven/contents/ui/textures/sideglow_left.png deleted file mode 100644 index cbd6032174578075121c7f54d048208d24d90610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9880 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 diff --git a/kwin/tabbox/thumbnail_seven/contents/ui/textures/sideglow_right.png b/kwin/tabbox/thumbnail_seven/contents/ui/textures/sideglow_right.png deleted file mode 100644 index 91b1a3fa0c35250dceb749d4c50e5f4fd7a4baca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11314 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 From 88c9413028d386ff31107c4b80a481f7ca0cfae7 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 28 Jun 2025 01:41:02 +0200 Subject: [PATCH 041/222] Fix Alt+Tab window being force blurred --- .../kde-effects-aeroglassblur/src/blur.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index e5262166..52df09bb 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -149,10 +149,10 @@ BlurEffect::BlurEffect() : m_sharedMemory("kwinaero") } m_glowPass.sideGlowTexture = GLTexture::upload(QPixmap(QStringLiteral(":/effects/aeroblur/framecornereffect.png"))); - m_glowPass.sideGlowTexture->setFilter(GL_LINEAR); + m_glowPass.sideGlowTexture->setFilter(GL_LINEAR_MIPMAP_LINEAR); m_glowPass.sideGlowTexture->setWrapMode(GL_CLAMP_TO_EDGE); m_glowPass.sideGlowTexture_unfocus = GLTexture::upload(QPixmap(QStringLiteral(":/effects/aeroblur/framecornereffect-unfocus.png"))); - m_glowPass.sideGlowTexture_unfocus->setFilter(GL_LINEAR); + m_glowPass.sideGlowTexture_unfocus->setFilter(GL_LINEAR_MIPMAP_LINEAR); m_glowPass.sideGlowTexture_unfocus->setWrapMode(GL_CLAMP_TO_EDGE); initBlurStrengthValues(); @@ -499,7 +499,6 @@ void BlurEffect::slotWindowAdded(EffectWindow *w) { SurfaceInterface *surf = w->surface(); - printf("Title: %s\n", w->caption().toStdString().c_str()); if (surf) { windowBlurChangedConnections[w] = connect(surf, &SurfaceInterface::blurChanged, this, [this, w]() { if (w) { @@ -767,12 +766,12 @@ bool BlurEffect::scaledOrTransformed(const EffectWindow *w, int mask, const Wind bool BlurEffect::shouldBlur(const EffectWindow *w, int mask, const WindowPaintData &data) const { QString windowClass = w->windowClass().split(' ')[0]; - //printf("%d %s\n", w->windowType(), windowClass.toStdString().c_str()); + //qCWarning(KWIN_BLUR) << w->windowClass(); + //printf("%d %s %s %s\n", w->windowType(), windowClass.toStdString().c_str(), w->isSpecialWindow() ? "specil true" : "specil false", w->caption().toStdString().c_str()); if (effects->activeFullScreenEffect() && !w->data(WindowForceBlurRole).toBool()) { return false; } - if (w->isOutline() || w->isDesktop() || (!w->isManaged() && !(windowClass == "plasmashell" || windowClass == "kwin_x11" || windowClass == "kwin_wayland"))) { return false; } @@ -794,6 +793,12 @@ bool BlurEffect::shouldForceBlur(const EffectWindow *w) const if ((!m_blurDocks && w->isDock()) || (!m_blurMenus && (w->isMenu() || w->isDropdownMenu() || w->isPopupMenu()))) { return false; } + // For some reason, the Alt+Tab window on Wayland is made up of two windows, one of which is completely empty + // and has an empty window class, and.. isn't a Wayland client???' + if(effects->waylandDisplay() && !w->isWaylandClient() && w->window()->resourceName() == "") + { + return false; + } // Is it a Gadget window bool matches = (w->window()->resourceName() == "plasmashell" || w->window()->resourceClass() == "plasmashell") && w->caption() == "plasmashell_explorer"; @@ -825,7 +830,7 @@ void BlurEffect::ensureReflectTexture() } m_reflectPass.reflectTexture = GLTexture::upload(textureImage); - m_reflectPass.reflectTexture->setFilter(GL_LINEAR); + m_reflectPass.reflectTexture->setFilter(GL_LINEAR_MIPMAP_LINEAR); m_reflectPass.reflectTexture->setWrapMode(GL_REPEAT); } From 98af1c4839303569f4b33ab99c4e672ec82cf130 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 28 Jun 2025 07:28:48 +0200 Subject: [PATCH 042/222] Prevent plasmashell desktop and panels from fading --- kwin/effects/fadingpopups/contents/code/main.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kwin/effects/fadingpopups/contents/code/main.js b/kwin/effects/fadingpopups/contents/code/main.js index 76a3620f..8a911bfa 100644 --- a/kwin/effects/fadingpopups/contents/code/main.js +++ b/kwin/effects/fadingpopups/contents/code/main.js @@ -40,6 +40,12 @@ function isPopupWindow(window) { if(window.dialog && window.windowClass === "plasmashell plasmashell") { return false; } + if(window.dock && window.windowClass === "plasmashell plasmashell") { + return false; + } + if(window.desktop && window.windowClass === "plasmashell plasmashell") { + return false; + } if(blacklistNames.indexOf(window.caption) != -1) { return false; } From 77253c32cdec5edfa69456485ff6672e7c3c7868 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 28 Jun 2025 08:19:48 +0200 Subject: [PATCH 043/222] Visually update edit mode to improve text legibility - Also removes animations for the panel plasmoid highlight that appears in edit mode to improve responsiveness --- .../contents/ui/ConfigOverlay.qml | 54 ++++++------------- .../configuration/PanelConfiguration.qml | 53 +++++++++++------- 2 files changed, 50 insertions(+), 57 deletions(-) diff --git a/plasma/plasmoids/org.kde.panel/contents/ui/ConfigOverlay.qml b/plasma/plasmoids/org.kde.panel/contents/ui/ConfigOverlay.qml index f52b80ef..0bea9ee9 100644 --- a/plasma/plasmoids/org.kde.panel/contents/ui/ConfigOverlay.qml +++ b/plasma/plasmoids/org.kde.panel/contents/ui/ConfigOverlay.qml @@ -178,40 +178,6 @@ MouseArea { height: width anchors.centerIn: parent } - Behavior on x { - enabled: !configurationArea.pressed - NumberAnimation { - duration: Kirigami.Units.longDuration - easing.type: Easing.InOutQuad - } - } - Behavior on y { - enabled: !configurationArea.pressed - NumberAnimation { - duration: Kirigami.Units.longDuration - easing.type: Easing.InOutQuad - } - } - Behavior on width { - enabled: !configurationArea.pressed - NumberAnimation { - duration: Kirigami.Units.longDuration - easing.type: Easing.InOutQuad - } - } - Behavior on height { - enabled: !configurationArea.pressed - NumberAnimation { - duration: Kirigami.Units.longDuration - easing.type: Easing.InOutQuad - } - } - Behavior on opacity { - NumberAnimation { - duration: Kirigami.Units.longDuration - easing.type: Easing.InOutQuad - } - } } PlasmaCore.PopupPlasmaWindow { id: tooltip @@ -222,6 +188,8 @@ MouseArea { width: mainItem.implicitWidth + leftPadding + rightPadding height: mainItem.implicitHeight + topPadding + bottomPadding + backgroundHints: "SolidBackground" + popupDirection: switch (Plasmoid.location) { case PlasmaCore.Types.TopEdge: return Qt.BottomEdge @@ -252,23 +220,31 @@ MouseArea { onEntered: hideTimer.stop(); onExited: hideTimer.restart(); + Kirigami.Theme.colorSet: Kirigami.Theme.View + Kirigami.Theme.inherit: false + ColumnLayout { id: handleButtons spacing: Kirigami.Units.smallSpacing PlasmaExtras.PlasmoidHeading { - leftPadding: Kirigami.Units.smallSpacing * 2 - rightPadding: Kirigami.Units.smallSpacing * 2 + topPadding: Kirigami.Units.smallSpacing * 2 + leftPadding: Kirigami.Units.smallSpacing * 4 + rightPadding: Kirigami.Units.smallSpacing * 4 + + Layout.leftMargin: Kirigami.Units.largeSpacing * 2 + Layout.rightMargin: Kirigami.Units.largeSpacing * 2 contentItem: Kirigami.Heading { id: label - level: 3 + Kirigami.Theme.colorSet: Kirigami.Theme.View + Kirigami.Theme.inherit: false + + level: 4 horizontalAlignment: Text.AlignHCenter textFormat: Text.PlainText } } - Kirigami.Theme.colorSet: Kirigami.Theme.Complementary - Kirigami.Theme.inherit: false PlasmaComponents3.ToolButton { Layout.fillWidth: true diff --git a/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml b/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml index 0297574b..d8145a16 100644 --- a/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml +++ b/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml @@ -28,6 +28,10 @@ ColumnLayout { readonly property int headingLevel: 2 + Kirigami.Theme.colorSet: Kirigami.Theme.View + Kirigami.Theme.inherit: false + + property Item panelRuler: Ruler { id: ruler @@ -78,7 +82,12 @@ ColumnLayout { } } + onParentChanged: { + let window = dialogRoot.Window.window + if(window) window.backgroundHints = 1; + } Component.onCompleted: { + if (panel.lengthMode === Panel.Global.Custom) { Qt.callLater(()=> { panelConfiguration.panelRulerView.visible = true @@ -90,33 +99,41 @@ ColumnLayout { PlasmaExtras.PlasmoidHeading { RowLayout { anchors.fill: parent + anchors.topMargin: Kirigami.Units.smallSpacing + anchors.rightMargin: Kirigami.Units.smallSpacing + anchors.leftMargin: Kirigami.Units.smallSpacing spacing: Kirigami.Units.largeSpacing Kirigami.Heading { Layout.leftMargin: Kirigami.Units.smallSpacing + Layout.bottomMargin: Kirigami.Units.smallSpacing / 2 text: i18nd("plasma_shell_org.kde.plasma.desktop", "Panel Settings") textFormat: Text.PlainText + Kirigami.Theme.colorSet: Kirigami.Theme.View + Kirigami.Theme.inherit: false } Item { Layout.fillWidth: true } - PC3.ToolButton { + QQC2.Button { text: i18nd("plasma_shell_org.kde.plasma.desktop", "Add Spacer") icon.name: "distribute-horizontal-x" + Layout.bottomMargin: Kirigami.Units.smallSpacing / 2 - PC3.ToolTip.text: i18nd("plasma_shell_org.kde.plasma.desktop", "Add spacer widget to the panel") - PC3.ToolTip.delay: Kirigami.Units.toolTipDelay - PC3.ToolTip.visible: hovered + QQC2.ToolTip.text: i18nd("plasma_shell_org.kde.plasma.desktop", "Add spacer widget to the panel") + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered onClicked: configDialog.addPanelSpacer() } - PC3.ToolButton { + QQC2.Button { text: i18nd("plasma_shell_org.kde.plasma.desktop", "Add Widgets…") icon.name: "list-add" + Layout.bottomMargin: Kirigami.Units.smallSpacing / 2 - PC3.ToolTip.text: i18nd("plasma_shell_org.kde.plasma.desktop", "Open the widget selector to drag and drop widgets to the panel") - PC3.ToolTip.delay: Kirigami.Units.toolTipDelay - PC3.ToolTip.visible: hovered + QQC2.ToolTip.text: i18nd("plasma_shell_org.kde.plasma.desktop", "Open the widget selector to drag and drop widgets to the panel") + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered onClicked: { configDialog.close() configDialog.showAddWidgetDialog() @@ -523,8 +540,8 @@ ColumnLayout { y: modelData.virtualY + modelData.height / 2 - mainItem.height / 2 - margins.top mainItem: PC3.ToolButton { - width: Kirigami.Units.iconSizes.huge - height: Kirigami.Units.iconSizes.huge + width: Kirigami.Units.iconSizes.large + height: Kirigami.Units.iconSizes.large icon.name: root.iconSource onClicked: setPositionButton.moveTo(root.onClickedLocation, Window.window) @@ -635,13 +652,13 @@ ColumnLayout { anchors.right: parent.right spacing: Kirigami.Units.largeSpacing - PC3.ToolButton { + QQC2.Button { text: i18ndc("plasma_shell_org.kde.plasma.desktop", "@action:button Delete the panel", "Delete Panel") icon.name: "delete" - PC3.ToolTip.text: i18nd("plasma_shell_org.kde.plasma.desktop", "Remove this panel; this action is undo-able") - PC3.ToolTip.delay: Kirigami.Units.toolTipDelay - PC3.ToolTip.visible: hovered + QQC2.ToolTip.text: i18nd("plasma_shell_org.kde.plasma.desktop", "Remove this panel; this action is undo-able") + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered onClicked: plasmoid.internalAction("remove").trigger() } @@ -649,13 +666,13 @@ ColumnLayout { Item {Layout.fillWidth: true} - PC3.ToolButton { + QQC2.Button { text: i18ndc("plasma_shell_org.kde.plasma.desktop", "@action:button Done configuring the panel", "Done") icon.name: "dialog-ok-symbolic" - PC3.ToolTip.text: i18nd("plasma_shell_org.kde.plasma.desktop", "Close Panel Settings window and exit Edit Mode") - PC3.ToolTip.delay: Kirigami.Units.toolTipDelay - PC3.ToolTip.visible: hovered + QQC2.ToolTip.text: i18nd("plasma_shell_org.kde.plasma.desktop", "Close Panel Settings window and exit Edit Mode") + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered onClicked: plasmoid.containment.corona.editMode = false } From cc6674aded749ad1c8df73b12a4d1da2c43129b1 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 28 Jun 2025 08:42:58 +0200 Subject: [PATCH 044/222] Improve Alt+Tab switcher on Wayland --- kwin/effects/fadingpopups/contents/code/main.js | 3 ++- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 1 + kwin/tabbox/thumbnail_seven/contents/ui/main.qml | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/kwin/effects/fadingpopups/contents/code/main.js b/kwin/effects/fadingpopups/contents/code/main.js index 8a911bfa..dcf72993 100644 --- a/kwin/effects/fadingpopups/contents/code/main.js +++ b/kwin/effects/fadingpopups/contents/code/main.js @@ -23,7 +23,8 @@ var blacklist = [ var blacklistNames = [ "seventasks-floatingavatar", "aerothemeplasma-windowframe-special", - "sevenstart-menurepresentation" + "sevenstart-menurepresentation", + "aerothemeplasma-tabbox" ]; function isPopupWindow(window) { diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 52df09bb..b7176c6b 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -1329,6 +1329,7 @@ bool BlurEffect::treatAsActive(const EffectWindow *w) { QString windowClass = w->windowClass().split(' ')[1]; if (m_basicColorization && (w->isDock() || w->caption() == "sevenstart-menurepresentation")) return false; + if(w->caption() == "aerothemeplasma-tabbox" && !w->isManaged()) return true; return (w->isOnScreenDisplay() || w->isFullScreen() || windowClass == "plasmashell" || windowClass == "kwin" || w == effects->activeWindow()); } diff --git a/kwin/tabbox/thumbnail_seven/contents/ui/main.qml b/kwin/tabbox/thumbnail_seven/contents/ui/main.qml index 830dbfbb..8bd7c4b4 100644 --- a/kwin/tabbox/thumbnail_seven/contents/ui/main.qml +++ b/kwin/tabbox/thumbnail_seven/contents/ui/main.qml @@ -50,6 +50,7 @@ KWin.TabBoxSwitcher { flags: Qt.BypassWindowManagerHint | Qt.WindowStaysOnTopHint | Qt.Popup x: tabBox.screenGeometry.x + tabBox.screenGeometry.width * 0.5 - dialogMainItem.width * 0.5 y: tabBox.screenGeometry.y + tabBox.screenGeometry.height * 0.5 - dialogMainItem.height * 0.5 + title: "aerothemeplasma-tabbox" onVisibleChanged: { if(!visible) { From bfce52b7b9963f32f79884308bc442db6fcf85f4 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 28 Jun 2025 08:54:06 +0200 Subject: [PATCH 045/222] Replace printf with qDebug in AeroGlassBlur --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index b7176c6b..58adce02 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -273,7 +273,7 @@ bool BlurEffect::readMemory(bool *skipFunc) { if(!m_sharedMemory.attach()) { - printf("Couldn't access shared memory! %s %d\n", m_sharedMemory.nativeKey().toStdString().c_str(), m_sharedMemory.error()); + qCWarning(KWIN_BLUR) << "Couldn't access shared memory! " << m_sharedMemory.nativeKey() << " " << m_sharedMemory.error(); if(m_sharedMemory.error()) return false; } From 477403c44a3cee3c6e4d3c1a8b09effe174e9974 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 28 Jun 2025 09:04:04 +0200 Subject: [PATCH 046/222] Update INSTALL.md --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 3ef052e5..ac942c8f 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -174,11 +174,11 @@ $ ln -s kwin kwin-wayland - Main: Thumbnail Seven, Include "Show Desktop" entry - Alternative: Flip Switch, Forward shortcut: Meta+Tab - In Window Behavior -> KWin Scripts: - - Enable Minimize All, SMOD Peek + - Enable Minimize All, SMOD Peek (**Wayland users should keep SMOD Peek disabled as it doesn't work and can cause freezing**) - In Window Behavior -> Desktop Effects, enable the following: - Aero Glass Blur - Desaturate Unresponsive Applications - - SMOD Glow + - SMOD Glow - SMOD Snap - Dim Screen for Administrator Mode - Animations for SevenTasks Thumbnails From 79df909ed12bd2a308721461aaa83557ae015f64 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 28 Jun 2025 12:39:39 +0200 Subject: [PATCH 047/222] Tweak panel configuration UI --- .../contents/configuration/PanelConfiguration.qml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml b/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml index d8145a16..99d129ee 100644 --- a/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml +++ b/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml @@ -97,11 +97,13 @@ ColumnLayout { PlasmaExtras.PlasmoidHeading { + Layout.leftMargin: Kirigami.Units.largeSpacing * 2 + Layout.rightMargin: Kirigami.Units.largeSpacing * 2 RowLayout { anchors.fill: parent anchors.topMargin: Kirigami.Units.smallSpacing - anchors.rightMargin: Kirigami.Units.smallSpacing - anchors.leftMargin: Kirigami.Units.smallSpacing + anchors.rightMargin: -Kirigami.Units.largeSpacing + anchors.leftMargin: -Kirigami.Units.largeSpacing spacing: Kirigami.Units.largeSpacing Kirigami.Heading { @@ -111,6 +113,7 @@ ColumnLayout { textFormat: Text.PlainText Kirigami.Theme.colorSet: Kirigami.Theme.View Kirigami.Theme.inherit: false + level: 4 } Item { Layout.fillWidth: true } @@ -641,9 +644,11 @@ ColumnLayout { position: PlasmaExtras.PlasmoidHeading.Footer Layout.topMargin: Kirigami.Units.smallSpacing topPadding: Kirigami.Units.smallSpacing * 2 - leftPadding: Kirigami.Units.smallSpacing - rightPadding: Kirigami.Units.smallSpacing + leftPadding: -Kirigami.Units.largeSpacing + rightPadding: -Kirigami.Units.largeSpacing bottomPadding: Kirigami.Units.smallSpacing + Layout.leftMargin: Kirigami.Units.largeSpacing * 2 + Layout.rightMargin: Kirigami.Units.largeSpacing * 2 Layout.fillWidth: true RowLayout { From 1ea8b58e7f4fa7a9b05ec2cfaf877ffd8f9bbf71 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 28 Jun 2025 16:36:03 +0200 Subject: [PATCH 048/222] Fix Alt+Tab being incorrectly opaque - Also fixes Wayland Alt+Tab being treated as inactive --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 58adce02..1c196d52 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -1167,6 +1167,11 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi } if(w->isOnScreenDisplay()) opaqueMaximize = true; + // X11 Alt+Tab window + if(w->caption() == "" && windowClass == "kwin") opaqueMaximize = false; + // Wayland Alt+Tab window + if(effects->waylandDisplay() && !w->isWaylandClient() && w->window()->resourceName() == "") opaqueMaximize = false; + if(opaqueMaximize) { @@ -1330,6 +1335,7 @@ bool BlurEffect::treatAsActive(const EffectWindow *w) QString windowClass = w->windowClass().split(' ')[1]; if (m_basicColorization && (w->isDock() || w->caption() == "sevenstart-menurepresentation")) return false; if(w->caption() == "aerothemeplasma-tabbox" && !w->isManaged()) return true; + if(effects->waylandDisplay() && !w->isWaylandClient() && w->window()->resourceName() == "") return true; return (w->isOnScreenDisplay() || w->isFullScreen() || windowClass == "plasmashell" || windowClass == "kwin" || w == effects->activeWindow()); } From 6a769e7b390cfc6be8048664efc1c1f89124df11 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 28 Jun 2025 19:00:40 +0200 Subject: [PATCH 049/222] Bring back extended blur region in colorization KCM --- .../src/kcm/mainwindow.cpp | 14 +++++++++++-- .../src/kcm/mainwindow.h | 1 + .../src/kcm/mainwindow.ui | 20 ++++++++++++------- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp index 438c1aa2..82f120a6 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp @@ -91,8 +91,14 @@ MainWindow::MainWindow(QSpinBox *spinbox, QCheckBox *checkbox, ui->kcfg_EnableTransparency->setChecked(checkbox->isChecked()); // Setting attributes which will allow the window to have a transparent // blurred background. - //this->setAttribute(Qt::WA_TranslucentBackground, true); - //this->setAttribute(Qt::WA_NoSystemBackground, true); + this->setObjectName("main"); + this->setAttribute(Qt::WA_TranslucentBackground, true); + this->setAttribute(Qt::WA_NoSystemBackground, true); + this->setStyleSheet( + "QMainWindow#main {" + "background: transparent;" + "}" + ); /*this->winId(); KWindowEffects::enableBlurBehind( @@ -186,6 +192,10 @@ MainWindow::~MainWindow() { delete ui; } +void MainWindow::showEvent(QShowEvent *event) +{ + KWindowEffects::enableBlurBehind(this->windowHandle(), true, QRegion(0,0, 0, 0)); +} /* * Returns the currently set color. Depending on the transparency settings, the * alpha value will either be directly used as the transparency value, or it diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h index 9291b8ee..0084da3f 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h @@ -42,6 +42,7 @@ public: void resetToDefault(); protected: void closeEvent(QCloseEvent *event) override; + void showEvent(QShowEvent *event) override; private slots: void on_colorMixerLabel_linkActivated(const QString &link); void on_hue_Slider_valueChanged(int value); diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui index 045e8c8c..df267ac2 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui @@ -19,7 +19,7 @@ 759 - 585 + 616 @@ -99,7 +99,7 @@ Qt::Orientation::Vertical - QSizePolicy::Policy::Minimum + QSizePolicy::Policy::MinimumExpanding @@ -647,7 +647,13 @@ NOTE: This setting does NOT affect compositing settings. 0 - 272 + 280 + + + + + 16777215 + 280 @@ -667,15 +673,15 @@ NOTE: This setting does NOT affect compositing settings. 0 0 - 727 - 272 + 723 + 280 - + 0 0 @@ -683,7 +689,7 @@ NOTE: This setting does NOT affect compositing settings. 16777215 - 16777215 + 272 From 65c459277b65cbeee4fec5d0337f541650127fa0 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 2 Jul 2025 01:49:13 +0200 Subject: [PATCH 050/222] Update AeroGlassBlur default config and force opaque KRunner --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 1 + kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 1c196d52..bbc65d5f 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -1165,6 +1165,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi } else opaqueMaximize = maximizeState == MaximizeMode::MaximizeFull && windowClass != "kwin" && w->caption() != "sevenstart-menurepresentation"; } + if(w->window()->resourceName() == "krunner" && w->window()->resourceClass() == "krunner") opaqueMaximize = true; if(w->isOnScreenDisplay()) opaqueMaximize = true; // X11 Alt+Tab window diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg index f418b9de..81dd9a72 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg @@ -6,7 +6,7 @@ - 3 + 4 From 344acb791eda9c7bd017973ec663619d09292087 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 2 Jul 2025 20:25:01 +0200 Subject: [PATCH 051/222] Fix incorrect symlinking of kwin directory --- install_kwin_components.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/install_kwin_components.sh b/install_kwin_components.sh index 834aa094..d943ce1a 100644 --- a/install_kwin_components.sh +++ b/install_kwin_components.sh @@ -46,6 +46,8 @@ KWIN_DIR="$HOME/.local/share/kwin" cp -r "$PWD/kwin/outline" "$KWIN_DIR" echo "Done." +LOCAL_DIR="$HOME/.local/share" +cd "$LOCAL_DIR" echo "Making kwin-x11 and kwin-wayland symlinks..." ln -s kwin kwin-x11 ln -s kwin kwin-wayland From 59c294be6175f50e95c0e20e955eef581eafc01d Mon Sep 17 00:00:00 2001 From: wackyideas Date: Thu, 3 Jul 2025 00:17:01 +0200 Subject: [PATCH 052/222] Merge corner glow and reflect render passes into one --- .../src/aeroblur.qrc | 2 - .../kde-effects-aeroglassblur/src/blur.cpp | 104 +++++++----------- .../kde-effects-aeroglassblur/src/blur.h | 25 ++--- .../src/shaders/glow.frag | 8 -- .../src/shaders/glow_core.frag | 35 ------ .../src/shaders/reflect.frag | 37 ++++++- .../src/shaders/reflect_core.frag | 38 ++++++- 7 files changed, 116 insertions(+), 133 deletions(-) delete mode 100644 kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/glow.frag delete mode 100644 kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/glow_core.frag diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/aeroblur.qrc b/kwin/effects_cpp/kde-effects-aeroglassblur/src/aeroblur.qrc index 8a669030..cb52602f 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/aeroblur.qrc +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/aeroblur.qrc @@ -2,8 +2,6 @@ shaders/downsample.frag shaders/downsample_core.frag - shaders/glow.frag - shaders/glow_core.frag shaders/reflect.frag shaders/reflect_core.frag shaders/upsample.frag diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index bbc65d5f..d27390d1 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -130,30 +130,22 @@ BlurEffect::BlurEffect() : m_sharedMemory("kwinaero") m_reflectPass.windowSizeLocation = m_reflectPass.shader->uniformLocation("windowSize"); m_reflectPass.translateTextureLocation = m_reflectPass.shader->uniformLocation("translate"); m_reflectPass.colorMatrixLocation = m_reflectPass.shader->uniformLocation("colorMatrix"); - } - m_glowPass.shader = ShaderManager::instance()->generateShaderFromFile( - ShaderTrait::MapTexture, - QStringLiteral(":/effects/aeroblur/shaders/vertex.vert"), - QStringLiteral(":/effects/aeroblur/shaders/glow.frag")); - if (!m_glowPass.shader) { - qCWarning(KWIN_BLUR) << "Failed to load sideglow pass shader"; - return; - } else { - m_glowPass.mvpMatrixLocation = m_glowPass.shader->uniformLocation("modelViewProjectionMatrix"); - m_glowPass.colorMatrixLocation = m_glowPass.shader->uniformLocation("colorMatrix"); - m_glowPass.opacityLocation = m_glowPass.shader->uniformLocation("opacity"); - m_glowPass.textureSizeLocation = m_glowPass.shader->uniformLocation("textureSize"); - m_glowPass.windowPosLocation = m_glowPass.shader->uniformLocation("windowPos"); - m_glowPass.windowSizeLocation = m_glowPass.shader->uniformLocation("windowSize"); - m_glowPass.scaleYLocation = m_glowPass.shader->uniformLocation("scaleY"); + m_reflectPass.reflectTextureLocation = m_reflectPass.shader->uniformLocation("texUnit"); + // Glow + m_reflectPass.textureSizeLocation = m_reflectPass.shader->uniformLocation("textureSize"); + m_reflectPass.scaleYLocation = m_reflectPass.shader->uniformLocation("scaleY"); + m_reflectPass.glowTextureLocation = m_reflectPass.shader->uniformLocation("glowTexture"); + m_reflectPass.glowEnableLocation = m_reflectPass.shader->uniformLocation("glowEnable"); + m_reflectPass.glowOpacityLocation = m_reflectPass.shader->uniformLocation("glowOpacity"); + } - m_glowPass.sideGlowTexture = GLTexture::upload(QPixmap(QStringLiteral(":/effects/aeroblur/framecornereffect.png"))); - m_glowPass.sideGlowTexture->setFilter(GL_LINEAR_MIPMAP_LINEAR); - m_glowPass.sideGlowTexture->setWrapMode(GL_CLAMP_TO_EDGE); - m_glowPass.sideGlowTexture_unfocus = GLTexture::upload(QPixmap(QStringLiteral(":/effects/aeroblur/framecornereffect-unfocus.png"))); - m_glowPass.sideGlowTexture_unfocus->setFilter(GL_LINEAR_MIPMAP_LINEAR); - m_glowPass.sideGlowTexture_unfocus->setWrapMode(GL_CLAMP_TO_EDGE); + m_reflectPass.sideGlowTexture = GLTexture::upload(QPixmap(QStringLiteral(":/effects/aeroblur/framecornereffect.png"))); + m_reflectPass.sideGlowTexture->setFilter(GL_LINEAR_MIPMAP_LINEAR); + m_reflectPass.sideGlowTexture->setWrapMode(GL_CLAMP_TO_EDGE); + m_reflectPass.sideGlowTexture_unfocus = GLTexture::upload(QPixmap(QStringLiteral(":/effects/aeroblur/framecornereffect-unfocus.png"))); + m_reflectPass.sideGlowTexture_unfocus->setFilter(GL_LINEAR_MIPMAP_LINEAR); + m_reflectPass.sideGlowTexture_unfocus->setWrapMode(GL_CLAMP_TO_EDGE); initBlurStrengthValues(); reconfigure(ReconfigureAll); @@ -940,6 +932,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi renderInfo.framebuffers[0]->blitFromRenderTarget(renderTarget, viewport, dirtyRect, dirtyRect.translated(-backgroundRect.topLeft())); } + qCWarning(KWIN_BLUR) << m_iterationCount << " " << m_offset; // Upload the geometry: the first 6 vertices are used when downsampling and upsampling offscreen, // the remaining vertices are used when rendering on the screen. GLVertexBuffer *vbo = GLVertexBuffer::streamingBuffer(); @@ -1173,7 +1166,6 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi // Wayland Alt+Tab window if(effects->waylandDisplay() && !w->isWaylandClient() && w->window()->resourceName() == "") opaqueMaximize = false; - if(opaqueMaximize) { getMaximizedColorization(m_aeroIntensity, m_aeroColorR, m_aeroColorG, m_aeroColorB, r, g, b); @@ -1193,7 +1185,6 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi 0.5 / (double)read->colorAttachment()->height()); m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].halfpixelLocation, halfpixel); - m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].aeroColorRLocation, r); m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].aeroColorGLocation, g); m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].aeroColorBLocation, b); @@ -1221,10 +1212,8 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi } ShaderManager::instance()->popShader(); - - //bool opaqueMaximize = false; - glEnable(GL_BLEND); + glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); float finalOpacity = (float)opacity * (float)m_reflectionIntensity / 100.0f; if(opaqueMaximize) @@ -1233,19 +1222,15 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi if(!treatAsActive(w)) finalOpacity *= 0.5f; } - /*if (finalOpacity < 1.0) { - glBlendColor(0, 0, 0, finalOpacity); - glBlendFunc(GL_CONSTANT_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - }*/ - QRect windowRect = w->frameGeometry().toRect(); QSize screenSize = KWin::effects->virtualScreenSize(); auto windowPos = windowRect.topLeft(); auto windowSize = windowRect.size(); GLTexture *reflectTex = m_reflectPass.reflectTexture.get(); - if(reflectTex && finalOpacity != 0.0) + GLTexture *glowTex = !treatAsActive(w) ? m_reflectPass.sideGlowTexture_unfocus.get() : m_reflectPass.sideGlowTexture.get(); + bool enableGlow = shouldHaveCornerGlow(w) && m_enableCornerGlow && glowTex && !opaqueMaximize; + if(reflectTex || enableGlow) { - glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); ShaderManager::instance()->pushShader(m_reflectPass.shader.get()); QMatrix4x4 projectionMatrix = viewport.projectionMatrix(); @@ -1260,42 +1245,33 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi m_reflectPass.shader->setUniform(m_reflectPass.translateTextureLocation, m_translateTexture ? float(1.0) : float(0.0)); m_reflectPass.shader->setUniform(m_reflectPass.colorMatrixLocation, colorMat); + // Glow part + m_reflectPass.shader->setUniform(m_reflectPass.glowEnableLocation, enableGlow); + if(enableGlow) + { + const auto scale = viewport.scale(); + bool scaleY = false; + if(backgroundRect.height() != windowSize.height() && !scaledOrTransformed(w, mask, data)) scaleY = true; + const QRectF pixelGeometry = snapToPixelGridF(scaledRect(QRectF(0, 0, glowTex->width(), glowTex->height()), scale)); + + m_reflectPass.shader->setUniform(m_reflectPass.glowEnableLocation, enableGlow); + m_reflectPass.shader->setUniform(m_reflectPass.textureSizeLocation, QVector2D(pixelGeometry.width(), pixelGeometry.height())); + m_reflectPass.shader->setUniform(m_reflectPass.scaleYLocation, scaleY); + m_reflectPass.shader->setUniform(m_reflectPass.glowOpacityLocation, float(opacity*0.8)); + + glUniform1i(m_reflectPass.glowTextureLocation, 1); + glActiveTexture(GL_TEXTURE1); + glowTex->bind(); + } + + glUniform1i(m_reflectPass.reflectTextureLocation, 0); + glActiveTexture(GL_TEXTURE0); reflectTex->bind(); vbo->draw(GL_TRIANGLES, 6, vertexCount); ShaderManager::instance()->popShader(); } - if(shouldHaveCornerGlow(w) && m_enableCornerGlow) - { - glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - - GLTexture *glowTex = !treatAsActive(w) ? m_glowPass.sideGlowTexture_unfocus.get() : m_glowPass.sideGlowTexture.get(); - if(glowTex && opacity != 0.0 && !opaqueMaximize) - { - - ShaderManager::instance()->pushShader(m_glowPass.shader.get()); - QMatrix4x4 projectionMatrix = viewport.projectionMatrix(); - projectionMatrix.translate(deviceBackgroundRect.x(), deviceBackgroundRect.y()); - const auto scale = viewport.scale(); - - bool scaleY = false; - if(backgroundRect.height() != windowSize.height() && !scaledOrTransformed(w, mask, data)) scaleY = true; - const QRectF pixelGeometry = snapToPixelGridF(scaledRect(QRectF(0, 0, glowTex->width(), glowTex->height()), scale)); - m_glowPass.shader->setUniform(m_glowPass.mvpMatrixLocation, projectionMatrix); - m_glowPass.shader->setUniform(m_glowPass.opacityLocation, float(opacity*0.8)); - m_glowPass.shader->setUniform(m_glowPass.windowPosLocation, QVector2D(deviceBackgroundRect.x(), deviceBackgroundRect.y())); - m_glowPass.shader->setUniform(m_glowPass.windowSizeLocation, QVector2D(backgroundRect.width(), backgroundRect.height())); - m_glowPass.shader->setUniform(m_glowPass.textureSizeLocation, QVector2D(pixelGeometry.width(), pixelGeometry.height())); - m_glowPass.shader->setUniform(m_glowPass.scaleYLocation, scaleY); - m_glowPass.shader->setUniform(m_glowPass.colorMatrixLocation, colorMat); - glowTex->bind(); - vbo->draw(GL_TRIANGLES, 6, vertexCount); - - ShaderManager::instance()->popShader(); - - } - } glDisable(GL_BLEND); } diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h index 597fdaa7..b9dbec56 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h @@ -111,23 +111,10 @@ private: private: struct { + std::unique_ptr shader; + std::unique_ptr reflectTexture; std::unique_ptr sideGlowTexture; std::unique_ptr sideGlowTexture_unfocus; - std::unique_ptr shader; - - int colorMatrixLocation; - int textureSizeLocation; - int windowPosLocation; - int windowSizeLocation; - int mvpMatrixLocation; - int opacityLocation; - int scaleYLocation; - - } m_glowPass; - struct - { - std::unique_ptr shader; - std::unique_ptr reflectTexture; int mvpMatrixLocation; int colorMatrixLocation; int screenResolutionLocation; @@ -135,6 +122,14 @@ private: int windowSizeLocation; int opacityLocation; int translateTextureLocation; + int reflectTextureLocation; + + // Glow + int glowTextureLocation; + int glowEnableLocation; + int textureSizeLocation; + int scaleYLocation; + int glowOpacityLocation; } m_reflectPass; struct { diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/glow.frag b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/glow.frag deleted file mode 100644 index 5beb2447..00000000 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/glow.frag +++ /dev/null @@ -1,8 +0,0 @@ -uniform sampler2D texUnit; - -varying vec2 texcoord; - -void main() -{ - gl_FragColor = texture2D(texUnit, texcoord); -} diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/glow_core.frag b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/glow_core.frag deleted file mode 100644 index 0ef912f8..00000000 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/glow_core.frag +++ /dev/null @@ -1,35 +0,0 @@ -#version 140 - -uniform sampler2D texUnit; -uniform float opacity; -uniform vec2 windowSize; -uniform vec2 textureSize; -uniform vec2 windowPos; -uniform bool scaleY; -uniform mat4 colorMatrix; - -in vec2 uv; - -out vec4 fragColor; - -void main(void) -{ - float xpos = clamp((gl_FragCoord.x - windowPos.x) / windowSize.x, 0, 1); - - float t_x = uv.x; - if(xpos > 0.5) t_x = 1 - uv.x; - else t_x = uv.x; - - float t_y = uv.y; - if(scaleY) t_y = uv.y * windowSize.y; - else t_y = uv.y; - vec2 t_uv = vec2(windowSize.x * t_x / textureSize.x, windowSize.y * (1 - t_y) / textureSize.y); - - //fragColor = texture(sampler, newUV) * opacity; - - vec4 result = texture2D(texUnit, t_uv) * opacity; - - fragColor = result; - fragColor *= colorMatrix; -} - diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect.frag b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect.frag index 2e2ffafb..90a70aca 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect.frag +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect.frag @@ -4,9 +4,34 @@ uniform float translate; uniform vec2 screenResolution; uniform vec2 windowSize; uniform mat4 colorMatrix; - uniform vec2 windowPos; +// Glow +uniform vec2 textureSize; +uniform bool scaleY; +uniform sampler2D glowTexture; +uniform bool glowEnable; +uniform float glowOpacity; + +varying vec2 uv; + +vec4 glowFragment() +{ + float xpos = clamp((gl_FragCoord.x - windowPos.x) / windowSize.x, 0, 1); + + float t_x = uv.x; + if(xpos > 0.5) t_x = 1 - uv.x; + else t_x = uv.x; + + float t_y = uv.y; + if(scaleY) t_y = uv.y * windowSize.y; + else t_y = uv.y; + vec2 t_uv = vec2(windowSize.x * t_x / textureSize.x, windowSize.y * (1 - t_y) / textureSize.y); + + vec4 result = texture2D(glowTexture, t_uv) * glowOpacity; + return result; +} + void main(void) { @@ -19,11 +44,13 @@ void main(void) vec2 uv = vec2(x, -y); - vec4 result = vec4(texture2D(texUnit, uv).rgba); - result.a *= opacity; + vec4 result = vec4(texture2D(texUnit, uv).rgba) * opacity; + + if(glowEnable) + { + result += glowFragment(); + } gl_FragColor = result; gl_FragColor *= colorMatrix; - - //gl_FragColor.a = gl_FragColor.a * opacity; } diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect_core.frag b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect_core.frag index 4dfdaa7c..143d50ed 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect_core.frag +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect_core.frag @@ -5,13 +5,39 @@ uniform float opacity; uniform float translate; uniform vec2 screenResolution; uniform vec2 windowSize; - +uniform mat4 colorMatrix; uniform vec2 windowPos; -uniform mat4 colorMatrix; +// Glow +uniform vec2 textureSize; +uniform bool scaleY; +uniform sampler2D glowTexture; +uniform bool glowEnable; +uniform float glowOpacity; + +in vec2 uv; out vec4 fragColor; +vec4 glowFragment() +{ + float xpos = clamp((gl_FragCoord.x - windowPos.x) / windowSize.x, 0, 1); + + float t_x = uv.x; + if(xpos > 0.5) t_x = 1 - uv.x; + else t_x = uv.x; + + float t_y = uv.y; + if(scaleY) t_y = uv.y * windowSize.y; + else t_y = uv.y; + vec2 t_uv = vec2(windowSize.x * t_x / textureSize.x, windowSize.y * (1 - t_y) / textureSize.y); + + //fragColor = texture(sampler, newUV) * opacity; + + vec4 result = texture2D(glowTexture, t_uv) * glowOpacity; + return result; +} + void main(void) { float middleLine = windowPos.x + windowSize.x / 2.0; @@ -21,10 +47,14 @@ void main(void) float x = (gl_FragCoord.x + dx) / screenResolution.x; float y = (gl_FragCoord.y) / screenResolution.y; - vec2 uv = vec2(x, -y); + vec2 t_uv = vec2(x, -y); - vec4 result = texture(texUnit, uv) * opacity; + vec4 result = texture(texUnit, t_uv) * opacity; //result.a *= opacity; + if(glowEnable) + { + result += glowFragment(); + } fragColor = result; fragColor *= colorMatrix; From 85e5830d90d4b7f59a43e5c686523a5c428cbad0 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Thu, 3 Jul 2025 00:24:40 +0200 Subject: [PATCH 053/222] Prevent redundant opaque colorization color calculation --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 8 ++++++-- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index d27390d1..90377c0e 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -316,6 +316,9 @@ void BlurEffect::reconfigure(ReconfigureFlags flags) m_aeroColorB = fB; m_aeroColorA = (m_aeroIntensity - 26) / 191.0f; + getMaximizedColorization(m_aeroIntensity, m_aeroColorR, m_aeroColorG, m_aeroColorB, m_aeroColorROpaque, m_aeroColorGOpaque, m_aeroColorBOpaque); + + }; bool skip = false; bool readColor = readMemory(&skip) && m_firstTimeConfig; @@ -932,7 +935,6 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi renderInfo.framebuffers[0]->blitFromRenderTarget(renderTarget, viewport, dirtyRect, dirtyRect.translated(-backgroundRect.topLeft())); } - qCWarning(KWIN_BLUR) << m_iterationCount << " " << m_offset; // Upload the geometry: the first 6 vertices are used when downsampling and upsampling offscreen, // the remaining vertices are used when rendering on the screen. GLVertexBuffer *vbo = GLVertexBuffer::streamingBuffer(); @@ -1168,10 +1170,12 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi if(opaqueMaximize) { - getMaximizedColorization(m_aeroIntensity, m_aeroColorR, m_aeroColorG, m_aeroColorB, r, g, b); basicAlpha = 1.0; basicCol = true; useTransparency = true; + r = m_aeroColorROpaque; + g = m_aeroColorGOpaque; + b = m_aeroColorBOpaque; } if(basicCol) selectedPass = AeroPasses::BASIC; diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h index b9dbec56..b966d347 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h @@ -207,6 +207,10 @@ private: float m_aeroColorB; float m_aeroColorA; + float m_aeroColorROpaque; + float m_aeroColorGOpaque; + float m_aeroColorBOpaque; + int m_aeroPrimaryBalance; int m_aeroSecondaryBalance; int m_aeroBlurBalance; From 495b71b999d514c9d9b76b69fb92d56cdfc88f1d Mon Sep 17 00:00:00 2001 From: furkrn Date: Thu, 3 Jul 2025 15:50:13 +0300 Subject: [PATCH 054/222] Fix ./pv_conf.sh is not found when installing PlymouthVista --- .gitignore | 1 + install_misc_components.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b0518f6b..5894d61f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +PlymouthVista/ misc/defaulttooltip/build misc/uac-polkitagent/build misc/plymouth/plymouth-theme-smod/build diff --git a/install_misc_components.sh b/install_misc_components.sh index a477d983..ba41dc50 100755 --- a/install_misc_components.sh +++ b/install_misc_components.sh @@ -100,7 +100,7 @@ if [ "$answer" != "${answer#[Yy]}" ] ;then chmod +x ./compile.sh chmod +x ./install.sh ./compile.sh - pkexec ./install.sh + pkexec --keep-cwd ./install.sh echo "For more details, check out the project at https://github.com/furkrn/PlymouthVista" fi fi From 7966d98f33a20825c8503c6ca0c5fcd5f1a70cbf Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 4 Jul 2025 04:08:55 +0200 Subject: [PATCH 055/222] Fix SevenTasks thumbnail sizing on Wayland --- .../contents/ui/GroupThumbnails.qml | 19 ++++--- .../contents/ui/WindowThumbnail.qml | 54 +++++++++++++++---- 2 files changed, 57 insertions(+), 16 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml index 9914f78d..60254460 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml @@ -64,8 +64,8 @@ MouseArea { id: thumbnailList // check for null to get rid of null errors in console - property int maxThumbnailWidth: maxThumbnailItem == null ? 196 : maxThumbnailItem.implicitWidth - property int maxThumbnailHeight: maxThumbnailItem == null ? 142 : maxThumbnailItem.implicitHeight + property int maxThumbnailWidth: maxThumbnailItem == null ? 0 : maxThumbnailItem.implicitWidth + property int maxThumbnailHeight: maxThumbnailItem == null ? 0 : maxThumbnailItem.implicitHeight property Item maxThumbnailItem property int listWidth: contentWidth == 0 ? 196 : contentWidth @@ -77,16 +77,21 @@ MouseArea { if(isList) { for(var i = 0; i < thumbnailList.count; i++) { thumbnailItem = itemAtIndex(i); - if(thumbnailItem.implicitWidth >= thumbnailList.maxThumbnailWidth) - thumbnailList.maxThumbnailItem = thumbnailItem; + if(thumbnailItem) { + if(thumbnailItem.implicitWidth >= thumbnailList.maxThumbnailWidth) + thumbnailList.maxThumbnailItem = thumbnailItem; + } } } else { + maxThumbnailItem = null; for(var i = 0; i < thumbnailList.count; i++) { thumbnailItem = itemAtIndex(i); - console.log(thumbnailItem.implicitHeight); - if(thumbnailItem.implicitHeight >= thumbnailList.maxThumbnailHeight) - thumbnailList.maxThumbnailItem = thumbnailItem; + if(thumbnailItem) { + if(thumbnailItem.implicitHeight >= thumbnailList.maxThumbnailHeight) + thumbnailList.maxThumbnailItem = thumbnailItem; + + } } } } diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/WindowThumbnail.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/WindowThumbnail.qml index 02d45c86..a39b1049 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/WindowThumbnail.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/WindowThumbnail.qml @@ -1,3 +1,5 @@ +pragma ComponentBehavior: Bound + import QtQuick import QtQuick.Layouts @@ -33,16 +35,22 @@ MouseArea { readonly property var minimized: isGroupDelegate ? model.IsMinimized : root.minimized readonly property var demandsAttention: isGroupDelegate ? model.IsDemandingAttention : root.demandsAttention - property real thumbnailHeight: 94 + property int maxPreviewWidth: 164 + property int maxPreviewHeight: 94 + property real baselineAspectRatio: maxPreviewWidth / maxPreviewHeight + + property real thumbnailHeight: maxPreviewHeight readonly property int margins: Kirigami.Units.smallSpacing*8 - implicitWidth: 164 + margins + implicitWidth: maxPreviewWidth + margins implicitHeight: thumbnailHeight + margins + (tasks.iconsOnly ? header.height : 0) + (mprisControls.active ? (mprisControls.height - (Kirigami.Units.smallSpacing*2)) : 0) - onImplicitHeightChanged: if(isGroupDelegate) ListView.view.updateMaxSize() + onImplicitHeightChanged: if(isGroupDelegate) { + ListView.view.updateMaxSize() + } width: implicitWidth height: { @@ -280,10 +288,6 @@ MouseArea { sourceComponent: minimized ? appIcon : (KWindowSystem.isPlatformWayland ? (tasks.toolTipOpen ? waylandThumbnail : undefined) : x11Thumbnail) onLoaded: { - // It IS possible to make the thumbnail follow - // the Wayland thumbnail height but I suck - // at math too much to know how - // -catpswin56 if(sourceComponent !== x11Thumbnail) thumbnailRoot.thumbnailHeight = thumbnailLoader.height; if(isGroupDelegate && ListView.view !== null) ListView.view.updateMaxSize() } @@ -314,6 +318,7 @@ MouseArea { id: waylandThumbnail PipeWire.PipeWireSourceItem { + id: wl_pw_src nodeId: waylandItem.nodeId TaskManager.ScreencastingRequest { @@ -321,9 +326,40 @@ MouseArea { uuid: windows[0] } + // Calculates aspect ratio of the PipeWire stream size, which is effectively the window's dimensions + property real aspectRatio: (wl_pw_src.streamSize.height == 0) ? 0.0 : wl_pw_src.streamSize.width / wl_pw_src.streamSize.height + // If the stream's width is larger than the height, and also the aspectRatio is greater or equal to the + // aspect ratio of the maximum thumbnail's dimensions, then it follows that the thumbnail preview's width + // will be at the maximum, therefore it's a fixed known value. + // In this case, the height is calculated through simple proportions + // Otherwise the calculations can be derived in a similar manner + property bool widthTakesPrecedence: (wl_pw_src.streamSize.width > wl_pw_src.streamSize.height) && + (aspectRatio >= thumbnailRoot.baselineAspectRatio) + onStreamSizeChanged: { + outlineRect.updateSize(); + } + onReadyChanged: { + if(ready) outlineRect.updateSize(); + } Rectangle { - anchors.fill: parent - anchors.margins: -1 + id: outlineRect + anchors.centerIn: parent + + function updateSize() { + if(wl_pw_src.aspectRatio === 0.0 || !wl_pw_src.ready) { + width = 0; + height = 0; + } else if(wl_pw_src.widthTakesPrecedence) { + width = Math.floor(thumbnailRoot.maxPreviewWidth + 2); + height = Math.floor((thumbnailRoot.maxPreviewWidth / wl_pw_src.aspectRatio) + 2); + } else { + width = Math.floor((wl_pw_src.aspectRatio * thumbnailRoot.maxPreviewHeight) + 2); + height = Math.floor(thumbnailRoot.maxPreviewHeight + 2); + } + } + onHeightChanged: { + thumbnailRoot.thumbnailHeight = ((outlineRect.height-2) > 0) ? outlineRect.height-2 : thumbnailRoot.maxPreviewHeight + } color: "black" border.width: 1 From 39c7e5615be2bc199d249980f983fd56525f8961 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 4 Jul 2025 12:06:19 +0200 Subject: [PATCH 056/222] Add "Clone Panel" button to panel edit mode --- .../configuration/PanelConfiguration.qml | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml b/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml index 99d129ee..c03ac3e5 100644 --- a/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml +++ b/plasma/shells/org.kde.plasma.desktop/contents/configuration/PanelConfiguration.qml @@ -3,6 +3,7 @@ SPDX-License-Identifier: GPL-2.0-or-later */ +pragma ComponentBehavior: Bound import QtQuick import QtQuick.Layouts @@ -523,7 +524,8 @@ ColumnLayout { } Instantiator { - active: setPositionButton.checked + id: dialogInstantiator + active: setPositionButton.checked || clonePanelButton.checked asynchronous: true model: Application.screens Item { @@ -537,7 +539,7 @@ ColumnLayout { property var onClickedLocation flags: Qt.WindowStaysOnTopHint | Qt.WindowDoesNotAcceptFocus | Qt.BypassWindowManagerHint location: PlasmaCore.Types.Floating - visible: setPositionButton.checked && (panel.location !== onClickedLocation || modelData.name !== panel.screenToFollow.name) + visible: dialogInstantiator.active && (panel.location !== onClickedLocation || modelData.name !== panel.screenToFollow.name) x: modelData.virtualX + Kirigami.Units.largeSpacing y: modelData.virtualY + modelData.height / 2 - mainItem.height / 2 - margins.top @@ -547,7 +549,14 @@ ColumnLayout { height: Kirigami.Units.iconSizes.large icon.name: root.iconSource - onClicked: setPositionButton.moveTo(root.onClickedLocation, Window.window) + onClicked: { + if(setPositionButton.checked) + setPositionButton.moveTo(root.onClickedLocation, Window.window); + else if(clonePanelButton.checked) { + panel.clonePanelTo(root.onClickedLocation, dialogRoot.panelConfiguration.screenFromWindow(Window.window)); + clonePanelButton.checked = false; + } + } } } @@ -668,6 +677,17 @@ ColumnLayout { onClicked: plasmoid.internalAction("remove").trigger() } + QQC2.Button { + id: clonePanelButton + checkable: true + icon.name: "edit-copy-symbolic" + text: i18ndc("plasma_shell_org.kde.plasma.desktop", "@action:button Clone the panel", "Clone Panel") + + QQC2.ToolTip.text: i18ndc("plasma_shell_org.kde.plasma.desktop", "@info:tooltip", "Create a new panel with the same settings and applets") + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered + + } Item {Layout.fillWidth: true} From 89029217c672d2b74d1e6244732dd693c3127b4c Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 4 Jul 2025 21:28:43 +0200 Subject: [PATCH 057/222] Rework Firefox blur region rendering in AeroGlassBlur Hopefully fixes #57 --- .../src/aeroblur.qrc | 1 - .../kde-effects-aeroglassblur/src/blur.cpp | 50 +- .../kde-effects-aeroglassblur/src/blur.h | 9 +- .../kde-effects-aeroglassblur/src/blur.kcfg | 6 + .../src/kcm/blur_config.ui | 32 +- .../kde-effects-aeroglassblur/src/region.svg | 1362 ----------------- 6 files changed, 70 insertions(+), 1390 deletions(-) delete mode 100755 kwin/effects_cpp/kde-effects-aeroglassblur/src/region.svg diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/aeroblur.qrc b/kwin/effects_cpp/kde-effects-aeroglassblur/src/aeroblur.qrc index cb52602f..5dcbc6d8 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/aeroblur.qrc +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/aeroblur.qrc @@ -19,7 +19,6 @@ reflection.png framecornereffect.png framecornereffect-unfocus.png - region.svg frame.svg frame-select.svg diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 90377c0e..855e244d 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -14,6 +14,7 @@ #include "core/pixelgrid.h" #include "core/rendertarget.h" #include "core/renderviewport.h" +#include "core/output.h" #include "effect/effecthandler.h" #include "opengl/glplatform.h" #include "utils/xcbutils.h" @@ -32,6 +33,8 @@ #include #include #include +#include +#include #include #include @@ -149,8 +152,6 @@ BlurEffect::BlurEffect() : m_sharedMemory("kwinaero") initBlurStrengthValues(); reconfigure(ReconfigureAll); - defaultSvg.setImagePath(QStringLiteral(":/effects/aeroblur/region.svg")); - defaultSvg.setUsingRenderingCache(false); if (effects->xcbConnection()) { net_wm_blur_region = effects->announceSupportProperty(s_blurAtomName, this); @@ -354,6 +355,10 @@ void BlurEffect::reconfigure(ReconfigureFlags flags) m_windowClasses = BlurConfig::windowClasses().split("\n"); m_windowClassesColorization = BlurConfig::excludedColorization().split("\n"); m_firefoxWindows = BlurConfig::blurFirefox().split("\n"); + + m_firefoxCornerRadius = BlurConfig::firefoxCornerRadius(); + m_firefoxHollowRegion = BlurConfig::firefoxHollowRegion(); + m_blurMenus = BlurConfig::blurMenus(); m_blurDocks = BlurConfig::blurDocks(); m_paintAsTranslucent = BlurConfig::paintAsTranslucent(); @@ -389,27 +394,28 @@ bool BlurEffect::isFirefoxWindowValid(KWin::EffectWindow *w) return valid; } -QRegion BlurEffect::getForcedNewRegion() -{ - defaultSvg.clearCache(); - QPixmap alphaMask = defaultSvg.alphaMask(); - const qreal dpr = alphaMask.devicePixelRatio(); - // region should always be in logical pixels, resize pixmap to be in the logical sizes - if (alphaMask.devicePixelRatio() != 1.0) { - alphaMask = alphaMask.scaled(alphaMask.width() / dpr, alphaMask.height() / dpr); - } - return QRegion(QBitmap(alphaMask.mask())); -} - -QRegion BlurEffect::applyBlurRegion(KWin::EffectWindow *w) +QRegion BlurEffect::applyBlurRegion(KWin::EffectWindow *w, bool useFrame) { auto maximizeState = w->window()->maximizeMode(); - defaultSvg.resizeFrame(w->size()); - QRegion mask = defaultSvg.mask(); - if(mask.boundingRect().size() != w->size().toSize() && maximizeState != MaximizeMode::MaximizeFull) - { - mask = getForcedNewRegion(); + const auto scale = w->screen()->scale(); + const int radius = maximizeState == MaximizeMode::MaximizeFull ? 0 : m_firefoxCornerRadius * scale; + QPainterPath path; + if(useFrame) { + path.addRoundedRect(0, 0, w->frameGeometry().width(), w->frameGeometry().height(), radius, radius); + } else { + path.addRoundedRect(0, 0, w->expandedGeometry().width(), w->expandedGeometry().height(), radius, radius); } + + const int topMargin = 64 * scale; + const int margin = 9 * scale; + + QRegion mask(path.toFillPolygon().toPolygon()); + if(!m_firefoxHollowRegion || (mask.boundingRect().width() <= 2*margin || mask.boundingRect().height() < topMargin+margin)) return mask; + QRect hollowRect = mask.boundingRect(); + hollowRect.setWidth(hollowRect.width() - 2*margin); + hollowRect.setHeight(hollowRect.height() - margin - topMargin); + QRegion hollowRegion(hollowRect); + mask ^= hollowRegion.translated(margin, topMargin); return mask; } void BlurEffect::updateBlurRegion(EffectWindow *w) @@ -466,12 +472,12 @@ void BlurEffect::updateBlurRegion(EffectWindow *w) } } - if(isFirefoxWindowValid(w) && defaultSvg.isValid()) + if(isFirefoxWindowValid(w)) { if(!(content.has_value() || frame.has_value())) { if(isX11WithCSD) - frame = applyBlurRegion(w); + frame = applyBlurRegion(w, true); else content = applyBlurRegion(w); } diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h index b966d347..3aa866b2 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h @@ -66,8 +66,7 @@ public: QMatrix4x4 colorMatrix(const float &brightness, const float &saturation) const; //FF stuff - QRegion applyBlurRegion(KWin::EffectWindow *w); - QRegion getForcedNewRegion(); + QRegion applyBlurRegion(KWin::EffectWindow *w, bool useFrame = false); bool isFirefoxWindowValid(KWin::EffectWindow *w); bool provides(Feature feature) override; @@ -186,6 +185,10 @@ private: QStringList m_windowClasses; QStringList m_windowClassesColorization; QStringList m_firefoxWindows; + + int m_firefoxCornerRadius; + bool m_firefoxHollowRegion; + bool m_blurMatching; bool m_blurNonMatching; bool m_blurMenus; @@ -251,8 +254,6 @@ private: static QTimer *s_blurManagerRemoveTimer; QSharedMemory m_sharedMemory; - KSvg::FrameSvg defaultSvg; - }; inline bool BlurEffect::provides(Effect::Feature feature) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg index 81dd9a72..0fa9561a 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg @@ -14,6 +14,12 @@ firefox + + 6 + + + true + true diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui index 854e8f35..b83eda6b 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui @@ -20,7 +20,7 @@ - 0 + 1 @@ -392,6 +392,36 @@ + + + + Don't render blur on the inside of Firefox windows (disabling this reduces performance) + + + + + + + + + + + 0 + 0 + + + + + + + + Firefox blur corner radius (radius gets DPI scaled by the effect) + + + + + + diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/region.svg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/region.svg deleted file mode 100755 index fa9a7b40..00000000 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/region.svg +++ /dev/null @@ -1,1362 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 0a155aadf1252a2dc6b00eeb83dd347e65622b8c Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 4 Jul 2025 21:43:59 +0200 Subject: [PATCH 058/222] Include option to toggle KRunner opaqueness --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 3 ++- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h | 1 + kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg | 3 +++ .../kde-effects-aeroglassblur/src/kcm/blur_config.ui | 7 +++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 855e244d..77878a96 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -358,6 +358,7 @@ void BlurEffect::reconfigure(ReconfigureFlags flags) m_firefoxCornerRadius = BlurConfig::firefoxCornerRadius(); m_firefoxHollowRegion = BlurConfig::firefoxHollowRegion(); + m_opaqueKrunner = BlurConfig::opaqueKrunner(); m_blurMenus = BlurConfig::blurMenus(); m_blurDocks = BlurConfig::blurDocks(); @@ -1166,7 +1167,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi } else opaqueMaximize = maximizeState == MaximizeMode::MaximizeFull && windowClass != "kwin" && w->caption() != "sevenstart-menurepresentation"; } - if(w->window()->resourceName() == "krunner" && w->window()->resourceClass() == "krunner") opaqueMaximize = true; + if(w->window()->resourceName() == "krunner" && w->window()->resourceClass() == "krunner" && m_opaqueKrunner) opaqueMaximize = true; if(w->isOnScreenDisplay()) opaqueMaximize = true; // X11 Alt+Tab window diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h index 3aa866b2..9cf2ee0e 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h @@ -189,6 +189,7 @@ private: int m_firefoxCornerRadius; bool m_firefoxHollowRegion; + bool m_opaqueKrunner; bool m_blurMatching; bool m_blurNonMatching; bool m_blurMenus; diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg index 0fa9561a..7d434ca5 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg @@ -20,6 +20,9 @@ true + + true + true diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui index b83eda6b..84802c68 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui @@ -385,6 +385,13 @@ + + + + Make KRunner opaque + + + From 53c14080fa3f554e3b4fef85a24c06f57d0f3187 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 4 Jul 2025 21:53:37 +0200 Subject: [PATCH 059/222] Include option to toggle OSDs opaqueness in AeroGlassBlur --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 3 ++- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h | 1 + kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg | 3 +++ .../kde-effects-aeroglassblur/src/kcm/blur_config.ui | 7 +++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 77878a96..53be2485 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -359,6 +359,7 @@ void BlurEffect::reconfigure(ReconfigureFlags flags) m_firefoxCornerRadius = BlurConfig::firefoxCornerRadius(); m_firefoxHollowRegion = BlurConfig::firefoxHollowRegion(); m_opaqueKrunner = BlurConfig::opaqueKrunner(); + m_opaqueOSD = BlurConfig::opaqueOSD(); m_blurMenus = BlurConfig::blurMenus(); m_blurDocks = BlurConfig::blurDocks(); @@ -1169,7 +1170,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi } if(w->window()->resourceName() == "krunner" && w->window()->resourceClass() == "krunner" && m_opaqueKrunner) opaqueMaximize = true; - if(w->isOnScreenDisplay()) opaqueMaximize = true; + if(w->isOnScreenDisplay() && m_opaqueOSD) opaqueMaximize = true; // X11 Alt+Tab window if(w->caption() == "" && windowClass == "kwin") opaqueMaximize = false; // Wayland Alt+Tab window diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h index 9cf2ee0e..f51d1c43 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h @@ -190,6 +190,7 @@ private: bool m_firefoxHollowRegion; bool m_opaqueKrunner; + bool m_opaqueOSD; bool m_blurMatching; bool m_blurNonMatching; bool m_blurMenus; diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg index 7d434ca5..05c22843 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg @@ -23,6 +23,9 @@ true + + true + true diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui index 84802c68..faa93f23 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui @@ -392,6 +392,13 @@ + + + + Make on screen displays opaque + + + From b44425a2e643568d8e77c860ba8d2fc11063474a Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 5 Jul 2025 11:21:00 +0200 Subject: [PATCH 060/222] Raise default ff blur margin, add KCM configs for the margin --- .../kde-effects-aeroglassblur/src/blur.cpp | 3 +- .../kde-effects-aeroglassblur/src/blur.h | 1 + .../kde-effects-aeroglassblur/src/blur.kcfg | 3 ++ .../src/kcm/blur_config.cpp | 6 ++++ .../src/kcm/blur_config.h | 1 + .../src/kcm/blur_config.ui | 34 ++++++++++++++++++- 6 files changed, 46 insertions(+), 2 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 53be2485..73dfef24 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -357,6 +357,7 @@ void BlurEffect::reconfigure(ReconfigureFlags flags) m_firefoxWindows = BlurConfig::blurFirefox().split("\n"); m_firefoxCornerRadius = BlurConfig::firefoxCornerRadius(); + m_firefoxBlurTopMargin = BlurConfig::firefoxBlurTopMargin(); m_firefoxHollowRegion = BlurConfig::firefoxHollowRegion(); m_opaqueKrunner = BlurConfig::opaqueKrunner(); m_opaqueOSD = BlurConfig::opaqueOSD(); @@ -408,7 +409,7 @@ QRegion BlurEffect::applyBlurRegion(KWin::EffectWindow *w, bool useFrame) path.addRoundedRect(0, 0, w->expandedGeometry().width(), w->expandedGeometry().height(), radius, radius); } - const int topMargin = 64 * scale; + const int topMargin = m_firefoxBlurTopMargin * scale; const int margin = 9 * scale; QRegion mask(path.toFillPolygon().toPolygon()); diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h index f51d1c43..4d0951c1 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h @@ -187,6 +187,7 @@ private: QStringList m_firefoxWindows; int m_firefoxCornerRadius; + int m_firefoxBlurTopMargin; bool m_firefoxHollowRegion; bool m_opaqueKrunner; diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg index 05c22843..98fd5098 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg @@ -20,6 +20,9 @@ true + + 96 + true diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp index f70bd0a5..d172e4c3 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp @@ -42,6 +42,7 @@ BlurEffectConfig::BlurEffectConfig(QObject *parent, const KPluginMetaData &data) connect(ui.clear_pushButton, SIGNAL(clicked()), this, SLOT(clearTexturePath())); connect(ui.showAccentColor_label, SIGNAL(linkActivated(QString)), this, SLOT(openColorMixer(QString))); connect(ui.kcfg_ReflectionIntensity, SIGNAL(valueChanged(int)), this, SLOT(on_kcfg_ReflectionIntensity_valueChanged(int))); + connect(ui.kcfg_FirefoxHollowRegion, SIGNAL(checkStateChanged(Qt::CheckState)), this, SLOT(on_kcfg_FirefoxHollowRegion_checkStateChanged(Qt::CheckState))); m_window = new MainWindow(ui.kcfg_AccentColorName, ui.kcfg_EnableTransparency, ui.kcfg_AeroHue, ui.kcfg_AeroSaturation, ui.kcfg_AeroBrightness, @@ -49,6 +50,7 @@ BlurEffectConfig::BlurEffectConfig(QObject *parent, const KPluginMetaData &data) m_window->setWindowModality(Qt::WindowModality::WindowModal); ui.reflectionLabel->setText(QString::number(ui.kcfg_ReflectionIntensity->value()) + " %" ); + on_kcfg_FirefoxHollowRegion_checkStateChanged(ui.kcfg_FirefoxHollowRegion->checkState()); } void BlurEffectConfig::openColorMixer(QString str) @@ -61,6 +63,10 @@ BlurEffectConfig::~BlurEffectConfig() delete m_dialog; } +void BlurEffectConfig::on_kcfg_FirefoxHollowRegion_checkStateChanged(Qt::CheckState state) +{ + ui.kcfg_FirefoxBlurTopMargin->setEnabled(state != Qt::Unchecked); +} void BlurEffectConfig::on_kcfg_ReflectionIntensity_valueChanged(int value) { ui.reflectionLabel->setText(QString::number(ui.kcfg_ReflectionIntensity->value()) + " %" ); diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.h index 494ddfee..d0c8bfc1 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.h @@ -38,6 +38,7 @@ private slots: void on_kcfg_AeroSaturation_valueChanged(int value); void on_kcfg_AeroBrightness_valueChanged(int value); void on_kcfg_ReflectionIntensity_valueChanged(int value); + void on_kcfg_FirefoxHollowRegion_checkStateChanged(Qt::CheckState state); private: ::Ui::BlurEffectConfig ui; diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui index faa93f23..2670b9cd 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui @@ -20,7 +20,7 @@ - 1 + 0 @@ -436,6 +436,38 @@ + + + + + + + + 0 + 0 + + + + px + + + 96 + + + 512 + + + + + + + Firefox blur top margin + + + + + + From ddaea90f8c39f0495e4c849d79a4b0017190a4a8 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 5 Jul 2025 11:26:50 +0200 Subject: [PATCH 061/222] SevenTasks: Fix weird group thumbnails bug under X11 --- .../contents/ui/GroupThumbnails.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml index 60254460..0f8df5d3 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.seventasks/contents/ui/GroupThumbnails.qml @@ -84,7 +84,7 @@ MouseArea { } } else { - maxThumbnailItem = null; + if(KWindowSystem.isPlatformWayland) maxThumbnailItem = null; for(var i = 0; i < thumbnailList.count; i++) { thumbnailItem = itemAtIndex(i); if(thumbnailItem) { From 5e2c1865bb8ab15aedd4af37e01a680c295c5fb7 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 5 Jul 2025 23:05:04 +0200 Subject: [PATCH 062/222] Remove interpolation in volume mixer sliders --- .../contents/ui/VolumeSlider.qml | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.volume/contents/ui/VolumeSlider.qml b/plasma/plasmoids/io.gitgud.wackyideas.volume/contents/ui/VolumeSlider.qml index 4cb72ad0..9657a14d 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.volume/contents/ui/VolumeSlider.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.volume/contents/ui/VolumeSlider.qml @@ -40,22 +40,6 @@ PC3.Slider { target: control.visible ? control.volumeObject : null } - Behavior on volume { - NumberAnimation { - id: animate - duration: Kirigami.Units.shortDuration - easing.type: Easing.Linear - } - } - - // When a maximum volume limit is raised/lower, animate the change. - Behavior on to { - NumberAnimation { - duration: Kirigami.Units.shortDuration - easing.type: Easing.InOutQuad - } - } - opacity: muted ? 0.5 : 1 // Prevents the groove from showing through the handle @@ -176,7 +160,7 @@ PC3.Slider { width: greenBar.width implicitHeight: greenBar.height Behavior on implicitHeight { - NumberAnimation { duration: grayBar.height > greenBar.height ? (animate.duration / 2) : 1 } + NumberAnimation { duration: grayBar.height > greenBar.height ? (Kirigami.Units.shortDuration / 2) : 1 } } color: "gray" From d39e4842dc2cdcb0918b66529cd324bf6d10131d Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 6 Jul 2025 20:59:00 +0200 Subject: [PATCH 063/222] Update Colorization KCM, add a bunch of preset colors - Requires updating AeroGlassBlur and also SMOD decorations for the full experience --- .../decoration/kdecoration/breezedecoration.h | 6 + .../kde-effects-aeroglassblur/src/blur.cpp | 5 +- .../kde-effects-aeroglassblur/src/blur.kcfg | 3 + .../src/kcm/CMakeLists.txt | 1 + .../src/kcm/blur_config.cpp | 2 +- .../src/kcm/blur_config.qrc | 2 + .../src/kcm/blur_config.ui | 51 +- .../src/kcm/colorwindow.cpp | 12 +- .../src/kcm/colorwindow.h | 7 +- .../src/kcm/inner_borders_active.png | Bin 0 -> 262 bytes .../src/kcm/inner_borders_inactive.png | Bin 0 -> 257 bytes .../src/kcm/mainwindow.cpp | 178 ++- .../src/kcm/mainwindow.h | 118 +- .../src/kcm/mainwindow.ui | 1399 +++++++++-------- .../src/kcm/qgraphicsgloweffect.cpp | 94 ++ .../src/kcm/qgraphicsgloweffect.h | 41 + .../kde-effects-aeroglassblur/src/wackyfunc.h | 11 + screenshots/colorization.png | Bin 109092 -> 142052 bytes 18 files changed, 1213 insertions(+), 717 deletions(-) create mode 100644 kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/inner_borders_active.png create mode 100644 kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/inner_borders_inactive.png create mode 100644 kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/qgraphicsgloweffect.cpp create mode 100644 kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/qgraphicsgloweffect.h diff --git a/kwin/decoration/kdecoration/breezedecoration.h b/kwin/decoration/kdecoration/breezedecoration.h index 0e8a6612..6bb9b1a9 100644 --- a/kwin/decoration/kdecoration/breezedecoration.h +++ b/kwin/decoration/kdecoration/breezedecoration.h @@ -19,6 +19,7 @@ #include #include #include +#include #define INNER_BORDER_SIZE 2 @@ -264,18 +265,23 @@ bool Decoration::isPolkit() const } bool Decoration::hideIcon() const { + if(window()->windowClass() == "systemsettings systemsettings" && window()->caption().startsWith("aerothemeplasma-personalize")) return true; if(isGadgetExplorer() || isPolkit()) return true; return m_internalSettings->hideIcon() && !window()->isShaded(); } bool Decoration::hideCaption() const { + // Personalization page + if(window()->windowClass() == "systemsettings systemsettings" && window()->caption().startsWith("aerothemeplasma-personalize")) return true; if(isGadgetExplorer()) return true; return m_internalSettings->hideCaption() && !window()->isShaded(); } bool Decoration::hideInnerBorder() const { + // Personalization page + if(window()->windowClass() == "systemsettings systemsettings" && window()->caption().startsWith("aerothemeplasma-personalize")) return true; if(isGadgetExplorer()) return true; return m_internalSettings->hideInnerBorder() && !window()->isShaded(); } diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 73dfef24..728602c2 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -318,8 +318,9 @@ void BlurEffect::reconfigure(ReconfigureFlags flags) m_aeroColorA = (m_aeroIntensity - 26) / 191.0f; getMaximizedColorization(m_aeroIntensity, m_aeroColorR, m_aeroColorG, m_aeroColorB, m_aeroColorROpaque, m_aeroColorGOpaque, m_aeroColorBOpaque); - - + if(m_aeroIntensity < 26) { + m_aeroColorA = m_aeroIntensity / 255.0f; + } }; bool skip = false; bool readColor = readMemory(&skip) && m_firstTimeConfig; diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg index 98fd5098..b0db0054 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg @@ -64,6 +64,9 @@ true + + 0 + 1 diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/CMakeLists.txt b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/CMakeLists.txt index 78177261..96c40203 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/CMakeLists.txt +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/CMakeLists.txt @@ -8,6 +8,7 @@ set(kwin_aeroglassblur_config_SRCS colorwindow.h colorbutton.h colorbutton.cpp + qgraphicsgloweffect.cpp blur_config.qrc ) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp index d172e4c3..e3270327 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp @@ -44,7 +44,7 @@ BlurEffectConfig::BlurEffectConfig(QObject *parent, const KPluginMetaData &data) connect(ui.kcfg_ReflectionIntensity, SIGNAL(valueChanged(int)), this, SLOT(on_kcfg_ReflectionIntensity_valueChanged(int))); connect(ui.kcfg_FirefoxHollowRegion, SIGNAL(checkStateChanged(Qt::CheckState)), this, SLOT(on_kcfg_FirefoxHollowRegion_checkStateChanged(Qt::CheckState))); - m_window = new MainWindow(ui.kcfg_AccentColorName, ui.kcfg_EnableTransparency, + m_window = new MainWindow(ui.kcfg_AccentColorName, ui.kcfg_AccentColorGroup, ui.kcfg_EnableTransparency, ui.kcfg_AeroHue, ui.kcfg_AeroSaturation, ui.kcfg_AeroBrightness, ui.kcfg_AeroIntensity, ui.kcfg_CustomColor, this, nullptr); m_window->setWindowModality(Qt::WindowModality::WindowModal); diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.qrc b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.qrc index eb5d245a..280926db 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.qrc +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.qrc @@ -2,5 +2,7 @@ frame.svg frame-select.svg + inner_borders_inactive.png + inner_borders_active.png diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui index 2670b9cd..268f2ce8 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui @@ -7,7 +7,7 @@ 0 0 577 - 853 + 867 @@ -103,7 +103,11 @@ - + + + 255 + + @@ -475,146 +479,149 @@ - + Intensity: - + Hue: - + Saturation: - + Brightness: - + Red: - + Green: - + Blue: - + Color Balance: - + Afterflow Balance: - + TextLabel - + Blur Balance: - + TextLabel - + TextLabel - + TextLabel - + TextLabel - + TextLabel - + TextLabel - + TextLabel - + TextLabel - + TextLabel + + + diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/colorwindow.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/colorwindow.cpp index 1ffb1f76..2546ab52 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/colorwindow.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/colorwindow.cpp @@ -1,10 +1,11 @@ #include "colorwindow.h" -ColorWindow::ColorWindow(QString str, QColor col, QWidget* wnd, int i) +ColorWindow::ColorWindow(QString str, QColor col, QWidget* wnd, int i, int group) { name = str; color = col; parent = wnd; + m_colorGroup = group; mainFrame = new QFrame(wnd); mainFrame->setMaximumSize(72, 72); @@ -39,6 +40,10 @@ ColorWindow::ColorWindow(QString str, QColor col, QWidget* wnd, int i) } +void ColorWindow::setVisible(bool visible) +{ + mainFrame->setVisible(visible); +} void ColorWindow::setStyle() { @@ -86,6 +91,11 @@ void ColorWindow::setStyle() } +int ColorWindow::colorGroup() const +{ + return m_colorGroup; +} + void ColorWindow::setColor(QColor c) { color = c; diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/colorwindow.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/colorwindow.h index 3d89356b..636f80a7 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/colorwindow.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/colorwindow.h @@ -20,7 +20,7 @@ class ColorWindow { public: - explicit ColorWindow(QString, QColor, QWidget*, int); + explicit ColorWindow(QString, QColor, QWidget*, int, int); void setColor(QColor); QString getName(); QColor getColor(); @@ -28,7 +28,8 @@ public: QPushButton* getButton(); ColorButton* getFrameButton(); void clear(); - + int colorGroup() const; + void setVisible(bool); private: void setStyle(); @@ -41,6 +42,8 @@ private: QPushButton* childFrame; QGridLayout* layout; + int m_colorGroup = 0; + }; #endif // COLORWINDOW_H diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/inner_borders_active.png b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/inner_borders_active.png new file mode 100644 index 0000000000000000000000000000000000000000..4146f74281291b16a6bd2d9b6ca0eeb826389430 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=#^NA%C&rs6b?Si}mUKs7M+SzC z{oH>NK`IrJJ%W507^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10g0sLQ zvY3H^?=T269?xHq0u*E~@$_|Nf62}&CZn#r{WnNmjHioZ2*-8PGlqhP4Fp^+>K|nY zN-a}U30iK9Ub}T(@j3o& x!Iu~&nB=6hc69h&>geEIaN}O%`&y>w@{d!M%H}MUmH^tr;OXk;vd$@?2>>{kQGNgb literal 0 HcmV?d00001 diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/inner_borders_inactive.png b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/inner_borders_inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..9eaf93dc26b0ced12795da216e57f2574994b8a5 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=#^NA%C&rs6b?Si}mUKs7M+SzC z{oH>NK`IrJJ%W507^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10g0sLQ zvY3H^?=T269?xHq0u*E~@$_|Nf62}&CS&EWaXQGta8DP<5RU7nXBG-J7znsrJpa(( zOhVXVgA!rMnc2#!fi9;O^q6dDekA%qjNvxxjYdhq^I5yU-0P3hEdG(I1Fc~2boFyt=akR{0QCP(p8x;= literal 0 HcmV?d00001 diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp index 82f120a6..ab319b52 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp @@ -7,9 +7,11 @@ #include #include #include +#include #include "blur_config.h" + // Clamps the value n into the interval [low, high]. float constrain(float n, float low, float high) { return std::max(std::min(n, high), low); @@ -45,7 +47,7 @@ QColor mixColor(QColor col, double percentage) { return QColor(r1 + r2, g1 + g2, b1 + b2); } -MainWindow::MainWindow(QSpinBox *spinbox, QCheckBox *checkbox, +MainWindow::MainWindow(QSpinBox *spinbox, QSpinBox *spinboxg, QCheckBox *checkbox, QSlider* hslider, QSlider* sslider, QSlider* vslider, QSlider* islider, QLineEdit* custom, KCModule* config, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { @@ -86,8 +88,13 @@ MainWindow::MainWindow(QSpinBox *spinbox, QCheckBox *checkbox, kcfg_AeroSaturation = sslider; kcfg_AeroBrightness = vslider; kcfg_CustomColor = custom; + kcfg_AccentColorGroup = spinboxg; config_parent = config; + if(kcfg_AccentColorGroup->value() >= colorGroups.size()) { + kcfg_AccentColorGroup->setValue(0); + } + ui->kcfg_EnableTransparency->setChecked(checkbox->isChecked()); // Setting attributes which will allow the window to have a transparent // blurred background. @@ -99,20 +106,43 @@ MainWindow::MainWindow(QSpinBox *spinbox, QCheckBox *checkbox, "background: transparent;" "}" ); + ui->centralwidget->setStyleSheet( + "QWidget#centralwidget {" + "background: transparent;" + "}" + ); - /*this->winId(); - KWindowEffects::enableBlurBehind( - this->windowHandle(), true, QRegion(0, 0, this->width(), this->height()));*/ - fflush(stdout); + footer_color = QWidget::palette().window().color(); + background_color = QWidget::palette().base().color(); - QColor theme_color = QWidget::palette().window().color(); - background_style = background_style.replace( - '!', "rgba(" + QString::number(theme_color.red()) + "," + - QString::number(theme_color.green()) + "," + - QString::number(theme_color.blue()) + "," + "255))"); + QColor border_color = QWidget::palette().midlight().color(); - ui->centralwidget->setStyleSheet(background_style); + // Using QToolBar to make the entire extended titlebar draggable + QLabel *titleLabel = new QLabel("

Change the color of your window borders, Start menu, and taskbar

"); + QGraphicsGlowEffect *glow_effect = new QGraphicsGlowEffect(); + glow_effect->setStrength(5); + glow_effect->setBlurRadius(8); + titleLabel->setGraphicsEffect(glow_effect); + titleLabel->setIndent(12); + titleLabel->setMargin(2); + ui->toolBar->addWidget(titleLabel); + ui->scrollAreaWidgetContents->setContentsMargins(128, 12, 128, 12); + ui->scrollArea->verticalScrollBar()->installEventFilter(this); + + QColor light_text_color = QWidget::palette().brush(QPalette::Disabled, QPalette::PlaceholderText).color(); + ui->colorPaletteLabel->setStyleSheet( + "QLabel#colorPaletteLabel {" + "color: " + light_text_color.name() + ";" + "}" + ); + + ui->footer->setStyleSheet( + "QWidget#footer {" + "background: " + footer_color.name() + ";" + "border-top: 1px solid " + border_color.name() + ";" + "}" + ); // Setting up more UI stuff. ui->colorMixerGroupBox->setVisible(false); @@ -142,36 +172,33 @@ MainWindow::MainWindow(QSpinBox *spinbox, QCheckBox *checkbox, QString::number(ui->saturation_Slider->value())); ui->brightness_label->setText(QString::number(ui->Lightness_Slider->value())); - // Predefined color values directly pulled from Windows 7, with the exception - // of Sunset, which is an original color value. - QStringList values = { - "6b74b8fc-Custom", "6b74b8fc-Sky", "a80046ad-Twilight", - "8032cdcd-Sea", "6614a600-Leaf", "6697d937-Lime", - "54fadc0e-Sun", "80ff9c00-Pumpkin", "a8ce0f0f-Ruby", - "66ff0099-Fuchsia", "70fcc7f8-Blush ", "856e3ba1-Violet", - "528d5a94-Lavander", "6698844c-Taupe", "a84f1b1b-Chocolate", - "80555555-Slate", "54fcfcfc-Frost", "78b3198d-Sunset", - "45409efe-Default", - "a3000000-Graphite", - "a8004ade-Blue", - "82008ca5-Teal", - "9cce0c0f-Red", - "a6ff7700-Orange", - "49f93ee7-Pink", - "cceff7f7-Frost", - }; + groupedActions = new QActionGroup(nullptr); + groupedActions->setExclusive(true); + // Populate QMenu with groups + for(int i = 0; i < colorGroups.size(); i++) { + QAction *action = new QAction(colorGroups[i]); + action->setCheckable(true); + action->setActionGroup(groupedActions); + groupContextMenu.addAction(action); + } + connect(&groupContextMenu, &QMenu::triggered, this, &MainWindow::on_colorGroup_triggered); + connect(ui->colorGroupLabel, &QPushButton::clicked, this, &MainWindow::on_colorGroupLabel_clicked); + connect(ui->kcfg_AccentColorGroup, &QSpinBox::valueChanged, this, &MainWindow::on_colorGroupSpinBox_valueChanged); + + ui->kcfg_AccentColorGroup->setValue(kcfg_AccentColorGroup->value()); + ui->kcfg_AccentColorGroup->setVisible(false); + groupedActions->actions()[kcfg_AccentColorGroup->value()]->setChecked(true); + for (int i = 0; i < values.size(); i++) { QStringList temp = values[i].split("-"); predefined_colors.push_back( - ColorWindow(temp[1], QColor("#" + temp[0]), ui->groupBox, i)); + ColorWindow(temp[1], QColor("#" + temp[0]), ui->groupBox, i, temp[2].toInt())); } - // By default, the selected color is Sky. selected_color = kcfg_AccentColorName->value(); // Creating a FlowLayout and storing all the colors there. colorLayout = new FlowLayout(ui->groupBox); - colorLayout->setContentsMargins(25, 25, 25, 25); for (unsigned int i = 0; i < predefined_colors.size(); i++) { colorLayout->addWidget(predefined_colors[i].getFrame()); @@ -183,6 +210,27 @@ MainWindow::MainWindow(QSpinBox *spinbox, QCheckBox *checkbox, predefined_colors[0].setColor(QColor::fromString(kcfg_CustomColor->text())); predefined_colors[selected_color].getFrameButton()->setSelected(true); changeColor(selected_color); + + applyFilter(); +} +void MainWindow::applyFilter() +{ + for(int i = 0; i < predefined_colors.size(); i++) + { + /*if(i == 0) + { + predefined_colors[i].setVisible(ui->kcfg_AccentColorGroup->value() == colorGroups.size()-1); + continue; + }*/ + predefined_colors[i].setVisible(predefined_colors[i].colorGroup() == ui->kcfg_AccentColorGroup->value()); + } +} + +void MainWindow::on_colorGroupSpinBox_valueChanged(int value) +{ + QString actionText = groupedActions->actions()[value]->text(); + ui->colorGroupLabel->setText(actionText + " ⏷"); + applyFilter(); } MainWindow::~MainWindow() { @@ -191,10 +239,55 @@ MainWindow::~MainWindow() { } delete ui; } +void MainWindow::on_colorGroupLabel_clicked() +{ + auto menuWidth = groupContextMenu.sizeHint().width(); + auto position = ui->colorGroupLabel->mapToGlobal(QPoint(0,0)); + position += QPoint(ui->colorGroupLabel->width(), ui->colorGroupLabel->height()); + position -= QPoint(menuWidth, 0); + groupContextMenu.popup(position); +} +void MainWindow::on_colorGroup_triggered(QAction *action) +{ + int index = groupedActions->actions().indexOf(action); + ui->kcfg_AccentColorGroup->setValue(index); +} + +bool MainWindow::eventFilter(QObject *o, QEvent *e) +{ + if(o == ui->scrollArea->verticalScrollBar()) + { + if(e->type() == QEvent::Show || e->type() == QEvent::Hide) + { + ui->scrollAreaWidgetContents->setContentsMargins(128 - (e->type() == QEvent::Show ? ui->scrollArea->verticalScrollBar()->width() : 0), 12, 128, 12); + } + } + return QMainWindow::eventFilter(o, e); +} +void MainWindow::on_windowActiveChanged() +{ + if(window_handle) { + window_handle->setIcon(QIcon::fromTheme("preferences-desktop-theme-global")); + ui->frame->setStyleSheet(QString("QFrame#frame {\n") + + "border-image: url(\":/svgs/inner_borders_" + (window_handle->isActive() ? QStringLiteral("active") : QStringLiteral("inactive")) + ".png\") 2 2 2 2;\n" + + "border-top: 2px transparent;\n" + + "border-left: 2px transparent;\n" + + "border-bottom: 2px transparent;\n"+ + "border-right: 2px transparent;\n" + + "background-color: " + background_color.name() + ";\n" + + "background-clip: padding;\n" + + "}\n"); + } +} void MainWindow::showEvent(QShowEvent *event) { - KWindowEffects::enableBlurBehind(this->windowHandle(), true, QRegion(0,0, 0, 0)); + if(this->windowHandle()) { + KWindowEffects::enableBlurBehind(this->windowHandle(), true, QRegion(0,0, 0, 0)); + window_handle = this->windowHandle(); + connect(window_handle, SIGNAL(activeChanged()), this, SLOT(on_windowActiveChanged())); + } + } /* * Returns the currently set color. Depending on the transparency settings, the @@ -225,8 +318,11 @@ void MainWindow::resetToDefault() { // resetting the custom color predefined_colors[0].setColor(QColor::fromString(kcfg_CustomColor->text())); predefined_colors[selected_color].getFrameButton()->setSelected(false); - changeColor(kcfg_AccentColorName->value(), false); + changeColor(kcfg_AccentColorName->value(), true); predefined_colors[kcfg_AccentColorName->value()].getFrameButton()->setSelected(true); + ui->kcfg_AccentColorGroup->setValue(kcfg_AccentColorGroup->value()); + groupedActions->actions()[kcfg_AccentColorGroup->value()]->setChecked(true); + preventChanges = true; ui->kcfg_EnableTransparency->setChecked(kcfg_EnableTransparency->isChecked()); preventChanges = false; @@ -235,7 +331,11 @@ void MainWindow::resetToDefault() { void MainWindow::applyTemporarily() { KWin::BlurEffectConfig *conf = (KWin::BlurEffectConfig *)config_parent; - int intensity = ui->alpha_slider->value(); + + int intensity; + if(predefined_colors[selected_color].getColor().alpha() < 26) intensity = predefined_colors[selected_color].getColor().alpha(); + else intensity = ui->alpha_slider->value(); + //int intensity = ui->alpha_slider->value(); int hue = ui->hue_Slider->value(); int saturation = ui->saturation_Slider->value(); int brightness = ui->Lightness_Slider->value(); @@ -288,8 +388,8 @@ void MainWindow::changeCustomColor(bool apply) { void MainWindow::on_colorMixerLabel_linkActivated(const QString &link) { ui->colorMixerGroupBox->setVisible(!ui->colorMixerGroupBox->isVisible()); ui->colorMixerLabel->setText(ui->colorMixerGroupBox->isVisible() - ? "Hide color mixer" - : "Show color mixer"); + ? "Hide color mixer" + : "Show color mixer"); } // Updates the color sliders and updates the custom color. @@ -333,10 +433,12 @@ void MainWindow::applyChanges() { kcfg_CustomColor->setText(predefined_colors[0].getColor().name(QColor::HexArgb)); kcfg_AccentColorName->setValue(selected_color); kcfg_EnableTransparency->setChecked(ui->kcfg_EnableTransparency->isChecked()); - kcfg_AeroIntensity->setValue(ui->alpha_slider->value()); + if(predefined_colors[selected_color].getColor().alpha() < 26) kcfg_AeroIntensity->setValue(predefined_colors[selected_color].getColor().alpha()); + else kcfg_AeroIntensity->setValue(ui->alpha_slider->value()); kcfg_AeroHue->setValue(ui->hue_Slider->value()); kcfg_AeroSaturation->setValue(ui->saturation_Slider->value()); kcfg_AeroBrightness->setValue(ui->Lightness_Slider->value()); + kcfg_AccentColorGroup->setValue(predefined_colors[selected_color].colorGroup()); KWin::BlurEffectConfig *conf = (KWin::BlurEffectConfig *)config_parent; conf->save(); diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h index 0084da3f..619cc255 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h @@ -18,10 +18,13 @@ #include #include #include +#include +#include +#include #include "flowlayout.h" #include "colorwindow.h" - +#include "qgraphicsgloweffect.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } @@ -32,7 +35,7 @@ class MainWindow : public QMainWindow Q_OBJECT public: - MainWindow(QSpinBox* spinbox, QCheckBox* checkbox, QSlider* hslider, QSlider* sslider, QSlider* vslider, QSlider* islider, QLineEdit* custom, KCModule* config, QWidget *parent = nullptr); + MainWindow(QSpinBox* spinbox, QSpinBox* spinboxg, QCheckBox* checkbox, QSlider* hslider, QSlider* sslider, QSlider* vslider, QSlider* islider, QLineEdit* custom, KCModule* config, QWidget *parent = nullptr); ~MainWindow(); void changeCustomColor(bool apply = true); @@ -41,9 +44,14 @@ public: void applyTemporarily(); void resetToDefault(); protected: + void applyFilter(); void closeEvent(QCloseEvent *event) override; void showEvent(QShowEvent *event) override; + bool eventFilter(QObject *o, QEvent *e) override; private slots: + void on_colorGroupSpinBox_valueChanged(int value); + void on_colorGroupLabel_clicked(); + void on_colorGroup_triggered(QAction *action); void on_colorMixerLabel_linkActivated(const QString &link); void on_hue_Slider_valueChanged(int value); void on_pushButton_3_clicked(); @@ -55,6 +63,7 @@ private slots: void on_alpha_slider_valueChanged(int value); void on_saveChanges_Button_clicked(); void on_kcfg_EnableTransparency_stateChanged(int arg1); + void on_windowActiveChanged(); void applyChanges(); private: Ui::MainWindow *ui; @@ -75,8 +84,113 @@ private: QSlider* kcfg_AeroSaturation; QSlider* kcfg_AeroBrightness; QSpinBox* kcfg_AccentColorName; + QSpinBox* kcfg_AccentColorGroup; QCheckBox* kcfg_EnableTransparency; QLineEdit* kcfg_CustomColor; KCModule* config_parent; + + QMenu groupContextMenu; + + // Predefined color values directly pulled from Windows 7, with the exception + // of Sunset, which is an original color value. + QStringList values = { + + // Win7 + "6b74b8fc-Custom-6", "6b74b8fc-Sky-0", "a80046ad-Twilight-0", + "8032cdcd-Sea-0", "6614a600-Leaf-0", "6697d937-Lime-0", + "54fadc0e-Sun-0", "80ff9c00-Pumpkin-0", "a8ce0f0f-Ruby-0", + "66ff0099-Fuchsia-0", "70fcc7f8-Blush-0 ", "856e3ba1-Violet-0", + "528d5a94-Lavander-0", "6698844c-Taupe-0", "a84f1b1b-Chocolate-0", + "80555555-Slate-0", "54fcfcfc-Frost-0", + // Win Vista + "45409efe-Default-1", + "a3000000-Graphite-1", + "a8004ade-Blue-1", + "82008ca5-Teal-1", + "9cce0c0f-Red-1", + "a6ff7700-Orange-1", + "49f93ee7-Pink-1", + "cceff7f7-Frost-1", + + // Win 8 + "c48f8f8f-Color 1-2", + "c484c6ff-Color 2-2", + "c4f276c9-Color 3-2", + "c4f0c300-Color 4-2", + "c492cb2a-Color 5-2", + "c44ccdcd-Color 6-2", + "c4ff981d-Color 7-2", + "c4ff4040-Color 8-2", + "c4ff57ab-Color 9-2", + "c40abf46-Color 10-2", + "c4c071ff-Color 11-2", + "c454afff-Color 12-2", + "c48c90ff-Color 13-2", + "c4b09d8b-Color 14-2", + "c4ffffff-Color 15-2", + + // Win 10 + "c4203dbd-Color 1 (10)-3", + "c40046ff-Color 2 (10)-3", + "c40078d7-Color 3 (10)-3", + "c40099bc-Color 4 (10)-3", + "c400b294-Color 5 (10)-3", + "c400ae56-Color 6 (10)-3", + "c47dbd06-Color 7 (10)-3", + "c4fce100-Color 8 (10)-3", + "c4f7630c-Color 9 (10)-3", + "c4d73539-Color 10 (10)-3", + "c4e81123-Color 11 (10)-3", + "c4ea005e-Color 12 (10)-3", + "c4a9006a-Color 13 (10)-3", + "c4534588-Color 14 (10)-3", + "c4606e62-Color 15 (10)-3", + + // Win Vista (5270) + "00000000-Aero-4", + "89ffffff-Frost-4", + "c11e0000-Smoke-4", + "566c9b89-Seaform-4", + "4ca03800-Heritage-4", + "420037ff-Sky-4", + "b5d31b1b-Heart-4", + "75ef47ef-Candy-4", + + // Win 7 (6608) + "45409efe-Default-5", + "a3000000-Graphite-5", + "a8004ade-Blue-5", + "82008ca5-Teal-5", + "9cce0c0f-Red-5", + "a6ff7700-Orange-5", + "49f93ee7-Pink-5", + "cceff7f7-Frost-5", + "bf7e17e6-Purple-5", + "bf1bab6d-Green-5", + "a800d5ff-Cyan-5", + "8c78f20c-Lime-5", + "bfff0040-Coral-5", + "bfffee33-Yellow-5", + "66692d4a-Mauve-5", + "7298844c-Pewter-5", + + "78b3198d-Sunset-6" + + }; + QStringList colorGroups = { + "Windows 7", + "Windows Vista", + "Windows 8", + "Windows 10", + "Windows Vista Beta 2", + "Windows 7 Build 6608", + "AeroThemePlasma" + }; + QActionGroup *groupedActions; + + QWindow* window_handle; + QColor background_color; + QColor footer_color; + }; #endif // MAINWINDOW_H diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui index df267ac2..1c9e3151 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui @@ -6,7 +6,7 @@ 0 0 - 823 + 858 616 @@ -23,10 +23,13 @@ - Change the accent color of your theme + aerothemeplasma-personalize - + + + + Hi @@ -35,689 +38,787 @@ - - - - - - 0 - 0 - + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::Shape::StyledPanel - - - 0 - 0 - + + QFrame::Shadow::Raised - - - 16777215 - 20 - - - - Color intensity: - - - Qt::AlignmentFlag::AlignHCenter|Qt::AlignmentFlag::AlignTop - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Preferred - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - Current color: Custom - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::MinimumExpanding - - - - 20 - 10 - - - - - - - - - 0 - 0 - - - - - 0 - 150 - - - - - - - false - - + + + 0 + 0 0 - - - - - 0 - 0 - + + 0 + + + 0 + + + + + QFrame::Shape::NoFrame - - - 259 - 25 - + + QFrame::Shadow::Raised - - - 259 - 16777215 - - - - 100 - - - Qt::Orientation::Horizontal - - - - - - - - 0 - 0 - - - - - 72 - 0 - - - - - 72 - 16777215 - - - - Brightness: - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - + 0 - - - - - - - 0 - 0 - - - - - 72 - 0 - - - - - 72 - 16777215 - - - - Hue: - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - 0 - - - - - - - - 40 - 0 - - - - - 40 - 16777215 - - - - TextLabel - - - - - - - - 40 - 0 - - - - - 40 - 16777215 - - - - TextLabel - - - - - - - - 40 - 0 - - - - - 40 - 16777215 - - - - TextLabel - - - - - - - - 0 - 0 - - - - - 259 - 25 - - - - - 259 - 16777215 - - - - QSlider::groove:horizontal { + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::Shape::NoFrame + + + QAbstractScrollArea::SizeAdjustPolicy::AdjustIgnored + + + true + + + + + 0 + 0 + 856 + 542 + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Color Palette: + + + + + + + QPushButton#colorGroupLabel { + color: #0066d4; + background: transparent; + border: 1px solid transparent; + border-radius: 3px; + margin-top: 1px; +} +QPushButton#colorGroupLabel:hover { + color: #3399ff; +} + +QPushButton::down-arrow { + color: #0066d4; +} + + + Windows 7 ⏷ + + + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + + + + + 0 + 0 + + + + Current color: Custom + + + 0 + + + 0 + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Enables/disables the transparency of the entire theme. +NOTE: This setting does NOT affect compositing settings. + + + Enable transparency + + + true + + + + + + + + 0 + 0 + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 20 + + + + Color intensity: + + + Qt::AlignmentFlag::AlignHCenter|Qt::AlignmentFlag::AlignTop + + + + + + + + 1 + 0 + + + + + 259 + 0 + + + + + 250 + 16777215 + + + + 26 + + + 217 + + + Qt::Orientation::Horizontal + + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + TextLabel + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + PointingHandCursor + + + <a href="no" style="color: #0066D4">Show color mixer</a> + + + Qt::TextFormat::RichText + + + false + + + Qt::TextInteractionFlag::LinksAccessibleByMouse + + + + + + + + 0 + 0 + + + + + 0 + 150 + + + + + + + + + + true + + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 259 + 25 + + + + + 259 + 16777215 + + + + 100 + + + Qt::Orientation::Horizontal + + + + + + + + 0 + 0 + + + + + 72 + 0 + + + + + 72 + 16777215 + + + + Brightness: + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + 0 + + + + + + + + 0 + 0 + + + + + 72 + 0 + + + + + 72 + 16777215 + + + + Hue: + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + 0 + + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + TextLabel + + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + TextLabel + + + + + + + + 40 + 0 + + + + + 40 + 16777215 + + + + TextLabel + + + + + + + + 0 + 0 + + + + + 259 + 25 + + + + + 259 + 16777215 + + + + QSlider::groove:horizontal { background-color: qlineargradient(x1: 0, y1: 1, x2: 1, y2: 1, stop: 0 #FF0000, stop: 0.167 #FFFF00, stop: 0.33 #00FF00, stop: 0.5 #00FFFF, stop: 0.667 #0000FF, stop: 0.833 #FF00FF, stop: 1 #FF0000); height: 5px; position: absolute; } - - - 359 - - - 0 - - - Qt::Orientation::Horizontal - + + + 359 + + + 0 + + + Qt::Orientation::Horizontal + + + + + + + + 0 + 0 + + + + + 259 + 25 + + + + + 259 + 16777215 + + + + 100 + + + Qt::Orientation::Horizontal + + + + + + + + 0 + 0 + + + + + 72 + 0 + + + + + 72 + 16777215 + + + + Saturation: + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + 0 + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + +
+
+
- - + + - + 0 0 - 259 - 25 - - - - - 259 - 16777215 - - - - 100 - - - Qt::Orientation::Horizontal - - - - - - - - 0 - 0 - - - - - 72 + 290 0 - - - 72 - 16777215 - - - - Saturation: - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - 0 + + + + + 18 + + + 128 + + + 16 + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 0 + 21 + + + + + 16777215 + 21 + + + + Apply + + + + + + + + 0 + 0 + + + + + 100 + 21 + + + + + 100 + 21 + + + + Save Changes + + + + + + + + 0 + 0 + + + + + 0 + 21 + + + + + 16777215 + 21 + + + + Cancel + + + +
- - - - - 0 - 0 - - - - PointingHandCursor - - - <a href="no">Show color mixer</a> - - - Qt::TextFormat::RichText - - - false - - - Qt::TextInteractionFlag::LinksAccessibleByMouse - - - - - - - - 40 - 0 - - - - - 40 - 16777215 - - - - TextLabel - - - - - - - - 16777215 - 16777215 - - - - Enables/disables the transparency of the entire theme. -NOTE: This setting does NOT affect compositing settings. - - - Enable transparency - - - true - - - - - - - - 0 - 0 - - - - - 290 - 0 - - - - - - - - - - Qt::Orientation::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - - 0 - 21 - - - - - 16777215 - 21 - - - - Apply - - - - - - - - 0 - 0 - - - - - 100 - 21 - - - - - 100 - 21 - - - - Save Changes - - - - - - - - 0 - 0 - - - - - 0 - 21 - - - - - 16777215 - 21 - - - - Cancel - - - - - - - - - - Qt::Orientation::Vertical - - - QSizePolicy::Policy::Fixed - - - - 20 - 10 - - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::MinimumExpanding - - - - 40 - 20 - - - - - - - - - 1 - 0 - - - - - 259 - 0 - - - - - 250 - 16777215 - - - - 26 - - - 217 - - - Qt::Orientation::Horizontal - - - - - - - Qt::Orientation::Horizontal - - - QSizePolicy::Policy::Preferred - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - - 0 - 280 - - - - - 16777215 - 280 - - - - QFrame::Shape::NoFrame - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - Qt::ScrollBarPolicy::ScrollBarAlwaysOff - - - true - - - - - 0 - 0 - 723 - 280 - - - - - - - - 0 - 0 - - - - - 16777215 - 272 - - - - - 12 - false - false - - - - QGroupBox::title { - color: #003399; -} - - - Set the color of window decorations, panels, tooltips and taskbar - - - Qt::AlignmentFlag::AlignCenter - - - - - - - + + + toolBar + + + QToolBar { + background: transparent; +} + + + TopToolBarArea + + + false + + diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/qgraphicsgloweffect.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/qgraphicsgloweffect.cpp new file mode 100644 index 00000000..f6996ac2 --- /dev/null +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/qgraphicsgloweffect.cpp @@ -0,0 +1,94 @@ +#include "qgraphicsgloweffect.h" +#include +#include +#include + +QGraphicsGlowEffect::QGraphicsGlowEffect(QObject *parent) : QGraphicsEffect(parent) +{ +} + +void QGraphicsGlowEffect::setColor(QColor value) { + _color = value; +} + +void QGraphicsGlowEffect::setStrength(int value) { + _strength = value; +} + +void QGraphicsGlowEffect::setBlurRadius(qreal value) { + _blurRadius = value; + _extent = qCeil(value); + updateBoundingRect(); +} + +QColor QGraphicsGlowEffect::color() const { + return _color; +} + +int QGraphicsGlowEffect::strength() const { + return _strength; +} + +qreal QGraphicsGlowEffect::blurRadius() const { + return _blurRadius; +} + +QRectF QGraphicsGlowEffect::boundingRectFor(const QRectF &rect) const { + return QRect( + rect.left() - _extent, + rect.top() - _extent, + rect.width() + 2 * _extent, + rect.height() + 2 * _extent); +} + +void QGraphicsGlowEffect::draw(QPainter* painter) { + QPoint offset; + QPixmap source = sourcePixmap(Qt::LogicalCoordinates, &offset); + QPixmap glow; + + QGraphicsColorizeEffect *colorize = new QGraphicsColorizeEffect; + colorize->setColor(_color); + colorize->setStrength(1); + glow = applyEffectToPixmap(source, colorize, 0); + + QGraphicsBlurEffect *blur = new QGraphicsBlurEffect; + blur->setBlurRadius(_blurRadius); + glow = applyEffectToPixmap(glow, blur, _extent); + + for (int i = 0; i < _strength; i++) + painter->drawPixmap(offset - QPoint(_extent, _extent), glow); + drawSource(painter); +} +QPixmap QGraphicsGlowEffect::drawBlur(QPixmap pixmap) +{ + QPixmap glow; + + QGraphicsColorizeEffect *colorize = new QGraphicsColorizeEffect; + colorize->setColor(_color); + //colorize->setStrength(0); + glow = applyEffectToPixmap(pixmap, colorize, 0); + + QGraphicsBlurEffect *blur = new QGraphicsBlurEffect; + blur->setBlurRadius(_blurRadius); + blur->setBlurHints(QGraphicsBlurEffect::QualityHint); + glow = applyEffectToPixmap(glow, blur, _extent); + + return glow; +} +QPixmap QGraphicsGlowEffect::applyEffectToPixmap( + QPixmap src, QGraphicsEffect *effect, int extent) +{ + if (src.isNull()) return QPixmap(); + if (!effect) return src; + QGraphicsScene scene; + QGraphicsPixmapItem item; + item.setPixmap(src); + item.setGraphicsEffect(effect); + scene.addItem(&item); + QSize size = src.size() + QSize(extent * 2, extent * 2); + QPixmap res(size.width(), size.height()); + res.fill(Qt::transparent); + QPainter ptr(&res); + scene.render(&ptr, QRectF(), QRectF(-extent, -extent, size.width(), size.height())); + return res; +} diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/qgraphicsgloweffect.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/qgraphicsgloweffect.h new file mode 100644 index 00000000..2d6bf6ab --- /dev/null +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/qgraphicsgloweffect.h @@ -0,0 +1,41 @@ +#ifndef QGRAPHICSGLOWEVENT_H +#define QGRAPHICSGLOWEVENT_H + +#include +#include +#include +#include +#include +#include +#include + +class QGraphicsGlowEffect : + public QGraphicsEffect +{ +public: + explicit QGraphicsGlowEffect(QObject *parent = 0); + + QRectF boundingRectFor(const QRectF &rect) const; + void setColor(QColor value); + void setStrength(int value); + void setBlurRadius(qreal value); + QColor color() const; + int strength() const; + qreal blurRadius() const; + + QPixmap drawBlur(QPixmap pixmap); + +protected: + void draw(QPainter* painter); + +private: + static QPixmap applyEffectToPixmap(QPixmap src, QGraphicsEffect *effect, int extent); + int _extent = 5; + QColor _color = QColor(255, 255, 255); + int _strength = 3; + qreal _blurRadius = 5.0; +}; + + +#endif // QGRAPHICSGLOWEVENT_H + diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/wackyfunc.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/wackyfunc.h index 5b15043c..0e45118b 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/wackyfunc.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/wackyfunc.h @@ -25,6 +25,17 @@ void getColorBalances(int sliderPosition, int &primaryBalance, int &secondaryBal { int pB = 0, sB = 0, bB = 0; + if(sliderPosition == 0) + { + pB = 100; + sB = 0; + bB = 100; + primaryBalance = pB; + secondaryBalance = sB; + blurBalance = bB; + printf("%d %d %d\n", pB, sB, bB); + return; + } // https://github.com/ALTaleX531/dwm_colorization_calculator/blob/main/main.py int balance = int((double(sliderPosition) / 255.0 - 0.1) / 0.75 * 100.0 + 10.0); diff --git a/screenshots/colorization.png b/screenshots/colorization.png index 0d35f3f584ffdf74d95803728743b038300c874e..373b1d6fb79a8699cc54c9bf0ca209d9e9e2d18f 100644 GIT binary patch literal 142052 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�w&<=^O;sLtsI}01%^H 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 literal 109092 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 W-!a=bbpSvB0000 Date: Sun, 6 Jul 2025 21:29:25 +0200 Subject: [PATCH 064/222] Fix SMOD Decoration not compiling --- kwin/decoration/kdecoration/breezedecoration.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/kwin/decoration/kdecoration/breezedecoration.h b/kwin/decoration/kdecoration/breezedecoration.h index 6bb9b1a9..b7cfeb78 100644 --- a/kwin/decoration/kdecoration/breezedecoration.h +++ b/kwin/decoration/kdecoration/breezedecoration.h @@ -117,6 +117,7 @@ public: inline bool hideInnerBorder() const; inline bool isGadgetExplorer() const; + inline bool isPersonalizeKCM() const; inline bool isPolkit() const; //@} @@ -257,6 +258,12 @@ bool Decoration::isGadgetExplorer() const if(c->caption() == QStringLiteral("plasmashell_explorer") && (c->windowClass() == QStringLiteral("plasmashell plasmashell") || c->windowClass() == QStringLiteral("plasmashell org.kde.plasmashell"))) return true; return false; } +bool Decoration::isPersonalizeKCM() const +{ + if(window()->windowClass() == QStringLiteral("systemsettings systemsettings") && window()->caption().startsWith(QStringLiteral("aerothemeplasma-personalize"))) return true; + return false; +} + bool Decoration::isPolkit() const { const auto c = window(); @@ -265,7 +272,6 @@ bool Decoration::isPolkit() const } bool Decoration::hideIcon() const { - if(window()->windowClass() == "systemsettings systemsettings" && window()->caption().startsWith("aerothemeplasma-personalize")) return true; if(isGadgetExplorer() || isPolkit()) return true; return m_internalSettings->hideIcon() && !window()->isShaded(); } @@ -273,16 +279,14 @@ bool Decoration::hideIcon() const bool Decoration::hideCaption() const { // Personalization page - if(window()->windowClass() == "systemsettings systemsettings" && window()->caption().startsWith("aerothemeplasma-personalize")) return true; - if(isGadgetExplorer()) return true; + if(isPersonalizeKCM() || isGadgetExplorer()) return true; return m_internalSettings->hideCaption() && !window()->isShaded(); } bool Decoration::hideInnerBorder() const { // Personalization page - if(window()->windowClass() == "systemsettings systemsettings" && window()->caption().startsWith("aerothemeplasma-personalize")) return true; - if(isGadgetExplorer()) return true; + if(isPersonalizeKCM() || isGadgetExplorer()) return true; return m_internalSettings->hideInnerBorder() && !window()->isShaded(); } From b19685c41a4c14f8aff00ee76ddbc30a25a470bc Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 6 Jul 2025 21:49:02 +0200 Subject: [PATCH 065/222] Prevent toolbar from being movable, tweak its QSS --- .../src/kcm/mainwindow.ui | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui index 1c9e3151..e9a0c887 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.ui @@ -122,7 +122,7 @@ 0 0 856 - 542 + 546 @@ -810,8 +810,21 @@ NOTE: This setting does NOT affect compositing settings. QToolBar { background: transparent; + border: none; } + + false + + + Qt::ToolBarArea::TopToolBarArea + + + Qt::ToolButtonStyle::ToolButtonTextOnly + + + false + TopToolBarArea From 73e6d596dc608829f84c557c1d5e41072e76b5e4 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 7 Jul 2025 00:43:25 +0200 Subject: [PATCH 066/222] Fix icon appearing in Colorization KCM --- kwin/decoration/kdecoration/breezedecoration.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kwin/decoration/kdecoration/breezedecoration.h b/kwin/decoration/kdecoration/breezedecoration.h index b7cfeb78..d2b39558 100644 --- a/kwin/decoration/kdecoration/breezedecoration.h +++ b/kwin/decoration/kdecoration/breezedecoration.h @@ -272,7 +272,7 @@ bool Decoration::isPolkit() const } bool Decoration::hideIcon() const { - if(isGadgetExplorer() || isPolkit()) return true; + if(isPersonalizeKCM() || isGadgetExplorer() || isPolkit()) return true; return m_internalSettings->hideIcon() && !window()->isShaded(); } From 754b9daf04baf9bdfca5af28ed1f66553c83d336 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 7 Jul 2025 01:00:20 +0200 Subject: [PATCH 067/222] Fix SMOD shadows not updating on reconfigure --- kwin/decoration/kdecoration/breezedecoration.cpp | 2 +- kwin/decoration/kdecoration/breezedecoration.h | 2 +- kwin/decoration/kdecoration/smod/smoddecoration.cpp | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/kwin/decoration/kdecoration/breezedecoration.cpp b/kwin/decoration/kdecoration/breezedecoration.cpp index fcb4beed..e2f4756f 100644 --- a/kwin/decoration/kdecoration/breezedecoration.cpp +++ b/kwin/decoration/kdecoration/breezedecoration.cpp @@ -284,7 +284,7 @@ void Decoration::reconfigure() recalculateBorders(); // shadow - updateShadow(); + updateShadow(true); updateButtonsGeometryDelayed(); update(); diff --git a/kwin/decoration/kdecoration/breezedecoration.h b/kwin/decoration/kdecoration/breezedecoration.h index d2b39558..b5b54e84 100644 --- a/kwin/decoration/kdecoration/breezedecoration.h +++ b/kwin/decoration/kdecoration/breezedecoration.h @@ -150,7 +150,7 @@ private: void smodPaintGlow(QPainter *painter, const QRectF &repaintRegion); void smodPaintOuterBorder(QPainter *painter, const QRectF &repaintRegion); void smodPaintTitleBar(QPainter *painter, const QRectF &repaintRegion); - void updateShadow(); + void updateShadow(bool reconfigured = false); std::shared_ptr smodCreateShadow(bool active); void setScaledCornerRadius(); diff --git a/kwin/decoration/kdecoration/smod/smoddecoration.cpp b/kwin/decoration/kdecoration/smod/smoddecoration.cpp index ffa52753..bced677c 100644 --- a/kwin/decoration/kdecoration/smod/smoddecoration.cpp +++ b/kwin/decoration/kdecoration/smod/smoddecoration.cpp @@ -38,8 +38,13 @@ int Decoration::decorationCount() { return g_sDecoCount; } -void Decoration::updateShadow() +void Decoration::updateShadow(bool reconfigured) { + if(reconfigured) + { + g_smod_shadow.reset(); + g_smod_shadow_unfocus.reset(); + } if(!internalSettings()->enableShadow()) { setShadow(std::shared_ptr(nullptr)); From e921b2bf1b7be59011d11eacb183bc095f5fbeb7 Mon Sep 17 00:00:00 2001 From: dominichayesferen Date: Mon, 7 Jul 2025 02:46:16 +0000 Subject: [PATCH 068/222] Comedy --- .../src/kcm/mainwindow.h | 131 ++++++++++++------ 1 file changed, 91 insertions(+), 40 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h index 619cc255..bf0777f4 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h @@ -130,51 +130,101 @@ private: "c4ffffff-Color 15-2", // Win 10 - "c4203dbd-Color 1 (10)-3", - "c40046ff-Color 2 (10)-3", - "c40078d7-Color 3 (10)-3", - "c40099bc-Color 4 (10)-3", - "c400b294-Color 5 (10)-3", - "c400ae56-Color 6 (10)-3", - "c47dbd06-Color 7 (10)-3", - "c4fce100-Color 8 (10)-3", - "c4f7630c-Color 9 (10)-3", - "c4d73539-Color 10 (10)-3", - "c4e81123-Color 11 (10)-3", - "c4ea005e-Color 12 (10)-3", - "c4a9006a-Color 13 (10)-3", - "c4534588-Color 14 (10)-3", - "c4606e62-Color 15 (10)-3", + "c4203dbd-Color 1-3", + "c40046ff-Color 2-3", + "c40078d7-Color 3-3", + "c40099bc-Color 4-3", + "c400b294-Color 5-3", + "c400ae56-Color 6-3", + "c47dbd06-Color 7-3", + "c4fce100-Color 8-3", + "c4f7630c-Color 9-3", + "c4d73539-Color 10-3", + "c4e81123-Color 11-3", + "c4ea005e-Color 12-3", + "c4a9006a-Color 13-3", + "c4534588-Color 14-3", + "c4606e62-Color 15-3", + + // Win 10 (Settings) + "c4ffb900-Yellow gold-4", + "c4ff8b00-Gold-4", + "c4f7620b-Orange bright-4", + "c4c94f0f-Orange dark-4", + "c4da3a01-Rust-4", + "c4ee694f-Pale rust-4", + "c4d13437-Brick red-4", + "c4ff4242-Mod red-4", + "c4e64855-Pale red-4", + "c4e71022-Red-4", + "c4e9005e-Rose bright-4", + "c4c20051-Rose-4", + "c4e2008b-Plum light-4", + "c4bf0076-Plum-4", + "c4c138b3-Orchid light-4", + "c49a0088-Orchid-4", + "c40078d7-Default blue-4", + "c40062b1-Navy blue-4", + "c48d8bd8-Purple shadow-4", + "c46b69d6-Purple shadow dark-4", + "c48663b8-Iris pastel-4", + "c4734da8-Iris Spring-4", + "c4b145c1-Violet red light-4", + "c4871798-Violet red-4", + "c40099bc-Cool blue bright-4", + "c42d7d9a-Cool blue-4", + "c400b7c2-Seafoam-4", + "c4028286-Seafoam teal-4", + "c400b294-Mint light-4", + "c4008473-Mint dark-4", + "c400cb6a-Turf green-4", + "c40f883e-Sport green-4", + "c47a7473-Grey-4", + "c45d5a58-Grey brown-4", + "c4687589-Steel blue-4", + "c4505c6b-Metal blue-4", + "c4557c72-Pale moss-4", + "c448685f-Moss-4", + "c4498104-Meadow green-4", + "c40f7c0f-Green-4", + "c4757575-Overcast-4", + "c44c4a48-Storm-4", + "c469797e-Blue grey-4", + "c44a5359-Grey dark-4", + "c4637c63-Liddy green-4", + "c4515e53-Sage-4", + "c4837444-Camouflage desert-4", + "c47e725f-Camouflage-4", // Win Vista (5270) - "00000000-Aero-4", - "89ffffff-Frost-4", - "c11e0000-Smoke-4", - "566c9b89-Seaform-4", - "4ca03800-Heritage-4", - "420037ff-Sky-4", - "b5d31b1b-Heart-4", - "75ef47ef-Candy-4", + "00000000-Aero-5", + "89ffffff-Frost-5", + "c11e0000-Smoke-5", + "566c9b89-Seaform-5", + "4ca03800-Heritage-5", + "420037ff-Sky-5", + "b5d31b1b-Heart-5", + "75ef47ef-Candy-5", // Win 7 (6608) - "45409efe-Default-5", - "a3000000-Graphite-5", - "a8004ade-Blue-5", - "82008ca5-Teal-5", - "9cce0c0f-Red-5", - "a6ff7700-Orange-5", - "49f93ee7-Pink-5", - "cceff7f7-Frost-5", - "bf7e17e6-Purple-5", - "bf1bab6d-Green-5", - "a800d5ff-Cyan-5", - "8c78f20c-Lime-5", - "bfff0040-Coral-5", - "bfffee33-Yellow-5", - "66692d4a-Mauve-5", - "7298844c-Pewter-5", + "45409efe-Default-6", + "a3000000-Graphite-6", + "a8004ade-Blue-6", + "82008ca5-Teal-6", + "9cce0c0f-Red-6", + "a6ff7700-Orange-6", + "49f93ee7-Pink-6", + "cceff7f7-Frost-6", + "bf7e17e6-Purple-6", + "bf1bab6d-Green-6", + "a800d5ff-Cyan-6", + "8c78f20c-Lime-6", + "bfff0040-Coral-6", + "bfffee33-Yellow-6", + "66692d4a-Mauve-6", + "7298844c-Pewter-6", - "78b3198d-Sunset-6" + "78b3198d-Sunset-7" }; QStringList colorGroups = { @@ -182,6 +232,7 @@ private: "Windows Vista", "Windows 8", "Windows 10", + "Windows 10 (Settings)", "Windows Vista Beta 2", "Windows 7 Build 6608", "AeroThemePlasma" From cc7a2a47580e53c9a724735431b05dd35d8c758a Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 7 Jul 2025 09:29:43 +0200 Subject: [PATCH 069/222] Update custom swatch ordering --- kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h index bf0777f4..b6714853 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.h @@ -96,7 +96,7 @@ private: QStringList values = { // Win7 - "6b74b8fc-Custom-6", "6b74b8fc-Sky-0", "a80046ad-Twilight-0", + "6b74b8fc-Custom-7", "6b74b8fc-Sky-0", "a80046ad-Twilight-0", "8032cdcd-Sea-0", "6614a600-Leaf-0", "6697d937-Lime-0", "54fadc0e-Sun-0", "80ff9c00-Pumpkin-0", "a8ce0f0f-Ruby-0", "66ff0099-Fuchsia-0", "70fcc7f8-Blush-0 ", "856e3ba1-Violet-0", From 5d440624ad07fb3cf11152149929c06f1d781036 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 7 Jul 2025 09:35:07 +0200 Subject: [PATCH 070/222] Cleanup code --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 3 --- .../kde-effects-aeroglassblur/src/kcm/mainwindow.cpp | 6 +----- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 728602c2..ee5f2158 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -771,8 +771,6 @@ bool BlurEffect::scaledOrTransformed(const EffectWindow *w, int mask, const Wind bool BlurEffect::shouldBlur(const EffectWindow *w, int mask, const WindowPaintData &data) const { QString windowClass = w->windowClass().split(' ')[0]; - //qCWarning(KWIN_BLUR) << w->windowClass(); - //printf("%d %s %s %s\n", w->windowType(), windowClass.toStdString().c_str(), w->isSpecialWindow() ? "specil true" : "specil false", w->caption().toStdString().c_str()); if (effects->activeFullScreenEffect() && !w->data(WindowForceBlurRole).toBool()) { return false; } @@ -1148,7 +1146,6 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi float g = m_aeroColorG; float b = m_aeroColorB; - AeroPasses selectedPass = AeroPasses::AERO; // A window is maximized, use opaque colorization diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp index ab319b52..859c99c6 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp @@ -213,15 +213,11 @@ MainWindow::MainWindow(QSpinBox *spinbox, QSpinBox *spinboxg, QCheckBox *checkbo applyFilter(); } + void MainWindow::applyFilter() { for(int i = 0; i < predefined_colors.size(); i++) { - /*if(i == 0) - { - predefined_colors[i].setVisible(ui->kcfg_AccentColorGroup->value() == colorGroups.size()-1); - continue; - }*/ predefined_colors[i].setVisible(predefined_colors[i].colorGroup() == ui->kcfg_AccentColorGroup->value()); } } From 3627f646a6c302cc29a39b47e70f50c7e30a2fcd Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 7 Jul 2025 10:13:43 +0200 Subject: [PATCH 071/222] Fix missing function in FolderItemDelegate --- .../contents/ui/FolderItemDelegate.qml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml index 9e346566..c0b939aa 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml @@ -24,6 +24,7 @@ Item { property string name: model.blank ? "" : model.display property string nameWrapped: model.blank ? "" : model.displayWrapped property bool blank: model.blank + property bool selected: model.blank ? false : model.selected property bool isDir: loader.item ? loader.item.isDir : false property QtObject popupDialog: loader.item ? loader.item.popupDialog : null property Item iconArea: loader.item ? loader.item.iconArea : null @@ -77,6 +78,13 @@ Item { asynchronous: true } + function updateDragImage() { + if (selected && !blank) { + loader.grabToImage(result => { + dir.addItemDragImage(positioner.map(index), main.x + loader.x, main.y + loader.y, loader.width, loader.height, result.image); + }); + } + } Component { id: delegateImplementation From 7d50ad913ce5200ebbec53a38a245ae2126eef67 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Thu, 10 Jul 2025 18:27:23 +0200 Subject: [PATCH 072/222] Attempt to fix SMOD incorrect text glow for RTL text --- .../kdecoration/smod/smoddecoration.cpp | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/kwin/decoration/kdecoration/smod/smoddecoration.cpp b/kwin/decoration/kdecoration/smod/smoddecoration.cpp index bced677c..2e4836f7 100644 --- a/kwin/decoration/kdecoration/smod/smoddecoration.cpp +++ b/kwin/decoration/kdecoration/smod/smoddecoration.cpp @@ -377,10 +377,25 @@ void Decoration::smodPaintTitleBar(QPainter *painter, const QRectF &repaintRegio xpos = leftButtonsX + 2; } + bool isRTL = caption.isRightToLeft(); + auto fixedAlignment = titleAlignment; + if(isRTL) + { + if(fixedAlignment == InternalSettings::AlignRight) + { + fixedAlignment = InternalSettings::AlignLeft; + xpos = leftButtonsX + 2; + } + else if(fixedAlignment == InternalSettings::AlignLeft) + { + fixedAlignment = InternalSettings::AlignRight; + xpos += captionRect.width() - blurWidth; + } + } if(!invertText) { int alignmentOffset = 0; - if(titleAlignment == InternalSettings::AlignCenter || titleAlignment == InternalSettings::AlignCenterFullWidth) + if(fixedAlignment == InternalSettings::AlignCenter || fixedAlignment == InternalSettings::AlignCenterFullWidth) { alignmentOffset = -4; if(m_rightButtons->geometry().intersects(QRect(xpos + alignmentOffset, captionRect.height() / 2 - blurHeight - 2, glowWidth, glowHeight))) @@ -392,10 +407,16 @@ void Decoration::smodPaintTitleBar(QPainter *painter, const QRectF &repaintRegio xpos += captionRect.width()/2 - blurWidth/2; } } - else if(titleAlignment == InternalSettings::AlignRight) + else if(fixedAlignment == InternalSettings::AlignRight) { alignmentOffset = -2; } + + if(isRTL && titleAlignment == InternalSettings::AlignLeft) + { + alignmentOffset += 16; + } + painter->translate(xpos + alignmentOffset, (captionRect.height() - glowHeight) / 2); gl.render(painter); painter->translate(-xpos - alignmentOffset, (-captionRect.height() + glowHeight) / 2); @@ -403,15 +424,15 @@ void Decoration::smodPaintTitleBar(QPainter *painter, const QRectF &repaintRegio } QPixmap text_pixmap = real_label.grab(); - if(titleAlignment == InternalSettings::AlignRight) + if(fixedAlignment == InternalSettings::AlignRight) { captionRect.translate(-12, -1); } - else if(titleAlignment == InternalSettings::AlignLeft) + else if(fixedAlignment == InternalSettings::AlignLeft) { captionRect.translate(5, -1); } - else if(titleAlignment == InternalSettings::AlignCenterFullWidth || titleAlignment == InternalSettings::AlignCenter) + else if(fixedAlignment == InternalSettings::AlignCenterFullWidth || fixedAlignment == InternalSettings::AlignCenter) { captionRect.translate(1, -1); } From 627b3d3e9b06b0eeb4a0371481629de7646bc8a4 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Thu, 10 Jul 2025 20:35:13 +0200 Subject: [PATCH 073/222] Fix "Enable transparency" checkbox not updating on cancel --- .../kde-effects-aeroglassblur/src/kcm/mainwindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp index 859c99c6..dc58dd15 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp @@ -319,9 +319,9 @@ void MainWindow::resetToDefault() { ui->kcfg_AccentColorGroup->setValue(kcfg_AccentColorGroup->value()); groupedActions->actions()[kcfg_AccentColorGroup->value()]->setChecked(true); - preventChanges = true; + //preventChanges = true; ui->kcfg_EnableTransparency->setChecked(kcfg_EnableTransparency->isChecked()); - preventChanges = false; + //preventChanges = false; } void MainWindow::applyTemporarily() { From ddc1076f16b403bf297c67affa992027e658bdca Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 11 Jul 2025 16:16:43 +0200 Subject: [PATCH 074/222] Prevent toolbar context menu from showing in blur KCM --- .../kde-effects-aeroglassblur/src/kcm/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp index dc58dd15..2cf04bf0 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/mainwindow.cpp @@ -126,6 +126,8 @@ MainWindow::MainWindow(QSpinBox *spinbox, QSpinBox *spinboxg, QCheckBox *checkbo titleLabel->setIndent(12); titleLabel->setMargin(2); ui->toolBar->addWidget(titleLabel); + ui->toolBar->setContextMenuPolicy(Qt::PreventContextMenu); + ui->toolBar->toggleViewAction()->setEnabled(false); ui->scrollAreaWidgetContents->setContentsMargins(128, 12, 128, 12); ui->scrollArea->verticalScrollBar()->installEventFilter(this); From 8d4a48c17cebd900b00698b15ea724882aa91a46 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 11 Jul 2025 16:43:19 +0200 Subject: [PATCH 075/222] Attempt to fix SevenStart not closing properly on ended session --- .../contents/ui/MenuRepresentation.qml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index ec3c627f..4b479a05 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -387,7 +387,11 @@ PlasmaCore.Dialog { required property var model text: " " + model.display + " " - onClicked: filteredMenuItemsModel.trigger(index) + onClicked: { + filteredMenuItemsModel.trigger(index) + root.visible = false; + + } } onObjectAdded: (index, object) => { if(object.model.decoration != "system-shutdown") { From b4c74d91a0ba28e64ef860097fdfdebc4124d88a Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 13 Jul 2025 22:21:05 +0200 Subject: [PATCH 076/222] Fix SevenStart context menu not appearing if SevenTasks isn't present --- .../io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml index 113b4082..c1812fa3 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml @@ -79,7 +79,7 @@ Item { while(panel !== null && typeof panel.sevenTasksReference === "undefined") { // Find seventasks loader reference from the panel panel = panel.parent; } - if(panel.sevenTasksReference) { // If found, add the pin/unpin menu item + if(panel?.sevenTasksReference) { // If found, add the pin/unpin menu item const unpin = (panel.sevenTasksReference.applet.findTask(entry) !== -1); var pinAction = { // Add custom action icon: "pin", From 0f744d75f0b62abc1c57cc956992796ebfee3195 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 14 Jul 2025 02:27:21 +0200 Subject: [PATCH 077/222] Fix some corner glow shader bugs --- .../kde-effects-aeroglassblur/src/blur.cpp | 12 ++++------ .../kde-effects-aeroglassblur/src/blur.h | 2 +- .../src/shaders/reflect_core.frag | 22 +++++++++++-------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index ee5f2158..49af1dd3 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -136,7 +136,7 @@ BlurEffect::BlurEffect() : m_sharedMemory("kwinaero") m_reflectPass.reflectTextureLocation = m_reflectPass.shader->uniformLocation("texUnit"); // Glow m_reflectPass.textureSizeLocation = m_reflectPass.shader->uniformLocation("textureSize"); - m_reflectPass.scaleYLocation = m_reflectPass.shader->uniformLocation("scaleY"); + m_reflectPass.useWaylandLocation = m_reflectPass.shader->uniformLocation("useWayland"); m_reflectPass.glowTextureLocation = m_reflectPass.shader->uniformLocation("glowTexture"); m_reflectPass.glowEnableLocation = m_reflectPass.shader->uniformLocation("glowEnable"); m_reflectPass.glowOpacityLocation = m_reflectPass.shader->uniformLocation("glowOpacity"); @@ -1260,14 +1260,10 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi m_reflectPass.shader->setUniform(m_reflectPass.glowEnableLocation, enableGlow); if(enableGlow) { - const auto scale = viewport.scale(); - bool scaleY = false; - if(backgroundRect.height() != windowSize.height() && !scaledOrTransformed(w, mask, data)) scaleY = true; - const QRectF pixelGeometry = snapToPixelGridF(scaledRect(QRectF(0, 0, glowTex->width(), glowTex->height()), scale)); - + const bool useWayland = effects->waylandDisplay() != nullptr; m_reflectPass.shader->setUniform(m_reflectPass.glowEnableLocation, enableGlow); - m_reflectPass.shader->setUniform(m_reflectPass.textureSizeLocation, QVector2D(pixelGeometry.width(), pixelGeometry.height())); - m_reflectPass.shader->setUniform(m_reflectPass.scaleYLocation, scaleY); + m_reflectPass.shader->setUniform(m_reflectPass.textureSizeLocation, QVector2D(glowTex->width(), glowTex->height())); + m_reflectPass.shader->setUniform(m_reflectPass.useWaylandLocation, useWayland); m_reflectPass.shader->setUniform(m_reflectPass.glowOpacityLocation, float(opacity*0.8)); glUniform1i(m_reflectPass.glowTextureLocation, 1); diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h index 4d0951c1..020a0026 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h @@ -127,7 +127,7 @@ private: int glowTextureLocation; int glowEnableLocation; int textureSizeLocation; - int scaleYLocation; + int useWaylandLocation; int glowOpacityLocation; } m_reflectPass; struct diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect_core.frag b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect_core.frag index 143d50ed..d2f96054 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect_core.frag +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/reflect_core.frag @@ -10,7 +10,7 @@ uniform vec2 windowPos; // Glow uniform vec2 textureSize; -uniform bool scaleY; +uniform bool useWayland; uniform sampler2D glowTexture; uniform bool glowEnable; uniform float glowOpacity; @@ -24,17 +24,21 @@ vec4 glowFragment() float xpos = clamp((gl_FragCoord.x - windowPos.x) / windowSize.x, 0, 1); float t_x = uv.x; - if(xpos > 0.5) t_x = 1 - uv.x; - else t_x = uv.x; - float t_y = uv.y; - if(scaleY) t_y = uv.y * windowSize.y; - else t_y = uv.y; - vec2 t_uv = vec2(windowSize.x * t_x / textureSize.x, windowSize.y * (1 - t_y) / textureSize.y); - - //fragColor = texture(sampler, newUV) * opacity; + float t_y; + if(useWayland) { + t_y = clamp(((gl_FragCoord.y) - windowPos.y) / textureSize.y, 0, 1); + } else { + t_y = clamp(((screenResolution.y - gl_FragCoord.y) - windowPos.y) / textureSize.y, 0, 1); + } + vec2 t_uv = vec2(windowSize.x * t_x / textureSize.x, t_y); vec4 result = texture2D(glowTexture, t_uv) * glowOpacity; + + // Grab from the other side as well + t_x = 1 - uv.x; + t_uv = vec2(windowSize.x * t_x / textureSize.x, t_y); + result += texture2D(glowTexture, t_uv) * glowOpacity; return result; } From c63841a80328c7d3da7db2ca1a4b5eb74f1e472e Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 14 Jul 2025 03:47:28 +0200 Subject: [PATCH 078/222] Attempt to fix artifacts in aeroglassblur --- .../kde-effects-aeroglassblur/src/blur.cpp | 17 +++++++++++------ .../kde-effects-aeroglassblur/src/blur.kcfg | 2 +- .../src/shaders/downsample_core.frag | 13 ++++++++----- .../src/shaders/upsample_core.frag | 18 ++++++++++-------- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 49af1dd3..997fc55b 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -234,8 +234,8 @@ void BlurEffect::initBlurStrengthValues() // {minOffset, maxOffset, expandSize} blurOffsets.append({1.0, 2.0, 10}); // Down sample size / 2 blurOffsets.append({2.0, 3.0, 20}); // Down sample size / 4 - blurOffsets.append({3.0, 5.0, 50}); // Down sample size / 8 - blurOffsets.append({5.0, 7.0, 150}); // Down sample size / 16 + blurOffsets.append({2.0, 5.0, 50}); // Down sample size / 8 + blurOffsets.append({3.0, 8.0, 150}); // Down sample size / 16 //blurOffsets.append({5.0, 8.0, 300}); // Down sample size / 32 // blurOffsets.append({7.0, ?.0}); // Down sample size / 64 @@ -347,7 +347,7 @@ void BlurEffect::reconfigure(ReconfigureFlags flags) } m_reflectionIntensity = BlurConfig::reflectionIntensity(); - int blurStrength = BlurConfig::blurStrength() - 1; + int blurStrength = BlurConfig::blurStrength()-1; m_iterationCount = blurStrengthValues[blurStrength].iteration; m_offset = blurStrengthValues[blurStrength].offset; m_expandSize = blurOffsets[m_iterationCount - 1].expandSize; @@ -874,7 +874,11 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi blurShape.translate(std::round(data.xTranslation()), std::round(data.yTranslation())); } - const QRect backgroundRect = blurShape.boundingRect(); + QRect backgroundRect = blurShape.boundingRect(); + if(backgroundRect.width() % 2 != 0) + backgroundRect.setWidth(backgroundRect.width() - 1); + if(backgroundRect.height() % 2 != 0) + backgroundRect.setHeight(backgroundRect.height() - 1); const QRect deviceBackgroundRect = snapToPixelGrid(scaledRect(backgroundRect, viewport.scale())); QVariant opacityData = w->data(OPACITY_DATA); auto opacity = w->opacity() * data.opacity(); @@ -925,7 +929,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi return; } texture->setFilter(GL_LINEAR_MIPMAP_LINEAR); - texture->setWrapMode(GL_CLAMP_TO_EDGE); + texture->setWrapMode(GL_MIRRORED_REPEAT); auto framebuffer = std::make_unique(texture.get()); if (!framebuffer->valid()) { @@ -1102,7 +1106,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi projectionMatrix.ortho(QRectF(0.0, 0.0, backgroundRect.width(), backgroundRect.height())); m_upsamplePass.shader->setUniform(m_upsamplePass.mvpMatrixLocation, projectionMatrix); - m_upsamplePass.shader->setUniform(m_upsamplePass.offsetLocation, float(m_offset / 2.5f)); + m_upsamplePass.shader->setUniform(m_upsamplePass.offsetLocation, float(m_offset)); for (size_t i = renderInfo.framebuffers.size() - 1; i > 1; --i) { GLFramebuffer::popFramebuffer(); @@ -1195,6 +1199,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi const QVector2D halfpixel(0.5 / (double)read->colorAttachment()->width(), 0.5 / (double)read->colorAttachment()->height()); m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].halfpixelLocation, halfpixel); + m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].offsetLocation, float(m_offset)); m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].aeroColorRLocation, r); m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].aeroColorGLocation, g); diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg index b0db0054..ce6dfe47 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg @@ -6,7 +6,7 @@ - 4 + 2 diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/downsample_core.frag b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/downsample_core.frag index 19aadffc..4f085e3c 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/downsample_core.frag +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/downsample_core.frag @@ -11,11 +11,14 @@ out vec4 fragColor; void main(void) { - vec4 sum = texture(texUnit, uv) * 4.0; - sum += texture(texUnit, uv - halfpixel.xy * offset); - sum += texture(texUnit, uv + halfpixel.xy * offset); - sum += texture(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset); - sum += texture(texUnit, uv - vec2(halfpixel.x, -halfpixel.y) * offset); + vec2 texSize = 4 * halfpixel.xy; + vec2 t_uv = (floor(gl_FragCoord.xy) + vec2(0.5, 0.5)) * texSize; + + vec4 sum = texture(texUnit, t_uv) * 4.0; + sum += texture(texUnit, t_uv - halfpixel.xy * offset); + sum += texture(texUnit, t_uv + halfpixel.xy * offset); + sum += texture(texUnit, t_uv + vec2(halfpixel.x, -halfpixel.y) * offset); + sum += texture(texUnit, t_uv - vec2(halfpixel.x, -halfpixel.y) * offset); fragColor = sum / 8.0; } diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/upsample_core.frag b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/upsample_core.frag index 38592f0c..a5624ac1 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/upsample_core.frag +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/upsample_core.frag @@ -10,14 +10,16 @@ out vec4 fragColor; void main(void) { - vec4 sum = texture(texUnit, uv + vec2(-halfpixel.x * 2.0, 0.0) * offset); - sum += texture(texUnit, uv + vec2(-halfpixel.x, halfpixel.y) * offset) * 2.0; - sum += texture(texUnit, uv + vec2(0.0, halfpixel.y * 2.0) * offset); - sum += texture(texUnit, uv + vec2(halfpixel.x, halfpixel.y) * offset) * 2.0; - sum += texture(texUnit, uv + vec2(halfpixel.x * 2.0, 0.0) * offset); - sum += texture(texUnit, uv + vec2(halfpixel.x, -halfpixel.y) * offset) * 2.0; - sum += texture(texUnit, uv + vec2(0.0, -halfpixel.y * 2.0) * offset); - sum += texture(texUnit, uv + vec2(-halfpixel.x, -halfpixel.y) * offset) * 2.0; + vec2 texSize = halfpixel.xy; + vec2 t_uv = (floor(gl_FragCoord.xy) + vec2(0.5, 0.5)) * texSize; + vec4 sum = texture(texUnit, t_uv + vec2(-halfpixel.x * 2.0, 0.0) * offset); + sum += texture(texUnit, t_uv + vec2(-halfpixel.x, halfpixel.y) * offset) * 2.0; + sum += texture(texUnit, t_uv + vec2(0.0, halfpixel.y * 2.0) * offset); + sum += texture(texUnit, t_uv + vec2(halfpixel.x, halfpixel.y) * offset) * 2.0; + sum += texture(texUnit, t_uv + vec2(halfpixel.x * 2.0, 0.0) * offset); + sum += texture(texUnit, t_uv + vec2(halfpixel.x, -halfpixel.y) * offset) * 2.0; + sum += texture(texUnit, t_uv + vec2(0.0, -halfpixel.y * 2.0) * offset); + sum += texture(texUnit, t_uv + vec2(-halfpixel.x, -halfpixel.y) * offset) * 2.0; sum /= 12.0; From 250b07104042ee602183c1f60e746139e6fdf60a Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 14 Jul 2025 04:10:45 +0200 Subject: [PATCH 079/222] Add comments to explain changes in previous commit --- .../kde-effects-aeroglassblur/src/blur.cpp | 7 +++++++ .../src/shaders/downsample_core.frag | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 997fc55b..e9ce152d 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -875,6 +875,13 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi } QRect backgroundRect = blurShape.boundingRect(); + + /* + * The new way of downsampling works reliably for textures with + * even dimensions, so we shrink the bounding rectangle by 1 + * on odd-sized regions. This helps prevent the blur shaking as + * the user resizes windows. + */ if(backgroundRect.width() % 2 != 0) backgroundRect.setWidth(backgroundRect.width() - 1); if(backgroundRect.height() % 2 != 0) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/downsample_core.frag b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/downsample_core.frag index 4f085e3c..58049a4f 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/downsample_core.frag +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/shaders/downsample_core.frag @@ -11,6 +11,22 @@ out vec4 fragColor; void main(void) { + /* + * Create our own UV sample coordinates instead of using + * the default provided UV maps. + * We can do this by simply querying gl_FragCoord^ and + * multiplying it by 2 * halfpixel * [downscale factor]^^ + * + * ^In the implementation, I first floor this value and then + * reposition it back to the center of the texel. It feels + * like this gives better results, although that might just + * be a placebo. + * + * ^^ 2 * halfpixel already is the texture size information + * that we need. When upscaling, the upscaling factor is just + * 1/[downscale factor], which cancels out in our case. + * + */ vec2 texSize = 4 * halfpixel.xy; vec2 t_uv = (floor(gl_FragCoord.xy) + vec2(0.5, 0.5)) * texSize; From ddde18b2a899cfcb2cbdf0405a965c21127f6b38 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 14 Jul 2025 15:31:31 +0200 Subject: [PATCH 080/222] Improve aeroglassblur blur strength accuracy --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index e9ce152d..37efb047 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -1113,7 +1113,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi projectionMatrix.ortho(QRectF(0.0, 0.0, backgroundRect.width(), backgroundRect.height())); m_upsamplePass.shader->setUniform(m_upsamplePass.mvpMatrixLocation, projectionMatrix); - m_upsamplePass.shader->setUniform(m_upsamplePass.offsetLocation, float(m_offset)); + m_upsamplePass.shader->setUniform(m_upsamplePass.offsetLocation, float(m_offset / 2.5f)); for (size_t i = renderInfo.framebuffers.size() - 1; i > 1; --i) { GLFramebuffer::popFramebuffer(); @@ -1206,7 +1206,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi const QVector2D halfpixel(0.5 / (double)read->colorAttachment()->width(), 0.5 / (double)read->colorAttachment()->height()); m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].halfpixelLocation, halfpixel); - m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].offsetLocation, float(m_offset)); + m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].offsetLocation, float(m_offset / 2.5f)); m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].aeroColorRLocation, r); m_aeroPasses[selectedPass].shader->setUniform(m_aeroPasses[selectedPass].aeroColorGLocation, g); From eab41b8e686a683b56bc97478ebaeeb0bfb76473 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 14 Jul 2025 16:04:36 +0200 Subject: [PATCH 081/222] Add KCM shortcuts to desktopcontainment KCM, add KCM loader application New components: - AeroThemePlasma KCM loader Updated components: - Desktop containment - Desktop shell - AeroGlassBlur - SMOD decorations --- .gitignore | 1 + compile.sh | 6 + .../decoration/kdecoration/breezedecoration.h | 2 + .../src/kcm/blur_config.cpp | 42 +++++- .../aerothemeplasma-kcmloader/CMakeLists.txt | 45 ++++++ plasma/aerothemeplasma-kcmloader/install.sh | 26 ++++ plasma/aerothemeplasma-kcmloader/main.cpp | 34 +++++ .../contents/ui/main.qml | 2 +- .../configuration/AppletConfiguration.qml | 1 + .../ConfigurationContainmentActions.qml | 3 +- .../ConfigurationContainmentAppearance.qml | 133 ++++++++++++++++-- .../ContainmentConfiguration.qml | 4 +- .../contents/configuration/FooterItem.qml | 53 +++++++ 13 files changed, 329 insertions(+), 23 deletions(-) create mode 100644 plasma/aerothemeplasma-kcmloader/CMakeLists.txt create mode 100755 plasma/aerothemeplasma-kcmloader/install.sh create mode 100644 plasma/aerothemeplasma-kcmloader/main.cpp create mode 100644 plasma/shells/org.kde.plasma.desktop/contents/configuration/FooterItem.qml diff --git a/.gitignore b/.gitignore index 5894d61f..837f0a15 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ misc/defaulttooltip/build misc/uac-polkitagent/build misc/plymouth/plymouth-theme-smod/build kwin/decoration/build +plasma/aerothemeplasma-kcmloader/build plasma/plasmoids/src/volume_src/build plasma/plasmoids/src/sevenstart_src/build plasma/plasmoids/src/seventasks_src/build diff --git a/compile.sh b/compile.sh index 535fe523..9d00637a 100755 --- a/compile.sh +++ b/compile.sh @@ -33,6 +33,12 @@ sh $USE_SCRIPT $@ cd "$CUR_DIR" echo "Done." +echo "Compiling KCM loader..." +cd "$PWD/plasma/aerothemeplasma-kcmloader" +sh $USE_SCRIPT $@ +cd "$CUR_DIR" +echo "Done." + echo "Compiling KWin effects..." for filename in "$PWD/kwin/effects_cpp/"*; do cd "$filename" diff --git a/kwin/decoration/kdecoration/breezedecoration.h b/kwin/decoration/kdecoration/breezedecoration.h index b5b54e84..121797f5 100644 --- a/kwin/decoration/kdecoration/breezedecoration.h +++ b/kwin/decoration/kdecoration/breezedecoration.h @@ -261,6 +261,8 @@ bool Decoration::isGadgetExplorer() const bool Decoration::isPersonalizeKCM() const { if(window()->windowClass() == QStringLiteral("systemsettings systemsettings") && window()->caption().startsWith(QStringLiteral("aerothemeplasma-personalize"))) return true; + // standalone version + if(window()->windowClass() == QStringLiteral("aerothemeplasma-kcmloader aerothemeplasma-kcmloader") && window()->caption().startsWith(QStringLiteral("aerothemeplasma-personalize"))) return true; return false; } diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp index e3270327..21c03640 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp @@ -12,10 +12,14 @@ #include #include "kwineffects_interface.h" - #include "../hsvrgb.h" #include "../wackyfunc.h" +#include +#include +#include +#include + namespace KWin { @@ -44,14 +48,40 @@ BlurEffectConfig::BlurEffectConfig(QObject *parent, const KPluginMetaData &data) connect(ui.kcfg_ReflectionIntensity, SIGNAL(valueChanged(int)), this, SLOT(on_kcfg_ReflectionIntensity_valueChanged(int))); connect(ui.kcfg_FirefoxHollowRegion, SIGNAL(checkStateChanged(Qt::CheckState)), this, SLOT(on_kcfg_FirefoxHollowRegion_checkStateChanged(Qt::CheckState))); - m_window = new MainWindow(ui.kcfg_AccentColorName, ui.kcfg_AccentColorGroup, ui.kcfg_EnableTransparency, - ui.kcfg_AeroHue, ui.kcfg_AeroSaturation, ui.kcfg_AeroBrightness, - ui.kcfg_AeroIntensity, ui.kcfg_CustomColor, this, nullptr); - m_window->setWindowModality(Qt::WindowModality::WindowModal); - ui.reflectionLabel->setText(QString::number(ui.kcfg_ReflectionIntensity->value()) + " %" ); on_kcfg_FirefoxHollowRegion_checkStateChanged(ui.kcfg_FirefoxHollowRegion->checkState()); + /* + * It turns out that System Settings, when loading a KCM plugin, doesn't actually + * pass any information into data (KPluginMetaData), at least not for KWin effects + * like this. As a result, data returns an empty JSON object, but we can use this + * to our advantage and invoke the KCM directly, passing custom JSON data that + * allows us to override the KCM's behavior. + * + * If we want to have JUST the KCM, we need to initialize the Colorization KCM + * subpage with this KCModule's widget as the parent in order for window + * modality to work properly. We can also just almost immediately spawn the + * Colorization KCM (the delay is needed to ensure correct window modality). + */ + QJsonObject obj = data.rawData(); + if(obj["standalone"].toBool()) + { + m_window = new MainWindow(ui.kcfg_AccentColorName, ui.kcfg_AccentColorGroup, ui.kcfg_EnableTransparency, + ui.kcfg_AeroHue, ui.kcfg_AeroSaturation, ui.kcfg_AeroBrightness, + ui.kcfg_AeroIntensity, ui.kcfg_CustomColor, this, this->widget()); + m_window->setWindowModality(Qt::WindowModality::ApplicationModal); + QTimer::singleShot(250, this, [&]() { + this-> m_window->show(); + }); + + } + else + { + m_window = new MainWindow(ui.kcfg_AccentColorName, ui.kcfg_AccentColorGroup, ui.kcfg_EnableTransparency, + ui.kcfg_AeroHue, ui.kcfg_AeroSaturation, ui.kcfg_AeroBrightness, + ui.kcfg_AeroIntensity, ui.kcfg_CustomColor, this, nullptr); + m_window->setWindowModality(Qt::WindowModality::WindowModal); + } } void BlurEffectConfig::openColorMixer(QString str) { diff --git a/plasma/aerothemeplasma-kcmloader/CMakeLists.txt b/plasma/aerothemeplasma-kcmloader/CMakeLists.txt new file mode 100644 index 00000000..5e42e6a1 --- /dev/null +++ b/plasma/aerothemeplasma-kcmloader/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.19) +project(aerothemeplasma-kcmloader LANGUAGES CXX) + +set(QT_MIN_VERSION "6.8.0") +set(KF6_MIN_VERSION "6.14.0") +set(CMAKE_AUTOMOC ON) +set(QT_MAJOR_VERSION 6) + +find_package(Qt6 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core) +find_package(ECM 1.4.0 REQUIRED NO_MODULE) + +set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) + +include(KDEInstallDirs) +include(KDECMakeSettings) +include(KDECompilerSettings NO_POLICY_SCOPE) +include(FeatureSummary) + +find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS + DBus + Widgets +) + +qt_standard_project_setup() + +qt_add_executable(aerothemeplasma-kcmloader + main.cpp +) + +find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS + KCMUtils +) + +target_link_libraries(aerothemeplasma-kcmloader + PRIVATE Qt::Core + KF6::KCMUtils +) + +include(GNUInstallDirs) + +install(TARGETS aerothemeplasma-kcmloader + BUNDLE DESTINATION . + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +) diff --git a/plasma/aerothemeplasma-kcmloader/install.sh b/plasma/aerothemeplasma-kcmloader/install.sh new file mode 100755 index 00000000..f0ca9ce4 --- /dev/null +++ b/plasma/aerothemeplasma-kcmloader/install.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +BUILD_DST="build" +USE_NINJA= +BUILD_COMMAND="make" + +if [[ "$*" == *"--ninja"* ]] +then + if [[ -z "$(command -v ninja)" ]]; then + echo "Attempted to build using Ninja, but Ninja was not found on the system. Falling back to GNU Make." + else + echo "Compiling using Ninja" + USE_NINJA="-G Ninja" + BUILD_COMMAND="ninja" + fi +fi + + +rm -rf "$BUILD_DST" +mkdir "$BUILD_DST" +cd "$BUILD_DST" +cmake -DCMAKE_INSTALL_PREFIX=/usr .. $USE_NINJA +$BUILD_COMMAND +sudo $BUILD_COMMAND install + + diff --git a/plasma/aerothemeplasma-kcmloader/main.cpp b/plasma/aerothemeplasma-kcmloader/main.cpp new file mode 100644 index 00000000..b059cb8a --- /dev/null +++ b/plasma/aerothemeplasma-kcmloader/main.cpp @@ -0,0 +1,34 @@ +#include +#include + +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + a.setApplicationName("aerothemeplasma-kcmloader"); + a.setApplicationDisplayName("Personalize"); + QString modulePath; + if(argc > 2) { + modulePath = QString(argv[1]); + if(modulePath.startsWith("kwin")) { + if(a.platformName() == "xcb") { + modulePath = QStringLiteral("kwin-x11") + modulePath.slice(4); + } + } + QString iconName(argv[2]); + a.setWindowIcon(QIcon::fromTheme(iconName)); + } else { + return 1; + } + KCMultiDialog dialog; + QJsonObject obj; + obj.insert("standalone", QJsonValue(true)); + dialog.addModule(KPluginMetaData(obj, modulePath), QVariantList{QStringLiteral("KWin/Effect")}); + dialog.winId(); + dialog.open(); + return a.exec(); +} diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml index 517c2514..697db2db 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml @@ -397,7 +397,7 @@ ContainmentItem { PlasmaCore.Action { id: configAction - text: i18n("Desktop and Wallpaper") + text: i18n("Personalize") icon.name: "preferences-desktop-wallpaper" shortcut: "alt+d,alt+s" onTriggered: Plasmoid.containment.configureRequested(Plasmoid) diff --git a/plasma/shells/org.kde.plasma.desktop/contents/configuration/AppletConfiguration.qml b/plasma/shells/org.kde.plasma.desktop/contents/configuration/AppletConfiguration.qml index 538905c3..d02be3c7 100644 --- a/plasma/shells/org.kde.plasma.desktop/contents/configuration/AppletConfiguration.qml +++ b/plasma/shells/org.kde.plasma.desktop/contents/configuration/AppletConfiguration.qml @@ -142,6 +142,7 @@ Rectangle { Connections { target: app.currentConfigPage + ignoreUnknownSignals: true function onSettingValueChanged() { applyButton.enabled = true; } diff --git a/plasma/shells/org.kde.plasma.desktop/contents/configuration/ConfigurationContainmentActions.qml b/plasma/shells/org.kde.plasma.desktop/contents/configuration/ConfigurationContainmentActions.qml index 24d180b3..e97941e5 100644 --- a/plasma/shells/org.kde.plasma.desktop/contents/configuration/ConfigurationContainmentActions.qml +++ b/plasma/shells/org.kde.plasma.desktop/contents/configuration/ConfigurationContainmentActions.qml @@ -68,7 +68,8 @@ Item { id: mainColumn flow: GridLayout.TopToBottom y: 25 - width: parent.width + width: parent.width - Kirigami.Units.largeSpacing * 4 + x: Kirigami.Units.largeSpacing * 2 Repeater { id: actionsRepeater diff --git a/plasma/shells/org.kde.plasma.desktop/contents/configuration/ConfigurationContainmentAppearance.qml b/plasma/shells/org.kde.plasma.desktop/contents/configuration/ConfigurationContainmentAppearance.qml index b9e3404b..c4f75aa2 100644 --- a/plasma/shells/org.kde.plasma.desktop/contents/configuration/ConfigurationContainmentAppearance.qml +++ b/plasma/shells/org.kde.plasma.desktop/contents/configuration/ConfigurationContainmentAppearance.qml @@ -15,6 +15,8 @@ import org.kde.kirigami 2.20 as Kirigami import org.kde.kcmutils import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.configuration 2.0 +import org.kde.plasma.plasma5support as Plasma5Support + Item { id: appearanceRoot @@ -25,6 +27,27 @@ Item { property string containmentPlugin: "" property alias parentLayout: parentLayout + Plasma5Support.DataSource { + id: menu_executable + engine: "executable" + connectedSources: [] + onNewData: (sourceName, data) => { + var exitCode = data["exit code"] + var exitStatus = data["exit status"] + var stdout = data["stdout"] + var stderr = data["stderr"] + exited(sourceName, exitCode, exitStatus, stdout, stderr) + disconnectSource(sourceName) + } + function exec(cmd) { + if (cmd) { + connectSource(cmd) + } + } + signal exited(string cmd, int exitCode, int exitStatus, string stdout, string stderr) + } + + function saveConfig() { if (main.currentItem.saveConfig) { main.currentItem.saveConfig() @@ -78,19 +101,6 @@ Item { id: parentLayout // needed for twinFormLayouts to work in wallpaper plugins twinFormLayouts: main.currentItem.formLayout || [] Layout.fillWidth: true - QQC2.ComboBox { - id: pluginComboBox - Layout.preferredWidth: Math.max(implicitWidth, wallpaperComboBox.implicitWidth) - Kirigami.FormData.label: i18nd("plasma_shell_org.kde.plasma.desktop", "Layout:") - enabled: !Plasmoid.immutable - model: configDialog.containmentPluginsConfigModel - textRole: "name" - onActivated: { - var model = configDialog.containmentPluginsConfigModel.get(currentIndex) - appearanceRoot.containmentPlugin = model.pluginName - appearanceRoot.configurationChanged() - } - } RowLayout { Layout.fillWidth: true @@ -176,6 +186,103 @@ Item { Kirigami.Separator { Layout.fillWidth: true } + + RowLayout { + + + Layout.topMargin: Kirigami.Units.largeSpacing + Layout.bottomMargin: Kirigami.Units.largeSpacing + Layout.leftMargin: Kirigami.Units.gridUnit + Layout.rightMargin: Kirigami.Units.gridUnit + Layout.preferredWidth: root.availableWidth + uniformCellSizes: true + + ColumnLayout { + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + Item { + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: Math.max(layoutIcon.width, layoutText.implicitWidth) + Layout.preferredHeight: layoutIcon.height + layoutText.implicitHeight + Kirigami.Icon { + id: layoutIcon + width: Kirigami.Units.iconSizes.large + height: width + anchors.centerIn: parent + source: "user-desktop-symbolic" + Text { + id: layoutText + anchors.top: parent.bottom + anchors.topMargin: 1 + anchors.horizontalCenter: parent.horizontalCenter + color: Kirigami.Theme.linkColor + font.underline: layoutMA.containsMouse + text: { + var str = i18nd("plasma_shell_org.kde.plasma.desktop", "Layout:") + return str.slice(0, str.length-1); + } + } + } + MouseArea { + id: layoutMA + anchors.fill: parent + anchors.margins: -Kirigami.Units.smallSpacing + onClicked: pluginComboBox.popup.visible = !pluginComboBox.popup.visible; + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + } + } + QQC2.ComboBox { + id: pluginComboBox + Layout.topMargin: Kirigami.Units.smallSpacing / 2 + //Layout.preferredWidth: Math.max(implicitWidth + Layout.alignment: Qt.AlignHCenter + background: Item {} + contentItem: Text { + text: pluginComboBox.displayText + opacity: 0.66 + horizontalAlignment: Text.AlignHCenter + } + enabled: !Plasmoid.immutable + model: configDialog.containmentPluginsConfigModel + textRole: "name" + onActivated: { + var model = configDialog.containmentPluginsConfigModel.get(currentIndex) + appearanceRoot.containmentPlugin = model.pluginName + appearanceRoot.configurationChanged() + } + + } + } + + FooterItem { + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + bottomMargin: pluginComboBox.height + parent.spacing + iconSource: "preferences-desktop-theme-global" + text: "Window Color" + command: "kstart aerothemeplasma-kcmloader kwin/effects/configs/kwin_aeroglassblur_config.so " + iconSource + execHelper: menu_executable + } + FooterItem { + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + bottomMargin: pluginComboBox.height + parent.spacing + iconSource: "application-x-theme" + text: "Window Decorations" + command: "kstart aerothemeplasma-kcmloader org.kde.kdecoration3.kcm/kcm_smoddecoration.so " + iconSource + execHelper: menu_executable + } + FooterItem { + Layout.fillWidth: true + Layout.alignment: Qt.AlignHCenter + bottomMargin: pluginComboBox.height + parent.spacing + iconSource: "preferences-sound" + text: "Sounds" + command: "kstart systemsettings kcm_soundtheme" + execHelper: menu_executable + } + } } Component { diff --git a/plasma/shells/org.kde.plasma.desktop/contents/configuration/ContainmentConfiguration.qml b/plasma/shells/org.kde.plasma.desktop/contents/configuration/ContainmentConfiguration.qml index af512b85..aca45ec8 100644 --- a/plasma/shells/org.kde.plasma.desktop/contents/configuration/ContainmentConfiguration.qml +++ b/plasma/shells/org.kde.plasma.desktop/contents/configuration/ContainmentConfiguration.qml @@ -13,9 +13,9 @@ import org.kde.plasma.plasmoid 2.0 AppletConfiguration { id: root isContainment: true - Layout.minimumWidth: Kirigami.Units.gridUnit * 35 + Layout.minimumWidth: Kirigami.Units.gridUnit * 45 Layout.minimumHeight: Kirigami.Units.gridUnit * 30 - Layout.preferredWidth: Kirigami.Units.gridUnit * 32 + Layout.preferredWidth: Kirigami.Units.gridUnit * 50 Layout.preferredHeight: Kirigami.Units.gridUnit * 36 //BEGIN model diff --git a/plasma/shells/org.kde.plasma.desktop/contents/configuration/FooterItem.qml b/plasma/shells/org.kde.plasma.desktop/contents/configuration/FooterItem.qml new file mode 100644 index 00000000..d50eaf66 --- /dev/null +++ b/plasma/shells/org.kde.plasma.desktop/contents/configuration/FooterItem.qml @@ -0,0 +1,53 @@ +import QtQuick 2.15 +import org.kde.plasma.configuration 2.0 +import QtQuick.Controls 2.3 as QQC2 +import QtQuick.Layouts 1.1 +import QtQml 2.15 + +import org.kde.newstuff 1.62 as NewStuff +import org.kde.kirigami 2.20 as Kirigami +import org.kde.kcmutils +import org.kde.plasma.plasmoid 2.0 +import org.kde.plasma.configuration 2.0 +import org.kde.plasma.plasma5support as Plasma5Support + + +ColumnLayout { + id: column + property int bottomMargin + property string iconSource + property string text + property string command + + property var execHelper + + Item { + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: Math.max(icon.width, textLabel.implicitWidth) + Layout.preferredHeight: icon.height + textLabel.implicitHeight + Layout.bottomMargin: column.bottomMargin //pluginComboBox.height + parent.spacing + Kirigami.Icon { + id: icon + width: Kirigami.Units.iconSizes.large + height: width + anchors.centerIn: parent + source: column.iconSource + Text { + id: textLabel + anchors.top: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + color: Kirigami.Theme.linkColor + font.underline: ma.containsMouse + text: column.text + } + } + MouseArea { + id: ma + anchors.fill: parent + anchors.margins: -Kirigami.Units.smallSpacing + onClicked: column.execHelper.exec(column.command); + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + } + } +} From 5d785d91284fa214ccb902ab8b9da16f0c7d678f Mon Sep 17 00:00:00 2001 From: wackyideas Date: Tue, 15 Jul 2025 03:36:28 +0200 Subject: [PATCH 082/222] Attempt to fix digitalclocklite pulling incorrect first day of week --- .../contents/ui/CalendarView.qml | 2 +- .../contents/ui/CustomMonthView.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/CalendarView.qml b/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/CalendarView.qml index 9f443e6a..e12a7903 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/CalendarView.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/CalendarView.qml @@ -188,7 +188,7 @@ PlasmaCore.Dialog { id: monthView today: root.tzDate showWeekNumbers: Plasmoid.configuration.showWeekNumbers - firstDayOfWeek: Plasmoid.configuration.firstDayOfWeek + firstDayOfWeek: (Plasmoid.configuration.firstDayOfWeek == -1 ? Qt.locale().firstDayOfWeek : Plasmoid.configuration.firstDayOfWeek) anchors.fill: parent } } diff --git a/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/CustomMonthView.qml b/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/CustomMonthView.qml index 1d783b84..447cbbed 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/CustomMonthView.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/CustomMonthView.qml @@ -185,7 +185,7 @@ days: 7 weeks: 6 - firstDayOfWeek: Qt.locale().firstDayOfWeek + //firstDayOfWeek: today: root.today Component.onCompleted: { From 562f3b02c56ad6b2bff084e37d8f1e5fd4f0940a Mon Sep 17 00:00:00 2001 From: wackyideas Date: Tue, 15 Jul 2025 11:43:39 +0200 Subject: [PATCH 083/222] Update AeroGlassBlur default blur strength --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg index ce6dfe47..7ac67a2d 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg @@ -6,7 +6,7 @@ - 2 + 3 From e0d0b67c17be2c209f45a7cc81bcfbe18dc14550 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 16 Jul 2025 16:17:21 +0200 Subject: [PATCH 084/222] Fix crossfade visual glitch in SevenStart --- .../contents/ui/MenuRepresentation.qml | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index 4b479a05..6d6f688f 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -390,7 +390,6 @@ PlasmaCore.Dialog { onClicked: { filteredMenuItemsModel.trigger(index) root.visible = false; - } } onObjectAdded: (index, object) => { @@ -609,17 +608,12 @@ PlasmaCore.Dialog { id: allButtonsArea hoverEnabled: true - property alias textLabel: showingAllProgramsText.text property alias svgArrow: arrowDirection.elementId Behavior on opacity { NumberAnimation { easing.type: Easing.Linear; duration: animationDuration } } opacity: !searching - CrossFadeBehavior on textLabel { - fadeDuration: 200 - easingType: "Linear" - } CrossFadeBehavior on svgArrow { fadeDuration: 200 easingType: "Linear" @@ -720,7 +714,7 @@ PlasmaCore.Dialog { } Text { id: showingAllProgramsText - text: showingAllPrograms ? " Back" : " All Programs" + text: " All Programs" font.pixelSize: 12 anchors.left: arrowDirection.right anchors.leftMargin: Kirigami.Units.mediumSpacing @@ -728,6 +722,25 @@ PlasmaCore.Dialog { anchors.verticalCenterOffset: -1 style: Text.Sunken styleColor: "transparent" + opacity: !showingAllPrograms + Behavior on opacity { + NumberAnimation { duration: 200 } + } + } + Text { + id: showingAllProgramsTextBack + text: " Back" + font.pixelSize: 12 + anchors.left: arrowDirection.right + anchors.leftMargin: Kirigami.Units.mediumSpacing + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -1 + style: Text.Sunken + styleColor: "transparent" + opacity: showingAllPrograms + Behavior on opacity { + NumberAnimation { duration: 200 } + } } } PlasmaExtras.ActionTextField { From 3fefc7fcfe4677514ff25482bd76fb894c93b351 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Thu, 17 Jul 2025 04:23:41 +0200 Subject: [PATCH 085/222] Update Fedora X11 dependencies --- INSTALL.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/INSTALL.md b/INSTALL.md index ac942c8f..d83205ee 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -39,6 +39,13 @@ Required Packages: dnf install plasma-workspace-devel 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 ``` +### Note: + +On Fedora, additional dependencies for X11 include: + +- `kwin-x11` +- `kwin-x11-devel` + ## Getting started To download this repository, clone it with `git`: From 00d7318c2243739d5f5cbd1617b5398e715943fd Mon Sep 17 00:00:00 2001 From: wackyideas Date: Thu, 17 Jul 2025 04:33:25 +0200 Subject: [PATCH 086/222] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8018b819..05bd9d62 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# AEROTHEMEPLASMA FOR KDE 6 +# AEROTHEMEPLASMA FOR KDE PLASMA 6 ## Microsoft® Windows™ is a registered trademark of Microsoft® Corporation. This name is used for referential use only, and does not aim to usurp copyrights from Microsoft. Microsoft Ⓒ 2025 All rights reserved. All resources belong to Microsoft Corporation. @@ -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: - Arch Linux x64 and other Arch derivatives -- Plasma 6.4.0, KDE Frameworks 6.15.0, Qt 6.9.1 +- Plasma 6.4.3, KDE Frameworks 6.16.0, Qt 6.9.1 - 96 DPI scaling, multi monitor - X11, Wayland* From e1918fef3c33656ca71f0edd562d8bdc6d3b655b Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 18 Jul 2025 20:58:52 +0200 Subject: [PATCH 087/222] Hide systray flyout when there are no more hidden items --- .../contents/ui/ExpandedRepresentation.qml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpandedRepresentation.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpandedRepresentation.qml index b9ac56b3..a9272a62 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpandedRepresentation.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpandedRepresentation.qml @@ -91,6 +91,11 @@ Item { id: hiddenItemsView Layout.preferredWidth: hiddenItemsView.width + onHiddenItemsCountChanged: { + if(visible && hiddenItemsCount == 0) { + systemTrayState.expanded = false; + } + } visible: !systemTrayState.activeApplet onVisibleChanged: { From 4292a53bc6c4966e1fb1703300e5d0bd5cf029bd Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 18 Jul 2025 22:05:52 +0200 Subject: [PATCH 088/222] Fix kornerbug in tooltips --- misc/defaulttooltip/tooltiparea.cpp | 2 +- .../Seven-Black/solid/widgets/tooltip.svg | 105 +++--------------- 2 files changed, 16 insertions(+), 91 deletions(-) diff --git a/misc/defaulttooltip/tooltiparea.cpp b/misc/defaulttooltip/tooltiparea.cpp index 847973b3..51c30345 100644 --- a/misc/defaulttooltip/tooltiparea.cpp +++ b/misc/defaulttooltip/tooltiparea.cpp @@ -192,7 +192,7 @@ void ToolTipArea::showToolTip() dlg->setFlags(flags | Qt::Dialog); } else { Qt::WindowFlags flags = dlg->flags(); - dlg->setFlags(flags & ~Qt::Dialog); + dlg->setFlags((flags & ~Qt::Dialog) | Qt::ToolTip); } dlg->setVisible(true); diff --git a/plasma/desktoptheme/Seven-Black/solid/widgets/tooltip.svg b/plasma/desktoptheme/Seven-Black/solid/widgets/tooltip.svg index 416e660c..3fd76bd1 100755 --- a/plasma/desktoptheme/Seven-Black/solid/widgets/tooltip.svg +++ b/plasma/desktoptheme/Seven-Black/solid/widgets/tooltip.svg @@ -4,7 +4,7 @@ height="100" id="svg1000" sodipodi:version="0.32" - inkscape:version="1.3 (0e150ed, 2023-07-21)" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" sodipodi:docname="tooltip.svg" inkscape:output_extension="org.inkscape.output.svgz.inkscape" version="1.0" @@ -18,7 +18,16 @@ xmlns:dc="http://purl.org/dc/elements/1.1/"> + id="style1022"> +#rect4860 { + fill:#e61f8c; + fill-opacity:0; + opacity:1; + stroke:none; +} + #rect1023 { fill-opacity:0; fill:#7f7f7f; opacity:1; } + + image/svg+xml - @@ -4232,89 +4240,6 @@ width="5" id="hint-stretch-borders" style="opacity:0.875;fill:#00ffff;fill-opacity:1;stroke:none" /> - - - - - - - - - - - - - - - - - - - - - - - - - Date: Fri, 18 Jul 2025 22:12:38 +0200 Subject: [PATCH 089/222] Fix uncentered tooltip in digitalclocklite --- .../contents/ui/DigitalClock.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/DigitalClock.qml b/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/DigitalClock.qml index 18c74373..76c4119c 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/DigitalClock.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.digitalclocklite/contents/ui/DigitalClock.qml @@ -500,6 +500,7 @@ Item { PlasmaCore.ToolTipArea { id: timeToolTip + anchors.fill: parent mainText: { var now = dataSource.data[plasmoid.configuration.lastSelectedTimezone]["DateTime"]; return Qt.formatDate(now, "dddd, MMMM dd, yyyy"); From bcf3e27db4dfad7db79c853b052716fc6bdcce09 Mon Sep 17 00:00:00 2001 From: Nicholas Roth Date: Fri, 18 Jul 2025 21:07:12 -0400 Subject: [PATCH 090/222] When KWin is running in HDR mode, decorations within the compositor must explicitly apply color management when doing their own low-level rendering outside of Qt and KDE APIs. In this case, full intensity is interpreted as the most intense light that the display is capable of outputting. Two smod decorations (aeroglassblur and smodglow) used OpenGL contexts without explicit color management to respect KDE-specified brightness settings when operating in HDR mode. Additionally, these decorations had incorrect brightness scaling code that only applied brightness changes to R, G, and B, but not the Alpha component, resulting in dark glows at low brightness values. This change fixes the brightness scaling code and introduces explicit brightness scaling in HDR windows that use OpenGL effects to respect the global KDE brightness settings. --- .../kde-effects-aeroglassblur/src/blur.cpp | 15 +++++++++++++-- kwin/effects_cpp/smodglow/src/smodglow-kf6.cpp | 15 +++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 37efb047..c1adb484 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -852,6 +852,14 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi QMatrix4x4 transformedMatrix; QVariant winData = w->data(TRANSFORMATION_DATA); + + // HDR brightness must be handled by color management in the compositor. + double hdr_brightness_correction = 1.0; + if (w->screen()->highDynamicRange()) + { + hdr_brightness_correction = w->screen()->brightnessSetting(); + } + if(!winData.isNull()) { transformedMatrix = winData.value(); @@ -1075,7 +1083,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi } vbo->bindArrays(); - QMatrix4x4 colorMat = colorMatrix(data.brightness(), data.saturation()); + QMatrix4x4 colorMat = colorMatrix(data.brightness() * hdr_brightness_correction, data.saturation()); { // The downsample pass of the dual Kawase algorithm: the background will be scaled down 50% every iteration. @@ -1313,7 +1321,10 @@ QMatrix4x4 BlurEffect::colorMatrix(const float &brightness, const float &saturat QMatrix4x4 brightnessMatrix; if (brightness != 1.0) { - brightnessMatrix.scale(brightness, brightness, brightness); + brightnessMatrix = QMatrix4x4(brightness, 0, 0, 0, + 0, brightness, 0, 0, + 0, 0, brightness, 0, + 0, 0, 0, brightness); } return saturationMatrix * brightnessMatrix; diff --git a/kwin/effects_cpp/smodglow/src/smodglow-kf6.cpp b/kwin/effects_cpp/smodglow/src/smodglow-kf6.cpp index 57fd569c..a0695be6 100644 --- a/kwin/effects_cpp/smodglow/src/smodglow-kf6.cpp +++ b/kwin/effects_cpp/smodglow/src/smodglow-kf6.cpp @@ -25,7 +25,10 @@ QMatrix4x4 SmodGlowEffect::colorMatrix(const float &brightness, const float &sat QMatrix4x4 brightnessMatrix; if (brightness != 1.0) { - brightnessMatrix.scale(brightness, brightness, brightness); + brightnessMatrix = QMatrix4x4(brightness, 0, 0, 0, + 0, brightness, 0, 0, + 0, 0, brightness, 0, + 0, 0, 0, brightness); } return saturationMatrix * brightnessMatrix; @@ -92,6 +95,14 @@ void SmodGlowEffect::paintWindow(const RenderTarget &renderTarget, const RenderV bool scaled = !qFuzzyCompare(data.xScale(), 1.0) && !qFuzzyCompare(data.yScale(), 1.0); bool translated = data.xTranslation() || data.yTranslation(); + double hdr_brightness_correction = 1.0; + + // HDR brightness must be handled by color management in the compositor. + if (w->screen()->highDynamicRange()) + { + hdr_brightness_correction = w->screen()->brightnessSetting(); + } + if ((scaled || (translated || (mask & PAINT_WINDOW_TRANSFORMED)))) { return; @@ -121,7 +132,7 @@ void SmodGlowEffect::paintWindow(const RenderTarget &renderTarget, const RenderV int uniform_texturerect = m_shader->uniformLocation("texturerect"); int uniform_colormatrix = m_shader->uniformLocation("colorMatrix"); const auto scale = viewport.scale(); - QMatrix4x4 colorMat = colorMatrix(data.brightness(), data.saturation()); + QMatrix4x4 colorMat = colorMatrix(data.brightness() * hdr_brightness_correction, data.saturation()); { float opacity = handler->m_min->hoverProgress() * w->opacity() * data.opacity(); From 4e7c5c71805fedf347dc87de843b1707caa395e4 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 19 Jul 2025 15:30:43 +0200 Subject: [PATCH 091/222] More accurate icon highlights in desktop containment --- .../Seven-Black/widgets/viewitem.svg | 4357 +++++++---------- .../contents/ui/FolderItemDelegate.qml | 17 +- screenshots/icons.png | Bin 34057 -> 30505 bytes 3 files changed, 1909 insertions(+), 2465 deletions(-) mode change 100755 => 100644 plasma/desktoptheme/Seven-Black/widgets/viewitem.svg diff --git a/plasma/desktoptheme/Seven-Black/widgets/viewitem.svg b/plasma/desktoptheme/Seven-Black/widgets/viewitem.svg old mode 100755 new mode 100644 index 7aaf3ccc..55275245 --- a/plasma/desktoptheme/Seven-Black/widgets/viewitem.svg +++ b/plasma/desktoptheme/Seven-Black/widgets/viewitem.svg @@ -2,14 +2,14 @@ + + + + id="linearGradient55" + inkscape:collect="always"> + id="stop54" /> + id="stop55" /> + id="linearGradient53" + inkscape:collect="always" + gradientTransform="scale(0.11700317,8.5467769)" + x1="-3594.2161" + y1="59.422928" + x2="-3594.2161" + y2="67.931259" + gradientUnits="userSpaceOnUse" + inkscape:label="1231" + spreadMethod="pad"> + id="stop52" /> + id="stop53" /> + id="linearGradient47" + inkscape:collect="always"> + id="stop46" /> - - + id="stop47" /> + id="linearGradient45" + inkscape:collect="always"> + id="stop44" /> - - + id="stop45" /> + id="linearGradient5" + inkscape:collect="always"> + id="stop5" /> + id="stop6" /> - - + id="linearGradient1" + inkscape:collect="always"> + + +
- - + y2="69.595322" + x2="205.71428" + y1="388.32648" + x1="205.71428" + id="linearGradient3232" + xlink:href="#linearGradient3226" + inkscape:collect="always" /> - - + y2="282.10455" + x2="209.42223" + y1="175.20241" + x1="209.05597" + id="linearGradient3250" + xlink:href="#linearGradient3244" + inkscape:collect="always" /> - - + id="linearGradient3276" + xlink:href="#linearGradient3226" + inkscape:collect="always" /> - - + id="linearGradient3226"> + + + - - + id="linearGradient3308" + xlink:href="#linearGradient3226" + inkscape:collect="always" /> + id="linearGradient3244" + inkscape:collect="always"> + + + + - - + - - + inkscape:collect="always" /> - + gradientUnits="userSpaceOnUse" + id="linearGradient7027" + xlink:href="#linearGradient6762" + inkscape:collect="always" /> - + - + - + + - + - + - + - + + gradientUnits="userSpaceOnUse" + id="linearGradient7041" + xlink:href="#linearGradient6762" + inkscape:collect="always" /> - - - - - - - + + fx="208.64999" + cy="455.01505" + cx="208.64999" + gradientTransform="matrix(1.4814815,0,0,0.9994213,-242.09694,-166.75219)" + gradientUnits="userSpaceOnUse" + id="radialGradient7049" + xlink:href="#linearGradient6762" + inkscape:collect="always" /> + y2="429" + x2="233" + y1="479.20459" + x1="233" + gradientTransform="translate(-140.98583,-167.00046)" + gradientUnits="userSpaceOnUse" + id="linearGradient7078" + xlink:href="#linearGradient6762" + inkscape:collect="always" /> + + + + + + + + + + style="stop-color:#ffffff;stop-opacity:1;" /> + style="stop-color:#ffffff;stop-opacity:0;" /> + y1="479.20459" + x1="233" + gradientTransform="translate(-420.98583,-164.99862)" + gradientUnits="userSpaceOnUse" + id="linearGradient7072" + xlink:href="#linearGradient6762" + inkscape:collect="always" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="perspective4464" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + gradientTransform="translate(-1.0000055)" + x1="-419.53564" + y1="507.90897" + x2="-419.53564" + y2="580.64392" /> + x1="-419.53494" + y1="507.86603" + x2="-419.53494" + y2="580.62976" /> + gradientTransform="translate(163.0192,1.0476)" + x1="-253.07993" + y1="447.87155" + x2="-253.07993" + y2="507.83115" /> + x1="-419.50967" + y1="507.95242" + x2="-419.50967" + y2="580.65979" /> + gradientTransform="scale(0.11700317,8.5467769)" + x1="-3594.2161" + y1="59.422928" + x2="-3594.2161" + y2="67.931259" /> + gradientTransform="translate(-1.0000055)" + x1="-419.53564" + y1="507.90897" + x2="-419.53564" + y2="580.64392" /> + x1="-419.53494" + y1="507.86603" + x2="-419.53494" + y2="580.62976" /> - - - @@ -1924,769 +1366,768 @@ image/svg+xml - + inkscape:groupmode="layer" + inkscape:label="Camada 1"> + y="277.99579" + x="-520.6806" + height="413.09033" + width="657.58447" + id="rect7090" + style="opacity:1;fill:#798474;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + id="hover-topleft" + inkscape:label="#g18449" + transform="translate(-279.55087,502.00501)"> + + id="path4697-9-5-9-9" + d="m -9.8730772,-59.189373 c -1.6697098,-0.04464 -2.7601008,1.329641 -2.6603768,2.708751 l 0.02046,0.282837 0.99312,0.0074 c 0,0 -0.390519,-2.124113 1.9801046,-1.979645 l -0.018797,-1.010821 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#98c4fb;fill-opacity:0.68000001;fill-rule:nonzero;stroke:none;stroke-width:2.05901;marker:none" + sodipodi:nodetypes="ssccccs" /> + id="path21950-22-3-1-3" + d="m -9.7356301,-58.183212 c -1.3037869,-0.0358 -1.8462679,0.798555 -1.7736209,1.805741 l 0.0136,0.188553 0.975777,0.005 c 0,0 -0.242675,-1.10437 1.0064137,-0.986112 l -0.0126,-1.007428 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#fcfdff;fill-opacity:0.61000001;fill-rule:nonzero;stroke:none;stroke-width:1.37265;marker:none" + sodipodi:nodetypes="ssccccs" /> + sodipodi:nodetypes="cccc" /> + id="hover-bottomleft" + inkscape:label="#g18449" + transform="rotate(-90,133.73386,366.61486)"> - - - - - - - - - - - - - + id="path4697-9-5-9" + d="m -9.8730772,-59.189373 c -1.6697098,-0.04464 -2.7601008,1.329641 -2.6603768,2.708751 l 0.02046,0.282837 0.99312,0.0074 c 0,0 -0.390519,-2.124113 1.9801046,-1.979645 l -0.018797,-1.010821 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#98c4fb;fill-opacity:0.68000001;fill-rule:nonzero;stroke:none;stroke-width:2.05901;marker:none" + sodipodi:nodetypes="ssccccs" /> - + id="path21950-22-3-1" + d="m -9.7356301,-58.183212 c -1.3037869,-0.0358 -1.8462679,0.798555 -1.7736209,1.805741 l 0.0136,0.188553 0.975777,0.005 c 0,0 -0.242675,-1.10437 1.0064137,-0.986112 l -0.0126,-1.007428 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ebf4ff;fill-opacity:0.61176473;fill-rule:nonzero;stroke:none;stroke-width:1.37265;marker:none" + sodipodi:nodetypes="ssccccs" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + sodipodi:nodetypes="cccc" /> + inkscape:label="#g18449" + transform="matrix(0,-1,-1,0,-273.25045,500.34872)"> + inkscape:connector-curvature="0" + id="path4697-9-5" + d="m -9.8730772,-59.189373 c -1.6697098,-0.04464 -2.7601008,1.329641 -2.6603768,2.708751 l 0.02046,0.282837 0.99312,0.0074 c 0,0 -0.390519,-2.124113 1.9801046,-1.979645 l -0.018797,-1.010821 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#98c4fb;fill-opacity:0.68000001;fill-rule:nonzero;stroke:none;stroke-width:2.05901;marker:none" + sodipodi:nodetypes="ssccccs" /> + inkscape:connector-curvature="0" + id="path21950-22-3" + d="m -9.7356301,-58.183212 c -1.3037869,-0.0358 -1.8462679,0.798555 -1.7736209,1.805741 l 0.0136,0.188553 0.975777,0.005 c 0,0 -0.242675,-1.10437 1.0064137,-0.986112 l -0.0126,-1.007428 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#ebf4ff;fill-opacity:0.61176473;fill-rule:nonzero;stroke:none;stroke-width:1.37265;marker:none" + sodipodi:nodetypes="ssccccs" /> + + id="hover-topright" + inkscape:label="#g18449" + transform="matrix(-1,0,0,1,-226.55495,502.01283)"> - - - - - - + id="path4697-9" + d="m -9.8730772,-59.189373 c -1.6697098,-0.04464 -2.7601008,1.329641 -2.6603768,2.708751 l 0.02046,0.282837 0.99312,0.0074 c 0,0 -0.390519,-2.124113 1.9801046,-1.979645 l -0.018797,-1.010821 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#98c4fb;fill-opacity:0.68000001;fill-rule:nonzero;stroke:none;stroke-width:2.05901;marker:none" + sodipodi:nodetypes="ssccccs" /> + + + + + + + + + + + + + + + + + + - - - + transform="matrix(0,1,-0.9340845,0,255.31306,864.8908)"> + + + - - - + transform="matrix(0,-1,-0.9340845,0,255.31306,90.8215)" + id="hover-bottom"> + + + - - - + transform="matrix(-1,0,0,0.8241668,-636.10709,29.29367)"> + + + + id="selected-topleft" + inkscape:label="#g18449" + transform="translate(-196.53167,502.05261)"> + + id="path4697-9-5-9-9-9" + d="m -9.8730772,-59.189373 c -1.6697098,-0.04464 -2.7601008,1.329641 -2.6603768,2.708751 l 0.02046,0.282837 0.99312,0.0074 c 0,0 -0.390519,-2.124113 1.9801046,-1.979645 l -0.018797,-1.010821 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#6f98c9;fill-opacity:0.89999998;fill-rule:nonzero;stroke:none;stroke-width:2.05901;marker:none" + sodipodi:nodetypes="ssccccs" /> + inkscape:connector-curvature="0" + id="path21950-22-3-1-3-1" + d="m -9.7356301,-58.183212 c -1.3037869,-0.0358 -1.8462679,0.798555 -1.7736209,1.805741 l 0.0136,0.188553 0.975777,0.005 c 0,0 -0.242675,-1.10437 1.0064137,-0.986112 l -0.0126,-1.007428 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e8f2fd;fill-opacity:0.85000002;fill-rule:nonzero;stroke:none;stroke-width:1.37265;marker:none" + sodipodi:nodetypes="ssccccs" /> + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d2e6fc;fill-opacity:0.74901962;fill-rule:nonzero;stroke:none;stroke-width:1.40472;marker:none" + d="m -10.561838,-56.179008 c -0.12583,-1.14264 1.0093003,-0.99747 1.0093003,-0.99747 v 0.99747 z" + id="path4756-3-7-6-2-8-5-2-6-2" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + id="selected-bottomleft" + inkscape:label="#g18449" + transform="rotate(-90,175.26726,325.12906)"> + + + + id="selected-bottomright" + inkscape:label="#g18449" + transform="matrix(0,-1,-1,0,-190.23125,500.39632)"> + + id="path4697-9-5-1" + d="m -9.8730772,-59.189373 c -1.6697098,-0.04464 -2.7601008,1.329641 -2.6603768,2.708751 l 0.02046,0.282837 0.99312,0.0074 c 0,0 -0.390519,-2.124113 1.9801046,-1.979645 l -0.018797,-1.010821 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#6f98c9;fill-opacity:0.89999998;fill-rule:nonzero;stroke:none;stroke-width:2.05901;marker:none" + sodipodi:nodetypes="ssccccs" /> + id="path21950-22-3-8" + d="m -9.7356301,-58.183212 c -1.3037869,-0.0358 -1.8462679,0.798555 -1.7736209,1.805741 l 0.0136,0.188553 0.975777,0.005 c 0,0 -0.242675,-1.10437 1.0064137,-0.986112 l -0.0126,-1.007428 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d5e6fd;fill-opacity:0.85000002;fill-rule:nonzero;stroke:none;stroke-width:1.37265;marker:none" + sodipodi:nodetypes="ssccccs" /> + sodipodi:nodetypes="cccc" /> + id="selected-topright" + inkscape:label="#g18449" + transform="matrix(-1,0,0,1,-143.53575,502.06043)"> + inkscape:connector-curvature="0" + id="path4697-9-0" + d="m -9.8730772,-59.189373 c -1.6697098,-0.04464 -2.7601008,1.329641 -2.6603768,2.708751 l 0.02046,0.282837 0.99312,0.0074 c 0,0 -0.390519,-2.124113 1.9801046,-1.979645 l -0.018797,-1.010821 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#6f98c9;fill-opacity:0.89999998;fill-rule:nonzero;stroke:none;stroke-width:2.05901;marker:none" + sodipodi:nodetypes="ssccccs" /> + inkscape:connector-curvature="0" + id="path21950-22-2" + d="m -9.7356301,-58.183212 c -1.3037869,-0.0358 -1.8462679,0.798555 -1.7736209,1.805741 l 0.0136,0.188553 0.975777,0.005 c 0,0 -0.242675,-1.10437 1.0064137,-0.986112 l -0.0126,-1.007428 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#e8f2fd;fill-opacity:0.85000002;fill-rule:nonzero;stroke:none;stroke-width:1.37265;marker:none" + sodipodi:nodetypes="ssccccs" /> + + + + + + + - - - + id="selected-top" + transform="matrix(0,1,-0.9340845,0,338.33226,864.9384)"> + + + - - - + transform="matrix(0,-1,-0.9340845,0,338.33226,90.8691)" + id="selected-bottom"> + + + - - - + id="selected-right" + transform="matrix(-1,0,0,0.8241668,-553.08789,29.34127)"> + + + + id="selected+hover-topleft" + inkscape:label="#g18449" + transform="translate(-116.53167,503.05261)"> - + id="path4697-9-5-9-9-9-6" + d="m -9.8730772,-59.189373 c -1.6697098,-0.04464 -2.7601008,1.329641 -2.6603768,2.708751 l 0.02046,0.282837 0.99312,0.0074 c 0,0 -0.390519,-2.124113 1.9801046,-1.979645 l -0.018797,-1.010821 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#77a3d9;fill-opacity:0.90196079;fill-rule:nonzero;stroke:none;stroke-width:2.05901;marker:none" + sodipodi:nodetypes="ssccccs" /> + + + id="selected+hover-bottomleft" + inkscape:label="#g18449" + transform="rotate(-90,215.76726,285.62906)"> + sodipodi:nodetypes="sscccs" + style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.4;marker:none" + d="m -10.66122,-58.135013 c 0,0 -0.892688,0.19957 -0.828786,0.912168 l 0.0065,0.0722 h 0.983534 l -0.0206,-0.992186 z" + id="path4695-5-7-2-09-3" + inkscape:connector-curvature="0" /> + id="path4697-9-5-9-3-7" + d="m -9.8730772,-59.189373 c -1.6697098,-0.04464 -2.7601008,1.329641 -2.6603768,2.708751 l 0.02046,0.282837 0.99312,0.0074 c 0,0 -0.390519,-2.124113 1.9801046,-1.979645 l -0.018797,-1.010821 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#77a3d9;fill-opacity:0.90196079;fill-rule:nonzero;stroke:none;stroke-width:2.05901;marker:none" + sodipodi:nodetypes="ssccccs" /> + id="path21950-22-3-1-6-4" + d="m -9.7356301,-58.183212 c -1.3037869,-0.0358 -1.8462679,0.798555 -1.7736209,1.805741 l 0.0136,0.188553 0.975777,0.005 c 0,0 -0.242675,-1.10437 1.0064137,-0.986112 l -0.0126,-1.007428 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d9ebff;fill-opacity:0.83137256;fill-rule:nonzero;stroke:none;stroke-width:1.37265;marker:none" + sodipodi:nodetypes="ssccccs" /> + + id="selected+hover-bottomright" + inkscape:label="#g18449" + transform="matrix(0,-1,-1,0,-110.23125,501.39632)"> + + id="path4697-9-5-1-4" + d="m -9.8730772,-59.189373 c -1.6697098,-0.04464 -2.7601008,1.329641 -2.6603768,2.708751 l 0.02046,0.282837 0.99312,0.0074 c 0,0 -0.390519,-2.124113 1.9801046,-1.979645 l -0.018797,-1.010821 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#77a3d9;fill-opacity:0.90196079;fill-rule:nonzero;stroke:none;stroke-width:2.05901;marker:none" + sodipodi:nodetypes="ssccccs" /> + inkscape:connector-curvature="0" + id="path21950-22-3-8-7" + d="m -9.7356301,-58.183212 c -1.3037869,-0.0358 -1.8462679,0.798555 -1.7736209,1.805741 l 0.0136,0.188553 0.975777,0.005 c 0,0 -0.242675,-1.10437 1.0064137,-0.986112 l -0.0126,-1.007428 z" + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#d9ebff;fill-opacity:0.83137256;fill-rule:nonzero;stroke:none;stroke-width:1.37265;marker:none" + sodipodi:nodetypes="ssccccs" /> + style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:#c0dcff;fill-opacity:0.75;fill-rule:nonzero;stroke:none;stroke-width:1.40472;marker:none" + d="m -10.561838,-56.179008 c -0.12583,-1.14264 1.0093003,-0.99747 1.0093003,-0.99747 v 0.99747 z" + id="path4756-3-7-6-2-8-5-7-4" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + id="selected+hover-topright" + inkscape:label="#g18449" + transform="matrix(-1,0,0,1,-63.53575,503.06043)"> + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml index c0b939aa..19bc0164 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml @@ -539,14 +539,17 @@ Item { Component { id: frameComponent - PlasmaExtras.Highlight { - // Workaround for a bug where the frameComponent does not - // get unloaded when items are dragged to a different - // place on the desktop. + KSvg.FrameSvgItem { + imagePath: "widgets/viewitem" visible: this === frameLoader.item && !Plasmoid.configuration.selectionStyle - hovered: impl.iconAndLabelsShouldlookSelected - pressed: model.selected - active: Window.active + property bool hovered: impl.iconAndLabelsShouldlookSelected + property bool pressed: model.selected + prefix: { + if(hovered && pressed) return "selected+hover"; + if(hovered) return "hover"; + if(pressed) return "selected"; + return "normal"; + } } } diff --git a/screenshots/icons.png b/screenshots/icons.png index fecb54b1e91a98956b372798d1dbb53fb65fb7ee..e1d901b0da447efeeebb5326e69fb3c726c19bc2 100644 GIT binary patch literal 30505 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 literal 34057 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 R6X^f|002ovPDHLkV1hG*wx$38 From 7f0e155ebbaca2ea21a8c480fc990fd8a31c4e75 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 20 Jul 2025 20:01:11 +0200 Subject: [PATCH 092/222] Fix minor bugs in SevenStart --- .../contents/ui/FloatingIcon.qml | 2 +- .../contents/ui/MenuRepresentation.qml | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/FloatingIcon.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/FloatingIcon.qml index f919eacc..6eaa5738 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/FloatingIcon.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/FloatingIcon.qml @@ -106,8 +106,8 @@ Item { anchors.fill: parent acceptedButtons: Qt.LeftButton onPressed: { - root.visible = false; KCM.KCMLauncher.openSystemSettings("kcm_users") + root.visible = false; } cursorShape: Qt.PointingHandCursor } diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index 6d6f688f..3bdc4474 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -473,7 +473,6 @@ PlasmaCore.Dialog { CrossFadeBehavior on width { fadeDuration: 200 - easingType: "Linear" } Rectangle { id: backgroundBorderLine @@ -616,7 +615,6 @@ PlasmaCore.Dialog { opacity: !searching CrossFadeBehavior on svgArrow { fadeDuration: 200 - easingType: "Linear" } Layout.fillWidth: true Layout.leftMargin: Kirigami.Units.smallSpacing @@ -1035,7 +1033,7 @@ PlasmaCore.Dialog { id: columnItems spacing: 2 Layout.alignment: Qt.AlignTop - width: Math.max(cellWidthSide, columnItems.implicitWidth) + width: Math.max(root.cellWidthSide, columnItems.implicitWidth) property var cfg_sidePanelVisibility: Plasmoid.configuration.sidePanelVisibility property var sidePanelVisibility: { @@ -1057,6 +1055,7 @@ PlasmaCore.Dialog { model: sidePanelModels.firstCategory.length visible: false // Messes with separator visibility checks delegate: SidePanelItemDelegate { + id: firstCategoryDelegate required property int index itemText: sidePanelModels.firstCategory[index].itemText itemIcon: sidePanelModels.firstCategory[index].itemIcon @@ -1068,6 +1067,10 @@ PlasmaCore.Dialog { separator2.updateVisibility(); } Layout.fillWidth: true + onItemTextChanged: { // Fix bug where changing the username for some reason causes the item width to shrink to the text content + firstCategoryDelegate.Layout.fillWidth = false; + firstCategoryDelegate.Layout.fillWidth = true; + } } } From ec3ffc2f173455713c155e5ee7ba160e2af70532 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 20 Jul 2025 20:20:06 +0200 Subject: [PATCH 093/222] Fix system tray icons not appearing or updating the tray --- .../contents/ui/ExpandedRepresentation.qml | 1 + .../contents/ui/ExpanderArrow.qml | 11 +++++++---- .../org.kde.plasma.systemtray/contents/ui/main.qml | 3 +++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpandedRepresentation.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpandedRepresentation.qml index a9272a62..e6bfb9ab 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpandedRepresentation.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpandedRepresentation.qml @@ -94,6 +94,7 @@ Item { onHiddenItemsCountChanged: { if(visible && hiddenItemsCount == 0) { systemTrayState.expanded = false; + layout.currentIndex = -1; } } visible: !systemTrayState.activeApplet diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpanderArrow.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpanderArrow.qml index f0b00550..46a6ba52 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpanderArrow.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpanderArrow.qml @@ -50,13 +50,16 @@ PlasmaCore.ToolTipArea { } TapHandler { - onPressedChanged: { + /*onPressedChanged: { if (pressed) { - tooltip.wasExpanded = systemTrayState.expanded; + systemTrayState.expanded = !systemTrayState.expanded; + expandedRepresentation.hiddenLayout.currentIndex = -1; + //tooltip.wasExpanded = systemTrayState.expanded; } - } + }*/ onTapped: { - systemTrayState.expanded = !tooltip.wasExpanded; + systemTrayState.expanded = !systemTrayState.expanded; + //systemTrayState.expanded = !tooltip.wasExpanded; expandedRepresentation.hiddenLayout.currentIndex = -1; } } diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml index c8680692..ed6d4a6c 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml @@ -193,6 +193,9 @@ ContainmentItem { } } items.includeByDefault: false + onCountChanged: { + root.hiddenLayout.model.invalidateFilter(); + } groups: DelegateModelGroup { id: unsortedItems name: "unsorted" From 15e2f7709a863b16494c76805d45a6b7930dfa3b Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 20 Jul 2025 20:30:18 +0200 Subject: [PATCH 094/222] Remove some commented code from ExpanderArrow --- .../contents/ui/ExpanderArrow.qml | 66 ------------------- 1 file changed, 66 deletions(-) diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpanderArrow.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpanderArrow.qml index 46a6ba52..b042b361 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpanderArrow.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/ExpanderArrow.qml @@ -50,13 +50,6 @@ PlasmaCore.ToolTipArea { } TapHandler { - /*onPressedChanged: { - if (pressed) { - systemTrayState.expanded = !systemTrayState.expanded; - expandedRepresentation.hiddenLayout.currentIndex = -1; - //tooltip.wasExpanded = systemTrayState.expanded; - } - }*/ onTapped: { systemTrayState.expanded = !systemTrayState.expanded; //systemTrayState.expanded = !tooltip.wasExpanded; @@ -70,8 +63,6 @@ PlasmaCore.ToolTipArea { anchors.centerIn: parent width: expanderSize +1 height: expanderSize - //width: Math.min(parent.width, parent.height)+1 - //height: width-1 // This is the Aero styled button texture used for the system tray expander. KSvg.FrameSvgItem { @@ -100,61 +91,4 @@ PlasmaCore.ToolTipArea { } } } - /*Kirigami.Icon { - anchors.fill: parent - - rotation: systemTrayState.expanded ? 180 : 0 - Behavior on rotation { - RotationAnimation { - duration: tooltip.arrowAnimationDuration - } - } - opacity: systemTrayState.expanded ? 0 : 1 - Behavior on opacity { - NumberAnimation { - duration: tooltip.arrowAnimationDuration - } - } - - source: { - if (Plasmoid.location === PlasmaCore.Types.TopEdge) { - return "arrow-down"; - } else if (Plasmoid.location === PlasmaCore.Types.LeftEdge) { - return "arrow-right"; - } else if (Plasmoid.location === PlasmaCore.Types.RightEdge) { - return "arrow-left"; - } else { - return "arrow-up"; - } - } - } - - Kirigami.Icon { - anchors.fill: parent - - rotation: systemTrayState.expanded ? 0 : -180 - Behavior on rotation { - RotationAnimation { - duration: tooltip.arrowAnimationDuration - } - } - opacity: systemTrayState.expanded ? 1 : 0 - Behavior on opacity { - NumberAnimation { - duration: tooltip.arrowAnimationDuration - } - } - - source: { - if (Plasmoid.location === PlasmaCore.Types.TopEdge) { - return "arrow-up"; - } else if (Plasmoid.location === PlasmaCore.Types.LeftEdge) { - return "arrow-left"; - } else if (Plasmoid.location === PlasmaCore.Types.RightEdge) { - return "arrow-right"; - } else { - return "arrow-down"; - } - } - }*/ } From 6b65ff863f38c6714f691839e03541e87400b9d5 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 21 Jul 2025 03:09:13 +0200 Subject: [PATCH 095/222] Fix plasmashell crashing when invalidating systray model --- plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml index ed6d4a6c..2c364fb6 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml @@ -194,7 +194,7 @@ ContainmentItem { } items.includeByDefault: false onCountChanged: { - root.hiddenLayout.model.invalidateFilter(); + Qt.callLater(() => root.hiddenLayout.model.invalidateFilter()); } groups: DelegateModelGroup { id: unsortedItems From 2d3986c6da297e3dea1e96d7035a63ff673d4811 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 21 Jul 2025 05:04:17 +0200 Subject: [PATCH 096/222] Fix system tray icon bug but actually this time --- .../org.kde.plasma.systemtray/contents/ui/main.qml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml index 2c364fb6..66164193 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml @@ -193,16 +193,16 @@ ContainmentItem { } } items.includeByDefault: false - onCountChanged: { - Qt.callLater(() => root.hiddenLayout.model.invalidateFilter()); - } groups: DelegateModelGroup { id: unsortedItems name: "unsorted" includeByDefault: true - onChanged: { + onChanged: (removed, inserted) => { activeModel.sort(); + if(inserted.length > 0) { + root.hiddenLayout.model.invalidateFilter() + } } } delegate: ItemLoader { From 76a736b184e01d228a8b22b889d12dcdddecefe5 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 21 Jul 2025 16:18:41 +0200 Subject: [PATCH 097/222] Slightly tweak system tray code --- .../contents/ui/main.qml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml index 66164193..73b43228 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml @@ -164,6 +164,8 @@ ContainmentItem { return value === PlasmaCore.Types.ActiveStatus; } } + property int unsortedCount: unsortedItems.count; + property int sortedCount: items.count; function determinePosition(item) { let lower = 0; let upper = items.count @@ -188,7 +190,7 @@ ContainmentItem { const item = unsortedItems.get(0); //var shouldInsert = item.model.itemId !== "" || (typeof item.model.hasApplet !== "undefined"); var i = determinePosition(item); //orderingManager.getItemOrder(item.model.itemId); - item.groups = "items"; + item.groups = "items"; items.move(item.itemsIndex, i); } } @@ -199,10 +201,10 @@ ContainmentItem { includeByDefault: true onChanged: (removed, inserted) => { - activeModel.sort(); if(inserted.length > 0) { root.hiddenLayout.model.invalidateFilter() } + activeModel.sort(); } } delegate: ItemLoader { @@ -210,6 +212,7 @@ ContainmentItem { width: tasksGrid.cellWidth height: tasksGrid.cellHeight property int visualIndex: DelegateModel.itemsIndex + visible: !DelegateModel.isUnresolved minLabelHeight: 0 // We need to recalculate the stacking order of the z values due to how keyboard navigation works // the tab order depends exclusively from this, so we redo it as the position in the list @@ -284,8 +287,12 @@ ContainmentItem { } //depending on the form factor, we are calculating only one dimension, second is always the same as root/parent - implicitHeight: root.vertical ? cellHeight * Math.ceil(count / rowsOrColumns) : root.height - implicitWidth: !root.vertical ? cellWidth * Math.ceil(count / rowsOrColumns) : root.width + implicitHeight: { + return root.vertical ? cellHeight * Math.ceil(count / rowsOrColumns) : root.height + } + implicitWidth: { + return !root.vertical ? cellWidth * Math.ceil(count / rowsOrColumns) : root.width + } readonly property int itemSize: { if (autoSize) { From 0d903f8c22199109fecd4e508deed3b3fd9b9e11 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 21 Jul 2025 19:26:34 +0200 Subject: [PATCH 098/222] Fix desktopcontainment adding launcher instead of link --- .../io.gitgud.wackyideas.desktopcontainment/metadata.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/metadata.json b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/metadata.json index 3fa63d54..429ebf57 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/metadata.json +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/metadata.json @@ -260,5 +260,8 @@ "Website": "https://www.kde.org/plasma-desktop" }, "X-Plasma-API-Minimum-Version": "6.0", - "X-Plasma-ContainmentType": "Desktop" + "X-Plasma-ContainmentType": "Desktop", + "X-Plasma-Provides": [ + "org.kde.plasma.filemanagement" + ] } From a4d57b327a05dcb00e9fd8b207e8c179336fdf4a Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 21 Jul 2025 19:43:31 +0200 Subject: [PATCH 099/222] SevenStart: allow pinning recent items to taskbar --- .../contents/ui/GenericItem.qml | 5 +-- .../contents/ui/KickoffItem.qml | 7 ++-- .../contents/ui/KickoffItemChild.qml | 33 +++++++++---------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml index ff4a30c9..0c3f7c71 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml @@ -50,9 +50,10 @@ Item { onAboutToShowActionMenu: actionMenu => { var actionList = allItem.hasActionList ? model.actionList : []; - if(kicker.isValidUrl(model.url)) { // If we have a launchable application, try allowing the user to pin it + if(model.favoriteId) { // If we have a launchable application, try allowing the user to pin it // Find seventasks instance, if available - const entry = kicker.convertUrl(model.url); + const entry = model.favoriteId; //kicker.convertUrl(model.url); + console.log(entry); var panel = kicker.parent; while(panel !== null && typeof panel.sevenTasksReference === "undefined") { // Find seventasks loader reference from the panel panel = panel.parent; diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml index c1812fa3..10ed5d73 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml @@ -72,14 +72,15 @@ Item { onAboutToShowActionMenu: (actionMenu) => { // Loads context menu items here var actionList = hasActionList ? model.actionList : []; - if(kicker.isValidUrl(model.url)) { // If we have a launchable application, try allowing the user to pin it + if(model.favoriteId) { // If we have a launchable application, try allowing the user to pin it // Find seventasks instance, if available - const entry = kicker.convertUrl(model.url); + const entry = "applications:" + model.favoriteId; //kicker.convertUrl(model.url); + console.log(entry); var panel = kicker.parent; while(panel !== null && typeof panel.sevenTasksReference === "undefined") { // Find seventasks loader reference from the panel panel = panel.parent; } - if(panel?.sevenTasksReference) { // If found, add the pin/unpin menu item + if(panel.sevenTasksReference) { // If found, add the pin/unpin menu item const unpin = (panel.sevenTasksReference.applet.findTask(entry) !== -1); var pinAction = { // Add custom action icon: "pin", diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml index ade70389..6e601174 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml @@ -69,11 +69,11 @@ Item { property var listView property var parentLayout - onAboutToShowActionMenu: (actionMenu) => { + onAboutToShowActionMenu: (actionMenu) => { // Loads context menu items here var actionList = hasActionList ? model.actionList : []; - if(kicker.isValidUrl(model.url)) { // If we have a launchable application, try allowing the user to pin it + if(model.favoriteId) { // If we have a launchable application, try allowing the user to pin it // Find seventasks instance, if available - const entry = kicker.convertUrl(model.url); + const entry = "applications:" + model.favoriteId; //kicker.convertUrl(model.url); var panel = kicker.parent; while(panel !== null && typeof panel.sevenTasksReference === "undefined") { // Find seventasks loader reference from the panel panel = panel.parent; @@ -81,22 +81,21 @@ Item { if(panel.sevenTasksReference) { // If found, add the pin/unpin menu item const unpin = (panel.sevenTasksReference.applet.findTask(entry) !== -1); var pinAction = { // Add custom action - icon: "pin", - actionId: "pinToTasks", - text: unpin ? i18n("Unpin from taskbar") : i18n("Pin to taskbar"), - action: () => { - if(unpin) { - panel.sevenTasksReference.applet.unpinTask(entry); - } else { - panel.sevenTasksReference.applet.pinTask(entry); - } - }}; - actionList.push(pinAction); - actionList = [...actionList, pinAction]; // Use spread operator and pass that to the fillActionMenu function + icon: "pin", + actionId: "pinToTasks", + text: unpin ? i18n("Unpin from taskbar") : i18n("Pin to taskbar"), + action: () => { + if(unpin) { + panel.sevenTasksReference.applet.unpinTask(entry); + } else { + panel.sevenTasksReference.applet.pinTask(entry); + } + }}; + actionList.push(pinAction); + actionList = [...actionList, pinAction]; // Use spread operator and pass that to the fillActionMenu function } } - - Tools.fillActionMenu(i18n, actionMenu, actionList, listItem.childModel.favoritesModel, model.favoriteId); + Tools.fillActionMenu(i18n, actionMenu, actionList, listItem.listView.model.favoritesModel, model.favoriteId); } onActionTriggered: (actionId, actionArgument) => { From 16dab20e875ef333616b1ceb0394c3ebaf9adac3 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 21 Jul 2025 20:14:41 +0200 Subject: [PATCH 100/222] Add tooltip text to SevenStart side items --- .../contents/ui/MenuRepresentation.qml | 3 ++ .../contents/ui/SidePanelItemDelegate.qml | 38 ++++++++++++++++++- .../contents/ui/SidePanelModels.qml | 15 ++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index 3bdc4474..ceda480b 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -1059,6 +1059,7 @@ PlasmaCore.Dialog { required property int index itemText: sidePanelModels.firstCategory[index].itemText itemIcon: sidePanelModels.firstCategory[index].itemIcon + description: sidePanelModels.firstCategory[index].description executableString: sidePanelModels.firstCategory[index].executableString visible: typeof columnItems.sidePanelVisibility[sidePanelModels.firstCategory[index].name] !== "undefined" executeProgram: sidePanelModels.firstCategory[index].executeProgram @@ -1088,6 +1089,7 @@ PlasmaCore.Dialog { delegate: SidePanelItemDelegate { required property int index itemText: sidePanelModels.secondCategory[index].itemText + description: sidePanelModels.secondCategory[index].description itemIcon: sidePanelModels.secondCategory[index].itemIcon executableString: sidePanelModels.secondCategory[index].executableString visible: typeof columnItems.sidePanelVisibility[sidePanelModels.secondCategory[index].name] !== "undefined" @@ -1115,6 +1117,7 @@ PlasmaCore.Dialog { delegate: SidePanelItemDelegate { required property int index itemText: sidePanelModels.thirdCategory[index].itemText + description: sidePanelModels.thirdCategory[index].description itemIcon: sidePanelModels.thirdCategory[index].itemIcon executableString: sidePanelModels.thirdCategory[index].executableString visible: typeof columnItems.sidePanelVisibility[sidePanelModels.thirdCategory[index].name] !== "undefined" diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml index 0afc5bf9..422e2277 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml @@ -22,6 +22,7 @@ Item { property string itemIcon: "" property string itemIconFallback: "unknown" property string executableString: "" + property string description: "" property bool executeProgram: false property alias textLabel: label //text: itemText @@ -151,7 +152,39 @@ Item { }*/ if(root.m_delayTimer.running) root.m_delayTimer.restart(); else root.m_delayTimer.start(); + + if(focus) { + if(sidePanelDelegate.menuModel !== null) { + recentsMenuTimer.start(); + } else if(toolTip.active) { + toolTipTimer.start(); + } + } else { + toolTipTimer.stop(); + toolTip.hideImmediately(); + recentsMenuTimer.stop(); + } } + Timer { + id: toolTipTimer + interval: Kirigami.Units.longDuration*3 + onTriggered: { + toolTip.showToolTip(); + } + } + PlasmaCore.ToolTipArea { + id: toolTip + + anchors { + fill: parent + } + + active: !contextMenu.enabled && sidePanelDelegate.description !== "" + interactive: false + + mainText: sidePanelDelegate.description + } + MouseArea { id: sidePanelMouseArea enabled: !root.hoverDisabled @@ -161,6 +194,7 @@ Item { } onExited: { sidePanelDelegate.focus = false; + toolTip.hideImmediately(); } onClicked: { root.visible = false; @@ -177,7 +211,7 @@ Item { Timer { id: recentsMenuTimer interval: 500 - running: sidePanelMouseArea.containsMouse && sidePanelDelegate.menuModel !== null + //running: sidePanelMouseArea.containsMouse && sidePanelDelegate.menuModel !== null onTriggered: contextMenu.openRelative(); } @@ -186,7 +220,7 @@ Item { enabled: sidePanelDelegate.menuModel !== null function onStatusChanged() { if(contextMenu.status === 3) { - sidePanelDelegate.focus = false; + //sidePanelDelegate.focus = false; root.m_delayTimer.restart(); } } diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelModels.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelModels.qml index 173b4d00..9f2464b3 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelModels.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelModels.qml @@ -24,6 +24,7 @@ Item { { name: "Home directory", itemText: Plasmoid.configuration.useFullName ? kuser.fullName : kuser.loginName, + description: "", itemIcon: "user-home", itemIconFallback: "unknown", executableString: StandardPaths.writableLocation(StandardPaths.HomeLocation), @@ -33,6 +34,7 @@ Item { { name: "Documents", itemText: "Documents", + description: "Access letters, reports, notes and other kinds of documents.", itemIcon: "library-txt", itemIconFallback: "folder-library", executableString: StandardPaths.writableLocation(StandardPaths.DocumentsLocation), @@ -42,6 +44,7 @@ Item { { name: "Pictures", itemText: "Pictures", + description: "View and organize digital pictures", itemIcon: "library-images", itemIconFallback: "folder-image", executableString: StandardPaths.writableLocation(StandardPaths.PicturesLocation), @@ -51,6 +54,7 @@ Item { { name: "Music", itemText: "Music", + description: "Play music and other audio files.", itemIcon: "library-music", itemIconFallback: "folder-music", executableString: StandardPaths.writableLocation(StandardPaths.MusicLocation), @@ -60,6 +64,7 @@ Item { { name: "Videos", itemText: "Videos", + description: "Watch home movies and other digital videos.", itemIcon: "library-video", itemIconFallback: "folder-videos", executableString: StandardPaths.writableLocation(StandardPaths.MoviesLocation), @@ -69,6 +74,7 @@ Item { { name: "Downloads", itemText: "Downloads", + description: "Find Internet downloads and links to favorite websites.", itemIcon: "folder-download", itemIconFallback: "folder-download", executableString: StandardPaths.writableLocation(StandardPaths.HomeLocation) + "/Downloads", @@ -82,6 +88,7 @@ Item { { name: "Games", itemText: "Games", + description: "Play and manage games on your computer.", itemIcon: "applications-games", itemIconFallback: "folder-games", executableString: "applications:///Games/", @@ -91,6 +98,7 @@ Item { { name: "Recent Items", itemText: "Recent Items", + description: "", itemIcon: "document-open-recent", itemIconFallback: "folder-documents", executableString: "recentlyused:/", @@ -100,6 +108,7 @@ Item { { name: "Computer", itemText: "Computer", + description: "See the disk drives and other hardware connected to your computer.", itemIcon: "computer", itemIconFallback: "unknown", executableString: "file:///.", @@ -109,6 +118,7 @@ Item { { name: "Network", itemText: "Network", + description: "Access the computers and devices that are on your network.", itemIcon: "folder-network", itemIconFallback: "network-server", executableString: "remote:/", @@ -121,6 +131,7 @@ Item { { name: "Control Panel", itemText: "Control Panel", + description: "Change settings and customize the functionality of your computer.", itemIcon: "preferences-system", itemIconFallback: "preferences-desktop", executableString: "systemsettings", @@ -130,6 +141,7 @@ Item { { name: "Devices and Printers", itemText: "Devices and Printers", + description: "View and manage devices, printers and print jobs", itemIcon: "input_devices_settings", itemIconFallback: "printer", executableString: "systemsettings kcm_printer_manager", @@ -139,6 +151,7 @@ Item { { name: "Default Programs", itemText: "Default Programs", + description: "Choose default programs for web browsing, e-mail, playing music, and other activities.", itemIcon: "preferences-desktop-default-applications", itemIconFallback: "application-x-executable", executableString: "systemsettings kcm_componentchooser", @@ -148,6 +161,7 @@ Item { { name: "Help and Support", itemText: "Help and Support", + description: "Find Help topics, tutorials, troubleshooting, and other support services.", itemIcon: "help-browser", itemIconFallback: "system-help", executableString: "https://develop.kde.org/docs/", @@ -157,6 +171,7 @@ Item { { name: "Run", itemText: "Run...", + description: "Opens a program, folder, document, or web site.", itemIcon: "krunner", itemIconFallback: "system-run", executableString: "krunner --replace", From a4b505ff20eb1754b9769865f0a7484e4a6d2042 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Tue, 22 Jul 2025 12:27:56 +0200 Subject: [PATCH 101/222] Update SevenStart side item tooltips --- .../contents/ui/SidePanelItemDelegate.qml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml index 422e2277..ee2907d7 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml @@ -182,7 +182,9 @@ Item { active: !contextMenu.enabled && sidePanelDelegate.description !== "" interactive: false - mainText: sidePanelDelegate.description + mainItem: Text { + text: sidePanelDelegate.description + } } MouseArea { From 1a70211071751266e6b5f05663c3b2c10b14a9d2 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 02:44:30 +0200 Subject: [PATCH 102/222] SevenStart: make mouse hover perform certain actions - Hovering the mouse over the arrow next to the shutdown button will open the context menu after some time - Hovering the mouse over the all programs button will open the app view after some time --- .../contents/ui/MenuRepresentation.qml | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index ceda480b..0abbfe5e 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -648,6 +648,20 @@ PlasmaCore.Dialog { searchField.focus = true; } } + Timer { + id: activateAppViewTimer + interval: Kirigami.Units.longDuration*4 + onTriggered: { + allButtonsArea.click(false); + } + } + onContainsMouseChanged: { + if(containsMouse) { + activateAppViewTimer.start(); + } else { + activateAppViewTimer.stop(); + } + } onClicked: { click(false); } @@ -1266,14 +1280,30 @@ PlasmaCore.Dialog { else return "rtl-normal"; } } + onFocusChanged: { if(lockScreenDelegate.focus) contextMenu.openRelative(); } + Timer { + id: lockmaTimer + interval: 700 + onTriggered: { + contextMenu.openRelative(); + } + } MouseArea { id: lockma enabled: !root.hoverDisabled acceptedButtons: Qt.LeftButton + + onContainsMouseChanged: { + if(containsMouse) { + lockmaTimer.start(); + } else { + lockmaTimer.stop(); + } + } onClicked: { contextMenu.openRelative(); } From 5563a679fee488e366e66c62ac56759e07149a21 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 02:45:40 +0200 Subject: [PATCH 103/222] SevenStart: add tooltip for home directory side item --- .../contents/ui/SidePanelModels.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelModels.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelModels.qml index 9f2464b3..e13cd0ed 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelModels.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelModels.qml @@ -24,7 +24,7 @@ Item { { name: "Home directory", itemText: Plasmoid.configuration.useFullName ? kuser.fullName : kuser.loginName, - description: "", + description: "Open your personal folder.", itemIcon: "user-home", itemIconFallback: "unknown", executableString: StandardPaths.writableLocation(StandardPaths.HomeLocation), From 2885fb4e6911e0d089c4d1466e4d0946fcce96a6 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 02:48:19 +0200 Subject: [PATCH 104/222] SevenStart: add tooltip text to shutdown button --- .../contents/ui/MenuRepresentation.qml | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index 0abbfe5e..5aaf69d5 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -1201,6 +1201,38 @@ PlasmaCore.Dialog { leaveButtons.findUpItem().focus = true; } } + Timer { + id: shutdownTimer + interval: Kirigami.Units.longDuration*3 + onTriggered: { + shutdownToolTip.showToolTip(); + } + } + PlasmaCore.ToolTipArea { + id: shutdownToolTip + + anchors { + fill: parent + } + + interactive: false + location: { + var result = PlasmaCore.Types.Floating; + if(ma.containsMouse) result |= PlasmaCore.Types.Desktop; + return result; + } + + mainItem: Text { + text: i18n("Closes all open programs, shuts down Linux, and then turns off your computer.") + } + } + onFocusChanged: { + if(focus) shutdownTimer.start(); + else { + shutdownToolTip.hideImmediately(); + shutdownTimer.stop(); + } + } Text { id: shutDownText @@ -1238,6 +1270,14 @@ PlasmaCore.Dialog { acceptedButtons: Qt.LeftButton hoverEnabled: true anchors.fill: parent + propagateComposedEvents: true + onContainsMouseChanged: { + if(containsMouse) shutdownTimer.start(); + else { + shutdownToolTip.hideImmediately(); + shutdownTimer.stop(); + } + } onExited: { shutdown.focus = false; } From d7aada54e493ec6a49d87055b772e8a8eec247ba Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 02:52:36 +0200 Subject: [PATCH 105/222] SevenStart: fix keyboard navigation in side panel --- .../contents/ui/MenuRepresentation.qml | 3 ++- .../contents/ui/SidePanelItemDelegate.qml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index 5aaf69d5..a835c9b2 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -1177,7 +1177,8 @@ PlasmaCore.Dialog { if(columnItems.visibleChildren.length === 2) { return searchField; } - return columnItems.visibleChildren[columnItems.visibleChildren.length-2]; + + return columnItems.visibleChildren[columnItems.visibleChildren.length-3]; } } ListDelegate { diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml index ee2907d7..3616735f 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml @@ -56,7 +56,7 @@ Item { function findNext() { var i = findItem()+1; - if(i >= parent.visibleChildren.length-1) { + if(parent.visibleChildren[i].objectName == "PaddingItem") { return root.m_shutDownButton; } if(parent.visibleChildren[i].objectName == "SidePanelItemSeparator") { From 68f9b2e97d5d2344775cc6d9d343cb4411034fee Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 03:03:08 +0200 Subject: [PATCH 106/222] Fix minor SevenStart bug with all programs button --- .../contents/ui/MenuRepresentation.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index a835c9b2..789338f4 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -664,6 +664,7 @@ PlasmaCore.Dialog { } onClicked: { click(false); + activateAppViewTimer.stop(); } function click(focusAppsView) { if(searching) From f7d36a942013ffbee7c3e4d5dd534e039d61fde7 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 03:06:02 +0200 Subject: [PATCH 107/222] Remove irrelevant file from SevenStart --- .../contents/ui/TasksMenuItem.qml | 151 ------------------ 1 file changed, 151 deletions(-) delete mode 100755 plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/TasksMenuItem.qml diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/TasksMenuItem.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/TasksMenuItem.qml deleted file mode 100755 index b480214d..00000000 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/TasksMenuItem.qml +++ /dev/null @@ -1,151 +0,0 @@ -/* - SPDX-FileCopyrightText: 2012-2016 Eike Hein - SPDX-FileCopyrightText: 2016 Kai Uwe Broulik - - SPDX-License-Identifier: GPL-2.0-or-later -*/ - -import QtQuick -import QtQuick.Layouts -import org.kde.plasma.plasmoid - -import org.kde.plasma.core as PlasmaCore -import org.kde.plasma.components 3.0 as PlasmaComponents - -import org.kde.taskmanager as TaskManager - -import "code/layoutmetrics.js" as LayoutManager -import org.kde.plasma.extras as PlasmaExtras -import org.kde.kirigami as Kirigami -import org.kde.ksvg as KSvg - -Item { - id: tasksMenuItem - - signal clicked - - property var iconSource: "" - property var menuText: "" - property bool selected: false - property QtObject wrapperItem: tasksMenuItem.parent - - onSelectedChanged: { - if(selected) { - toolTipTimer.start() - } else { - toolTipTimer.stop(); - toolTip.hideToolTip(); - } - } - - KSvg.FrameSvgItem { - id: texture - z: -1 - anchors.fill: parent - imagePath: Qt.resolvedUrl("svgs/jumplistitem.svg") - prefix: "hover" - visible: (tasksMA.containsMouse || selected) && parent.enabled - opacity: selected ? 1.0 : 0.6 - } - Timer { - id: toolTipTimer - interval: Kirigami.Units.longDuration*2 - onTriggered: { - toolTip.showToolTip(); - } - } - PlasmaCore.ToolTipArea { - id: toolTip - - anchors { - fill: parent - } - - active: menuTitle.truncated - interactive: false - - mainText: menuTitle.text - } - - MouseArea { - id: tasksMA - z: 1 - anchors.fill: parent - hoverEnabled: true - acceptedButtons: Qt.LeftButton | Qt.RightButton - enabled: !tasksMenu.sliderAnimation.running - onClicked: { - tasksMenu.setCurrentItem(wrapperItem); - tasksMenuItem.clicked(); - tasksMenu.closeMenu(); - } - onPositionChanged: { - tasksMenu.setCurrentItem(wrapperItem); - } - - onEntered: { - tasksMenu.setCurrentItem(wrapperItem); - //tasksMenu.clearIndices(); - } - onExited: { - tasksMenu.clearIndices(); - } - } - Kirigami.Icon { - id: menuIcon - z: -1 - anchors { - left: parent.left - top: parent.top - topMargin: Kirigami.Units.smallSpacing/2 - leftMargin: Kirigami.Units.smallSpacing/2 - verticalCenter: parent.verticalCenter - } - width: Kirigami.Units.iconSizes.small - height: width - opacity: parent.enabled ? 1 : 0.5 - source: iconSource - active: false - //enabled: parent.enabled || tasksMenu.sliderAnimation.running - } - PlasmaComponents.Label { - id: menuTitle - z: -1 - anchors { - left: menuIcon.right - right: parent.right - leftMargin: Kirigami.Units.smallSpacing - rightMargin: Kirigami.Units.smallSpacing*2 - } - height: parent.height - text: menuText - font.pointSize: 9 //9.3 - elide: Text.ElideRight - horizontalAlignment: Text.AlignLeft - verticalAlignment: Text.AlignVCenter - opacity: parent.enabled ? 1 : 0.75 - color: "black" - style: Text.Sunken - styleColor: "transparent" - } - PlasmaComponents.Label { - id: menuTitle_highlight - z: -1 - anchors { - left: menuIcon.right - right: parent.right - leftMargin: Kirigami.Units.smallSpacing - rightMargin: Kirigami.Units.smallSpacing*2 - } - height: parent.height - text: menuText - font.pointSize: 9 //9.3 - elide: Text.ElideRight - horizontalAlignment: Text.AlignLeft - verticalAlignment: Text.AlignVCenter - opacity: 0.66 - color: "transparent" - style: Text.Sunken - styleColor: "transparent" - } -} From b0df1cef2558b6e4e7b0d7257b041427a1757415 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 03:18:31 +0200 Subject: [PATCH 108/222] libplasma: tooltips can appear underneath the cursor --- misc/defaulttooltip/install.sh | 1 + misc/defaulttooltip/popupplasmawindow.cpp | 454 ++++++++++++++++++ misc/defaulttooltip/tooltiparea.cpp | 49 +- .../contents/ui/CrossFadeBehavior.qml | 9 +- .../contents/ui/GenericItem.qml | 15 + .../contents/ui/KickoffItem.qml | 16 +- .../contents/ui/KickoffItemChild.qml | 17 +- .../contents/ui/MenuRepresentation.qml | 7 +- .../contents/ui/SidePanelItemDelegate.qml | 5 + .../contents/ui/FolderItemDelegate.qml | 95 ++-- .../contents/ui/HiddenItemsView.qml | 6 +- .../contents/ui/items/AbstractItem.qml | 5 +- 12 files changed, 594 insertions(+), 85 deletions(-) create mode 100644 misc/defaulttooltip/popupplasmawindow.cpp diff --git a/misc/defaulttooltip/install.sh b/misc/defaulttooltip/install.sh index 70a494e2..949e7450 100644 --- a/misc/defaulttooltip/install.sh +++ b/misc/defaulttooltip/install.sh @@ -46,6 +46,7 @@ cp tooltiparea.h ./build/$SRCDIR/src/declarativeimports/core/tooltiparea.h cp tooltiparea.cpp ./build/$SRCDIR/src/declarativeimports/core/tooltiparea.cpp cp tooltipdialog.cpp ./build/$SRCDIR/src/declarativeimports/core/tooltipdialog.cpp cp plasmawindow.cpp ./build/$SRCDIR/src/plasmaquick/plasmawindow.cpp +cp popupplasmawindow.cpp ./build/$SRCDIR/src/plasmaquick/popupplasmawindow.cpp cd ./build/$SRCDIR/ mkdir build cd build diff --git a/misc/defaulttooltip/popupplasmawindow.cpp b/misc/defaulttooltip/popupplasmawindow.cpp new file mode 100644 index 00000000..b2982ce0 --- /dev/null +++ b/misc/defaulttooltip/popupplasmawindow.cpp @@ -0,0 +1,454 @@ +/* + SPDX-FileCopyrightText: 2023 David Edmundson + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +#include "popupplasmawindow.h" + +#include +#include +#include +#include + +#include "debug_p.h" +#include +#include +#include +#include + +#include "plasmashellwaylandintegration.h" +#include "transientplacementhint_p.h" +#include "utils.h" + +namespace PlasmaQuick +{ + +class PopupPlasmaWindowPrivate +{ +public: + PopupPlasmaWindowPrivate(PopupPlasmaWindow *_q); + + void updateEffectivePopupDirection(const QRect &anchorRect, const QRect &relativePopupPosition); + void updateSlideEffect(const QRect &globalPosition); + void updatePosition(); + void updatePositionX11(const QPoint &position); + void updatePositionWayland(const QPoint &position); + void updateBorders(const QRect &globalPosition); + void updateVisualParentWindow(); + + PopupPlasmaWindow *q; + QPointer m_visualParent; + QPointer m_visualParentWindow; + PopupPlasmaWindow::RemoveBorders m_removeBorderStrategy = PopupPlasmaWindow::Never; + bool m_needsReposition = false; + bool m_floating = false; + bool m_animated = false; + int m_margin = 0; + Qt::Edge m_popupDirection = Qt::TopEdge; + Qt::Edge m_effectivePopupDirection = Qt::TopEdge; + Qt::Edges m_nearbyBorders; +}; + +PopupPlasmaWindowPrivate::PopupPlasmaWindowPrivate(PopupPlasmaWindow *_q) + : q(_q) +{ +} + +/*! + * PopupPlasmaWindowPrivate::updateSlideEffect + * @param anchorRect - the rect around where the popup should be placed relative to the parent window + * @param relativePopupPosition - the final rect of the popup relative to the parent window + * + * This is based purely on position in prepartion for being called in a wayland configure event + */ +void PopupPlasmaWindowPrivate::updateEffectivePopupDirection(const QRect &anchorRect, const QRect &relativePopupPosition) +{ + Qt::Edge effectivePopupDirection = Qt::TopEdge; + if (m_popupDirection == Qt::TopEdge || m_popupDirection == Qt::BottomEdge) { + if (relativePopupPosition.center().y() >= anchorRect.center().y()) { + effectivePopupDirection = Qt::BottomEdge; + } else { + effectivePopupDirection = Qt::TopEdge; + } + } + if (m_popupDirection == Qt::LeftEdge || m_popupDirection == Qt::RightEdge) { + if (relativePopupPosition.center().x() >= anchorRect.center().x()) { + effectivePopupDirection = Qt::RightEdge; + } else { + effectivePopupDirection = Qt::LeftEdge; + } + } + + if (effectivePopupDirection != m_effectivePopupDirection) { + Q_EMIT q->effectivePopupDirectionChanged(); + m_effectivePopupDirection = effectivePopupDirection; + } +} + +void PopupPlasmaWindowPrivate::updateSlideEffect(const QRect &globalPosition) +{ + KWindowEffects::SlideFromLocation slideLocation = KWindowEffects::NoEdge; + + int slideOffset = -1; + QScreen *screen = QGuiApplication::screenAt(globalPosition.center()); + if (screen && m_margin > 0) { + const QRect screenGeometry = screen->geometry(); + switch (m_effectivePopupDirection) { + case Qt::TopEdge: + slideOffset = screenGeometry.bottom() - globalPosition.bottom() - m_margin; + break; + case Qt::BottomEdge: + slideOffset = globalPosition.top() - screenGeometry.top() - m_margin; + break; + case Qt::LeftEdge: + slideOffset = screenGeometry.right() - globalPosition.right() - m_margin; + break; + case Qt::RightEdge: + slideOffset = globalPosition.left() - screenGeometry.left() - m_margin; + break; + } + } + + if (!m_animated) { + KWindowEffects::slideWindow(q, slideLocation); + return; + } + switch (m_effectivePopupDirection) { + case Qt::TopEdge: + slideLocation = KWindowEffects::BottomEdge; + break; + case Qt::BottomEdge: + slideLocation = KWindowEffects::TopEdge; + break; + case Qt::LeftEdge: + slideLocation = KWindowEffects::RightEdge; + break; + case Qt::RightEdge: + slideLocation = KWindowEffects::LeftEdge; + break; + } + KWindowEffects::slideWindow(q, slideLocation, slideOffset); +} + +void PopupPlasmaWindowPrivate::updatePosition() +{ + m_needsReposition = false; + + if (!m_visualParent || !m_visualParent->window()) { + qCWarning(LOG_PLASMAQUICK) << "Exposed with no visual parent. Window positioning broken."; + return; + } + q->setTransientParent(m_visualParent->window()); + TransientPlacementHint placementHint; + QRectF parentAnchorRect = QRectF(m_visualParent->mapToScene(QPointF(0, 0)), m_visualParent->size()); + if (!m_floating) { + QRect windowVisibleRect = m_visualParent->window()->mask().boundingRect(); + // pad parentAnchorRect to the window it's in, so that the popup appears outside the panel + // even if the tooltip area does not fill it + if (m_popupDirection == Qt::TopEdge || m_popupDirection == Qt::BottomEdge) { + parentAnchorRect.setTop(windowVisibleRect.top()); + // QRect::bottom() is off by one + parentAnchorRect.setBottom(windowVisibleRect.bottom() + 1); + } + if (m_popupDirection == Qt::LeftEdge || m_popupDirection == Qt::RightEdge) { + parentAnchorRect.setLeft(windowVisibleRect.left()); + // QRect::right() is off by one + parentAnchorRect.setRight(windowVisibleRect.right() + 1); + } + } + + placementHint.setParentAnchorArea(parentAnchorRect.toRect()); + placementHint.setParentAnchor(m_popupDirection); + placementHint.setPopupAnchor(PlasmaQuickPrivate::oppositeEdge(m_popupDirection)); + placementHint.setConstrainByAnchorWindow(true); + placementHint.setFlipConstraintAdjustments(m_floating ? Qt::Vertical : Qt::Orientations()); + placementHint.setMargin(m_margin); + + QRect popupPosition = TransientPlacementHelper::popupRect(q, placementHint); + + QRect relativePopupPosition = popupPosition; + if (m_visualParent->window()) { + relativePopupPosition = relativePopupPosition.translated(-m_visualParent->window()->position()); + } + updateEffectivePopupDirection(parentAnchorRect.toRect(), relativePopupPosition); + updateSlideEffect(popupPosition); + + if(m_floating && q->backgroundHints() != PlasmaQuick::PlasmaWindow::StandardBackground && m_popupDirection == 0) { + + KConfigGroup mousecfg(KSharedConfig::openConfig(QStringLiteral("kcminputrc")), QStringLiteral("Mouse")); + const int cursorSize = mousecfg.readEntry(QStringLiteral("cursorSize"), 24); + QPoint mousePos = QCursor::pos() + QPoint(0, cursorSize*0.75); + + QScreen *screen = QGuiApplication::screenAt(mousePos); + if (screen) { + const QRect screenGeometry = screen->geometry(); + int diffX = qMax(0, mousePos.x() + popupPosition.width() - (screenGeometry.x() + screenGeometry.width())); + int diffY = qMax(0, mousePos.y() + popupPosition.height() - (screenGeometry.y() + screenGeometry.height())); + mousePos -= QPoint(diffX, diffY); + popupPosition = QRect(mousePos, popupPosition.size()); + } + } + + if (KWindowSystem::isPlatformX11()) { + updatePositionX11(popupPosition.topLeft()); + } else if (KWindowSystem::isPlatformWayland()) { + updatePositionWayland(popupPosition.topLeft()); + } + + updateBorders(popupPosition); +} + +void PopupPlasmaWindowPrivate::updatePositionX11(const QPoint &position) +{ + q->setPosition(position); +} + +void PopupPlasmaWindowPrivate::updatePositionWayland(const QPoint &position) +{ + // still update's Qt internal reference as it's used by the next dialog + // this can be dropped when we're using true semantic positioning in the backend + q->setPosition(position); + + PlasmaShellWaylandIntegration::get(q)->setPosition(position); +} + +void PopupPlasmaWindowPrivate::updateBorders(const QRect &globalPosition) +{ + // disables borders for the edges that are touching the screen edge + + QScreen *screen = QGuiApplication::screenAt(globalPosition.center()); + if (!screen) { + return; + } + const QRect screenGeometry = screen->geometry(); + + Qt::Edges enabledBorders = Qt::LeftEdge | Qt::RightEdge | Qt::TopEdge | Qt::BottomEdge; + + if (m_removeBorderStrategy & PopupPlasmaWindow::AtScreenEdges) { + if (globalPosition.top() - m_margin <= screenGeometry.top()) { + enabledBorders.setFlag(Qt::TopEdge, false); + } + if (globalPosition.bottom() + m_margin >= screenGeometry.bottom()) { + enabledBorders.setFlag(Qt::BottomEdge, false); + } + if (globalPosition.left() - m_margin <= screenGeometry.left()) { + enabledBorders.setFlag(Qt::LeftEdge, false); + } + if (globalPosition.right() + m_margin >= screenGeometry.right()) { + enabledBorders.setFlag(Qt::RightEdge, false); + } + } + if (m_removeBorderStrategy & PopupPlasmaWindow::AtPanelEdges) { + switch (m_popupDirection) { + case Qt::LeftEdge: + enabledBorders.setFlag(Qt::RightEdge, false); + break; + case Qt::RightEdge: + enabledBorders.setFlag(Qt::LeftEdge, false); + break; + case Qt::BottomEdge: + enabledBorders.setFlag(Qt::TopEdge, false); + break; + case Qt::TopEdge: + default: + enabledBorders.setFlag(Qt::BottomEdge, false); + break; + } + } + + Qt::Edges newNearbyBorders = ~enabledBorders; + if (newNearbyBorders.testFlag(Qt::LeftEdge) && newNearbyBorders.testFlag(Qt::RightEdge)) { + newNearbyBorders.setFlag(Qt::LeftEdge, false); + newNearbyBorders.setFlag(Qt::RightEdge, false); + } + if (newNearbyBorders.testFlag(Qt::TopEdge) && newNearbyBorders.testFlag(Qt::BottomEdge)) { + newNearbyBorders.setFlag(Qt::TopEdge, false); + newNearbyBorders.setFlag(Qt::BottomEdge, false); + } + newNearbyBorders.setFlag(PlasmaQuickPrivate::oppositeEdge(m_effectivePopupDirection), true); + + if (newNearbyBorders != m_nearbyBorders) { + m_nearbyBorders = newNearbyBorders; + Q_EMIT q->nearbyBordersChanged(); + } + + if (m_margin) { + q->setBorders(Qt::LeftEdge | Qt::RightEdge | Qt::TopEdge | Qt::BottomEdge); + return; + } + + q->setBorders(enabledBorders); +} + +void PopupPlasmaWindowPrivate::updateVisualParentWindow() +{ + if (m_visualParentWindow) { + QObject::disconnect(m_visualParentWindow, &QQuickWindow::yChanged, q, &PopupPlasmaWindow::queuePositionUpdate); + QObject::disconnect(m_visualParentWindow, &QQuickWindow::xChanged, q, &PopupPlasmaWindow::queuePositionUpdate); + } + + m_visualParentWindow = m_visualParent ? m_visualParent->window() : nullptr; + + if (m_visualParentWindow) { + QObject::connect(m_visualParentWindow, &QQuickWindow::yChanged, q, &PopupPlasmaWindow::queuePositionUpdate); + QObject::connect(m_visualParentWindow, &QQuickWindow::xChanged, q, &PopupPlasmaWindow::queuePositionUpdate); + } +} + +PopupPlasmaWindow::PopupPlasmaWindow(const QString &svgPrefix) + : PlasmaWindow(svgPrefix) + , d(new PopupPlasmaWindowPrivate(this)) +{ +} + +PopupPlasmaWindow::~PopupPlasmaWindow() +{ +} + +void PopupPlasmaWindow::setVisualParent(QQuickItem *item) +{ + if (item == d->m_visualParent) { + return; + } + + if (d->m_visualParent) { + disconnect(d->m_visualParent, SIGNAL(windowChanged(QQuickWindow *)), this, SLOT(updateVisualParentWindow())); + } + + d->m_visualParent = item; + d->updateVisualParentWindow(); + + if (d->m_visualParent) { + connect(d->m_visualParent, SIGNAL(windowChanged(QQuickWindow *)), this, SLOT(updateVisualParentWindow())); + } + + Q_EMIT visualParentChanged(); + queuePositionUpdate(); +} + +QQuickItem *PopupPlasmaWindow::visualParent() const +{ + return d->m_visualParent; +} + +Qt::Edge PopupPlasmaWindow::popupDirection() const +{ + return d->m_popupDirection; +} + +void PopupPlasmaWindow::setPopupDirection(Qt::Edge popupDirection) +{ + if (popupDirection == d->m_popupDirection) { + return; + } + d->m_popupDirection = popupDirection; + + if (isExposed()) { + qCWarning(LOG_PLASMAQUICK) << "location should be set before showing popup window"; + } + queuePositionUpdate(); + + Q_EMIT popupDirectionChanged(); +} + +Qt::Edge PopupPlasmaWindow::effectivePopupDirection() const +{ + return d->m_effectivePopupDirection; +} + +bool PopupPlasmaWindow::floating() const +{ + return d->m_floating; +} + +void PopupPlasmaWindow::setFloating(bool floating) +{ + if (floating == d->m_floating) { + return; + } + d->m_floating = floating; + queuePositionUpdate(); + Q_EMIT floatingChanged(); +} + +bool PopupPlasmaWindow::animated() const +{ + return d->m_animated; +} + +void PopupPlasmaWindow::setAnimated(bool animated) +{ + d->m_animated = animated; + queuePositionUpdate(); + Q_EMIT animatedChanged(); +} + +PopupPlasmaWindow::RemoveBorders PopupPlasmaWindow::removeBorderStrategy() const +{ + return d->m_removeBorderStrategy; +} + +void PopupPlasmaWindow::setRemoveBorderStrategy(PopupPlasmaWindow::RemoveBorders strategy) +{ + if (d->m_removeBorderStrategy == strategy) { + return; + } + + d->m_removeBorderStrategy = strategy; + queuePositionUpdate(); // This will update borders as well + Q_EMIT removeBorderStrategyChanged(); +} + +int PopupPlasmaWindow::margin() const +{ + return d->m_margin; +} + +Qt::Edges PopupPlasmaWindow::nearbyBorders() const +{ + return d->m_nearbyBorders; +} + +void PopupPlasmaWindow::setMargin(int margin) +{ + if (d->m_margin == margin) { + return; + } + + d->m_margin = margin; + // Margin is used to animate applets when the panel switches + // from floating to not floating, so we immediately update the + // position instead of using queuePositionUpdate, which would + // only run at the end of the animation. + queuePositionUpdate(); + update(); + Q_EMIT marginChanged(); +} + +bool PopupPlasmaWindow::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::UpdateRequest: + if (d->m_needsReposition) { + d->updatePosition(); + } + break; + case QEvent::Show: + d->updatePosition(); + break; + case QEvent::Resize: + d->updatePosition(); + break; + default: + break; + } + return PlasmaQuick::PlasmaWindow::event(event); +} + +void PopupPlasmaWindow::queuePositionUpdate() +{ + d->m_needsReposition = true; +} +} + +#include "moc_popupplasmawindow.cpp" diff --git a/misc/defaulttooltip/tooltiparea.cpp b/misc/defaulttooltip/tooltiparea.cpp index 51c30345..a129b17f 100644 --- a/misc/defaulttooltip/tooltiparea.cpp +++ b/misc/defaulttooltip/tooltiparea.cpp @@ -159,29 +159,34 @@ void ToolTipArea::showToolTip() dlg->setMainItem(mainItem()); dlg->setInteractive(m_interactive); - switch (location) { - case Plasma::Types::Floating: - case Plasma::Types::Desktop: - case Plasma::Types::FullScreen: + if(location == (Plasma::Types::Desktop | Plasma::Types::Floating)) { dlg->setFloating(true); - dlg->setPopupDirection(Qt::BottomEdge); - break; - case Plasma::Types::TopEdge: - dlg->setFloating(false); - dlg->setPopupDirection(Qt::BottomEdge); - break; - case Plasma::Types::BottomEdge: - dlg->setFloating(false); - dlg->setPopupDirection(Qt::TopEdge); - break; - case Plasma::Types::LeftEdge: - dlg->setFloating(false); - dlg->setPopupDirection(Qt::RightEdge); - break; - case Plasma::Types::RightEdge: - dlg->setFloating(false); - dlg->setPopupDirection(Qt::LeftEdge); - break; + dlg->setPopupDirection((Qt::Edge)0); + } else { + switch (location) { + case Plasma::Types::Desktop: + case Plasma::Types::FullScreen: + case Plasma::Types::Floating: + dlg->setFloating(true); + dlg->setPopupDirection(Qt::BottomEdge); + break; + case Plasma::Types::TopEdge: + dlg->setFloating(false); + dlg->setPopupDirection(Qt::BottomEdge); + break; + case Plasma::Types::BottomEdge: + dlg->setFloating(false); + dlg->setPopupDirection(Qt::TopEdge); + break; + case Plasma::Types::LeftEdge: + dlg->setFloating(false); + dlg->setPopupDirection(Qt::RightEdge); + break; + case Plasma::Types::RightEdge: + dlg->setFloating(false); + dlg->setPopupDirection(Qt::LeftEdge); + break; + } } dlg->setBackgroundHints(m_backgroundHints); diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/CrossFadeBehavior.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/CrossFadeBehavior.qml index b5d7a29f..7c2df36c 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/CrossFadeBehavior.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/CrossFadeBehavior.qml @@ -22,6 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +pragma ComponentBehavior: Bound import QtQuick 2.15 import QtQml 2.15 @@ -34,7 +35,9 @@ Behavior { property var exitValue: 0 property var enterValue: exitValue property int fadeDuration: 300 - property string easingType: "Quad" + //property string easingType: "Quad" + property var easingTypeIn: Easing.Linear + property var easingTypeOut: Easing.Linear property bool delayWhile: false property bool sequential: false onDelayWhileChanged: { @@ -62,7 +65,7 @@ Behavior { properties: root.fadeProperties.join(',') duration: root.fadeDuration to: root.exitValue - easing.type: root.easingType === "Linear" ? Easing.Linear : Easing["In"+root.easingType] + easing.type: root.easingTypeIn //root.easingType === "Linear" ? Easing.Linear : Easing["In"+root.easingType] } property Component exitAnimation: defaultExitAnimation @@ -73,7 +76,7 @@ Behavior { duration: root.fadeDuration from: root.enterValue to: root.fadeTarget[root.fadeProperties[0]] - easing.type: root.easingType === "Linear" ? Easing.Linear : Easing["Out"+root.easingType] + easing.type: root.easingTypeOut //=== "Linear" ? Easing.Linear : Easing["Out"+root.easingType] } property Component enterAnimation: defaultEnterAnimation diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml index 0c3f7c71..55a4b542 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml @@ -40,6 +40,7 @@ Item { property bool isDraging: false property bool canDrag: true property bool canNavigate: false + property bool isCurrentlySelected: listView.currentIndex === index signal highlightChanged signal aboutToShowActionMenu(variant actionMenu) @@ -48,6 +49,15 @@ Item { property var triggerModel + onIsCurrentlySelectedChanged: { + if(isCurrentlySelected) { + toolTipTimer.start(); + } else { + toolTipTimer.stop(); + toolTip.hideImmediately(); + } + } + onAboutToShowActionMenu: actionMenu => { var actionList = allItem.hasActionList ? model.actionList : []; if(model.favoriteId) { // If we have a launchable application, try allowing the user to pin it @@ -153,6 +163,11 @@ Item { active: appname.truncated interactive: false + location: { + var result = PlasmaCore.Types.Floating; + if(ma.containsMouse) result |= PlasmaCore.Types.Desktop; + return result; + } mainText: appname.text } diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml index 10ed5d73..8501db3d 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItem.qml @@ -243,6 +243,19 @@ Item { active: titleElement.truncated interactive: false mainText: model ? model.display : "" + location: { + var result = PlasmaCore.Types.Floating + if(ma.containsMouse) result |= PlasmaCore.Types.Desktop; + return result; + } + } + onIsCurrentChanged: { + if(isCurrent && !ma.containsMouse) { + toolTipTimer.start(); + } else { + toolTipTimer.stop(); + toolTip.hideImmediately(); + } } Timer { id: toolTipTimer @@ -264,8 +277,7 @@ Item { listItem.listView.currentItem.delegateItem.toolTip.hideToolTip(); } listItem.listView.currentIndex = model.index; - toolTipTimer.start(); - + Qt.callLater(() => toolTipTimer.start()); } onExited: { toolTipTimer.stop(); diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml index 6e601174..29bfb0c9 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/KickoffItemChild.qml @@ -237,6 +237,21 @@ Item { active: titleElement.truncated interactive: false mainText: model.display + location: { + var result = PlasmaCore.Types.Floating + if(ma.containsMouse) result |= PlasmaCore.Types.Desktop; + return result; + } + + } + + onIsCurrentChanged: { + if(isCurrent && !ma.containsMouse) { + toolTipTimer.start(); + } else { + toolTipTimer.stop(); + toolTip.hideImmediately(); + } } Timer { id: toolTipTimer @@ -258,7 +273,7 @@ Item { listItem.parentLayout.childItem.toolTip.hideToolTip(); } listItem.parentLayout.childItem = listItem; - toolTipTimer.start(); + Qt.callLater(() => toolTipTimer.start()); } onExited: { toolTipTimer.stop(); diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index 789338f4..4bd2a152 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -1067,6 +1067,7 @@ PlasmaCore.Dialog { separator2.updateVisibility(); } Repeater { + id: firstCategoryRepeater model: sidePanelModels.firstCategory.length visible: false // Messes with separator visibility checks delegate: SidePanelItemDelegate { @@ -1098,6 +1099,7 @@ PlasmaCore.Dialog { Layout.bottomMargin: -1 } Repeater { + id: secondCategoryRepeater Layout.topMargin: -1 model: sidePanelModels.secondCategory.length visible: false // Messes with separator visibility checks @@ -1126,6 +1128,7 @@ PlasmaCore.Dialog { Layout.bottomMargin: -1 } Repeater { + id: thirdCategoryRepeater model: sidePanelModels.thirdCategory.length Layout.topMargin: -1 visible: false // Messes with separator visibility checks @@ -1190,7 +1193,7 @@ PlasmaCore.Dialog { size: iconSizeSide KeyNavigation.tab: lockScreenDelegate - KeyNavigation.backtab: leaveButtons.findUpItem(); + KeyNavigation.backtab: Qt.binding(() => { return leaveButtons.findUpItem(); }); Keys.onPressed: event => { if(event.key == Qt.Key_Return) { @@ -1236,6 +1239,7 @@ PlasmaCore.Dialog { } } + Text { id: shutDownText text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Shut down") @@ -1322,7 +1326,6 @@ PlasmaCore.Dialog { else return "rtl-normal"; } } - onFocusChanged: { if(lockScreenDelegate.focus) contextMenu.openRelative(); diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml index 3616735f..b35c8ce1 100755 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/SidePanelItemDelegate.qml @@ -181,6 +181,11 @@ Item { active: !contextMenu.enabled && sidePanelDelegate.description !== "" interactive: false + location: { + var result = PlasmaCore.Types.Floating + if(sidePanelMouseArea.containsMouse || toolTip.containsMouse) result |= PlasmaCore.Types.Desktop; + return result; + } mainItem: Text { text: sidePanelDelegate.description diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml index 19bc0164..02d39b1d 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml @@ -112,7 +112,15 @@ Item { // When a drop happens, a new item is created, and is set to selected // grabToImagebefore it gets the final width, making grabToImage fail because it's still 0x0 - onSelectedChanged: Qt.callLater(updateDragImage) + onSelectedChanged: { + Qt.callLater(updateDragImage) + if(selected && (!toolTip.containsMouse)) { + toolTipTimer.start(); + } else { + toolTipTimer.stop(); + toolTip.hideImmediately(); + } + } function updateDragImage() { if (selected && !blank) { frameLoader.grabToImage(result => { @@ -173,6 +181,14 @@ Item { } } + Timer { + id: toolTipTimer + interval: 700 + onTriggered: { + toolTip.updateToolTip(); + toolTip.showToolTip(); + } + } PlasmaCore.ToolTipArea { id: toolTip @@ -180,68 +196,47 @@ Item { && popupDialog === null && !model.blank interactive: false - location: root.useListViewMode ? (Plasmoid.location === PlasmaCore.Types.LeftEdge ? PlasmaCore.Types.LeftEdge : PlasmaCore.Types.RightEdge) : Plasmoid.location + location: { + if(toolTip.containsMouse) { + return PlasmaCore.Types.Floating | PlasmaCore.Types.Desktop + } else { + return root.useListViewMode ? (Plasmoid.location === PlasmaCore.Types.LeftEdge ? PlasmaCore.Types.LeftEdge : PlasmaCore.Types.RightEdge) : Plasmoid.location + } + } z: 999 - //anchors.fill: parent - Timer { - id: showtooltip - interval: 750 - onTriggered: { - if(ma.containsMouse) { - toolTip.showToolTip(); + function updateToolTip() { + if (toolTip.active && !model.blank) { + + toolTip.textFormat = Text.RichText; + toolTip.mainText = model.display; + + if (model.size !== undefined) { + toolTip.subText = model.type + "
" + "Size: " + model.size; + } else { + toolTip.subText = model.type; } } + } - MouseArea { - id: ma - anchors.fill: parent - hoverEnabled: true - propagateComposedEvents: true - onPositionChanged: (mouse) => { - - if (containsMouse && !model.blank) { - - if (toolTip.active) { - - toolTip.textFormat = Text.RichText; - toolTip.mainText = model.display; - - if (model.size !== undefined) { - toolTip.subText = model.type + "
" + "Size: " + model.size; - } else { - toolTip.subText = model.type; - } - showtooltip.start(); - } - - main.GridView.view.hoveredItem = main; - } - mouse.accepted = false; - + onContainsMouseChanged: { + if (containsMouse) { + updateToolTip(); + main.GridView.view.hoveredItem = main; + } else if(!containsMouse && main.GridView.view.hoveredItem === main) { + toolTip.hideImmediately(); } } - states: [ State { // icon view when: !root.useListViewMode - AnchorChanges { - target: toolTip - anchors.horizontalCenter: parent.horizontalCenter - } - PropertyChanges { target: toolTip - x: Kirigami.Units.smallSpacing - y: Kirigami.Units.smallSpacing - width: parent.width - Kirigami.Units.smallSpacing - height: parent.height - Kirigami.Units.smallSpacing - //width: Math.max(icon.paintedWidth, label.paintedWidth) - //height: (label.y + label.paintedHeight) - //y: frameLoader.y + icon.y - //width: Math.max(icon.paintedWidth, label.paintedWidth) - //height: (label.y + label.paintedHeight) - y + x: frameLoader.x + y: frameLoader.y + width: frameLoader.width + height: frameLoader.height } }, State { // list view diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/HiddenItemsView.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/HiddenItemsView.qml index 53049b96..765f7151 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/HiddenItemsView.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/HiddenItemsView.qml @@ -69,9 +69,9 @@ ScrollView { for(let i in contentItem.children){ var gridItem = contentItem.children[i]; - if (!gridItem || !gridItem.hasOwnProperty("item") || !gridItem.item.hasOwnProperty("labelHeight")) { - continue; - } + if (!gridItem) continue; + if (!gridItem.hasOwnProperty("item")) continue; + if (!gridItem.item.hasOwnProperty("labelHeight")) continue; if (gridItem.item.labelHeight > minHeight) { minHeight = gridItem.item.labelHeight; diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/AbstractItem.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/AbstractItem.qml index b09b2762..e752eb7f 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/AbstractItem.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/items/AbstractItem.qml @@ -50,11 +50,12 @@ PlasmaCore.ToolTipArea { location: { if (inHiddenLayout) { - if (LayoutMirroring.enabled && Plasmoid.location !== PlasmaCore.Types.RightEdge) { + return PlasmaCore.Types.Floating | PlasmaCore.Types.Desktop; + /*if (LayoutMirroring.enabled && Plasmoid.location !== PlasmaCore.Types.RightEdge) { return PlasmaCore.Types.LeftEdge; } else if (Plasmoid.location !== PlasmaCore.Types.LeftEdge) { return PlasmaCore.Types.RightEdge; - } + }*/ } return Plasmoid.location; From 20b5f3a927824338dbb3f776f0aa3eb262413334 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 03:35:00 +0200 Subject: [PATCH 109/222] Attempt to fix minor tooltip bug in search view --- .../io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml index 55a4b542..004c08b5 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.SevenStart/contents/ui/GenericItem.qml @@ -50,7 +50,7 @@ Item { property var triggerModel onIsCurrentlySelectedChanged: { - if(isCurrentlySelected) { + if(isCurrentlySelected && toolTip.location) { toolTipTimer.start(); } else { toolTipTimer.stop(); From 12c278fe838c607f5afb7225e48e7b64d9013ea5 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 04:24:03 +0200 Subject: [PATCH 110/222] Fix unwanted tooltip behavior in desktop containment --- .../contents/ui/FolderItemDelegate.qml | 4 +++- .../contents/ui/FolderView.qml | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml index 02d39b1d..bc9d25df 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml @@ -34,6 +34,7 @@ Item { property Item hoverArea: loader.item ? loader.item.hoverArea : null property Item frame: loader.item ? loader.item.frame : null property Item toolTip: loader.item ? loader.item.toolTip : null + property bool shouldShowToolTip: false Accessible.name: name Accessible.role: Accessible.Canvas @@ -114,8 +115,9 @@ Item { // grabToImagebefore it gets the final width, making grabToImage fail because it's still 0x0 onSelectedChanged: { Qt.callLater(updateDragImage) - if(selected && (!toolTip.containsMouse)) { + if(selected && (!toolTip.containsMouse) && main.shouldShowToolTip) { toolTipTimer.start(); + main.shouldShowToolTip = false; } else { toolTipTimer.stop(); toolTip.hideImmediately(); diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml index 9159ceda..b37b8bfb 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml @@ -1085,6 +1085,7 @@ FocusScope { if (newIndex !== -1) { currentIndex = newIndex; + if(event.modifiers === Qt.NoModifier) currentItem.shouldShowToolTip = true; updateSelection(event.modifiers); } } else { @@ -1096,6 +1097,7 @@ FocusScope { return; } + if(event.modifiers === Qt.NoModifier) currentItem.shouldShowToolTip = true; updateSelection(event.modifiers); } } @@ -1111,6 +1113,7 @@ FocusScope { if (newIndex !== -1) { currentIndex = newIndex; + if(event.modifiers === Qt.NoModifier) currentItem.shouldShowToolTip = true; updateSelection(event.modifiers); } } else { @@ -1122,6 +1125,7 @@ FocusScope { return; } + if(event.modifiers === Qt.NoModifier) currentItem.shouldShowToolTip = true; updateSelection(event.modifiers); } } @@ -1133,6 +1137,7 @@ FocusScope { if (newIndex !== -1) { currentIndex = newIndex; + if(event.modifiers === Qt.NoModifier) currentItem.shouldShowToolTip = true; updateSelection(event.modifiers); } } else { @@ -1143,7 +1148,7 @@ FocusScope { if (oldIndex === currentIndex) { return; } - + if(event.modifiers === Qt.NoModifier) currentItem.shouldShowToolTip = true; updateSelection(event.modifiers); } } @@ -1155,6 +1160,7 @@ FocusScope { if (newIndex !== -1) { currentIndex = newIndex; + if(event.modifiers === Qt.NoModifier) currentItem.shouldShowToolTip = true; updateSelection(event.modifiers); } } else { @@ -1166,6 +1172,7 @@ FocusScope { return; } + if(event.modifiers === Qt.NoModifier) currentItem.shouldShowToolTip = true; updateSelection(event.modifiers); } } From 7c05d294b94cf9db467c6ae1619970666162ae99 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 13:22:07 +0200 Subject: [PATCH 111/222] Fix aeroglassblur conflicting with forceblur config --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg index 7ac67a2d..cbf570f7 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg @@ -4,7 +4,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - + 3 From fc058989e1cae59c6a8329278a82352d7247e339 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Wed, 23 Jul 2025 15:15:04 +0200 Subject: [PATCH 112/222] Prevent tooltips from being force blurred --- .../kde-effects-aeroglassblur/src/blur.cpp | 1 + .../Seven-Black/solid/widgets/tooltip.svg | 224 +++++++++++++++++- 2 files changed, 221 insertions(+), 4 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index c1adb484..22a38d22 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -802,6 +802,7 @@ bool BlurEffect::shouldForceBlur(const EffectWindow *w) const { return false; } + if(w->isTooltip()) return false; // Is it a Gadget window bool matches = (w->window()->resourceName() == "plasmashell" || w->window()->resourceClass() == "plasmashell") && w->caption() == "plasmashell_explorer"; diff --git a/plasma/desktoptheme/Seven-Black/solid/widgets/tooltip.svg b/plasma/desktoptheme/Seven-Black/solid/widgets/tooltip.svg index 3fd76bd1..39767f1c 100755 --- a/plasma/desktoptheme/Seven-Black/solid/widgets/tooltip.svg +++ b/plasma/desktoptheme/Seven-Black/solid/widgets/tooltip.svg @@ -36,10 +36,10 @@ borderopacity="1.0" inkscape:pageopacity="1" inkscape:pageshadow="2" - inkscape:zoom="4.236067" - inkscape:cx="76.368008" - inkscape:cy="48.157878" - inkscape:current-layer="layer1" + inkscape:zoom="30.193581" + inkscape:cx="130.0442" + inkscape:cy="88.793707" + inkscape:current-layer="mask-bottom" showgrid="true" inkscape:grid-bbox="true" inkscape:document-units="px" @@ -72,6 +72,18 @@ + + + + + + + + + + + + @@ -4943,6 +5031,134 @@ x="122.52" id="rect13" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Date: Fri, 25 Jul 2025 23:16:29 +0200 Subject: [PATCH 113/222] fadingpopups: change context menu behavior - Currently only works on X11. - Since Wayland doesn't share the same behavior as X11, it is currently impossible to know what is a context or dropdown menu under Wayland, at least not reliably, without a bunch of heuristics that will almost certainly cause false positives. --- .../fadingpopups/contents/code/main.js | 90 +++++++++++++------ 1 file changed, 62 insertions(+), 28 deletions(-) diff --git a/kwin/effects/fadingpopups/contents/code/main.js b/kwin/effects/fadingpopups/contents/code/main.js index dcf72993..4b43492c 100644 --- a/kwin/effects/fadingpopups/contents/code/main.js +++ b/kwin/effects/fadingpopups/contents/code/main.js @@ -1,11 +1,11 @@ /* - KWin - the KDE window manager - This file is part of the KDE project. - - SPDX-FileCopyrightText: 2018 Vlad Zahorodnii - - SPDX-License-Identifier: GPL-2.0-or-later -*/ + * KWin - the KDE window manager + * This file is part of the KDE project. + * + * SPDX-FileCopyrightText: 2018 Vlad Zahorodnii + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ "use strict"; @@ -27,6 +27,17 @@ var blacklistNames = [ "aerothemeplasma-tabbox" ]; +function isContextMenu(window) { + // Wayland seriously has an insane way to represent context menus + //if(window.managed && window.popupWindow && window.windowType == -1 && ????) + + if(window.managed) return false; + if(window.popupMenu || window.dropdownMenu) return true; + return false; +} +function belongsToPlasmashell(window) { + return window.windowClass == "plasmashell plasmashell" || window.windowClass == "plasmashell org.kde.plasmashell" +} function isPopupWindow(window) { // If the window is blacklisted, don't animate it. @@ -38,27 +49,30 @@ function isPopupWindow(window) { return false; } //console.log(window.windowClass + " " + window.dialog); - if(window.dialog && window.windowClass === "plasmashell plasmashell") { + if((window.dialog || window.windowType == 2) && belongsToPlasmashell(window)) { return false; } - if(window.dock && window.windowClass === "plasmashell plasmashell") { + if(window.dock && belongsToPlasmashell(window)) { return false; } - if(window.desktop && window.windowClass === "plasmashell plasmashell") { + if(window.desktop && belongsToPlasmashell(window)) { return false; } if(blacklistNames.indexOf(window.caption) != -1) { return false; } + if(window.appletPopup) return false; // Animate combo box popups, tooltips, popup menus, etc. - if (window.popupWindow) { - return true; - } + + if(window.tooltip) return true; // Maybe the outline deserves its own effect. if (window.outline) { return true; } + if (isContextMenu(window)) { + return false; + } // Override-redirect windows are usually used for user interface // concepts that are expected to be animated by this effect, e.g. @@ -74,6 +88,7 @@ function isPopupWindow(window) { return true; } + if(window.popupWindow) return true; // Previously, there was a "monolithic" fade effect, which tried to // animate almost every window that was shown or hidden. Then it was // split into two effects: one that animates toplevel windows and @@ -81,26 +96,38 @@ function isPopupWindow(window) { // special windows(e.g. notifications) because the monolithic version // was doing that. if (window.dock || window.splash || window.toolbar - || window.notification || window.onScreenDisplay - || window.criticalNotification - || window.appletPopup) { + || window.notification || window.onScreenDisplay + || window.criticalNotification) { return true; - } + } - return false; + return false; } +var dropdownWindowList = 0; var fadingPopupsEffect = { loadConfig: function () { fadingPopupsEffect.fadeInDuration = animationTime(150); - fadingPopupsEffect.fadeOutDuration = animationTime(150) * 4; + fadingPopupsEffect.fadeOutDuration = animationTime(150) * 3; }, slotWindowAdded: function (window) { if (effects.hasActiveFullScreenEffect) { return; } + for(var p in window) { + console.log(p + ": " + window[p]); + } + const context = isContextMenu(window); if (!isPopupWindow(window)) { - return; + if(context && dropdownWindowList > 0) { + dropdownWindowList++; + return; + } else if(!context) { + return; + } + } + if(context) { + dropdownWindowList++; } if (!window.visible) { return; @@ -130,14 +157,14 @@ var fadingPopupsEffect = { if (!effect.grab(window, Effect.WindowClosedGrabRole)) { return; } - window.fadeOutAnimation = animate({ - window: window, - curve: QEasingCurve.OutQuart, - duration: fadingPopupsEffect.fadeOutDuration, - type: Effect.Opacity, - from: 1.0, - to: 0.0 - }); + window.fadeOutAnimation = animate({ + window: window, + curve: QEasingCurve.OutQuart, + duration: fadingPopupsEffect.fadeOutDuration, + type: Effect.Opacity, + from: 1.0, + to: 0.0 + }); }, @@ -154,6 +181,12 @@ var fadingPopupsEffect = { } } }, + slotWindowDeleted: function(window) { + if(isContextMenu(window)) { + dropdownWindowList--; + if(dropdownWindowList < 0) dropdownWindowList = 0; + } + }, init: function () { fadingPopupsEffect.loadConfig(); @@ -161,6 +194,7 @@ var fadingPopupsEffect = { effects.windowAdded.connect(fadingPopupsEffect.slotWindowAdded); effects.windowClosed.connect(fadingPopupsEffect.slotWindowClosed); effects.windowDataChanged.connect(fadingPopupsEffect.slotWindowDataChanged); + effects.windowDeleted.connect(fadingPopupsEffect.slotWindowDeleted); } }; From 4f49c1556764cfcd44bf4c2faf2410200ff8e89d Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 26 Jul 2025 04:49:54 +0200 Subject: [PATCH 114/222] Add CONTRIBUTING.md --- CONTRIBUTING.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..47cd7c48 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,22 @@ +# Contributing + +## Creating issues + +Before making an issue, please take the time to look through already existing and closed issues on both the GitGud and GitHub repo, to prevent duplicate issues. If an issue becomes relevant again, feel free to make a post in the relevant issue thread and it'll be reopened. + +Things that are helpful when writing an issue: + +- Try to describe the problem as best as possible +- Is the issue consistently reproducible? If so, provide the steps to reproduce the issue +- If the problem is visual, try to record it or screenshot it +- Provide logs of `plasmashell`, `kwin_x11`, `kwin_wayland` etc. as the issue occurs +- Provide the following relevant specifications of your system: + - Linux distribution, version and CPU architecture + - Qt, KDE and KDE Frameworks versions + - Display server (X11 and/or Wayland) + - Monitor setup and monitor capabilities (Multimonitor, DPI, HDR, etc.) + - GPU drivers + +## Merge requests + +Merge requests should only be done on the [GitGud](https://gitgud.io/wackyideas/aerothemeplasma) repo as the GitHub repository is only a mirror. From f2b497dcf7fe14ee82e95b6a0c81d1bd2b4c5cf7 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 26 Jul 2025 04:52:31 +0200 Subject: [PATCH 115/222] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 05bd9d62..99c6d83e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# AEROTHEMEPLASMA FOR KDE PLASMA 6 +# AeroThemePlasma ## Microsoft® Windows™ is a registered trademark of Microsoft® Corporation. This name is used for referential use only, and does not aim to usurp copyrights from Microsoft. Microsoft Ⓒ 2025 All rights reserved. All resources belong to Microsoft Corporation. From d4afe57a178a2e9f9aa01d6055d5c5b230279b62 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 27 Jul 2025 02:13:43 +0200 Subject: [PATCH 116/222] Add refresh action to desktopcontainment --- .../contents/ui/main.qml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml index 697db2db..2eaa48d6 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml @@ -395,6 +395,26 @@ ContainmentItem { } } + property var contextActions: root.Plasmoid.contextualActions + property var inhibitChange: false + onContextActionsChanged: { + const actions = Plasmoid.contextualActions + if(!inhibitChange) { + inhibitChange = true; + Qt.callLater(() => { Plasmoid.contextualActions = [...actions, refreshAction]; inhibitChange = false; }); + } + } + PlasmaCore.Action { + id: refreshAction + text: i18n("Refresh") + icon.name: "view-refresh" + shortcut: "alt+r" + onTriggered: { + folderViewLayer.model.refresh(); + console.log("refreshing"); + } + } + PlasmaCore.Action { id: configAction text: i18n("Personalize") From 26dedbd27522447477990902f5954a22ee957bf3 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 27 Jul 2025 16:45:50 +0200 Subject: [PATCH 117/222] Fix hovering issues in desktop containment --- .../contents/ui/FolderItemDelegate.qml | 144 +++++++++--------- 1 file changed, 76 insertions(+), 68 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml index bc9d25df..1ce2fff0 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderItemDelegate.qml @@ -191,74 +191,6 @@ Item { toolTip.showToolTip(); } } - PlasmaCore.ToolTipArea { - id: toolTip - - active: (Plasmoid.configuration.toolTips || label.truncated) - && popupDialog === null - && !model.blank - interactive: false - location: { - if(toolTip.containsMouse) { - return PlasmaCore.Types.Floating | PlasmaCore.Types.Desktop - } else { - return root.useListViewMode ? (Plasmoid.location === PlasmaCore.Types.LeftEdge ? PlasmaCore.Types.LeftEdge : PlasmaCore.Types.RightEdge) : Plasmoid.location - } - } - z: 999 - function updateToolTip() { - if (toolTip.active && !model.blank) { - - toolTip.textFormat = Text.RichText; - toolTip.mainText = model.display; - - if (model.size !== undefined) { - toolTip.subText = model.type + "
" + "Size: " + model.size; - } else { - toolTip.subText = model.type; - } - } - - } - onContainsMouseChanged: { - if (containsMouse) { - updateToolTip(); - main.GridView.view.hoveredItem = main; - } else if(!containsMouse && main.GridView.view.hoveredItem === main) { - toolTip.hideImmediately(); - } - } - - states: [ - State { // icon view - when: !root.useListViewMode - - PropertyChanges { - target: toolTip - x: frameLoader.x - y: frameLoader.y - width: frameLoader.width - height: frameLoader.height - } - }, - State { // list view - when: root.useListViewMode - - AnchorChanges { - target: toolTip - anchors.horizontalCenter: undefined - } - - PropertyChanges { - target: toolTip - x: frameLoader.x - y: frameLoader.y - width: frameLoader.width - height: frameLoader.height - } - } - ] - } Loader { id: frameLoader @@ -603,6 +535,82 @@ Item { } + PlasmaCore.ToolTipArea { + id: toolTip + + active: (Plasmoid.configuration.toolTips || label.truncated) + && popupDialog === null + && !model.blank + interactive: false + location: { + if(toolTip.containsMouse) { + return PlasmaCore.Types.Floating | PlasmaCore.Types.Desktop + } else { + return root.useListViewMode ? (Plasmoid.location === PlasmaCore.Types.LeftEdge ? PlasmaCore.Types.LeftEdge : PlasmaCore.Types.RightEdge) : Plasmoid.location + } + } + z: 999 + function updateToolTip() { + if (toolTip.active && !model.blank) { + + toolTip.textFormat = Text.RichText; + toolTip.mainText = model.display; + + if (model.size !== undefined) { + toolTip.subText = model.type + "
" + "Size: " + model.size; + } else { + toolTip.subText = model.type; + } + } + + } + MouseArea { + id: toolTipMA + anchors.fill: parent + hoverEnabled: true + onPositionChanged: { + if (containsMouse) { + toolTip.updateToolTip(); + main.GridView.view.hoveredItem = main; + } else if(!containsMouse && main.GridView.view.hoveredItem === main) { + toolTip.hideImmediately(); + } + } + + } + + states: [ + State { // icon view + when: !root.useListViewMode + + PropertyChanges { + target: toolTip + x: frameLoader.x + y: frameLoader.y + width: frameLoader.width + height: frameLoader.height + } + }, + State { // list view + when: root.useListViewMode + + AnchorChanges { + target: toolTip + anchors.horizontalCenter: undefined + } + + PropertyChanges { + target: toolTip + x: frameLoader.x + y: frameLoader.y + width: frameLoader.width + height: frameLoader.height + } + } + ] + } + + Column { id: actions From 75e1ff39f56ed4876c75d06954e736d66f31b8a4 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 27 Jul 2025 19:01:57 +0200 Subject: [PATCH 118/222] desktopcontainment: refactor refresh action code --- .../contents/ui/FolderViewLayer.qml | 2 +- .../contents/ui/main.qml | 20 ------------------- .../src/plugins/folder/foldermodel.cpp | 4 ++-- 3 files changed, 3 insertions(+), 23 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml index fb047148..a5fde6b0 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml @@ -18,7 +18,7 @@ import io.gitgud.wackyideas.desktopcontainment.folder as Folder FocusScope { id: folderViewLayerComponent - property var sharedActions: ["newMenu", "paste", "undo", "emptyTrash"] + property var sharedActions: ["newMenu", "paste", "undo", "emptyTrash", "refresh"] property Component folderViewDialogComponent: Qt.createComponent("FolderViewDialog.qml", Qt.Asynchronous, root) property Item view: folderView diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml index 2eaa48d6..697db2db 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/main.qml @@ -395,26 +395,6 @@ ContainmentItem { } } - property var contextActions: root.Plasmoid.contextualActions - property var inhibitChange: false - onContextActionsChanged: { - const actions = Plasmoid.contextualActions - if(!inhibitChange) { - inhibitChange = true; - Qt.callLater(() => { Plasmoid.contextualActions = [...actions, refreshAction]; inhibitChange = false; }); - } - } - PlasmaCore.Action { - id: refreshAction - text: i18n("Refresh") - icon.name: "view-refresh" - shortcut: "alt+r" - onTriggered: { - folderViewLayer.model.refresh(); - console.log("refreshing"); - } - } - PlasmaCore.Action { id: configAction text: i18n("Personalize") diff --git a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp index 1c79a3de..43189156 100644 --- a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp +++ b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp @@ -507,8 +507,8 @@ void FolderModel::setUsedByContainment(bool used) QAction *action = m_actionCollection.action(QStringLiteral("refresh")); if (action) { - action->setText(m_usedByContainment ? i18n("&Refresh Desktop") : i18n("&Refresh View")); - action->setIcon(m_usedByContainment ? QIcon::fromTheme(QStringLiteral("user-desktop")) : QIcon::fromTheme(QStringLiteral("view-refresh"))); + action->setText(i18n("Refresh")); + action->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh"))); } m_screenMapper->disconnect(this); From 6d501d28bfef057f081075f60cd22c03a67d0f49 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sun, 27 Jul 2025 23:39:18 +0200 Subject: [PATCH 119/222] desktopcontainment: add refresh animation indicator --- .../contents/ui/FolderView.qml | 13 ++++++++++++- .../src/plugins/folder/foldermodel.cpp | 1 + .../src/plugins/folder/foldermodel.h | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml index b37b8bfb..71c4df68 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml @@ -172,6 +172,18 @@ FocusScope { function onSelectionDone() { main.generateDragImage(); } + + function onHasRefreshed() { + gridView.visible = false; + refreshGridView.start(); + } + } + Timer { + id: refreshGridView + interval: 100 + onTriggered: { + gridView.visible = true; + } } Connections { @@ -1296,7 +1308,6 @@ FocusScope { moves.push(to); } } - console.log(moves); if (moves.length) { // Update also the currentIndex, otherwise it // is not set properly. diff --git a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp index 43189156..8d6f0bb8 100644 --- a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp +++ b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp @@ -2111,6 +2111,7 @@ void FolderModel::refresh() { m_errorString.clear(); Q_EMIT errorStringChanged(); + Q_EMIT hasRefreshed(); m_dirModel->dirLister()->updateDirectory(m_dirModel->dirLister()->url()); } diff --git a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.h b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.h index c75d0b7d..6035afd3 100644 --- a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.h +++ b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.h @@ -284,6 +284,7 @@ Q_SIGNALS: void itemRenamed() const; void screenGeometryChanged() const; void selectionDone(); + void hasRefreshed(); protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; From 30ebd22ccc4fb42d9a0bd21c94e3d98bfcdf98a7 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 28 Jul 2025 00:19:04 +0200 Subject: [PATCH 120/222] Tweak fadingpopups behavior --- .../fadingpopups/contents/code/main.js | 61 ++++++++++--------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/kwin/effects/fadingpopups/contents/code/main.js b/kwin/effects/fadingpopups/contents/code/main.js index 4b43492c..ee96e827 100644 --- a/kwin/effects/fadingpopups/contents/code/main.js +++ b/kwin/effects/fadingpopups/contents/code/main.js @@ -1,11 +1,11 @@ /* - * KWin - the KDE window manager - * This file is part of the KDE project. - * - * SPDX-FileCopyrightText: 2018 Vlad Zahorodnii - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ + KWin - the KDE window manager + This file is part of the KDE project. + + SPDX-FileCopyrightText: 2018 Vlad Zahorodnii + + SPDX-License-Identifier: GPL-2.0-or-later +*/ "use strict"; @@ -27,12 +27,17 @@ var blacklistNames = [ "aerothemeplasma-tabbox" ]; +function isDropdownMenu(window) { + if(window.managed) return false; + if(window.dropdownMenu) return true; + return false; +} function isContextMenu(window) { // Wayland seriously has an insane way to represent context menus //if(window.managed && window.popupWindow && window.windowType == -1 && ????) if(window.managed) return false; - if(window.popupMenu || window.dropdownMenu) return true; + if(window.popupMenu) return true; return false; } function belongsToPlasmashell(window) { @@ -73,6 +78,9 @@ function isPopupWindow(window) { if (isContextMenu(window)) { return false; } + if (isDropdownMenu(window)) { + return false; + } // Override-redirect windows are usually used for user interface // concepts that are expected to be animated by this effect, e.g. @@ -96,12 +104,12 @@ function isPopupWindow(window) { // special windows(e.g. notifications) because the monolithic version // was doing that. if (window.dock || window.splash || window.toolbar - || window.notification || window.onScreenDisplay - || window.criticalNotification) { + || window.notification || window.onScreenDisplay + || window.criticalNotification) { return true; - } + } - return false; + return false; } var dropdownWindowList = 0; @@ -114,19 +122,16 @@ var fadingPopupsEffect = { if (effects.hasActiveFullScreenEffect) { return; } - for(var p in window) { - console.log(p + ": " + window[p]); - } - const context = isContextMenu(window); + const dropdown = isDropdownMenu(window); if (!isPopupWindow(window)) { - if(context && dropdownWindowList > 0) { + if(dropdown && dropdownWindowList > 0) { dropdownWindowList++; return; - } else if(!context) { + } else if(!dropdown && !isContextMenu(window)) { return; } } - if(context) { + if(dropdown) { dropdownWindowList++; } if (!window.visible) { @@ -157,14 +162,14 @@ var fadingPopupsEffect = { if (!effect.grab(window, Effect.WindowClosedGrabRole)) { return; } - window.fadeOutAnimation = animate({ - window: window, - curve: QEasingCurve.OutQuart, - duration: fadingPopupsEffect.fadeOutDuration, - type: Effect.Opacity, - from: 1.0, - to: 0.0 - }); + window.fadeOutAnimation = animate({ + window: window, + curve: QEasingCurve.OutQuart, + duration: fadingPopupsEffect.fadeOutDuration, + type: Effect.Opacity, + from: 1.0, + to: 0.0 + }); }, @@ -182,7 +187,7 @@ var fadingPopupsEffect = { } }, slotWindowDeleted: function(window) { - if(isContextMenu(window)) { + if(isDropdownMenu(window)) { dropdownWindowList--; if(dropdownWindowList < 0) dropdownWindowList = 0; } From 5ada923fb6a2d41817cdcd79186d6ec8cd7ee97f Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 28 Jul 2025 00:19:18 +0200 Subject: [PATCH 121/222] desktopcontainment: modify context menu layout --- .../contents/ui/FolderViewLayer.qml | 24 +++++++++++++++---- .../src/plugins/folder/foldermodel.cpp | 12 +++++++--- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml index a5fde6b0..deb65bf9 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml @@ -18,7 +18,7 @@ import io.gitgud.wackyideas.desktopcontainment.folder as Folder FocusScope { id: folderViewLayerComponent - property var sharedActions: ["newMenu", "paste", "undo", "emptyTrash", "refresh"] + property var sharedActions: ["refresh", "paste", "undo", "emptyTrash", "newMenu"] property Component folderViewDialogComponent: Qt.createComponent("FolderViewDialog.qml", Qt.Asynchronous, root) property Item view: folderView @@ -358,14 +358,22 @@ FocusScope { PlasmaCore.Action { id: viewPropertiesAction - text: i18n("Icons") - icon.name: "view-list-icons" + text: i18n("View") + //icon.name: "" menu: viewPropertiesMenu.menu } PlasmaCore.Action { id: actionSeparator isSeparator: true } + PlasmaCore.Action { + id: actionSeparatorSecond + isSeparator: true + } + PlasmaCore.Action { + id: actionSeparatorThird + isSeparator: true + } Component.onCompleted: { if (!isContainment) { @@ -375,13 +383,19 @@ FocusScope { for (let i = 0, len = sharedActions.length; i < len; i++) { const actionName = sharedActions[i]; const modelAction = folderView.model.action(actionName); - Plasmoid.contextualActions.push(modelAction) if (actionName === "newMenu") { + Plasmoid.contextualActions.push(actionSeparator); + } + if (actionName === "refresh") { Plasmoid.contextualActions.push(viewPropertiesAction) } + Plasmoid.contextualActions.push(modelAction) + if (actionName === "refresh") { + Plasmoid.contextualActions.push(actionSeparatorSecond); + } } - Plasmoid.contextualActions.push(actionSeparator); + Plasmoid.contextualActions.push(actionSeparatorThird); Plasmoid.contextualActionsAboutToShow.connect(updateContextualActions); Plasmoid.contextualActionsAboutToShow.connect(folderView.model.clearSelection); diff --git a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp index 8d6f0bb8..46273225 100644 --- a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp +++ b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp @@ -508,7 +508,7 @@ void FolderModel::setUsedByContainment(bool used) if (action) { action->setText(i18n("Refresh")); - action->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh"))); + action->setIcon(QIcon()); } m_screenMapper->disconnect(this); @@ -1826,6 +1826,8 @@ void FolderModel::updateActions() if (QAction *newMenuAction = m_actionCollection.action(QStringLiteral("newMenu"))) { newMenuAction->setEnabled(itemProperties.supportsWriting()); newMenuAction->setVisible(!isTrash); + newMenuAction->setText(i18n("New")); + newMenuAction->setIcon(QIcon()); } } @@ -1857,17 +1859,21 @@ void FolderModel::updateActions() const QString pasteText = KIO::pasteActionText(QApplication::clipboard()->mimeData(), &enable, rootItem()); if (enable) { - paste->setText(pasteText); + //paste->setText(pasteText); + paste->setText(i18n("&Paste")); paste->setEnabled(true); } else { paste->setText(i18n("&Paste")); paste->setEnabled(false); } + paste->setIcon(QIcon()); if (QAction *pasteTo = m_actionCollection.action(QStringLiteral("pasteto"))) { pasteTo->setVisible(itemProperties.isDirectory() && itemProperties.supportsWriting()); pasteTo->setEnabled(paste->isEnabled()); - pasteTo->setText(paste->text()); + //pasteTo->setText(paste->text()); + pasteTo->setText(i18n("&Paste")); + pasteTo->setIcon(QIcon()); } } From 325c1cbf511262d4551845c2703a1ed63a469f91 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Mon, 28 Jul 2025 01:30:25 +0200 Subject: [PATCH 122/222] desktopcontainment: split View and Sort by actions Needs to recompile desktopcontainment src --- .../contents/ui/FolderViewLayer.qml | 7 ++++++ .../src/plugins/folder/viewpropertiesmenu.cpp | 23 +++++++++++-------- .../src/plugins/folder/viewpropertiesmenu.h | 3 +++ 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml index deb65bf9..c4d83a8a 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderViewLayer.qml @@ -362,6 +362,12 @@ FocusScope { //icon.name: "" menu: viewPropertiesMenu.menu } + PlasmaCore.Action { + id: viewSortMenu + text: i18n("Sort by") + //icon.name: "" + menu: viewPropertiesMenu.sortMenu + } PlasmaCore.Action { id: actionSeparator isSeparator: true @@ -388,6 +394,7 @@ FocusScope { } if (actionName === "refresh") { Plasmoid.contextualActions.push(viewPropertiesAction) + Plasmoid.contextualActions.push(viewSortMenu) } Plasmoid.contextualActions.push(modelAction) if (actionName === "refresh") { diff --git a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/viewpropertiesmenu.cpp b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/viewpropertiesmenu.cpp index 4752f22b..0b3b9a05 100644 --- a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/viewpropertiesmenu.cpp +++ b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/viewpropertiesmenu.cpp @@ -18,33 +18,33 @@ ViewPropertiesMenu::ViewPropertiesMenu(QObject *parent) { m_menu = new QMenu(); - QMenu *menu = m_menu->addMenu(QIcon::fromTheme(QStringLiteral("view-sort")), i18n("Sort By")); + m_sortMenu = new QMenu(i18n("Sort By")); m_sortMode = new QActionGroup(this); connect(m_sortMode, &QActionGroup::triggered, this, &ViewPropertiesMenu::sortModeChanged); - QAction *action = menu->addAction(i18nc("@item:inmenu Sort icons manually", "Unsorted")); + QAction *action = m_sortMenu->addAction(i18nc("@item:inmenu Sort icons manually", "Unsorted")); action->setCheckable(true); action->setData(-1); m_sortMode->addAction(action); - action = menu->addAction(i18nc("@item:inmenu Sort icons by name", "Name")); + action = m_sortMenu->addAction(i18nc("@item:inmenu Sort icons by name", "Name")); action->setCheckable(true); action->setData(int(KDirModel::Name)); m_sortMode->addAction(action); - action = menu->addAction(i18nc("@item:inmenu Sort icons by size", "Size")); + action = m_sortMenu->addAction(i18nc("@item:inmenu Sort icons by size", "Size")); action->setCheckable(true); action->setData(int(KDirModel::Size)); m_sortMode->addAction(action); - action = menu->addAction(i18nc("@item:inmenu Sort icons by file type", "Type")); + action = m_sortMenu->addAction(i18nc("@item:inmenu Sort icons by file type", "Type")); action->setCheckable(true); action->setData(int(KDirModel::Type)); m_sortMode->addAction(action); - action = menu->addAction(i18nc("@item:inmenu Sort icons by date", "Date")); + action = m_sortMenu->addAction(i18nc("@item:inmenu Sort icons by date", "Date")); action->setCheckable(true); action->setData(int(KDirModel::ModifiedTime)); m_sortMode->addAction(action); - menu->addSeparator(); - m_sortDesc = menu->addAction(i18nc("@item:inmenu Sort icons in descending order", "Descending"), this, &ViewPropertiesMenu::sortDescChanged); + m_sortMenu->addSeparator(); + m_sortDesc = m_sortMenu->addAction(i18nc("@item:inmenu Sort icons in descending order", "Descending"), this, &ViewPropertiesMenu::sortDescChanged); m_sortDesc->setCheckable(true); - m_sortDirsFirst = menu->addAction(i18nc("@item:inmenu Sort icons with folders first", "Folders First"), this, &ViewPropertiesMenu::sortDirsFirstChanged); + m_sortDirsFirst = m_sortMenu->addAction(i18nc("@item:inmenu Sort icons with folders first", "Folders First"), this, &ViewPropertiesMenu::sortDirsFirstChanged); m_sortDirsFirst->setCheckable(true); m_iconSizeMenu = m_menu->addMenu(QIcon::fromTheme(QStringLiteral("transform-scale")), i18n("Icon Size")); @@ -103,12 +103,17 @@ ViewPropertiesMenu::ViewPropertiesMenu(QObject *parent) ViewPropertiesMenu::~ViewPropertiesMenu() { delete m_menu; + delete m_sortMenu; } QObject *ViewPropertiesMenu::menu() const { return m_menu; } +QObject *ViewPropertiesMenu::sortMenu() const +{ + return m_sortMenu; +} bool ViewPropertiesMenu::showLayoutActions() const { diff --git a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/viewpropertiesmenu.h b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/viewpropertiesmenu.h index 331fbc0c..513542bd 100644 --- a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/viewpropertiesmenu.h +++ b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/viewpropertiesmenu.h @@ -19,6 +19,7 @@ class ViewPropertiesMenu : public QObject QML_ELEMENT Q_PROPERTY(QObject *menu READ menu CONSTANT) + Q_PROPERTY(QObject *sortMenu READ sortMenu CONSTANT) Q_PROPERTY(bool showLayoutActions READ showLayoutActions WRITE setShowLayoutActions NOTIFY showLayoutActionsChanged) Q_PROPERTY(bool showLockAction READ showLockAction WRITE setShowLockAction NOTIFY showLockActionChanged) @@ -39,6 +40,7 @@ public: ~ViewPropertiesMenu() override; QObject *menu() const; + QObject *sortMenu() const; bool showLayoutActions() const; void setShowLayoutActions(bool show); @@ -91,6 +93,7 @@ Q_SIGNALS: void iconSizeChanged(); private: + QMenu *m_sortMenu; QMenu *m_menu; QMenu *m_arrangementMenu; QActionGroup *m_arrangement; From 9c33abb0d2435d5f7bb3312ab5fbd7016ad9a729 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 1 Aug 2025 04:22:13 +0200 Subject: [PATCH 123/222] Update libplasma patch structure --- misc/defaulttooltip/install.sh | 7 +------ .../declarativeimports/core/private}/DefaultToolTip.qml | 0 .../{ => src/declarativeimports/core}/tooltiparea.cpp | 0 .../{ => src/declarativeimports/core}/tooltiparea.h | 0 .../{ => src/declarativeimports/core}/tooltipdialog.cpp | 0 misc/defaulttooltip/{ => src/plasmaquick}/plasmawindow.cpp | 0 .../{ => src/plasmaquick}/popupplasmawindow.cpp | 0 7 files changed, 1 insertion(+), 6 deletions(-) rename misc/defaulttooltip/{ => src/declarativeimports/core/private}/DefaultToolTip.qml (100%) rename misc/defaulttooltip/{ => src/declarativeimports/core}/tooltiparea.cpp (100%) rename misc/defaulttooltip/{ => src/declarativeimports/core}/tooltiparea.h (100%) rename misc/defaulttooltip/{ => src/declarativeimports/core}/tooltipdialog.cpp (100%) rename misc/defaulttooltip/{ => src/plasmaquick}/plasmawindow.cpp (100%) rename misc/defaulttooltip/{ => src/plasmaquick}/popupplasmawindow.cpp (100%) diff --git a/misc/defaulttooltip/install.sh b/misc/defaulttooltip/install.sh index 949e7450..11de4c99 100644 --- a/misc/defaulttooltip/install.sh +++ b/misc/defaulttooltip/install.sh @@ -41,12 +41,7 @@ if [ ! -d ./build/${SRCDIR} ]; then echo "Extracted $ARCHIVE" fi -cp DefaultToolTip.qml ./build/$SRCDIR/src/declarativeimports/core/private/DefaultToolTip.qml -cp tooltiparea.h ./build/$SRCDIR/src/declarativeimports/core/tooltiparea.h -cp tooltiparea.cpp ./build/$SRCDIR/src/declarativeimports/core/tooltiparea.cpp -cp tooltipdialog.cpp ./build/$SRCDIR/src/declarativeimports/core/tooltipdialog.cpp -cp plasmawindow.cpp ./build/$SRCDIR/src/plasmaquick/plasmawindow.cpp -cp popupplasmawindow.cpp ./build/$SRCDIR/src/plasmaquick/popupplasmawindow.cpp +cp -r src ./build/$SRCDIR/ cd ./build/$SRCDIR/ mkdir build cd build diff --git a/misc/defaulttooltip/DefaultToolTip.qml b/misc/defaulttooltip/src/declarativeimports/core/private/DefaultToolTip.qml similarity index 100% rename from misc/defaulttooltip/DefaultToolTip.qml rename to misc/defaulttooltip/src/declarativeimports/core/private/DefaultToolTip.qml diff --git a/misc/defaulttooltip/tooltiparea.cpp b/misc/defaulttooltip/src/declarativeimports/core/tooltiparea.cpp similarity index 100% rename from misc/defaulttooltip/tooltiparea.cpp rename to misc/defaulttooltip/src/declarativeimports/core/tooltiparea.cpp diff --git a/misc/defaulttooltip/tooltiparea.h b/misc/defaulttooltip/src/declarativeimports/core/tooltiparea.h similarity index 100% rename from misc/defaulttooltip/tooltiparea.h rename to misc/defaulttooltip/src/declarativeimports/core/tooltiparea.h diff --git a/misc/defaulttooltip/tooltipdialog.cpp b/misc/defaulttooltip/src/declarativeimports/core/tooltipdialog.cpp similarity index 100% rename from misc/defaulttooltip/tooltipdialog.cpp rename to misc/defaulttooltip/src/declarativeimports/core/tooltipdialog.cpp diff --git a/misc/defaulttooltip/plasmawindow.cpp b/misc/defaulttooltip/src/plasmaquick/plasmawindow.cpp similarity index 100% rename from misc/defaulttooltip/plasmawindow.cpp rename to misc/defaulttooltip/src/plasmaquick/plasmawindow.cpp diff --git a/misc/defaulttooltip/popupplasmawindow.cpp b/misc/defaulttooltip/src/plasmaquick/popupplasmawindow.cpp similarity index 100% rename from misc/defaulttooltip/popupplasmawindow.cpp rename to misc/defaulttooltip/src/plasmaquick/popupplasmawindow.cpp From 3982c4d138a7ef650afb846e68acd625c65ae44c Mon Sep 17 00:00:00 2001 From: catpswin56 Date: Tue, 12 Aug 2025 10:29:33 -0300 Subject: [PATCH 124/222] Fix scrolling in the icons page of the desktop containment --- .../contents/ui/ConfigIcons.qml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/ConfigIcons.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/ConfigIcons.qml index b43a4037..b7b850ea 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/ConfigIcons.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/ConfigIcons.qml @@ -50,12 +50,16 @@ Item { readonly property bool lockedByKiosk: !KAuthorized.authorize("editable_desktop_icons") + implicitHeight: layout.height + KIconThemes.IconDialog { id: iconDialog onIconNameChanged: cfg_icon = iconName || "folder-symbolic"; } Kirigami.FormLayout { + id: layout + anchors { top: parent.top left: parent.left From 428f1f550f383f591164bafc70080fa24681c604 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 15 Aug 2025 00:51:16 +0200 Subject: [PATCH 125/222] Fix SMOD Peek permanently hiding PiP players --- .../smodpeekeffect/contents/code/main.js | 199 ++++++++++++------ 1 file changed, 140 insertions(+), 59 deletions(-) diff --git a/kwin/effects/smodpeekeffect/contents/code/main.js b/kwin/effects/smodpeekeffect/contents/code/main.js index 0fe4af41..ebf36e12 100644 --- a/kwin/effects/smodpeekeffect/contents/code/main.js +++ b/kwin/effects/smodpeekeffect/contents/code/main.js @@ -1,11 +1,11 @@ /* - * KWin - the KDE window manager - * This file is part of the KDE project. - * - * SPDX-FileCopyrightText: 2015 Thomas Lübking - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ + KWin - the KDE window manager + This file is part of the KDE project. + + SPDX-FileCopyrightText: 2015 Thomas Lübking + + SPDX-License-Identifier: GPL-2.0-or-later +*/ /*global effect, effects, animate, animationTime, Effect, QEasingCurve */ "use strict"; @@ -18,7 +18,6 @@ var badBadWindowsEffect = { }, setShowingDesktop: function (showing) { badBadWindowsEffect.showingDesktop = showing; - }, offToCorners: function (showing, frozenTime) { if (typeof frozenTime === "undefined") { @@ -28,12 +27,13 @@ var badBadWindowsEffect = { var screenGeo = effects.virtualScreenGeometry; var xOffset = screenGeo.width / 16; var yOffset = screenGeo.height / 16; - + if (showing) { + var closestWindows = [ undefined, undefined, undefined, undefined ]; + var movedWindowsCount = 0; for (var i = 0; i < stackingOrder.length; ++i) { var w = stackingOrder[i]; - if (!w.managed && (w.windowClass == "kwin_x11 kwin" || w.windowClass == "kwin_wayland kwin") && w.caption == "" && !w.hasDecoration) continue; - if (!w.hiddenByShowDesktop && !w.normalWindow) { + if (!w.hiddenByShowDesktop) { continue; } @@ -53,48 +53,129 @@ var badBadWindowsEffect = { continue; } - //console.log("Before: " + JSON.stringify(w)); + // calculate the corner distances + var geo = w.geometry; + var dl = geo.x + geo.width - screenGeo.x; + var dr = screenGeo.x + screenGeo.width - geo.x; + var dt = geo.y + geo.height - screenGeo.y; + var db = screenGeo.y + screenGeo.height - geo.y; + w.apertureDistances = [ dl + dt, dr + dt, dr + db, dl + db ]; + movedWindowsCount += 1; - if(showing) { - if (!w.offToCornerId || !freezeInTime(w.offToCornerId, frozenTime)) { - - w.offToCornerId = set({ - window: w, - duration: badBadWindowsEffect.duration, - curve: QEasingCurve.InOutQuad, - //delay: 10, - animations: [{ - type: Effect.Opacity, - to: 0.0, - frozenTime: frozenTime - - }] - }); - //console.log("script"); - } - } else { - if (!w.visible) { - cancel(w.offToCornerId); - delete w.offToCornerId; - delete w.apertureCorner; - // This if the window was invisible and has become visible in the meantime - } else if (!w.offToCornerId || !redirect(w.offToCornerId, Effect.Backward) || !freezeInTime(w.offToCornerId, frozenTime)) { - /*animate({ - window: w, - duration: badBadWindowsEffect.duration, - curve: QEasingCurve.Linear, - animations: [{ - type: Effect.Opacity, - from: 0.0 - }] - });*/ + // if this window is the closest one to any corner, set it as preferred there + var nearest = 0; + for (var j = 1; j < 4; ++j) { + if (w.apertureDistances[j] < w.apertureDistances[nearest] || + (w.apertureDistances[j] == w.apertureDistances[nearest] && closestWindows[j] === undefined)) { + nearest = j; } } + if (closestWindows[nearest] === undefined || + closestWindows[nearest].apertureDistances[nearest] > w.apertureDistances[nearest]) + closestWindows[nearest] = w; } + + // second pass, select corners + + // 1st off, move the nearest windows to their nearest corners + // this will ensure that if there's only on window in the lower right + // it won't be moved out to the upper left + var movedWindowsDec = [ 0, 0, 0, 0 ]; + for (var i = 0; i < 4; ++i) { + if (closestWindows[i] === undefined) + continue; + closestWindows[i].apertureCorner = i; + delete closestWindows[i].apertureDistances; + movedWindowsDec[i] = 1; + } + + // 2nd, distribute the remainders according to their preferences + // this doesn't exactly have heapsort performance ;-) + movedWindowsCount = Math.floor((movedWindowsCount + 3) / 4); + for (var i = 0; i < 4; ++i) { + for (var j = 0; j < movedWindowsCount - movedWindowsDec[i]; ++j) { + var bestWindow = undefined; + for (var k = 0; k < stackingOrder.length; ++k) { + if (stackingOrder[k].apertureDistances === undefined) + continue; + if (bestWindow === undefined || + stackingOrder[k].apertureDistances[i] < bestWindow.apertureDistances[i]) + bestWindow = stackingOrder[k]; + } + if (bestWindow === undefined) + break; + bestWindow.apertureCorner = i; + delete bestWindow.apertureDistances; + } + } + + } + + // actually re/move windows from/to assigned corners + for (var i = 0; i < stackingOrder.length; ++i) { + var w = stackingOrder[i]; + if (w.apertureCorner === undefined && w.offToCornerId === undefined) + continue; + + if (w.dock) { + continue; + } + + var anchor, tx, ty; + var geo = w.geometry; + if (w.apertureCorner == 1 || w.apertureCorner == 2) { + tx = screenGeo.x + screenGeo.width - xOffset; + anchor = Effect.Left; + } else { + tx = xOffset; + anchor = Effect.Right; + } + if (w.apertureCorner > 1) { + ty = screenGeo.y + screenGeo.height - yOffset; + anchor |= Effect.Top; + } else { + ty = yOffset; + anchor |= Effect.Bottom; + } + + if (showing) { + if (!w.offToCornerId || !freezeInTime(w.offToCornerId, frozenTime)) { + + w.offToCornerId = set({ + window: w, + duration: badBadWindowsEffect.duration, + curve: QEasingCurve.InOutQuad, + animations: [{ + type: Effect.Opacity, + to: 0.0, + frozenTime: frozenTime + }] + }); + } + } else { + // Reset if the window has become invisible in the meantime + if (!w.visible) { + cancel(w.offToCornerId); + delete w.offToCornerId; + delete w.apertureCorner; + // This if the window was invisible and has become visible in the meantime + } else if (!w.offToCornerId || !redirect(w.offToCornerId, Effect.Backward) || !freezeInTime(w.offToCornerId, frozenTime)) { + animate({ + window: w, + duration: badBadWindowsEffect.duration, + curve: QEasingCurve.InOutQuad, + animations: [{ + type: Effect.Opacity, + from: 0.0 + }] + }); + } + } + } }, animationEnded: function (w, a, meta) { // After the animation that closes the effect, reset all the parameters - if (!badBadWindowsEffect.showingDesktop && w.offToCornerId != null) { + if (!badBadWindowsEffect.showingDesktop) { cancel(w.offToCornerId); delete w.offToCornerId; delete w.apertureCorner; @@ -108,16 +189,16 @@ var badBadWindowsEffect = { let time = 0; switch (border) { - case KWin.ElectricTop: - case KWin.ElectricBottom: - time = Math.min(1, (Math.abs(deltaProgress.height) / (effectScreen.geometry.height / 2))) * badBadWindowsEffect.duration; - break; - case KWin.ElectricLeft: - case KWin.ElectricRight: - time = Math.min(1, (Math.abs(deltaProgress.width) / (effectScreen.geometry.width / 2))) * badBadWindowsEffect.duration; - break; - default: - return; + case KWin.ElectricTop: + case KWin.ElectricBottom: + time = Math.min(1, (Math.abs(deltaProgress.height) / (effectScreen.geometry.height / 2))) * badBadWindowsEffect.duration; + break; + case KWin.ElectricLeft: + case KWin.ElectricRight: + time = Math.min(1, (Math.abs(deltaProgress.width) / (effectScreen.geometry.width / 2))) * badBadWindowsEffect.duration; + break; + default: + return; } if (badBadWindowsEffect.showingDesktop) { time = badBadWindowsEffect.duration - time; @@ -131,12 +212,12 @@ var badBadWindowsEffect = { effects.showingDesktopChanged.connect(badBadWindowsEffect.offToCorners); effect.animationEnded.connect(badBadWindowsEffect.animationEnded); - //let edges = effect.touchEdgesForAction("show-desktop"); + let edges = effect.touchEdgesForAction("show-desktop"); - /*for (let i in edges) { + for (let i in edges) { let edge = parseInt(edges[i]); registerRealtimeScreenEdge(edge, badBadWindowsEffect.realtimeScreenEdgeCallback); - }*/ + } } }; From 19fe3e911dfe9feee45446b0617596b506a5375e Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 15 Aug 2025 00:51:58 +0200 Subject: [PATCH 126/222] Attempt to fix system tray randomly messing up tray icons --- .../contents/ui/HiddenItemsView.qml | 20 ------------------- .../contents/ui/main.qml | 12 +++++++++++ 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/HiddenItemsView.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/HiddenItemsView.qml index 765f7151..45f19c28 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/HiddenItemsView.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/HiddenItemsView.qml @@ -60,26 +60,6 @@ ScrollView { readonly property int itemCount: model.count - //! This is used in order to identify the minimum required label height in order for all - //! labels to be aligned properly at all items. At the same time this approach does not - //! enforce labels with 3 lines at all cases so translations that require only one or two - //! lines will always look consistent with no too much padding - readonly property int minLabelHeight: { - var minHeight = 0; - - for(let i in contentItem.children){ - var gridItem = contentItem.children[i]; - if (!gridItem) continue; - if (!gridItem.hasOwnProperty("item")) continue; - if (!gridItem.item.hasOwnProperty("labelHeight")) continue; - - if (gridItem.item.labelHeight > minHeight) { - minHeight = gridItem.item.labelHeight; - } - } - - return minHeight; - } model: KItemModels.KSortFilterProxyModel { sourceModel: Plasmoid.systemTrayModel diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml index 73b43228..6c723c71 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml @@ -153,12 +153,22 @@ ContainmentItem { saveConfiguration(); }*/ } + Timer { + id: updateTimer + interval: 100 + onTriggered: { + root.hiddenLayout.model.invalidateFilter() + shownItemsModel.invalidateFilter(); + } + } DelegateModel { id: activeModel model: KItemModels.KSortFilterProxyModel { + id: shownItemsModel sourceModel: Plasmoid.systemTrayModel filterRoleName: "effectiveStatus" + filterRowCallback: (sourceRow, sourceParent) => { let value = sourceModel.data(sourceModel.index(sourceRow, 0, sourceParent), filterRole); return value === PlasmaCore.Types.ActiveStatus; @@ -203,8 +213,10 @@ ContainmentItem { onChanged: (removed, inserted) => { if(inserted.length > 0) { root.hiddenLayout.model.invalidateFilter() + shownItemsModel.invalidateFilter(); } activeModel.sort(); + updateTimer.start(); } } delegate: ItemLoader { From 31f426c8e26ec5718049becbc3cb26477b708497 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 15 Aug 2025 00:52:35 +0200 Subject: [PATCH 127/222] desktopcontainment: don't play refresh animation on rename --- .../contents/ui/FolderView.qml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml index 71c4df68..2464062f 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml @@ -58,6 +58,8 @@ FocusScope { property var dialog: null property Item editor: null + property bool renamed: false + property int previouslySelectedItemIndex: -1 function positionViewAtBeginning() { @@ -174,8 +176,12 @@ FocusScope { } function onHasRefreshed() { - gridView.visible = false; - refreshGridView.start(); + if(main.renamed) { + main.renamed = false; + } else { + gridView.visible = false; + refreshGridView.start(); + } } } Timer { @@ -1356,6 +1362,7 @@ FocusScope { onCommit: { if (targetItem) { + main.renamed = true; dir.rename(positioner.map(targetItem.index), text); targetItem = null; gridView.forceActiveFocus(); From e2c2bab03b45994230f66619b72f1cb6325133cb Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 15 Aug 2025 01:03:22 +0200 Subject: [PATCH 128/222] Make potentially missing folders in misc installer --- install_misc_components.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/install_misc_components.sh b/install_misc_components.sh index ba41dc50..37609d10 100755 --- a/install_misc_components.sh +++ b/install_misc_components.sh @@ -19,12 +19,14 @@ echo "Done." #Sounds echo "Unpacking sound themes..." SOUNDS_DIR="$HOME/.local/share/sounds" +mkdir -p "$SOUNDS_DIR" tar -xf "$PWD/misc/sounds/sounds.tar.gz" --directory "$SOUNDS_DIR" echo "Done." #Icons echo "Unpacking icon theme..." ICONS_DIR="$HOME/.local/share/icons" +mkdir -p "$ICONS_DIR" tar -xf "$PWD/misc/icons/Windows 7 Aero.tar.gz" --directory "$ICONS_DIR" echo "Done." @@ -37,6 +39,7 @@ echo "Done." #Mimetype echo "Installing mimetypes..." MIMETYPE_DIR="$HOME/.local/share/mime/packages" +mkdir -p "$MIMETYPE_DIR" for filename in "$PWD/misc/mimetype/"*; do cp -r "$filename" "$MIMETYPE_DIR" done @@ -69,6 +72,7 @@ echo "Done." echo "Do you want to install custom branding for Info Center? (y/N)" read answer BRANDING_DIR="$HOME/.config/kdedefaults" +mkdir -p "$BRANDING_DIR" if [ "$answer" != "${answer#[Yy]}" ] ;then for filename in "$PWD/misc/branding/"*; do From 94cef8b5f0afd77e4e1fd6c28b3177de6fadcdd7 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 15 Aug 2025 03:05:36 +0200 Subject: [PATCH 129/222] desktopcontainment: actually fix inappropriate refresh animations --- .../contents/ui/FolderView.qml | 11 +++-------- .../src/plugins/folder/foldermodel.cpp | 8 ++++---- .../src/plugins/folder/foldermodel.h | 4 ++-- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml index 2464062f..39e584bb 100644 --- a/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml +++ b/plasma/plasmoids/io.gitgud.wackyideas.desktopcontainment/contents/ui/FolderView.qml @@ -58,8 +58,6 @@ FocusScope { property var dialog: null property Item editor: null - property bool renamed: false - property int previouslySelectedItemIndex: -1 function positionViewAtBeginning() { @@ -175,10 +173,8 @@ FocusScope { main.generateDragImage(); } - function onHasRefreshed() { - if(main.renamed) { - main.renamed = false; - } else { + function onHasRefreshed(isExplicit) { + if(isExplicit) { gridView.visible = false; refreshGridView.start(); } @@ -1075,7 +1071,7 @@ FocusScope { } else if (event.matches(StandardKey.Undo)) { dir.undo(); } else if (event.matches(StandardKey.Refresh)) { - dir.refresh(); + dir.refresh(true); } else if (event.matches(StandardKey.SelectAll)) { positioner.setRangeSelected(0, count - 1); } else { @@ -1362,7 +1358,6 @@ FocusScope { onCommit: { if (targetItem) { - main.renamed = true; dir.rename(positioner.map(targetItem.index), text); targetItem = null; gridView.forceActiveFocus(); diff --git a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp index 46273225..7a40b692 100644 --- a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp +++ b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.cpp @@ -393,7 +393,7 @@ void FolderModel::setUrl(const QString &url) watcher = new QFileSystemWatcher(this); addDirectoriesRecursively(resolvedNewUrl.toString(), watcher); - connect(watcher, &QFileSystemWatcher::directoryChanged, this, &FolderModel::refresh); + connect(watcher, &QFileSystemWatcher::directoryChanged, this, [=]() { this->refresh(); } ); if (dragging()) { m_urlChangedWhileDragging = true; @@ -1719,7 +1719,7 @@ void FolderModel::createActions() QAction *refresh = new QAction(QIcon::fromTheme(QStringLiteral("view-refresh")), i18n("&Refresh View"), this); refresh->setShortcut(QKeySequence(QKeySequence::Refresh)); - connect(refresh, &QAction::triggered, this, &FolderModel::refresh); + connect(refresh, &QAction::triggered, this, [refresh, this]() { this->refresh(true); }); QAction *rename = KStandardAction::renameFile(this, &FolderModel::requestRename, this); QAction *trash = KStandardAction::moveToTrash(this, &FolderModel::moveSelectedToTrash, this); @@ -2113,11 +2113,11 @@ void FolderModel::pasteTo() KIO::paste(QApplication::clipboard()->mimeData(), urls.first()); } -void FolderModel::refresh() +void FolderModel::refresh(bool isExplicit) { m_errorString.clear(); Q_EMIT errorStringChanged(); - Q_EMIT hasRefreshed(); + Q_EMIT hasRefreshed(isExplicit); m_dirModel->dirLister()->updateDirectory(m_dirModel->dirLister()->url()); } diff --git a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.h b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.h index 6035afd3..67c1be6c 100644 --- a/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.h +++ b/plasma/plasmoids/src/desktopcontainment/src/plugins/folder/foldermodel.h @@ -243,7 +243,7 @@ public: Q_INVOKABLE void cut(); Q_INVOKABLE void deleteSelected(); Q_INVOKABLE void undo(); - Q_INVOKABLE void refresh(); + Q_INVOKABLE void refresh(bool isExplicit = false); Q_INVOKABLE void createFolder(); bool screenUsed(); @@ -284,7 +284,7 @@ Q_SIGNALS: void itemRenamed() const; void screenGeometryChanged() const; void selectionDone(); - void hasRefreshed(); + void hasRefreshed(bool isExplicit); protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; From 2f92c0cd4fd498bbced9046e7a826ea4b5f94c46 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 15 Aug 2025 15:50:18 +0200 Subject: [PATCH 130/222] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 99c6d83e..039c8773 100644 --- a/README.md +++ b/README.md @@ -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: - Arch Linux x64 and other Arch derivatives -- Plasma 6.4.3, KDE Frameworks 6.16.0, Qt 6.9.1 +- Plasma 6.4.4, KDE Frameworks 6.17.0, Qt 6.9.1 - 96 DPI scaling, multi monitor - X11, Wayland* From 005f3b569ca7725255ad5201ca1775fd6d7aa734 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 15 Aug 2025 19:08:29 +0200 Subject: [PATCH 131/222] Early documentation Currently unfinished, some documents are just stubs for now --- DOCUMENTATION.md | 218 ++++++++++++++++++++++++++++++++++++ docs/kwin/effectscpp.md | 7 ++ docs/kwin/effectsjs.md | 8 ++ docs/kwin/outline.md | 9 ++ docs/kwin/smod.md | 0 docs/kwin/smodpeekscript.md | 0 docs/kwin/tabbox.md | 8 ++ docs/misc/libplasma.md | 0 docs/plasma/kcmloader.md | 29 +++++ docs/plasma/lookandfeel.md | 14 +++ docs/plasma/plasmoids.md | 21 ++++ docs/plasma/sddm.md | 13 +++ docs/plasma/shell.md | 0 13 files changed, 327 insertions(+) create mode 100644 docs/kwin/effectscpp.md create mode 100644 docs/kwin/effectsjs.md create mode 100644 docs/kwin/outline.md create mode 100644 docs/kwin/smod.md create mode 100644 docs/kwin/smodpeekscript.md create mode 100644 docs/kwin/tabbox.md create mode 100644 docs/misc/libplasma.md create mode 100644 docs/plasma/kcmloader.md create mode 100644 docs/plasma/lookandfeel.md create mode 100644 docs/plasma/plasmoids.md create mode 100644 docs/plasma/sddm.md create mode 100644 docs/plasma/shell.md diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md index e69de29b..9ba4d95e 100644 --- a/DOCUMENTATION.md +++ b/DOCUMENTATION.md @@ -0,0 +1,218 @@ +# Documentation + +## Table of contents + +1. [Introduction](#intro) +2. [Frequently asked questions](#faq) +3. [List of components](#list-of-components) +4. [Development resources](#development) + + +## Introduction
+ +AeroThemePlasma is a project with a lot of moving parts, ranging from simple themes to entire codebases. This documentation aims to provide the following details: + +- Structure and list of components +- Usage guides +- Development resources + +Documentation is currently a WIP, so expect most things to not be present. + +## Frequently asked questions + +### Is this project intended to help Windows users migrate to Linux? + +No, not really. + +Ultimately, this project doesn't change the fact that the underlying operating system is still Linux, and ATP's workflow doesn't diverge greatly from the typical KDE & Linux workflow. The goal of AeroThemePlasma isn't to make a 1:1 Windows desktop replacement (even though it feels like that's the intention sometimes), and it's not particularly focused on getting Windows users to migrate. The primary goal of ATP is to keep Windows 7's Aero interface alive and adapt it for modern desktops on Linux. + +### Are we Wayland yet? + +Kinda. + +AeroThemePlasma should largely work on Wayland, save for some visual quirks that haven't been ironed out yet. There are certain issues that Wayland presents that makes development on it a bit cumbersome, as well as KWin lacking features that ATP relies on under X11. See [Wayland issues] (Coming soon) for specific details. + +### What about HiDPI? + +Currently AeroThemePlasma works best on 100% scaling, but work is slowly being made towards HiDPI support. However, there are some unavoidable issues with HiDPI that ATP can't get around unfortunately, such as [QTBUG-135833](https://bugreports.qt.io/browse/QTBUG-135833) and certain Wayland problems. + +### What distros are supported? + +Only Arch-based distributions are supported officially for AeroThemePlasma, and the installation scripts are written with Arch-based distributions in mind. Contributions related to supporting other distributions are welcome (in the form of providing dependencies, etc.), but I don't intend to maintain that support and keep it up to date. + +### Do you plan on recreating the file explorer (along with other Windows applications)? + +Most likely no. It's out of ATP's scope. In case this changes however, most likely the only recreation would be the file explorer. + +## List of components + +- Plasma + - Color scheme + - [Global theme](docs/plasma/lookandfeel.md) + - [KCM loader](docs/plasma/kcmloader.md) + - Layout template + - [Plasmoids](docs/plasma/plasmoids.md) + - [SDDM theme](docs/plasma/sddm.md) + - Seven-Black Plasma style + - [Shell](docs/plasma/shell.md) +- KWin + - [SMOD KDecoration3 style](docs/kwin/smod.md) + - [Effects (JS)](docs/kwin/effectsjs.md) + - [Effects (C++)](docs/kwin/effectscpp.md) + - [Tabbox switcher](docs/kwin/tabbox.md) + - [Window snap outline](docs/kwin/outline.md) + - [SMOD Peek script](docs/kwin/smodpeekscript.md) +- Misc + - Cursor theme + - Icon theme + - KInfoCenter branding + - Kvantum theme + - [Libplasma modifications](docs/misc/libplasma.md) + - Mimetype modifications + - Segoe UI fontconfig + - Shortcuts + - Sound theme + - User Account Control Polkit modification + +## Development resources + +## Useful commands + +### Restarting KDE + +When developing most things related to ATP (and KDE in general), it's useful to be able to quickly restart either Plasmashell or KWin on demand. Add the following shorthand commands to `~/.bashrc`: + +```bash +alias restart-plasma='setsid plasmashell --replace' +alias restart-kwin_x11='setsid kwin_x11 --replace' +alias restart-kwin_wayland='setsid kwin_wayland --replace' +``` + +Which can then be used like any other command in the terminal: + +```bash +restart-plasma +``` + +Note however that restarting KWin when using Wayland **will restart the entire compositor, which may result in certain applications being killed**. + +### Starting a nested Wayland session within X11 + +A KWin Wayland session can be loaded within an X11 environment using the following command: + +```bash +dbus-run-session kwin_wayland --width 1366 --height 768 --xwayland "plasmashell" +``` + +This spawns a nested Wayland session with the resolution of 1366x768, while also running an instance of the desktop shell. + +### Get window information + +For X11-specific window properties, use `xprop`. KWin can also query windows using the following command (works on both X11 and Wayland): + +```bash +qdbus6 org.kde.KWin /KWin queryWindowInfo +``` + +### KWin effects + +A list of KWin effects can be printed out using DBus: + +```bash +qdbus6 org.kde.KWin /Effects activeEffects +qdbus6 org.kde.KWin /Effects listOfEffects +qdbus6 org.kde.KWin /Effects loadedEffects +``` + +To check an effect's state: + +```bash +qdbus6 org.kde.KWin /Effects isEffectLoaded your_effect_name +qdbus6 org.kde.KWin /Effects isEffectSupported your_effect_name +``` + +To change an effect's loaded state: + +```bash +qdbus6 org.kde.KWin /Effects loadEffect your_effect_name +qdbus6 org.kde.KWin /Effects unloadEffect your_effect_name +qdbus6 org.kde.KWin /Effects toggleEffect your_effect_name +``` + +## Testing + +### SDDM + +```bash +sddm-greeter-qt6 --test-mode --theme /path/to/sddm/theme +``` + +One thing to keep in mind when testing SDDM themes is that user resources (such as locally installed icon themes, files present in the home directory, etc.) are available only when testing like this. SDDM will fail to load any user resources in a real scenario. QML UI components may also look different in test mode. + +### Splash screen + +```bash +ksplashqml --test --window /path/to/global/theme +``` + +The `--test` parameter can be omitted for slightly more realistic results. + +### Lock screen + +```bash +/usr/lib/kscreenlocker_greet --testing +``` + +Runs the lock screen in testing mode, opening a lock screen window for every display. + +### Qt test application + +```bash +kvantumpreview -style [qstyle] +``` + +Running without passing `-style` will simply load the application with the currently applied QStyle. + +## Logging + +### From the terminal + +Restarting Plasmashell or KWin as described above results in output being printed to `stdout` which is readable by the terminal emulator. By default, `kwin_wayland` doesn't output logs to `stdout` by default, and in that case it's difficult to get logs this way. + +As for KCMs, their respective logs can be retrieved by running System settings from the terminal: + +```bash +systemsettings +``` + +### Getting logs from KSystemLog + +Alternatively, logs can be retrieved graphically from systemd's journal by using [KSystemLog](https://apps.kde.org/ksystemlog/). + + +## Useful tools + +- [AeroGlassPane](https://gitgud.io/wackyideas/aero-glass-pane) - Useful for testing AeroGlassBlur and SMOD Decorations +- [Heaptrack](https://github.com/KDE/heaptrack) - Heap memory profiler, useful for detecting memory leaks and call stacks +- [KAppTemplate](https://apps.kde.org/kapptemplate/) - Templates for Qt and Plasma projects +- [KDebugSettings](https://apps.kde.org/kdebugsettings/) - Configures the verbosity of log output for KDE applications/services +- [Kirigami Gallery](https://apps.kde.org/kirigami2.gallery/) - Useful for viewing color groups and color sets +- [KSystemLog](https://apps.kde.org/ksystemlog/) - General logging application +- [msstyleEditor](https://github.com/nptr/msstyleEditor) - Useful for viewing and modifying msstyle themes on Windows +- [Plasma SDK](https://github.com/KDE/plasma-sdk) - Features several useful applications for Plasma development +- [Qt Creator](https://www.qt.io/product/development-tools) - IDE for Qt applications, useful for QtWidgets codebases and standalone KDE projects +- [RccExtended](https://github.com/zedxxx/rccextended) - Required for editing SMOD resource files +- [ResourceHacker](https://www.angusj.com/resourcehacker/) - Useful for viewing and extracting resources from Windows + +## External references + +- Color scheme ([KDE docs](https://docs.kde.org/stable5/en/plasma-workspace/kcontrol/colors/index.html), [video guide](https://www.youtube.com/watch?v=6VW--o7CEEA)) +- Cursor theme ([Freedesktop specification](https://www.freedesktop.org/wiki/Specifications/cursor-spec/)) +- Icon theme ([Freedesktop](https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html) [specification](https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html)) +- [KDE Developer Platform](https://develop.kde.org/) - Useful for pretty much everything involving ATP (Plasmoids, KWin effects, APIs, Plasma styles, etc.) +- Kvantum theme* ([Kvantum](https://raw.githubusercontent.com/tsujan/Kvantum/master/Kvantum/doc/Theme-Making.pdf) [documentation](https://raw.githubusercontent.com/tsujan/Kvantum/master/Kvantum/doc/Theme-Config.pdf)) +- MSStyles ([msstyleEditor](https://github.com/nptr/msstyleEditor), Windows Style Builder) +- [Qt Documentation](https://doc.qt.io/) - Essential for Qt development +- Sound theme ([Freedesktop specification](https://eode.pages.freedesktop.org/xdg-specs/sound-theme-spec/sound-theme-spec-latest.html)) + +*While Kvantum won't be discussed here, one important detail worth mentioning is that Kvantum does not respect KDE's color schemes for the most part and that this sometimes leads to unexpected visual results. Still, it's recommended to apply a KDE color scheme alongside Kvantum for maximum compatibility. diff --git a/docs/kwin/effectscpp.md b/docs/kwin/effectscpp.md new file mode 100644 index 00000000..50865050 --- /dev/null +++ b/docs/kwin/effectscpp.md @@ -0,0 +1,7 @@ +# KWin C++ Effects list + +- Aero Glide (aeroglide) +- Passive cursor launch feedback (startupfeedback) +- SMOD Glow (smodglow) +- SMOD Snap (kwin-effect-smodsnap-v2) +- AeroGlassBlur (kde-effects-aeroglassblur) diff --git a/docs/kwin/effectsjs.md b/docs/kwin/effectsjs.md new file mode 100644 index 00000000..88c2d38b --- /dev/null +++ b/docs/kwin/effectsjs.md @@ -0,0 +1,8 @@ +# KWin JS Effects List + +- SevenTasks thumbnail animations (seventasks-thumbnails) +- Dim Screen (dimscreen) +- Login (login) +- SMOD Peek Effect (smodpeekeffect) +- Squash minimize animation (squash) +- Fading popups (fadingpopups) diff --git a/docs/kwin/outline.md b/docs/kwin/outline.md new file mode 100644 index 00000000..28552519 --- /dev/null +++ b/docs/kwin/outline.md @@ -0,0 +1,9 @@ +# Outline + +## Details about the outline window + +The reflection texture is loaded from the standard SMOD directory, and it is rendered using [ShaderEffectSource](https://doc.qt.io/qt-6/qml-qtquick-shadereffectsource.html). This workaround is done because the outline that appears is not actually representative of the actual outline window belonging to the compositor. Instead, the visible outline is rendered using QML, hence the need for workarounds like this. The issues with this are: + +1. The reflection texture in general isn't consistent with the AeroGlassBlur +2. Performance is suboptimal and results in choppy animations and freezes in some cases +3. The underlying C++ code does not provide a way to expose the visible outline's window geometry, or ways to set a custom blur region to the underlying window, making it impossible to approach this in any other way for now. diff --git a/docs/kwin/smod.md b/docs/kwin/smod.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/kwin/smodpeekscript.md b/docs/kwin/smodpeekscript.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/kwin/tabbox.md b/docs/kwin/tabbox.md new file mode 100644 index 00000000..324f1bee --- /dev/null +++ b/docs/kwin/tabbox.md @@ -0,0 +1,8 @@ +# Tabbox switchers (Alt+Tab switchers) + +1. Thumbnail Seven +2. Flipswitch (3D) + +## Notes about Thumbnail Seven + +- Thumbnail Seven replaces the default behavior of the "Show Desktop" entry with the built-in "MinimizeAll" KWin script by querying the item that's supposed to be activated and checking if it is the "Show Desktop" entry. This is done with a [DBus call](https://gitgud.io/wackyideas/aerothemeplasma/-/blob/master/kwin/tabbox/thumbnail_seven/contents/ui/main.qml?ref_type=heads#L28) from within the QML code itself. diff --git a/docs/misc/libplasma.md b/docs/misc/libplasma.md new file mode 100644 index 00000000..e69de29b diff --git a/docs/plasma/kcmloader.md b/docs/plasma/kcmloader.md new file mode 100644 index 00000000..d9903dcf --- /dev/null +++ b/docs/plasma/kcmloader.md @@ -0,0 +1,29 @@ +# KCM Loader + +KCM Loader is a small application that can load arbitrary KCMs and open them as separate dialog windows using [KCMultiDialog](https://api.kde.org/frameworks/kcmutils/html/classKCMultiDialog.html). + +### Usage: + +KCM Loader takes two arguments: + +1. Relative path to a KCM's `.so` file. The path is relative to `/usr/lib/qt6/plugins/` +2. Icon name from the icon theme + +Example: + +```bash +aerothemeplasma-kcmloader org.kde.kdecoration3.kcm/kcm_smoddecoration.so application-x-theme +``` + +It's important to note that it isn't necessary to explicitly specify `kwin-x11` in the path when trying to load a KWin effect's KCM. KCM Loader will automatically load the X11 variant of the KCM if the application is executed in an X11 session. + +### Custom behaviors + +Upon loading a KCM with KCM Loader, it will pass a [KPluginMetaData](https://api.kde.org/frameworks/kcoreaddons/html/classKPluginMetaData.html) instance with a custom JSON object. Currently, the JSON object only has a boolean property `standalone` set to `true`, but in theory the JSON object could have any arbitrary data attached to it. Normally (or at least, based on experience), KCMs tend to ignore the `KPluginMetaData` object that's passed to them, but with this mechanism we can write KCMs that can respond differently based on the provided JSON information. + +The primary example of this mechanism in use is quick access to AeroGlassBlur's accent color page. Normally, it is accessed by opening the System settings, navigating to the KCM, and clicking on the link that opens the page. With KCM Loader, however, the KCM will read and recognize the `standalone` property from the JSON object, and automatically open the accent color page. + +### Future plans + +- Turn this into a generic C++ library that can be accessed from QML or other parts of C++ code +- Expand the custom behavior mechanism to allow for arbitrary data that KCMs can interpret diff --git a/docs/plasma/lookandfeel.md b/docs/plasma/lookandfeel.md new file mode 100644 index 00000000..3a4d394e --- /dev/null +++ b/docs/plasma/lookandfeel.md @@ -0,0 +1,14 @@ +# Global Theme (Look and Feel) + +Components that are relevant to ATP: + +- Splash screen +- Logout screen + +## Splash screen details + +- The background image is loaded from ATP's SDDM theme (`/usr/share/sddm/themes/sddm-theme-mod/bgtexture.jpg`) + +## Logout screen details + +The logout screen has been repurposed into the Ctrl+Alt+Del screen, as the logout screen gets spawned when using the shortcut, and a logout screen wasn't a thing after Windows XP. diff --git a/docs/plasma/plasmoids.md b/docs/plasma/plasmoids.md new file mode 100644 index 00000000..f742ad79 --- /dev/null +++ b/docs/plasma/plasmoids.md @@ -0,0 +1,21 @@ +# Plasmoids + +List of plasmoids: + +- Standalone, with C++ components: + - Desktop containment (io.gitgud.wackyideas.desktopcontainment) + - SevenStart (io.gitgud.wackyideas.SevenStart) + - SevenTasks (io.gitgud.wackyideas.seventasks) + - Volume Mixer (io.gitgud.wackyideas.volume) + +- Standalone, without C++ components: + - Network Manager (io.gitgud.wackyideas.networkmanagement) + - Show Desktop (Aero) (io.gitgud.wackyideas.win7showdesktop) + - Digital Clock Lite (Aero) (io.gitgud.wackyideas.digitalclocklite) + - Battery and Power (io.gitgud.wackyideas.battery) + - Keyboard Layout Switcher (io.gitgud.wackyideas.keyboardlayout) + +- Direct modifications of KDE Plasmoids: + - System Tray (org.kde.plasma.systemtray) + - Notifications (org.kde.plasma.notifications) + - Panel (org.kde.panel) diff --git a/docs/plasma/sddm.md b/docs/plasma/sddm.md new file mode 100644 index 00000000..49d38d8b --- /dev/null +++ b/docs/plasma/sddm.md @@ -0,0 +1,13 @@ +# SDDM Theme details + +The SDDM theme features the following configuration options: + +- background - Background wallpaper +- branding - Branding logo +- forceUserSelect - Whether to always show the user selection page or not +- enableStartup - Play the Vista-style animation on the first time during boot +- playSound - Play the startup sound during boot + +The startup animation plays at the beginning as SDDM is loaded for the first time during boot, and won't start again until the computer reboots. The way this is achieved is by checking for the existence of the file `/tmp/sddm.startup`, and the animation is played if the file doesn't exist. As the animation gets played, the file is also subsequently created, preventing the animation from playing again in cases where the user logs out of their session back into SDDM. + +The sound effect that plays during startup gets the same treatment as described above. Note that the sound effect gets played on whatever (default) audio output Qt has access to during startup, which may lead to undesirable results. diff --git a/docs/plasma/shell.md b/docs/plasma/shell.md new file mode 100644 index 00000000..e69de29b From 1b329e72f09ffb6c6194f602aadbf5cd764afb38 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Fri, 15 Aug 2025 21:25:50 +0200 Subject: [PATCH 132/222] Fix notifications ignoring DnD --- .../contents/ui/global/Globals.qml | 16 ++++++++++++++++ .../contents/ui/main.qml | 9 +++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/plasma/plasmoids/org.kde.plasma.notifications/contents/ui/global/Globals.qml b/plasma/plasmoids/org.kde.plasma.notifications/contents/ui/global/Globals.qml index 75693491..02fcb0b5 100644 --- a/plasma/plasmoids/org.kde.plasma.notifications/contents/ui/global/Globals.qml +++ b/plasma/plasmoids/org.kde.plasma.notifications/contents/ui/global/Globals.qml @@ -34,6 +34,11 @@ QtObject { property bool inhibited: false onInhibitedChanged: { + if (!inhibited) { + const urgency = notificationSettings.lowPriorityHistory ? NotificationManager.Notifications.LowUrgency : NotificationManager.Notifications.NormalUrgency; + popupNotificationsModel.showInhibitionSummary(urgency, notificationSettings.historyBlacklistedApplications, notificationSettings.historyBlacklistedServices); + } + var pa = pulseAudio.item; if (!pa) { return; @@ -175,6 +180,7 @@ QtObject { } positionPopups() } + onObstructingDialogChanged: repositionTimer.start() // The raw width of the popup's content item, the Dialog itself adds some margins // Make it wider when on the top or the bottom center, since there's more horizontal @@ -199,6 +205,11 @@ QtObject { ratePlasmoids(); } + function forget(plasmoid) { + // this doesn't Q_EMIT a change, only in ratePlasmoids() it will detect the change + globals.plasmoidItems = globals.plasmoidItems.filter(p => p !== plasmoid); + ratePlasmoids(); + } // Sorts plasmoids based on a heuristic to find a suitable plasmoid to follow when placing popups function ratePlasmoids() { var plasmoidScore = function(plasmoidItem) { @@ -266,6 +277,9 @@ QtObject { if (notificationSettings.notificationsInhibitedByApplication) { inhibited |= true; } + if (notificationSettings.inhibitNotificationsWhenFullscreen) { + inhibited |= notificationSettings.fullscreenFocused; + } if (notificationSettings.inhibitNotificationsWhenScreensMirrored) { inhibited |= notificationSettings.screensMirrored; @@ -278,6 +292,7 @@ QtObject { function revokeInhibitions() { notificationSettings.notificationsInhibitedUntil = undefined; notificationSettings.revokeApplicationInhibitions(); + notificationSettings.fullscreenFocused = false; // overrules current mirrored screen setup, updates again when screen configuration changes notificationSettings.screensMirrored = false; @@ -405,6 +420,7 @@ QtObject { limit: plasmoid ? (Math.ceil(globals.screenRect.height / (Kirigami.Units.iconSizes.small * 4))) : 0 showExpired: false showDismissed: false + showAddedDuringInhibition: false blacklistedDesktopEntries: notificationSettings.popupBlacklistedApplications blacklistedNotifyRcNames: notificationSettings.popupBlacklistedServices whitelistedDesktopEntries: globals.inhibited ? notificationSettings.doNotDisturbPopupWhitelistedApplications : [] diff --git a/plasma/plasmoids/org.kde.plasma.notifications/contents/ui/main.qml b/plasma/plasmoids/org.kde.plasma.notifications/contents/ui/main.qml index 221c0c50..12e69b18 100644 --- a/plasma/plasmoids/org.kde.plasma.notifications/contents/ui/main.qml +++ b/plasma/plasmoids/org.kde.plasma.notifications/contents/ui/main.qml @@ -39,6 +39,7 @@ PlasmoidItem { readonly property int effectiveStatus: historyModel.activeJobsCount > 0 || historyModel.unreadNotificationsCount > 0 + || historyModel.dismissedResidentNotificationsCount > 0 || Globals.inhibited ? PlasmaCore.Types.ActiveStatus : PlasmaCore.Types.PassiveStatus onEffectiveStatusChanged: { @@ -176,6 +177,7 @@ PlasmoidItem { groupMode: NotificationManager.Notifications.GroupApplicationsFlat groupLimit: 2 expandUnread: true + ignoreBlacklistDuringInhibition: true blacklistedDesktopEntries: notificationSettings.historyBlacklistedApplications blacklistedNotifyRcNames: notificationSettings.historyBlacklistedServices urgencies: { @@ -187,7 +189,7 @@ PlasmoidItem { return urgencies; } - onCountChanged: count => { + onCountChanged: { if (count === 0) { closePlasmoid(); } @@ -209,7 +211,7 @@ PlasmoidItem { } function closePlasmoid() { - if (root.hideOnWindowDeactivate) { + if (root.hideOnWindowDeactivate && !(root.width > root.switchWidth && root.height > root.switchHeight)) { root.expanded = false; } } @@ -263,4 +265,7 @@ PlasmoidItem { // and Networks applets Plasmoid.setInternalAction("configure", configureAction) } + Component.onDestruction: { + Globals.forget(root); + } } From 791db3a5125de1ecc828c6a9f0b5d72bf3adc67f Mon Sep 17 00:00:00 2001 From: wackyideas Date: Thu, 28 Aug 2025 22:18:24 +0200 Subject: [PATCH 133/222] Attempt to fix system tray bugs --- .../org.kde.plasma.systemtray/contents/ui/main.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml index 6c723c71..e10aeb15 100644 --- a/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml +++ b/plasma/plasmoids/org.kde.plasma.systemtray/contents/ui/main.qml @@ -155,7 +155,7 @@ ContainmentItem { } Timer { id: updateTimer - interval: 100 + interval: 50 onTriggered: { root.hiddenLayout.model.invalidateFilter() shownItemsModel.invalidateFilter(); @@ -211,10 +211,10 @@ ContainmentItem { includeByDefault: true onChanged: (removed, inserted) => { - if(inserted.length > 0) { + /*if(inserted.length > 0) { root.hiddenLayout.model.invalidateFilter() shownItemsModel.invalidateFilter(); - } + }*/ activeModel.sort(); updateTimer.start(); } From 81fb89209a20b1493fb5afeebaa7e7a2befd9388 Mon Sep 17 00:00:00 2001 From: Patrick Wu Date: Tue, 2 Sep 2025 23:17:03 +0800 Subject: [PATCH 134/222] add config section for Classes matching regular expressions that should not blur --- .../kde-effects-aeroglassblur/src/blur.cpp | 58 +++++++++++++------ .../kde-effects-aeroglassblur/src/blur.h | 2 + .../kde-effects-aeroglassblur/src/blur.kcfg | 3 + .../src/kcm/blur_config.cpp | 1 - .../src/kcm/blur_config.ui | 16 ++++- 5 files changed, 60 insertions(+), 20 deletions(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 22a38d22..56d8e1a6 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -354,6 +355,7 @@ void BlurEffect::reconfigure(ReconfigureFlags flags) m_blurMatching = BlurConfig::blurMatching(); m_blurNonMatching = BlurConfig::blurNonMatching(); m_windowClasses = BlurConfig::windowClasses().split("\n"); + m_noBlurWindowClasses = BlurConfig::noBlurWindowClasses().split("\n"); m_windowClassesColorization = BlurConfig::excludedColorization().split("\n"); m_firefoxWindows = BlurConfig::blurFirefox().split("\n"); @@ -462,28 +464,30 @@ void BlurEffect::updateBlurRegion(EffectWindow *w) frame = decorationBlurRegion(w); } - // https://github.com/taj-ny/kwin-effects-forceblur/pull/128/files - const auto isX11WithCSD = effects->xcbConnection() && (w->frameGeometry() != w->bufferGeometry()); - if (shouldForceBlur(w) && !(w->isTooltip())) { + if (!shouldNotBlur(w)) { + // https://github.com/taj-ny/kwin-effects-forceblur/pull/128/files + const auto isX11WithCSD = effects->xcbConnection() && (w->frameGeometry() != w->bufferGeometry()); + if (shouldForceBlur(w) && !(w->isTooltip())) { - if(!isX11WithCSD) - { - content = w->expandedGeometry().translated(-w->x(), -w->y()).toRect(); + if(!isX11WithCSD) + { + content = w->expandedGeometry().translated(-w->x(), -w->y()).toRect(); + } + if (isX11WithCSD || w->decoration()) + { + frame = w->frameGeometry().translated(-w->x(), -w->y()).toRect(); + } } - if (isX11WithCSD || w->decoration()) - { - frame = w->frameGeometry().translated(-w->x(), -w->y()).toRect(); - } - } - if(isFirefoxWindowValid(w)) - { - if(!(content.has_value() || frame.has_value())) + if(isFirefoxWindowValid(w)) { - if(isX11WithCSD) - frame = applyBlurRegion(w, true); - else - content = applyBlurRegion(w); + if(!(content.has_value() || frame.has_value())) + { + if(isX11WithCSD) + frame = applyBlurRegion(w, true); + else + content = applyBlurRegion(w); + } } } @@ -813,6 +817,21 @@ bool BlurEffect::shouldForceBlur(const EffectWindow *w) const return (matches && m_blurMatching) || (!matches && m_blurNonMatching); } +bool BlurEffect::shouldNotBlur(const EffectWindow *w) const +{ + const QString resourceName = w->window()->resourceName(); + const QString resourceClass = w->window()->resourceClass(); + + for (const QString &pattern : m_noBlurWindowClasses) { + QRegularExpression regex(pattern); + if (regex.match(resourceName).hasMatch() || regex.match(resourceClass).hasMatch()) { + return true; + } + } + + return false; +} + void BlurEffect::drawWindow(const RenderTarget &renderTarget, const RenderViewport &viewport, EffectWindow *w, int mask, const QRegion ®ion, WindowPaintData &data) { blur(renderTarget, viewport, w, mask, region, data); @@ -847,6 +866,9 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi BlurEffectData &blurInfo = it->second; BlurRenderData &renderInfo = blurInfo.render[m_currentScreen]; + if (shouldNotBlur(w)) { + return; + } if (!shouldBlur(w, mask, data)) { return; } diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h index 020a0026..a33fa028 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.h @@ -98,6 +98,7 @@ private: bool decorationSupportsBlurBehind(const EffectWindow *w) const; bool shouldBlur(const EffectWindow *w, int mask, const WindowPaintData &data) const; bool shouldForceBlur(const EffectWindow *w) const; + bool shouldNotBlur(const EffectWindow *w) const; bool scaledOrTransformed(const EffectWindow *w, int mask, const WindowPaintData &data) const; bool shouldHaveCornerGlow(const EffectWindow *w) const; void updateBlurRegion(EffectWindow *w); @@ -183,6 +184,7 @@ private: int m_offset; int m_expandSize; QStringList m_windowClasses; + QStringList m_noBlurWindowClasses; QStringList m_windowClassesColorization; QStringList m_firefoxWindows; diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg index cbf570f7..d2120507 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.kcfg @@ -11,6 +11,9 @@ + + + firefox diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp index 21c03640..b3806d44 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.cpp @@ -35,7 +35,6 @@ BlurEffectConfig::BlurEffectConfig(QObject *parent, const KPluginMetaData &data) ui.invisibleWidgets->setVisible(false); ui.debugValues->setVisible(false); - ui.debugValues->setVisible(false); ui.kcfg_BlurMatching->setVisible(false); m_dialog = new QFileDialog(); diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui index 268f2ce8..70be00bd 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui @@ -332,7 +332,7 @@ - + @@ -347,6 +347,13 @@ + + + + Regex matching Classes That should not apply blur: + + + @@ -361,6 +368,13 @@ + + + + One window class per line. + + + From a648dd7cffd55a77f8012516b1b6b9a0f8ed3901 Mon Sep 17 00:00:00 2001 From: Patrick Wu Date: Tue, 2 Sep 2025 23:44:55 +0800 Subject: [PATCH 135/222] empty line should be ignored --- kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp index 56d8e1a6..a4f1fca9 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/blur.cpp @@ -823,6 +823,9 @@ bool BlurEffect::shouldNotBlur(const EffectWindow *w) const const QString resourceClass = w->window()->resourceClass(); for (const QString &pattern : m_noBlurWindowClasses) { + if (pattern.isEmpty()) { + continue; + } QRegularExpression regex(pattern); if (regex.match(resourceName).hasMatch() || regex.match(resourceClass).hasMatch()) { return true; From e866a44e65f5e03068fab7ae57b41c5ab25f95c5 Mon Sep 17 00:00:00 2001 From: Patrick Wu Date: Tue, 2 Sep 2025 23:45:51 +0800 Subject: [PATCH 136/222] small rewording --- .../kde-effects-aeroglassblur/src/kcm/blur_config.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui index 70be00bd..9c3a8318 100755 --- a/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui +++ b/kwin/effects_cpp/kde-effects-aeroglassblur/src/kcm/blur_config.ui @@ -350,7 +350,7 @@ - Regex matching Classes That should not apply blur: + Classes of windows to not apply blur (regex): From 05c6680779d76d368ad0c1dcb7c1eeb66be6a86a Mon Sep 17 00:00:00 2001 From: Lily Garcia Date: Wed, 3 Sep 2025 21:53:17 -0400 Subject: [PATCH 137/222] Fix SDDM password input missing --- plasma/sddm/sddm-theme-mod/Main.qml | 39 ++++++++++------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/plasma/sddm/sddm-theme-mod/Main.qml b/plasma/sddm/sddm-theme-mod/Main.qml index 721ae27a..611ae3ba 100755 --- a/plasma/sddm/sddm-theme-mod/Main.qml +++ b/plasma/sddm/sddm-theme-mod/Main.qml @@ -601,15 +601,6 @@ Item } } - - Item - { - id: loginbox - - anchors.horizontalCenter: parent.horizontalCenter - anchors.top: userpic.bottom - anchors.topMargin: 4 - QQC2.Label { id: userNameLabel @@ -636,34 +627,30 @@ Item } } - QQC2.TextField + Item { - id: password + id: loginbox - anchors.top: userNameLabel.bottom anchors.horizontalCenter: parent.horizontalCenter + anchors.top: userNameLabel.bottom anchors.topMargin: 8 width: 225 - height: 25 + height: 24 - leftPadding: 7 - font.pointSize: - { - if (password.length > 0) - { - return 7 - } + QQC2.TextField { + id: password - return 9 - } - //font.family: mainfont.name + anchors.fill: parent + + bottomPadding: 0 + topPadding: 0 + + font.pointSize: 9 placeholderTextColor: "#555" - - background: Image - { + background: Image { source: { if (password.focus) return "Assets/input-focus.png" From 807fca491c11e28893e57c3e6bef22de2986c343 Mon Sep 17 00:00:00 2001 From: Lily Garcia Date: Wed, 3 Sep 2025 21:55:24 -0400 Subject: [PATCH 138/222] Fix SDDM user label not rendering --- plasma/sddm/sddm-theme-mod/Main.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plasma/sddm/sddm-theme-mod/Main.qml b/plasma/sddm/sddm-theme-mod/Main.qml index 611ae3ba..beb21bfc 100755 --- a/plasma/sddm/sddm-theme-mod/Main.qml +++ b/plasma/sddm/sddm-theme-mod/Main.qml @@ -606,16 +606,16 @@ Item id: userNameLabel anchors.horizontalCenter: parent.horizontalCenter + anchors.top: userpic.bottom text: "" color: "white" - //font.family: mainfont.name font.pixelSize: 23 font.kerning: false renderType: Text.NativeRendering font.hintingPreference: Font.PreferVerticalHinting - //font.weight: Font.Medium + font.weight: Font.Medium layer.enabled: true layer.effect: DropShadow From 50424edcd74ad83805b0cd70fa6c59b793f7ae52 Mon Sep 17 00:00:00 2001 From: Lily Garcia Date: Wed, 3 Sep 2025 21:55:54 -0400 Subject: [PATCH 139/222] Fix session start audio not playing --- plasma/sddm/sddm-theme-mod/Main.qml | 53 +++++++++++++++-------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/plasma/sddm/sddm-theme-mod/Main.qml b/plasma/sddm/sddm-theme-mod/Main.qml index beb21bfc..76974142 100755 --- a/plasma/sddm/sddm-theme-mod/Main.qml +++ b/plasma/sddm/sddm-theme-mod/Main.qml @@ -88,8 +88,9 @@ Item MediaPlayer { id: startupSound property bool playSound: !executable.fileExists && config.boolValue("playSound") - audioOutput: AudioOutput {} - //autoPlay: false + audioOutput: AudioOutput { + volume: 1.0 + } source: "Assets/session-start.wav" } Component @@ -600,42 +601,42 @@ Item anchors.centerIn: parent } } + + QQC2.Label + { + id: userNameLabel - QQC2.Label - { - id: userNameLabel - - anchors.horizontalCenter: parent.horizontalCenter + anchors.horizontalCenter: parent.horizontalCenter anchors.top: userpic.bottom - text: "" - color: "white" + text: "" + color: "white" - font.pixelSize: 23 - font.kerning: false - renderType: Text.NativeRendering - font.hintingPreference: Font.PreferVerticalHinting + font.pixelSize: 23 + font.kerning: false + renderType: Text.NativeRendering + font.hintingPreference: Font.PreferVerticalHinting font.weight: Font.Medium - layer.enabled: true - layer.effect: DropShadow - { - verticalOffset: 1 - color: "#ef000000" - radius: 9 - samples: 80 - } + layer.enabled: true + layer.effect: DropShadow + { + verticalOffset: 1 + color: "#ef000000" + radius: 9 + samples: 80 } + } Item - { + { id: loginbox - anchors.horizontalCenter: parent.horizontalCenter + anchors.horizontalCenter: parent.horizontalCenter anchors.top: userNameLabel.bottom - anchors.topMargin: 8 - - width: 225 + anchors.topMargin: 8 + + width: 225 height: 24 From cf2745aca3acc8e3e9dba5a47c278f278f89454e Mon Sep 17 00:00:00 2001 From: catpswin56 Date: Tue, 9 Sep 2025 19:52:20 -0300 Subject: [PATCH 140/222] Add support for all the other decoration buttons in SMOD decoration theme This also adds button grouping support and fixes the caption glow not being updated correctly. --- kwin/decoration/CMakeLists.txt | 3 +- kwin/decoration/install.sh | 0 kwin/decoration/kdecoration/breezebutton.cpp | 2 + kwin/decoration/kdecoration/breezebutton.h | 12 +- .../kdecoration/breezedecoration.cpp | 44 +- .../decoration/kdecoration/breezedecoration.h | 11 +- kwin/decoration/kdecoration/sizingmargins.cpp | 96 ++ kwin/decoration/kdecoration/sizingmargins.h | 15 + .../kdecoration/smod/smodbutton.cpp | 990 ++++++++----- .../kdecoration/smod/smoddecoration.cpp | 5 +- kwin/decoration/po/ar/breeze_kwin_deco.po | 593 -------- kwin/decoration/po/ar/breeze_style_config.po | 227 --- kwin/decoration/po/ast/breeze_kwin_deco.po | 414 ------ kwin/decoration/po/ast/breeze_style_config.po | 194 --- kwin/decoration/po/az/breeze_kwin_deco.po | 466 ------ kwin/decoration/po/az/breeze_style_config.po | 220 --- kwin/decoration/po/bg/breeze_kwin_deco.po | 417 ------ kwin/decoration/po/bg/breeze_style_config.po | 198 --- kwin/decoration/po/bs/breeze_kwin_deco.po | 465 ------ kwin/decoration/po/bs/breeze_style_config.po | 232 --- kwin/decoration/po/ca/breeze_kwin_deco.po | 424 ------ kwin/decoration/po/ca/breeze_style_config.po | 202 --- .../po/ca@valencia/breeze_kwin_deco.po | 424 ------ .../po/ca@valencia/breeze_style_config.po | 202 --- kwin/decoration/po/cs/breeze_kwin_deco.po | 416 ------ kwin/decoration/po/cs/breeze_style_config.po | 201 --- kwin/decoration/po/da/breeze_kwin_deco.po | 484 ------- kwin/decoration/po/da/breeze_style_config.po | 218 --- kwin/decoration/po/de/breeze_kwin_deco.po | 605 -------- kwin/decoration/po/de/breeze_style_config.po | 247 ---- kwin/decoration/po/el/breeze_kwin_deco.po | 603 -------- kwin/decoration/po/el/breeze_style_config.po | 228 --- kwin/decoration/po/en_GB/breeze_kwin_deco.po | 472 ------ .../po/en_GB/breeze_style_config.po | 248 ---- kwin/decoration/po/eo/breeze_kwin_deco.po | 418 ------ kwin/decoration/po/eo/breeze_style_config.po | 195 --- kwin/decoration/po/es/breeze_kwin_deco.po | 480 ------ kwin/decoration/po/es/breeze_style_config.po | 258 ---- kwin/decoration/po/et/breeze_kwin_deco.po | 477 ------ kwin/decoration/po/et/breeze_style_config.po | 218 --- kwin/decoration/po/eu/breeze_kwin_deco.po | 472 ------ kwin/decoration/po/eu/breeze_style_config.po | 223 --- kwin/decoration/po/fi/breeze_kwin_deco.po | 485 ------- kwin/decoration/po/fi/breeze_style_config.po | 249 ---- kwin/decoration/po/fr/breeze_kwin_deco.po | 491 ------- kwin/decoration/po/fr/breeze_style_config.po | 253 ---- kwin/decoration/po/gl/breeze_kwin_deco.po | 477 ------ kwin/decoration/po/gl/breeze_style_config.po | 225 --- kwin/decoration/po/he/breeze_kwin_deco.po | 467 ------ kwin/decoration/po/he/breeze_style_config.po | 221 --- kwin/decoration/po/hi/breeze_kwin_deco.po | 454 ------ kwin/decoration/po/hi/breeze_style_config.po | 206 --- kwin/decoration/po/hu/breeze_kwin_deco.po | 609 -------- kwin/decoration/po/hu/breeze_style_config.po | 226 --- kwin/decoration/po/ia/breeze_kwin_deco.po | 602 -------- kwin/decoration/po/ia/breeze_style_config.po | 219 --- kwin/decoration/po/id/breeze_kwin_deco.po | 474 ------ kwin/decoration/po/id/breeze_style_config.po | 223 --- kwin/decoration/po/is/breeze_kwin_deco.po | 417 ------ kwin/decoration/po/is/breeze_style_config.po | 195 --- kwin/decoration/po/it/breeze_kwin_deco.po | 477 ------ kwin/decoration/po/it/breeze_style_config.po | 251 ---- kwin/decoration/po/ja/breeze_kwin_deco.po | 427 ------ kwin/decoration/po/ja/breeze_style_config.po | 195 --- kwin/decoration/po/ka/breeze_kwin_deco.po | 448 ------ kwin/decoration/po/ka/breeze_style_config.po | 195 --- kwin/decoration/po/ko/breeze_kwin_deco.po | 472 ------ kwin/decoration/po/ko/breeze_style_config.po | 245 ---- kwin/decoration/po/lt/breeze_kwin_deco.po | 475 ------ kwin/decoration/po/lt/breeze_style_config.po | 244 ---- kwin/decoration/po/ml/breeze_kwin_deco.po | 415 ------ kwin/decoration/po/ml/breeze_style_config.po | 195 --- kwin/decoration/po/nb/breeze_kwin_deco.po | 417 ------ kwin/decoration/po/nb/breeze_style_config.po | 196 --- kwin/decoration/po/nds/breeze_kwin_deco.po | 600 -------- kwin/decoration/po/nds/breeze_style_config.po | 229 --- kwin/decoration/po/nl/breeze_kwin_deco.po | 479 ------ kwin/decoration/po/nl/breeze_style_config.po | 250 ---- kwin/decoration/po/nn/breeze_kwin_deco.po | 421 ------ kwin/decoration/po/nn/breeze_style_config.po | 196 --- kwin/decoration/po/pa/breeze_kwin_deco.po | 434 ------ kwin/decoration/po/pa/breeze_style_config.po | 213 --- kwin/decoration/po/pl/breeze_kwin_deco.po | 474 ------ kwin/decoration/po/pl/breeze_style_config.po | 250 ---- kwin/decoration/po/pt/breeze_kwin_deco.po | 430 ------ kwin/decoration/po/pt/breeze_style_config.po | 191 --- kwin/decoration/po/pt_BR/breeze_kwin_deco.po | 466 ------ .../po/pt_BR/breeze_style_config.po | 222 --- kwin/decoration/po/ro/breeze_kwin_deco.po | 464 ------ kwin/decoration/po/ro/breeze_style_config.po | 224 --- kwin/decoration/po/ru/breeze_kwin_deco.po | 1281 ----------------- kwin/decoration/po/ru/breeze_style_config.po | 228 --- kwin/decoration/po/se/breeze_kwin_deco.po | 416 ------ kwin/decoration/po/sk/breeze_kwin_deco.po | 476 ------ kwin/decoration/po/sk/breeze_style_config.po | 249 ---- kwin/decoration/po/sl/breeze_kwin_deco.po | 475 ------ kwin/decoration/po/sl/breeze_style_config.po | 252 ---- kwin/decoration/po/sr/breeze_kwin_deco.po | 478 ------ kwin/decoration/po/sr/breeze_style_config.po | 235 --- .../po/sr@ijekavian/breeze_kwin_deco.po | 478 ------ .../po/sr@ijekavian/breeze_style_config.po | 235 --- .../po/sr@ijekavianlatin/breeze_kwin_deco.po | 478 ------ .../sr@ijekavianlatin/breeze_style_config.po | 235 --- .../po/sr@latin/breeze_kwin_deco.po | 478 ------ .../po/sr@latin/breeze_style_config.po | 235 --- kwin/decoration/po/sv/breeze_kwin_deco.po | 613 -------- kwin/decoration/po/sv/breeze_style_config.po | 249 ---- kwin/decoration/po/ta/breeze_kwin_deco.po | 449 ------ kwin/decoration/po/ta/breeze_style_config.po | 194 --- kwin/decoration/po/tg/breeze_kwin_deco.po | 430 ------ kwin/decoration/po/tg/breeze_style_config.po | 194 --- kwin/decoration/po/tr/breeze_kwin_deco.po | 471 ------ kwin/decoration/po/tr/breeze_style_config.po | 196 --- kwin/decoration/po/uk/breeze_kwin_deco.po | 478 ------ kwin/decoration/po/uk/breeze_style_config.po | 253 ---- kwin/decoration/po/zh_CN/breeze_kwin_deco.po | 416 ------ .../po/zh_CN/breeze_style_config.po | 194 --- kwin/decoration/po/zh_TW/breeze_kwin_deco.po | 465 ------ .../po/zh_TW/breeze_style_config.po | 222 --- kwin/effects_cpp/smodglow/install.sh | 0 .../effects_cpp/smodglow/src/smodglow-kf6.cpp | 119 +- kwin/effects_cpp/smodglow/src/smodglow.cpp | 125 +- kwin/effects_cpp/smodglow/src/smodglow.h | 63 +- plasma/smod/decorations/Aero.smod.rcc | Bin 503412 -> 556894 bytes 124 files changed, 1078 insertions(+), 39289 deletions(-) mode change 100644 => 100755 kwin/decoration/install.sh delete mode 100644 kwin/decoration/po/ar/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ar/breeze_style_config.po delete mode 100644 kwin/decoration/po/ast/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ast/breeze_style_config.po delete mode 100644 kwin/decoration/po/az/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/az/breeze_style_config.po delete mode 100644 kwin/decoration/po/bg/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/bg/breeze_style_config.po delete mode 100644 kwin/decoration/po/bs/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/bs/breeze_style_config.po delete mode 100644 kwin/decoration/po/ca/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ca/breeze_style_config.po delete mode 100644 kwin/decoration/po/ca@valencia/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ca@valencia/breeze_style_config.po delete mode 100644 kwin/decoration/po/cs/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/cs/breeze_style_config.po delete mode 100644 kwin/decoration/po/da/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/da/breeze_style_config.po delete mode 100644 kwin/decoration/po/de/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/de/breeze_style_config.po delete mode 100644 kwin/decoration/po/el/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/el/breeze_style_config.po delete mode 100644 kwin/decoration/po/en_GB/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/en_GB/breeze_style_config.po delete mode 100644 kwin/decoration/po/eo/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/eo/breeze_style_config.po delete mode 100644 kwin/decoration/po/es/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/es/breeze_style_config.po delete mode 100644 kwin/decoration/po/et/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/et/breeze_style_config.po delete mode 100644 kwin/decoration/po/eu/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/eu/breeze_style_config.po delete mode 100644 kwin/decoration/po/fi/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/fi/breeze_style_config.po delete mode 100644 kwin/decoration/po/fr/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/fr/breeze_style_config.po delete mode 100644 kwin/decoration/po/gl/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/gl/breeze_style_config.po delete mode 100644 kwin/decoration/po/he/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/he/breeze_style_config.po delete mode 100644 kwin/decoration/po/hi/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/hi/breeze_style_config.po delete mode 100644 kwin/decoration/po/hu/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/hu/breeze_style_config.po delete mode 100644 kwin/decoration/po/ia/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ia/breeze_style_config.po delete mode 100644 kwin/decoration/po/id/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/id/breeze_style_config.po delete mode 100644 kwin/decoration/po/is/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/is/breeze_style_config.po delete mode 100644 kwin/decoration/po/it/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/it/breeze_style_config.po delete mode 100644 kwin/decoration/po/ja/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ja/breeze_style_config.po delete mode 100644 kwin/decoration/po/ka/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ka/breeze_style_config.po delete mode 100644 kwin/decoration/po/ko/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ko/breeze_style_config.po delete mode 100644 kwin/decoration/po/lt/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/lt/breeze_style_config.po delete mode 100644 kwin/decoration/po/ml/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ml/breeze_style_config.po delete mode 100644 kwin/decoration/po/nb/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/nb/breeze_style_config.po delete mode 100644 kwin/decoration/po/nds/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/nds/breeze_style_config.po delete mode 100644 kwin/decoration/po/nl/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/nl/breeze_style_config.po delete mode 100644 kwin/decoration/po/nn/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/nn/breeze_style_config.po delete mode 100644 kwin/decoration/po/pa/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/pa/breeze_style_config.po delete mode 100644 kwin/decoration/po/pl/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/pl/breeze_style_config.po delete mode 100644 kwin/decoration/po/pt/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/pt/breeze_style_config.po delete mode 100644 kwin/decoration/po/pt_BR/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/pt_BR/breeze_style_config.po delete mode 100644 kwin/decoration/po/ro/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ro/breeze_style_config.po delete mode 100644 kwin/decoration/po/ru/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ru/breeze_style_config.po delete mode 100644 kwin/decoration/po/se/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/sk/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/sk/breeze_style_config.po delete mode 100644 kwin/decoration/po/sl/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/sl/breeze_style_config.po delete mode 100644 kwin/decoration/po/sr/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/sr/breeze_style_config.po delete mode 100644 kwin/decoration/po/sr@ijekavian/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/sr@ijekavian/breeze_style_config.po delete mode 100644 kwin/decoration/po/sr@ijekavianlatin/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/sr@ijekavianlatin/breeze_style_config.po delete mode 100644 kwin/decoration/po/sr@latin/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/sr@latin/breeze_style_config.po delete mode 100644 kwin/decoration/po/sv/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/sv/breeze_style_config.po delete mode 100644 kwin/decoration/po/ta/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/ta/breeze_style_config.po delete mode 100644 kwin/decoration/po/tg/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/tg/breeze_style_config.po delete mode 100644 kwin/decoration/po/tr/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/tr/breeze_style_config.po delete mode 100644 kwin/decoration/po/uk/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/uk/breeze_style_config.po delete mode 100644 kwin/decoration/po/zh_CN/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/zh_CN/breeze_style_config.po delete mode 100644 kwin/decoration/po/zh_TW/breeze_kwin_deco.po delete mode 100644 kwin/decoration/po/zh_TW/breeze_style_config.po mode change 100644 => 100755 kwin/effects_cpp/smodglow/install.sh diff --git a/kwin/decoration/CMakeLists.txt b/kwin/decoration/CMakeLists.txt index b017d36f..391f6de1 100644 --- a/kwin/decoration/CMakeLists.txt +++ b/kwin/decoration/CMakeLists.txt @@ -17,6 +17,7 @@ include(GNUInstallDirs) find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) +set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -157,8 +158,6 @@ function(build_Qt6) add_subdirectory(kdecoration) endif() - ki18n_install(po) - unset(QUERY_EXECUTABLE CACHE) endfunction() if(BUILD_QT6) diff --git a/kwin/decoration/install.sh b/kwin/decoration/install.sh old mode 100644 new mode 100755 diff --git a/kwin/decoration/kdecoration/breezebutton.cpp b/kwin/decoration/kdecoration/breezebutton.cpp index 651b1c1c..0b191f3f 100644 --- a/kwin/decoration/kdecoration/breezebutton.cpp +++ b/kwin/decoration/kdecoration/breezebutton.cpp @@ -406,3 +406,5 @@ void Button::updateAnimationState(bool hovered) } } // namespace + +#include "breezebutton.moc" diff --git a/kwin/decoration/kdecoration/breezebutton.h b/kwin/decoration/kdecoration/breezebutton.h index b74ed705..fef45adf 100644 --- a/kwin/decoration/kdecoration/breezebutton.h +++ b/kwin/decoration/kdecoration/breezebutton.h @@ -10,6 +10,7 @@ #include "breezedecoration.h" #include +#include #include #include #include @@ -108,8 +109,8 @@ public: void smodPaintGlow(QPainter *painter, const QRectF &repaintArea); void updateGeometry(); -signals: - void buttonHoverStatus(KDecoration3::DecorationButtonType button, bool hovered, QPoint pos); +Q_SIGNALS: + void buttonHoverStatus(KDecoration3::DecorationButtonType button, bool isFlipped, QString textureType, bool hovered, QPoint pos); protected: void hoverEnterEvent(QHoverEvent *event) override; @@ -150,8 +151,15 @@ private: //* icon size QSize m_iconSize; + //* status or smthing idk + bool m_isToggled{false}; + bool m_isMirrored{false}; + bool m_isFlipped{false}; + QString m_textureType{}; + //* active state change opacity qreal m_opacity = 0; + int index = -1; QPointer m_hoverAnimation; qreal m_hoverProgress; diff --git a/kwin/decoration/kdecoration/breezedecoration.cpp b/kwin/decoration/kdecoration/breezedecoration.cpp index e2f4756f..e0184d97 100644 --- a/kwin/decoration/kdecoration/breezedecoration.cpp +++ b/kwin/decoration/kdecoration/breezedecoration.cpp @@ -54,8 +54,7 @@ void Decoration::setOpacity(qreal value) return; } m_opacity = value; - update(); -} + update();} QString Decoration::themeName() { return SMOD::currentlyRegisteredPath; @@ -385,13 +384,27 @@ void Decoration::updateButtonsGeometry() { const auto s = settings(); - // left buttons + // left buttons positioning if (!m_leftButtons->buttons().isEmpty()) { - const int vPadding = isMaximized() ? 0 : s->smallSpacing() * Metrics::TitleBar_TopMargin; - const int hPadding = 0; //s->smallSpacing() * Metrics::TitleBar_SideMargin; - m_leftButtons->setPos(QPointF(hPadding + borderLeft(), vPadding)); + const int vPadding = isMaximized() ? -1 : 1; + const int lessPadding = g_sizingmargins.frameLeftSizing().inset; + auto r_m = sizingMargins().leftSide(); + m_leftButtons->setPos(QPointF( + borderLeft() + (isMaximized() ? 4 : 0) - lessPadding + ((hideInnerBorder() && !isMaximized()) ? r_m.margin_left : 0), vPadding)); + + m_leftButtons->setSpacing(g_sizingmargins.commonSizing().caption_button_spacing); + } + foreach (QPointer button, m_leftButtons->buttons()) { + static_cast