Skip to content

Commit ba906b4

Browse files
committed
feat: tint KDE Rounded Corners effect window outline
1 parent 652a55a commit ba906b4

8 files changed

Lines changed: 107 additions & 0 deletions

File tree

src/kde_material_you_colors/apply_themes.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ def apply(config: Configs, wallpaper: WallpaperReader, dark_light):
5959
titlebar_utils.klassy_windeco_outline_color(schemes, dark_light)
6060
kwin_utils.klassy_update_decoration_color_cache()
6161
needs_kwin_reload = True
62+
if config.read("kde_rounded_corners_effect_outline"):
63+
titlebar_utils.kde_rounded_corners_effect_outline_color(schemes, dark_light)
64+
kwin_utils.kde_rounded_corners_reload_effect()
65+
needs_kwin_reload = True
6266
if (
6367
config.read("titlebar_opacity") or config.read("titlebar_opacity_dark")
6468
) and config.read("titlebar_opacity_override"):

src/kde_material_you_colors/config.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,11 @@ def defaults(self):
183183
"manual_fetch": [args.manual_fetch, False, 0],
184184
"fetch_colors": [None, False, 0],
185185
"spec_version": [args.spec_version, None, 3],
186+
"kde_rounded_corners_effect_outline": [
187+
args.kde_rounded_corners_effect_outline,
188+
None,
189+
0,
190+
],
186191
}
187192

188193
def parse_conf(self):

src/kde_material_you_colors/data/sample_config.conf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,3 +233,8 @@ manual_fetch = False
233233
# One of 2021 2025
234234
# Default is 2025
235235
spec_version = 2025
236+
237+
# Tint KDE Rounded Corners desktop effect window outline
238+
# Requires https://github.com/matinlotfali/KDE-Rounded-Corners
239+
# Default is False
240+
kde_rounded_corners_effect_outline = False

src/kde_material_you_colors/main.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,13 @@ def main():
386386
metavar="<version>",
387387
)
388388

389+
parser.add_argument(
390+
"--kde-rounded-corners-effect-outline",
391+
action="store_true",
392+
help="Tint KDE Rounded Corners desktop effect window outline",
393+
default=None,
394+
)
395+
389396
# Get commandline arguments
390397
args = parser.parse_args()
391398
# Check for one shot arguments

src/kde_material_you_colors/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
LOG_FILE_NAME = "kde-material-you-colors.log"
5555
MATERIAL_YOU_COLORS_JSON = f"{TEMPDIR}/kde-material-you-colors-" + USERNAME + ".json"
5656
KWIN_RULES_RC = HOME + "/.config/kwinrulesrc"
57+
KWIN_RC = HOME + "/.config/kwinrc"
5758
PIDFILE_PATH = f"{TEMPDIR}/kde-material-you-colors-{USERNAME}.pid"
5859
SCREENSHOT_PATH = f"{TEMPDIR}/kde-material-you-colors-desktop-screenshot-{USERNAME}.png"
5960
KWIN_DESKTOP_ID_JSCRIPT = (

src/kde_material_you_colors/utils/kwin_utils.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,3 +240,19 @@ def screenshot_window(window_handle, output_file):
240240

241241
screenshot_taken = return_code == 0
242242
return screenshot_taken
243+
244+
245+
def kde_rounded_corners_reload_effect():
246+
try:
247+
bus = dbus.SessionBus()
248+
kwin = bus.get_object("org.kde.KWin", "/Effects")
249+
effects_iface = dbus.Interface(kwin, "org.kde.kwin.Effects")
250+
is_loaded = effects_iface.isEffectLoaded("kwin4_effect_shapecorners")
251+
if is_loaded:
252+
effects_iface.reconfigureEffect("kwin4_effect_shapecorners")
253+
except dbus.exceptions.DBusException as e:
254+
logging.exception(
255+
f"Error reloading rounded corners effect: {e.get_dbus_message()}"
256+
)
257+
except Exception as e:
258+
logging.exception(f"Unexpected error reloading rounded corners effect: {e}")

src/kde_material_you_colors/utils/titlebar_utils.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from kde_material_you_colors import settings
55
from kde_material_you_colors.utils import math_utils
66
from kde_material_you_colors.utils import string_utils
7+
from kde_material_you_colors.utils import color_utils
78
from kde_material_you_colors.schemeconfigs import ThemeConfig
89

910

@@ -272,3 +273,53 @@ def kwin_rule_darker_titlebar(light, darker_window_list):
272273

273274
with open(settings.KWIN_RULES_RC, "w") as configfile:
274275
kwin_rules.write(configfile, space_around_delimiters=False)
276+
277+
278+
def kde_rounded_corners_effect_outline_color(schemes: ThemeConfig, light=None):
279+
if light:
280+
outline = string_utils.tup2str(
281+
color_utils.hex2rgb(
282+
schemes.get_material_schemes()["schemes"]["light"]["primaryFixed"]
283+
)
284+
)
285+
outline_inactive = string_utils.tup2str(
286+
color_utils.hex2rgb(
287+
schemes.get_material_schemes()["schemes"]["light"]["surfaceDim"]
288+
)
289+
)
290+
else:
291+
outline = string_utils.tup2str(
292+
color_utils.hex2rgb(
293+
schemes.get_material_schemes()["schemes"]["dark"]["primaryFixed"]
294+
)
295+
)
296+
outline_inactive = string_utils.tup2str(
297+
color_utils.hex2rgb(
298+
schemes.get_material_schemes()["schemes"]["dark"]["surfaceBright"]
299+
)
300+
)
301+
302+
kwinrc = configparser.ConfigParser()
303+
# preserve case
304+
kwinrc.optionxform = str
305+
if os.path.exists(settings.KWIN_RC):
306+
try:
307+
kwinrc.read(settings.KWIN_RC)
308+
if "Round-Corners" not in kwinrc:
309+
kwinrc.add_section("Round-Corners")
310+
kwinrc["Round-Corners"]["OutlineColor"] = outline
311+
kwinrc["Round-Corners"]["InactiveOutlineColor"] = outline_inactive
312+
kwinrc["Round-Corners"]["ActiveOutlineAlpha"] = "255"
313+
kwinrc["Round-Corners"]["InactiveOutlineAlpha"] = "255"
314+
315+
logging.info(
316+
"Applying KDE Rounded Corners desktop effect window outline color"
317+
)
318+
with open(settings.KWIN_RC, "w", encoding="utf-8") as configfile:
319+
kwinrc.write(configfile, space_around_delimiters=False)
320+
except Exception as e:
321+
logging.error(
322+
f"Error writing KDE Rounded Corners desktop effect window outline color:\n{e}"
323+
)
324+
else:
325+
logging.warning(f"KWin config '{settings.KWIN_RC}' not found, skipping")

src/plasmoid/package/contents/ui/FullRepresentation.qml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,7 @@ ColumnLayout {
573573
property real frame_contrast: 0.2; \
574574
property real contrast_level: 0.0; \
575575
property string spec_version: "2025"; \
576+
property bool kde_rounded_corners_effect_outline: false; \
576577
}';
577578

578579
settings = Qt.createQmlObject(settingsString, mainLayout, "settingsObject");
@@ -1794,6 +1795,23 @@ ColumnLayout {
17941795
}
17951796
}
17961797

1798+
RowLayout {
1799+
Layout.topMargin: Kirigami.Units.mediumSpacing
1800+
PlasmaComponents3.Label {
1801+
text: "Tint KDE Rounded Corners desktop effect window outline"
1802+
Layout.alignment: Qt.AlignLeft
1803+
}
1804+
1805+
PlasmaComponents3.CheckBox {
1806+
id: enableKdeRoundedCornersEffectOutline
1807+
checked: settings.kde_rounded_corners_effect_outline
1808+
1809+
onCheckedChanged: {
1810+
settings.kde_rounded_corners_effect_outline = checked;
1811+
}
1812+
}
1813+
}
1814+
17971815
RowLayout {
17981816
PlasmaComponents3.Label {
17991817
text: "Match Titlebar"

0 commit comments

Comments
 (0)