Compare commits

...

237 commits

Author SHA1 Message Date
wackyideas
6ee29b235e Update .gitlab-ci.yml file 2026-02-21 21:58:14 +01:00
wackyideas
7ff88f5829 Attempt to fix CI configuration 2026-02-21 21:53:05 +01:00
wackyideas
8a5f809b4f Update INSTALL.md 2026-02-21 21:46:46 +01:00
wackyideas
8d6fbd7bdb overhaul: prepare repo for Plasma 6.6 release
This commit overhauls the repository structure such that it separates
the project into multiple repositories, one for each subproject. This
repository will be moved to the AeroShell group, and most importantly,
the installation method changes from locally installed modifications, to
CMake-based installation, in preparation for AUR packages, and possibly
packages for other distros.

Migration details are in INSTALL.md, which are highly recommended, if
not required to uninstall any old instance of AeroThemePlasma.
2026-02-21 21:15:07 +01:00
wackyideas
7990ac2f50 fontconfig: remove dir line 2026-01-24 12:11:31 +01:00
wackyideas
4286063470 SevenStart: disable mouse events for sidepanel on search 2026-01-24 12:11:31 +01:00
wackyideas
bb0a1637f6 Update INSTALL.md 2026-01-09 04:47:35 +01:00
wackyideas
bb1a39863a Merge branch 'master' into 'master'
Long overdue Kvantum theme update

See merge request wackyideas/aerothemeplasma!46
2025-12-30 12:53:01 +01:00
Gamer95875
18cb0221f3 Long overdue Kvantum theme update 2025-12-30 12:53:00 +01:00
wackyideas
32af75c144 Add dependencies for Ubuntu 25.10
Co-authored-by: dominichayesferen <ferenosdev@outlook.com>
2025-12-26 22:11:55 +01:00
wackyideas
de7f257298 Update README.md 2025-12-26 12:08:23 +01:00
wackyideas
69df7f5dfa Update DOCUMENTATION.md 2025-12-26 12:08:16 +01:00
wackyideas
38a59d5b90 Update dependencies for Arch 2025-12-20 19:49:59 +01:00
wackyideas
b2cd1df8e5 glide: Change easing curve for closing animation
The previous update to aeroglide ended up with complaints from users
that the closing animation has weird timing, feeling like it is delayed.
This had to do with the fact that the easing curve being used was based
on a cubic curve, which has a slow initial start.

The closing animation now uses a quadratic easing curve which should
give reasonably good results without feeling like the animation is slow
or delayed.
2025-12-19 20:59:40 +01:00
wackyideas
b35b7c0186 Merge branch 'sevenstart-fix' into 'master'
Fix SevenStart being gone in Wayland

Closes #249

See merge request wackyideas/aerothemeplasma!45
2025-12-17 21:46:51 +01:00
catpswin56
ee3e8a9a42 SevenStart: try another fix 2025-12-13 12:12:08 -03:00
catpswin56
2b15bcc3ed SevenStart: fix it for Plasma 6.5.4 under Wayland 2025-12-11 08:59:58 -03:00
wackyideas
ff2bc8f34d Fix error in DOCUMENTATION.md 2025-11-25 12:30:11 +01:00
wackyideas
d0ec1c8d3e Update CONTRIBUTING.md 2025-11-25 12:28:31 +01:00
wackyideas
846c23c0ed gitlab: make issue template the default 2025-11-25 12:23:11 +01:00
wackyideas
e16de1fa49 gitlab: add issues template 2025-11-25 12:16:57 +01:00
wackyideas
9dddaf074b Merge branch 'master' into 'master'
Fix 'Hide Inner Border' Misalignment + Reference openSUSE Packages

Closes #232

See merge request wackyideas/aerothemeplasma!43
2025-11-24 23:08:49 +01:00
snailatte
a8ce27cf96 Fix 'Hide Inner Border' Misalignment + Reference openSUSE Packages 2025-11-24 23:08:49 +01:00
wackyideas
fefe887b4e Merge branch 'master' into 'master'
Make AeroGlide more accurate

See merge request wackyideas/aerothemeplasma!42
2025-11-22 20:38:49 +01:00
aster
01a47a3383 Make AeroGlide more accurate 2025-11-22 20:38:49 +01:00
wackyideas
a389840068 Remove third party sign in prompt, fix relevant plasmoid action 2025-11-22 17:24:06 +01:00
wackyideas
8084ab1674 AppletAlternatives: fix alternatives filtering 2025-11-15 13:27:32 +01:00
wackyideas
783227595e aeroglassblur: attempt to fix system settings crash 2025-11-04 18:05:52 +01:00
wackyideas
a9db1d5aec Merge branch 'docs/fedora-update' into 'master'
add new deps for Fedora in KDE 6.5

See merge request wackyideas/aerothemeplasma!41
2025-11-03 14:08:20 +01:00
Patrick Wu
f975493333 add new deps for Fedora in KDE 6.5 2025-11-02 23:15:13 +08:00
wackyideas
c44dd45c37 Update Arch dependencies in INSTALL.md 2025-11-01 18:51:53 +01:00
wackyideas
ee63ce578e notifications: revert positioning fix on wayland 2025-10-27 22:22:05 +01:00
wackyideas
1b48d9cfba shell: redesign Edit Mode
Co-authored-by: catpswin56 <catpswin5@proton.me>
2025-10-27 17:24:59 +01:00
wackyideas
cc1ffee650 Tweak notifications visibility procedure 2025-10-27 17:23:45 +01:00
wackyideas
bfa69c7fa0 notifications: attempt to fix popups randomly showing at (0,0) 2025-10-27 02:27:16 +01:00
wackyideas
08000da908 Fix gadgets explorer menu inconsistency, refactoring 2025-10-27 00:42:17 +01:00
wackyideas
0dc2f750d9 Move smod folder from plasma to kwin
Nothing important, it's just that the files found in plasma/smod weren't
actually ever used by any component found in the plasma folder, so it
has been moved to kwin/smod instead.
2025-10-26 18:43:46 +01:00
wackyideas
76859dad28 shell kcms: set maximum width for the confirm dialog 2025-10-26 12:15:36 +01:00
wackyideas
f834cc3b06 Update DOCUMENTATION.md 2025-10-26 12:10:44 +01:00
wackyideas
e071dacbf1 ctrl+alt+del: use PreserveAspectFit instead of Stretch 2025-10-26 12:09:45 +01:00
wackyideas
e91df38e69 login-sessions: update install script to support Fedora 2025-10-25 16:40:15 +02:00
wackyideas
f879d4f28c systemtray: redesign ConfigEntries 2025-10-25 15:57:19 +02:00
wackyideas
4df687a081 shell: replace confirmation prompt with a dialog 2025-10-25 15:56:12 +02:00
wackyideas
8fdde6a3cb notifications: prevent minor undefined error 2025-10-25 15:55:47 +02:00
wackyideas
97ce329efb battery: fix inhibition items not working on Plasma 6.5 2025-10-25 05:08:34 +02:00
wackyideas
b618d72fb0 Bump KDE version in README.md 2025-10-25 00:26:01 +02:00
wackyideas
6d6c026057 SevenStart: change action text to "Pin to Start Menu" 2025-10-25 00:24:06 +02:00
wackyideas
2ead6b8a29 network manager: update hotspot code 2025-10-24 23:59:22 +02:00
wackyideas
23820cbc97 Fix network manager plasmoid showing Connected header 2025-10-24 23:51:49 +02:00
wackyideas
f4c0cabdfb Fix SevenStart having two Pin To Tasks menu items 2025-10-24 23:28:37 +02:00
wackyideas
9f5681d3e9 Fix SevenStart bugs for Plasma 6.5 2025-10-24 22:10:14 +02:00
wackyideas
03314d1213 Fix notifications plasmoid not linking for Plasma 6.5 2025-10-24 22:06:55 +02:00
wackyideas
4f46e0013b Replace KDE system tray with ATP's own system tray
Replaces org.kde.plasma.systemtray with io.gitgud.wackyideas.systemtray.
The plasmoid now also needs to be compiled, and is also now the default
for ATP's session and layout templates.

This version of the system tray is also searchable in the gadgets window
for easier layout management. Everything else about the tray should be
largely the same as it was before.
2025-10-24 02:37:33 +02:00
wackyideas
05c5f95eff shell: remove header in plasmashell KCMs 2025-10-24 02:29:40 +02:00
wackyideas
9ea4f27f20 Use CMake to generate SDDM entries
This should make the login entries work properly for the distro they are
generated on. Works on Arch-based distros and Debian distros, and should
also work fine for Fedora.
2025-10-23 23:16:48 +02:00
wackyideas
c14f2fe283 Minor lockscreen refactoring 2025-10-23 23:13:16 +02:00
wackyideas
d5c0f3193a battery: use InhibitionHint for power profile info 2025-10-23 19:28:09 +02:00
wackyideas
9961d74db0 Fix solid dialog background having intense shadows 2025-10-23 18:53:12 +02:00
wackyideas
459f96ea1a systemtray: fix deprecation warning 2025-10-23 17:12:09 +02:00
wackyideas
200f3f3e11 Fix Wayland session not starting on Fedora 2025-10-23 17:00:27 +02:00
wackyideas
15aad4c114 Fix typo in INSTALL.md 2025-10-23 16:19:17 +02:00
wackyideas
ee8acac1b9 Attempt to fix flyout positioning again 2025-10-23 15:40:21 +02:00
wackyideas
9429f57463 actually disable notifications by default 2025-10-23 02:42:39 +02:00
wackyideas
6fdffd3197 Fix positioning logic for certain plasmoid flyouts 2025-10-23 02:11:56 +02:00
wackyideas
90ff8f5d06 system tray: disable KDE notifications by default 2025-10-23 02:11:31 +02:00
wackyideas
a75a0be9c3 notifications: make libnotificationmanager required 2025-10-22 20:11:56 +02:00
wackyideas
80d85fae77 Rename KWin effects, update INSTALL.md 2025-10-22 12:27:12 +02:00
wackyideas
1887578807 Move C++ KWin effects to a separate category in KCM 2025-10-22 12:20:18 +02:00
wackyideas
1678ca6536 tabbox: rename flipswitch to flip3d 2025-10-22 11:42:36 +02:00
wackyideas
23ca72de83 Update DOCUMENTATION.md 2025-10-22 04:57:10 +02:00
wackyideas
bf86dc1e70 Completely fork notifications plasmoid
This commit fully forks the notification plasmoid, moving away from
upstream KDE code. Additional changes include:

- Using Plasma 6.5 code as a base for the notifications plasmoid
- As a result, the plasmoid uses the new way of packaging plasma applets
  which improves performance but requires building the plasmoid from
  source
- Full control over the C++ codebase of the plasmoid, besides
  LibNotificationManager which is still an external dependency
- The thumbnail preview component has been visually overhauled
- Added the ability to go through all URLs included in the thumbnail
  preview instead of just showing the first URL preview
- Hovering over any URL preview will show the full URL or shortened name
  if possible in a tooltip
2025-10-22 04:48:31 +02:00
wackyideas
6f831d540f Move to new shell plugin & panel, add SDDM sessions
This is a big update which requires existing users to migrate their
desktop setup (Plasmoids, their configurations, layout changes, etc.) to
a new desktop session.

This commit replaces the modified desktop shell (org.kde.plasma.desktop)
with ATP's shell (io.gitgud.wackyideas.desktop) which requires new
session options. This is similar to how plasma-bigscreen and
plasma-mobile are used - logging into a separate session via the login
manager (SDDM). ATP will provide sessions for both X11 and Wayland.

This, along with now providing a forked panel as well, is a step forward
regarding separating ATP's codebase and KDE's upstream code. Further
goals are to be able to further isolate the ATP session from the regular
KDE session in terms of shared configurations, etc.

For existing users - Rerun install_plasmoids.sh and
install_plasma_components.sh, you can delete the old shell
(shells/org.kde.plasma.desktop) and panel plasmoid
(plasmoids/org.kde.panel). As mentioned previously, panel and desktop
layouts, plasmoids and their configurations will not be migrated to the
newly available sessions, so they need to be set up manually.
2025-10-21 13:23:06 +02:00
wackyideas
f1de66c8e8 Update README.md 2025-10-20 19:48:39 +02:00
wackyideas
6ff6ef2e12 Improve libplasma installation method
Up until now compiling libplasma modifications was rather violent as it
would cause both plasmashell and kwin to crash (the latter is
potentially destructive if running a Wayland session), leaving the user
with a potentially unstable state where plasmashell will start to
crashloop until the entire system reboots.

With this commit, the replacement of patched library files is deferred
until the system restarts, by using a temporary systemd service that
performs the replacement of files before Plasma starts, leading to
no crashes during the install or update process.
2025-10-20 17:37:54 +02:00
wackyideas
b8735c8808 Disable upstream plasmoids in system tray by default 2025-10-20 15:18:07 +02:00
wackyideas
2bf7161b21 battery: remove undefined references 2025-10-20 14:49:36 +02:00
wackyideas
c34da55741 battery: remove commented code 2025-10-19 23:34:54 +02:00
wackyideas
cfafa33604 Rework battery plasmoid using upstream codebase 2025-10-19 20:05:51 +02:00
wackyideas
ec6e399e95 Remove redundant install script 2025-10-15 15:26:42 +02:00
wackyideas
6365982ff3 digitalclocklite: improve HiDPI font rendering 2025-10-13 21:42:07 +02:00
wackyideas
3667d5d93b Revert "Merge branch 'master' into 'master'"
This reverts merge request !40
2025-09-15 18:56:52 +02:00
wackyideas
53ae53a668 Revert "SMOD: minor housekeeping"
This reverts commit e7791abab5
2025-09-15 18:56:33 +02:00
wackyideas
5bc418e73a Remove TitlebarIsAccentColored=true from colorscheme 2025-09-14 21:54:03 +02:00
wackyideas
0d88de5094 Update color scheme
Co-authored-by: dominichayesferen <ferenosdev@outlook.com>
2025-09-14 21:18:25 +02:00
wackyideas
e7791abab5 SMOD: minor housekeeping 2025-09-11 14:45:36 +02:00
wackyideas
97358d4b32 Merge branch 'master' into 'master'
SMOD decoration theme improvements

See merge request wackyideas/aerothemeplasma!40
2025-09-11 13:05:44 +02:00
catpswin56
c1d774b32d Fix application name appearing with elided text in SMOD decoration 2025-09-10 13:13:01 -03:00
catpswin56
9b8951cf0f Fix SMOD decoration button grouping breaking with a small window 2025-09-10 13:05:31 -03:00
catpswin56
cf2745aca3 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.
2025-09-09 20:09:43 -03:00
wackyideas
8b91fedf46 Merge branch 'master' into 'master'
Fix #192 and recover some SDDM behavoir

Closes #192

See merge request wackyideas/aerothemeplasma!39
2025-09-04 19:37:26 +02:00
Lily Garcia
50424edcd7 Fix session start audio not playing 2025-09-03 21:55:54 -04:00
Lily Garcia
807fca491c Fix SDDM user label not rendering 2025-09-03 21:55:24 -04:00
Lily Garcia
05c6680779 Fix SDDM password input missing 2025-09-03 21:54:16 -04:00
wackyideas
a6ac28e2c8 Merge branch 'feat/shoud_not_blur' into 'master'
add config section for Classes matching regular expressions that should not blur

See merge request wackyideas/aerothemeplasma!38
2025-09-03 12:43:12 +02:00
Patrick Wu
e866a44e65 small rewording 2025-09-02 23:45:51 +08:00
Patrick Wu
a648dd7cff empty line should be ignored 2025-09-02 23:44:55 +08:00
Patrick Wu
81fb89209a add config section for Classes matching regular expressions that should not blur 2025-09-02 23:17:03 +08:00
wackyideas
791db3a512 Attempt to fix system tray bugs 2025-08-28 22:18:24 +02:00
wackyideas
1b329e72f0 Fix notifications ignoring DnD 2025-08-15 21:25:50 +02:00
wackyideas
005f3b569c Early documentation
Currently unfinished, some documents are just stubs for now
2025-08-15 19:23:03 +02:00
wackyideas
2f92c0cd4f Update README.md 2025-08-15 15:50:18 +02:00
wackyideas
94cef8b5f0 desktopcontainment: actually fix inappropriate refresh animations 2025-08-15 03:05:36 +02:00
wackyideas
e2c2bab03b Make potentially missing folders in misc installer 2025-08-15 01:03:22 +02:00
wackyideas
132093371c Merge branch 'master' into 'master'
Fix scrolling in the icons page of the desktop containment

See merge request wackyideas/aerothemeplasma!37
2025-08-15 00:53:17 +02:00
wackyideas
31f426c8e2 desktopcontainment: don't play refresh animation on rename 2025-08-15 00:52:35 +02:00
wackyideas
19fe3e911d Attempt to fix system tray randomly messing up tray icons 2025-08-15 00:51:58 +02:00
wackyideas
428f1f550f Fix SMOD Peek permanently hiding PiP players 2025-08-15 00:51:16 +02:00
catpswin56
3982c4d138 Fix scrolling in the icons page of the desktop containment 2025-08-12 10:29:33 -03:00
wackyideas
9c33abb0d2 Update libplasma patch structure 2025-08-01 04:22:13 +02:00
wackyideas
325c1cbf51 desktopcontainment: split View and Sort by actions
Needs to recompile desktopcontainment src
2025-07-28 01:30:25 +02:00
wackyideas
5ada923fb6 desktopcontainment: modify context menu layout 2025-07-28 00:19:18 +02:00
wackyideas
30ebd22ccc Tweak fadingpopups behavior 2025-07-28 00:19:04 +02:00
wackyideas
6d501d28bf desktopcontainment: add refresh animation indicator 2025-07-27 23:39:18 +02:00
wackyideas
75e1ff39f5 desktopcontainment: refactor refresh action code 2025-07-27 19:01:57 +02:00
wackyideas
26dedbd275 Fix hovering issues in desktop containment 2025-07-27 16:45:50 +02:00
wackyideas
d4afe57a17 Add refresh action to desktopcontainment 2025-07-27 02:13:43 +02:00
wackyideas
f2b497dcf7 Update README.md 2025-07-26 04:52:31 +02:00
wackyideas
4f49c15567 Add CONTRIBUTING.md 2025-07-26 04:49:54 +02:00
wackyideas
6ac4306d97 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.
2025-07-25 23:28:37 +02:00
wackyideas
fc058989e1 Prevent tooltips from being force blurred 2025-07-23 15:31:57 +02:00
wackyideas
7c05d294b9 Fix aeroglassblur conflicting with forceblur config 2025-07-23 13:22:07 +02:00
wackyideas
12c278fe83 Fix unwanted tooltip behavior in desktop containment 2025-07-23 04:24:03 +02:00
wackyideas
20b5f3a927 Attempt to fix minor tooltip bug in search view 2025-07-23 03:35:00 +02:00
wackyideas
b0df1cef25 libplasma: tooltips can appear underneath the cursor 2025-07-23 03:18:31 +02:00
wackyideas
f7d36a9420 Remove irrelevant file from SevenStart 2025-07-23 03:06:02 +02:00
wackyideas
68f9b2e97d Fix minor SevenStart bug with all programs button 2025-07-23 03:03:08 +02:00
wackyideas
d7aada54e4 SevenStart: fix keyboard navigation in side panel 2025-07-23 02:52:36 +02:00
wackyideas
2885fb4e69 SevenStart: add tooltip text to shutdown button 2025-07-23 02:48:19 +02:00
wackyideas
5563a679fe SevenStart: add tooltip for home directory side item 2025-07-23 02:45:40 +02:00
wackyideas
1a70211071 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
2025-07-23 02:44:30 +02:00
wackyideas
a4b505ff20 Update SevenStart side item tooltips 2025-07-22 12:27:56 +02:00
wackyideas
16dab20e87 Add tooltip text to SevenStart side items 2025-07-21 20:14:41 +02:00
wackyideas
a4d57b327a SevenStart: allow pinning recent items to taskbar 2025-07-21 19:43:31 +02:00
wackyideas
0d903f8c22 Fix desktopcontainment adding launcher instead of link 2025-07-21 19:26:34 +02:00
wackyideas
76a736b184 Slightly tweak system tray code 2025-07-21 16:18:41 +02:00
wackyideas
2d3986c6da Fix system tray icon bug but actually this time 2025-07-21 05:04:17 +02:00
wackyideas
6b65ff863f Fix plasmashell crashing when invalidating systray model 2025-07-21 03:09:13 +02:00
wackyideas
15e2f7709a Remove some commented code from ExpanderArrow 2025-07-20 20:30:18 +02:00
wackyideas
ec3ffc2f17 Fix system tray icons not appearing or updating the tray 2025-07-20 20:20:06 +02:00
wackyideas
7f0e155ebb Fix minor bugs in SevenStart 2025-07-20 20:01:11 +02:00
wackyideas
4e7c5c7180 More accurate icon highlights in desktop containment 2025-07-19 15:30:43 +02:00
wackyideas
6a96e7af24 Merge branch 'hdr-fix' into 'master'
Fix #93 in which HDR brightness settings were only partially applied.

Closes #93

See merge request wackyideas/aerothemeplasma!34
2025-07-19 03:47:19 +02:00
Nicholas Roth
bcf3e27db4 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.
2025-07-18 21:07:12 -04:00
wackyideas
e3c1d48763 Fix uncentered tooltip in digitalclocklite 2025-07-18 22:12:38 +02:00
wackyideas
4292a53bc6 Fix kornerbug in tooltips 2025-07-18 22:05:52 +02:00
wackyideas
e1918fef3c Hide systray flyout when there are no more hidden items 2025-07-18 20:58:52 +02:00
wackyideas
00d7318c22 Update README.md 2025-07-17 04:33:25 +02:00
wackyideas
3fefc7fcfe Update Fedora X11 dependencies 2025-07-17 04:23:41 +02:00
wackyideas
e0d0b67c17 Fix crossfade visual glitch in SevenStart 2025-07-16 16:17:21 +02:00
wackyideas
562f3b02c5 Update AeroGlassBlur default blur strength 2025-07-15 11:43:39 +02:00
wackyideas
5d785d9128 Attempt to fix digitalclocklite pulling incorrect first day of week 2025-07-15 03:36:28 +02:00
wackyideas
eab41b8e68 Add KCM shortcuts to desktopcontainment KCM, add KCM loader application
New components:
- AeroThemePlasma KCM loader
Updated components:
- Desktop containment
- Desktop shell
- AeroGlassBlur
- SMOD decorations
2025-07-14 16:04:36 +02:00
wackyideas
ddde18b2a8 Improve aeroglassblur blur strength accuracy 2025-07-14 15:31:31 +02:00
wackyideas
250b071040 Add comments to explain changes in previous commit 2025-07-14 04:10:45 +02:00
wackyideas
c63841a803 Attempt to fix artifacts in aeroglassblur 2025-07-14 03:47:28 +02:00
wackyideas
0f744d75f0 Fix some corner glow shader bugs 2025-07-14 02:27:21 +02:00
wackyideas
b4c74d91a0 Fix SevenStart context menu not appearing if SevenTasks isn't present 2025-07-13 22:21:05 +02:00
wackyideas
8d4a48c17c Attempt to fix SevenStart not closing properly on ended session 2025-07-11 16:43:19 +02:00
wackyideas
ddc1076f16 Prevent toolbar context menu from showing in blur KCM 2025-07-11 16:22:32 +02:00
wackyideas
627b3d3e9b Fix "Enable transparency" checkbox not updating on cancel 2025-07-10 20:35:13 +02:00
wackyideas
7d50ad913c Attempt to fix SMOD incorrect text glow for RTL text 2025-07-10 18:27:23 +02:00
wackyideas
3627f646a6 Fix missing function in FolderItemDelegate 2025-07-07 10:13:43 +02:00
wackyideas
5d440624ad Cleanup code 2025-07-07 09:35:07 +02:00
wackyideas
cc7a2a4758 Update custom swatch ordering 2025-07-07 09:29:43 +02:00
wackyideas
a0c86ef121 Merge branch 'patch-1' into 'master'
Comedy

See merge request wackyideas/aerothemeplasma!32
2025-07-07 09:26:40 +02:00
dominichayesferen
e921b2bf1b Comedy 2025-07-07 02:46:16 +00:00
wackyideas
754b9daf04 Fix SMOD shadows not updating on reconfigure 2025-07-07 01:00:20 +02:00
wackyideas
73e6d596dc Fix icon appearing in Colorization KCM 2025-07-07 00:43:25 +02:00
wackyideas
b19685c41a Prevent toolbar from being movable, tweak its QSS 2025-07-06 21:49:02 +02:00
wackyideas
52fe5fab41 Fix SMOD Decoration not compiling 2025-07-06 21:29:25 +02:00
wackyideas
d39e4842dc Update Colorization KCM, add a bunch of preset colors
- Requires updating AeroGlassBlur and also SMOD decorations for the full
experience
2025-07-06 20:59:00 +02:00
wackyideas
5e2c1865bb Remove interpolation in volume mixer sliders 2025-07-05 23:05:04 +02:00
wackyideas
ddaea90f8c SevenTasks: Fix weird group thumbnails bug under X11 2025-07-05 11:26:50 +02:00
wackyideas
b44425a2e6 Raise default ff blur margin, add KCM configs for the margin 2025-07-05 11:21:00 +02:00
wackyideas
53c14080fa Include option to toggle OSDs opaqueness in AeroGlassBlur 2025-07-04 21:53:37 +02:00
wackyideas
0a155aadf1 Include option to toggle KRunner opaqueness 2025-07-04 21:43:59 +02:00
wackyideas
89029217c6 Rework Firefox blur region rendering in AeroGlassBlur
Hopefully fixes #57
2025-07-04 21:28:43 +02:00
wackyideas
39c7e5615b Add "Clone Panel" button to panel edit mode 2025-07-04 12:06:19 +02:00
wackyideas
ff2e29819f Merge branch 'master' of gitgud.io:wackyideas/aerothemeplasma 2025-07-04 04:10:34 +02:00
wackyideas
7966d98f33 Fix SevenTasks thumbnail sizing on Wayland 2025-07-04 04:08:55 +02:00
wackyideas
656c3c935a Merge branch 'pv_fix' into 'master'
Fix ./pv_conf.sh is not found when installing PlymouthVista

See merge request wackyideas/aerothemeplasma!31
2025-07-03 16:09:02 +02:00
furkrn
495b71b999 Fix ./pv_conf.sh is not found when installing PlymouthVista 2025-07-03 16:00:06 +03:00
wackyideas
85e5830d90 Prevent redundant opaque colorization color calculation 2025-07-03 00:24:40 +02:00
wackyideas
59c294be61 Merge corner glow and reflect render passes into one 2025-07-03 00:17:01 +02:00
wackyideas
344acb791e Fix incorrect symlinking of kwin directory 2025-07-02 20:25:17 +02:00
wackyideas
65c459277b Update AeroGlassBlur default config and force opaque KRunner 2025-07-02 01:49:13 +02:00
wackyideas
6a769e7b39 Bring back extended blur region in colorization KCM 2025-06-28 19:00:40 +02:00
wackyideas
1ea8b58e7f Fix Alt+Tab being incorrectly opaque
- Also fixes Wayland Alt+Tab being treated as inactive
2025-06-28 16:36:03 +02:00
wackyideas
79df909ed1 Tweak panel configuration UI 2025-06-28 12:39:39 +02:00
wackyideas
477403c44a Update INSTALL.md 2025-06-28 09:04:04 +02:00
wackyideas
bfce52b7b9 Replace printf with qDebug in AeroGlassBlur 2025-06-28 08:54:06 +02:00
wackyideas
cc6674aded Improve Alt+Tab switcher on Wayland 2025-06-28 08:42:58 +02:00
wackyideas
77253c32cd Visually update edit mode to improve text legibility
- Also removes animations for the panel plasmoid highlight that appears
in edit mode to improve responsiveness
2025-06-28 08:19:48 +02:00
wackyideas
98af1c4839 Prevent plasmashell desktop and panels from fading 2025-06-28 07:28:48 +02:00
wackyideas
88c9413028 Fix Alt+Tab window being force blurred 2025-06-28 01:41:02 +02:00
wackyideas
2993b560d5 Refactor Alt+Tab switcher, possibly fix Wayland visual glitch 2025-06-28 00:37:23 +02:00
wackyideas
3487bdd269 Update INSTALL.md 2025-06-27 00:43:01 +02:00
wackyideas
6cc06938e6 Update INSTALL.md 2025-06-25 22:10:52 +02:00
wackyideas
61594858ca Fix broken DigitalClockLite KCM pages 2025-06-25 22:02:34 +02:00
wackyideas
f9524303c2 Update INSTALL.md 2025-06-25 16:15:00 +02:00
wackyideas
2724786e34 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
2025-06-25 15:57:08 +02:00
wackyideas
391d40b7aa 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.
2025-06-25 02:39:20 +02:00
wackyideas
51424ea937 Slightly improve smodglow HiDPI positioning
- Not perfectly aligned with the caption buttons because SMOD
decorations aren't written to support HiDPI yet.
2025-06-24 02:16:52 +02:00
wackyideas
adc956eb78 Update INSTALL.md 2025-06-24 01:43:13 +02:00
wackyideas
82abf0a93c Hopefully fix other HiDPI issues with AeroGlassBlur 2025-06-24 00:17:26 +02:00
wackyideas
25689d38c7 Fix blur texture disobeying display scale 2025-06-23 23:41:42 +02:00
wackyideas
bcd95aea81 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
2025-06-22 14:47:30 +02:00
wackyideas
16866e2148 Fix SevenStart appearing opaque in Wayland 2025-06-21 20:59:19 +02:00
wackyideas
c23f414cb8 Remove Wayland workaround
Seems that Qt.openUrlExternally() no longer crashes the Wayland session,
so the xdg-open workaround can be removed.
2025-06-21 19:04:32 +02:00
wackyideas
a492dc1bb7 Optimize checks for newly installed items 2025-06-21 18:14:18 +02:00
wackyideas
aaf1c26b31 Fix Search view item highlight overlapping labels 2025-06-21 17:03:44 +02:00
wackyideas
bc1dbdbfb4 Merge branch 'master' into 'master'
Add a highlight for new items in SevenStart

See merge request wackyideas/aerothemeplasma!30
2025-06-21 15:40:48 +02:00
catpswin56
957f35854a Add a highlight for new items in SevenStart 2025-06-21 10:32:03 -03:00
wackyideas
74137380c3 Refactor Show Desktop (Win7) 2025-06-21 02:51:00 +02:00
wackyideas
0ffbd0effd AeroGlassBlur: Ensure blur texture is at least 1x1
Credit: https://github.com/taj-ny/kwin-effects-forceblur/pull/174/files
2025-06-21 02:38:07 +02:00
wackyideas
7d89f258a5 Fix Wallpaper KCM appearing as blank window 2025-06-21 01:18:25 +02:00
wackyideas
13f0b6114d Fix SevenTasks metadata.json 2025-06-20 22:41:23 +02:00
wackyideas
0d9e4a5370 Remove unnecessary connections 2025-06-20 22:38:02 +02:00
wackyideas
7cd4581154 Fix Gadgets not resetting page on category switch 2025-06-20 22:26:31 +02:00
wackyideas
bde6315744 Update INSTALL.md 2025-06-20 22:17:14 +02:00
wackyideas
0dbc4910f7 Merge branch 'furkrn-master-patch-26762' into 'master'
Edit INSTALL.md

See merge request wackyideas/aerothemeplasma!29
2025-06-20 22:13:36 +02:00
wackyideas
4945bf6e70 Update README.md 2025-06-20 22:10:39 +02:00
wackyideas
16e0446ddf Update INSTALL.md 2025-06-20 22:09:54 +02:00
wackyideas
d05dbb09e5 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.
2025-06-20 20:29:32 +02:00
wackyideas
a400d3ad48 Remove incorrect import version in SevenTasks 2025-06-20 20:27:02 +02:00
wackyideas
bb291bee12 Fix passive launch feedback for Plasma 6.4 2025-06-20 20:00:51 +02:00
wackyideas
91a6f687b2 Fix SMOD Glow for Plasma 6.4 2025-06-20 18:51:31 +02:00
wackyideas
04545ac6e1 Fix SMOD snap for Plasma 6.4 2025-06-20 18:51:19 +02:00
wackyideas
14a2f129cb Fix Aero Glide for Plasma 6.4 2025-06-20 18:33:00 +02:00
wackyideas
ba121ce023 Fix AeroGlassBlur for Plasma 6.4 2025-06-20 18:32:43 +02:00
wackyideas
160d548bbb Add kwin-x11 and kwin-wayland as symlink directories 2025-06-20 18:24:28 +02:00
wackyideas
5460ae7a34 Fix SevenTasks for Plasma 6.4 2025-06-20 15:32:17 +02:00
wackyideas
7e71eba278 Fix system tray on Plasma 6.4 2025-06-20 15:21:40 +02:00
furkrn
a0b78a968d Edit INSTALL.md 2025-06-19 11:59:10 +03:00
wackyideas
c567a81b7d Update README.md 2025-06-18 23:38:18 +02:00
wackyideas
529d73a9e5 Update INSTALL.md 2025-06-18 23:07:04 +02:00
wackyideas
07340d7d05 Clean up Seven-Black Plasma Style 2025-06-18 22:28:08 +02:00
1045 changed files with 51745 additions and 301968 deletions

28
.gitignore vendored
View file

@ -1,15 +1,31 @@
misc/defaulttooltip/build PlymouthVista/
misc/libplasma/build
misc/uac-polkitagent/build misc/uac-polkitagent/build
misc/plymouth/plymouth-theme-smod/build misc/plymouth/plymouth-theme-smod/build
kwin/decoration/build kwin/decoration/build
plasma/sddm/login-sessions/build
plasma/aerothemeplasma-kcmloader/build
plasma/atpootb/build
plasma/plasmoids/src/systemtray_src/build
plasma/plasmoids/src/notifications_src/build
plasma/plasmoids/src/volume_src/build plasma/plasmoids/src/volume_src/build
plasma/plasmoids/src/sevenstart_src/build plasma/plasmoids/src/sevenstart_src/build
plasma/plasmoids/src/seventasks_src/build plasma/plasmoids/src/seventasks_src/build
plasma/plasmoids/src/desktopcontainment/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/kde-effects-aeroglassblur/build
kwin/effects_cpp/smodglow/build-kf6 kwin/effects_cpp/kwin-effect-smodsnap-v2/build
kwin/effects_cpp/aeroglide/build-kf6 kwin/effects_cpp/smodglow/build
kwin/effects_cpp/startupfeedback/build-kf6 kwin/effects_cpp/aeroglide/build
kwin/effects_cpp/minimize3d/build-kf6 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
kwin/effects_cpp/minimize3d
experimental/ experimental/
build
repos
manifest

23
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,23 @@
image: "archlinux:latest"
stages:
- build
build-linux-x64:
stage: build
before_script:
- pacman-key --init
- pacman -Syu --needed --noconfirm ninja pkgconf cmake gcc gcc-libs glibc kcoreaddons kcrash kdbusaddons ki18n kirigami knotifications kwindowsystem polkit-qt6 qt6-base qt6-declarative extra-cmake-modules libplasma plasma-pa plasma-nm plasma-workspace kdoctools qt6-virtualkeyboard qt6-multimedia qt6-5compat qt6-wayland plasma-wayland-protocols plasma5support knotifyconfig
- ln -s /usr/share/wayland/wayland.xml /wayland.xml # Ugly hack to make the xml file visible to cmake during the build process
script:
- cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=lib -B build .
- cmake --build build
- DESTDIR=out cmake --install build
artifacts:
untracked: false
when: on_success
access: all
expire_in: 6 mos
paths:
- out/

View file

@ -0,0 +1,12 @@
## Description
## Steps to reproduce (if possible)
## Logs
## Additional information
## Checklist
- [ ] I have looked through existing [issues](https://gitgud.io/wackyideas/aerothemeplasma/-/issues) (both open and resolved)
- [ ] I have read [CONTRIBUTING.md](https://gitgud.io/wackyideas/aerothemeplasma/-/blob/master/CONTRIBUTING.md?ref_type=heads)

22
CMakeLists.txt Normal file
View file

@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.16)
project(aerothemeplasma-desktop)
set(KF6_MIN_VERSION "6.0.0")
find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
set(PROJECT_VERSION "6.5.4")
set(PROJECT_VERSION_MAJOR 6)
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(FeatureSummary)
find_package(KF6Config)
find_package(Plasma)
add_subdirectory(plasma)
add_subdirectory(misc)
install()

22
CONTRIBUTING.md Normal file
View file

@ -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. For more information regarding testing and logging, read [DOCUMENTATION.md](./DOCUMENTATION.md).
- 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.

View file

@ -0,0 +1,248 @@
# Documentation
## Table of contents
1. [Introduction](#intro)
2. [Frequently asked questions](#faq)
3. [List of components](#list-of-components)
4. [Development resources](#development)
5. [Current Wayland issues](#wayland)
## Introduction <a name="intro"></a>
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 <a name="faq"></a>
### 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 [Current Wayland issues](#wayland) 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. [Sevulet](https://gitgud.io/snailatte/sevulet) is a set of projects that, among other things, features a solid file explorer recreation. Please support their work!
## List of components <a name="list-of-components"></a>
- 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 <a href="development"></a>
## 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.
### Ctrl+Alt+Del screen
```bash
/usr/lib/ksmserver-logout-greeter --windowed
```
### Qt test application
```bash
kvantumpreview -style [qstyle]
```
Running without passing `-style` will simply load the application with the currently applied QStyle.
### Testing notifications
```bash
notify-send -a Dolphin -h string:desktop-entry:org.kde.dolphin "Lorem ipsum dolor sit amet" "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." -i org.kde.dolphin --action=inline-reply="Reply" --action="Test"
```
This will spawn a notification with a sufficiently long body, presenting as Dolphin, and provides actions in the form of regular actions and inline replies.
In order to test thumbnail previews for notifications, one or more URLs need to be passed to the notification as well. This can't be done in the terminal (to my knowledge, at least), so some kind of scripting or the use of KNotification is required.
## 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`, 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.
## Current Wayland issues <a name="wayland"></a>
Some of these issues are fixable but not a lot of effort has been put into doing so, while some are inherent issues with Wayland that as of now cannot be easily fixed. This list will be updated accordingly if/when issues are resolved.
1. Wayland cannot properly identify context menus and dropdown context menus (labelled as `popupMenu` and `dropdownMenu` respectively in the KWin effects API). As a result, context menus on Wayland will always fade in and out with the `fadingpopupsaero` effect.
2. Certain animation effects play for certain windows even though they shouldn't, this is usually caused by different window identification and/or the inability to identify such windows (As the first issue points out). Most of these can likely be fixed in the future.
3. SevenTasks uses window positioning to animate its jumplists which isn't smooth or reliable on Wayland, as client-side window positioning on Wayland is not supported as part of the protocol spec. (See [xx-zones](https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/264) for more insight on the state of window positioning on Wayland). This is arguably bad practice in any case and should be replaced with some kind of KWin effect that actually performs the sliding animation.
4. SevenTasks jumplists (and context menus in general) cannot steal mouse inputs from all other windows, which might potentially result in strange behavior.
5. SevenStart's blur region often lags behind or doesn't appear at all upon opening the menu. This can likely be fixed by restructuring SevenStart in some way, but not much time has been spent fixing this bug.
6. SevenStart's floating orb positioning fails only sometimes. Additionally, because Wayland doesn't allow client windows to raise themselves, in some cases the floating orb will appear permanently stuck underneath the panel and its child windows until the shell is restarted.
6. Aero Peek is not visible on Wayland, although the windows do properly fade in and out of view. This should most likely be replaced with a proper KWin effect that renders the Aero Peek windows in place of regular windows.
7. HiDPI is not properly supported for SMOD. See #252 for more details. This is an issue for both X11 and Wayland, but X11 has an easier workaround as KDecoration3 on X11 ignores DPI scaling entirely.

374
INSTALL.md Normal file → Executable file
View file

@ -3,196 +3,165 @@
## TABLE OF CONTENTS ## TABLE OF CONTENTS
1. [Prerequisites](#preq) 1. [Prerequisites](#preq)
2. [Plasma components](#plasma) 2. [Migration notice](#migration)
3. [KWin components](#kwin) 3. [Getting started](#started)
4. [Miscellaneous components](#misc) 4. [Optional](#optional)
5. [Configuring AeroThemePlasma](#conf) 5. [GTK](#gtk)
6. [Uninstalling AeroThemePlasma (old)](#uninstall_old)
## Prerequisites <a name="preq"></a> ## Prerequisites <a name="preq"></a>
**NOTE**: Dependencies for other disros besides Arch Linux have been provided by contributors and aren't updated frequently, which may result in incorrect or missing dependencies. It's necessary to have KDE Plasma already installed on your system (plasma-workspace and plasma-desktop) in order to get all the Plasma-specific dependencies for AeroThemePlasma.
Before installing AeroThemePlasma, it's important to know which display server you're running on (Wayland or X11). This can be checked using Plasma's Info Center page in the settings. It's recommended to run AeroThemePlasma on X11 for now, as it's generally the more stable and feature rich experience (certain restrictions on the Wayland session make some effects and features impossible to achieve, this should hopefully be addressed in the future).
### Arch Linux ### Arch Linux
Required packages: Required packages:
```bash ```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 curl unzip qt6-virtualkeyboard qt6-multimedia qt6-5compat qt6-wayland plasma-wayland-protocols plasma5support kvantum sddm sddm-kcm base-devel plasma-nm plasma-pa plasma-workspace plasma-desktop kwin-x11 plasma-x11-session
``` ```
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. 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.
### Note: Dependencies for other distros besides Arch Linux have been provided by contributors and aren't updated frequently, which may result in incorrect or missing dependencies.
### Fedora KDE ### Fedora KDE
Required Packages: Required Packages:
```bash ```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 unzip kvantum qt6-qtmultimedia-devel qt6-qt5compat-devel libplasma-devel qt6-qtbase-devel qt6-qtwayland-devel plasma-activities-devel kf6-kpackage-devel kf6-kglobalaccel-devel qt6-qtsvg-devel wayland-devel plasma-wayland-protocols kf6-ksvg-devel kf6-kcrash-devel kf6-kguiaddons-devel kf6-kcmutils-devel kf6-kio-devel kdecoration-devel kf6-ki18n-devel kf6-knotifications-devel kf6-kirigami-devel kf6-kiconthemes-devel cmake gmp-ecm-devel kf5-plasma-devel libepoxy-devel kwin-devel kf6-karchive kf6-karchive-devel plasma-wayland-protocols-devel qt6-qtbase-private-devel qt6-qtbase-devel kf6-knewstuff-devel kf6-knotifyconfig-devel kf6-attica-devel kf6-krunner-devel kf6-kdbusaddons-devel kf6-sonnet-devel plasma5support-devel plasma-activities-stats-devel polkit-qt6-1-devel qt-devel libdrm-devel kf6-kitemmodels-devel kf6-kstatusnotifieritem-devel kf6-frameworkintegration-devel
``` ```
## Compiling On Fedora, additional dependencies for X11 include:
To build the components that need to be compiled (KWin effects, Decoration theme, etc.), run `compile.sh`: - `kwin-x11`
- `kwin-x11-devel`
### openSUSE Leap / Tumbleweed
Required packages:
```bash ```bash
$ chmod +x compile.sh && ./compile.sh zypper install cmake make ninja gcc gcc-c++ gmp-ecm-devel kf6-extra-cmake-modules qt6-base-devel qt6-quick-devel qt6-svg-devel qt6-quickcontrols2-devel kf6-kwindowsystem-devel kf6-karchive-devel kf6-kirigami-devel kf6-kbookmarks-devel kf6-kcodecs-devel kf6-kcolorscheme-devel kf6-kcompletion-devel kf6-kconfig-devel kf6-kconfigwidgets-devel kf6-kcoreaddons-devel kf6-kguiaddons-devel kf6-ki18n-devel kf6-kio-devel kf6-kitemviews-devel kf6-kjobwidgets-devel kf6-kservice-devel kf6-kwidgetsaddons-devel kf6-kxmlgui-devel kf6-solid-devel kf6-kglobalaccel-devel kf6-kiconthemes-devel kf6-knotifications-devel kf6-kpackage-devel kf6-ksvg-devel plasma6-activities-devel plasma-wayland-protocols qt6-wayland-devel qt6-quicktest-devel qt6-gui-private-devel kdecoration6-devel kf6-kcmutils-devel qt6-uitools-devel kf6-kcrash-devel libepoxy-devel kwin6-devel kwin6-x11-devel kf6-qqc2-desktop-style-devel knotifications-devel kf6-kauth-devel libplasma6-devel plasma5support6-devel plasma6-activities-stats-devel plasma6-workspace-devel
``` ```
or In openSUSE, additional dependencies for X11 include:
- `kwin6-x11-devel`
### Ubuntu 25.10
```bash ```bash
$ sh compile.sh apt install build-essential cmake ninja-build curl libqt6virtualkeyboard6 libqt6multimedia6 libqt6core5compat6 libplasma5support6 libkdecorations3-dev libkf6colorscheme-dev libkf6i18n-dev libkf6iconthemes-dev libkf6kcmutils-dev libkirigami-dev libkf6kio-dev libkf6notifications-dev libkf6svg-dev libkf6crash-dev libkf6globalaccel-dev libplasma-dev libplasmaactivities-dev libxcb-composite0-dev libxcb-randr0-dev libxcb-shm0-dev libxcb-damage0-dev libepoxy-dev libqt6svg6-dev kwin-dev plasma-wayland-protocols libkf5qqc2desktopstyle-dev libkf6qqc2desktopstyle-dev libplasma5support-dev libkf6auth-dev libkf6newstuff-dev libkf6notifyconfig-dev libkf6attica-dev libkf6runner-dev libkf6dbusaddons-dev libkf6sonnet-dev libkf6xmlgui-dev libkf6coreaddons-dev libkf6widgetsaddons-dev libkf6guiaddons-dev qt6-base-dev qt6-5compat-dev qml-module-org-kde-qqc2desktopstyle libplasmaactivitiesstats-dev plasma-workspace-dev libkf6statusnotifieritem-dev qml-module-org-kde-kirigami-addons-sounds qml6-module-org-kde-kirigamiaddons-sounds
``` ```
## Plasma components <a name="plasma"></a> On Ubuntu, additional dependencies for X11 include:
This section relates to the directories found in the `plasma` folder. - `kwin-x11`
- `kwin-x11-dev`
### Install scripts ## Migration notice <a name="migration"></a>
1. Run the following scripts: AeroThemePlasma has moved to an installation method based on CMake, meant to simplify the entire process, as well as make it easier for distro packaging in the future. The old install scripts are deprecated and no longer work. It's highly recommended to first uninstall the old instance of AeroThemePlasma following these steps:
1. Run the uninstall script:
```bash ```bash
$ chmod +x install_plasmoids.sh && ./install_plasmoids.sh $ bash migration-uninstall.sh
$ chmod +x install_plasma_components.sh && ./install_plasma_components.sh # Requires authorization for SMOD resources and SDDM themes
``` ```
### Manual 2. To undo the font rendering modifications, delete the `~/.config/fontconfig/fonts.conf` file provided by the previous versions of ATP.
3. Remove the line `QML_DISABLE_DISTANCEFIELD=1` from `/etc/environment`
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. It's advisable to also consult [Uninstalling AeroThemePlasma (old)](#uninstall_old) for more details.
2. Move the folders `desktoptheme`, `look-and-feel`, `plasmoids`, `layout-templates`, `shells` into `~/.local/share/plasma`. If the folder doesn't exist, create it. These folders contain the following: ## Getting started <a name="started"></a>
- Plasma Style ### Arch Linux
- Global Theme (more accurately, just the lock screen)
- Plasmoids
- Plasma shell
- Preset panel layout that can be applied from Edit mode
3. Move `sddm-theme-mod` to `/usr/share/sddm/themes`. Optionally, to enable the Vista start screen, set `enableStartup=true` in `theme.conf.user` *AUR packages coming soon*
4. Import and apply the color scheme through System Settings.
## KWin components <a name="kwin"></a> ### From source
### Install scripts To download this repository, clone it with `git`:
1. Run the following script:
```bash ```bash
$ chmod +x install_kwin_components.sh && ./install_kwin_components.sh $ git clone https://gitgud.io/wackyideas/aerothemeplasma.git aerothemeplasma
$ cd aerothemeplasma
``` ```
### Manual It's highly recommended to use git for downloading AeroThemePlasma as updating becomes much easier.
This section relates to the directories found in the `kwin` folder. Run the following script:
1. Move `effects`, `tabbox`, `outline`, `scripts` to `~/.local/share/kwin`. ```sh
2. In System Settings, apply the following settings: $ bash install.sh --ninja # Pass --ninja to reduce build times
```
- In Window Behavior -> Titlebar Actions: This will clone every repository needed for AeroThemePlasma and build everything from source.
- Mouse wheel: Do nothing
- In Window Behavior -> Task Switcher:
- Main: Thumbnail Seven, Include "Show Desktop" entry
- Alternative: Flip Switch, Forward shortcut: Meta+Tab
- In Window Behavior -> KWin Scripts:
- 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
## Miscellaneous components <a name="misc"></a> You can also run the install script like this:
### Install scripts
1. Run the following script:
```bash
$ chmod +x install_misc_components.sh && ./install_misc_components.sh
```
This section relates to the directories found in the `misc` folder.
1. Move the `Kvantum` folder (the one inside the `kvantum` folder) to `~/.config`, then in Kvantum Manager select the theme.
2. Unpack the sound archive and move the folders to `~/.local/share/sounds`, then select the sound theme in System Settings.
3. Unpack the icon archive and move the folder to `~/.local/share/icons`, then select the icon theme in System Settings.
4. Unpack the cursor archive and move the folder to `/usr/share/icons`, then follow [this](https://www.youtube.com/watch?v=Dj7co2R7RKw) guide to install the cursor theme.
5. Move the files located in `mimetype` into `~/.local/share/mime/packages` and then run `update-mime-database ~/.local/share/mime` to fix DLLs and EXE files sharing the same icons.
6. Segoe UI, Segoe UI Bold, Segoe UI Semibold and Segoe UI Italic are required for this theme and they should be installed as system-wide fonts.
If SDDM fails to pick up on the cursor theme, go to System Settings -> Startup and Shutdown -> Login Screen (SDDM), and click on Apply Plasma Settings to enforce your current cursor theme, and other relevant settings. Do this _after_ installing everything else. If even that fails, change the default cursor theme in `/usr/share/icons/default/index.theme` to say `aero-drop`.
### Plymouth theme
Optionally, install [PlymouthVista](https://github.com/furkrn/PlymouthVista) which supports Windows 7 boot animations, and features a more detailed setup guide.
## Polkit User Account Control modification
# 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.
1. Navigate to the `uac-polkitagent` folder, and run `install.sh` (or `install_ninja.sh` if you have Ninja installed):
```bash ```bash
$ chmod +x install.sh && ./install.sh $ chmod +x install.sh && ./install.sh
``` ```
2. To remove the minimize and maximize buttons from the window, run `add_rule.sh` which will generate the appropriate KWin rule: ## NOTE
The script relies on `LIBEXEC_DIR` in order to determine the location of `/usr/$LIBEXEC_DIR/plasma-dbus-run-session-if-needed`, needed for the Wayland session to properly start. By default, this is set to `lib`. If you're installing ATP on a distribution where this is different, such as Fedora, this needs to be set to the appropriate value for your specific distribution. For example, on Fedora, `LIBEXEC_DIR` should be `libexec`:
```bash ```bash
$ chmod +x add_rule.sh && ./add_rule.sh $ LIBEXEC_DIR=libexec bash install.sh --ninja
``` ```
## Configuring AeroThemePlasma <a name="conf"></a> The script will ask for admin privileges for file installation. Do **NOT** run any of the provided install scripts with sudo/doas or as root.
1. Apply the Global Theme after installing everything. Make sure to restart KDE Plasma and KWin as well, by restarting your session. **It's highly recommended** to keep the generated build files, so uninstalling AeroThemePlasma and its dependencies can be done using `sudo make uninstall` or `sudo ninja uninstall` in each build directory. A backup of all `install_manifest.txt` files (that list all files that have been installed on the system) is stored in the `manifest` folder.
2. On a fresh KDE install, **remove** the default panel and add the "AeroThemePlasma Taskbar" panel using Edit mode. You can also manually configure the panel for a finer setup.
3. Right click on the desktop and open "Desktop and Wallpaper", and select "Desktop (Win7)" under Layout, and apply the changes.
4. Disable the following entries in the system tray settings:
- Power and Battery ### Updating AeroThemePlasma
- Networks
- Keyboard Layout
- Audio Volume
And enable the following entries: Update and do `git pull` on the cloned repository to get new changes:
- Battery ```bash
- Network Management $ cd /path/to/aerothemeplasma
- Sound Mixer $ git pull
```
5. When updating KDE Plasma, usually through a full system upgrade, recompiling KWin effects and the DefaultToolTip component is necessary. Re-run the install script as described in [Getting started](#started). The script will automatically pull changes for all cloned repositories and rebuild them. In case something needs to be rebuilt completely, simply delete the repository folder causing the build error, and re-run the install script.
6. In System Settings -> Colors & Themes -> Colors, set "Accent color from color scheme"
7. In System Settings -> Session -> Desktop Session, uncheck the "Ask for confirmation" option.
8. In System Settings -> Keyboard -> Shortcuts, under KWin, disable the "Peek at Desktop" shortcut, and remap the "MinimizeAll" to Meta+D
9. In System Settings -> Colors & Themes -> Cursors -> Configure Launch Feedback, set Cursor feedback to "None"
10. In System Settings -> Fonts, configure the fonts as shown here:
<img src="screenshots/fontconfig.png"> When doing a full system upgrade, KWin effects and `libplasma` modifications tend to stop working. Re-running the install script after a full system upgrade is required for them to work again (assuming no breaking upstream changes happen).
The following steps are optional: ### Uninstalling AeroThemePlasma
10. To enable full font hinting just for Segoe UI, move the `fontconfig` folder to `~/.config`. This will enable full font hinting for Segoe UI while keeping slight font hinting for other fonts. Additionally, append `QML_DISABLE_DISTANCEFIELD=1` into `/etc/environment` in order for this to be properly applied. _While full font hinting makes the font rendering look sharper and somewhat closer to Windows 7's ClearType, on Linux this option causes noticeably faulty kerning. This has been a [prominent](https://github.com/OpenTTD/OpenTTD/issues/11765) [issue](https://gitlab.gnome.org/GNOME/pango/-/issues/656) [for](https://gitlab.gnome.org/GNOME/pango/-/issues/463) [several](https://gitlab.gnome.org/GNOME/pango/-/issues/404) [years](https://github.com/harfbuzz/harfbuzz/issues/2394) [now](https://www.phoronix.com/news/HarfBuzz-Hinting-Woe) and while the situation has improved from being unreadable to just being ugly, a complete solution for this doesn't seem to be coming anytime soon._ Uninstalling AeroThemePlasma can be done by running the following script:
11. For Wine users it's recommended to install the [VistaVG Ultimate](https://www.deviantart.com/vishal-gupta/art/VistaVG-Ultimate-57715902) msstyles theme.
12. To install custom branding at the Info Center, move `kcm-about-distrorc` from the `branding` folder to `~/.config/kdedefaults/`, then edit the file's `LogoPath` entry to point to the absolute path of `kcminfo.png`. ```bash
13. Add the following to `~/.bashrc` to get bash to look more like the command prompt on Windows: $ bash uninstall.sh
```
This will go through almost every build directory and run `sudo make uninstall` or `sudo ninja uninstall` in those directories. After this, the `libplasma` package should be reinstalled using your distro's package manager.
```bash
# On Arch Linux
$ sudo pacman -Sy libplasma
```
### Fonts
On Arch Linux, use [this script](https://gitgud.io/aeroshell/aeroshell-workspace/-/blob/Plasma/6.6/scripts/install_fonts_arch.sh) to extract fonts and install them as an Arch package from a valid Windows 7 ISO. A 32-bit Windows 7 ISO is recommended for faster download speeds.
## Optional <a name="optional"></a>
1. For Wine users it's recommended to install the [VistaVG Ultimate](https://www.deviantart.com/vishal-gupta/art/VistaVG-Ultimate-57715902) msstyles theme.
2. Add the following to `~/.bashrc` to get bash to look more like the command prompt on Windows:
```bash ```bash
PS1='C:${PWD//\//\\\\}> ' PS1='C:${PWD//\//\\\\}> '
@ -200,4 +169,161 @@ PS1='C:${PWD//\//\\\\}> '
echo -e "Microsoft Windows [Version 6.1.7600]\nCopyright (c) 2009 Microsoft Corporation. All rights reserved.\n" echo -e "Microsoft Windows [Version 6.1.7600]\nCopyright (c) 2009 Microsoft Corporation. All rights reserved.\n"
``` ```
14. In the terminal emulator of your choice (e.g Konsole), set the font to [TerminalVector](https://www.yohng.com/software/terminalvector.html), size 9pt. Disable smooth font rendering and bold text, reduce the line spacing and margins to 0px, set the cursor shape to underline, and enable cursor blinking. 3. In the terminal emulator of your choice (e.g Konsole), set the font to [TerminalVector](https://www.yohng.com/software/terminalvector.html), size 9pt. Disable smooth font rendering and bold text, reduce the line spacing and margins to 0px, set the cursor shape to underline, and enable cursor blinking.
4. Install [PlymouthVista](https://github.com/furkrn/PlymouthVista) which supports Windows 7 boot animations, and features a more detailed setup guide.
## GTK <a name="gtk"></a>
AeroThemePlasma officially doesn't have any kind of maintenance, development or support for GTK applications. Instead, check out
[Windows 7 Better](https://gitgud.io/Gamer95875/Windows-7-Better) by [Gamer95875](https://gitgud.io/Gamer95875), which is the recommended set of themes that works best with AeroThemePlasma.
## Uninstalling AeroThemePlasma (old) <a name="uninstall_old"></a>
### This section is meant for users migrating away from older versions of AeroThemePlasma (Before Plasma 6.6).
AeroThemePlasma provides an uninstall script that undoes much of what's installed on the system. The script assumes that all of the CMake build files are still present in the repo, most importantly the `install_manifest.txt` files generated as a result of installing compiled parts of ATP. If these files are missing from the repo, they need to be regenerated by once again rerunning the necessary scripts like this:
```bash
$ bash compile.sh --skip-libplasma [--wayland] [--ninja]
$ bash install_plasmoids.sh --skip-kpackages [--ninja]
```
Once this is done, the script is simply executed:
```bash
$ bash uninstall.sh
```
This should be run outside of the AeroThemePlasma session, preferrably in a regular Plasma session. The script will ask for confirmation to uninstall components of the system. **Please check that none of the locations are ill-formed before accepting each prompt, especially those that require additional privileges to uninstall. In case this happens to you, report it as an issue ASAP.**
Afterwards, `libplasma` and `polkit-kde-agent` should be reinstalled using your distro's package manager. For example, on Arch Linux:
```bash
sudo pacman -Sy libplasma polkit-kde-agent
```
### Manual uninstallation
The script performs the following steps in order to uninstall ATP. Uninstalling ATP should be done outside of the ATP session itself. Log into the Plasma session before performing any of these steps.
### CMake
- Perform `sudo make uninstall` or `sudo ninja uninstall` in the following directories if applicable:
```
kwin/decoration/build
plasma/sddm/login-sessions/build
plasma/aerothemeplasma-kcmloader/build
plasma/plasmoids/src/systemtray_src/build
plasma/plasmoids/src/notifications_src/build
plasma/plasmoids/src/volume_src/build
plasma/plasmoids/src/sevenstart_src/build
plasma/plasmoids/src/seventasks_src/build
plasma/plasmoids/src/desktopcontainment/build
kwin/effects_cpp/kde-effects-aeroglassblur/build
kwin/effects_cpp/kwin-effect-smodsnap-v2/build
kwin/effects_cpp/smodglow/build
kwin/effects_cpp/aeroglide/build
kwin/effects_cpp/startupfeedback/build
# For Wayland builds
kwin/effects_cpp/kde-effects-aeroglassblur/build-wl
kwin/effects_cpp/kwin-effect-smodsnap-v2/build-wl
kwin/effects_cpp/smodglow/build-wl
kwin/effects_cpp/aeroglide/build-wl
kwin/effects_cpp/startupfeedback/build-wl
```
### Plasmoids
- Perform `kpackagetool6 -t "Plasma/Applet" -r "plasmoid_id"` for each plasmoid, replacing `plasmoid_id` with the following:
```
io.gitgud.wackyideas.battery
io.gitgud.wackyideas.desktopcontainment
io.gitgud.wackyideas.digitalclocklite
io.gitgud.wackyideas.keyboardlayout
io.gitgud.wackyideas.networkmanagement
io.gitgud.wackyideas.panel
io.gitgud.wackyideas.SevenStart
io.gitgud.wackyideas.seventasks
io.gitgud.wackyideas.volume
io.gitgud.wackyideas.win7showdesktop
```
### Plasma components
- Perform the following commands:
```bash
kpackagetool6 -t "Plasma/LookAndFeel" -r "authui7"
kpackagetool6 -t "Plasma/LayoutTemplate" -r "io.gitgud.wackyideas.taskbar"
kpackagetool6 -t "Plasma/Theme" -r "Seven-Black"
kpackagetool6 -t "Plasma/Shell" -r "io.gitgud.wackyideas.desktop"
```
- Delete `~/.local/share/color-schemes/Aero.colors`
- Delete `~/.config/Kvantum/Windows7Aero`
- Delete the sound themes from `~/.local/share/sounds`:
```
'Windows 7'
'Windows 7 Afternoon'
'Windows 7 Calligraphy'
'Windows 7 Characters'
'Windows 7 Cityscape'
'Windows 7 Delta'
'Windows 7 Festival'
'Windows 7 Garden'
'Windows 7 Heritage'
'Windows 7 Landscape'
'Windows 7 Quirky'
'Windows 7 Raga'
'Windows 7 Savanna'
'Windows 7 Sonata'
```
- Delete the icon theme at `~/.local/share/icons/Windows 7 Aero`
- Delete the following files at `~/.local/share/mime/packages`:
```
application-vnd.microsoft.portable-executable.xml
application-x-ms-dll.xml
application-x-msdownload.xml
application-x-ms-ne-executable.xml
```
and run `update-mime-database ~/.local/share/mime` to refresh MIME associations
### KWin components
- Perform `kpackagetool6 -t "KWin/Effect" -r "effect_id"` for each effect, replacing `effect_id` with the following:
```
dimscreenaero
fadingpopupsaero
loginaero
seventasks-thumbnails
smodpeekeffect
squashaero
```
- Perform the following:
```bash
kpackagetool6 -t "KWin/Script" -r "smodpeekscript"
kpackagetool6 -t "KWin/WindowSwitcher" -r "flip3d"
kpackagetool6 -t "KWin/WindowSwitcher" -r "thumbnail_seven"
```
- Delete the outline at `~/.local/share/kwin/outline`
- Delete the symlinks `~/.local/share/kwin-x11` and `~/.local/share/kwin-wayland`
- Delete the branding at `~/.config/kdedefaults/kcm-about-distrorc` and the logo (`~/.config/kdedefaults/kcminfo.png`)
### Other components
- Delete the cursor theme at `/usr/share/icons/aero-drop`
- Delete the SDDM theme at `/usr/share/sddm/themes/sddm-theme-mod`
- Delete the SMOD files at `/usr/share/smod` and `~/.local/share/smod`
- Delete `/opt/aerothemeplasma`

View file

@ -1,22 +1,21 @@
# AEROTHEMEPLASMA FOR KDE 6 # AeroThemePlasma
## 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. ## 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 ## 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. 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 ATP is in constant development and testing, it has been tested on:
2. Plasma 6.3.4, KDE Frameworks 6.12.0, Qt 6.9.0
3. 96 DPI scaling, multi monitor - Arch Linux x64 and other Arch derivatives
4. X11, Wayland* - Plasma 6.6.0, KDE Frameworks 6.23.0, Qt 6.10.2
- 96 DPI scaling, multi monitor
- X11, Wayland*
*AeroThemePlasma currently lacks full Wayland support, which may result in Wayland-specific issues. *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 software comes "as is" without warranty of any kind. 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. The Plasma 5 version of ATP is available as a tag in this repository, however it is unmaintained and no longer supported.
@ -24,6 +23,8 @@ If you find my work valuable consider donating:
<a href='https://ko-fi.com/M4M2NJ9PJ' target='_blank'><img height='42' style='border:0px;height:42px;' src='https://storage.ko-fi.com/cdn/kofi2.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a> <a href='https://ko-fi.com/M4M2NJ9PJ' target='_blank'><img height='42' style='border:0px;height:42px;' src='https://storage.ko-fi.com/cdn/kofi2.png?v=3' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
[GitHub mirror](https://github.com/WackyIdeas/aerothemeplasma)
## Installation ## Installation
See [INSTALL.md](./INSTALL.md) for a detailed installation guide. See [INSTALL.md](./INSTALL.md) for a detailed installation guide.
@ -58,6 +59,7 @@ Huge thanks to everyone who helped out along the way by contributing, testing, p
- [AngelBruni](https://github.com/angelbruni) for contributing several SVG textures, most notably the clock in DigitalClockLite Seven - [AngelBruni](https://github.com/angelbruni) for contributing several SVG textures, most notably the clock in DigitalClockLite Seven
- [ricewind012](https://github.com/ricewind012/) for .bashrc Microsoft Windows header - [ricewind012](https://github.com/ricewind012/) for .bashrc Microsoft Windows header
- [furkrn](https://gitgud.io/furkrn) for creating and maintaining the [Plymouth theme](https://github.com/furkrn/PlymouthVista) - [furkrn](https://gitgud.io/furkrn) for creating and maintaining the [Plymouth theme](https://github.com/furkrn/PlymouthVista)
- [IcyGuidance](https://gitgud.io/IcyGuidance) for designing the notification badges in SevenTasks
### Special Thanks ### Special Thanks
@ -75,6 +77,7 @@ Huge thanks to everyone who helped out along the way by contributing, testing, p
- [WinXplorer](https://gitgud.io/catpswin56/winxplorer) by catpswin56 - [WinXplorer](https://gitgud.io/catpswin56/winxplorer) by catpswin56
- [SMOD Themes](https://gitgud.io/catpswin56/smod-themes) by catpswin56, a collection of themes that can be used with the SMOD window decoration theme - [SMOD Themes](https://gitgud.io/catpswin56/smod-themes) by catpswin56, a collection of themes that can be used with the SMOD window decoration theme
- [Ice2K.sys](https://toiletflusher.neocities.org/ice2k/) by 0penrc - [Ice2K.sys](https://toiletflusher.neocities.org/ice2k/) by 0penrc
- [Sevulet](https://gitgud.io/snailatte/sevulet) by [snailatte](https://gitgud.io/snailatte)
## Vista variant ## Vista variant

View file

@ -1,44 +0,0 @@
#!/bin/bash
CUR_DIR=$(pwd)
USE_SCRIPT="install_ninja.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
fi
fi
cd "$PWD/misc/defaulttooltip"
sh $USE_SCRIPT
cd "$CUR_DIR"
#echo "Compiling plasmoids..."
#for filename in "$PWD/plasma/plasmoids/src/"*; do
# cd "$filename"
# echo "Compiling $(pwd)"
# sh $USE_SCRIPT
# echo "Done."
# cd "$CUR_DIR"
#done
echo "Compiling SMOD decorations..."
cd "$PWD/kwin/decoration"
sh $USE_SCRIPT
cd "$CUR_DIR"
echo "Done."
echo "Compiling KWin effects..."
for filename in "$PWD/kwin/effects_cpp/"*; do
cd "$filename"
echo "Compiling $(pwd)"
sh $USE_SCRIPT
echo "Done."
cd "$CUR_DIR"
done

59
deprecated/compile.sh Executable file
View file

@ -0,0 +1,59 @@
#!/bin/bash
# You can pass the following arguments to this script:
# --ninja Uses Ninja for faster compilation
# --wayland Tells the KWin build scripts to compile the C++ effects for Wayland
CUR_DIR=$(pwd)
USE_SCRIPT="install.sh"
# Sanity check to see if the proper tools are installed.
if [[ -z "$(command -v cmake)" ]]; then
echo "CMake not found. Stopping."
exit
fi
if [[ -z "$(command -v ninja)" ]]; then
if [[ -z "$(command -v make)" ]]; then
echo "Neither Ninja or GNU Make were found. Stopping"
exit
fi
fi
# Compiles the libplasma patches required for other components of ATP.
# Requires a restart to be applied.
cd "$PWD/misc/libplasma"
sh $USE_SCRIPT $@
cd "$CUR_DIR"
#echo "Compiling plasmoids..."
#for filename in "$PWD/plasma/plasmoids/src/"*; do
# cd "$filename"
# echo "Compiling $(pwd)"
# sh $USE_SCRIPT
# echo "Done."
# cd "$CUR_DIR"
#done
# Compiles the window decoration theme engine.
echo "Compiling SMOD decorations..."
cd "$PWD/kwin/decoration"
sh $USE_SCRIPT $@
cd "$CUR_DIR"
echo "Done."
# Compiles the settings KCM loader used for development and quick access of certain settings pages.
echo "Compiling KCM loader..."
cd "$PWD/plasma/aerothemeplasma-kcmloader"
sh $USE_SCRIPT $@
cd "$CUR_DIR"
echo "Done."
# Compiles all the KWin C++ effects, going folder by folder.
echo "Compiling KWin effects..."
for filename in "$PWD/kwin/effects_cpp/"*; do
cd "$filename"
echo "Compiling $(pwd)"
sh $USE_SCRIPT $@
echo "Done."
cd "$CUR_DIR"
done

View file

@ -2,11 +2,13 @@
CUR_DIR=$(pwd) CUR_DIR=$(pwd)
# Sanity check to see if the proper tools are installed.
if [[ -z "$(command -v kpackagetool6)" ]]; then if [[ -z "$(command -v kpackagetool6)" ]]; then
echo "kpackagetool6 not found. Stopping." echo "kpackagetool6 not found. Stopping."
exit exit
fi fi
# Function that installs/upgrades KDE packages.
# install_component $filename "Plasma/Shell" # install_component $filename "Plasma/Shell"
function install_component { function install_component {
COMPONENT=$(basename "$1") COMPONENT=$(basename "$1")
@ -22,6 +24,10 @@ function install_component {
cd "$CUR_DIR" cd "$CUR_DIR"
} }
# Installs the SMOD folder which contains resources used by other ATP components.
echo -e "Installing SMOD resources..."
pkexec cp -r "$PWD/kwin/smod" "/usr/share/"
echo "Installing KWin effects (JS)..." echo "Installing KWin effects (JS)..."
for filename in "$PWD/kwin/effects/"*; do for filename in "$PWD/kwin/effects/"*; do
install_component "$filename" "KWin/Effect" install_component "$filename" "KWin/Effect"
@ -46,6 +52,13 @@ KWIN_DIR="$HOME/.local/share/kwin"
cp -r "$PWD/kwin/outline" "$KWIN_DIR" cp -r "$PWD/kwin/outline" "$KWIN_DIR"
echo "Done." echo "Done."
# Use symlinks so the KWin components are visible under both Wayland and X11.
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
echo "Done."

View file

@ -2,41 +2,49 @@
CUR_DIR=$(pwd) CUR_DIR=$(pwd)
# Sanity check to see if the proper tools are installed
if [[ -z "$(command -v tar)" ]]; then if [[ -z "$(command -v tar)" ]]; then
echo "tar not found. Stopping." echo "tar not found. Stopping."
exit exit
fi fi
if [[ -z "$(command -v unzip)" ]]; then
echo "unzip not found. Stopping."
exit
fi
TMP_DIR="/tmp/atp" TMP_DIR="/tmp/atp"
mkdir -p "$TMP_DIR" mkdir -p "$TMP_DIR"
# Kvantum # Installs the Kvantum theme.
echo "Installing Kvantum theme..." echo "Installing Kvantum theme..."
KV_DIR="$HOME/.config" KV_DIR="$HOME/.config"
cp -r "$PWD/misc/kvantum/Kvantum" "$KV_DIR" cp -r "$PWD/misc/kvantum/Kvantum" "$KV_DIR"
echo "Done." echo "Done."
#Sounds # Installs the sound themes.
echo "Unpacking sound themes..." echo "Unpacking sound themes..."
SOUNDS_DIR="$HOME/.local/share/sounds" SOUNDS_DIR="$HOME/.local/share/sounds"
mkdir -p "$SOUNDS_DIR"
tar -xf "$PWD/misc/sounds/sounds.tar.gz" --directory "$SOUNDS_DIR" tar -xf "$PWD/misc/sounds/sounds.tar.gz" --directory "$SOUNDS_DIR"
echo "Done." echo "Done."
#Icons # Installs the icon theme.
echo "Unpacking icon theme..." echo "Unpacking icon theme..."
ICONS_DIR="$HOME/.local/share/icons" ICONS_DIR="$HOME/.local/share/icons"
mkdir -p "$ICONS_DIR"
tar -xf "$PWD/misc/icons/Windows 7 Aero.tar.gz" --directory "$ICONS_DIR" tar -xf "$PWD/misc/icons/Windows 7 Aero.tar.gz" --directory "$ICONS_DIR"
echo "Done." echo "Done."
#Cursors # Installs the cursor theme. Requires admin privileges as this theme gets installed globally so SDDM can use it.
echo "Unpacking cursor theme..." echo "Unpacking cursor theme..."
CURSOR_DIR="/usr/share/icons" CURSOR_DIR="/usr/share/icons"
pkexec tar -xf "$PWD/misc/cursors/aero-drop.tar.gz" --directory "$CURSOR_DIR" pkexec tar -xf "$PWD/misc/cursors/aero-drop.tar.gz" --directory "$CURSOR_DIR"
echo "Done." echo "Done."
#Mimetype # Installs the modified mimetype associations.
echo "Installing mimetypes..." echo "Installing mimetypes..."
MIMETYPE_DIR="$HOME/.local/share/mime/packages" MIMETYPE_DIR="$HOME/.local/share/mime/packages"
mkdir -p "$MIMETYPE_DIR"
for filename in "$PWD/misc/mimetype/"*; do for filename in "$PWD/misc/mimetype/"*; do
cp -r "$filename" "$MIMETYPE_DIR" cp -r "$filename" "$MIMETYPE_DIR"
done done
@ -44,12 +52,14 @@ update-mime-database "$HOME/.local/share/mime"
echo "Done." echo "Done."
#Optional # Optional components
echo "Do you want to install a custom font configuration for Segoe UI fonts? (y/N)" echo "Do you want to install a custom font configuration for Segoe UI fonts? (Recommended) (y/N)"
read answer read answer
FONTCONF_DIR="$HOME/.config" FONTCONF_DIR="$HOME/.config"
if [ "$answer" != "${answer#[Yy]}" ] ;then if [ "$answer" != "${answer#[Yy]}" ] ;then
# Installs custom fontconfig to tweak Segoe UI.
if test -f "$FONTCONF_DIR/fontconfig/fonts.conf"; then if test -f "$FONTCONF_DIR/fontconfig/fonts.conf"; then
echo "Backing up fonts.conf to fonts.conf.old" echo "Backing up fonts.conf to fonts.conf.old"
cp -r "$FONTCONF_DIR/fontconfig/fonts.conf" "$FONTCONF_DIR/fontconfig/fonts.conf.old" cp -r "$FONTCONF_DIR/fontconfig/fonts.conf" "$FONTCONF_DIR/fontconfig/fonts.conf.old"
@ -57,18 +67,22 @@ if [ "$answer" != "${answer#[Yy]}" ] ;then
echo "Installing custom font configuration..." echo "Installing custom font configuration..."
cp -r "$PWD/misc/fontconfig/" "$FONTCONF_DIR" cp -r "$PWD/misc/fontconfig/" "$FONTCONF_DIR"
# Defines QML_DISABLE_DISTANCEFIELD environment variable which generally enhances the font rendering.
HAS_VAR=$(grep "QML_DISABLE_DISTANCEFIELD" /etc/environment) HAS_VAR=$(grep "QML_DISABLE_DISTANCEFIELD" /etc/environment)
echo "Adding QML_DISABLE_DISTANCEFIELD=1 to /etc/environment" echo "Adding QML_DISABLE_DISTANCEFIELD=1 to /etc/environment"
if [[ -n "$HAS_VAR" ]]; then if [[ -n "$HAS_VAR" ]]; then
echo "Variable already added, skipping..." echo "Variable already added, skipping..."
else else
pkexec echo "QML_DISABLE_DISTANCEFIELD=1" >> /etc/environment pkexec sh -c "echo \"QML_DISABLE_DISTANCEFIELD=1\" >> /etc/environment"
fi fi
fi fi
echo "Done." echo "Done."
# Installs custom branding for the system settings info page.
echo "Do you want to install custom branding for Info Center? (y/N)" echo "Do you want to install custom branding for Info Center? (y/N)"
read answer read answer
BRANDING_DIR="$HOME/.config/kdedefaults" BRANDING_DIR="$HOME/.config/kdedefaults"
mkdir -p "$BRANDING_DIR"
if [ "$answer" != "${answer#[Yy]}" ] ;then if [ "$answer" != "${answer#[Yy]}" ] ;then
for filename in "$PWD/misc/branding/"*; do for filename in "$PWD/misc/branding/"*; do
@ -78,6 +92,7 @@ if [ "$answer" != "${answer#[Yy]}" ] ;then
fi fi
echo "Done." echo "Done."
# Installs the terminal font.
echo "Do you want to install the command prompt font (Terminal Vector)? (y/N)" echo "Do you want to install the command prompt font (Terminal Vector)? (y/N)"
read answer read answer
if [ "$answer" != "${answer#[Yy]}" ] ;then if [ "$answer" != "${answer#[Yy]}" ] ;then
@ -87,6 +102,7 @@ if [ "$answer" != "${answer#[Yy]}" ] ;then
fi fi
echo "Done." echo "Done."
# Installs the Plymouth theme.
echo "Do you want to install the Plymouth theme? (y/N)" echo "Do you want to install the Plymouth theme? (y/N)"
read answer read answer
if [ "$answer" != "${answer#[Yy]}" ] ;then if [ "$answer" != "${answer#[Yy]}" ] ;then
@ -100,7 +116,7 @@ if [ "$answer" != "${answer#[Yy]}" ] ;then
chmod +x ./compile.sh chmod +x ./compile.sh
chmod +x ./install.sh chmod +x ./install.sh
./compile.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" echo "For more details, check out the project at https://github.com/furkrn/PlymouthVista"
fi fi
fi fi

View file

@ -2,10 +2,15 @@
CUR_DIR=$(pwd) CUR_DIR=$(pwd)
# Sanity check to see if the proper tools are installed.
if [[ -z "$(command -v kpackagetool6)" ]]; then if [[ -z "$(command -v kpackagetool6)" ]]; then
echo "kpackagetool6 not found. Stopping." echo "kpackagetool6 not found. Stopping."
exit exit
fi fi
if [[ -z "$(command -v cmake)" ]]; then
echo "CMake not found. Stopping."
exit
fi
if [[ -z "$(command -v tar)" ]]; then if [[ -z "$(command -v tar)" ]]; then
echo "tar not found. Stopping." echo "tar not found. Stopping."
exit exit
@ -15,6 +20,7 @@ if [[ -z "$(command -v sddmthemeinstaller)" ]]; then
exit exit
fi fi
# Function that installs/upgrades KDE packages.
# install_component $filename "Plasma/Shell" # install_component $filename "Plasma/Shell"
function install_component { function install_component {
COMPONENT=$(basename "$1") COMPONENT=$(basename "$1")
@ -30,30 +36,29 @@ function install_component {
cd "$CUR_DIR" cd "$CUR_DIR"
} }
#killall plasmashell
# LNF # Installs the Global Theme (Look and feel).
install_component "$PWD/plasma/look-and-feel/authui7" "Plasma/LookAndFeel" install_component "$PWD/plasma/look-and-feel/authui7" "Plasma/LookAndFeel"
# Layout template # Layout template
install_component "$PWD/plasma/layout-templates/io.gitgud.wackyideas.taskbar" "Plasma/LayoutTemplate" install_component "$PWD/plasma/layout-templates/io.gitgud.wackyideas.taskbar" "Plasma/LayoutTemplate"
# Plasma Style # Plasma Style
install_component "$PWD/plasma/desktoptheme/Seven-Black" "Plasma/Theme" install_component "$PWD/plasma/desktoptheme/Seven-Black" "Plasma/Theme"
# Shell # Shell
install_component "$PWD/plasma/shells/org.kde.plasma.desktop" "Plasma/Shell" install_component "$PWD/plasma/shells/io.gitgud.wackyideas.desktop" "Plasma/Shell"
# Color scheme # Installs the color scheme.
echo -e "Installing color scheme..." echo -e "Installing color scheme..."
COLOR_DIR="$HOME/.local/share/color-schemes" COLOR_DIR="$HOME/.local/share/color-schemes"
mkdir -p "$COLOR_DIR" mkdir -p "$COLOR_DIR"
cp "$PWD/plasma/color_scheme/AeroColorScheme1.colors" "$COLOR_DIR" cp "$PWD/plasma/color_scheme/Aero.colors" "$COLOR_DIR"
#plasma-apply-colorscheme AeroColorScheme1 #plasma-apply-colorscheme Aero
# SMOD # Installs the SDDM theme, as well as the SDDM entries required for ATP.
echo -e "Installing SMOD resources..." echo -e "Installing login manager entries..."
pkexec cp -r "$PWD/plasma/smod" "/usr/share/" cd "plasma/sddm/login-sessions"
# SDDM sh install.sh
echo -e "Installing SDDM theme..." echo -e "Installing SDDM theme..."
cd "plasma/sddm" cd "$CUR_DIR/plasma/sddm"
tar -zcvf "sddm-theme-mod.tar.gz" "sddm-theme-mod" tar -zcvf "sddm-theme-mod.tar.gz" "sddm-theme-mod"
sddmthemeinstaller -i "sddm-theme-mod.tar.gz" sddmthemeinstaller -i "sddm-theme-mod.tar.gz"
rm "sddm-theme-mod.tar.gz" rm "sddm-theme-mod.tar.gz"

View file

@ -1,8 +1,13 @@
#!/bin/bash #!/bin/bash
CUR_DIR=$(pwd) # You can pass the following arguments to this script:
USE_SCRIPT="install_ninja.sh" # --ninja Uses Ninja for faster compilation
# --no-compile Skips compilation entirely
CUR_DIR=$(pwd)
USE_SCRIPT="install.sh"
# Sanity check to see if the proper tools are installed.
if [[ -z "$(command -v kpackagetool6)" ]]; then if [[ -z "$(command -v kpackagetool6)" ]]; then
echo "kpackagetool6 not found. Stopping." echo "kpackagetool6 not found. Stopping."
exit exit
@ -13,13 +18,15 @@ if [[ -z "$(command -v cmake)" ]]; then
exit exit
fi fi
if [[ -z "$(command -v ninja)" ]]; then if [[ -z "$(command -v ninja)" ]]; then
USE_SCRIPT="install.sh"
if [[ -z "$(command -v make)" ]]; then if [[ -z "$(command -v make)" ]]; then
echo "Neither Ninja or GNU Make were found. Stopping" echo "Neither Ninja or GNU Make were found. Stopping"
exit exit
fi fi
fi fi
# Skips the build process of plasmoids that have C++ components
# Most of the time, recompiling isn't needed as most changes are done
# on the QML side.
if [[ $1 == '--no-compile' ]]; then if [[ $1 == '--no-compile' ]]; then
echo "Skipping compilation..." echo "Skipping compilation..."
else else
@ -28,12 +35,13 @@ else
for filename in "$PWD/plasma/plasmoids/src/"*; do for filename in "$PWD/plasma/plasmoids/src/"*; do
cd "$filename" cd "$filename"
echo "Compiling $(pwd)" echo "Compiling $(pwd)"
sh $USE_SCRIPT sh $USE_SCRIPT $@
echo "Done." echo "Done."
cd "$CUR_DIR" cd "$CUR_DIR"
done done
fi fi
# Installs or upgrades plasmoids using kpackagetool6
function install_plasmoid { function install_plasmoid {
PLASMOID=$(basename "$1") PLASMOID=$(basename "$1")
if [[ $PLASMOID == 'src' ]]; then if [[ $PLASMOID == 'src' ]]; then

7
docs/kwin/effectscpp.md Normal file
View file

@ -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)

8
docs/kwin/effectsjs.md Normal file
View file

@ -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)

9
docs/kwin/outline.md Normal file
View file

@ -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.

0
docs/kwin/smod.md Normal file
View file

View file

8
docs/kwin/tabbox.md Normal file
View file

@ -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.

0
docs/misc/libplasma.md Normal file
View file

29
docs/plasma/kcmloader.md Normal file
View file

@ -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

View file

@ -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.

21
docs/plasma/plasmoids.md Normal file
View file

@ -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)

13
docs/plasma/sddm.md Normal file
View file

@ -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.

0
docs/plasma/shell.md Normal file
View file

117
install.sh Normal file
View file

@ -0,0 +1,117 @@
#!/bin/bash
CUR_DIR=${PWD}
SU_CMD=sudo
USE_NINJA=
NINJA_PARAM=
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"
NINJA_PARAM="--ninja"
fi
fi
if [[ -z "$(command -v $SU_CMD)" ]]; then
SU_CMD=doas
if [[ -z "$(command -v $SU_CMD)" ]]; then
echo "Neither sudo or doas were detected on the system."
exit
fi
fi
if [ -z $LIBEXEC_DIR ]; then
LIBEXEC_DIR=lib
fi
mkdir -p repos
mkdir -p manifest
cd repos
# uac-polkit-agent
git clone https://gitgud.io/aeroshell/uac-polkit-agent.git uac-polkit-agent
cd uac-polkit-agent
git pull
cmake $USE_NINJA -DCMAKE_INSTALL_PREFIX=/usr -B build . || exit 1
cmake --build build || exit 1
$SU_CMD cmake --install build || exit 1
cp build/install_manifest.txt "$CUR_DIR/manifest/uac-polkit-agent_install_manifest.txt"
cd "$CUR_DIR/repos"
# SMOD
git clone https://gitgud.io/aeroshell/smod.git smod
cd smod
git pull
bash install.sh $NINJA_PARAM
cp build/install_manifest.txt "$CUR_DIR/manifest/smod_install_manifest.txt"
cp smodglow/build/install_manifest.txt "$CUR_DIR/manifest/smodglow_install_manifest.txt"
cp smodglow/build-wl/install_manifest.txt "$CUR_DIR/manifest/smodglow-x11_install_manifest.txt"
cd "$CUR_DIR/repos"
# Aeroshell Workspace
git clone https://gitgud.io/aeroshell/aeroshell-workspace.git aeroshell-workspace
cd aeroshell-workspace
git pull
cmake $USE_NINJA -DCMAKE_INSTALL_PREFIX=/usr -B build . || exit 1
cmake --build build || exit 1
$SU_CMD cmake --install build || exit 1
$SU_CMD update-mime-database "/usr/local/share/mime"
cp build/install_manifest.txt "$CUR_DIR/manifest/aeroshell-workspace_install_manifest.txt"
cd "$CUR_DIR/repos"
# Aeroshell KWin
git clone https://gitgud.io/aeroshell/aeroshell-kwin-components.git aeroshell-kwin-components
cd aeroshell-kwin-components
git pull
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=ON -B build . || exit 1
cmake --build build || exit 1
$SU_CMD cmake --install build || exit 1
cp build/install_manifest.txt "$CUR_DIR/manifest/aeroshell-kwin-components_install_manifest.txt"
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr -DKWIN_BUILD_WAYLAND=OFF -DKWIN_INSTALL_MISC=OFF -B build_x11 . || exit 1
cmake --build build_x11 || exit 1
$SU_CMD cmake --install build_x11 || exit 1
cp build_x11/install_manifest.txt "$CUR_DIR/manifest/aeroshell-kwin-components-x11_install_manifest.txt"
cd "$CUR_DIR/repos"
# Aerothemeplasma icons
git clone https://gitgud.io/aeroshell/atp/aerothemeplasma-icons aerothemeplasma-icons
cd aerothemeplasma-icons
git pull
cmake $USE_NINJA -DCMAKE_INSTALL_PREFIX=/usr -B build . || exit 1
cmake --build build || exit 1
$SU_CMD cmake --install build || exit 1
cp build/install_manifest.txt "$CUR_DIR/manifest/icons_install_manifest.txt"
cd "$CUR_DIR/repos"
# Aerothemeplasma sounds
git clone https://gitgud.io/aeroshell/atp/aerothemeplasma-icons aerothemeplasma-sounds
cd aerothemeplasma-sounds
git pull
cmake $USE_NINJA -DCMAKE_INSTALL_PREFIX=/usr -B build . || exit 1
cmake --build build || exit 1
$SU_CMD cmake --install build || exit 1
cp build/install_manifest.txt "$CUR_DIR/manifest/sounds_install_manifest.txt"
cd "$CUR_DIR/repos"
# Aerothemeplasma
cd "$CUR_DIR"
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBEXECDIR=$LIBEXEC_DIR -B build . || exit 1
cmake --build build || exit 1
$SU_CMD cmake --install build || exit 1
cp build/install_manifest.txt "$CUR_DIR/manifest/aerothemeplasma_install_manifest.txt"
cd "$CUR_DIR/repos"
# libplasma last
git clone https://gitgud.io/aeroshell/libplasma.git libplasma
cd libplasma
git pull
cmake $USE_NINJA -DCMAKE_INSTALL_PREFIX=/usr -B build . || exit 1
cmake --build build || exit 1
$SU_CMD cmake --install build || exit 1
cp build/install_manifest.txt "$CUR_DIR/manifest/libplasma_install_manifest.txt"
cd "$CUR_DIR/repos"
echo "Done."

View file

@ -1,2 +0,0 @@
# clang-format
32149dc002ae574ed41f111bf52712b1765b906b

View file

@ -1,7 +0,0 @@
build
.clang-format
/compile_commands.json
.clangd
.idea
/cmake-build*
.cache

View file

@ -1,12 +0,0 @@
# SPDX-FileCopyrightText: None
# SPDX-License-Identifier: CC0-1.0
include:
- project: sysadmin/ci-utilities
file:
- /gitlab-templates/linux.yml
- /gitlab-templates/freebsd.yml
- /gitlab-templates/linux-qt6.yml
- /gitlab-templates/windows.yml
- /gitlab-templates/freebsd-qt6.yml
- /gitlab-templates/windows-qt6.yml

View file

@ -1,41 +0,0 @@
# SPDX-FileCopyrightText: None
# SPDX-License-Identifier: CC0-1.0
Dependencies:
- 'on': ['Linux/Qt5', 'FreeBSD/Qt5', 'Windows/Qt5']
'require':
'frameworks/extra-cmake-modules': '@latest'
'frameworks/kconfig': '@latest'
'frameworks/kconfigwidgets': '@latest'
'frameworks/kcoreaddons': '@latest'
'frameworks/kguiaddons': '@latest'
'frameworks/ki18n': '@latest'
'frameworks/kiconthemes': '@latest'
'frameworks/kirigami': '@latest'
'frameworks/kwindowsystem': '@latest'
- 'on': ['Linux/Qt5', 'FreeBSD/Qt5']
'require':
'frameworks/frameworkintegration': '@latest'
'frameworks/kcmutils': '@latest'
- 'on': ['Linux/Qt6', 'FreeBSD/Qt6', 'Windows/Qt6']
'require':
'frameworks/extra-cmake-modules': '@latest-kf6'
'frameworks/kconfig': '@latest-kf6'
'frameworks/kcoreaddons': '@latest-kf6'
'frameworks/kguiaddons': '@latest-kf6'
'frameworks/ki18n': '@latest-kf6'
'frameworks/kiconthemes': '@latest-kf6'
'frameworks/kirigami': '@latest-kf6'
'frameworks/kwindowsystem': '@latest-kf6'
'frameworks/kcolorscheme': '@latest-kf6'
- 'on': ['Linux/Qt6', 'FreeBSD/Qt6']
'require':
'plasma/kdecoration': '@same'
'frameworks/frameworkintegration': '@latest-kf6'
'frameworks/kcmutils': '@latest-kf6'
Options:
require-passing-tests-on: [ 'Linux', 'FreeBSD']

View file

@ -1,6 +0,0 @@
Cursors:
Ken Vermette <vermette@gmail.com>
Kstyle:
Hugo Pereira Da Costa <hugo.pereira@free.fr> - Developer
Andrew Lake <jamboarder@gmail.com> - Designer

View file

@ -1,11 +0,0 @@
@PACKAGE_INIT@
set(BREEZE_WITH_KDECORATION @WITH_DECORATIONS@)
if(${BREEZE_WITH_KDECORATION})
set(BREEZE_KDECORATION_PLUGIN_ID "org.kde.breeze")
else()
set(BREEZE_KDECORATION_PLUGIN_ID "")
endif()
set(BREEZE_STYLE_NAME "breeze")
set(BREEZE_COLOR_INSTALL_ROOT "@PACKAGE_KDE_INSTALL_FULL_DATADIR@/color-schemes/")

View file

@ -1,173 +0,0 @@
cmake_minimum_required(VERSION 3.16)
project(breeze)
set(PROJECT_VERSION "6.3.80")
set(PROJECT_VERSION_MAJOR 6)
set(KF5_MIN_VERSION "5.102.0")
set(KF6_MIN_VERSION "6.10.0")
set(KDE_COMPILERSETTINGS_LEVEL "5.82")
set(QT5_MIN_VERSION "5.15.2")
set(QT_MIN_VERSION "6.7.0")
include(GenerateExportHeader)
include(WriteBasicConfigVersionFile)
include(FeatureSummary)
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_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# We need this because we can't include KDECMakeSettings here, because that
# would need KDEInstallDirs, which we can only include in the qt{5,6} builds
# to get the correct installation dirs for each Qt version.
option(BUILD_TESTING "Build the testing tree." ON)
if(BUILD_TESTING)
enable_testing()
endif()
include(CMakePackageConfigHelpers)
include(ECMInstallIcons)
include(ECMGenerateHeaders)
include(ECMGeneratePkgConfigFile)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(KDEClangFormat)
include(KDEGitCommitHooks)
include(GtkUpdateIconCache)
option(BUILD_QT5 "Build Qt5 style" OFF)
option(BUILD_QT6 "Build with Qt6" ON)
set(QT_NO_CREATE_VERSIONLESS_TARGETS ON)
set(QT_NO_CREATE_VERSIONLESS_FUNCTIONS ON)
# For KDE CI only. As the current infrastructure doesn't allow us to set CMAKE options per build variant
if($ENV{CI_JOB_NAME_SLUG} MATCHES "qt5")
set(BUILD_QT5 ON)
set(BUILD_QT6 OFF)
elseif($ENV{CI_JOB_NAME_SLUG} MATCHES "qt6")
set(BUILD_QT5 OFF)
set(BUILD_QT6 ON)
endif()
if(WIN32 OR APPLE)
set(WITH_DECORATIONS OFF)
endif()
function(build_Qt5)
set(QT_MAJOR_VERSION 5)
include(KDEInstallDirs5)
include(KDECMakeSettings)
find_package(Qt5 ${QT5_MIN_VERSION} REQUIRED CONFIG COMPONENTS Widgets DBus)
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
CoreAddons
Config
ConfigWidgets
GuiAddons
IconThemes
WindowSystem)
find_package(Qt5 ${QT5_MIN_VERSION} OPTIONAL_COMPONENTS Quick)
if(${Qt5Quick_FOUND})
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS Kirigami2)
endif()
find_package(KF5FrameworkIntegration ${KF5_MIN_VERSION} CONFIG )
set_package_properties(KF${QT_MAJOR_VERSION}FrameworkIntegration PROPERTIES
DESCRIPTION "KF${QT_MAJOR_VERSION} Framework Integration"
URL "https://projects.kde.org/projects/frameworks/frameworkintegration"
TYPE OPTIONAL
PURPOSE "Required to use KStyle convenience functionalities in style")
find_package(Qt5 ${QT5_MIN_VERSION} OPTIONAL_COMPONENTS X11Extras)
set_package_properties(KF${QT_MAJOR_VERSION}FrameworkIntegration PROPERTIES
DESCRIPTION "KF${QT_MAJOR_VERSION} Framework Integration"
URL "https://projects.kde.org/projects/frameworks/frameworkintegration"
TYPE OPTIONAL
PURPOSE "Required to use KStyle convenience functionalities in style")
set(BREEZE_HAVE_KSTYLE ${KF5FrameworkIntegration_FOUND})
set(BREEZE_HAVE_QTQUICK ${Qt5Quick_FOUND})
add_subdirectory(kstyle kstyle5)
add_subdirectory(libbreezecommon libbreezecommon5)
unset(QUERY_EXECUTABLE CACHE)
endfunction()
if(BUILD_QT5)
build_Qt5()
endif()
function(build_Qt6)
set(QT_MAJOR_VERSION 6)
include(KDEInstallDirs6)
include(KDECMakeSettings)
option(WITH_DECORATIONS "Build Breeze window decorations for KWin" ON)
option(WITH_WALLPAPERS "Install Breeze default wallpapers" OFF)
find_package(Qt6 ${QT_MIN_VERSION} REQUIRED CONFIG COMPONENTS Widgets DBus)
find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS
CoreAddons
ColorScheme
Config
GuiAddons
I18n
IconThemes
WindowSystem)
if(NOT WIN32 AND NOT APPLE)
find_package(KF6KCMUtils ${KF6_MIN_VERSION})
set_package_properties(KF6KCMUtils PROPERTIES
TYPE REQUIRED
DESCRIPTION "Helps create configuration modules"
PURPOSE "KCMUtils used for the configuration modules or the decoration and Qt Style"
)
endif()
find_package(Qt6 ${QT_MIN_VERSION} OPTIONAL_COMPONENTS Quick)
if(${Qt6Quick_FOUND})
find_package(KF6KirigamiPlatform ${KF6_MIN_VERSION} REQUIRED)
endif()
find_package(KF6FrameworkIntegration ${KF6_MIN_VERSION} CONFIG )
set_package_properties(KF${QT_MAJOR_VERSION}FrameworkIntegration PROPERTIES
DESCRIPTION "KF6 Framework Integration"
URL "https://projects.kde.org/projects/frameworks/frameworkintegration"
TYPE OPTIONAL
PURPOSE "Required to use KStyle convenience functionalities in style")
set(BREEZE_HAVE_QTQUICK ${Qt6Quick_FOUND})
# https://bugreports.qt.io/browse/QTBUG-114706
add_library(Qt::Core ALIAS Qt6::Core)
add_library(Qt::Gui ALIAS Qt6::Gui)
add_library(Qt::OpenGL ALIAS Qt6::OpenGL)
add_library(Qt::Network ALIAS Qt6::Network)
if(Qt6_VERSION_MINOR GREATER 6)
add_library(Qt::PlatformModuleInternal ALIAS Qt6::PlatformModuleInternal)
endif()
add_subdirectory(libbreezecommon libbreezecommon6)
if(WITH_DECORATIONS)
find_package(KDecoration3 REQUIRED)
add_subdirectory(kdecoration)
endif()
ki18n_install(po)
unset(QUERY_EXECUTABLE CACHE)
endfunction()
if(BUILD_QT6)
build_Qt6()
endif()
# add clang-format target for all our real source files
file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h)
kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES})
kde_configure_git_pre_commit_hook(CHECKS CLANG_FORMAT)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)

View file

@ -1,52 +0,0 @@
# Compiling instructions
```
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
sudo make install
```
# Breeze
Breeze is the default style for [Plasma](https://kde.org/plasma-desktop/). This repository contains some parts of Breeze such as the cursors, wallpapers, and the application style.
## Components
This repository contains many parts of Breeze, such as:
* Color schemes, located under [/colors](/colors).
* Cursors, located under [/cursors](/cursor).
* Window decorations, located under [/kdecoration](/kdecoration).
* Application style, located under [/kstyle](/kstyle).
* Wallpapers, located under [/wallpapers](/wallpapers).
### See Also
If you can't find what you're looking for, it may exist in another repository instead:
* [Breeze Icons](https://invent.kde.org/frameworks/breeze-icons) contains the icon set used in Plasma.
* [Plasma Framework](https://invent.kde.org/frameworks/plasma-framework/-/tree/master/src/desktoptheme) includes the [Plasma Style](https://develop.kde.org/docs/plasma/theme/) that affects the visuals for the Plasma panel and widgets.
* [Plasma Workspace Wallpapers](https://invent.kde.org/plasma/plasma-workspace-wallpapers) contains the rest of the default wallpapers shipped with Plasma.
* [Breeze for GTK](https://invent.kde.org/plasma/breeze-gtk) is the Breeze [GTK](https://gtk.org/) theme.
* [QQC2 Desktop Style](https://invent.kde.org/frameworks/qqc2-desktop-style) is the default [Qt Quick Controls](https://doc.qt.io/qt-6/qtquickcontrols-index.html) style for desktop KDE applications. It draws controls in QtQuick-based apps using the current application style. If you're using KDE apps on Plasma or another Linux desktop, you're most likely using it.
* [Breeze Style for QQC2](https://invent.kde.org/plasma/qqc2-breeze-style) is a Qt Quick Controls style that mimics the visual styling of Breeze specifically. If you're using KDE apps on Android or Plasma Mobile, you're most likely using it.
## Building
The easiest way to make changes and test Breeze during development is to [build it with kdesrc-build](https://community.kde.org/Get_Involved/development/Build_software_with_kdesrc-build).
When building Breeze manually, keep in mind that the Qt5 and Qt6 versions will be built by default. To control which versions are built, use the `BUILD_QT5` and `BUILD_QT6` CMake variables.
## Contributing
Like other projects in the KDE ecosystem, contributions are welcome from all. This repository is managed in [KDE Invent](https://invent.kde.org/plasma/breeze), our GitLab instance.
* Want to contribute code? See the [GitLab wiki page](https://community.kde.org/Infrastructure/GitLab) for a tutorial on how to send a merge request.
* Reporting a bug? Please submit it on the [KDE Bugtracking System](https://bugs.kde.org/enter_bug.cgi?format=guided&product=breeze). Please do not use the Issues
tab to report bugs.
* Is there a part of Breeze that's not translated? See the [Getting Involved in Translation wiki page](https://community.kde.org/Get_Involved/translation) to see how
you can help translate!
If you get stuck or need help with anything at all, head over to the [KDE New Contributors room](https://go.kde.org/matrix/#/#kde-welcome:kde.org) on Matrix. For questions about Breeze, please ask in the [KDE Development room](https://go.kde.org/matrix/#/#kde-devel:kde.org). See [Matrix](https://community.kde.org/Matrix) for more details.

View file

@ -1,17 +0,0 @@
# SPDX-FileCopyrightText: 2015 Volker Krause <vkrause@kde.org>
#
# SPDX-License-Identifier: BSD-3-Clause
find_program(GTK_UPDATE_ICON_CACHE_EXECUTABLE NAMES gtk-update-icon-cache)
macro(gtk_update_icon_cache _dir)
if (GTK_UPDATE_ICON_CACHE_EXECUTABLE)
install(CODE "
set(DESTDIR_VALUE \"\$ENV{DESTDIR}\")
if (NOT DESTDIR_VALUE)
execute_process(COMMAND ${GTK_UPDATE_ICON_CACHE_EXECUTABLE} -q -i . WORKING_DIRECTORY ${_dir})
endif()
")
endif()
endmacro()

View file

@ -1,7 +0,0 @@
#!/bin/bash
rm -rf build
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make
sudo make install

View file

@ -1,7 +0,0 @@
#!/bin/bash
rm -rf build
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -G Ninja ..
ninja
sudo ninja install

View file

@ -1,108 +0,0 @@
add_definitions(-DTRANSLATION_DOMAIN="smod_deco")
################# includes #################
include_directories(${CMAKE_SOURCE_DIR}/libbreezecommon)
include_directories(${CMAKE_BINARY_DIR}/libbreezecommon)
################# newt target #################
### plugin classes
set(breezedecoration_SRCS
breezebutton.cpp
breezedecoration.cpp
breezesettingsprovider.cpp
breezeexceptionlist.cpp
frametexture.cpp
sizingmargins.cpp
smod/smodbutton.cpp
smod/smoddecoration.cpp
)
### build library
kconfig_add_kcfg_files(breezedecoration_SRCS breezesettings.kcfgc)
add_library(smoddecoration SHARED
${breezedecoration_SRCS}
${breezedecoration_config_PART_FORMS_HEADERS})
set_target_properties(smoddecoration PROPERTIES
OUTPUT_NAME org.smod.smod
PREFIX ""
)
target_compile_definitions(smoddecoration PRIVATE MYSHAREDLIB_LIBRARY)
#set_property(TARGET kwin4_effect_smodwindowbuttons PROPERTY POSITION_INDEPENDENT_CODE ON)
set_target_properties(smoddecoration PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
set_target_properties(smoddecoration PROPERTIES ENABLE_EXPORTS TRUE)
add_compile_options(-fPIC)
target_link_libraries(smoddecoration
PRIVATE
breezecommon6
Qt6::Widgets
Qt6::DBus
KF6::CoreAddons
KF6::ConfigGui
KF6::GuiAddons
KF6::I18n
KF6::IconThemes
KDecoration3::KDecoration
)
install(TARGETS smoddecoration DESTINATION ${KDE_INSTALL_PLUGINDIR}/${KDECORATION_PLUGIN_DIR})
add_subdirectory(config)
set(smod_HEADERS
breeze.h
breezebutton.h
breezedecoration.h
breezeexceptionlist.h
breezesettingsprovider.h
sizingmargins.h
)
kconfig_add_kcfg_files(smod_HEADERS breezesettings.kcfgc)
ecm_generate_headers(smod_CamelCase_HEADERS
HEADER_NAMES
Breeze
BreezeButton
BreezeDecoration
BreezeExceptionList
BreezeSettingsProvider
SizingMargins
REQUIRED_HEADERS
smod_HEADERS
)
ecm_generate_pkgconfig_file(
BASE_NAME "smoddecoration"
LIB_NAME ":org.smod.smod.so"
INCLUDE_INSTALL_DIR ${KDE_INSTALL_INCLUDEDIR}
LIB_INSTALL_DIR ${KDE_INSTALL_PLUGINDIR}/org.kde.kdecoration3
FILENAME_VAR pkgconfig_filename
)
install(
FILES
${smod_HEADERS}
${breezedecoration_config_PART_FORMS_HEADERS}
${smod_CamelCase_HEADERS}
DESTINATION
${CMAKE_INSTALL_INCLUDEDIR}/SMOD/Decoration
COMPONENT
Devel
)
install(
FILES
${pkgconfig_filename}
DESTINATION
${CMAKE_INSTALL_LIBDIR}/pkgconfig
)

View file

@ -1,4 +0,0 @@
#!bin/sh
$EXTRACTRC `find . -name \*.rc -o -name \*.ui -o -name \*.kcfg` >> rc.cpp
$XGETTEXT `find . -name \*.cc -o -name \*.cpp -o -name \*.h` -o $podir/breeze_kwin_deco.pot
rm -f rc.cpp

View file

@ -1,56 +0,0 @@
/*
* SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#pragma once
#include "breezesettings.h"
#include <QList>
#include <QSharedPointer>
namespace Breeze
{
//* convenience typedefs
using InternalSettingsPtr = QSharedPointer<InternalSettings>;
using InternalSettingsList = QList<InternalSettingsPtr>;
using InternalSettingsListIterator = QListIterator<InternalSettingsPtr>;
//* metrics
namespace Metrics
{
//* corner radius, in units of small spacing
static constexpr qreal Frame_FrameRadius = 2;
//* titlebar metrics, in units of small spacing
static constexpr int TitleBar_TopMargin = 2;
static constexpr int TitleBar_BottomMargin = 2;
static constexpr int TitleBar_SideMargin = 2;
static constexpr int TitleBar_ButtonSpacing = 2;
// shadow dimensions (pixels)
static constexpr int Shadow_Overlap = 3;
// frame intensities (called bias in KColorUtilities::Mix)
static constexpr qreal Bias_Default = 0.25;
}
//* standard pen widths
namespace PenWidth
{
/* Using 1 instead of slightly more than 1 causes symbols drawn with
* pen strokes to look skewed. The exact amount added does not matter
* as long as it isn't too visible.
*/
// The standard pen stroke width for symbols.
static constexpr qreal Symbol = 1.01;
}
//* exception
enum ExceptionMask {
None = 0,
BorderSize = 1 << 4,
};
}

View file

@ -1,408 +0,0 @@
/*
* SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
* SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#include "breezebutton.h"
#include <KColorUtils>
#include <KDecoration3/DecoratedWindow>
#include <KIconLoader>
#include <QPainter>
#include <QPainterPath>
#include <QVariantAnimation>
namespace Breeze
{
using KDecoration3::ColorGroup;
using KDecoration3::ColorRole;
using KDecoration3::DecorationButtonType;
//__________________________________________________________________
Button::Button(DecorationButtonType type, Decoration *decoration, QObject *parent)
: DecorationButton(type, decoration, parent)
, m_animation(new QVariantAnimation(this))
, m_hoverProgress(0.0)
{
// setup animation
// It is important start and end value are of the same type, hence 0.0 and not just 0
m_animation->setStartValue(0.0);
m_animation->setEndValue(1.0);
m_animation->setEasingCurve(QEasingCurve::InOutQuad);
connect(m_animation, &QVariantAnimation::valueChanged, this, [this](const QVariant &value) {
setOpacity(value.toReal());
});
updateGeometry();
// connections
connect(decoration->window(), SIGNAL(iconChanged(QIcon)), this, SLOT(update()));
connect(decoration->settings().get(), &KDecoration3::DecorationSettings::reconfigured, this, &Button::reconfigure);
connect(this, &KDecoration3::DecorationButton::hoveredChanged, this, &Button::updateAnimationState);
connect(this, &Button::buttonHoverStatus, decoration, &Decoration::buttonHoverStatus);
reconfigure();
}
void Button::updateGeometry()
{
auto d = qobject_cast<Decoration *>(decoration());
QRect buttonRect = d->buttonRect(type());
setGeometry(buttonRect);
setIconSize(buttonRect.size());
}
//__________________________________________________________________
Button::Button(QObject *parent, const QVariantList &args)
: Button(args.at(0).value<DecorationButtonType>(), args.at(1).value<Decoration *>(), parent)
{
m_flag = FlagStandalone;
//! icon size must return to !valid because it was altered from the default constructor,
//! in Standalone mode the button is not using the decoration metrics but its geometry
m_iconSize = QSize(-1, -1);
}
void Button::smodPaintGlow(QPainter *painter, const QRectF &repaintArea)
{
return;
}
//__________________________________________________________________
Button *Button::create(DecorationButtonType type, KDecoration3::Decoration *decoration, QObject *parent)
{
if (auto d = qobject_cast<Decoration *>(decoration)) {
Button *b = new Button(type, d, parent);
const auto c = d->window();
switch (type) {
case DecorationButtonType::Close:
//b->setVisible(c->isCloseable());
//QObject::connect(c, &KDecoration3::DecoratedWindow::closeableChanged, b, &Breeze::Button::setVisible);
b->setVisible(true);
break;
case DecorationButtonType::Maximize:
b->setVisible(c->isMaximizeable() || c->isMinimizeable());
b->setEnabled(c->isMaximizeable());
QObject::connect(c, &KDecoration3::DecoratedWindow::maximizeableChanged, b,
[b](bool maximizeable) {
auto d = qobject_cast<Decoration *>(b->decoration());
const auto c = d->window();
if (!c)
{
return;
}
b->setVisible(c->isMaximizeable() || c->isMinimizeable());
b->setEnabled(maximizeable);
});
//b->setVisible(c->isMaximizeable());
//QObject::connect(c, &KDecoration3::DecoratedWindow::maximizeableChanged, b, &Breeze::Button::setVisible);
break;
case DecorationButtonType::Minimize:
//b->setVisible(c->isMinimizeable());
//QObject::connect(c, &KDecoration3::DecoratedWindow::minimizeableChanged, b, &Breeze::Button::setVisible);
b->setVisible(c->isMinimizeable() || c->isMaximizeable());
b->setEnabled(c->isMinimizeable());
QObject::connect(c, &KDecoration3::DecoratedWindow::minimizeableChanged, b,
[b](bool minimizeable) {
auto d = qobject_cast<Decoration *>(b->decoration());
const auto c = d->window();
if (!c)
{
return;
}
b->setVisible(c->isMinimizeable() || c->isMaximizeable());
b->setEnabled(minimizeable);
});
break;
case DecorationButtonType::ContextHelp:
b->setVisible(c->providesContextHelp());
QObject::connect(c, &KDecoration3::DecoratedWindow::providesContextHelpChanged, b, &Breeze::Button::setVisible);
break;
case DecorationButtonType::Shade:
b->setVisible(c->isShadeable());
QObject::connect(c, &KDecoration3::DecoratedWindow::shadeableChanged, b, &Breeze::Button::setVisible);
break;
case DecorationButtonType::Menu:
QObject::connect(c, &KDecoration3::DecoratedWindow::iconChanged, b, [b]() {
b->update();
});
break;
default:
break;
}
return b;
}
return nullptr;
}
//__________________________________________________________________
void Button::paint(QPainter *painter, const QRectF &repaintRegion)
{
smodPaint(painter, repaintRegion);
return;
}
//__________________________________________________________________
void Button::drawIcon(QPainter *painter) const
{
painter->setRenderHints(QPainter::Antialiasing);
painter->translate(geometry().topLeft());
const qreal width(m_iconSize.width());
painter->scale(width / 20, width / 20);
painter->translate(1, 1);
// render background
const QColor backgroundColor(this->backgroundColor());
if (backgroundColor.isValid()) {
painter->setPen(Qt::NoPen);
painter->setBrush(backgroundColor);
painter->drawEllipse(QRectF(0, 0, 18, 18));
}
// render mark
const QColor foregroundColor(this->foregroundColor());
if (foregroundColor.isValid()) {
// setup painter
QPen pen(foregroundColor);
pen.setCapStyle(Qt::RoundCap);
pen.setJoinStyle(Qt::MiterJoin);
pen.setWidthF(PenWidth::Symbol * qMax((qreal)1.0, 20 / width));
painter->setPen(pen);
painter->setBrush(Qt::NoBrush);
switch (type()) {
case DecorationButtonType::Close: {
painter->drawLine(QPointF(5, 5), QPointF(13, 13));
painter->drawLine(13, 5, 5, 13);
break;
}
case DecorationButtonType::Maximize: {
if (isChecked()) {
pen.setJoinStyle(Qt::RoundJoin);
painter->setPen(pen);
painter->drawPolygon(QVector<QPointF>{QPointF(4, 9), QPointF(9, 4), QPointF(14, 9), QPointF(9, 14)});
} else {
painter->drawPolyline(QVector<QPointF>{QPointF(4, 11), QPointF(9, 6), QPointF(14, 11)});
}
break;
}
case DecorationButtonType::Minimize: {
painter->drawPolyline(QVector<QPointF>{QPointF(4, 7), QPointF(9, 12), QPointF(14, 7)});
break;
}
case DecorationButtonType::OnAllDesktops: {
painter->setPen(Qt::NoPen);
painter->setBrush(foregroundColor);
if (isChecked()) {
// outer ring
painter->drawEllipse(QRectF(3, 3, 12, 12));
// center dot
QColor backgroundColor(this->backgroundColor());
auto d = qobject_cast<Decoration *>(decoration());
if (!backgroundColor.isValid() && d) {
backgroundColor = d->titleBarColor();
}
if (backgroundColor.isValid()) {
painter->setBrush(backgroundColor);
painter->drawEllipse(QRectF(8, 8, 2, 2));
}
} else {
painter->drawPolygon(QVector<QPointF>{QPointF(6.5, 8.5), QPointF(12, 3), QPointF(15, 6), QPointF(9.5, 11.5)});
painter->setPen(pen);
painter->drawLine(QPointF(5.5, 7.5), QPointF(10.5, 12.5));
painter->drawLine(QPointF(12, 6), QPointF(4.5, 13.5));
}
break;
}
case DecorationButtonType::Shade: {
if (isChecked()) {
painter->drawLine(QPointF(4, 5.5), QPointF(14, 5.5));
painter->drawPolyline(QVector<QPointF>{QPointF(4, 8), QPointF(9, 13), QPointF(14, 8)});
} else {
painter->drawLine(QPointF(4, 5.5), QPointF(14, 5.5));
painter->drawPolyline(QVector<QPointF>{QPointF(4, 13), QPointF(9, 8), QPointF(14, 13)});
}
break;
}
case DecorationButtonType::KeepBelow: {
painter->drawPolyline(QVector<QPointF>{QPointF(4, 5), QPointF(9, 10), QPointF(14, 5)});
painter->drawPolyline(QVector<QPointF>{QPointF(4, 9), QPointF(9, 14), QPointF(14, 9)});
break;
}
case DecorationButtonType::KeepAbove: {
painter->drawPolyline(QVector<QPointF>{QPointF(4, 9), QPointF(9, 4), QPointF(14, 9)});
painter->drawPolyline(QVector<QPointF>{QPointF(4, 13), QPointF(9, 8), QPointF(14, 13)});
break;
}
case DecorationButtonType::ApplicationMenu: {
painter->drawRect(QRectF(3.5, 4.5, 11, 1));
painter->drawRect(QRectF(3.5, 8.5, 11, 1));
painter->drawRect(QRectF(3.5, 12.5, 11, 1));
break;
}
case DecorationButtonType::ContextHelp: {
QPainterPath path;
path.moveTo(5, 6);
path.arcTo(QRectF(5, 3.5, 8, 5), 180, -180);
path.cubicTo(QPointF(12.5, 9.5), QPointF(9, 7.5), QPointF(9, 11.5));
painter->drawPath(path);
painter->drawRect(QRectF(9, 15, 0.5, 0.5));
break;
}
default:
break;
}
}
}
//__________________________________________________________________
QColor Button::foregroundColor() const
{
auto d = qobject_cast<Decoration *>(decoration());
if (!d) {
return QColor();
} else if (isPressed()) {
return d->titleBarColor();
} else if (type() == DecorationButtonType::Close && d->internalSettings()->outlineCloseButton()) {
return d->titleBarColor();
} else if ((type() == DecorationButtonType::KeepBelow || type() == DecorationButtonType::KeepAbove || type() == DecorationButtonType::Shade)
&& isChecked()) {
return d->titleBarColor();
} else if (m_animation->state() == QAbstractAnimation::Running) {
return KColorUtils::mix(d->fontColor(), d->titleBarColor(), m_opacity);
} else if (isHovered()) {
return d->titleBarColor();
} else {
return d->fontColor();
}
}
//__________________________________________________________________
QColor Button::backgroundColor() const
{
auto d = qobject_cast<Decoration *>(decoration());
if (!d) {
return QColor();
}
auto c = d->window();
QColor redColor(c->color(ColorGroup::Warning, ColorRole::Foreground));
if (isPressed()) {
if (type() == DecorationButtonType::Close) {
return redColor.darker();
} else {
return KColorUtils::mix(d->titleBarColor(), d->fontColor(), 0.3);
}
} else if ((type() == DecorationButtonType::KeepBelow || type() == DecorationButtonType::KeepAbove || type() == DecorationButtonType::Shade)
&& isChecked()) {
return d->fontColor();
} else if (m_animation->state() == QAbstractAnimation::Running) {
if (type() == DecorationButtonType::Close) {
if (d->internalSettings()->outlineCloseButton()) {
return c->isActive() ? KColorUtils::mix(redColor, redColor.lighter(), m_opacity) : KColorUtils::mix(redColor.lighter(), redColor, m_opacity);
} else {
QColor color(redColor.lighter());
color.setAlpha(color.alpha() * m_opacity);
return color;
}
} else {
QColor color(d->fontColor());
color.setAlpha(color.alpha() * m_opacity);
return color;
}
} else if (isHovered()) {
if (type() == DecorationButtonType::Close) {
return c->isActive() ? redColor.lighter() : redColor;
} else {
return d->fontColor();
}
} else if (type() == DecorationButtonType::Close && d->internalSettings()->outlineCloseButton()) {
return c->isActive() ? redColor : d->fontColor();
} else {
return QColor();
}
}
//________________________________________________________________
void Button::reconfigure()
{
// animation
auto d = qobject_cast<Decoration *>(decoration());
if (d) {
m_animation->setDuration(d->animationsDuration());
}
if (type() == DecorationButtonType::Menu)
{
setVisible(!d->hideIcon());
}
}
//__________________________________________________________________
void Button::updateAnimationState(bool hovered)
{
auto d = qobject_cast<Decoration *>(decoration());
if (!(d && d->animationsDuration() > 0)) {
return;
}
m_animation->setDirection(hovered ? QAbstractAnimation::Forward : QAbstractAnimation::Backward);
if (m_animation->state() != QAbstractAnimation::Running) {
m_animation->start();
}
}
} // namespace

View file

@ -1,160 +0,0 @@
/*
* SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
* SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#pragma once
#include "breezedecoration.h"
#include <KDecoration3/DecorationButton>
#include <QHash>
#include <QImage>
#include <QHoverEvent>
#include <QPropertyAnimation>
#include <QPixmap>
#include <QPainter>
class QVariantAnimation;
namespace Breeze
{
class Button : public KDecoration3::DecorationButton
{
Q_OBJECT
Q_PROPERTY(qreal hoverProgress READ hoverProgress WRITE setHoverProgress);
public:
//* constructor
explicit Button(QObject *parent, const QVariantList &args);
//* destructor
virtual ~Button() = default;
//* button creation
static Button *create(KDecoration3::DecorationButtonType type, KDecoration3::Decoration *decoration, QObject *parent);
//* render
virtual void paint(QPainter *painter, const QRectF &repaintRegion) override;
//* flag
enum Flag {
FlagNone,
FlagStandalone,
FlagFirstInList,
FlagLastInList,
};
//* flag
void setFlag(Flag value)
{
m_flag = value;
}
//* standalone buttons
bool isStandAlone() const
{
return m_flag == FlagStandalone;
}
//* offset
void setOffset(const QPointF &value)
{
m_offset = value;
}
//* horizontal offset, for rendering
void setHorizontalOffset(qreal value)
{
m_offset.setX(value);
}
//* vertical offset, for rendering
void setVerticalOffset(qreal value)
{
m_offset.setY(value);
}
//* set icon size
void setIconSize(const QSize &value)
{
m_iconSize = value;
}
//*@name active state change animation
//@{
void setOpacity(qreal value)
{
if (m_opacity == value) {
return;
}
m_opacity = value;
update();
}
qreal opacity() const
{
return m_opacity;
}
//@}
qreal hoverProgress() const;
void setHoverProgress(qreal hoverProgress);
void smodPaintGlow(QPainter *painter, const QRectF &repaintArea);
void updateGeometry();
signals:
void buttonHoverStatus(KDecoration3::DecorationButtonType button, bool hovered, QPoint pos);
protected:
void hoverEnterEvent(QHoverEvent *event) override;
void hoverLeaveEvent(QHoverEvent *event) override;
private Q_SLOTS:
//* apply configuration changes
void reconfigure();
//* animation state
void updateAnimationState(bool);
private:
//* private constructor
explicit Button(KDecoration3::DecorationButtonType type, Decoration *decoration, QObject *parent = nullptr);
//* draw button icon
void drawIcon(QPainter *) const;
void startHoverAnimation(qreal endValue);
void smodPaint(QPainter *painter, const QRectF &repaintRegion);
//*@name colors
//@{
QColor foregroundColor() const;
QColor backgroundColor() const;
//@}
Flag m_flag = FlagNone;
//* active state change animation
QVariantAnimation *m_animation;
//* vertical offset (for rendering)
QPointF m_offset;
//* icon size
QSize m_iconSize;
//* active state change opacity
qreal m_opacity = 0;
QPointer<QPropertyAnimation> m_hoverAnimation;
qreal m_hoverProgress;
};
} // namespace

View file

@ -1,551 +0,0 @@
/*
* SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
* SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
* SPDX-FileCopyrightText: 2018 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
* SPDX-FileCopyrightText: 2021 Paul McAuley <kde@paulmcauley.com>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#include "breezedecoration.h"
#include "breezesettingsprovider.h"
#include "breezebutton.h"
#include "breezeboxshadowrenderer.h"
#include <KDecoration3/DecorationButtonGroup>
#include <KDecoration3/DecorationShadow>
#include <KColorUtils>
#include <KConfigGroup>
#include <KPluginFactory>
#include <KSharedConfig>
#include <QDBusConnection>
#include <QDBusMessage>
#include <QDBusPendingCallWatcher>
#include <QDBusPendingReply>
#include <QPainter>
#include <QPainterPath>
#include <QTextStream>
#include <QTimer>
#include "smod/smod.h"
K_PLUGIN_FACTORY_WITH_JSON(BreezeDecoFactory, "smod.json", registerPlugin<Breeze::Decoration>(); registerPlugin<Breeze::Button>();)
namespace Breeze
{
using KDecoration3::ColorGroup;
using KDecoration3::ColorRole;
static SizingMargins g_sizingmargins;
static QString g_themeName = "Aero";
static int g_shadowStrength = 255;
static QColor g_shadowColor = Qt::black;
static int g_lastBorderSize;
//________________________________________________________________
void Decoration::setOpacity(qreal value)
{
if (m_opacity == value) {
return;
}
m_opacity = value;
update();
}
QString Decoration::themeName()
{
return SMOD::currentlyRegisteredPath;
}
QPixmap Decoration::minimize_glow()
{
return QPixmap(QStringLiteral(":/effects/smodglow/textures/minimize"));
}
QPixmap Decoration::maximize_glow()
{
return QPixmap(QStringLiteral(":/effects/smodglow/textures/maximize"));
}
QPixmap Decoration::close_glow()
{
return QPixmap(QStringLiteral(":/effects/smodglow/textures/close"));
}
bool Decoration::glowEnabled()
{
if(g_sizingmargins.loaded())
return g_sizingmargins.commonSizing().enable_glow;
else return false;
}
//________________________________________________________________
QColor Decoration::titleBarColor() const
{
return QColor(Qt::transparent);
const auto c = window();
if (hideTitleBar()) {
return c->color(ColorGroup::Inactive, ColorRole::TitleBar);
} else if (m_animation->state() == QAbstractAnimation::Running) {
return KColorUtils::mix(c->color(ColorGroup::Inactive, ColorRole::TitleBar), c->color(ColorGroup::Active, ColorRole::TitleBar), m_opacity);
} else {
return c->color(c->isActive() ? ColorGroup::Active : ColorGroup::Inactive, ColorRole::TitleBar);
}
}
//________________________________________________________________
QColor Decoration::fontColor() const
{
const auto c = window();
if (m_animation->state() == QAbstractAnimation::Running) {
return KColorUtils::mix(c->color(ColorGroup::Inactive, ColorRole::Foreground), c->color(ColorGroup::Active, ColorRole::Foreground), m_opacity);
} else {
return c->color(c->isActive() ? ColorGroup::Active : ColorGroup::Inactive, ColorRole::Foreground);
}
}
//________________________________________________________________
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
bool Decoration::init()
#else
void Decoration::init()
#endif
{
reconfigure();
SMOD::registerResource(m_internalSettings->decorationTheme());
g_sizingmargins.loadSizingMargins();
const auto c = window();
// active state change animation
// It is important start and end value are of the same type, hence 0.0 and not just 0
m_animation->setStartValue(0.0);
m_animation->setEndValue(1.0);
// Linear to have the same easing as Breeze animations
m_animation->setEasingCurve(QEasingCurve::Linear);
connect(m_animation, &QVariantAnimation::valueChanged, this, [this](const QVariant &value) {
setOpacity(value.toReal());
});
m_shadowAnimation->setStartValue(0.0);
m_shadowAnimation->setEndValue(1.0);
m_shadowAnimation->setEasingCurve(QEasingCurve::OutCubic);
connect(m_shadowAnimation, &QVariantAnimation::valueChanged, this, [this](const QVariant &value) {
m_shadowOpacity = value.toReal();
updateShadow();
});
// use DBus connection to update on breeze configuration change
auto dbus = QDBusConnection::sessionBus();
dbus.connect(QString(),
QStringLiteral("/KGlobalSettings"),
QStringLiteral("org.kde.KGlobalSettings"),
QStringLiteral("notifyChange"),
this,
SLOT(reconfigure()));
dbus.connect(QStringLiteral("org.kde.KWin"),
QStringLiteral("/org/kde/KWin"),
QStringLiteral("org.kde.KWin.TabletModeManager"),
QStringLiteral("tabletModeChanged"),
QStringLiteral("b"),
this,
SLOT(onTabletModeChanged(bool)));
auto message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.KWin"),
QStringLiteral("/org/kde/KWin"),
QStringLiteral("org.freedesktop.DBus.Properties"),
QStringLiteral("Get"));
message.setArguments({QStringLiteral("org.kde.KWin.TabletModeManager"), QStringLiteral("tabletMode")});
auto call = new QDBusPendingCallWatcher(dbus.asyncCall(message), this);
connect(call, &QDBusPendingCallWatcher::finished, this, [this, call]() {
QDBusPendingReply<QVariant> reply = *call;
if (!reply.isError()) {
onTabletModeChanged(reply.value().toBool());
}
call->deleteLater();
});
updateTitleBar();
auto s = settings();
connect(s.get(), &KDecoration3::DecorationSettings::borderSizeChanged, this, &Decoration::recalculateBorders);
// a change in font might cause the borders to change
connect(s.get(), &KDecoration3::DecorationSettings::fontChanged, this, &Decoration::recalculateBorders);
connect(s.get(), &KDecoration3::DecorationSettings::spacingChanged, this, &Decoration::recalculateBorders);
// buttons
connect(s.get(), &KDecoration3::DecorationSettings::spacingChanged, this, &Decoration::updateButtonsGeometryDelayed);
connect(s.get(), &KDecoration3::DecorationSettings::decorationButtonsLeftChanged, this, &Decoration::updateButtonsGeometryDelayed);
connect(s.get(), &KDecoration3::DecorationSettings::decorationButtonsRightChanged, this, &Decoration::updateButtonsGeometryDelayed);
// full reconfiguration
connect(s.get(), &KDecoration3::DecorationSettings::reconfigured, this, &Decoration::reconfigure);
connect(s.get(), &KDecoration3::DecorationSettings::reconfigured, SettingsProvider::self(), &SettingsProvider::reconfigure, Qt::UniqueConnection);
connect(s.get(), &KDecoration3::DecorationSettings::reconfigured, this, &Decoration::updateButtonsGeometryDelayed);
connect(c, &KDecoration3::DecoratedWindow::adjacentScreenEdgesChanged, this, &Decoration::recalculateBorders);
connect(c, &KDecoration3::DecoratedWindow::maximizedHorizontallyChanged, this, &Decoration::recalculateBorders);
connect(c, &KDecoration3::DecoratedWindow::maximizedVerticallyChanged, this, &Decoration::recalculateBorders);
connect(c, &KDecoration3::DecoratedWindow::shadedChanged, this, &Decoration::recalculateBorders);
connect(c, &KDecoration3::DecoratedWindow::captionChanged, this, [this]() {
// update the caption area
update(titleBar());
update(); // Prevents rendering artifacts with the text glow
});
connect(c, &KDecoration3::DecoratedWindow::activeChanged, this, &Decoration::updateAnimationState);
connect(c, &KDecoration3::DecoratedWindow::widthChanged, this, &Decoration::updateTitleBar);
connect(c, &KDecoration3::DecoratedWindow::maximizedChanged, this, &Decoration::updateTitleBar);
//connect(c, &KDecoration3::DecoratedWindow::maximizedChanged, this, &Decoration::setOpaque);
connect(c, &KDecoration3::DecoratedWindow::widthChanged, this, &Decoration::updateButtonsGeometry);
connect(c, &KDecoration3::DecoratedWindow::maximizedChanged, this, &Decoration::updateButtonsGeometry);
connect(c, &KDecoration3::DecoratedWindow::adjacentScreenEdgesChanged, this, &Decoration::updateButtonsGeometry);
connect(c, &KDecoration3::DecoratedWindow::shadedChanged, this, &Decoration::updateButtonsGeometry);
connect(c, &KDecoration3::DecoratedWindow::widthChanged, this, &Decoration::updateBlur);
connect(c, &KDecoration3::DecoratedWindow::heightChanged, this, &Decoration::updateBlur);
connect(c, &KDecoration3::DecoratedWindow::maximizedChanged, this, &Decoration::updateBlur);
connect(c, &KDecoration3::DecoratedWindow::shadedChanged, this, &Decoration::updateBlur);
createButtons();
updateShadow();
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
return true;
#endif
}
//________________________________________________________________
void Decoration::updateTitleBar()
{
// The titlebar rect has margins around it so the window can be resized by dragging a decoration edge.
auto s = settings();
const auto c = window();
const bool maximized = isMaximized();
const int width = maximized ? c->width() : c->width() - 2 * s->smallSpacing() * Metrics::TitleBar_SideMargin;
const int height = maximized ? borderTop() : borderTop() - s->smallSpacing() * Metrics::TitleBar_TopMargin;
const int x = maximized ? 0 : s->smallSpacing() * Metrics::TitleBar_SideMargin;
const int y = maximized ? 0 : s->smallSpacing() * Metrics::TitleBar_TopMargin;
setTitleBar(QRect(x, y, width, height));
}
//________________________________________________________________
void Decoration::updateAnimationState()
{
if (m_shadowAnimation->duration() > 0) {
const auto c = window();
m_shadowAnimation->setDirection(c->isActive() ? QAbstractAnimation::Forward : QAbstractAnimation::Backward);
m_shadowAnimation->setEasingCurve(c->isActive() ? QEasingCurve::OutCubic : QEasingCurve::InCubic);
if (m_shadowAnimation->state() != QAbstractAnimation::Running) {
m_shadowAnimation->start();
}
} else {
updateShadow();
}
if (m_animation->duration() > 0) {
const auto c = window();
m_animation->setDirection(c->isActive() ? QAbstractAnimation::Forward : QAbstractAnimation::Backward);
if (m_animation->state() != QAbstractAnimation::Running) {
m_animation->start();
}
} else {
update();
}
}
//________________________________________________________________
void Decoration::reconfigure()
{
m_internalSettings = SettingsProvider::self()->internalSettings(this);
SMOD::registerResource(m_internalSettings->decorationTheme());
g_sizingmargins.loadSizingMargins();
setScaledCornerRadius();
KSharedConfig::Ptr config = KSharedConfig::openConfig();
const KConfigGroup cg(config, QStringLiteral("KDE"));
m_animation->setDuration(0);
// Syncing anis between client and decoration is troublesome, so we're not using
// any animations right now.
// m_animation->setDuration( cg.readEntry("AnimationDurationFactor", 1.0f) * 100.0f );
// But the shadow is fine to animate like this!
m_shadowAnimation->setDuration(cg.readEntry("AnimationDurationFactor", 1.0f) * 100.0f);
// borders
recalculateBorders();
// shadow
updateShadow();
updateButtonsGeometryDelayed();
update();
{
// Reload smodglow
QDBusMessage message = QDBusMessage::createMethodCall("org.kde.KWin", "/Effects", "", "reconfigureEffect");
QList<QVariant> args;
args.append("smodglow");
message.setArguments(args);
bool result = QDBusConnection::sessionBus().send(message);
}
}
//________________________________________________________________
void Decoration::recalculateBorders()
{
const auto c = window();
auto s = settings();
// left, right and bottom borders
auto margins_l= sizingMargins().frameLeftSizing();
auto margins_r= sizingMargins().frameRightSizing();
auto margins_b= sizingMargins().frameBottomSizing();
int left = isMaximized() ? 0 : margins_l.width;
int right = isMaximized() ? 0 : margins_r.width;
int bottom = (c->isShaded() || isMaximized()) ? 0 : margins_b.height;
// Increase titlebar height if the font is too large for the configured size
QString testString = "Message Box qd";
QFontMetrics fm(s->font());
auto bounds = fm.boundingRect(testString);
auto margins = sizingMargins().commonSizing();
int limitedHeight = qMax(titlebarHeight(), bounds.height());
int top = (isMaximized() ? limitedHeight+margins.titlebar_padding_maximized : limitedHeight+margins.titlebar_padding_normal) + 1;
if (hideTitleBar()) top = bottom;
// Hide inner borders
auto t_m = sizingMargins().topSide();
auto l_m = sizingMargins().leftSide();
auto r_m = sizingMargins().rightSide();
auto b_m = sizingMargins().bottomSide();
if (hideInnerBorder())
{
left = left < l_m.margin_right ? 0 : left - l_m.margin_right;
right = right < r_m.margin_left ? 0 : right - r_m.margin_left;
top = top < t_m.margin_bottom ? 0 : top - t_m.margin_bottom;
bottom = bottom < b_m.margin_top ? 0 : bottom - b_m.margin_top;
}
left = qMax(0, left);
right = qMax(0, right);
top = qMax(0, top);
bottom = qMax(0, bottom);
setBorders(QMargins(left, top, right, bottom));
// extended sizes
const int extSize = s->largeSpacing();
int extSides = 0;
int extBottom = 0;
if (hasNoBorders()) {
if (!isMaximizedHorizontally()) {
extSides = extSize;
}
if (!isMaximizedVertically()) {
extBottom = extSize;
}
} else if (hasNoSideBorders() && !isMaximizedHorizontally()) {
extSides = extSize;
}
setResizeOnlyBorders(QMargins(extSides, 0, extSides, extBottom));
// TODO is this needed?
updateBlur();
}
//________________________________________________________________
void Decoration::createButtons()
{
m_leftButtons = new KDecoration3::DecorationButtonGroup(KDecoration3::DecorationButtonGroup::Position::Left, this, &Button::create);
m_rightButtons = new KDecoration3::DecorationButtonGroup(KDecoration3::DecorationButtonGroup::Position::Right, this, &Button::create);
updateButtonsGeometry();
}
//________________________________________________________________
void Decoration::updateButtonsGeometryDelayed()
{
QTimer::singleShot(0, this, &Decoration::updateButtonsGeometry);
}
//________________________________________________________________
void Decoration::updateButtonsGeometry()
{
const auto s = settings();
// left buttons
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));
}
if (!m_rightButtons->buttons().isEmpty()) {
const int vPadding = isMaximized() ? -1 : 1;
const int lessPadding = g_sizingmargins.frameRightSizing().inset;
auto r_m = sizingMargins().rightSide();
m_rightButtons->setPos(QPointF(
size().width() - m_rightButtons->geometry().width() - borderRight() - (isMaximized() ? 2 : 0) + lessPadding - ((hideInnerBorder() && !isMaximized()) ? r_m.margin_left : 0), vPadding));
m_rightButtons->setSpacing(g_sizingmargins.commonSizing().caption_button_spacing);
}
foreach (QPointer<KDecoration3::DecorationButton> button, m_rightButtons->buttons()) {
static_cast<Button *>(button.data())->updateGeometry();
}
if(g_sizingmargins.commonSizing().caption_button_align_vcenter)
{
auto p = m_rightButtons->pos();
m_rightButtons->setPos(QPointF(p.x(), borderTop() / 2.0f - m_rightButtons->geometry().height() / 2.0f));
}
update();
return;
}
//________________________________________________________________
void Decoration::paint(QPainter *painter, const QRectF &repaintRegion)
{
smodPaint(painter, repaintRegion);
return;
}
//________________________________________________________________
SizingMargins Decoration::sizingMargins() const
{
return g_sizingmargins;
}
QRect Decoration::buttonRect(KDecoration3::DecorationButtonType button) const
{
int height = titlebarHeight()-1;
int intendedWidth = g_sizingmargins.maximizeSizing().width;
int width = 0;
switch (button)
{
case KDecoration3::DecorationButtonType::Minimize:
intendedWidth = g_sizingmargins.minimizeSizing().width;
break;
case KDecoration3::DecorationButtonType::Maximize:
intendedWidth = g_sizingmargins.maximizeSizing().width;
break;
case KDecoration3::DecorationButtonType::Close:
intendedWidth = g_sizingmargins.closeSizing().width;
break;
case KDecoration3::DecorationButtonType::Menu:
height = titlebarHeight();
break;
default:
break;
}
if(button == KDecoration3::DecorationButtonType::Menu) width = 16;
else width = (int)((float)titlebarHeight() * ((float)intendedWidth / 21.0) + 0.5f);
return QRect(0, 0, width, height);
}
int Decoration::titlebarHeight() const
{
return internalSettings()->titlebarSize();
}
//________________________________________________________________
int Decoration::buttonHeight() const
{
const int baseSize = m_tabletMode ? settings()->gridUnit() * 2 : settings()->gridUnit();
switch (m_internalSettings->buttonSize()) {
case InternalSettings::ButtonTiny:
return baseSize;
case InternalSettings::ButtonSmall:
return baseSize * 1.5;
default:
case InternalSettings::ButtonDefault:
return baseSize * 2;
case InternalSettings::ButtonLarge:
return baseSize * 2.5;
case InternalSettings::ButtonVeryLarge:
return baseSize * 3.5;
}
}
void Decoration::onTabletModeChanged(bool mode)
{
m_tabletMode = mode;
recalculateBorders();
updateButtonsGeometry();
}
//________________________________________________________________
int Decoration::captionHeight() const
{
return hideTitleBar() ? borderTop() : borderTop() - settings()->smallSpacing() * (Metrics::TitleBar_BottomMargin + Metrics::TitleBar_TopMargin) - 1;
}
//________________________________________________________________
QPair<QRect, Qt::Alignment> Decoration::captionRect() const
{
if (hideTitleBar()) {
return qMakePair(QRect(), Qt::AlignCenter);
} else {
auto c = window();
const int leftOffset = m_leftButtons->buttons().isEmpty()
? Metrics::TitleBar_SideMargin * settings()->smallSpacing()
: m_leftButtons->geometry().x() + m_leftButtons->geometry().width() + Metrics::TitleBar_SideMargin * settings()->smallSpacing();
const int rightOffset = m_rightButtons->buttons().isEmpty()
? Metrics::TitleBar_SideMargin * settings()->smallSpacing()
: size().width() - m_rightButtons->geometry().x() + Metrics::TitleBar_SideMargin * settings()->smallSpacing();
const int yOffset = settings()->smallSpacing() * Metrics::TitleBar_TopMargin;
const QRect maxRect(leftOffset, yOffset, size().width() - leftOffset - rightOffset, captionHeight());
switch (m_internalSettings->titleAlignment()) {
case InternalSettings::AlignLeft:
return qMakePair(maxRect, Qt::AlignVCenter | Qt::AlignLeft);
case InternalSettings::AlignRight:
return qMakePair(maxRect, Qt::AlignVCenter | Qt::AlignRight);
case InternalSettings::AlignCenter:
return qMakePair(maxRect, Qt::AlignCenter);
default:
case InternalSettings::AlignCenterFullWidth: {
// full caption rect
const QRect fullRect = QRect(0, yOffset, size().width(), captionHeight());
QRect boundingRect(settings()->fontMetrics().boundingRect(c->caption()).toRect());
// text bounding rect
boundingRect.setTop(yOffset);
boundingRect.setHeight(captionHeight());
boundingRect.moveLeft((size().width() - boundingRect.width()) / 2);
if (boundingRect.left() < leftOffset) {
return qMakePair(maxRect, Qt::AlignVCenter | Qt::AlignLeft);
} else if (boundingRect.right() > size().width() - rightOffset) {
return qMakePair(maxRect, Qt::AlignVCenter | Qt::AlignRight);
} else {
return qMakePair(fullRect, Qt::AlignCenter);
}
}
}
}
}
void Decoration::setScaledCornerRadius()
{
m_scaledCornerRadius = Metrics::Frame_FrameRadius * settings()->smallSpacing();
}
} // namespace
#include "breezedecoration.moc"

View file

@ -1,287 +0,0 @@
/*
* SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
* SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#pragma once
#include "breeze.h"
#include "breezesettings.h"
#include "sizingmargins.h"
#include <KDecoration3/DecoratedWindow>
#include <KDecoration3/Decoration>
#include <KDecoration3/DecorationSettings>
#include <QPalette>
#include <QVariant>
#include <QVariantAnimation>
#include <QByteArray>
#define INNER_BORDER_SIZE 2
// This is absolutely needed in Qt6
// even though it absolutely wasn't needed in Qt5
// funny
#if defined(MYSHAREDLIB_LIBRARY)
# define MYSHAREDLIB_EXPORT Q_DECL_EXPORT
#else
# define MYSHAREDLIB_EXPORT Q_DECL_IMPORT
#endif
namespace KDecoration3
{
class DecorationButton;
class DecorationButtonGroup;
}
namespace Breeze
{
class MYSHAREDLIB_EXPORT Decoration : public KDecoration3::Decoration
{
Q_OBJECT
public:
//* constructor
explicit Decoration(QObject *parent = nullptr, const QVariantList &args = QVariantList());
//* destructor
virtual ~Decoration();
//* paint
void paint(QPainter *painter, const QRectF &repaintRegion) override;
SizingMargins sizingMargins() const;
//* internal settings
InternalSettingsPtr internalSettings() const
{
return m_internalSettings;
}
qreal animationsDuration() const
{
return m_animation->duration();
}
//* caption height
int captionHeight() const;
//* button height
int buttonHeight() const;
int titlebarHeight() const;
static QString themeName();
static QPixmap minimize_glow();
static QPixmap maximize_glow();
static QPixmap close_glow();
static int decorationCount();
static bool glowEnabled();
QRect buttonRect(KDecoration3::DecorationButtonType button) const;
//*@name active state change animation
//@{
void setOpacity(qreal);
qreal opacity() const
{
return m_opacity;
}
//@}
//*@name colors
//@{
QColor titleBarColor() const;
QColor fontColor() const;
//@}
//*@name maximization modes
//@{
inline bool isMaximized() const;
inline bool isMaximizedHorizontally() const;
inline bool isMaximizedVertically() const;
inline bool isLeftEdge() const;
inline bool isRightEdge() const;
inline bool isTopEdge() const;
inline bool isBottomEdge() const;
inline bool hideTitleBar() const;
inline bool hideIcon() const;
inline bool hideCaption() const;
inline bool hideInnerBorder() const;
inline bool isGadgetExplorer() const;
inline bool isPolkit() const;
//@}
Q_SIGNALS:
void buttonHoverStatus(KDecoration3::DecorationButtonType button, bool hovered, QPoint pos);
public Q_SLOTS:
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
bool init() override;
#else
void init() override;
#endif
private Q_SLOTS:
void reconfigure();
void recalculateBorders();
void updateButtonsGeometry();
void updateButtonsGeometryDelayed();
void updateTitleBar();
void updateAnimationState();
void updateBlur();
void onTabletModeChanged(bool mode);
private:
//* return the rect in which caption will be drawn
QPair<QRect, Qt::Alignment> captionRect() const;
void createButtons();
void smodPaint(QPainter *painter, const QRectF &repaintRegion);
void smodPaintGlow(QPainter *painter, const QRectF &repaintRegion);
void smodPaintOuterBorder(QPainter *painter, const QRectF &repaintRegion);
void smodPaintTitleBar(QPainter *painter, const QRectF &repaintRegion);
void updateShadow();
std::shared_ptr<KDecoration3::DecorationShadow> smodCreateShadow(bool active);
void setScaledCornerRadius();
//*@name border size
//@{
inline bool hasBorders() const;
inline bool hasNoBorders() const;
inline bool hasNoSideBorders() const;
//@}
inline bool outlinesEnabled() const;
InternalSettingsPtr m_internalSettings;
KDecoration3::DecorationButtonGroup *m_leftButtons = nullptr;
KDecoration3::DecorationButtonGroup *m_rightButtons = nullptr;
//* active state change animation
QVariantAnimation *m_animation;
QVariantAnimation *m_shadowAnimation;
//* active state change opacity
qreal m_opacity = 0;
qreal m_shadowOpacity = 0;
//*frame corner radius, scaled according to DPI
qreal m_scaledCornerRadius = 3;
bool m_tabletMode = false;
};
bool Decoration::hasBorders() const
{
if (m_internalSettings && m_internalSettings->mask() & BorderSize) {
return m_internalSettings->borderSize() > InternalSettings::BorderNoSides;
} else {
return settings()->borderSize() > KDecoration3::BorderSize::NoSides;
}
}
bool Decoration::hasNoBorders() const
{
if (m_internalSettings && m_internalSettings->mask() & BorderSize) {
return m_internalSettings->borderSize() == InternalSettings::BorderNone;
} else {
return settings()->borderSize() == KDecoration3::BorderSize::None;
}
}
bool Decoration::hasNoSideBorders() const
{
if (m_internalSettings && m_internalSettings->mask() & BorderSize) {
return m_internalSettings->borderSize() == InternalSettings::BorderNoSides;
} else {
return settings()->borderSize() == KDecoration3::BorderSize::NoSides;
}
}
bool Decoration::isMaximized() const
{
return window()->isMaximized() && !m_internalSettings->drawBorderOnMaximizedWindows();
}
bool Decoration::isMaximizedHorizontally() const
{
return window()->isMaximizedHorizontally() && !m_internalSettings->drawBorderOnMaximizedWindows();
}
bool Decoration::isMaximizedVertically() const
{
return window()->isMaximizedVertically() && !m_internalSettings->drawBorderOnMaximizedWindows();
}
bool Decoration::isLeftEdge() const
{
const auto c = window();
return (c->isMaximizedHorizontally() || c->adjacentScreenEdges().testFlag(Qt::LeftEdge)) && !m_internalSettings->drawBorderOnMaximizedWindows();
}
bool Decoration::isRightEdge() const
{
const auto c = window();
return (c->isMaximizedHorizontally() || c->adjacentScreenEdges().testFlag(Qt::RightEdge)) && !m_internalSettings->drawBorderOnMaximizedWindows();
}
bool Decoration::isTopEdge() const
{
const auto c = window();
return (c->isMaximizedVertically() || c->adjacentScreenEdges().testFlag(Qt::TopEdge)) && !m_internalSettings->drawBorderOnMaximizedWindows();
}
bool Decoration::isBottomEdge() const
{
const auto c = window();
return (c->isMaximizedVertically() || c->adjacentScreenEdges().testFlag(Qt::BottomEdge)) && !m_internalSettings->drawBorderOnMaximizedWindows();
}
bool Decoration::hideTitleBar() const
{
return m_internalSettings->hideTitleBar() && !window()->isShaded();
}
bool Decoration::isGadgetExplorer() const
{
const auto c = window();
if(c->caption() == QStringLiteral("plasmashell_explorer") && (c->windowClass() == QStringLiteral("plasmashell plasmashell") || c->windowClass() == QStringLiteral("plasmashell org.kde.plasmashell"))) return true;
return false;
}
bool Decoration::isPolkit() const
{
const auto c = window();
if((c->windowClass() == QStringLiteral("polkit-kde-authentication-agent-1 polkit-kde-authentication-agent-1")) || c->windowClass() == QStringLiteral("polkit-kde-manager polkit-kde-manager") || c->windowClass() == QStringLiteral(" org.kde.polkit-kde-authentication-agent-1")) return true;
return false;
}
bool Decoration::hideIcon() const
{
if(isGadgetExplorer() || isPolkit()) return true;
return m_internalSettings->hideIcon() && !window()->isShaded();
}
bool Decoration::hideCaption() const
{
if(isGadgetExplorer()) return true;
return m_internalSettings->hideCaption() && !window()->isShaded();
}
bool Decoration::hideInnerBorder() const
{
if(isGadgetExplorer()) return true;
return m_internalSettings->hideInnerBorder() && !window()->isShaded();
}
bool Decoration::outlinesEnabled() const
{
return true;
}
}

View file

@ -1,108 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezeexceptionlist.cpp
// window decoration exceptions
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#include "breezeexceptionlist.h"
namespace Breeze
{
//______________________________________________________________
void ExceptionList::readConfig(KSharedConfig::Ptr config)
{
_exceptions.clear();
QString groupName;
for (int index = 0; config->hasGroup(groupName = exceptionGroupName(index)); ++index) {
// create exception
InternalSettings exception;
// reset group
readConfig(&exception, config.data(), groupName);
// create new configuration
InternalSettingsPtr configuration(new InternalSettings());
configuration.data()->load();
// apply changes from exception
configuration->setEnabled(exception.enabled());
configuration->setExceptionType(exception.exceptionType());
configuration->setExceptionPattern(exception.exceptionPattern());
configuration->setMask(exception.mask());
// propagate all features found in mask to the output configuration
if (exception.mask() & BorderSize) {
configuration->setBorderSize(exception.borderSize());
}
configuration->setHideTitleBar(exception.hideTitleBar());
configuration->setHideIcon(exception.hideIcon());
configuration->setHideCaption(exception.hideCaption());
configuration->setHideInnerBorder(exception.hideInnerBorder());
// append to exceptions
_exceptions.append(configuration);
}
}
//______________________________________________________________
void ExceptionList::writeConfig(KSharedConfig::Ptr config)
{
// remove all existing exceptions
QString groupName;
for (int index = 0; config->hasGroup(groupName = exceptionGroupName(index)); ++index) {
config->deleteGroup(groupName);
}
// rewrite current exceptions
int index = 0;
for (const InternalSettingsPtr &exception : std::as_const(_exceptions)) {
writeConfig(exception.data(), config.data(), exceptionGroupName(index));
++index;
}
}
//_______________________________________________________________________
QString ExceptionList::exceptionGroupName(int index)
{
return QString("Windeco Exception %1").arg(index);
}
//______________________________________________________________
void ExceptionList::writeConfig(KCoreConfigSkeleton *skeleton, KConfig *config, const QString &groupName)
{
// list of items to be written
const QStringList keys = {"Enabled", "ExceptionPattern", "ExceptionType", "HideTitleBar", "HideIcon", "HideCaption", "HideInnerBorder", "Mask", "BorderSize"};
// write all items
for (auto key : keys) {
KConfigSkeletonItem *item(skeleton->findItem(key));
if (!item) {
continue;
}
if (!groupName.isEmpty()) {
item->setGroup(groupName);
}
KConfigGroup configGroup(config, item->group());
configGroup.writeEntry(item->key(), item->property());
}
}
//______________________________________________________________
void ExceptionList::readConfig(KCoreConfigSkeleton *skeleton, KConfig *config, const QString &groupName)
{
const auto items = skeleton->items();
for (KConfigSkeletonItem *item : items) {
if (!groupName.isEmpty()) {
item->setGroup(groupName);
}
item->readConfig(config);
}
}
}

View file

@ -1,57 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezeexceptionlist.h
// window decoration exceptions
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#pragma once
#include "breeze.h"
#include "breezesettings.h"
#include <KSharedConfig>
namespace Breeze
{
//! breeze exceptions list
class ExceptionList
{
public:
//! constructor from list
explicit ExceptionList(const InternalSettingsList &exceptions = InternalSettingsList())
: _exceptions(exceptions)
{
}
//! exceptions
const InternalSettingsList &get(void) const
{
return _exceptions;
}
//! read from KConfig
void readConfig(KSharedConfig::Ptr);
//! write to kconfig
void writeConfig(KSharedConfig::Ptr);
protected:
//! generate exception group name for given exception index
static QString exceptionGroupName(int index);
//! read configuration
static void readConfig(KCoreConfigSkeleton *, KConfig *, const QString &);
//! write configuration
static void writeConfig(KCoreConfigSkeleton *, KConfig *, const QString &);
private:
//! exceptions
InternalSettingsList _exceptions;
};
}

View file

@ -1,7 +0,0 @@
File=breezesettingsdata.kcfg
ClassName=InternalSettings
NameSpace=Breeze
Singleton=false
Mutators=true
GlobalEnums=true
Notifiers=OutlineCloseButton

View file

@ -1,132 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
<kcfgfile name="smodrc"/>
<!-- common options -->
<group name="Common">
<entry name="EnableShadow" type = "Bool">
<default>true</default>
</entry>
<!-- close button -->
<entry name="OutlineCloseButton" type = "Bool">
<default>false</default>
</entry>
</group>
<group name="Windeco">
<!-- border size -->
<!--
this one is used only for window specific settings, since the default is globally set by kwin
the enumeration must be kept in sync with kwin's global settings
-->
<entry name="BorderSize" type = "Enum">
<choices>
<choice name="BorderNone" />
<choice name="BorderNoSides" />
<choice name="BorderTiny" />
<choice name="BorderNormal" />
<choice name="BorderLarge" />
<choice name="BorderVeryLarge" />
<choice name="BorderHuge" />
<choice name="BorderVeryHuge" />
<choice name="BorderOversized" />
</choices>
<default>BorderNone</default>
</entry>
<!-- title alignment -->
<entry name="TitleAlignment" type="Enum">
<choices>
<choice name="AlignLeft" />
<choice name="AlignCenter" />
<choice name="AlignRight" />
<choice name="AlignCenterFullWidth" />
</choices>
<default>AlignLeft</default>
</entry>
<!-- button size -->
<entry name="ButtonSize" type="Enum">
<choices>
<choice name="ButtonTiny" />
<choice name="ButtonSmall" />
<choice name="ButtonDefault" />
<choice name="ButtonLarge" />
<choice name="ButtonVeryLarge" />
</choices>
<default>ButtonDefault</default>
</entry>
<!-- maximized windows -->
<entry name="DrawBorderOnMaximizedWindows" type = "Bool">
<default>false</default>
</entry>
<!-- size grip -->
<entry name="DrawBackgroundGradient" type = "Bool">
<default>false</default>
</entry>
<!-- hide title bar -->
<entry name="HideTitleBar" type = "Bool">
<default>false</default>
</entry>
<entry name="HideIcon" type = "Bool">
<default>false</default>
</entry>
<entry name="HideCaption" type = "Bool">
<default>false</default>
</entry>
<entry name="HideInnerBorder" type = "Bool">
<default>false</default>
</entry>
<!-- window specific settings -->
<entry name="ExceptionType" type="Enum">
<choices>
<choice name="ExceptionWindowClassName" />
<choice name="ExceptionWindowTitle" />
</choices>
<default>ExceptionWindowClassName</default>
</entry>
<entry name="ExceptionPattern" type = "String"/>
<entry name="Enabled" type = "Bool">
<default>true</default>
</entry>
<entry name="Mask" type = "Int">
<default>0</default>
</entry>
<entry name="TitlebarSize" type="Int">
<default>21</default>
</entry>
<entry name="AlternativeButtonSizing" type="Bool">
<default>false</default>
</entry>
<entry name="DecorationTheme" type="String">
<default>Aero</default>
</entry>
<entry name="InvertTextColor" type="Bool">
<default>false</default>
</entry>
</group>
</kcfg>

View file

@ -1,105 +0,0 @@
/*
* SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#include "breezesettingsprovider.h"
#include "breezeexceptionlist.h"
#include <QRegularExpression>
#include <QTextStream>
namespace Breeze
{
SettingsProvider *SettingsProvider::s_self = nullptr;
//__________________________________________________________________
SettingsProvider::SettingsProvider()
: m_config(KSharedConfig::openConfig(QStringLiteral("smodrc")))
{
reconfigure();
}
//__________________________________________________________________
SettingsProvider::~SettingsProvider()
{
s_self = nullptr;
}
//__________________________________________________________________
SettingsProvider *SettingsProvider::self()
{
// TODO: this is not thread safe!
if (!s_self) {
s_self = new SettingsProvider();
}
return s_self;
}
//__________________________________________________________________
void SettingsProvider::reconfigure()
{
if (!m_defaultSettings) {
m_defaultSettings = InternalSettingsPtr(new InternalSettings());
m_defaultSettings->setCurrentGroup(QStringLiteral("Windeco"));
}
m_defaultSettings->load();
ExceptionList exceptions;
exceptions.readConfig(m_config);
m_exceptions = exceptions.get();
}
//__________________________________________________________________
InternalSettingsPtr SettingsProvider::internalSettings(Decoration *decoration) const
{
QString windowTitle;
QString windowClass;
// get the client
const auto client = decoration->window();
for (auto internalSettings : std::as_const(m_exceptions)) {
// discard disabled exceptions
if (!internalSettings->enabled()) {
continue;
}
// discard exceptions with empty exception pattern
if (internalSettings->exceptionPattern().isEmpty()) {
continue;
}
/*
decide which value is to be compared
to the regular expression, based on exception type
*/
QString value;
switch (internalSettings->exceptionType()) {
case InternalSettings::ExceptionWindowTitle: {
value = windowTitle.isEmpty() ? (windowTitle = client->caption()) : windowTitle;
break;
}
default:
case InternalSettings::ExceptionWindowClassName: {
value = windowClass.isEmpty() ? (windowClass = client->windowClass()) : windowClass;
break;
}
}
// check matching
QRegularExpression rx(internalSettings->exceptionPattern());
if (rx.match(value).hasMatch()) {
return internalSettings;
}
}
return m_defaultSettings;
}
}

View file

@ -1,55 +0,0 @@
/*
* SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
*
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#pragma once
#include "breeze.h"
#include "breezedecoration.h"
#include "breezesettings.h"
#include <KSharedConfig>
#include <QObject>
namespace Breeze
{
class SettingsProvider : public QObject
{
Q_OBJECT
public:
//* destructor
~SettingsProvider();
//* singleton
static SettingsProvider *self();
//* internal settings for given decoration
InternalSettingsPtr internalSettings(Decoration *) const;
public Q_SLOTS:
//* reconfigure
void reconfigure();
private:
//* constructor
SettingsProvider();
//* default configuration
InternalSettingsPtr m_defaultSettings;
//* exceptions
InternalSettingsList m_exceptions;
//* config object
KSharedConfigPtr m_config;
//* singleton
static SettingsProvider *s_self;
};
}

View file

@ -1,32 +0,0 @@
set(breezedecoration_config_SRCS
../breezeexceptionlist.cpp
breezeconfigwidget.cpp
breezedetectwidget.cpp
breezeexceptiondialog.cpp
breezeexceptionlistwidget.cpp
breezeexceptionmodel.cpp
breezeitemmodel.cpp
)
ki18n_wrap_ui(breezedecoration_config_SRCS
ui/breezeconfigurationui.ui
ui/breezeexceptiondialog.ui
ui/breezeexceptionlistwidget.ui
)
kcoreaddons_add_plugin(kcm_smoddecoration SOURCES kcm_breezedecoration.cpp ${breezedecoration_config_SRCS} INSTALL_NAMESPACE "${KDECORATION_KCM_PLUGIN_DIR}")
kconfig_add_kcfg_files(kcm_smoddecoration ../breezesettings.kcfgc)
target_include_directories(kcm_smoddecoration PRIVATE ${CMAKE_SOURCE_DIR}/kdecoration ${CMAKE_BINARY_DIR}/kdecoration/)
target_link_libraries(kcm_smoddecoration
PUBLIC
Qt6::Core
Qt6::Gui
Qt6::DBus
PRIVATE
KF6::ConfigCore
KF6::CoreAddons
KF6::GuiAddons
KF6::I18n
KF6::IconThemes
KF6::KCMUtils
)
kcmutils_generate_desktop_file(kcm_smoddecoration)

View file

@ -1,221 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezeconfigurationui.cpp
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#include "breezeconfigwidget.h"
#include "breezeexceptionlist.h"
#include "../smod/smod.h"
#include <KLocalizedString>
#include <QDBusConnection>
#include <QDBusMessage>
#include <QFontDatabase>
#include <QRegularExpression>
namespace Breeze
{
//_________________________________________________________
ConfigWidget::ConfigWidget(QObject *parent, const KPluginMetaData &data, const QVariantList & /*args*/)
: KCModule(parent, data)
, m_configuration(KSharedConfig::openConfig(QStringLiteral("smodrc")))
, m_changed(false)
{
// configuration
m_ui.setupUi(widget());
// track ui changes
connect(m_ui.titleAlignment, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()));
connect(m_ui.buttonSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()));
connect(m_ui.titlebarSize, SIGNAL(valueChanged(int)), SLOT(updateChanged()));
connect(m_ui.outlineCloseButton, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged);
connect(m_ui.enableShadow, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged);
connect(m_ui.invertTextColor, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged);
connect(m_ui.drawBorderOnMaximizedWindows, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged);
connect(m_ui.drawBackgroundGradient, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged);
// track exception changes
connect(m_ui.exceptions, &ExceptionListWidget::changed, this, &ConfigWidget::updateChanged);
// set formatting
//m_ui.drawBorderOnMaximizedWindowsHelpLabel->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont));
m_themeChanged = false;
m_ui.themeList->setSelectionMode(QAbstractItemView::SingleSelection);
m_ui.themeList->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
//_________________________________________________________
void ConfigWidget::load()
{
// create internal settings and load from rc files
m_internalSettings = InternalSettingsPtr(new InternalSettings());
m_internalSettings->load();
// assign to ui
m_ui.titleAlignment->setCurrentIndex(m_internalSettings->titleAlignment());
m_ui.buttonSize->setCurrentIndex(m_internalSettings->buttonSize());
m_ui.titlebarSize->setValue(m_internalSettings->titlebarSize());
m_ui.drawBorderOnMaximizedWindows->setChecked(m_internalSettings->drawBorderOnMaximizedWindows());
m_ui.outlineCloseButton->setChecked(m_internalSettings->outlineCloseButton());
m_ui.enableShadow->setChecked(m_internalSettings->enableShadow());
m_ui.invertTextColor->setChecked(m_internalSettings->invertTextColor());
m_ui.drawBackgroundGradient->setChecked(m_internalSettings->drawBackgroundGradient());
// load exceptions
ExceptionList exceptions;
exceptions.readConfig(m_configuration);
m_ui.exceptions->setExceptions(exceptions.get());
setNeedsSave(false);
m_ui.hideWidget->setVisible(false);
// fill list
QDir system_dir(SMOD::SYSTEM_PATH);
QDir local_dir(SMOD::LOCAL_PATH);
QStringList system_files = system_dir.entryList(QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks);
QStringList local_files = local_dir.entryList(QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks);
QStringList all_files = system_files + local_files;
all_files.removeDuplicates();
all_files.erase(std::remove_if(all_files.begin(), all_files.end(), [](const QString &a) { return !a.endsWith(".smod.rcc"); }), all_files.end());
all_files.replaceInStrings(QRegularExpression("\\.smod\\.rcc$"), "");
QStringListModel *listModel = new QStringListModel(this);
listModel->setStringList(all_files);
m_ui.themeList->setModel(listModel);
connect(m_ui.themeList->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(themeChanged(QModelIndex,QModelIndex)));
int index = all_files.indexOf(m_internalSettings->decorationTheme());
QModelIndex m_index = listModel->index(index, 0);
if(m_index.isValid()) m_ui.themeList->setCurrentIndex(m_index);
}
//_________________________________________________________
void ConfigWidget::save()
{
// create internal settings and load from rc files
m_internalSettings = InternalSettingsPtr(new InternalSettings());
m_internalSettings->load();
// apply modifications from ui
m_internalSettings->setTitleAlignment(m_ui.titleAlignment->currentIndex());
m_internalSettings->setButtonSize(m_ui.buttonSize->currentIndex());
m_internalSettings->setTitlebarSize(m_ui.titlebarSize->value());
m_internalSettings->setOutlineCloseButton(m_ui.outlineCloseButton->isChecked());
m_internalSettings->setEnableShadow(m_ui.enableShadow->isChecked());
m_internalSettings->setInvertTextColor(m_ui.invertTextColor->isChecked());
m_internalSettings->setDrawBorderOnMaximizedWindows(m_ui.drawBorderOnMaximizedWindows->isChecked());
m_internalSettings->setDrawBackgroundGradient(m_ui.drawBackgroundGradient->isChecked());
auto model = m_ui.themeList->model();
QString theme = model->data(m_ui.themeList->currentIndex(), Qt::DisplayRole).toString();
m_internalSettings->setDecorationTheme(theme);
// save configuration
m_internalSettings->save();
// get list of exceptions and write
InternalSettingsList exceptions(m_ui.exceptions->exceptions());
ExceptionList(exceptions).writeConfig(m_configuration);
// sync configuration
m_configuration->sync();
setNeedsSave(false);
// needed to tell kwin to reload when running from external kcmshell
{
QDBusMessage message = QDBusMessage::createSignal("/KWin", "org.kde.KWin", "reloadConfig");
QDBusConnection::sessionBus().send(message);
}
// needed for breeze style to reload shadows
{
QDBusMessage message(QDBusMessage::createSignal("/BreezeDecoration", "org.kde.Breeze.Style", "reparseConfiguration"));
QDBusConnection::sessionBus().send(message);
}
}
//_________________________________________________________
void ConfigWidget::defaults()
{
// create internal settings and load from rc files
m_internalSettings = InternalSettingsPtr(new InternalSettings());
m_internalSettings->setDefaults();
// assign to ui
m_ui.titleAlignment->setCurrentIndex(m_internalSettings->titleAlignment());
m_ui.buttonSize->setCurrentIndex(m_internalSettings->buttonSize());
m_ui.titlebarSize->setValue(m_internalSettings->titlebarSize());
m_ui.outlineCloseButton->setChecked(m_internalSettings->outlineCloseButton());
m_ui.enableShadow->setChecked(m_internalSettings->enableShadow());
m_ui.invertTextColor->setChecked(m_internalSettings->invertTextColor());
m_ui.drawBorderOnMaximizedWindows->setChecked(m_internalSettings->drawBorderOnMaximizedWindows());
m_ui.drawBackgroundGradient->setChecked(m_internalSettings->drawBackgroundGradient());
auto model = m_ui.themeList->model();
QModelIndex m_index = model->match(model->index(0, 0), Qt::DisplayRole, QVariant::fromValue(m_internalSettings->decorationTheme()), -1, Qt::MatchExactly).at(0);
if(m_index.isValid())
{
m_ui.themeList->setCurrentIndex(m_index);
}
}
void ConfigWidget::themeChanged(QModelIndex index, QModelIndex previous)
{
if (!m_internalSettings) {
return;
}
if(index != previous && index.row() != -1 && previous.row() != -1)
{
m_themeChanged = true;
updateChanged();
}
}
//_______________________________________________
void ConfigWidget::updateChanged()
{
// check configuration
if (!m_internalSettings) {
return;
}
// track modifications
bool modified(false);
if (m_ui.titleAlignment->currentIndex() != m_internalSettings->titleAlignment()) {
modified = true;
} else if (m_ui.buttonSize->currentIndex() != m_internalSettings->buttonSize()) {
modified = true;
} else if (m_ui.titlebarSize->value() != m_internalSettings->titlebarSize()) {
modified = true;
} else if (m_ui.outlineCloseButton->isChecked() != m_internalSettings->outlineCloseButton()) {
modified = true;
} else if (m_ui.enableShadow->isChecked() != m_internalSettings->enableShadow()) {
modified = true;
} else if (m_ui.invertTextColor->isChecked() != m_internalSettings->invertTextColor()) {
modified = true;
} else if (m_ui.drawBorderOnMaximizedWindows->isChecked() != m_internalSettings->drawBorderOnMaximizedWindows()) {
modified = true;
} else if (m_ui.drawBackgroundGradient->isChecked() != m_internalSettings->drawBackgroundGradient()) {
modified = true;
// exceptions
} else if (m_ui.exceptions->isChanged()) {
modified = true;
} else if(m_themeChanged) {
modified = true;
}
setNeedsSave(modified);
m_themeChanged = false;
}
}

View file

@ -1,80 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezeconfigurationui.h
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#pragma once
#include "breeze.h"
#include "breezeexceptionlistwidget.h"
#include "breezesettings.h"
#include "ui_breezeconfigurationui.h"
#include <KCModule>
#include <KSharedConfig>
#include <QSharedPointer>
#include <QWidget>
#include <QDir>
#include <QListWidget>
#include <QFileInfo>
#include <QFileInfoList>
#include <algorithm>
#include <QObject>
#include <QStringListModel>
#include <QItemSelection>
#include <QList>
namespace Breeze
{
//_____________________________________________
class ConfigWidget : public KCModule
{
Q_OBJECT
public:
//* constructor
explicit ConfigWidget(QObject *parent, const KPluginMetaData &data, const QVariantList &args);
//* destructor
virtual ~ConfigWidget() = default;
//* default
void defaults() override;
//* load configuration
void load() override;
//* save configuration
void save() override;
protected Q_SLOTS:
//* update changed state
virtual void updateChanged();
void themeChanged(QModelIndex index, QModelIndex previous);
private:
//* ui
Ui_BreezeConfigurationUI m_ui;
//* kconfiguration object
KSharedConfig::Ptr m_configuration;
//* internal exception
InternalSettingsPtr m_internalSettings;
//* changed state
bool m_changed;
bool m_themeChanged;
};
}

View file

@ -1,57 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezedetectwidget.cpp
// Note: this class is a stripped down version of
// /kdebase/workspace/kwin/kcmkwin/kwinrules/detectwidget.cpp
// SPDX-FileCopyrightText: 2004 Lubos Lunak <l.lunak@kde.org>
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#include "breezedetectwidget.h"
#include <QDBusConnection>
#include <QDBusMessage>
#include <QDBusPendingCallWatcher>
#include <QDBusPendingReply>
namespace Breeze
{
//_________________________________________________________
DetectDialog::DetectDialog(QObject *parent)
: QObject(parent)
{
}
//_________________________________________________________
void DetectDialog::detect()
{
QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.KWin"),
QStringLiteral("/KWin"),
QStringLiteral("org.kde.KWin"),
QStringLiteral("queryWindowInfo"));
QDBusPendingReply<QVariantMap> asyncReply = QDBusConnection::sessionBus().asyncCall(message);
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(asyncReply, this);
connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *self) {
QDBusPendingReply<QVariantMap> reply = *self;
self->deleteLater();
if (!reply.isValid()) {
Q_EMIT detectionDone(false);
return;
}
m_properties = reply.value();
Q_EMIT detectionDone(true);
});
}
//_________________________________________________________
QVariantMap DetectDialog::properties() const
{
return m_properties;
}
}

View file

@ -1,43 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezedetectwidget.h
// Note: this class is a stripped down version of
// /kdebase/workspace/kwin/kcmkwin/kwinrules/detectwidget.h
// SPDX-FileCopyrightText: 2004 Lubos Lunak <l.lunak@kde.org>
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#pragma once
#include <QObject>
#include <QVariantMap>
namespace Breeze
{
class DetectDialog : public QObject
{
Q_OBJECT
public:
//* constructor
explicit DetectDialog(QObject *parent = nullptr);
//* read window properties or select one from mouse grab
void detect();
//* window properties
QVariantMap properties() const;
Q_SIGNALS:
void detectionDone(bool);
private:
//* properties
QVariantMap m_properties;
};
} // namespace

View file

@ -1,158 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezeexceptiondialog.cpp
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#include "breezeexceptiondialog.h"
#include "breezedetectwidget.h"
namespace Breeze
{
//___________________________________________
ExceptionDialog::ExceptionDialog(QWidget *parent)
: QDialog(parent)
{
m_ui.setupUi(this);
connect(m_ui.buttonBox->button(QDialogButtonBox::Cancel), &QAbstractButton::clicked, this, &QWidget::close);
// store checkboxes from ui into list
m_checkboxes.insert(BorderSize, m_ui.borderSizeCheckBox);
// detect window properties
connect(m_ui.detectDialogButton, &QAbstractButton::clicked, this, &ExceptionDialog::selectWindowProperties);
// connections
connect(m_ui.exceptionType, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()));
connect(m_ui.exceptionEditor, &QLineEdit::textChanged, this, &ExceptionDialog::updateChanged);
connect(m_ui.borderSizeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged()));
for (CheckBoxMap::iterator iter = m_checkboxes.begin(); iter != m_checkboxes.end(); ++iter) {
connect(iter.value(), &QAbstractButton::clicked, this, &ExceptionDialog::updateChanged);
}
connect(m_ui.hideTitleBar, &QAbstractButton::clicked, this, &ExceptionDialog::updateChanged);
connect(m_ui.hideIcon, &QAbstractButton::clicked, this, &ExceptionDialog::updateChanged);
connect(m_ui.hideCaption, &QAbstractButton::clicked, this, &ExceptionDialog::updateChanged);
connect(m_ui.hideInnerBorder, &QAbstractButton::clicked, this, &ExceptionDialog::updateChanged);
}
//___________________________________________
void ExceptionDialog::setException(InternalSettingsPtr exception)
{
// store exception internally
m_exception = exception;
// type
m_ui.exceptionType->setCurrentIndex(m_exception->exceptionType());
m_ui.exceptionEditor->setText(m_exception->exceptionPattern());
m_ui.borderSizeComboBox->setCurrentIndex(m_exception->borderSize());
m_ui.hideTitleBar->setChecked(m_exception->hideTitleBar());
m_ui.hideIcon->setChecked(m_exception->hideIcon());
m_ui.hideCaption->setChecked(m_exception->hideCaption());
m_ui.hideInnerBorder->setChecked(m_exception->hideInnerBorder());
// mask
for (CheckBoxMap::iterator iter = m_checkboxes.begin(); iter != m_checkboxes.end(); ++iter) {
iter.value()->setChecked(m_exception->mask() & iter.key());
}
setChanged(false);
}
//___________________________________________
void ExceptionDialog::save()
{
m_exception->setExceptionType(m_ui.exceptionType->currentIndex());
m_exception->setExceptionPattern(m_ui.exceptionEditor->text());
m_exception->setBorderSize(m_ui.borderSizeComboBox->currentIndex());
m_exception->setHideTitleBar(m_ui.hideTitleBar->isChecked());
m_exception->setHideIcon(m_ui.hideIcon->isChecked());
m_exception->setHideCaption(m_ui.hideCaption->isChecked());
m_exception->setHideInnerBorder(m_ui.hideInnerBorder->isChecked());
// mask
unsigned int mask = None;
for (CheckBoxMap::iterator iter = m_checkboxes.begin(); iter != m_checkboxes.end(); ++iter) {
if (iter.value()->isChecked()) {
mask |= iter.key();
}
}
m_exception->setMask(mask);
setChanged(false);
}
//___________________________________________
void ExceptionDialog::updateChanged()
{
bool modified(false);
if (m_exception->exceptionType() != m_ui.exceptionType->currentIndex()) {
modified = true;
} else if (m_exception->exceptionPattern() != m_ui.exceptionEditor->text()) {
modified = true;
} else if (m_exception->borderSize() != m_ui.borderSizeComboBox->currentIndex()) {
modified = true;
} else if (m_exception->hideTitleBar() != m_ui.hideTitleBar->isChecked()) {
modified = true;
} else if (m_exception->hideIcon() != m_ui.hideIcon->isChecked()) {
modified = true;
} else if (m_exception->hideCaption() != m_ui.hideCaption->isChecked()) {
modified = true;
} else if (m_exception->hideInnerBorder() != m_ui.hideInnerBorder->isChecked()) {
modified = true;
} else {
// check mask
for (CheckBoxMap::iterator iter = m_checkboxes.begin(); iter != m_checkboxes.end(); ++iter) {
if (iter.value()->isChecked() != (bool)(m_exception->mask() & iter.key())) {
modified = true;
break;
}
}
}
setChanged(modified);
}
//___________________________________________
void ExceptionDialog::selectWindowProperties()
{
// create widget
if (!m_detectDialog) {
m_detectDialog = new DetectDialog(this);
connect(m_detectDialog, &DetectDialog::detectionDone, this, &ExceptionDialog::readWindowProperties);
}
m_detectDialog->detect();
}
//___________________________________________
void ExceptionDialog::readWindowProperties(bool valid)
{
Q_CHECK_PTR(m_detectDialog);
if (valid) {
// window info
const QVariantMap properties = m_detectDialog->properties();
switch (m_ui.exceptionType->currentIndex()) {
default:
case InternalSettings::ExceptionWindowClassName:
m_ui.exceptionEditor->setText(properties.value(QStringLiteral("resourceClass")).toString());
break;
case InternalSettings::ExceptionWindowTitle:
m_ui.exceptionEditor->setText(properties.value(QStringLiteral("caption")).toString());
break;
}
}
delete m_detectDialog;
m_detectDialog = nullptr;
}
}

View file

@ -1,93 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezeexceptiondialog.h
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#pragma once
#include "breeze.h"
#include "ui_breezeexceptiondialog.h"
#include <QCheckBox>
#include <QMap>
namespace Breeze
{
class DetectDialog;
//* breeze exceptions list
class ExceptionDialog : public QDialog
{
Q_OBJECT
public:
//* constructor
explicit ExceptionDialog(QWidget *parent);
//* destructor
virtual ~ExceptionDialog()
{
}
//* set exception
void setException(InternalSettingsPtr);
//* save exception
void save();
//* true if changed
virtual bool isChanged() const
{
return m_changed;
}
Q_SIGNALS:
//* emitted when changed
void changed(bool);
protected:
//* set changed state
virtual void setChanged(bool value)
{
m_changed = value;
emit changed(value);
}
protected Q_SLOTS:
//* check whether configuration is changed and emit appropriate signal if yes
virtual void updateChanged();
private Q_SLOTS:
//* select window properties from grabbed pointers
void selectWindowProperties();
//* read properties of selected window
void readWindowProperties(bool);
private:
//* map mask and checkbox
using CheckBoxMap = QMap<ExceptionMask, QCheckBox *>;
Ui::BreezeExceptionDialog m_ui;
//* map mask and checkbox
CheckBoxMap m_checkboxes;
//* internal exception
InternalSettingsPtr m_exception;
//* detection dialog
DetectDialog *m_detectDialog = nullptr;
//* changed state
bool m_changed = false;
};
}

View file

@ -1,315 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezeexceptionlistwidget.cpp
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#include "breezeexceptionlistwidget.h"
#include "breezeexceptiondialog.h"
#include <KLocalizedString>
#include <QIcon>
#include <QMessageBox>
#include <QPointer>
#include <QRegularExpression>
//__________________________________________________________
namespace Breeze
{
//__________________________________________________________
ExceptionListWidget::ExceptionListWidget(QWidget *parent)
: QWidget(parent)
{
// ui
m_ui.setupUi(this);
// list
m_ui.exceptionListView->setAllColumnsShowFocus(true);
m_ui.exceptionListView->setRootIsDecorated(false);
m_ui.exceptionListView->setSortingEnabled(false);
m_ui.exceptionListView->setModel(&model());
m_ui.exceptionListView->sortByColumn(ExceptionModel::ColumnType, Qt::AscendingOrder);
m_ui.exceptionListView->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Ignored));
m_ui.moveUpButton->setIcon(QIcon::fromTheme(QStringLiteral("arrow-up")));
m_ui.moveDownButton->setIcon(QIcon::fromTheme(QStringLiteral("arrow-down")));
m_ui.addButton->setIcon(QIcon::fromTheme(QStringLiteral("list-add")));
m_ui.removeButton->setIcon(QIcon::fromTheme(QStringLiteral("list-remove")));
m_ui.editButton->setIcon(QIcon::fromTheme(QStringLiteral("edit-rename")));
connect(m_ui.addButton, &QAbstractButton::clicked, this, &ExceptionListWidget::add);
connect(m_ui.editButton, &QAbstractButton::clicked, this, &ExceptionListWidget::edit);
connect(m_ui.removeButton, &QAbstractButton::clicked, this, &ExceptionListWidget::remove);
connect(m_ui.moveUpButton, &QAbstractButton::clicked, this, &ExceptionListWidget::up);
connect(m_ui.moveDownButton, &QAbstractButton::clicked, this, &ExceptionListWidget::down);
connect(m_ui.exceptionListView, &QAbstractItemView::activated, this, &ExceptionListWidget::edit);
connect(m_ui.exceptionListView, &QAbstractItemView::clicked, this, &ExceptionListWidget::toggle);
connect(m_ui.exceptionListView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &ExceptionListWidget::updateButtons);
updateButtons();
resizeColumns();
}
//__________________________________________________________
void ExceptionListWidget::setExceptions(const InternalSettingsList &exceptions)
{
model().set(exceptions);
resizeColumns();
setChanged(false);
}
//__________________________________________________________
InternalSettingsList ExceptionListWidget::exceptions()
{
return model().get();
setChanged(false);
}
//__________________________________________________________
void ExceptionListWidget::updateButtons()
{
bool hasSelection(!m_ui.exceptionListView->selectionModel()->selectedRows().empty());
m_ui.removeButton->setEnabled(hasSelection);
m_ui.editButton->setEnabled(hasSelection);
m_ui.moveUpButton->setEnabled(hasSelection && !m_ui.exceptionListView->selectionModel()->isRowSelected(0, QModelIndex()));
m_ui.moveDownButton->setEnabled(hasSelection && !m_ui.exceptionListView->selectionModel()->isRowSelected(model().rowCount() - 1, QModelIndex()));
}
//_______________________________________________________
void ExceptionListWidget::add()
{
QPointer<ExceptionDialog> dialog = new ExceptionDialog(this);
dialog->setWindowTitle(i18n("New Exception - Breeze Settings"));
InternalSettingsPtr exception(new InternalSettings());
exception->load();
dialog->setException(exception);
// run dialog and check existence
if (!dialog->exec()) {
delete dialog;
return;
}
dialog->save();
delete dialog;
// check exceptions
if (!checkException(exception)) {
return;
}
// create new item
model().add(exception);
setChanged(true);
// make sure item is selected
QModelIndex index(model().index(exception));
if (index != m_ui.exceptionListView->selectionModel()->currentIndex()) {
m_ui.exceptionListView->selectionModel()->select(index, QItemSelectionModel::Clear | QItemSelectionModel::Select | QItemSelectionModel::Rows);
m_ui.exceptionListView->selectionModel()->setCurrentIndex(index, QItemSelectionModel::Current | QItemSelectionModel::Rows);
}
resizeColumns();
}
//_______________________________________________________
void ExceptionListWidget::edit()
{
// retrieve selection
QModelIndex current(m_ui.exceptionListView->selectionModel()->currentIndex());
if (!model().contains(current)) {
return;
}
InternalSettingsPtr exception(model().get(current));
// create dialog
QPointer<ExceptionDialog> dialog(new ExceptionDialog(this));
dialog->setWindowTitle(i18n("Edit Exception - Breeze Settings"));
dialog->setException(exception);
// map dialog
if (!dialog->exec()) {
delete dialog;
return;
}
// check modifications
if (!dialog->isChanged()) {
return;
}
// retrieve exception
dialog->save();
delete dialog;
// check new exception validity
checkException(exception);
resizeColumns();
setChanged(true);
}
//_______________________________________________________
void ExceptionListWidget::remove()
{
// confirmation dialog
{
QMessageBox messageBox(QMessageBox::Question,
i18n("Question - Breeze Settings"),
i18n("Remove selected exception?"),
QMessageBox::Yes | QMessageBox::Cancel);
messageBox.button(QMessageBox::Yes)->setText(i18n("Remove"));
messageBox.setDefaultButton(QMessageBox::Cancel);
if (messageBox.exec() == QMessageBox::Cancel) {
return;
}
}
// remove
model().remove(model().get(m_ui.exceptionListView->selectionModel()->selectedRows()));
resizeColumns();
updateButtons();
setChanged(true);
}
//_______________________________________________________
void ExceptionListWidget::toggle(const QModelIndex &index)
{
if (!model().contains(index)) {
return;
}
if (index.column() != ExceptionModel::ColumnEnabled) {
return;
}
// get matching exception
InternalSettingsPtr exception(model().get(index));
exception->setEnabled(!exception->enabled());
setChanged(true);
}
//_______________________________________________________
void ExceptionListWidget::up()
{
InternalSettingsList selection(model().get(m_ui.exceptionListView->selectionModel()->selectedRows()));
if (selection.empty()) {
return;
}
// retrieve selected indexes in list and store in model
QModelIndexList selectedIndices(m_ui.exceptionListView->selectionModel()->selectedRows());
InternalSettingsList selectedExceptions(model().get(selectedIndices));
InternalSettingsList currentException(model().get());
InternalSettingsList newExceptions;
for (InternalSettingsList::const_iterator iter = currentException.constBegin(); iter != currentException.constEnd(); ++iter) {
// check if new list is not empty, current index is selected and last index is not.
// if yes, move.
if (!(newExceptions.empty() || selectedIndices.indexOf(model().index(*iter)) == -1
|| selectedIndices.indexOf(model().index(newExceptions.back())) != -1)) {
InternalSettingsPtr last(newExceptions.back());
newExceptions.removeLast();
newExceptions.append(*iter);
newExceptions.append(last);
} else {
newExceptions.append(*iter);
}
}
model().set(newExceptions);
// restore selection
m_ui.exceptionListView->selectionModel()->select(model().index(selectedExceptions.front()),
QItemSelectionModel::Clear | QItemSelectionModel::Select | QItemSelectionModel::Rows);
for (InternalSettingsList::const_iterator iter = selectedExceptions.constBegin(); iter != selectedExceptions.constEnd(); ++iter) {
m_ui.exceptionListView->selectionModel()->select(model().index(*iter), QItemSelectionModel::Select | QItemSelectionModel::Rows);
}
setChanged(true);
}
//_______________________________________________________
void ExceptionListWidget::down()
{
InternalSettingsList selection(model().get(m_ui.exceptionListView->selectionModel()->selectedRows()));
if (selection.empty()) {
return;
}
// retrieve selected indexes in list and store in model
QModelIndexList selectedIndices(m_ui.exceptionListView->selectionModel()->selectedIndexes());
InternalSettingsList selectedExceptions(model().get(selectedIndices));
InternalSettingsList currentExceptions(model().get());
InternalSettingsList newExceptions;
InternalSettingsListIterator iter(currentExceptions);
iter.toBack();
while (iter.hasPrevious()) {
InternalSettingsPtr current(iter.previous());
// check if new list is not empty, current index is selected and last index is not.
// if yes, move.
if (!(newExceptions.empty() || selectedIndices.indexOf(model().index(current)) == -1
|| selectedIndices.indexOf(model().index(newExceptions.front())) != -1)) {
InternalSettingsPtr first(newExceptions.front());
newExceptions.removeFirst();
newExceptions.prepend(current);
newExceptions.prepend(first);
} else {
newExceptions.prepend(current);
}
}
model().set(newExceptions);
// restore selection
m_ui.exceptionListView->selectionModel()->select(model().index(selectedExceptions.front()),
QItemSelectionModel::Clear | QItemSelectionModel::Select | QItemSelectionModel::Rows);
for (InternalSettingsList::const_iterator iter = selectedExceptions.constBegin(); iter != selectedExceptions.constEnd(); ++iter) {
m_ui.exceptionListView->selectionModel()->select(model().index(*iter), QItemSelectionModel::Select | QItemSelectionModel::Rows);
}
setChanged(true);
}
//_______________________________________________________
void ExceptionListWidget::resizeColumns() const
{
m_ui.exceptionListView->resizeColumnToContents(ExceptionModel::ColumnEnabled);
m_ui.exceptionListView->resizeColumnToContents(ExceptionModel::ColumnType);
m_ui.exceptionListView->resizeColumnToContents(ExceptionModel::ColumnRegExp);
}
//_______________________________________________________
bool ExceptionListWidget::checkException(InternalSettingsPtr exception)
{
while (exception->exceptionPattern().isEmpty() || !QRegularExpression(exception->exceptionPattern()).isValid()) {
QMessageBox::warning(this, i18n("Warning - Breeze Settings"), i18n("Regular Expression syntax is incorrect"));
QPointer<ExceptionDialog> dialog(new ExceptionDialog(this));
dialog->setException(exception);
if (dialog->exec() == QDialog::Rejected) {
delete dialog;
return false;
}
dialog->save();
delete dialog;
}
return true;
}
}

View file

@ -1,105 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezeexceptionlistwidget.h
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#pragma once
#include "breezeexceptionmodel.h"
#include "ui_breezeexceptionlistwidget.h"
//* QDialog used to commit selected files
namespace Breeze
{
class ExceptionListWidget : public QWidget
{
//* Qt meta object
Q_OBJECT
public:
//* constructor
explicit ExceptionListWidget(QWidget * = nullptr);
//* set exceptions
void setExceptions(const InternalSettingsList &);
//* get exceptions
InternalSettingsList exceptions();
//* true if changed
virtual bool isChanged() const
{
return m_changed;
}
Q_SIGNALS:
//* emitted when changed
void changed(bool);
protected:
//* model
const ExceptionModel &model() const
{
return m_model;
}
//* model
ExceptionModel &model()
{
return m_model;
}
protected Q_SLOTS:
//* update button states
virtual void updateButtons();
//* add
virtual void add();
//* edit
virtual void edit();
//* remove
virtual void remove();
//* toggle
virtual void toggle(const QModelIndex &);
//* move up
virtual void up();
//* move down
virtual void down();
protected:
//* resize columns
void resizeColumns() const;
//* check exception
bool checkException(InternalSettingsPtr);
//* set changed state
virtual void setChanged(bool value)
{
m_changed = value;
emit changed(value);
}
private:
//* model
ExceptionModel m_model;
//* ui
Ui_BreezeExceptionListWidget m_ui;
//* changed state
bool m_changed = false;
};
}

View file

@ -1,72 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezeexceptionmodel.cpp
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#include "breezeexceptionmodel.h"
#include <KLocalizedString>
namespace Breeze
{
//_______________________________________________
const QString ExceptionModel::m_columnTitles[ExceptionModel::nColumns] = {QStringLiteral(""), i18n("Exception Type"), i18n("Regular Expression")};
//__________________________________________________________________
QVariant ExceptionModel::data(const QModelIndex &index, int role) const
{
// check index, role and column
if (!index.isValid()) {
return QVariant();
}
// retrieve associated file info
const InternalSettingsPtr &configuration(get(index));
// return text associated to file and column
if (role == Qt::DisplayRole) {
switch (index.column()) {
case ColumnType: {
switch (configuration->exceptionType()) {
case InternalSettings::ExceptionWindowTitle:
return i18n("Window Title");
default:
case InternalSettings::ExceptionWindowClassName:
return i18n("Window Class Name");
}
}
case ColumnRegExp:
return configuration->exceptionPattern();
default:
return QVariant();
break;
}
} else if (role == Qt::CheckStateRole && index.column() == ColumnEnabled) {
return configuration->enabled() ? Qt::Checked : Qt::Unchecked;
} else if (role == Qt::ToolTipRole && index.column() == ColumnEnabled) {
return i18n("Enable/disable this exception");
}
return QVariant();
}
//__________________________________________________________________
QVariant ExceptionModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Horizontal && role == Qt::DisplayRole && section >= 0 && section < nColumns) {
return m_columnTitles[section];
}
// return empty
return QVariant();
}
}

View file

@ -1,60 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// breezeexceptionmodel.h
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#pragma once
#include "breeze.h"
#include "breezelistmodel.h"
#include "breezesettings.h"
namespace Breeze
{
//* qlistview for object counters
class ExceptionModel : public ListModel<InternalSettingsPtr>
{
public:
//* number of columns
enum { nColumns = 3 };
//* column type enumeration
enum ColumnType {
ColumnEnabled,
ColumnType,
ColumnRegExp,
};
//*@name methods reimplemented from base class
//@{
//* return data for a given index
QVariant data(const QModelIndex &index, int role) const override;
//* header data
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
//* number of columns for a given index
int columnCount(const QModelIndex &) const override
{
return nColumns;
}
//@}
protected:
//* sort
void privateSort(int, Qt::SortOrder) override
{
}
private:
//* column titles
static const QString m_columnTitles[nColumns];
};
}

View file

@ -1,50 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// itemmodel.cpp
// -------------------
//
// SPDX-FileCopyrightText: 2009-2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#include "breezeitemmodel.h"
namespace Breeze
{
//_______________________________________________________________
ItemModel::ItemModel(QObject *parent)
: QAbstractItemModel(parent)
{
}
//____________________________________________________________
void ItemModel::sort(int column, Qt::SortOrder order)
{
// store column and order
m_sortColumn = column;
m_sortOrder = order;
// emit signals and call private methods
emit layoutAboutToBeChanged();
privateSort(column, order);
emit layoutChanged();
}
//____________________________________________________________
QModelIndexList ItemModel::indexes(int column, const QModelIndex &parent) const
{
QModelIndexList out;
int rows(rowCount(parent));
for (int row = 0; row < rows; row++) {
QModelIndex index(this->index(row, column, parent));
if (!index.isValid()) {
continue;
}
out.append(index);
out += indexes(column, index);
}
return out;
}
}

View file

@ -1,94 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// itemmodel.h
// -------------------
//
// SPDX-FileCopyrightText: 2009-2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#pragma once
#include <QAbstractItemModel>
namespace Breeze
{
//* Job model. Stores job information for display in lists
class ItemModel : public QAbstractItemModel
{
public:
//* constructor
explicit ItemModel(QObject *parent = nullptr);
//* destructor
virtual ~ItemModel()
{
}
//* return all indexes in model starting from parent [recursive]
QModelIndexList indexes(int column = 0, const QModelIndex &parent = QModelIndex()) const;
//*@name sorting
//@{
//* sort
virtual void sort()
{
sort(sortColumn(), sortOrder());
}
//* sort
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
//* current sorting column
const int &sortColumn() const
{
return m_sortColumn;
}
//* current sort order
const Qt::SortOrder &sortOrder() const
{
return m_sortOrder;
}
//@}
protected:
//* this sort columns without calling the layout changed callbacks
void privateSort()
{
privateSort(m_sortColumn, m_sortOrder);
}
//* private sort, with no signals emitted
virtual void privateSort(int column, Qt::SortOrder order) = 0;
//* used to sort items in list
class SortFTor
{
public:
//* constructor
explicit SortFTor(const int &type, Qt::SortOrder order = Qt::AscendingOrder)
: _type(type)
, _order(order)
{
}
protected:
//* column
int _type;
//* order
Qt::SortOrder _order;
};
private:
//* sorting column
int m_sortColumn = 0;
//* sorting order
Qt::SortOrder m_sortOrder = Qt::AscendingOrder;
};
}

View file

@ -1,373 +0,0 @@
//////////////////////////////////////////////////////////////////////////////
// listmodel.h
// -------------------
//
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
//
// SPDX-License-Identifier: MIT
//////////////////////////////////////////////////////////////////////////////
#pragma once
#include "breezeitemmodel.h"
#include <QList>
#include <QSet>
#include <algorithm>
namespace Breeze
{
//! Job model. Stores job information for display in lists
template<class T>
class ListModel : public ItemModel
{
public:
//! value type
typedef T ValueType;
//! reference
typedef T &Reference;
//! pointer
typedef T *Pointer;
//! value list and iterators
typedef QList<ValueType> List;
typedef QListIterator<ValueType> ListIterator;
typedef QMutableListIterator<ValueType> MutableListIterator;
//! list of vector
// typedef QSet<ValueType> Set;
//! constructor
ListModel(QObject *parent = nullptr)
: ItemModel(parent)
{
}
//! destructor
virtual ~ListModel()
{
}
//!@name methods reimplemented from base class
//@{
//! flags
Qt::ItemFlags flags(const QModelIndex &index) const override
{
if (!index.isValid()) {
return Qt::NoItemFlags;
}
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
//! unique index for given row, column and parent index
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override
{
// check if index is valid
if (!hasIndex(row, column, parent)) {
return QModelIndex();
}
// return invalid index if parent is valid
if (parent.isValid()) {
return QModelIndex();
}
// check against _values
return (row < (int)_values.size()) ? createIndex(row, column) : QModelIndex();
}
//! index of parent
QModelIndex parent(const QModelIndex &) const override
{
return QModelIndex();
}
//! number of rows below given index
int rowCount(const QModelIndex &parent = QModelIndex()) const override
{
return parent.isValid() ? 0 : _values.size();
}
//@}
//!@name selection
//@{
//! clear internal list selected items
virtual void clearSelectedIndexes()
{
_selection.clear();
}
//! store index internal selection state
virtual void setIndexSelected(const QModelIndex &index, bool value)
{
if (value) {
_selection.push_back(get(index));
} else {
_selection.erase(std::remove(_selection.begin(), _selection.end(), get(index)), _selection.end());
}
}
//! get list of internal selected items
virtual QModelIndexList selectedIndexes() const
{
QModelIndexList out;
for (typename List::const_iterator iter = _selection.begin(); iter != _selection.end(); iter++) {
QModelIndex index(ListModel::index(*iter));
if (index.isValid()) {
out.push_back(index);
}
}
return out;
}
//@}
//!@name interface
//@{
//! add value
virtual void add(const ValueType &value)
{
emit layoutAboutToBeChanged();
_add(value);
privateSort();
emit layoutChanged();
}
//! add values
virtual void add(const List &values)
{
// check if not empty
// this avoids sending useless signals
if (values.empty()) {
return;
}
emit layoutAboutToBeChanged();
for (typename List::const_iterator iter = values.begin(); iter != values.end(); iter++) {
_add(*iter);
}
privateSort();
emit layoutChanged();
}
//! insert values
virtual void insert(const QModelIndex &index, const ValueType &value)
{
emit layoutAboutToBeChanged();
_insert(index, value);
emit layoutChanged();
}
//! insert values
virtual void insert(const QModelIndex &index, const List &values)
{
emit layoutAboutToBeChanged();
// need to loop in reverse order so that the "values" ordering is preserved
ListIterator iter(values);
iter.toBack();
while (iter.hasPrevious()) {
_insert(index, iter.previous());
}
emit layoutChanged();
}
//! insert values
virtual void replace(const QModelIndex &index, const ValueType &value)
{
if (!index.isValid()) {
add(value);
} else {
emit layoutAboutToBeChanged();
setIndexSelected(index, false);
_values[index.row()] = value;
setIndexSelected(index, true);
emit layoutChanged();
}
}
//! remove
virtual void remove(const ValueType &value)
{
emit layoutAboutToBeChanged();
_remove(value);
emit layoutChanged();
}
//! remove
virtual void remove(const List &values)
{
// check if not empty
// this avoids sending useless signals
if (values.empty()) {
return;
}
emit layoutAboutToBeChanged();
for (typename List::const_iterator iter = values.begin(); iter != values.end(); iter++) {
_remove(*iter);
}
emit layoutChanged();
}
//! clear
virtual void clear()
{
set(List());
}
//! update values from list
/*!
values that are not found in current are removed
new values are set to the end.
This is slower than the "set" method, but the selection is not cleared in the process
*/
virtual void update(List values)
{
emit layoutAboutToBeChanged();
// store values to be removed
List removed_values;
// update values that are common to both lists
for (typename List::iterator iter = _values.begin(); iter != _values.end(); iter++) {
// see if iterator is in list
typename List::iterator found_iter(std::find(values.begin(), values.end(), *iter));
if (found_iter == values.end()) {
removed_values.push_back(*iter);
} else {
*iter = *found_iter;
values.erase(found_iter);
}
}
// remove values that have not been found in new list
for (typename List::const_iterator iter = removed_values.constBegin(); iter != removed_values.constEnd(); iter++) {
_remove(*iter);
}
// add remaining values
for (typename List::const_iterator iter = values.constBegin(); iter != values.constEnd(); iter++) {
_add(*iter);
}
privateSort();
emit layoutChanged();
}
//! set all values
virtual void set(const List &values)
{
emit layoutAboutToBeChanged();
_values = values;
_selection.clear();
privateSort();
emit layoutChanged();
}
//! return all values
const List &get(void) const
{
return _values;
}
//! return value for given index
virtual ValueType get(const QModelIndex &index) const
{
return (index.isValid() && index.row() < int(_values.size())) ? _values[index.row()] : ValueType();
}
//! return value for given index
virtual ValueType &get(const QModelIndex &index)
{
Q_ASSERT(index.isValid() && index.row() < int(_values.size()));
return _values[index.row()];
}
//! return all values
List get(const QModelIndexList &indexes) const
{
List out;
for (QModelIndexList::const_iterator iter = indexes.begin(); iter != indexes.end(); iter++) {
if (iter->isValid() && iter->row() < int(_values.size())) {
out.push_back(get(*iter));
}
}
return out;
}
//! return index associated to a given value
virtual QModelIndex index(const ValueType &value, int column = 0) const
{
for (int row = 0; row < _values.size(); ++row) {
if (value == _values[row]) {
return index(row, column);
}
}
return QModelIndex();
}
//@}
//! return true if model contains given index
virtual bool contains(const QModelIndex &index) const
{
return index.isValid() && index.row() < _values.size();
}
protected:
//! return all values
List &_get(void)
{
return _values;
}
//! add, without update
virtual void _add(const ValueType &value)
{
typename List::iterator iter = std::find(_values.begin(), _values.end(), value);
if (iter == _values.end()) {
_values.push_back(value);
} else {
*iter = value;
}
}
//! add, without update
virtual void _insert(const QModelIndex &index, const ValueType &value)
{
if (!index.isValid()) {
add(value);
}
int row = 0;
typename List::iterator iter(_values.begin());
for (; iter != _values.end() && row != index.row(); iter++, row++) { }
_values.insert(iter, value);
}
//! remove, without update
virtual void _remove(const ValueType &value)
{
_values.erase(std::remove(_values.begin(), _values.end(), value), _values.end());
_selection.erase(std::remove(_selection.begin(), _selection.end(), value), _selection.end());
}
private:
//! values
List _values;
//! selection
List _selection;
};
}

View file

@ -1,6 +0,0 @@
#include "breezeconfigwidget.h"
#include <KPluginFactory>
K_PLUGIN_CLASS_WITH_JSON(Breeze::ConfigWidget, "kcm_smoddecoration.json")
#include "kcm_breezedecoration.moc"

View file

@ -1,13 +0,0 @@
{
"KPlugin": {
"Description": "Modify the appearance of window decorations",
"Icon": "preferences-system-windows",
"Name": "SMOD Window Decoration",
"ServiceTypes": [
"KCModule"
]
},
"X-KDE-Keywords": "smod,decoration",
"X-KDE-ParentApp": "kcontrol",
"X-KDE-Weight": 60
}

View file

@ -1,311 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>BreezeConfigurationUI</class>
<widget class="QWidget" name="BreezeConfigurationUI">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>436</width>
<height>206</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>General</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_4">
<item row="7" column="1" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QWidget" name="hideWidget" native="true">
<property name="minimumSize">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
<widget class="QCheckBox" name="outlineCloseButton">
<property name="geometry">
<rect>
<x>30</x>
<y>20</y>
<width>202</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Draw a circle around close button</string>
</property>
</widget>
<widget class="QCheckBox" name="drawBackgroundGradient">
<property name="geometry">
<rect>
<x>30</x>
<y>50</y>
<width>206</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Draw titlebar background gradient</string>
</property>
</widget>
<widget class="QComboBox" name="buttonSize">
<property name="geometry">
<rect>
<x>90</x>
<y>80</y>
<width>249</width>
<height>22</height>
</rect>
</property>
<item>
<property name="text">
<string>Tiny</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Button size:">Small</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Button size:">Medium</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Button size:">Large</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Button size:">Very Large</string>
</property>
</item>
</widget>
<widget class="QCheckBox" name="drawBorderOnMaximizedWindows">
<property name="geometry">
<rect>
<x>220</x>
<y>40</y>
<width>383</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Draw border on maximized and tiled windows</string>
</property>
</widget>
</widget>
</item>
</layout>
</item>
<item row="0" column="3">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1">
<widget class="QLabel" name="label_7">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Titlebar size:</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Tweaks</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QCheckBox" name="invertTextColor">
<property name="text">
<string>Invert titlebar text color on maximized windows</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="enableShadow">
<property name="text">
<string>Enable drop shadows</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="titlebarSize">
<property name="minimum">
<number>17</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>21</number>
</property>
</widget>
</item>
<item row="4" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Tit&amp;le alignment:</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>titleAlignment</cstring>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QComboBox" name="titleAlignment">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Left</string>
</property>
</item>
<item>
<property name="text">
<string>Center</string>
</property>
</item>
<item>
<property name="text">
<string>Right</string>
</property>
</item>
<item>
<property name="text">
<string>Center (Full Width)</string>
</property>
</item>
</widget>
</item>
<item row="0" column="0">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Theme</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QListView" name="themeList"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Window-Specific Overrides</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="Breeze::ExceptionListWidget" name="exceptions" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>Breeze::ExceptionListWidget</class>
<extends>QWidget</extends>
<header>config/breezeexceptionlistwidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>tabWidget</tabstop>
<tabstop>titleAlignment</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>

View file

@ -1,252 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>BreezeExceptionDialog</class>
<widget class="QDialog" name="BreezeExceptionDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>362</width>
<height>321</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Window Identification</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>&amp;Matching window property: </string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>exceptionType</cstring>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Regular expression &amp;to match: </string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="buddy">
<cstring>exceptionEditor</cstring>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="detectDialogButton">
<property name="text">
<string>Detect Window Properties…</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QLineEdit" name="exceptionEditor">
<property name="showClearButton" stdset="0">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QComboBox" name="exceptionType">
<item>
<property name="text">
<string>Window Class Name</string>
</property>
</item>
<item>
<property name="text">
<string>Window Title</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Decoration Options</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QCheckBox" name="borderSizeCheckBox">
<property name="text">
<string>Border size:</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="hideTitleBar">
<property name="text">
<string>Hide window title bar</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="borderSizeComboBox">
<property name="enabled">
<bool>false</bool>
</property>
<item>
<property name="text">
<string comment="@item:inlistbox Border size:">No Border</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Border size:">No Side Borders</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Border size:">Tiny</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Border size:">Normal</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Border size:">Large</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Border size:">Very Large</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Border size:">Huge</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Border size:">Very Huge</string>
</property>
</item>
<item>
<property name="text">
<string comment="@item:inlistbox Border size:">Oversized</string>
</property>
</item>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="hideIcon">
<property name="text">
<string>Hide window icon</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QCheckBox" name="hideCaption">
<property name="text">
<string>Hide window caption</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="hideInnerBorder">
<property name="text">
<string>Hide window inner border</string>
</property>
</widget>
</item>
<item row="6" column="0" colspan="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>BreezeExceptionDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>252</x>
<y>342</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>BreezeExceptionDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>320</x>
<y>342</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>borderSizeCheckBox</sender>
<signal>toggled(bool)</signal>
<receiver>borderSizeComboBox</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>125</x>
<y>162</y>
</hint>
<hint type="destinationlabel">
<x>316</x>
<y>163</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View file

@ -1,114 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>BreezeExceptionListWidget</class>
<widget class="QWidget" name="BreezeExceptionListWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>473</width>
<height>182</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item row="0" column="0" rowspan="6">
<widget class="QTreeView" name="exceptionListView">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>100</height>
</size>
</property>
</widget>
</item>
<item row="5" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="moveUpButton">
<property name="text">
<string>Move Up</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="moveDownButton">
<property name="text">
<string>Move Down</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="addButton">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="removeButton">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="editButton">
<property name="text">
<string>Edit</string>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>exceptionListView</tabstop>
<tabstop>moveUpButton</tabstop>
<tabstop>moveDownButton</tabstop>
<tabstop>addButton</tabstop>
<tabstop>removeButton</tabstop>
<tabstop>editButton</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>

View file

@ -1,150 +0,0 @@
#include "frametexture.h"
/*
* Convention:
* 0 - topleft, 1 - top, 2 - topright,
* 3 - left, 4 - center, 5 - right,
* 6 - bottomleft, 7 - bottom, 8 - bottomright
*/
namespace Breeze
{
qreal clip(qreal a)
{
return a < 0 ? 0 : a;
}
FrameTexture::FrameTexture(int l, int r, int t, int b, qreal w, qreal h, QPixmap* p, qreal opacity, bool align, qreal o_x, qreal o_y, qreal src_w, qreal src_h) : normal(p), l(l), r(r), t(t), b(b), alignPixels(align), off_x(o_x), off_y(o_y), width(src_w), height(src_h)
{
if(width == -1) width = normal->width();
if(height == -1) height = normal->height();
for(int i = 0; i < 9; i++)
{
fragments[i].opacity = opacity;
fragments[i].rotation = 0.0;
fragments[i].scaleY = 1.0;
fragments[i].scaleX = 1.0;
}
// TopLeft
fragments[TOPLEFT].sourceLeft = 0;
fragments[TOPLEFT].sourceTop = 0;
fragments[TOPLEFT].width = l;
fragments[TOPLEFT].height = t;
fragments[TOPLEFT].x = (0 + fragments[TOPLEFT].width / 2);
fragments[TOPLEFT].y = (0 + fragments[TOPLEFT].height / 2);
// TopRight
fragments[TOPRIGHT].sourceLeft = width - r;
fragments[TOPRIGHT].sourceTop = 0;
fragments[TOPRIGHT].width = r;
fragments[TOPRIGHT].height = t;
fragments[TOPRIGHT].x = (w - r + fragments[TOPRIGHT].width / 2);
fragments[TOPRIGHT].y = (0 + fragments[TOPRIGHT].height / 2);
// BottomLeft
fragments[BOTTOMLEFT].sourceLeft = 0;
fragments[BOTTOMLEFT].sourceTop = height - b;
fragments[BOTTOMLEFT].width = l;
fragments[BOTTOMLEFT].height = b;
fragments[BOTTOMLEFT].x = (0 + fragments[BOTTOMLEFT].width / 2);
fragments[BOTTOMLEFT].y = (h - b + fragments[BOTTOMLEFT].height / 2);
// BottomRight
fragments[BOTTOMRIGHT].sourceLeft = width - r;
fragments[BOTTOMRIGHT].sourceTop = height - b;
fragments[BOTTOMRIGHT].width = r;
fragments[BOTTOMRIGHT].height = b;
fragments[BOTTOMRIGHT].x = (w - r + fragments[BOTTOMRIGHT].width / 2);
fragments[BOTTOMRIGHT].y = (h - b + fragments[BOTTOMRIGHT].height / 2);
// Top
fragments[TOP].sourceLeft = l;
fragments[TOP].sourceTop = 0;
fragments[TOP].width = width - l - r;
fragments[TOP].height = t;
fragments[TOP].scaleX = clip(w-l-r) / fragments[TOP].width;
fragments[TOP].x = (l + fragments[TOP].width* fragments[TOP].scaleX / 2);
fragments[TOP].y = (0 + fragments[TOP].height*fragments[TOP].scaleY / 2);
// Left
fragments[LEFT].sourceLeft = 0;
fragments[LEFT].sourceTop = t;
fragments[LEFT].width = l;
fragments[LEFT].height = height - t - b;
fragments[LEFT].scaleY = clip(h-t-b) / fragments[LEFT].height;
fragments[LEFT].x = (0 + fragments[LEFT].width* fragments[LEFT].scaleX / 2);
fragments[LEFT].y = (t + fragments[LEFT].height*fragments[LEFT].scaleY / 2);
// Right
fragments[RIGHT].sourceLeft = width - r;
fragments[RIGHT].sourceTop = t;
fragments[RIGHT].width = r;
fragments[RIGHT].height = height - t - b;
fragments[RIGHT].scaleY = clip(h-t-b) / fragments[RIGHT].height;
fragments[RIGHT].x = (w-r + fragments[RIGHT].width* fragments[RIGHT].scaleX / 2);
fragments[RIGHT].y = (t + fragments[RIGHT].height*fragments[RIGHT].scaleY / 2);
// Center
fragments[CENTER].sourceLeft = l;
fragments[CENTER].sourceTop = t;
fragments[CENTER].width = width - l - r;
fragments[CENTER].height = height - t - b;
fragments[CENTER].scaleX = clip(w-l-r) / fragments[CENTER].width;
fragments[CENTER].scaleY = clip(h-t-b) / fragments[CENTER].height;
fragments[CENTER].x = (l + fragments[CENTER].width* fragments[CENTER].scaleX / 2);
fragments[CENTER].y = (t + fragments[CENTER].height*fragments[CENTER].scaleY / 2);
// Bottom
fragments[BOTTOM].sourceLeft = l;
fragments[BOTTOM].sourceTop = height - b;
fragments[BOTTOM].width = width - l - r;
fragments[BOTTOM].height = b;
fragments[BOTTOM].scaleX = clip(w-l-r) / fragments[BOTTOM].width;
fragments[BOTTOM].x = (l + fragments[BOTTOM].width* fragments[BOTTOM].scaleX / 2);
fragments[BOTTOM].y = (h-b + fragments[BOTTOM].height*fragments[BOTTOM].scaleY / 2);
for(int i = 0; i < 9; i++)
{
fragments[i].sourceLeft += off_x;
fragments[i].sourceTop += off_y;
if(alignPixels)
{
fragments[i].x = floor(fragments[i].x);
fragments[i].y = floor(fragments[i].y);
}
}
}
void FrameTexture::translate(int x, int y)
{
for(int i = 0; i < 9; i++)
{
fragments[i].x += x;
fragments[i].y += y;
}
}
void FrameTexture::setGeometry(qreal w, qreal h)
{
fragments[TOPRIGHT].x = (w - r + fragments[TOPRIGHT].width / 2);
fragments[BOTTOMLEFT].y = (h - b + fragments[BOTTOMLEFT].height / 2);
fragments[BOTTOMRIGHT].x = (w - r + fragments[BOTTOMRIGHT].width / 2);
fragments[BOTTOMRIGHT].y = (h - b + fragments[BOTTOMRIGHT].height / 2);
fragments[TOP].scaleX = clip(w-l-r) / fragments[TOP].width;
fragments[LEFT].scaleY = clip(h-t-b) / fragments[LEFT].height;
fragments[RIGHT].scaleY = clip(h-t-b) / fragments[RIGHT].height;
fragments[RIGHT].x = (w-r + fragments[RIGHT].width*fragments[RIGHT].scaleX / 2);
fragments[CENTER].scaleX = clip(w-l-r) / fragments[CENTER].width;
fragments[CENTER].scaleY = clip(h-t-b) / fragments[CENTER].height;
fragments[BOTTOM].scaleX = clip(w-l-r) / fragments[BOTTOM].width;
fragments[BOTTOM].y = (h-b + fragments[BOTTOM].height*fragments[BOTTOM].scaleY / 2);
}
void FrameTexture::setOpacity(qreal opacity)
{
for(int i = 0; i < 9; i++)
fragments[i].opacity = opacity;
}
void FrameTexture::render(QPainter *painter)
{
painter->drawPixmapFragments(fragments, 9, *normal);
}
}

View file

@ -1,44 +0,0 @@
#pragma once
#include <QPixmap>
#include <QPainter>
namespace Breeze
{
class FrameTexture
{
public:
/*
* l - left margin
* r - right margin
* t - top margin
* b - bottom margin - these values are 1:1 with SIZINGMARGINS in msstyles
* w - target width - The final resulting width and height of the texture
* h - target height
* p - source pixmap
* alignPixels - cast float positions into integers
* (off_x, off_y, src_w, src_h) form a rectangle that crops the source pixmap which gets rid of everything else we don't want to sample when 9-slicing'
*/
FrameTexture(int l, int r, int t, int b, qreal w, qreal h, QPixmap* p, qreal opacity = 1.0, bool alignPixels = false, qreal off_x = 0, qreal off_y = 0, qreal src_w = -1, qreal src_h = -1);
void setGeometry(qreal w, qreal h); // Update final size of the rendered texture
void setOpacity(qreal opacity);
void render(QPainter *painter);
void translate(int x, int y); // Moves the texture relative to the paint coordinates
enum fragments { TOPLEFT = 0, TOP, TOPRIGHT, LEFT, CENTER, RIGHT, BOTTOMLEFT, BOTTOM, BOTTOMRIGHT };
/*
* Convention:
* 0 - topleft, 1 - top, 2 - topright,
* 3 - left, 4 - center, 5 - right,
* 6 - bottomleft, 7 - bottom, 8 - bottomright
*/
private:
QPainter::PixmapFragment fragments[9];
QPixmap *normal;
qreal off_x, off_y;
qreal width, height;
int l,r,t,b;
bool alignPixels;
};
}

View file

@ -1,204 +0,0 @@
#include "sizingmargins.h"
namespace Breeze {
SizingMargins::SizingMargins() {}
SizingMargins::~SizingMargins() {}
void SizingMargins::loadSizingMargins()
{
QSettings settings(":/smod/decoration/sizingmargins", QSettings::IniFormat);
// GlowSizing
m_glowSizing.margin_left = settings.value("Glow/margin_left", 24).toInt();
m_glowSizing.margin_right = settings.value("Glow/margin_right", 25).toInt();
m_glowSizing.margin_top = settings.value("Glow/margin_top", 17).toInt();
m_glowSizing.margin_bottom = settings.value("Glow/margin_bottom", 18).toInt();
m_glowSizing.active_opacity = settings.value("Glow/active_opacity", 255).toInt() / 255.0;
m_glowSizing.inactive_opacity = settings.value("Glow/inactive_opacity", 179).toInt() / 255.0;
// ShadowSizing
m_shadowSizing.margin_left = settings.value("Shadow/margin_left", 30).toInt();
m_shadowSizing.margin_top = settings.value("Shadow/margin_top", 31).toInt();
m_shadowSizing.margin_right = settings.value("Shadow/margin_right", 29).toInt();
m_shadowSizing.margin_bottom = settings.value("Shadow/margin_bottom", 37).toInt();
m_shadowSizing.padding_left = settings.value("Shadow/padding_left", 14).toInt();
m_shadowSizing.padding_top = settings.value("Shadow/padding_top", 14).toInt();
m_shadowSizing.padding_right = settings.value("Shadow/padding_right", 20).toInt();
m_shadowSizing.padding_bottom = settings.value("Shadow/padding_bottom", 20).toInt();
// CommonSizing
m_commonSizing.height = settings.value("Common/height", 21).toInt();
m_commonSizing.titlebar_padding_normal = settings.value("Common/titlebar_padding_normal", 8).toInt();
m_commonSizing.titlebar_padding_maximized = settings.value("Common/titlebar_padding_maximized", 0).toInt();
m_commonSizing.corner_radius = settings.value("Common/corner_radius", 6).toInt();
m_commonSizing.caption_button_spacing = settings.value("Common/caption_button_spacing", 0).toInt();
m_commonSizing.alternative = settings.value("Common/alternative", false).toBool();
m_commonSizing.enable_glow = settings.value("Common/enable_glow", false).toBool();
m_commonSizing.caption_button_align_vcenter = settings.value("Common/caption_button_align_vcenter", false).toBool();
// CloseSizing
m_closeSizing.width = settings.value("Close/width", 49).toInt();
m_closeSizing.margin_left = settings.value("Close/margin_left", 20).toInt();
m_closeSizing.margin_top = settings.value("Close/margin_top", 6).toInt();
m_closeSizing.margin_right = settings.value("Close/margin_right", 20).toInt();
m_closeSizing.margin_bottom = settings.value("Close/margin_bottom", 8).toInt();
m_closeSizing.content_left = settings.value("Close/content_left", 1).toInt() - 1;
m_closeSizing.content_right = settings.value("Close/content_right", 2).toInt() - 1;
m_closeSizing.content_top = settings.value("Close/content_top", 2).toInt() - 1;
m_closeSizing.content_bottom = settings.value("Close/content_bottom", 4).toInt() - 1;
// CloseLoneSizing
m_closeLoneSizing.width = settings.value("CloseLone/width", 49).toInt();
m_closeLoneSizing.margin_left = settings.value("CloseLone/margin_left", 20).toInt();
m_closeLoneSizing.margin_top = settings.value("CloseLone/margin_top", 6).toInt();
m_closeLoneSizing.margin_right = settings.value("CloseLone/margin_right", 20).toInt();
m_closeLoneSizing.margin_bottom = settings.value("CloseLone/margin_bottom", 8).toInt();
m_closeLoneSizing.content_left = settings.value("CloseLone/content_left", 2).toInt() - 1;
m_closeLoneSizing.content_right = settings.value("CloseLone/content_right", 1).toInt() - 1;
m_closeLoneSizing.content_top = settings.value("CloseLone/content_top", 2).toInt() - 1;
m_closeLoneSizing.content_bottom = settings.value("CloseLone/content_bottom", 4).toInt() - 1;
// MaximizeSizing
m_maximizeSizing.width = settings.value("Maximize/width", 27).toInt();
m_maximizeSizing.margin_left = settings.value("Maximize/margin_left", 12).toInt();
m_maximizeSizing.margin_top = settings.value("Maximize/margin_top", 6).toInt();
m_maximizeSizing.margin_right = settings.value("Maximize/margin_right", 12).toInt();
m_maximizeSizing.margin_bottom = settings.value("Maximize/margin_bottom", 8).toInt();
m_maximizeSizing.content_left = settings.value("Maximize/content_left", 2).toInt() - 1;
m_maximizeSizing.content_right = settings.value("Maximize/content_right", 3).toInt() - 1;
m_maximizeSizing.content_top = settings.value("Maximize/content_top", 2).toInt() - 1;
m_maximizeSizing.content_bottom = settings.value("Maximize/content_bottom", 4).toInt() - 1;
// MinimizeSizing
m_minimizeSizing.width = settings.value("Minimize/width", 29).toInt();
m_minimizeSizing.margin_left = settings.value("Minimize/margin_left", 12).toInt();
m_minimizeSizing.margin_top = settings.value("Minimize/margin_top", 6).toInt();
m_minimizeSizing.margin_right = settings.value("Minimize/margin_right", 12).toInt();
m_minimizeSizing.margin_bottom = settings.value("Minimize/margin_bottom", 8).toInt();
m_minimizeSizing.content_left = settings.value("Minimize/content_left", 3).toInt() - 1;
m_minimizeSizing.content_right = settings.value("Minimize/content_right", 1).toInt() - 1;
m_minimizeSizing.content_top = settings.value("Minimize/content_top", 2).toInt() - 1;
m_minimizeSizing.content_bottom = settings.value("Minimize/content_bottom", 4).toInt() - 1;
m_frameLeftSizing.width = settings.value("FrameLeft/width", 8).toInt();
m_frameLeftSizing.inset = settings.value("FrameLeft/inset", 2).toInt();
m_frameRightSizing.width = settings.value("FrameRight/width", 8).toInt();
m_frameRightSizing.inset = settings.value("FrameRight/inset", 2).toInt();
m_frameBottomSizing.height = settings.value("FrameBottom/height", 8).toInt();
m_topLeftCorner.width = settings.value("TopLeft/width", 9).toInt();
m_topLeftCorner.margin_left = settings.value("TopLeft/margin_left", 6).toInt();
m_topLeftCorner.margin_right = settings.value("TopLeft/margin_right", 2).toInt();
m_topLeftCorner.margin_top = settings.value("TopLeft/margin_top", 6).toInt();
m_topLeftCorner.margin_bottom = settings.value("TopLeft/margin_bottom", 2).toInt();
m_topRightCorner.width = settings.value("TopRight/width", 9).toInt();
m_topRightCorner.margin_left = settings.value("TopRight/margin_left", 2).toInt();
m_topRightCorner.margin_right = settings.value("TopRight/margin_right", 6).toInt();
m_topRightCorner.margin_top = settings.value("TopRight/margin_top", 6).toInt();
m_topRightCorner.margin_bottom = settings.value("TopRight/margin_bottom", 2).toInt();
m_bottomLeftCorner.width = settings.value("BottomLeft/width", 9).toInt();
m_bottomLeftCorner.margin_left = settings.value("BottomLeft/margin_left", 6).toInt();
m_bottomLeftCorner.margin_right = settings.value("BottomLeft/margin_right", 2).toInt();
m_bottomLeftCorner.margin_top = settings.value("BottomLeft/margin_top", 2).toInt();
m_bottomLeftCorner.margin_bottom = settings.value("BottomLeft/margin_bottom", 6).toInt();
m_bottomRightCorner.width = settings.value("BottomRight/width", 9).toInt();
m_bottomRightCorner.margin_left = settings.value("BottomRight/margin_left", 2).toInt();
m_bottomRightCorner.margin_right = settings.value("BottomRight/margin_right", 6).toInt();
m_bottomRightCorner.margin_top = settings.value("BottomRight/margin_top", 2).toInt();
m_bottomRightCorner.margin_bottom = settings.value("BottomRight/margin_bottom", 6).toInt();
m_leftSide.margin_left = settings.value("Left/margin_left", 2).toInt();
m_leftSide.margin_right = settings.value("Left/margin_right", 6).toInt();
m_rightSide.margin_left = settings.value("Right/margin_left", 6).toInt();
m_rightSide.margin_right = settings.value("Right/margin_right", 2).toInt();
m_topSide.margin_top = settings.value("Top/margin_top", 6).toInt();
m_topSide.margin_bottom = settings.value("Top/margin_bottom", 2).toInt();
m_bottomSide.margin_top = settings.value("Bottom/margin_top", 2).toInt();
m_bottomSide.margin_bottom = settings.value("Bottom/margin_bottom", 6).toInt();
m_loaded = true;
}
bool SizingMargins::loaded() const
{
return m_loaded;
}
GlowSizing SizingMargins::glowSizing() const
{
return m_glowSizing;
}
ShadowSizing SizingMargins::shadowSizing() const
{
return m_shadowSizing;
}
CommonSizing SizingMargins::commonSizing() const
{
return m_commonSizing;
}
ButtonSizingMargins SizingMargins::maximizeSizing() const
{
return m_maximizeSizing;
}
ButtonSizingMargins SizingMargins::minimizeSizing() const
{
return m_minimizeSizing;
}
ButtonSizingMargins SizingMargins::closeSizing() const
{
return m_closeSizing;
}
ButtonSizingMargins SizingMargins::closeLoneSizing() const
{
return m_closeLoneSizing;
}
BorderFrame SizingMargins::frameLeftSizing() const
{
return m_frameLeftSizing;
}
BorderFrame SizingMargins::frameRightSizing() const
{
return m_frameRightSizing;
}
BorderFrame SizingMargins::frameBottomSizing() const
{
return m_frameBottomSizing;
}
FrameMargins SizingMargins::topLeftCorner() const
{
return m_topLeftCorner;
}
FrameMargins SizingMargins::topRightCorner() const
{
return m_topRightCorner;
}
FrameMargins SizingMargins::bottomLeftCorner() const
{
return m_bottomLeftCorner;
}
FrameMargins SizingMargins::bottomRightCorner() const
{
return m_bottomRightCorner;
}
FrameMargins SizingMargins::leftSide() const
{
return m_leftSide;
}
FrameMargins SizingMargins::rightSide() const
{
return m_rightSide;
}
FrameMargins SizingMargins::topSide() const
{
return m_topSide;
}
FrameMargins SizingMargins::bottomSide() const
{
return m_bottomSide;
}
}

View file

@ -1,126 +0,0 @@
#pragma once
#include <QFile>
#include <QString>
#include <QSettings>
namespace Breeze
{
struct ButtonSizingMargins
{
int width;
int margin_left; // Used to render the caption buttons properly
int margin_top;
int margin_right;
int margin_bottom;
int content_left; // Used for glyph positioning and alignment
int content_top;
int content_right;
int content_bottom;
};
struct CommonSizing
{
int height; // Titlebar height
int titlebar_padding_normal; // Space between the caption button and the inner border of the titlebar
int titlebar_padding_maximized; // The same as above but for the maximized state
int corner_radius;
bool alternative;
bool enable_glow;
int caption_button_spacing;
bool caption_button_align_vcenter;
};
struct ShadowSizing
{
int margin_left;
int margin_top;
int margin_right;
int margin_bottom;
int padding_left;
int padding_top;
int padding_right;
int padding_bottom;
};
struct GlowSizing
{
int margin_left;
int margin_right;
int margin_top;
int margin_bottom;
float active_opacity;
float inactive_opacity;
};
struct FrameMargins
{
int width = 0;
int margin_left = 0;
int margin_right = 0;
int margin_top = 0;
int margin_bottom = 0;
};
struct BorderFrame
{
int width = 0;
int height = 0;
int inset = 0;
};
class SizingMargins
{
public:
SizingMargins();
~SizingMargins();
void loadSizingMargins();
GlowSizing glowSizing() const;
ShadowSizing shadowSizing() const;
CommonSizing commonSizing() const;
ButtonSizingMargins maximizeSizing() const;
ButtonSizingMargins minimizeSizing() const;
ButtonSizingMargins closeSizing() const;
ButtonSizingMargins closeLoneSizing() const;
BorderFrame frameLeftSizing() const;
BorderFrame frameRightSizing() const;
BorderFrame frameBottomSizing() const;
FrameMargins topLeftCorner() const;
FrameMargins topRightCorner() const;
FrameMargins bottomLeftCorner() const;
FrameMargins bottomRightCorner() const;
FrameMargins leftSide() const;
FrameMargins rightSide() const;
FrameMargins topSide() const;
FrameMargins bottomSide() const;
bool loaded() const;
private:
bool m_loaded = false;
GlowSizing m_glowSizing;
ShadowSizing m_shadowSizing;
CommonSizing m_commonSizing;
ButtonSizingMargins m_maximizeSizing;
ButtonSizingMargins m_minimizeSizing;
ButtonSizingMargins m_closeSizing;
ButtonSizingMargins m_closeLoneSizing;
BorderFrame m_frameLeftSizing;
BorderFrame m_frameRightSizing;
BorderFrame m_frameBottomSizing;
FrameMargins m_topLeftCorner;
FrameMargins m_topRightCorner;
FrameMargins m_bottomLeftCorner;
FrameMargins m_bottomRightCorner;
FrameMargins m_leftSide;
FrameMargins m_rightSide;
FrameMargins m_topSide;
FrameMargins m_bottomSide;
};
}

View file

@ -1,12 +0,0 @@
{
"KPlugin": {
"Description": "Window decoration using the Breeze visual style for the Plasma Desktop",
"EnabledByDefault": true,
"Name": "SMOD"
},
"X-KDE-ConfigModule": "kcm_smoddecoration",
"org.kde.kdecoration3": {
"blur": true,
"recommendedBorderSize": "Normal"
}
}

View file

@ -1,53 +0,0 @@
#pragma once
/*
* Generic reusable code for SMOD
*/
#include <QDir>
#include <QResource>
#include <QString>
#include <QFileInfo>
namespace SMOD
{
const QString SMOD_EXTENSION = ".smod.rcc";
const QString SYSTEM_PATH = "/usr/share/smod/decorations/";
const QString LOCAL_PATH = QDir::homePath() + "/.local/share/smod/decorations/";
static QString currentlyRegisteredResource = "";
static QString currentlyRegisteredPath = SYSTEM_PATH + QStringLiteral("Aero") + SMOD_EXTENSION;
inline void registerResource(const QString &name)
{
if(currentlyRegisteredResource != "")
{
QString path = LOCAL_PATH + currentlyRegisteredResource + SMOD_EXTENSION;
if(!QFileInfo::exists(path))
{
path = SYSTEM_PATH + currentlyRegisteredResource + SMOD_EXTENSION;
}
if(QFileInfo::exists(path))
{
printf("smod: Unregistering resource %s\n", path.toStdString().c_str());
QResource::unregisterResource(path);
}
}
QString path = LOCAL_PATH + name + SMOD_EXTENSION;
printf("smod: Trying to register resource %s\n", path.toStdString().c_str());
if(!QFileInfo::exists(path))
{
path = SYSTEM_PATH + name + SMOD_EXTENSION;
printf("smod: File not found in local directory, fallback to system directory %s\n", path.toStdString().c_str());
if(!QFileInfo::exists(path))
{
path = SYSTEM_PATH + QStringLiteral("Aero") + SMOD_EXTENSION;
printf("smod: File not found in system directory, fallback to default theme %s\n", path.toStdString().c_str());
}
}
printf("smod: Registering resource %s\n", path.toStdString().c_str());
QResource::registerResource(path);
currentlyRegisteredResource = name;
currentlyRegisteredPath = path;
}
}

View file

@ -1,403 +0,0 @@
#include "../breezebutton.h"
#include "../frametexture.h"
#include "../sizingmargins.h"
//#include "../breezedecoration.h"
#include <QPainter>
#include <KIconLoader>
namespace Breeze
{
using KDecoration3::DecorationButtonType;
static QImage hoverImage(const QImage &image, const QImage &hoverImage, qreal hoverProgress)
{
if (hoverProgress <= 0.5 / 256)
{
return image;
}
if (hoverProgress >= 1.0 - 0.5 / 256)
{
return hoverImage;
}
QImage result = image;
QImage over = hoverImage;
QColor alpha = Qt::black;
alpha.setAlphaF(hoverProgress);
QPainter p;
p.begin(&over);
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
p.fillRect(image.rect(), alpha);
p.end();
p.begin(&result);
p.setCompositionMode(QPainter::CompositionMode_DestinationOut);
p.fillRect(image.rect(), alpha);
p.setCompositionMode(QPainter::CompositionMode_Plus);
p.drawImage(0, 0, over);
p.end();
return result;
}
void Button::smodPaint(QPainter *painter, const QRectF &repaintRegion)
{
Q_UNUSED(repaintRegion)
if (!decoration()) {
return;
}
painter->save();
auto deco = qobject_cast<Decoration *>(decoration());
int titlebarHeight = deco->titlebarHeight();
// translate from offset
if (m_flag == FlagFirstInList)
{
painter->translate(m_offset);
}
else
{
painter->translate(0, m_offset.y());
}
if (!m_iconSize.isValid() || isStandAlone())
{
m_iconSize = geometry().size().toSize();
}
// menu button
if (type() == DecorationButtonType::Menu)
{
const auto c = decoration()->window();
QRectF iconRect(geometry().topLeft(), m_iconSize);
iconRect.translate(0, (titlebarHeight - m_iconSize.height())/2);
c->icon().paint(painter, iconRect.toRect());
}
else if (type() == DecorationButtonType::Close || type() == DecorationButtonType::Maximize || type() == DecorationButtonType::Minimize)
{
QRectF g = geometry();
qreal w = g.width();
qreal h = g.height();
int l = 0;
int t = 0;
int r = 0;
int b = 0;
const auto c = decoration()->window();
bool isSingleClose = !(c->isMinimizeable() || c->isMaximizeable());
painter->translate(g.topLeft());
if(c->isMaximized()) painter->translate(QPoint(-2, 0));
auto d = qobject_cast<Decoration *>(decoration());
auto margins = d->sizingMargins();
ButtonSizingMargins buttonMargins;
QPixmap normal, hover, active, glyph, glyphHover, glyphActive;
QPoint glyphOffset;
QString dpiScale = "";
if(titlebarHeight >= 22 && titlebarHeight < 25) dpiScale = "@1.25x";
else if(titlebarHeight >= 25 && titlebarHeight < 27) dpiScale = "@1.5x";
else if(titlebarHeight >= 27) dpiScale = "@2x";
int leftoverwidth = 0;
int leftoverheight = 0;
switch (type())
{
case DecorationButtonType::Minimize:
buttonMargins = margins.minimizeSizing();
if (c->isActive())
{
glyph = QPixmap(":/smod/decoration/minimize-glyph" + dpiScale);
glyphHover = QPixmap(":/smod/decoration/minimize-hover-glyph" + dpiScale);
glyphActive = QPixmap(":/smod/decoration/minimize-active-glyph" + dpiScale);
normal = QPixmap(":/smod/decoration/minimize");
hover = QPixmap(":/smod/decoration/minimize-hover");
active = QPixmap(":/smod/decoration/minimize-active");
}
else
{
glyph = QPixmap(":/smod/decoration/minimize-glyph" + dpiScale);
glyphHover = QPixmap(":/smod/decoration/minimize-hover-glyph" + dpiScale);
glyphActive = QPixmap(":/smod/decoration/minimize-active-glyph" + dpiScale);
normal = QPixmap(":/smod/decoration/minimize-unfocus");
hover = QPixmap(":/smod/decoration/minimize-unfocus-hover");
active = QPixmap(":/smod/decoration/minimize-unfocus-active");
}
if (!isEnabled())
{
glyph = QPixmap(":/smod/decoration/minimize-inactive-glyph" + dpiScale);
}
l = buttonMargins.margin_left;
t = buttonMargins.margin_top;
r = buttonMargins.margin_right;
b = buttonMargins.margin_bottom;
leftoverwidth = w - buttonMargins.content_left - buttonMargins.content_right;
if(leftoverwidth < 0) leftoverwidth = 0;
leftoverheight = (titlebarHeight-1) - buttonMargins.content_top - buttonMargins.content_bottom;
if(leftoverheight < 0) leftoverheight = 0;
glyphOffset = QPoint(
buttonMargins.content_left + ceil((leftoverwidth - glyph.width()) / 2.0),
buttonMargins.content_top + ceil((leftoverheight - glyph.height()) / 2.0)
);
if(titlebarHeight == 18 || titlebarHeight == 17) l--;
break;
case DecorationButtonType::Maximize:
buttonMargins = margins.maximizeSizing();
leftoverwidth = w - buttonMargins.content_left - buttonMargins.content_right;
if(leftoverwidth < 0) leftoverwidth = 0;
leftoverheight = (titlebarHeight-1) - buttonMargins.content_top - buttonMargins.content_bottom;
if(leftoverheight < 0) leftoverheight = 0;
if (d && d->isMaximized())
{
if (c->isActive())
{
glyph = QPixmap(":/smod/decoration/restore-glyph" + dpiScale);
glyphHover = QPixmap(":/smod/decoration/restore-hover-glyph" + dpiScale);
glyphActive = QPixmap(":/smod/decoration/restore-active-glyph" + dpiScale);
normal = QPixmap(":/smod/decoration/maximize");
hover = QPixmap(":/smod/decoration/maximize-hover");
active = QPixmap(":/smod/decoration/maximize-active");
}
else
{
glyph = QPixmap(":/smod/decoration/restore-glyph" + dpiScale);
glyphHover = QPixmap(":/smod/decoration/restore-hover-glyph" + dpiScale);
glyphActive = QPixmap(":/smod/decoration/restore-active-glyph" + dpiScale);
normal = QPixmap(":/smod/decoration/maximize-unfocus");
hover = QPixmap(":/smod/decoration/maximize-unfocus-hover");
active = QPixmap(":/smod/decoration/maximize-unfocus-active");
}
glyphOffset = QPoint(
buttonMargins.content_left + ceil((leftoverwidth - glyph.width()) / 2.0),
buttonMargins.content_top + ceil((leftoverheight - glyph.height()) / 2.0)
);
}
else
{
if (c->isActive())
{
glyph = QPixmap(":/smod/decoration/maximize-glyph" + dpiScale);
glyphHover = QPixmap(":/smod/decoration/maximize-hover-glyph" + dpiScale);
glyphActive = QPixmap(":/smod/decoration/maximize-active-glyph" + dpiScale);
normal = QPixmap(":/smod/decoration/maximize");
hover = QPixmap(":/smod/decoration/maximize-hover");
active = QPixmap(":/smod/decoration/maximize-active");
}
else
{
glyph = QPixmap(":/smod/decoration/maximize-glyph" + dpiScale);
glyphHover = QPixmap(":/smod/decoration/maximize-hover-glyph" + dpiScale);
glyphActive = QPixmap(":/smod/decoration/maximize-active-glyph" + dpiScale);
normal = QPixmap(":/smod/decoration/maximize-unfocus");
hover = QPixmap(":/smod/decoration/maximize-unfocus-hover");
active = QPixmap(":/smod/decoration/maximize-unfocus-active");
}
glyphOffset = QPoint(
buttonMargins.content_left + ceil((leftoverwidth - glyph.width()) / 2.0),
buttonMargins.content_top + ceil((leftoverheight - glyph.height()) / 2.0)
);
}
if (!isEnabled())
{
glyph = QPixmap(":/smod/decoration/maximize-inactive-glyph" + dpiScale);
}
l = buttonMargins.margin_left;
t = buttonMargins.margin_top;
r = buttonMargins.margin_right;
b = buttonMargins.margin_bottom;
if(titlebarHeight == 18) l--;
if(titlebarHeight == 17) l -= 2;
break;
case DecorationButtonType::Close:
buttonMargins = isSingleClose ? margins.closeLoneSizing() : margins.closeSizing();
if (c->isActive())
{
glyph = QPixmap(":/smod/decoration/close-glyph" + dpiScale);
glyphHover = QPixmap(":/smod/decoration/close-hover-glyph" + dpiScale);
glyphActive = QPixmap(":/smod/decoration/close-active-glyph" + dpiScale);
if(isSingleClose)
{
normal = QPixmap(":/smod/decoration/close-single");
hover = QPixmap(":/smod/decoration/close-single-hover");
active = QPixmap(":/smod/decoration/close-single-active");
}
else
{
normal = QPixmap(":/smod/decoration/close");
hover = QPixmap(":/smod/decoration/close-hover");
active = QPixmap(":/smod/decoration/close-active");
}
}
else
{
glyph = QPixmap(":/smod/decoration/close-glyph" + dpiScale);
glyphHover = QPixmap(":/smod/decoration/close-hover-glyph" + dpiScale);
glyphActive = QPixmap(":/smod/decoration/close-active-glyph" + dpiScale);
if(isSingleClose)
{
normal = QPixmap(":/smod/decoration/close-single-unfocus");
hover = QPixmap(":/smod/decoration/close-single-unfocus-hover");
active = QPixmap(":/smod/decoration/close-single-unfocus-active");
}
else
{
normal = QPixmap(":/smod/decoration/close-unfocus");
hover = QPixmap(":/smod/decoration/close-unfocus-hover");
active = QPixmap(":/smod/decoration/close-unfocus-active");
}
}
if (!isEnabled())
{
glyph = QPixmap(":/smod/decoration/close-inactive-glyph" + dpiScale);
}
leftoverwidth = w - buttonMargins.content_left - buttonMargins.content_right;
if(leftoverwidth < 0) leftoverwidth = 0;
leftoverheight = (titlebarHeight-1) - buttonMargins.content_top - buttonMargins.content_bottom;
if(leftoverheight < 0) leftoverheight = 0;
glyphOffset = QPoint(
buttonMargins.content_left + ceil((leftoverwidth - glyph.width()) / 2.0),
buttonMargins.content_top + ceil((leftoverheight - glyph.height()) / 2.0)
);
l = buttonMargins.margin_left;
t = buttonMargins.margin_top;
r = buttonMargins.margin_right;
b = buttonMargins.margin_bottom;
break;
default:
break;
}
QImage image, hImage, aImage;
image = normal.toImage();
hImage = hover.toImage();
aImage = active.toImage();
FrameTexture btn(l, r, t, b, w, h, &normal);
painter->setRenderHint(QPainter::Antialiasing, true);
painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
if (!isPressed())
{
image = hoverImage(image, hImage, m_hoverProgress);
normal.convertFromImage(image);
btn.render(painter);
painter->drawPixmap(glyphOffset.x(), glyphOffset.y(), glyph.width(), glyph.height(), isHovered() ? glyphHover : glyph);
}
else
{
normal.convertFromImage(aImage);
btn.render(painter);
painter->drawPixmap(glyphOffset.x(), glyphOffset.y(), glyph.width(), glyph.height(), glyphActive);
}
}
else
{
drawIcon(painter);
}
painter->restore();
}
void Button::hoverEnterEvent(QHoverEvent *event)
{
KDecoration3::DecorationButton::hoverEnterEvent(event);
if (isHovered())
{
Q_EMIT buttonHoverStatus(type(), true, geometry().topLeft().toPoint());
startHoverAnimation(1.0);
}
}
void Button::hoverLeaveEvent(QHoverEvent *event)
{
KDecoration3::DecorationButton::hoverLeaveEvent(event);
if (!isHovered())
{
Q_EMIT buttonHoverStatus(type(), false, geometry().topLeft().toPoint());
startHoverAnimation(0.0);
}
}
qreal Button::hoverProgress() const
{
return m_hoverProgress;
}
void Button::setHoverProgress(qreal hoverProgress)
{
if (m_hoverProgress != hoverProgress)
{
m_hoverProgress = hoverProgress;
if (qobject_cast<Decoration *>(decoration()))
{
update(geometry().adjusted(-32, -32, 32, 32));
}
}
}
void Button::startHoverAnimation(qreal endValue)
{
QPropertyAnimation *hoverAnimation = m_hoverAnimation.data();
if (hoverAnimation)
{
if (hoverAnimation->endValue() == endValue)
{
return;
}
hoverAnimation->stop();
} else if (m_hoverProgress != endValue)
{
hoverAnimation = new QPropertyAnimation(this, "hoverProgress");
m_hoverAnimation = hoverAnimation;
} else {
return;
}
hoverAnimation->setEasingCurve(QEasingCurve::OutQuad);
hoverAnimation->setStartValue(m_hoverProgress);
hoverAnimation->setEndValue(endValue);
hoverAnimation->setDuration(1 + qRound(200 * qAbs(m_hoverProgress - endValue)));
hoverAnimation->start();
}
}

View file

@ -1,432 +0,0 @@
#include "../breezedecoration.h"
#include "../breezebutton.h"
#include "../frametexture.h"
#include <QLabel>
#include <QPainter>
#include <QPainterPath>
#include <QString>
#include <QPixmapCache>
#include <QRegularExpression>
#include <KDecoration3/DecorationButtonGroup>
namespace Breeze
{
static int g_sDecoCount = 0;
static std::shared_ptr<KDecoration3::DecorationShadow> g_smod_shadow, g_smod_shadow_unfocus;
Decoration::Decoration(QObject *parent, const QVariantList &args)
: KDecoration3::Decoration(parent, args)
, m_animation(new QVariantAnimation(this))
, m_shadowAnimation(new QVariantAnimation(this))
{
g_sDecoCount++;
}
Decoration::~Decoration()
{
g_sDecoCount--;
if (g_sDecoCount == 0) {
// last deco destroyed, clean up shadow
g_smod_shadow.reset();
g_smod_shadow_unfocus.reset();
}
}
int Decoration::decorationCount()
{
return g_sDecoCount;
}
void Decoration::updateShadow()
{
if(!internalSettings()->enableShadow())
{
setShadow(std::shared_ptr<KDecoration3::DecorationShadow>(nullptr));
return;
}
if (window()->isActive())
{
g_smod_shadow = g_smod_shadow ? g_smod_shadow : smodCreateShadow(true);
setShadow(g_smod_shadow);
}
else
{
g_smod_shadow_unfocus = g_smod_shadow_unfocus ? g_smod_shadow_unfocus : smodCreateShadow(false);
setShadow(g_smod_shadow_unfocus);
}
}
std::shared_ptr<KDecoration3::DecorationShadow> Decoration::smodCreateShadow(bool active)
{
QImage shadowTexture = QImage(active ? ":/smod/decoration/shadow" : ":/smod/decoration/shadow-unfocus");
auto margins = sizingMargins().shadowSizing();
QMargins texMargins(margins.margin_left, margins.margin_top, margins.margin_right, margins.margin_bottom);
QMargins padding(margins.padding_left, margins.padding_top, margins.padding_right, margins.padding_bottom);
QRect innerShadowRect = shadowTexture.rect() - texMargins;
auto shadow = std::make_shared<KDecoration3::DecorationShadow>();
shadow->setPadding(padding);
shadow->setInnerShadowRect(innerShadowRect);
shadow->setShadow(shadowTexture);
return shadow;
}
void Decoration::updateBlur()
{
auto margins = sizingMargins().commonSizing();
const int radius = isMaximized() ? 0 : margins.corner_radius+1;
QPainterPath path;
path.addRoundedRect(rect(), radius, radius);
setBlurRegion(QRegion(path.toFillPolygon().toPolygon()));
updateShadow();
}
void Decoration::smodPaint(QPainter *painter, const QRectF &repaintRegion)
{
painter->fillRect(rect(), Qt::transparent);
smodPaintOuterBorder(painter, repaintRegion);
//smodPaintInnerBorder(painter, repaintRegion);
smodPaintGlow(painter, repaintRegion);
smodPaintTitleBar(painter, repaintRegion);
}
void Decoration::smodPaintGlow(QPainter *painter, const QRectF &repaintRegion)
{
const auto c = window();
int SIDEBAR_HEIGHT = qMax(25, (int)(size().height() / 4));
if(internalSettings()->invertTextColor() && isMaximized()) return;
painter->setClipRegion(blurRegion());
painter->setClipping(true);
if(!isMaximized() && !hideInnerBorder())
{
auto margins_left = sizingMargins().frameLeftSizing();
auto margins_right = sizingMargins().frameRightSizing();
QPixmap sidehighlight(":/smod/decoration/sidehighlight" + (!c->isActive() ? QString("-unfocus") : QString("")));
painter->drawPixmap(margins_left.inset, borderTop(), borderLeft() - margins_left.inset - margins_left.inset, SIDEBAR_HEIGHT, sidehighlight);
painter->drawPixmap(size().width() - borderRight() + margins_right.inset, borderTop(), borderRight() - margins_right.inset - margins_right.inset, SIDEBAR_HEIGHT, sidehighlight);
}
painter->setClipping(false);
}
void Decoration::smodPaintOuterBorder(QPainter *painter, const QRectF &repaintRegion)
{
Q_UNUSED(repaintRegion);
bool active = window()->isActive();
QString s_top(":/smod/decoration/top");
QString s_left(":/smod/decoration/left");
QString s_right(":/smod/decoration/right");
QString s_bottom(":/smod/decoration/bottom");
QString unfocus("_unfocus");
QString noshadow("_noshadow");
QString noinner("_noinner");
if(!internalSettings()->enableShadow())
{
s_top += noshadow;
s_bottom += noshadow;
}
if(!active)
{
s_top += unfocus;
s_bottom += unfocus;
s_left += unfocus;
s_right += unfocus;
}
if(hideInnerBorder())
{
s_top += noinner;
s_bottom += noinner;
s_left += noinner;
s_right += noinner;
}
// Render the top side, which is always visible
QPixmap p_top(s_top);
auto t_m = sizingMargins().topSide();
auto tl_m = sizingMargins().topLeftCorner();
auto tr_m = sizingMargins().topRightCorner();
FrameTexture top(0, 0,
isMaximized() ? 0 : t_m.margin_top,
t_m.margin_bottom,
size().width() - borderLeft() - borderRight(), borderTop(),
&p_top,
1.0,
false,
tl_m.width, isMaximized() ? t_m.margin_top : 0,
p_top.width() - tl_m.width - tr_m.width, p_top.height() - (isMaximized() ? t_m.margin_top : 0));
top.translate(borderLeft(), 0);
top.render(painter);
if(!isMaximized()) // Render the rest of the decoration
{
QPixmap p_left(s_left);
QPixmap p_right(s_right);
QPixmap p_bottom(s_bottom);
auto l_m = sizingMargins().leftSide();
auto r_m = sizingMargins().rightSide();
auto b_m = sizingMargins().bottomSide();
auto bl_m = sizingMargins().bottomLeftCorner();
auto br_m = sizingMargins().bottomRightCorner();
// Corners
FrameTexture topleft(tl_m.margin_left,
tl_m.margin_right,
tl_m.margin_top,
tl_m.margin_bottom,
borderLeft(),
borderTop(),
&p_top,
1.0,
false,
0, 0, tl_m.width, p_top.height());
FrameTexture topright(tr_m.margin_left,
tr_m.margin_right,
tr_m.margin_top,
tr_m.margin_bottom,
borderRight(),
borderTop(),
&p_top,
1.0,
false,
p_top.width()-tr_m.width, 0,
tr_m.width, p_top.height());
FrameTexture bottomleft(bl_m.margin_left,
bl_m.margin_right,
bl_m.margin_top,
bl_m.margin_bottom,
borderLeft(),
borderBottom(),
&p_bottom,
1.0,
false,
0, 0,
bl_m.width, p_bottom.height());
FrameTexture bottomright(br_m.margin_left,
br_m.margin_right,
br_m.margin_top,
br_m.margin_bottom,
borderRight(),
borderBottom(),
&p_bottom,
1.0,
false,
p_bottom.width()-br_m.width, 0,
br_m.width, p_bottom.height());
// Sides
FrameTexture left(l_m.margin_left,
l_m.margin_right,
0, 0,
borderLeft(),
size().height()-borderBottom()-borderTop(),
&p_left);
FrameTexture right(r_m.margin_left,
r_m.margin_right,
0, 0,
borderRight(),
size().height()-borderBottom()-borderTop(),
&p_right);
FrameTexture bottom(0, 0,
b_m.margin_top,
b_m.margin_bottom,
size().width() - borderLeft() - borderRight(), borderBottom(),
&p_bottom,
1.0,
false,
bl_m.width, 0,
p_bottom.width() - bl_m.width - br_m.width, p_bottom.height());
// Move texture fragments to the appropriate locations
topright.translate(size().width() - borderRight(), 0);
bottomleft.translate(0, size().height() - borderBottom());
bottomright.translate(size().width() - borderRight(), size().height() - borderBottom());
left.translate(0, borderTop());
right.translate(size().width()-borderRight(), borderTop());
bottom.translate(borderLeft(), size().height() - borderBottom());
// Render them all
topleft.render(painter);
topright.render(painter);
bottomleft.render(painter);
bottomright.render(painter);
left.render(painter);
right.render(painter);
bottom.render(painter);
}
}
void Decoration::smodPaintTitleBar(QPainter *painter, const QRectF &repaintRegion)
{
if (hideTitleBar())
{
return;
}
if (!hideCaption())
{
const auto c = window();
int titleAlignment = internalSettings()->titleAlignment();
bool invertText = internalSettings()->invertTextColor() && c->isMaximized();
QRect captionRect(m_leftButtons->geometry().right(), 0, m_rightButtons->geometry().left() - m_leftButtons->geometry().right() - 4, borderTop());
QString caption = settings()->fontMetrics().elidedText(c->caption(), Qt::ElideMiddle, captionRect.width());
QStringList programname = caption.split("");
caption.remove("" + programname.at(programname.size()-1));
QFontMetrics fm(settings()->font());
QString fixedCaption = caption;
auto rect = fm.boundingRect(fixedCaption.replace(QRegularExpression("\\p{Extended_Pictographic}", QRegularExpression::UseUnicodePropertiesOption), ""));
int blurWidth = rect.width() + 30;
int blurHeight = rect.height();
QColor shadowColor = QColor(0, 0, 0, 255);
QColor textColor = c->color(c->isActive() ? KDecoration3::ColorGroup::Active : KDecoration3::ColorGroup::Inactive, KDecoration3::ColorRole::Foreground);
captionRect.setHeight(captionRect.height() & -2);
painter->setFont(settings()->font());
painter->setPen(shadowColor);
painter->setPen(textColor);
QLabel real_label(caption);
QPalette palette = real_label.palette();
if(invertText)
{
textColor.setRed(255-textColor.red());
textColor.setGreen(255-textColor.green());
textColor.setBlue(255-textColor.blue());
}
palette.setColor(real_label.backgroundRole(), textColor);
palette.setColor(real_label.foregroundRole(), textColor);
real_label.setStyleSheet("QLabel { background: #00aaaaaa; }");
real_label.setPalette(palette);
auto f = settings()->font();
f.setKerning(false);
if(invertText) f.setWeight(QFont::DemiBold);
real_label.setFont(f);
real_label.setFixedWidth(captionRect.width());
real_label.setFixedHeight(captionRect.height());
if(titleAlignment == InternalSettings::AlignRight)
real_label.setAlignment(Qt::AlignRight);
else if(titleAlignment == InternalSettings::AlignCenter)
real_label.setAlignment(Qt::AlignHCenter);
else if(titleAlignment == InternalSettings::AlignCenterFullWidth)
{
real_label.setFixedWidth(size().width());
real_label.setAlignment(Qt::AlignHCenter);
}
QPixmap glow(":/smod/decoration/glow");
auto margins = sizingMargins().glowSizing();
int l = margins.margin_left;
int r = margins.margin_right;
int t = margins.margin_top;
int b = margins.margin_bottom;
painter->setRenderHint(QPainter::Antialiasing, true);
painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
int glowHeight = blurHeight*1.5;
int glowWidth = blurWidth + 8;
if(glowWidth < l+r)
{
glowWidth = l+r;
//l -= (l+r) - glowWidth;
}
if(glowHeight < t+b)
{
glowHeight = t+b;
//t -= (t+b) - glowHeight;
}
FrameTexture gl(l, r, t, b, glowWidth, glowHeight, &glow, c->isActive() ? margins.active_opacity : margins.inactive_opacity);
int leftButtonsX = (hideIcon() ? -5 : m_leftButtons->geometry().x());
if(!caption.trimmed().isEmpty())
{
if(titleAlignment == InternalSettings::AlignCenterFullWidth)
{
captionRect.setX(0);
captionRect.setWidth(size().width());
}
float xpos = captionRect.x();
if(titleAlignment == InternalSettings::AlignRight)
{
xpos += captionRect.width() - blurWidth;
}
else if(titleAlignment == InternalSettings::AlignCenter || titleAlignment == InternalSettings::AlignCenterFullWidth)
{
xpos += captionRect.width()/2 - blurWidth/2;
}
else
{
xpos = leftButtonsX + 2;
}
if(!invertText)
{
int alignmentOffset = 0;
if(titleAlignment == InternalSettings::AlignCenter || titleAlignment == InternalSettings::AlignCenterFullWidth)
{
alignmentOffset = -4;
if(m_rightButtons->geometry().intersects(QRect(xpos + alignmentOffset, captionRect.height() / 2 - blurHeight - 2, glowWidth, glowHeight)))
{
captionRect.setX(leftButtonsX);
captionRect.setWidth(size().width() - m_rightButtons->geometry().width());
real_label.setFixedWidth(captionRect.width());
xpos = captionRect.x();
xpos += captionRect.width()/2 - blurWidth/2;
}
}
else if(titleAlignment == InternalSettings::AlignRight)
{
alignmentOffset = -2;
}
painter->translate(xpos + alignmentOffset, (captionRect.height() - glowHeight) / 2);
gl.render(painter);
painter->translate(-xpos - alignmentOffset, (-captionRect.height() + glowHeight) / 2);
}
QPixmap text_pixmap = real_label.grab();
if(titleAlignment == InternalSettings::AlignRight)
{
captionRect.translate(-12, -1);
}
else if(titleAlignment == InternalSettings::AlignLeft)
{
captionRect.translate(5, -1);
}
else if(titleAlignment == InternalSettings::AlignCenterFullWidth || titleAlignment == InternalSettings::AlignCenter)
{
captionRect.translate(1, -1);
}
painter->drawPixmap(captionRect, text_pixmap);
if(invertText)
{
painter->setOpacity(0.7);
painter->drawPixmap(captionRect, text_pixmap);
painter->setOpacity(1.0);
//painter->drawPixmap(captionRect, text_pixmap);
}
}
}
m_leftButtons->paint(painter, repaintRegion);
m_rightButtons->paint(painter, repaintRegion);
/*foreach (QPointer<KDecoration3::DecorationButton> button, m_rightButtons->buttons()) {
static_cast<Button *>(button.data())->smodPaintGlow(painter, repaintRegion);
}*/
}
}

View file

@ -1,8 +0,0 @@
add_library(breezecommon${QT_MAJOR_VERSION} OBJECT breezeboxshadowrenderer.cpp)
set_target_properties(breezecommon${QT_MAJOR_VERSION} PROPERTIES POSITION_INDEPENDENT_CODE TRUE)
target_link_libraries(breezecommon${QT_MAJOR_VERSION}
PUBLIC
Qt${QT_MAJOR_VERSION}::Core
Qt${QT_MAJOR_VERSION}::Gui)

View file

@ -1,342 +0,0 @@
/*
* SPDX-FileCopyrightText: 2018 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
*
* The box blur implementation is based on AlphaBoxBlur from Firefox.
*
* SPDX-License-Identifier: GPL-2.0-or-later
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
// own
#include "breezeboxshadowrenderer.h"
// Qt
#include <QPainter>
#include <QtMath>
namespace Breeze
{
static inline int calculateBlurRadius(qreal stdDev)
{
// See https://www.w3.org/TR/SVG11/filters.html#feGaussianBlurElement
const qreal gaussianScaleFactor = (3.0 * qSqrt(2.0 * M_PI) / 4.0) * 1.5;
return qMax(2, qFloor(stdDev * gaussianScaleFactor + 0.5));
}
static inline qreal calculateBlurStdDev(int radius)
{
// See https://www.w3.org/TR/css-backgrounds-3/#shadow-blur
return radius * 0.5;
}
static inline QSize calculateBlurExtent(int radius)
{
const int blurRadius = calculateBlurRadius(calculateBlurStdDev(radius));
return QSize(blurRadius, blurRadius);
}
struct BoxLobes {
int left; ///< how many pixels sample to the left
int right; ///< how many pixels sample to the right
};
/**
* Compute box filter parameters.
*
* @param radius The blur radius.
* @returns Parameters for three box filters.
**/
static QVector<BoxLobes> computeLobes(int radius)
{
const int blurRadius = calculateBlurRadius(calculateBlurStdDev(radius));
const int z = blurRadius / 3;
int major;
int minor;
int final;
switch (blurRadius % 3) {
case 0:
major = z;
minor = z;
final = z;
break;
case 1:
major = z + 1;
minor = z;
final = z;
break;
case 2:
major = z + 1;
minor = z;
final = z + 1;
break;
default:
Q_UNREACHABLE();
}
Q_ASSERT(major + minor + final == blurRadius);
return {{major, minor}, {minor, major}, {final, final}};
}
/**
* Process a row with a box filter.
*
* @param src The start of the row.
* @param dst The destination.
* @param width The width of the row, in pixels.
* @param horizontalStride The number of bytes from one alpha value to the
* next alpha value.
* @param verticalStride The number of bytes from one row to the next row.
* @param lobes Params of the box filter.
* @param transposeInput Whether the input is transposed.
* @param transposeOutput Whether the output should be transposed.
**/
static inline void boxBlurRowAlpha(const uint8_t *src,
uint8_t *dst,
int width,
int horizontalStride,
int verticalStride,
const BoxLobes &lobes,
bool transposeInput,
bool transposeOutput)
{
const int inputStep = transposeInput ? verticalStride : horizontalStride;
const int outputStep = transposeOutput ? verticalStride : horizontalStride;
const int boxSize = lobes.left + 1 + lobes.right;
const int reciprocal = (1 << 24) / boxSize;
uint32_t alphaSum = (boxSize + 1) / 2;
const uint8_t *left = src;
const uint8_t *right = src;
uint8_t *out = dst;
const uint8_t firstValue = src[0];
const uint8_t lastValue = src[(width - 1) * inputStep];
alphaSum += firstValue * lobes.left;
const uint8_t *initEnd = src + (boxSize - lobes.left) * inputStep;
while (right < initEnd) {
alphaSum += *right;
right += inputStep;
}
const uint8_t *leftEnd = src + boxSize * inputStep;
while (right < leftEnd) {
*out = (alphaSum * reciprocal) >> 24;
alphaSum += *right - firstValue;
right += inputStep;
out += outputStep;
}
const uint8_t *centerEnd = src + width * inputStep;
while (right < centerEnd) {
*out = (alphaSum * reciprocal) >> 24;
alphaSum += *right - *left;
left += inputStep;
right += inputStep;
out += outputStep;
}
const uint8_t *rightEnd = dst + width * outputStep;
while (out < rightEnd) {
*out = (alphaSum * reciprocal) >> 24;
alphaSum += lastValue - *left;
left += inputStep;
out += outputStep;
}
}
/**
* Blur the alpha channel of a given image.
*
* @param image The input image.
* @param radius The blur radius.
* @param rect Specifies what part of the image to blur. If nothing is provided, then
* the whole alpha channel of the input image will be blurred.
**/
static inline void boxBlurAlpha(QImage &image, int radius, const QRect &rect = {})
{
if (radius < 2) {
return;
}
const QVector<BoxLobes> lobes = computeLobes(radius);
const QRect blurRect = rect.isNull() ? image.rect() : rect;
const int alphaOffset = QSysInfo::ByteOrder == QSysInfo::BigEndian ? 0 : 3;
const int width = blurRect.width();
const int height = blurRect.height();
const int rowStride = image.bytesPerLine();
const int pixelStride = image.depth() >> 3;
const int bufferStride = qMax(width, height) * pixelStride;
QScopedPointer<uint8_t, QScopedPointerArrayDeleter<uint8_t>> buf(new uint8_t[2 * bufferStride]);
uint8_t *buf1 = buf.data();
uint8_t *buf2 = buf1 + bufferStride;
// Blur the image in horizontal direction.
for (int i = 0; i < height; ++i) {
uint8_t *row = image.scanLine(blurRect.y() + i) + blurRect.x() * pixelStride + alphaOffset;
boxBlurRowAlpha(row, buf1, width, pixelStride, rowStride, lobes[0], false, false);
boxBlurRowAlpha(buf1, buf2, width, pixelStride, rowStride, lobes[1], false, false);
boxBlurRowAlpha(buf2, row, width, pixelStride, rowStride, lobes[2], false, false);
}
// Blur the image in vertical direction.
for (int i = 0; i < width; ++i) {
uint8_t *column = image.scanLine(blurRect.y()) + (blurRect.x() + i) * pixelStride + alphaOffset;
boxBlurRowAlpha(column, buf1, height, pixelStride, rowStride, lobes[0], true, false);
boxBlurRowAlpha(buf1, buf2, height, pixelStride, rowStride, lobes[1], false, false);
boxBlurRowAlpha(buf2, column, height, pixelStride, rowStride, lobes[2], false, true);
}
}
static inline void mirrorTopLeftQuadrant(QImage &image)
{
const int width = image.width();
const int height = image.height();
const int centerX = qCeil(width * 0.5);
const int centerY = qCeil(height * 0.5);
const int alphaOffset = QSysInfo::ByteOrder == QSysInfo::BigEndian ? 0 : 3;
const int stride = image.depth() >> 3;
for (int y = 0; y < centerY; ++y) {
uint8_t *in = image.scanLine(y) + alphaOffset;
uint8_t *out = in + (width - 1) * stride;
for (int x = 0; x < centerX; ++x, in += stride, out -= stride) {
*out = *in;
}
}
for (int y = 0; y < centerY; ++y) {
const uint8_t *in = image.scanLine(y) + alphaOffset;
uint8_t *out = image.scanLine(width - y - 1) + alphaOffset;
for (int x = 0; x < width; ++x, in += stride, out += stride) {
*out = *in;
}
}
}
static void renderShadow(QPainter *painter, const QRect &rect, qreal borderRadius, const QPoint &offset, int radius, const QColor &color)
{
const QSize inflation = calculateBlurExtent(radius);
const QSize size = rect.size() + 2 * inflation;
const qreal dpr = painter->device()->devicePixelRatioF();
QImage shadow(size * dpr, QImage::Format_ARGB32_Premultiplied);
shadow.setDevicePixelRatio(dpr);
shadow.fill(Qt::transparent);
QRect boxRect(QPoint(0, 0), rect.size());
boxRect.moveCenter(QRect(QPoint(0, 0), size).center());
const qreal xRadius = 2.0 * borderRadius / boxRect.width();
const qreal yRadius = 2.0 * borderRadius / boxRect.height();
QPainter shadowPainter;
shadowPainter.begin(&shadow);
shadowPainter.setRenderHint(QPainter::Antialiasing);
shadowPainter.setPen(Qt::NoPen);
shadowPainter.setBrush(Qt::black);
shadowPainter.drawRoundedRect(boxRect, xRadius, yRadius);
shadowPainter.end();
// Because the shadow texture is symmetrical, that's enough to blur
// only the top-left quadrant and then mirror it.
const QRect blurRect(0, 0, qCeil(shadow.width() * 0.5), qCeil(shadow.height() * 0.5));
const int scaledRadius = qRound(radius * dpr);
boxBlurAlpha(shadow, scaledRadius, blurRect);
mirrorTopLeftQuadrant(shadow);
// Give the shadow a tint of the desired color.
shadowPainter.begin(&shadow);
shadowPainter.setCompositionMode(QPainter::CompositionMode_SourceIn);
shadowPainter.fillRect(shadow.rect(), color);
shadowPainter.end();
// Actually, present the shadow.
QRect shadowRect = shadow.rect();
shadowRect.setSize(shadowRect.size() / dpr);
shadowRect.moveCenter(rect.center() + offset);
painter->drawImage(shadowRect, shadow);
}
void BoxShadowRenderer::setBoxSize(const QSize &size)
{
m_boxSize = size;
}
void BoxShadowRenderer::setBorderRadius(qreal radius)
{
m_borderRadius = radius;
}
void BoxShadowRenderer::addShadow(const QPoint &offset, int radius, const QColor &color)
{
Shadow shadow = {};
shadow.offset = offset;
shadow.radius = radius;
shadow.color = color;
m_shadows.append(shadow);
}
QImage BoxShadowRenderer::render() const
{
if (m_shadows.isEmpty()) {
return {};
}
QSize canvasSize;
for (const Shadow &shadow : std::as_const(m_shadows)) {
canvasSize = canvasSize.expandedTo(calculateMinimumShadowTextureSize(m_boxSize, shadow.radius, shadow.offset));
}
QImage canvas(canvasSize, QImage::Format_ARGB32_Premultiplied);
canvas.fill(Qt::transparent);
QRect boxRect(QPoint(0, 0), m_boxSize);
boxRect.moveCenter(QRect(QPoint(0, 0), canvasSize).center());
QPainter painter(&canvas);
for (const Shadow &shadow : std::as_const(m_shadows)) {
renderShadow(&painter, boxRect, m_borderRadius, shadow.offset, shadow.radius, shadow.color);
}
painter.end();
return canvas;
}
QSize BoxShadowRenderer::calculateMinimumBoxSize(int radius)
{
const QSize blurExtent = calculateBlurExtent(radius);
return 2 * blurExtent + QSize(1, 1);
}
QSize BoxShadowRenderer::calculateMinimumShadowTextureSize(const QSize &boxSize, int radius, const QPoint &offset)
{
return boxSize + 2 * calculateBlurExtent(radius) + QSize(qAbs(offset.x()), qAbs(offset.y()));
}
} // namespace Breeze

View file

@ -1,82 +0,0 @@
/*
* SPDX-FileCopyrightText: 2018 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
// Qt
#include <QColor>
#include <QImage>
#include <QPoint>
#include <QSize>
namespace Breeze
{
class BoxShadowRenderer
{
public:
// Compiler generated constructors & destructor are fine.
/**
* Set the size of the box.
* @param size The size of the box.
**/
void setBoxSize(const QSize &size);
/**
* Set the radius of box' corners.
* @param radius The border radius, in pixels.
**/
void setBorderRadius(qreal radius);
/**
* Add a shadow.
* @param offset The offset of the shadow.
* @param radius The blur radius.
* @param color The color of the shadow.
**/
void addShadow(const QPoint &offset, int radius, const QColor &color);
/**
* Render the shadow.
**/
QImage render() const;
/**
* Calculate the minimum size of the box.
*
* This helper computes the minimum size of the box so the shadow behind it has
* full its strength.
*
* @param radius The blur radius of the shadow.
**/
static QSize calculateMinimumBoxSize(int radius);
/**
* Calculate the minimum size of the shadow texture.
*
* This helper computes the minimum size of the resulting texture so the shadow
* is not clipped.
*
* @param boxSize The size of the box.
* @param radius The blur radius.
* @param offset The offset of the shadow.
**/
static QSize calculateMinimumShadowTextureSize(const QSize &boxSize, int radius, const QPoint &offset);
private:
QSize m_boxSize;
qreal m_borderRadius = 0.0;
struct Shadow {
QPoint offset;
int radius;
QColor color;
};
QVector<Shadow> m_shadows;
};
} // namespace Breeze

View file

@ -1,593 +0,0 @@
# oxygen_kwin_deco.po
# Copyright (C) 2014 This_file_is_part_of_KDE
# This file is distributed under the same license as the PACKAGE package.
#
# Abd_Allatif, 2014.
# Safa Alfulaij <safa1996alfulaij@gmail.com>, 2015, 2016.
# Zayed Al-Saidi <zayed.alsaidi@gmail.com>, 2021, 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-03-04 02:12+0000\n"
"PO-Revision-Date: 2023-03-16 11:40+0400\n"
"Last-Translator: Zayed Al-Saidi <zayed.alsaidi@gmail.com>\n"
"Language-Team: ar\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 21.12.3\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: config/breezeexceptionlistwidget.cpp:88
#, kde-format
msgid "New Exception - Breeze Settings"
msgstr "استثناء جديد - إعدادات نسيم"
#: config/breezeexceptionlistwidget.cpp:136
#, kde-format
msgid "Edit Exception - Breeze Settings"
msgstr "حرّر الإستثناء - إعدادات نسيم"
#: config/breezeexceptionlistwidget.cpp:167
#, kde-format
msgid "Question - Breeze Settings"
msgstr "سؤال - إعدادات نسيم"
#: config/breezeexceptionlistwidget.cpp:168
#, kde-format
msgid "Remove selected exception?"
msgstr "أأزيل الاستثناء المحدّد؟"
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
#: config/breezeexceptionlistwidget.cpp:170
#: config/ui/breezeexceptionlistwidget.ui:91
#, kde-format
msgid "Remove"
msgstr "أزل"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Warning - Breeze Settings"
msgstr "تحذير - إعدادات نسيم"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Regular Expression syntax is incorrect"
msgstr "صياغة التّعبير النمطيّ خاطئة"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Exception Type"
msgstr "نوع الاستثناء"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Regular Expression"
msgstr "التّعبير النّمطيّ"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:36 config/ui/breezeexceptiondialog.ui:72
#, kde-format
msgid "Window Title"
msgstr "عنوان النّافذة"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:40 config/ui/breezeexceptiondialog.ui:67
#, kde-format
msgid "Window Class Name"
msgstr "اسم صنف النّافذة"
#: config/breezeexceptionmodel.cpp:55
#, kde-format
msgid "Enable/disable this exception"
msgstr "مكّن/عطّل هذا الاستثناء"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: config/ui/breezeconfigurationui.ui:33
#, kde-format
msgid "General"
msgstr "عامّ"
#. i18n: ectx: property (text), widget (QLabel, label_3)
#: config/ui/breezeconfigurationui.ui:39
#, kde-format
msgid "Tit&le alignment:"
msgstr "محاذاة الع&نوان:"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:53
#, kde-format
msgid "Left"
msgstr "اليسار"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:58
#, kde-format
msgid "Center"
msgstr "الوسط"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:63
#, kde-format
msgid "Center (Full Width)"
msgstr "الوسط (كامل العرض)"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:68
#, kde-format
msgid "Right"
msgstr "اليمين"
#. i18n: ectx: property (text), widget (QLabel, label_4)
#: config/ui/breezeconfigurationui.ui:89
#, kde-format
msgid "B&utton size:"
msgstr "حجم الزّ&رّ:"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#: config/ui/breezeconfigurationui.ui:103
#, kde-format
msgid "Tiny"
msgstr "ضئيل"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:108
#: config/ui/breezeconfigurationui.ui:221
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Small"
msgstr "صغير"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:113
#: config/ui/breezeconfigurationui.ui:226
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Medium"
msgstr "متوسط"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:118
#: config/ui/breezeconfigurationui.ui:231
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Large"
msgstr "كبير"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:123
#: config/ui/breezeconfigurationui.ui:236
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Very Large"
msgstr "كبير جدًّا"
#. i18n: ectx: property (text), widget (QCheckBox, outlineCloseButton)
#: config/ui/breezeconfigurationui.ui:131
#, kde-format
msgid "Draw a circle around close button"
msgstr "ارسم دائرة حول زرّ الإغلاق"
#. i18n: ectx: property (text), widget (QCheckBox, drawBorderOnMaximizedWindows)
#: config/ui/breezeconfigurationui.ui:138
#, kde-format
msgid "Draw border on maximized and tiled windows"
msgstr "ارسم حدود للنّوافذ المكبّرة والمرتبة"
#. i18n: ectx: property (text), widget (QLabel, drawBorderOnMaximizedWindowsHelpLabel)
#: config/ui/breezeconfigurationui.ui:163
#, kde-format
msgid ""
"This setting will allow you to resize from window edges touching screen "
"edges. Scrollbars and window close buttons will shift positions and will not "
"touch screen edges."
msgstr ""
"سيتيح لك هذا الإعداد تغيير الحجم من حواف النافذة التي تلمس حواف الشاشة. "
"ستغير أشرطة التمرير وأزرار إغلاق النوافذ مواضعها ولن تلمس حواف الشاشة."
#. i18n: ectx: property (text), widget (QCheckBox, drawBackgroundGradient)
#: config/ui/breezeconfigurationui.ui:175
#, kde-format
msgid "Draw titlebar background gradient"
msgstr "ارسم تدرّج خلفيّة لشريط العنوان"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: config/ui/breezeconfigurationui.ui:196
#, kde-format
msgid "Shadows and Outline"
msgstr "الظلال والحدود"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeconfigurationui.ui:202
#, kde-format
msgid "Shadow size:"
msgstr "حجم الظل:"
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:216
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "None"
msgstr "بلا"
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeconfigurationui.ui:244
#, kde-format
msgctxt "strength of the shadow (from transparent to opaque)"
msgid "Shadow strength:"
msgstr "القوة الظل:"
#. i18n: ectx: property (suffix), widget (QSpinBox, shadowStrength)
#: config/ui/breezeconfigurationui.ui:257
#, no-c-format, kde-format
msgid "%"
msgstr "٪"
#. i18n: ectx: property (text), widget (QLabel, label_5)
#: config/ui/breezeconfigurationui.ui:283
#, kde-format
msgid "Shadow color:"
msgstr "لون الظل:"
#. i18n: ectx: property (text), widget (QLabel, label_6)
#: config/ui/breezeconfigurationui.ui:296
#, kde-format
msgctxt "outline intensity"
msgid "Outline intensity:"
msgstr "شدة الحدود:"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:310
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Off"
msgstr "معطلة"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:315
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Low"
msgstr "منخفضة"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:320
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Medium"
msgstr "متوسطة"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:325
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "High"
msgstr "عالية"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:330
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Maximum"
msgstr "القصوى"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: config/ui/breezeconfigurationui.ui:352
#, kde-format
msgid "Window-Specific Overrides"
msgstr "تجاوزات خاصّة بالنّافذة"
#. i18n: ectx: property (windowTitle), widget (QDialog, BreezeExceptionDialog)
#: config/ui/breezeexceptiondialog.ui:14
#, kde-format
msgid "Dialog"
msgstr "حواريّ"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#: config/ui/breezeexceptiondialog.ui:20
#, kde-format
msgid "Window Identification"
msgstr "تعريف النّافذة"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeexceptiondialog.ui:26
#, kde-format
msgid "&Matching window property: "
msgstr "خاصيّة النّافذة ال&مطابقة: "
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeexceptiondialog.ui:39
#, kde-format
msgid "Regular expression &to match: "
msgstr "التّعبير النّمطي لم&طابقته: "
#. i18n: ectx: property (text), widget (QPushButton, detectDialogButton)
#: config/ui/breezeexceptiondialog.ui:52
#, kde-format
msgid "Detect Window Properties…"
msgstr "اكتشف خاصيّات النّافذة…"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
#: config/ui/breezeexceptiondialog.ui:83
#, kde-format
msgid "Decoration Options"
msgstr "خيارات الزّخرفة"
#. i18n: ectx: property (text), widget (QCheckBox, borderSizeCheckBox)
#: config/ui/breezeexceptiondialog.ui:89
#, kde-format
msgid "Border size:"
msgstr "حجم الإطار:"
#. i18n: ectx: property (text), widget (QCheckBox, hideTitleBar)
#: config/ui/breezeexceptiondialog.ui:96
#, kde-format
msgid "Hide window title bar"
msgstr "أخفِ شريط عنوان النّافذة"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:107
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Border"
msgstr "لا حدود"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:112
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Side Borders"
msgstr "لا حدود جانبيّة"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:117
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Tiny"
msgstr "ضئيل"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:122
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Normal"
msgstr "عاديّ"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:127
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Large"
msgstr "كبير"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:132
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Large"
msgstr "كبير جدًّا"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:137
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Huge"
msgstr "ضخم"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:142
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Huge"
msgstr "ضخم جدًّا"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:147
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Oversized"
msgstr "فوق الطّبيعيّ"
#. i18n: ectx: property (text), widget (QPushButton, moveUpButton)
#: config/ui/breezeexceptionlistwidget.ui:70
#, kde-format
msgid "Move Up"
msgstr "انقل ﻷعلى"
#. i18n: ectx: property (text), widget (QPushButton, moveDownButton)
#: config/ui/breezeexceptionlistwidget.ui:77
#, kde-format
msgid "Move Down"
msgstr "انقل لأسفل"
#. i18n: ectx: property (text), widget (QPushButton, addButton)
#: config/ui/breezeexceptionlistwidget.ui:84
#, kde-format
msgid "Add"
msgstr "أضف"
#. i18n: ectx: property (text), widget (QPushButton, editButton)
#: config/ui/breezeexceptionlistwidget.ui:98
#, kde-format
msgid "Edit"
msgstr "حرّر"
#~ msgid "Si&ze:"
#~ msgstr "الح&جم:"
#~ msgid "Color:"
#~ msgstr "اللون:"
#~ msgid "Add handle to resize windows with no border"
#~ msgstr "أضف مقبضًا لتغيير حجم النّافذة الّتي لا حدود لها"
#~ msgid "Information about Selected Window"
#~ msgstr "معلومات عن النّافذة المحدّدة"
#~ msgid "Class: "
#~ msgstr "الصّنف: "
#~ msgid "Title: "
#~ msgstr "العنوان: "
#~ msgid "Window Property Selection"
#~ msgstr "تحديد خاصيّة النّافذة"
#~ msgid "Use window class (whole application)"
#~ msgstr "استخدم صنف النّافذة (التّطبيق بالكامل)"
#~ msgid "Use window title"
#~ msgstr "استخدم عنوان النّافذة"
#~ msgid "Allow resizing maximized windows from window edges"
#~ msgstr "اسمح بتغيير حجم النوافذ المكبرة من حواف النوافذ"
#~ msgid "Draw separator under active window's titlebar"
#~ msgstr "ارسم فاصلًا تحت شريط عنوان النوافذ النشطة"
#~ msgid "Animations"
#~ msgstr "التّحريكات"
#~ msgid "Anima&tions duration:"
#~ msgstr "مدّة التّ&حريكات:"
#, fuzzy
#~| msgid "ms"
#~ msgid " ms"
#~ msgstr "م.ث"
#~ msgid "Enable animations"
#~ msgstr "مكّن التّحريكات"
#~ msgctxt "@item:inlistbox Button size:"
#~ msgid "Normal"
#~ msgstr "عاديّ"
#~ msgid "px"
#~ msgstr "بكسل"
#~ msgid "Button mouseover transition"
#~ msgstr "التأثير الانتقالي لتمرير الفأرة فوق الزر"
#~ msgid "Title transitions"
#~ msgstr "التأثيرات الانتقالية للعنوان"
#~ msgid "Configure fading transitions when window title is changed"
#~ msgstr "ضبط التأثيرات الانتقالية للتلاشي عندما يتغير عنوان النافذة"
#~ msgid "Window active state change transitions"
#~ msgstr "التأثيرات الانتقالية عندما تتغير حالة تنشيط النافذة"
#~ msgid ""
#~ "Configure fading between window shadow and glow when window's active "
#~ "state is changed"
#~ msgstr "ضبط التلاشي بين ظل النافذة والتوهج عندما تتغير حالة تنشيط النافذة"
#~ msgid "Window grouping animations"
#~ msgstr "التأثيرات الحركية لمجموعة النوافذ"
#~ msgid ""
#~ "Configure window titlebar animations when windows are grouped/ungrouped"
#~ msgstr "ضبط التأثيرات الحركية لشريط عنوان النافذة عندما تجمّع/تفصل النوافذ"
#~ msgid "Hide Advanced Configuration Options"
#~ msgstr "إخفاء إعدادات الضبط المتقدمة"
#~ msgid "Show Advanced Configuration Options"
#~ msgstr "إظهار إعدادات الضبط المتقدمة"
#~ msgid "Border si&ze:"
#~ msgstr "قياس الإطار"
#~ msgctxt "@item:inlistbox Button size:"
#~ msgid "Huge"
#~ msgstr "ضخم"
#~ msgid "Fine Tuning"
#~ msgstr "الضبط الدقيق"
#~ msgid "Close windows by double clicking the menu button"
#~ msgstr "إغلاق النافذة بالنقر المزدوج على زر القائمة"
#~ msgid "Never Draw Separator"
#~ msgstr "عدم إظهار الفاصل"
#~ msgid "Always Draw Separator"
#~ msgstr "إظهار الفاصل دومًا"
#~ msgid "Separator disp&lay:"
#~ msgstr "عرض الفاصل:"
#~ msgid "Outline active window title"
#~ msgstr "محيط عنوان النافذة النشطة"
#~ msgid "Use narrow space between decoration buttons"
#~ msgstr "استخدام فراغ ضيق بين أزار الإطار"
#~ msgid "Window Drop-Down Shadow"
#~ msgstr "ظل النافذة المنسدل"
#~ msgid "Active Window Glow"
#~ msgstr "توهح النافذة المفعلة"
#~ msgctxt "outline window title"
#~ msgid "Disabled"
#~ msgstr "معطل"
#~ msgctxt "outline window title"
#~ msgid "Enabled"
#~ msgstr "مفعل"
#~ msgid "Separator display:"
#~ msgstr "عرض الفاصل:"
#~ msgctxt "Add handle to resize windows with no border"
#~ msgid "Disabled"
#~ msgstr "مفعّل"
#~ msgctxt "Add handle to resize windows with no border"
#~ msgid "Enabled"
#~ msgstr "معطّل"
#~ msgid "Oxygen"
#~ msgstr "أوكسجين"
#~ msgid "Window Actions Menu"
#~ msgstr "قائمة أفعال النافذة"
#~ msgid "Application Menu"
#~ msgstr "قائمة التطبيق"
#~ msgid "Help"
#~ msgstr "مساعدة"
#~ msgid "Minimize"
#~ msgstr "تصغير"
#~ msgid "Close"
#~ msgstr "إغلاق"
#~ msgid "Keep Above Others"
#~ msgstr "إبقاء النافذة فوق باقي النوافذ"
#~ msgid "Keep Below Others"
#~ msgstr "إبقاء النافذة تحت باقي النوافذ"
#~ msgid "On All Desktops"
#~ msgstr "على جميع سطوح المكتب"
#~ msgid "Shade Button"
#~ msgstr "ظل الزر"
#~ msgid "Inactive Windows"
#~ msgstr "النوافذ غير النشطة"
#~ msgid "Active Windows"
#~ msgstr "النوافذ النشطة"

View file

@ -1,227 +0,0 @@
# Copyright (C) YEAR This_file_is_part_of_KDE
# This file is distributed under the same license as the PACKAGE package.
#
# Safa Alfulaij <safa1996alfulaij@gmail.com>, 2015, 2015, 2016.
# Zayed Al-Saidi <zayed.alsaidi@gmail.com>, 2021, 2022.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-09-25 00:45+0000\n"
"PO-Revision-Date: 2022-02-07 08:37+0400\n"
"Last-Translator: Zayed Al-Saidi <zayed.alsaidi@gmail.com>\n"
"Language-Team: ar\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
"X-Generator: Lokalize 21.07.70\n"
#: main.cpp:25 main.cpp:29
#, kde-format
msgid "Breeze Settings"
msgstr "إعدادات نسيم"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: ui/breezestyleconfig.ui:39
#, kde-format
msgid "General"
msgstr "عامّ"
#. i18n: ectx: property (text), widget (QLabel, _windowDragLabel)
#: ui/breezestyleconfig.ui:51
#, kde-format
msgid "W&indows' drag mode:"
msgstr "وضع سحب ال&نّوافذ:"
#. i18n: ectx: property (text), widget (QCheckBox, _viewDrawFocusIndicator)
#: ui/breezestyleconfig.ui:64
#, kde-format
msgid "Draw focus indicator in lists"
msgstr "ارسم مؤشر التركيز على القوائم"
#. i18n: ectx: property (text), widget (QLabel, _mnemonicsLabel)
#: ui/breezestyleconfig.ui:71
#, kde-format
msgid "&Keyboard accelerators visibility:"
msgstr "ظهور مسرّعات لو&حة المفاتيح:"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:85
#, kde-format
msgid "Always hide"
msgstr "أخفِ دائمًا"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:90
#, kde-format
msgid "Show when Alt key is pressed"
msgstr "أظهر عند ضغط على مفتاح Alt"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:95
#, kde-format
msgid "Always show"
msgstr "أظهر دائمًا"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:117
#, kde-format
msgid "Drag windows from titlebar only"
msgstr "اسحب النّوافذ من شريط العنوان فقط"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:122
#, kde-format
msgid "Drag windows from titlebar, menubar and toolbars"
msgstr "اسحب النّوافذ من شريط العنوان، وشريط القوائم وأشرطة الأدوات"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:127
#, kde-format
msgid "Drag windows from all empty areas"
msgstr "اسحب النّوافذ من كلّ المناطق الفارغة"
#. i18n: ectx: property (text), widget (QCheckBox, _tabBarDrawCenteredTabs)
#: ui/breezestyleconfig.ui:148
#, kde-format
msgid "Center tabbar tabs"
msgstr "وسّط ألسنة أشرطة الألسنة"
#. i18n: ectx: property (text), widget (QCheckBox, _toolBarDrawItemSeparator)
#: ui/breezestyleconfig.ui:155
#, kde-format
msgid "Draw toolbar item separators"
msgstr "ارسم فواصل عناصر أشرطة الأدوات"
#. i18n: ectx: property (text), widget (QCheckBox, _sliderDrawTickMarks)
#: ui/breezestyleconfig.ui:162
#, kde-format
msgid "Draw slider tick marks"
msgstr "ارسم علامات التّأشير في المنزلقة"
#. i18n: ectx: property (text), widget (QCheckBox, _splitterProxyEnabled)
#: ui/breezestyleconfig.ui:169
#, kde-format
msgid "Enable extended resize handles"
msgstr "مكّن قوابض تغيير الحجم الممتدّة"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: ui/breezestyleconfig.ui:177
#, kde-format
msgid "Frames"
msgstr "الإطارات"
#. i18n: ectx: property (text), widget (QCheckBox, _dockWidgetDrawFrame)
#: ui/breezestyleconfig.ui:183
#, kde-format
msgid "Draw frame around dockable panels"
msgstr "ارسم إطارًا حول اللوحات القابلة للرّصف"
#. i18n: ectx: property (text), widget (QCheckBox, _sidePanelDrawFrame)
#: ui/breezestyleconfig.ui:190
#, kde-format
msgid "Draw frame around side panels"
msgstr "ارسم إطارًا حول اللوحات الجانبيّة"
#. i18n: ectx: property (text), widget (QCheckBox, _menuItemDrawThinFocus)
#: ui/breezestyleconfig.ui:197
#, kde-format
msgid "Draw a thin line to indicate focus in menus and menubars"
msgstr "ارسم خطًّا رفيعًا للإشارة إلى التّركيز في القوائم وأشرطة القوائم"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: ui/breezestyleconfig.ui:218
#, kde-format
msgid "Scrollbars"
msgstr "أشرطة التّمرير"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarAddLineLabel)
#: ui/breezestyleconfig.ui:237
#, kde-format
msgid "Bottom arrow button t&ype:"
msgstr "نوع زرّ السّهم ال&سّفليّ:"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarSubLineLabel)
#: ui/breezestyleconfig.ui:250
#, kde-format
msgid "&Top arrow button type:"
msgstr "نوع زرّ السّهم ال&علويّ:"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:264 ui/breezestyleconfig.ui:283
#, kde-format
msgid "No Buttons"
msgstr "بلا أزرار"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:269 ui/breezestyleconfig.ui:288
#, kde-format
msgid "One Button"
msgstr "زرّ واحد"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:274 ui/breezestyleconfig.ui:293
#, kde-format
msgid "Two Buttons"
msgstr "زرّان"
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
#: ui/breezestyleconfig.ui:315
#, kde-format
msgid "Transparency"
msgstr "الشّفافيّة"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityTransparentLabel)
#: ui/breezestyleconfig.ui:336
#, kde-format
msgid "Transparent"
msgstr "شفاف"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityOpaqueLabel)
#: ui/breezestyleconfig.ui:362
#, kde-format
msgid "Opaque"
msgstr "معتم"
#. i18n: ectx: property (text), widget (QLabel, _menuGroupDescription)
#: ui/breezestyleconfig.ui:373
#, kde-format
msgid "Menu:"
msgstr "القائمة:"
#~ msgid "Always Hide Keyboard Accelerators"
#~ msgstr "أخفِ دائمًا مسرّعات لوحة المفاتيح"
#~ msgid "Show Keyboard Accelerators When Needed"
#~ msgstr "أظهر مسرّعات لوحة المفاتيح عند الحاجة"
#~ msgid "Always Show Keyboard Accelerators"
#~ msgstr "أظهر دائمًا مسرّعات لوحة المفاتيح"
#~ msgid "Draw frame around page titles"
#~ msgstr "ارسم إطارًا حول عناوين الصّفحات"
#~ msgid "Animations"
#~ msgstr "التّحريكات"
#, fuzzy
#~| msgid "Animations d&uration:"
#~ msgid "A&nimations duration:"
#~ msgstr "م&دّة التّحريكات:"
#, fuzzy
#~| msgid "ms"
#~ msgid " ms"
#~ msgstr "م.ث"
#~ msgid "Enable animations"
#~ msgstr "مكّن التّحريكات"
#~ msgid "Advanced"
#~ msgstr "متقدّم"

View file

@ -1,414 +0,0 @@
# Copyright (C) 2023 This file is copyright:
# This file is distributed under the same license as the breeze package.
#
# SPDX-FileCopyrightText: 2023 Enol P. <enolp@softastur.org>
msgid ""
msgstr ""
"Project-Id-Version: breeze\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-03-04 02:12+0000\n"
"PO-Revision-Date: 2023-11-11 01:00+0100\n"
"Last-Translator: Enol P. <enolp@softastur.org>\n"
"Language-Team: \n"
"Language: ast\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 23.08.2\n"
#: config/breezeexceptionlistwidget.cpp:88
#, kde-format
msgid "New Exception - Breeze Settings"
msgstr ""
#: config/breezeexceptionlistwidget.cpp:136
#, kde-format
msgid "Edit Exception - Breeze Settings"
msgstr ""
#: config/breezeexceptionlistwidget.cpp:167
#, kde-format
msgid "Question - Breeze Settings"
msgstr ""
#: config/breezeexceptionlistwidget.cpp:168
#, kde-format
msgid "Remove selected exception?"
msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
#: config/breezeexceptionlistwidget.cpp:170
#: config/ui/breezeexceptionlistwidget.ui:91
#, kde-format
msgid "Remove"
msgstr ""
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Warning - Breeze Settings"
msgstr ""
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Regular Expression syntax is incorrect"
msgstr ""
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Exception Type"
msgstr ""
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Regular Expression"
msgstr "Espresión regular"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:36 config/ui/breezeexceptiondialog.ui:72
#, kde-format
msgid "Window Title"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:40 config/ui/breezeexceptiondialog.ui:67
#, kde-format
msgid "Window Class Name"
msgstr ""
#: config/breezeexceptionmodel.cpp:55
#, kde-format
msgid "Enable/disable this exception"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: config/ui/breezeconfigurationui.ui:33
#, kde-format
msgid "General"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label_3)
#: config/ui/breezeconfigurationui.ui:39
#, kde-format
msgid "Tit&le alignment:"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:53
#, kde-format
msgid "Left"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:58
#, kde-format
msgid "Center"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:63
#, kde-format
msgid "Center (Full Width)"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:68
#, kde-format
msgid "Right"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label_4)
#: config/ui/breezeconfigurationui.ui:89
#, kde-format
msgid "B&utton size:"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#: config/ui/breezeconfigurationui.ui:103
#, kde-format
msgid "Tiny"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:108
#: config/ui/breezeconfigurationui.ui:221
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Small"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:113
#: config/ui/breezeconfigurationui.ui:226
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Medium"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:118
#: config/ui/breezeconfigurationui.ui:231
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Large"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:123
#: config/ui/breezeconfigurationui.ui:236
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Very Large"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, outlineCloseButton)
#: config/ui/breezeconfigurationui.ui:131
#, kde-format
msgid "Draw a circle around close button"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, drawBorderOnMaximizedWindows)
#: config/ui/breezeconfigurationui.ui:138
#, kde-format
msgid "Draw border on maximized and tiled windows"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, drawBorderOnMaximizedWindowsHelpLabel)
#: config/ui/breezeconfigurationui.ui:163
#, kde-format
msgid ""
"This setting will allow you to resize from window edges touching screen "
"edges. Scrollbars and window close buttons will shift positions and will not "
"touch screen edges."
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, drawBackgroundGradient)
#: config/ui/breezeconfigurationui.ui:175
#, kde-format
msgid "Draw titlebar background gradient"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: config/ui/breezeconfigurationui.ui:196
#, kde-format
msgid "Shadows and Outline"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeconfigurationui.ui:202
#, kde-format
msgid "Shadow size:"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:216
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "None"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeconfigurationui.ui:244
#, kde-format
msgctxt "strength of the shadow (from transparent to opaque)"
msgid "Shadow strength:"
msgstr ""
#. i18n: ectx: property (suffix), widget (QSpinBox, shadowStrength)
#: config/ui/breezeconfigurationui.ui:257
#, no-c-format, kde-format
msgid "%"
msgstr "%"
#. i18n: ectx: property (text), widget (QLabel, label_5)
#: config/ui/breezeconfigurationui.ui:283
#, kde-format
msgid "Shadow color:"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label_6)
#: config/ui/breezeconfigurationui.ui:296
#, kde-format
msgctxt "outline intensity"
msgid "Outline intensity:"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:310
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Off"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:315
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Low"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:320
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Medium"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:325
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "High"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:330
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Maximum"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: config/ui/breezeconfigurationui.ui:352
#, kde-format
msgid "Window-Specific Overrides"
msgstr ""
#. i18n: ectx: property (windowTitle), widget (QDialog, BreezeExceptionDialog)
#: config/ui/breezeexceptiondialog.ui:14
#, kde-format
msgid "Dialog"
msgstr ""
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#: config/ui/breezeexceptiondialog.ui:20
#, kde-format
msgid "Window Identification"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeexceptiondialog.ui:26
#, kde-format
msgid "&Matching window property: "
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeexceptiondialog.ui:39
#, kde-format
msgid "Regular expression &to match: "
msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, detectDialogButton)
#: config/ui/breezeexceptiondialog.ui:52
#, kde-format
msgid "Detect Window Properties…"
msgstr ""
#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
#: config/ui/breezeexceptiondialog.ui:83
#, kde-format
msgid "Decoration Options"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, borderSizeCheckBox)
#: config/ui/breezeexceptiondialog.ui:89
#, kde-format
msgid "Border size:"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, hideTitleBar)
#: config/ui/breezeexceptiondialog.ui:96
#, kde-format
msgid "Hide window title bar"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:107
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Border"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:112
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Side Borders"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:117
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Tiny"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:122
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Normal"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:127
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Large"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:132
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Large"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:137
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Huge"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:142
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Huge"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:147
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Oversized"
msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, moveUpButton)
#: config/ui/breezeexceptionlistwidget.ui:70
#, kde-format
msgid "Move Up"
msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, moveDownButton)
#: config/ui/breezeexceptionlistwidget.ui:77
#, kde-format
msgid "Move Down"
msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, addButton)
#: config/ui/breezeexceptionlistwidget.ui:84
#, kde-format
msgid "Add"
msgstr ""
#. i18n: ectx: property (text), widget (QPushButton, editButton)
#: config/ui/breezeexceptionlistwidget.ui:98
#, kde-format
msgid "Edit"
msgstr ""

View file

@ -1,194 +0,0 @@
# Copyright (C) 2023 This file is copyright:
# This file is distributed under the same license as the breeze package.
#
# SPDX-FileCopyrightText: 2023 Enol P. <enolp@softastur.org>
msgid ""
msgstr ""
"Project-Id-Version: breeze\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-09-25 00:45+0000\n"
"PO-Revision-Date: 2023-11-11 01:00+0100\n"
"Last-Translator: Enol P. <enolp@softastur.org>\n"
"Language-Team: \n"
"Language: ast\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 23.08.2\n"
#: main.cpp:25 main.cpp:29
#, kde-format
msgid "Breeze Settings"
msgstr "Configuración de Breeze"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: ui/breezestyleconfig.ui:39
#, kde-format
msgid "General"
msgstr "Xeneral"
#. i18n: ectx: property (text), widget (QLabel, _windowDragLabel)
#: ui/breezestyleconfig.ui:51
#, kde-format
msgid "W&indows' drag mode:"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, _viewDrawFocusIndicator)
#: ui/breezestyleconfig.ui:64
#, kde-format
msgid "Draw focus indicator in lists"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, _mnemonicsLabel)
#: ui/breezestyleconfig.ui:71
#, kde-format
msgid "&Keyboard accelerators visibility:"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:85
#, kde-format
msgid "Always hide"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:90
#, kde-format
msgid "Show when Alt key is pressed"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:95
#, kde-format
msgid "Always show"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:117
#, kde-format
msgid "Drag windows from titlebar only"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:122
#, kde-format
msgid "Drag windows from titlebar, menubar and toolbars"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:127
#, kde-format
msgid "Drag windows from all empty areas"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, _tabBarDrawCenteredTabs)
#: ui/breezestyleconfig.ui:148
#, kde-format
msgid "Center tabbar tabs"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, _toolBarDrawItemSeparator)
#: ui/breezestyleconfig.ui:155
#, kde-format
msgid "Draw toolbar item separators"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, _sliderDrawTickMarks)
#: ui/breezestyleconfig.ui:162
#, kde-format
msgid "Draw slider tick marks"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, _splitterProxyEnabled)
#: ui/breezestyleconfig.ui:169
#, kde-format
msgid "Enable extended resize handles"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: ui/breezestyleconfig.ui:177
#, kde-format
msgid "Frames"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, _dockWidgetDrawFrame)
#: ui/breezestyleconfig.ui:183
#, kde-format
msgid "Draw frame around dockable panels"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, _sidePanelDrawFrame)
#: ui/breezestyleconfig.ui:190
#, kde-format
msgid "Draw frame around side panels"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, _menuItemDrawThinFocus)
#: ui/breezestyleconfig.ui:197
#, kde-format
msgid "Draw a thin line to indicate focus in menus and menubars"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: ui/breezestyleconfig.ui:218
#, kde-format
msgid "Scrollbars"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, _scrollBarAddLineLabel)
#: ui/breezestyleconfig.ui:237
#, kde-format
msgid "Bottom arrow button t&ype:"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, _scrollBarSubLineLabel)
#: ui/breezestyleconfig.ui:250
#, kde-format
msgid "&Top arrow button type:"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:264 ui/breezestyleconfig.ui:283
#, kde-format
msgid "No Buttons"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:269 ui/breezestyleconfig.ui:288
#, kde-format
msgid "One Button"
msgstr "Un botón"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:274 ui/breezestyleconfig.ui:293
#, kde-format
msgid "Two Buttons"
msgstr "Dos botones"
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
#: ui/breezestyleconfig.ui:315
#, kde-format
msgid "Transparency"
msgstr "Tresparencia"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityTransparentLabel)
#: ui/breezestyleconfig.ui:336
#, kde-format
msgid "Transparent"
msgstr "Tresparente"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityOpaqueLabel)
#: ui/breezestyleconfig.ui:362
#, kde-format
msgid "Opaque"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, _menuGroupDescription)
#: ui/breezestyleconfig.ui:373
#, kde-format
msgid "Menu:"
msgstr "Menú:"

View file

@ -1,466 +0,0 @@
# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the breeze package.
#
# Xəyyam Qocayev <xxmn77@gmail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: breeze\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-03-04 02:12+0000\n"
"PO-Revision-Date: 2020-07-14 22:00+0400\n"
"Last-Translator: Xəyyam Qocayev <xxmn77@gmail.com>\n"
"Language-Team: Azerbaijani <kde-i18n-doc@kde.org>\n"
"Language: az\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 20.04.3\n"
#: config/breezeexceptionlistwidget.cpp:88
#, kde-format
msgid "New Exception - Breeze Settings"
msgstr "Yeni istisna - Breeze ayarları"
#: config/breezeexceptionlistwidget.cpp:136
#, kde-format
msgid "Edit Exception - Breeze Settings"
msgstr "İstisnalara düzəliş - Breeze ayarları"
#: config/breezeexceptionlistwidget.cpp:167
#, kde-format
msgid "Question - Breeze Settings"
msgstr "Sual - Breeze ayarları"
#: config/breezeexceptionlistwidget.cpp:168
#, kde-format
msgid "Remove selected exception?"
msgstr "Seçilmiş istisna silinsin?"
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
#: config/breezeexceptionlistwidget.cpp:170
#: config/ui/breezeexceptionlistwidget.ui:91
#, kde-format
msgid "Remove"
msgstr "Silmək"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Warning - Breeze Settings"
msgstr "Xəbərdarlıq - Breeze ayarları"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Regular Expression syntax is incorrect"
msgstr "Müntəzəm ifadə sintaksisi səhvdir"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Exception Type"
msgstr "İstisnanın növü"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Regular Expression"
msgstr "Müntəzəm ifadə"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:36 config/ui/breezeexceptiondialog.ui:72
#, kde-format
msgid "Window Title"
msgstr "Pəncərə başlığı"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:40 config/ui/breezeexceptiondialog.ui:67
#, kde-format
msgid "Window Class Name"
msgstr "Pəncərə sinifinin adı"
#: config/breezeexceptionmodel.cpp:55
#, kde-format
msgid "Enable/disable this exception"
msgstr "Bu istisnanı aktiv et/qeyri-aktiv et"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: config/ui/breezeconfigurationui.ui:33
#, kde-format
msgid "General"
msgstr "Əsas"
#. i18n: ectx: property (text), widget (QLabel, label_3)
#: config/ui/breezeconfigurationui.ui:39
#, kde-format
msgid "Tit&le alignment:"
msgstr "Baş&lığın düzləndirilməsi:"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:53
#, kde-format
msgid "Left"
msgstr "Sol"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:58
#, kde-format
msgid "Center"
msgstr "Mərkəz"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:63
#, kde-format
msgid "Center (Full Width)"
msgstr "Mərkəz (Tam eninə)"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:68
#, kde-format
msgid "Right"
msgstr "Sağ"
#. i18n: ectx: property (text), widget (QLabel, label_4)
#: config/ui/breezeconfigurationui.ui:89
#, kde-format
msgid "B&utton size:"
msgstr "Düy&mələrin ölçüsü:"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#: config/ui/breezeconfigurationui.ui:103
#, kde-format
msgid "Tiny"
msgstr "İncə"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:108
#: config/ui/breezeconfigurationui.ui:221
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Small"
msgstr "Kiçik"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:113
#: config/ui/breezeconfigurationui.ui:226
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Medium"
msgstr "Orta"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:118
#: config/ui/breezeconfigurationui.ui:231
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Large"
msgstr "Geniş"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:123
#: config/ui/breezeconfigurationui.ui:236
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Very Large"
msgstr "Çox geniş"
#. i18n: ectx: property (text), widget (QCheckBox, outlineCloseButton)
#: config/ui/breezeconfigurationui.ui:131
#, kde-format
msgid "Draw a circle around close button"
msgstr "\"Bağlamaq\" düyməsi ətrafında çərçivə göstərmək"
#. i18n: ectx: property (text), widget (QCheckBox, drawBorderOnMaximizedWindows)
#: config/ui/breezeconfigurationui.ui:138
#, kde-format
msgid "Draw border on maximized and tiled windows"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, drawBorderOnMaximizedWindowsHelpLabel)
#: config/ui/breezeconfigurationui.ui:163
#, kde-format
msgid ""
"This setting will allow you to resize from window edges touching screen "
"edges. Scrollbars and window close buttons will shift positions and will not "
"touch screen edges."
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, drawBackgroundGradient)
#: config/ui/breezeconfigurationui.ui:175
#, kde-format
msgid "Draw titlebar background gradient"
msgstr "Başlığın fon rəng keçidini (qradient, genəltmə) çəkin"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: config/ui/breezeconfigurationui.ui:196
#, kde-format
msgid "Shadows and Outline"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeconfigurationui.ui:202
#, fuzzy, kde-format
#| msgid "Shadows"
msgid "Shadow size:"
msgstr "Kölgələr"
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:216
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "None"
msgstr "Heç biri"
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeconfigurationui.ui:244
#, fuzzy, kde-format
#| msgctxt "strength of the shadow (from transparent to opaque)"
#| msgid "S&trength:"
msgctxt "strength of the shadow (from transparent to opaque)"
msgid "Shadow strength:"
msgstr "Qe&yri-şəffaflıq:"
#. i18n: ectx: property (suffix), widget (QSpinBox, shadowStrength)
#: config/ui/breezeconfigurationui.ui:257
#, no-c-format, kde-format
msgid "%"
msgstr "%"
#. i18n: ectx: property (text), widget (QLabel, label_5)
#: config/ui/breezeconfigurationui.ui:283
#, fuzzy, kde-format
#| msgid "Shadows"
msgid "Shadow color:"
msgstr "Kölgələr"
#. i18n: ectx: property (text), widget (QLabel, label_6)
#: config/ui/breezeconfigurationui.ui:296
#, kde-format
msgctxt "outline intensity"
msgid "Outline intensity:"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:310
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Off"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:315
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Low"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:320
#, fuzzy, kde-format
#| msgctxt "@item:inlistbox Button size:"
#| msgid "Medium"
msgctxt "@item:inlistbox Outline intensity:"
msgid "Medium"
msgstr "Orta"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:325
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "High"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:330
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Maximum"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: config/ui/breezeconfigurationui.ui:352
#, kde-format
msgid "Window-Specific Overrides"
msgstr "Ayrı-ayrı pəncərələrin qeyri-şəffaflığı"
#. i18n: ectx: property (windowTitle), widget (QDialog, BreezeExceptionDialog)
#: config/ui/breezeexceptiondialog.ui:14
#, kde-format
msgid "Dialog"
msgstr "Dialoq"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#: config/ui/breezeexceptiondialog.ui:20
#, kde-format
msgid "Window Identification"
msgstr "Pəncərə kimliyinə görə"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeexceptiondialog.ui:26
#, kde-format
msgid "&Matching window property: "
msgstr "Pən&cərənin xüsusiyyətləri ilə uyğun gəlir: "
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeexceptiondialog.ui:39
#, kde-format
msgid "Regular expression &to match: "
msgstr "Mün&təzəm ifadələr üçün uyğun gəlir: "
#. i18n: ectx: property (text), widget (QPushButton, detectDialogButton)
#: config/ui/breezeexceptiondialog.ui:52
#, fuzzy, kde-format
#| msgid "Detect Window Properties"
msgid "Detect Window Properties…"
msgstr "Pəncərə xüsusiyyətlərini təyin etmək"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
#: config/ui/breezeexceptiondialog.ui:83
#, kde-format
msgid "Decoration Options"
msgstr "Dekorasiya ayarları"
#. i18n: ectx: property (text), widget (QCheckBox, borderSizeCheckBox)
#: config/ui/breezeexceptiondialog.ui:89
#, kde-format
msgid "Border size:"
msgstr "Pəncərə kənarlarının ölçüsü:"
#. i18n: ectx: property (text), widget (QCheckBox, hideTitleBar)
#: config/ui/breezeexceptiondialog.ui:96
#, kde-format
msgid "Hide window title bar"
msgstr "Pəncərə başlıq çubuğunu gizlətmək"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:107
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Border"
msgstr "Kənarları yoxdur"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:112
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Side Borders"
msgstr "Kənar çərçivələrsiz"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:117
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Tiny"
msgstr "İncə"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:122
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Normal"
msgstr "Normal"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:127
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Large"
msgstr "Geniş"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:132
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Large"
msgstr "Çox geniş"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:137
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Huge"
msgstr "Nəhəng"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:142
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Huge"
msgstr "Çox nəhəng"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:147
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Oversized"
msgstr "Ən geniş"
#. i18n: ectx: property (text), widget (QPushButton, moveUpButton)
#: config/ui/breezeexceptionlistwidget.ui:70
#, kde-format
msgid "Move Up"
msgstr "Yuxarı"
#. i18n: ectx: property (text), widget (QPushButton, moveDownButton)
#: config/ui/breezeexceptionlistwidget.ui:77
#, kde-format
msgid "Move Down"
msgstr "Aşağı"
#. i18n: ectx: property (text), widget (QPushButton, addButton)
#: config/ui/breezeexceptionlistwidget.ui:84
#, kde-format
msgid "Add"
msgstr "Əlavə etmək"
#. i18n: ectx: property (text), widget (QPushButton, editButton)
#: config/ui/breezeexceptionlistwidget.ui:98
#, kde-format
msgid "Edit"
msgstr "Düzəliş etmək"
#~ msgid "Si&ze:"
#~ msgstr "Ölçü&sü:"
#~ msgid "Color:"
#~ msgstr "Rəng:"
#~ msgid "Add handle to resize windows with no border"
#~ msgstr "Çərçivəsiz pəncərənin ölçüsünü dəyişmək üçün künc əlavə edin"
#~ msgid "Information about Selected Window"
#~ msgstr "Seçilmiş pəncərə haqqında məlumat"
#~ msgid "Class: "
#~ msgstr "Sinif:"
#~ msgid "Title: "
#~ msgstr "Başlıq:"
#~ msgid "Window Property Selection"
#~ msgstr "Pəncərələri xüsusiyyətlərinə görə seçmək"
#~ msgid "Use window class (whole application)"
#~ msgstr "Pəncərə siniflərinə görə (bütün tətbiqlər)"
#~ msgid "Use window title"
#~ msgstr "Pəncərə başlığına görə"
#~ msgid "Allow resizing maximized windows from window edges"
#~ msgstr "Tam ekran boyu açılan pəncərənin ölçüsünü dəyidirməyə icazə vermək"
#~ msgid "Draw separator under active window's titlebar"
#~ msgstr "Aktiv pəncərənin başlığı altına ayırıcı xətt çəkin"
#~ msgid "Animations"
#~ msgstr "Animasiyalar"
#~ msgid "Anima&tions duration:"
#~ msgstr "Animasiya müddə&ti:"
#~ msgid " ms"
#~ msgstr " msan"
#~ msgid "Enable animations"
#~ msgstr "Animasiyaları aktiv edin"

View file

@ -1,220 +0,0 @@
# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the breeze package.
#
# Xəyyam Qocayev <xxmn77@gmail.com>, 2020, 2022.
msgid ""
msgstr ""
"Project-Id-Version: breeze\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-09-25 00:45+0000\n"
"PO-Revision-Date: 2022-02-13 13:58+0400\n"
"Last-Translator: Kheyyam Gojayev <xxmn77@gmail.com>\n"
"Language-Team: Azerbaijani <kde-i18n-doc@kde.org>\n"
"Language: az\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 21.12.2\n"
#: main.cpp:25 main.cpp:29
#, kde-format
msgid "Breeze Settings"
msgstr "Breeze Ayarları"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: ui/breezestyleconfig.ui:39
#, kde-format
msgid "General"
msgstr "Əsas"
#. i18n: ectx: property (text), widget (QLabel, _windowDragLabel)
#: ui/breezestyleconfig.ui:51
#, kde-format
msgid "W&indows' drag mode:"
msgstr "Pəncərənin yerdəy&işməsi rejimi:"
#. i18n: ectx: property (text), widget (QCheckBox, _viewDrawFocusIndicator)
#: ui/breezestyleconfig.ui:64
#, kde-format
msgid "Draw focus indicator in lists"
msgstr "Siyahılarda fokus göstəricisini çəkmək"
#. i18n: ectx: property (text), widget (QLabel, _mnemonicsLabel)
#: ui/breezestyleconfig.ui:71
#, kde-format
msgid "&Keyboard accelerators visibility:"
msgstr "Cəld giriş &klavişinin görünməsi:"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:85
#, kde-format
msgid "Always hide"
msgstr "Həmişə gizlətmək"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:90
#, kde-format
msgid "Show when Alt key is pressed"
msgstr "Alt düyməsi basıldıqda göstərmək"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:95
#, kde-format
msgid "Always show"
msgstr "Həmişə göstərmək"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:117
#, kde-format
msgid "Drag windows from titlebar only"
msgstr "Pəncərələri yalnız başlıq çubuğundan sürükləmək"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:122
#, kde-format
msgid "Drag windows from titlebar, menubar and toolbars"
msgstr ""
"Pəncərələri yalnız başlıq çubuğundan, menyu sətirindən və alətlər panelindən "
"sürükləmək"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:127
#, kde-format
msgid "Drag windows from all empty areas"
msgstr "Pəncərələri bütün böş sahələrdən sürükləmək"
#. i18n: ectx: property (text), widget (QCheckBox, _tabBarDrawCenteredTabs)
#: ui/breezestyleconfig.ui:148
#, kde-format
msgid "Center tabbar tabs"
msgstr "Vərəq başlıqlarını ortada göstərmək"
#. i18n: ectx: property (text), widget (QCheckBox, _toolBarDrawItemSeparator)
#: ui/breezestyleconfig.ui:155
#, kde-format
msgid "Draw toolbar item separators"
msgstr "Alətlər panelindəki elemntlər arasındakı ayırıcını göstərmək"
#. i18n: ectx: property (text), widget (QCheckBox, _sliderDrawTickMarks)
#: ui/breezestyleconfig.ui:162
#, kde-format
msgid "Draw slider tick marks"
msgstr "Sürüşdürücü işarələrini göstərmək"
#. i18n: ectx: property (text), widget (QCheckBox, _splitterProxyEnabled)
#: ui/breezestyleconfig.ui:169
#, kde-format
msgid "Enable extended resize handles"
msgstr "Genişləndirilmiş ölçü dəstəyini istifadə etmək"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: ui/breezestyleconfig.ui:177
#, kde-format
msgid "Frames"
msgstr "Çərçivələr"
#. i18n: ectx: property (text), widget (QCheckBox, _dockWidgetDrawFrame)
#: ui/breezestyleconfig.ui:183
#, kde-format
msgid "Draw frame around dockable panels"
msgstr "Yeridəyişdirilə bilən panel ətrafında çərçivələri göstərmək"
#. i18n: ectx: property (text), widget (QCheckBox, _sidePanelDrawFrame)
#: ui/breezestyleconfig.ui:190
#, kde-format
msgid "Draw frame around side panels"
msgstr "Yan panel ətrafında çərçivə göstərmək"
#. i18n: ectx: property (text), widget (QCheckBox, _menuItemDrawThinFocus)
#: ui/breezestyleconfig.ui:197
#, kde-format
msgid "Draw a thin line to indicate focus in menus and menubars"
msgstr "Menyu və menyu sətrlərindəki fokusu ayırmaq üçün incə xətti göstərmək"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: ui/breezestyleconfig.ui:218
#, kde-format
msgid "Scrollbars"
msgstr "Sürüşdürmə çubuqları"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarAddLineLabel)
#: ui/breezestyleconfig.ui:237
#, kde-format
msgid "Bottom arrow button t&ype:"
msgstr "Aşağıdakı dü&ymələr:"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarSubLineLabel)
#: ui/breezestyleconfig.ui:250
#, kde-format
msgid "&Top arrow button type:"
msgstr "Yuxarıdakı düy&mələr:"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:264 ui/breezestyleconfig.ui:283
#, kde-format
msgid "No Buttons"
msgstr "Düymələr yoxdur"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:269 ui/breezestyleconfig.ui:288
#, kde-format
msgid "One Button"
msgstr "Bir düymə"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:274 ui/breezestyleconfig.ui:293
#, kde-format
msgid "Two Buttons"
msgstr "İki düymə"
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
#: ui/breezestyleconfig.ui:315
#, kde-format
msgid "Transparency"
msgstr "Şəffaflıq"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityTransparentLabel)
#: ui/breezestyleconfig.ui:336
#, kde-format
msgid "Transparent"
msgstr "Şəffaf"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityOpaqueLabel)
#: ui/breezestyleconfig.ui:362
#, kde-format
msgid "Opaque"
msgstr "Qeyri-şəffaf"
#. i18n: ectx: property (text), widget (QLabel, _menuGroupDescription)
#: ui/breezestyleconfig.ui:373
#, kde-format
msgid "Menu:"
msgstr "Menyu:"
#~ msgid "Always Hide Keyboard Accelerators"
#~ msgstr "Həmişə gizlətmək"
#~ msgid "Show Keyboard Accelerators When Needed"
#~ msgstr "Lazım olduqda göstərmək"
#~ msgid "Always Show Keyboard Accelerators"
#~ msgstr "Həmişə göstərmək"
#~ msgid "Draw frame around page titles"
#~ msgstr "Səhifə başlığı ətrafında çərçivə göstərmək"
#~ msgid "Animations"
#~ msgstr "Animasiyalar"
#~ msgid "A&nimations duration:"
#~ msgstr "A&nimasiya müddəti:"
#~ msgid " ms"
#~ msgstr " msan"
#~ msgid "Enable animations"
#~ msgstr "Animasiyaları aktiv edin"

View file

@ -1,417 +0,0 @@
# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the breeze package.
#
# Mincho Kondarev <mkondarev@yahoo.de>, 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: breeze\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-03-04 02:12+0000\n"
"PO-Revision-Date: 2023-03-08 22:41+0100\n"
"Last-Translator: Mincho Kondarev <mkondarev@yahoo.de>\n"
"Language-Team: Bulgarian <kde-i18n-doc@kde.org>\n"
"Language: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 22.12.2\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: config/breezeexceptionlistwidget.cpp:88
#, kde-format
msgid "New Exception - Breeze Settings"
msgstr "Ново изключение - настройки за Breeze"
#: config/breezeexceptionlistwidget.cpp:136
#, kde-format
msgid "Edit Exception - Breeze Settings"
msgstr "Редактиране на изключение - настройки за Breeze"
#: config/breezeexceptionlistwidget.cpp:167
#, kde-format
msgid "Question - Breeze Settings"
msgstr "Въпрос - Настройки за Breeze"
#: config/breezeexceptionlistwidget.cpp:168
#, kde-format
msgid "Remove selected exception?"
msgstr "Да се ​​премахне ли избраното изключение?"
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
#: config/breezeexceptionlistwidget.cpp:170
#: config/ui/breezeexceptionlistwidget.ui:91
#, kde-format
msgid "Remove"
msgstr "Премахване"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Warning - Breeze Settings"
msgstr "Предупреждение - Настройки за Breeze"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Regular Expression syntax is incorrect"
msgstr "Синтаксисът на регулярния израз е неправилен"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Exception Type"
msgstr "Тип изключение"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Regular Expression"
msgstr "Регулярен израз"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:36 config/ui/breezeexceptiondialog.ui:72
#, kde-format
msgid "Window Title"
msgstr "Заглавие на прозореца"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:40 config/ui/breezeexceptiondialog.ui:67
#, kde-format
msgid "Window Class Name"
msgstr "Име на клас на прозореца"
#: config/breezeexceptionmodel.cpp:55
#, kde-format
msgid "Enable/disable this exception"
msgstr "Активиране/деактивиране на това изключение"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: config/ui/breezeconfigurationui.ui:33
#, kde-format
msgid "General"
msgstr "Общи"
#. i18n: ectx: property (text), widget (QLabel, label_3)
#: config/ui/breezeconfigurationui.ui:39
#, kde-format
msgid "Tit&le alignment:"
msgstr "Подравняване на за&главие:"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:53
#, kde-format
msgid "Left"
msgstr "Вляво"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:58
#, kde-format
msgid "Center"
msgstr "Центрирано"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:63
#, kde-format
msgid "Center (Full Width)"
msgstr "Центрирано (пълна ширина)"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:68
#, kde-format
msgid "Right"
msgstr "Вдясно"
#. i18n: ectx: property (text), widget (QLabel, label_4)
#: config/ui/breezeconfigurationui.ui:89
#, kde-format
msgid "B&utton size:"
msgstr "&Размер на бутона:"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#: config/ui/breezeconfigurationui.ui:103
#, kde-format
msgid "Tiny"
msgstr "Миниатюрен"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:108
#: config/ui/breezeconfigurationui.ui:221
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Small"
msgstr "Малък"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:113
#: config/ui/breezeconfigurationui.ui:226
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Medium"
msgstr "Среден"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:118
#: config/ui/breezeconfigurationui.ui:231
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Large"
msgstr "Голям"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:123
#: config/ui/breezeconfigurationui.ui:236
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Very Large"
msgstr "Много голям"
#. i18n: ectx: property (text), widget (QCheckBox, outlineCloseButton)
#: config/ui/breezeconfigurationui.ui:131
#, kde-format
msgid "Draw a circle around close button"
msgstr "Показване на окръжност около бутона за затваряне"
#. i18n: ectx: property (text), widget (QCheckBox, drawBorderOnMaximizedWindows)
#: config/ui/breezeconfigurationui.ui:138
#, kde-format
msgid "Draw border on maximized and tiled windows"
msgstr "Показване на рамки на максимизирани и подредени прозорци"
#. i18n: ectx: property (text), widget (QLabel, drawBorderOnMaximizedWindowsHelpLabel)
#: config/ui/breezeconfigurationui.ui:163
#, kde-format
msgid ""
"This setting will allow you to resize from window edges touching screen "
"edges. Scrollbars and window close buttons will shift positions and will not "
"touch screen edges."
msgstr ""
"Тази настройка ще ви позволи да променяте размера от краищата на прозореца, "
"докосвайки краищата на екрана. Лентите за превъртане и бутоните за затваряне "
"на прозореца ще променят позициите си и няма да докосват краищата на екрана."
#. i18n: ectx: property (text), widget (QCheckBox, drawBackgroundGradient)
#: config/ui/breezeconfigurationui.ui:175
#, kde-format
msgid "Draw titlebar background gradient"
msgstr "Показване на градиент на фона на заглавната лента"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: config/ui/breezeconfigurationui.ui:196
#, kde-format
msgid "Shadows and Outline"
msgstr "Сенки и очертания"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeconfigurationui.ui:202
#, kde-format
msgid "Shadow size:"
msgstr "Размер на сянка:"
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:216
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "None"
msgstr "Без"
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeconfigurationui.ui:244
#, kde-format
msgctxt "strength of the shadow (from transparent to opaque)"
msgid "Shadow strength:"
msgstr "Плътност на сянка:"
#. i18n: ectx: property (suffix), widget (QSpinBox, shadowStrength)
#: config/ui/breezeconfigurationui.ui:257
#, no-c-format, kde-format
msgid "%"
msgstr "%"
#. i18n: ectx: property (text), widget (QLabel, label_5)
#: config/ui/breezeconfigurationui.ui:283
#, kde-format
msgid "Shadow color:"
msgstr "Цвят на сенка:"
#. i18n: ectx: property (text), widget (QLabel, label_6)
#: config/ui/breezeconfigurationui.ui:296
#, kde-format
msgctxt "outline intensity"
msgid "Outline intensity:"
msgstr "Интензитет на очертание:"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:310
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Off"
msgstr "Изкл."
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:315
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Low"
msgstr "Ниска"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:320
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Medium"
msgstr "Средна"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:325
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "High"
msgstr "Висока"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:330
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Maximum"
msgstr "Максимална"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: config/ui/breezeconfigurationui.ui:352
#, kde-format
msgid "Window-Specific Overrides"
msgstr "Настройки, специфични за прозореца"
#. i18n: ectx: property (windowTitle), widget (QDialog, BreezeExceptionDialog)
#: config/ui/breezeexceptiondialog.ui:14
#, kde-format
msgid "Dialog"
msgstr "Диалогов прозорец"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#: config/ui/breezeexceptiondialog.ui:20
#, kde-format
msgid "Window Identification"
msgstr "Идентификация на прозорец"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeexceptiondialog.ui:26
#, kde-format
msgid "&Matching window property: "
msgstr "&Свойство на прозореца за съответствие: "
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeexceptiondialog.ui:39
#, kde-format
msgid "Regular expression &to match: "
msgstr "&Регулярен израз за съответствие: "
#. i18n: ectx: property (text), widget (QPushButton, detectDialogButton)
#: config/ui/breezeexceptiondialog.ui:52
#, kde-format
msgid "Detect Window Properties…"
msgstr "Определяне на свойствата на прозореца…"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
#: config/ui/breezeexceptiondialog.ui:83
#, kde-format
msgid "Decoration Options"
msgstr "Настройки за декорация"
#. i18n: ectx: property (text), widget (QCheckBox, borderSizeCheckBox)
#: config/ui/breezeexceptiondialog.ui:89
#, kde-format
msgid "Border size:"
msgstr "Размер на рамката:"
#. i18n: ectx: property (text), widget (QCheckBox, hideTitleBar)
#: config/ui/breezeexceptiondialog.ui:96
#, kde-format
msgid "Hide window title bar"
msgstr "Скриване на лентата със заглавия"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:107
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Border"
msgstr "Без рамка"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:112
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Side Borders"
msgstr "Без странична рамка"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:117
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Tiny"
msgstr "Миниатюрен"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:122
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Normal"
msgstr "Нормален"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:127
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Large"
msgstr "Голям"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:132
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Large"
msgstr "Много голям"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:137
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Huge"
msgstr "Огромен"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:142
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Huge"
msgstr "Много огромен"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:147
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Oversized"
msgstr "Свръх огромен"
#. i18n: ectx: property (text), widget (QPushButton, moveUpButton)
#: config/ui/breezeexceptionlistwidget.ui:70
#, kde-format
msgid "Move Up"
msgstr "Нагоре"
#. i18n: ectx: property (text), widget (QPushButton, moveDownButton)
#: config/ui/breezeexceptionlistwidget.ui:77
#, kde-format
msgid "Move Down"
msgstr "Надолу"
#. i18n: ectx: property (text), widget (QPushButton, addButton)
#: config/ui/breezeexceptionlistwidget.ui:84
#, kde-format
msgid "Add"
msgstr "Добавяне"
#. i18n: ectx: property (text), widget (QPushButton, editButton)
#: config/ui/breezeexceptionlistwidget.ui:98
#, kde-format
msgid "Edit"
msgstr "Редактиране"

View file

@ -1,198 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR This file is copyright:
# This file is distributed under the same license as the breeze package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: breeze\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-09-25 00:45+0000\n"
"PO-Revision-Date: 2022-02-11 19:34+0100\n"
"Last-Translator: mkkDr2010 <mkondarev@yahoo.de>\n"
"Language-Team: Bulgarian <kde-i18n-doc@kde.org>\n"
"Language: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 3.0.1\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: main.cpp:25 main.cpp:29
#, kde-format
msgid "Breeze Settings"
msgstr "Настройки за Breeze"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: ui/breezestyleconfig.ui:39
#, kde-format
msgid "General"
msgstr "Общи"
#. i18n: ectx: property (text), widget (QLabel, _windowDragLabel)
#: ui/breezestyleconfig.ui:51
#, kde-format
msgid "W&indows' drag mode:"
msgstr "Режим на &влачене на прозорци:"
#. i18n: ectx: property (text), widget (QCheckBox, _viewDrawFocusIndicator)
#: ui/breezestyleconfig.ui:64
#, kde-format
msgid "Draw focus indicator in lists"
msgstr "Показване на фокуса в списъците"
#. i18n: ectx: property (text), widget (QLabel, _mnemonicsLabel)
#: ui/breezestyleconfig.ui:71
#, kde-format
msgid "&Keyboard accelerators visibility:"
msgstr "&Показване на преките символи:"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:85
#, kde-format
msgid "Always hide"
msgstr "Винаги да се скрива"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:90
#, kde-format
msgid "Show when Alt key is pressed"
msgstr "Показване при натискане на Alt клавиш"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:95
#, kde-format
msgid "Always show"
msgstr "Винаги да се показва"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:117
#, kde-format
msgid "Drag windows from titlebar only"
msgstr "Влачене на прозорците само от заглавната лента"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:122
#, kde-format
msgid "Drag windows from titlebar, menubar and toolbars"
msgstr ""
"Влачене на прозорците от заглавната лента, менюто и лентите с инструменти"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:127
#, kde-format
msgid "Drag windows from all empty areas"
msgstr "Влачене на прозорците от всички празни области"
#. i18n: ectx: property (text), widget (QCheckBox, _tabBarDrawCenteredTabs)
#: ui/breezestyleconfig.ui:148
#, kde-format
msgid "Center tabbar tabs"
msgstr "Центриране табулаторите в лентата на раздели"
#. i18n: ectx: property (text), widget (QCheckBox, _toolBarDrawItemSeparator)
#: ui/breezestyleconfig.ui:155
#, kde-format
msgid "Draw toolbar item separators"
msgstr "Показване на разделители на елементите в лентата с инструменти"
#. i18n: ectx: property (text), widget (QCheckBox, _sliderDrawTickMarks)
#: ui/breezestyleconfig.ui:162
#, kde-format
msgid "Draw slider tick marks"
msgstr "Показване на отметки на плъзгачите"
#. i18n: ectx: property (text), widget (QCheckBox, _splitterProxyEnabled)
#: ui/breezestyleconfig.ui:169
#, kde-format
msgid "Enable extended resize handles"
msgstr "Активиране на разширени ленти за преоразмеряване"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: ui/breezestyleconfig.ui:177
#, kde-format
msgid "Frames"
msgstr "Рамки"
#. i18n: ectx: property (text), widget (QCheckBox, _dockWidgetDrawFrame)
#: ui/breezestyleconfig.ui:183
#, kde-format
msgid "Draw frame around dockable panels"
msgstr "Показване на рамки около панелните приставки"
#. i18n: ectx: property (text), widget (QCheckBox, _sidePanelDrawFrame)
#: ui/breezestyleconfig.ui:190
#, kde-format
msgid "Draw frame around side panels"
msgstr "Показване на рамки около страничните ленти"
#. i18n: ectx: property (text), widget (QCheckBox, _menuItemDrawThinFocus)
#: ui/breezestyleconfig.ui:197
#, kde-format
msgid "Draw a thin line to indicate focus in menus and menubars"
msgstr ""
"Показване на тънка линия, за да указване на фокуса в менютата и лентите с "
"менюта"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: ui/breezestyleconfig.ui:218
#, kde-format
msgid "Scrollbars"
msgstr "Ленти за превъртане"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarAddLineLabel)
#: ui/breezestyleconfig.ui:237
#, kde-format
msgid "Bottom arrow button t&ype:"
msgstr "Бутон за &долна стрелка:"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarSubLineLabel)
#: ui/breezestyleconfig.ui:250
#, kde-format
msgid "&Top arrow button type:"
msgstr "Бутон за &горна стрелка:"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:264 ui/breezestyleconfig.ui:283
#, kde-format
msgid "No Buttons"
msgstr "Без бутони"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:269 ui/breezestyleconfig.ui:288
#, kde-format
msgid "One Button"
msgstr "Един бутон"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:274 ui/breezestyleconfig.ui:293
#, kde-format
msgid "Two Buttons"
msgstr "Два бутона"
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
#: ui/breezestyleconfig.ui:315
#, kde-format
msgid "Transparency"
msgstr "Прозрачност"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityTransparentLabel)
#: ui/breezestyleconfig.ui:336
#, kde-format
msgid "Transparent"
msgstr "Прозрачен"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityOpaqueLabel)
#: ui/breezestyleconfig.ui:362
#, kde-format
msgid "Opaque"
msgstr "Непрозрачен"
#. i18n: ectx: property (text), widget (QLabel, _menuGroupDescription)
#: ui/breezestyleconfig.ui:373
#, kde-format
msgid "Menu:"
msgstr "Меню:"

View file

@ -1,465 +0,0 @@
# Bosnian translations for PACKAGE package
# engleski prevodi za paket PACKAGE.
# Copyright (C) 2015 This_file_is_part_of_KDE
# This file is distributed under the same license as the PACKAGE package.
# Samir ribic <megaribi@localhost>, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: kde5\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-03-04 02:12+0000\n"
"PO-Revision-Date: 2015-02-24 20:36+0100\n"
"Last-Translator: Samir Ribić <megaribi@epn.ba>\n"
"Language-Team: Bosnian\n"
"Language: bs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#: config/breezeexceptionlistwidget.cpp:88
#, fuzzy, kde-format
#| msgid "New Exception - Oxygen Settings"
msgid "New Exception - Breeze Settings"
msgstr "Novi izuzetak - Oxigen postavke"
#: config/breezeexceptionlistwidget.cpp:136
#, fuzzy, kde-format
#| msgid "Edit Exception - Oxygen Settings"
msgid "Edit Exception - Breeze Settings"
msgstr "Uredi izuzetak - Oxigen postavke"
#: config/breezeexceptionlistwidget.cpp:167
#, fuzzy, kde-format
#| msgid "Question - Oxygen Settings"
msgid "Question - Breeze Settings"
msgstr "Pitanje - Oxygen postavke"
#: config/breezeexceptionlistwidget.cpp:168
#, kde-format
msgid "Remove selected exception?"
msgstr "Ukloniti izabrani izuzetak?"
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
#: config/breezeexceptionlistwidget.cpp:170
#: config/ui/breezeexceptionlistwidget.ui:91
#, kde-format
msgid "Remove"
msgstr "Ukloni"
#: config/breezeexceptionlistwidget.cpp:300
#, fuzzy, kde-format
#| msgid "Warning - Oxygen Settings"
msgid "Warning - Breeze Settings"
msgstr "Upozorenje - Oxygen postavke"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Regular Expression syntax is incorrect"
msgstr "Loša sintaksa regularnog izraza"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Exception Type"
msgstr "tip izuzetka"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Regular Expression"
msgstr "regularni izraz"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:36 config/ui/breezeexceptiondialog.ui:72
#, kde-format
msgid "Window Title"
msgstr "naslov prozora"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:40 config/ui/breezeexceptiondialog.ui:67
#, kde-format
msgid "Window Class Name"
msgstr "ime klase prozora"
#: config/breezeexceptionmodel.cpp:55
#, kde-format
msgid "Enable/disable this exception"
msgstr "Uključi/isključi ovaj izuzetak"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: config/ui/breezeconfigurationui.ui:33
#, kde-format
msgid "General"
msgstr "Općenito"
#. i18n: ectx: property (text), widget (QLabel, label_3)
#: config/ui/breezeconfigurationui.ui:39
#, kde-format
msgid "Tit&le alignment:"
msgstr "&Poravnanje naslova:"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:53
#, kde-format
msgid "Left"
msgstr "Lijevo"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:58
#, kde-format
msgid "Center"
msgstr "Centar"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:63
#, kde-format
msgid "Center (Full Width)"
msgstr "Centriraj (puna širina)"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:68
#, kde-format
msgid "Right"
msgstr "Desno"
#. i18n: ectx: property (text), widget (QLabel, label_4)
#: config/ui/breezeconfigurationui.ui:89
#, kde-format
msgid "B&utton size:"
msgstr "V&eličina dugmeta:"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#: config/ui/breezeconfigurationui.ui:103
#, fuzzy, kde-format
#| msgctxt "@item:inlistbox Border size:"
#| msgid "Tiny"
msgid "Tiny"
msgstr "sićušne"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:108
#: config/ui/breezeconfigurationui.ui:221
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Small"
msgstr "Mala"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:113
#: config/ui/breezeconfigurationui.ui:226
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Medium"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:118
#: config/ui/breezeconfigurationui.ui:231
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Large"
msgstr "Velika"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:123
#: config/ui/breezeconfigurationui.ui:236
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Very Large"
msgstr "vrlo velike"
#. i18n: ectx: property (text), widget (QCheckBox, outlineCloseButton)
#: config/ui/breezeconfigurationui.ui:131
#, kde-format
msgid "Draw a circle around close button"
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, drawBorderOnMaximizedWindows)
#: config/ui/breezeconfigurationui.ui:138
#, fuzzy, kde-format
#| msgid "Display window borders for maximized windows"
msgid "Draw border on maximized and tiled windows"
msgstr "Prikaži ivice prozora za maksimizirane prozore"
#. i18n: ectx: property (text), widget (QLabel, drawBorderOnMaximizedWindowsHelpLabel)
#: config/ui/breezeconfigurationui.ui:163
#, kde-format
msgid ""
"This setting will allow you to resize from window edges touching screen "
"edges. Scrollbars and window close buttons will shift positions and will not "
"touch screen edges."
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, drawBackgroundGradient)
#: config/ui/breezeconfigurationui.ui:175
#, kde-format
msgid "Draw titlebar background gradient"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: config/ui/breezeconfigurationui.ui:196
#, kde-format
msgid "Shadows and Outline"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeconfigurationui.ui:202
#, kde-format
msgid "Shadow size:"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:216
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "None"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeconfigurationui.ui:244
#, kde-format
msgctxt "strength of the shadow (from transparent to opaque)"
msgid "Shadow strength:"
msgstr ""
#. i18n: ectx: property (suffix), widget (QSpinBox, shadowStrength)
#: config/ui/breezeconfigurationui.ui:257
#, no-c-format, kde-format
msgid "%"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label_5)
#: config/ui/breezeconfigurationui.ui:283
#, kde-format
msgid "Shadow color:"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label_6)
#: config/ui/breezeconfigurationui.ui:296
#, kde-format
msgctxt "outline intensity"
msgid "Outline intensity:"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:310
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Off"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:315
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Low"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:320
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Medium"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:325
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "High"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:330
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Maximum"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: config/ui/breezeconfigurationui.ui:352
#, kde-format
msgid "Window-Specific Overrides"
msgstr "Potiskivanja posebna po prozoru"
#. i18n: ectx: property (windowTitle), widget (QDialog, BreezeExceptionDialog)
#: config/ui/breezeexceptiondialog.ui:14
#, kde-format
msgid "Dialog"
msgstr "Dijalog"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#: config/ui/breezeexceptiondialog.ui:20
#, kde-format
msgid "Window Identification"
msgstr "Identifikacija prozora"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeexceptiondialog.ui:26
#, kde-format
msgid "&Matching window property: "
msgstr "Svojstvo prozora za poklapanje: "
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeexceptiondialog.ui:39
#, kde-format
msgid "Regular expression &to match: "
msgstr "Regularni izraz za poklapanje: "
#. i18n: ectx: property (text), widget (QPushButton, detectDialogButton)
#: config/ui/breezeexceptiondialog.ui:52
#, fuzzy, kde-format
#| msgid "Detect Window Properties"
msgid "Detect Window Properties…"
msgstr "Otkrij svojstva prozora"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
#: config/ui/breezeexceptiondialog.ui:83
#, kde-format
msgid "Decoration Options"
msgstr "Dekorativne opcije"
#. i18n: ectx: property (text), widget (QCheckBox, borderSizeCheckBox)
#: config/ui/breezeexceptiondialog.ui:89
#, kde-format
msgid "Border size:"
msgstr "Veličina ivica:"
#. i18n: ectx: property (text), widget (QCheckBox, hideTitleBar)
#: config/ui/breezeexceptiondialog.ui:96
#, kde-format
msgid "Hide window title bar"
msgstr "Bez naslovne trake prozora"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:107
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Border"
msgstr "Nema ivice"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:112
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Side Borders"
msgstr "Bez bočnih ivica"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:117
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Tiny"
msgstr "sićušne"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:122
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Normal"
msgstr "Normalno"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:127
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Large"
msgstr "Velika"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:132
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Large"
msgstr "vrlo velike"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:137
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Huge"
msgstr "Ogromna"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:142
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Huge"
msgstr "vrlo ogromne"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:147
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Oversized"
msgstr "neizmjerne"
#. i18n: ectx: property (text), widget (QPushButton, moveUpButton)
#: config/ui/breezeexceptionlistwidget.ui:70
#, kde-format
msgid "Move Up"
msgstr "Pomjeri nagore"
#. i18n: ectx: property (text), widget (QPushButton, moveDownButton)
#: config/ui/breezeexceptionlistwidget.ui:77
#, kde-format
msgid "Move Down"
msgstr "Pomjeri nadolje"
#. i18n: ectx: property (text), widget (QPushButton, addButton)
#: config/ui/breezeexceptionlistwidget.ui:84
#, kde-format
msgid "Add"
msgstr "Dodaj"
#. i18n: ectx: property (text), widget (QPushButton, editButton)
#: config/ui/breezeexceptionlistwidget.ui:98
#, kde-format
msgid "Edit"
msgstr "Izmijeni"
#~ msgid "Add handle to resize windows with no border"
#~ msgstr "Dodaj dršku za raširivanje prozora bez ivica"
#~ msgid "Information about Selected Window"
#~ msgstr "Podaci o izabranom prozoru"
#~ msgid "Class: "
#~ msgstr "Klasa: "
#~ msgid "Title: "
#~ msgstr "Naslov: "
#~ msgid "Window Property Selection"
#~ msgstr "Izbor svojstva prozora"
#~ msgid "Use window class (whole application)"
#~ msgstr "Po klasi prozora (cio program)"
#~ msgid "Use window title"
#~ msgstr "Po naslovu prozora"
#~ msgid "Animations"
#~ msgstr "Animacije"
#, fuzzy
#~| msgid "&Animations duration:"
#~ msgid "Anima&tions duration:"
#~ msgstr "Trajannje &animacije:"
#, fuzzy
#~| msgid "ms"
#~ msgid " ms"
#~ msgstr "ms"
#~ msgid "Enable animations"
#~ msgstr "Omogući animacije"
#~ msgctxt "@item:inlistbox Button size:"
#~ msgid "Normal"
#~ msgstr "Normalno"

View file

@ -1,232 +0,0 @@
# Bosnian translation for bosnianuniversetranslation
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the bosnianuniversetranslation package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: bosnianuniversetranslation\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-09-25 00:45+0000\n"
"PO-Revision-Date: 2015-02-05 00:36+0000\n"
"Last-Translator: Samir Ribić <Unknown>\n"
"Language-Team: Bosnian <bs@li.org>\n"
"Language: bs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2015-02-05 07:28+0000\n"
"X-Generator: Launchpad (build 17331)\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#: main.cpp:25 main.cpp:29
#, kde-format
msgid "Breeze Settings"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: ui/breezestyleconfig.ui:39
#, kde-format
msgid "General"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, _windowDragLabel)
#: ui/breezestyleconfig.ui:51
#, kde-format
msgid "W&indows' drag mode:"
msgstr "P&rozor u stanju povlačenja:"
#. i18n: ectx: property (text), widget (QCheckBox, _viewDrawFocusIndicator)
#: ui/breezestyleconfig.ui:64
#, kde-format
msgid "Draw focus indicator in lists"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, _mnemonicsLabel)
#: ui/breezestyleconfig.ui:71
#, kde-format
msgid "&Keyboard accelerators visibility:"
msgstr "&Vidljivost akceleratora tastature:"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:85
#, kde-format
msgid "Always hide"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:90
#, kde-format
msgid "Show when Alt key is pressed"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:95
#, kde-format
msgid "Always show"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:117
#, kde-format
msgid "Drag windows from titlebar only"
msgstr "Povuci prozor samo preko naslovne trake"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:122
#, kde-format
msgid "Drag windows from titlebar, menubar and toolbars"
msgstr "Povuci prozor preko naslovne trake, trake menija i alatki"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:127
#, kde-format
msgid "Drag windows from all empty areas"
msgstr "Povuci prozor preko svih praznih područja"
#. i18n: ectx: property (text), widget (QCheckBox, _tabBarDrawCenteredTabs)
#: ui/breezestyleconfig.ui:148
#, kde-format
msgid "Center tabbar tabs"
msgstr "Centrirati kartice u traci kartica"
#. i18n: ectx: property (text), widget (QCheckBox, _toolBarDrawItemSeparator)
#: ui/breezestyleconfig.ui:155
#, kde-format
msgid "Draw toolbar item separators"
msgstr "Nacrtaj razdvajače elemenata alatne trake"
#. i18n: ectx: property (text), widget (QCheckBox, _sliderDrawTickMarks)
#: ui/breezestyleconfig.ui:162
#, kde-format
msgid "Draw slider tick marks"
msgstr "Nacrtaj oznaku klizača"
#. i18n: ectx: property (text), widget (QCheckBox, _splitterProxyEnabled)
#: ui/breezestyleconfig.ui:169
#, kde-format
msgid "Enable extended resize handles"
msgstr "Omogući proširene ručke za promjenu širine"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: ui/breezestyleconfig.ui:177
#, kde-format
msgid "Frames"
msgstr "Okviri"
#. i18n: ectx: property (text), widget (QCheckBox, _dockWidgetDrawFrame)
#: ui/breezestyleconfig.ui:183
#, kde-format
msgid "Draw frame around dockable panels"
msgstr "Nacrtaj okvir oko dockable panela"
#. i18n: ectx: property (text), widget (QCheckBox, _sidePanelDrawFrame)
#: ui/breezestyleconfig.ui:190
#, kde-format
msgid "Draw frame around side panels"
msgstr "Nacrtaj okvir oko bočnih panela"
#. i18n: ectx: property (text), widget (QCheckBox, _menuItemDrawThinFocus)
#: ui/breezestyleconfig.ui:197
#, kde-format
msgid "Draw a thin line to indicate focus in menus and menubars"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: ui/breezestyleconfig.ui:218
#, kde-format
msgid "Scrollbars"
msgstr "Klizne trake"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarAddLineLabel)
#: ui/breezestyleconfig.ui:237
#, fuzzy, kde-format
#| msgid "Botto&m arrow button type:"
msgid "Bottom arrow button t&ype:"
msgstr "Tip dugmeta donj&a strelica:"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarSubLineLabel)
#: ui/breezestyleconfig.ui:250
#, kde-format
msgid "&Top arrow button type:"
msgstr "&Tip dugmeta gornja strijelica:"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:264 ui/breezestyleconfig.ui:283
#, kde-format
msgid "No Buttons"
msgstr "Bez dugmeta"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:269 ui/breezestyleconfig.ui:288
#, kde-format
msgid "One Button"
msgstr "Jedno dugme"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:274 ui/breezestyleconfig.ui:293
#, kde-format
msgid "Two Buttons"
msgstr "Dva dugmeta"
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
#: ui/breezestyleconfig.ui:315
#, kde-format
msgid "Transparency"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityTransparentLabel)
#: ui/breezestyleconfig.ui:336
#, kde-format
msgid "Transparent"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityOpaqueLabel)
#: ui/breezestyleconfig.ui:362
#, kde-format
msgid "Opaque"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, _menuGroupDescription)
#: ui/breezestyleconfig.ui:373
#, kde-format
msgid "Menu:"
msgstr ""
#~ msgid "Always Hide Keyboard Accelerators"
#~ msgstr "Uvijek sakrij akceleratore tastature"
#~ msgid "Show Keyboard Accelerators When Needed"
#~ msgstr "Prikaži akceleratore tastature kada je potrebno"
#~ msgid "Always Show Keyboard Accelerators"
#~ msgstr "Uvijek prikaži akceleratore tastature"
#~ msgid "Draw frame around page titles"
#~ msgstr "Nacrtaj okvir oko naslova stranice"
#~ msgid "Animations"
#~ msgstr "Animacije"
#, fuzzy
#~| msgid "Animations d&uration:"
#~ msgid "A&nimations duration:"
#~ msgstr "T&rajanje animacije:"
#, fuzzy
#~| msgid "ms"
#~ msgid " ms"
#~ msgstr "ms"
#~ msgid "Enable animations"
#~ msgstr "Omogući animacije"
#~ msgid "Advanced"
#~ msgstr "Napredno"
#~ msgid "Form"
#~ msgstr "Forma"

View file

@ -1,424 +0,0 @@
# Translation of breeze_kwin_deco.po to Catalan
# Copyright (C) 2014-2023 This_file_is_part_of_KDE
# This file is distributed under the license LGPL version 2.1 or
# version 3 or later versions approved by the membership of KDE e.V.
#
# Josep M. Ferrer <txemaq@gmail.com>, 2014, 2015, 2016, 2017, 2018, 2020, 2022, 2023.
# Antoni Bella Pérez <antonibella5@yahoo.com>, 2015, 2018, 2020, 2022.
# Empar Montoro Martín <montoro_mde@gva.es>, 2019.
msgid ""
msgstr ""
"Project-Id-Version: breeze\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-03-04 02:12+0000\n"
"PO-Revision-Date: 2023-03-05 12:43+0100\n"
"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Accelerator-Marker: &\n"
"X-Generator: Lokalize 20.12.0\n"
#: config/breezeexceptionlistwidget.cpp:88
#, kde-format
msgid "New Exception - Breeze Settings"
msgstr "Excepció nova - Configuració del Brisa"
#: config/breezeexceptionlistwidget.cpp:136
#, kde-format
msgid "Edit Exception - Breeze Settings"
msgstr "Edita l'excepció - Configuració del Brisa"
#: config/breezeexceptionlistwidget.cpp:167
#, kde-format
msgid "Question - Breeze Settings"
msgstr "Pregunta - Configuració del Brisa"
#: config/breezeexceptionlistwidget.cpp:168
#, kde-format
msgid "Remove selected exception?"
msgstr "Elimino l'excepció seleccionada?"
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
#: config/breezeexceptionlistwidget.cpp:170
#: config/ui/breezeexceptionlistwidget.ui:91
#, kde-format
msgid "Remove"
msgstr "Elimina"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Warning - Breeze Settings"
msgstr "Avís - Configuració del Brisa"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Regular Expression syntax is incorrect"
msgstr "La sintaxi de l'expressió regular no és correcta"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Exception Type"
msgstr "Tipus d'excepció"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Regular Expression"
msgstr "Expressió regular"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:36 config/ui/breezeexceptiondialog.ui:72
#, kde-format
msgid "Window Title"
msgstr "Títol de la finestra"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:40 config/ui/breezeexceptiondialog.ui:67
#, kde-format
msgid "Window Class Name"
msgstr "Nom de la classe de finestra"
#: config/breezeexceptionmodel.cpp:55
#, kde-format
msgid "Enable/disable this exception"
msgstr "Habilita/inhabilita aquesta excepció"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: config/ui/breezeconfigurationui.ui:33
#, kde-format
msgid "General"
msgstr "General"
#. i18n: ectx: property (text), widget (QLabel, label_3)
#: config/ui/breezeconfigurationui.ui:39
#, kde-format
msgid "Tit&le alignment:"
msgstr "A&lineació del títol:"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:53
#, kde-format
msgid "Left"
msgstr "Esquerra"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:58
#, kde-format
msgid "Center"
msgstr "Centre"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:63
#, kde-format
msgid "Center (Full Width)"
msgstr "Centre (amplada completa)"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:68
#, kde-format
msgid "Right"
msgstr "Dreta"
#. i18n: ectx: property (text), widget (QLabel, label_4)
#: config/ui/breezeconfigurationui.ui:89
#, kde-format
msgid "B&utton size:"
msgstr "Mida dels b&otons:"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#: config/ui/breezeconfigurationui.ui:103
#, kde-format
msgid "Tiny"
msgstr "Minúscul"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:108
#: config/ui/breezeconfigurationui.ui:221
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Small"
msgstr "Petit"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:113
#: config/ui/breezeconfigurationui.ui:226
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Medium"
msgstr "Mitjà"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:118
#: config/ui/breezeconfigurationui.ui:231
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Large"
msgstr "Gran"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:123
#: config/ui/breezeconfigurationui.ui:236
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Very Large"
msgstr "Molt gran"
#. i18n: ectx: property (text), widget (QCheckBox, outlineCloseButton)
#: config/ui/breezeconfigurationui.ui:131
#, kde-format
msgid "Draw a circle around close button"
msgstr "Dibuixa un cercle al voltant del botó de tancament"
#. i18n: ectx: property (text), widget (QCheckBox, drawBorderOnMaximizedWindows)
#: config/ui/breezeconfigurationui.ui:138
#, kde-format
msgid "Draw border on maximized and tiled windows"
msgstr ""
"Dibuixa les vores de les finestres en les finestres maximitzades i en mosaic"
#. i18n: ectx: property (text), widget (QLabel, drawBorderOnMaximizedWindowsHelpLabel)
#: config/ui/breezeconfigurationui.ui:163
#, kde-format
msgid ""
"This setting will allow you to resize from window edges touching screen "
"edges. Scrollbars and window close buttons will shift positions and will not "
"touch screen edges."
msgstr ""
"Aquest paràmetre permet redimensionar des de les vores de la finestra tocant "
"les vores de la pantalla. Les barres de desplaçament i els botons de "
"tancament de la finestra intercanvien les posicions i no toquen les vores de "
"la pantalla."
#. i18n: ectx: property (text), widget (QCheckBox, drawBackgroundGradient)
#: config/ui/breezeconfigurationui.ui:175
#, kde-format
msgid "Draw titlebar background gradient"
msgstr "Dibuixa el degradat del fons de la barra de títol"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: config/ui/breezeconfigurationui.ui:196
#, kde-format
msgid "Shadows and Outline"
msgstr "Ombres i contorn"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeconfigurationui.ui:202
#, kde-format
msgid "Shadow size:"
msgstr "Mida de l'ombra:"
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:216
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "None"
msgstr "Sense"
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeconfigurationui.ui:244
#, kde-format
msgctxt "strength of the shadow (from transparent to opaque)"
msgid "Shadow strength:"
msgstr "Intensitat de l'ombra:"
#. i18n: ectx: property (suffix), widget (QSpinBox, shadowStrength)
#: config/ui/breezeconfigurationui.ui:257
#, no-c-format, kde-format
msgid "%"
msgstr "%"
#. i18n: ectx: property (text), widget (QLabel, label_5)
#: config/ui/breezeconfigurationui.ui:283
#, kde-format
msgid "Shadow color:"
msgstr "Color de l'ombra:"
#. i18n: ectx: property (text), widget (QLabel, label_6)
#: config/ui/breezeconfigurationui.ui:296
#, kde-format
msgctxt "outline intensity"
msgid "Outline intensity:"
msgstr "Intensitat del contorn:"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:310
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Off"
msgstr "Inactiva"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:315
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Low"
msgstr "Baixa"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:320
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Medium"
msgstr "Mitjana"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:325
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "High"
msgstr "Alta"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:330
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Maximum"
msgstr "Màxima"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: config/ui/breezeconfigurationui.ui:352
#, kde-format
msgid "Window-Specific Overrides"
msgstr "Substitucions específiques de la finestra"
#. i18n: ectx: property (windowTitle), widget (QDialog, BreezeExceptionDialog)
#: config/ui/breezeexceptiondialog.ui:14
#, kde-format
msgid "Dialog"
msgstr "Diàleg"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#: config/ui/breezeexceptiondialog.ui:20
#, kde-format
msgid "Window Identification"
msgstr "Identificació de la finestra"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeexceptiondialog.ui:26
#, kde-format
msgid "&Matching window property: "
msgstr "&Propietat de coincidència de les finestres: "
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeexceptiondialog.ui:39
#, kde-format
msgid "Regular expression &to match: "
msgstr "Expressió regular que h&a de coincidir: "
#. i18n: ectx: property (text), widget (QPushButton, detectDialogButton)
#: config/ui/breezeexceptiondialog.ui:52
#, kde-format
msgid "Detect Window Properties…"
msgstr "Detecta les propietats de la finestra…"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
#: config/ui/breezeexceptiondialog.ui:83
#, kde-format
msgid "Decoration Options"
msgstr "Opcions de decoració"
#. i18n: ectx: property (text), widget (QCheckBox, borderSizeCheckBox)
#: config/ui/breezeexceptiondialog.ui:89
#, kde-format
msgid "Border size:"
msgstr "Mida de la vora:"
#. i18n: ectx: property (text), widget (QCheckBox, hideTitleBar)
#: config/ui/breezeexceptiondialog.ui:96
#, kde-format
msgid "Hide window title bar"
msgstr "Oculta la barra de títol de la finestra"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:107
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Border"
msgstr "Sense vores"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:112
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Side Borders"
msgstr "Sense vores laterals"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:117
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Tiny"
msgstr "Minúscula"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:122
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Normal"
msgstr "Normal"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:127
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Large"
msgstr "Gran"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:132
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Large"
msgstr "Molt gran"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:137
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Huge"
msgstr "Enorme"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:142
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Huge"
msgstr "Molt enorme"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:147
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Oversized"
msgstr "Fora de mida"
#. i18n: ectx: property (text), widget (QPushButton, moveUpButton)
#: config/ui/breezeexceptionlistwidget.ui:70
#, kde-format
msgid "Move Up"
msgstr "Mou amunt"
#. i18n: ectx: property (text), widget (QPushButton, moveDownButton)
#: config/ui/breezeexceptionlistwidget.ui:77
#, kde-format
msgid "Move Down"
msgstr "Mou avall"
#. i18n: ectx: property (text), widget (QPushButton, addButton)
#: config/ui/breezeexceptionlistwidget.ui:84
#, kde-format
msgid "Add"
msgstr "Afegeix"
#. i18n: ectx: property (text), widget (QPushButton, editButton)
#: config/ui/breezeexceptionlistwidget.ui:98
#, kde-format
msgid "Edit"
msgstr "Edita"

View file

@ -1,202 +0,0 @@
# Translation of breeze_style_config.po to Catalan
# Copyright (C) 2014-2022 This_file_is_part_of_KDE
# This file is distributed under the license LGPL version 2.1 or
# version 3 or later versions approved by the membership of KDE e.V.
#
# Antoni Bella Pérez <antonibella5@yahoo.com>, 2014, 2015, 2017, 2020, 2022.
# Josep M. Ferrer <txemaq@gmail.com>, 2014, 2015, 2016, 2017, 2018, 2021, 2022.
# Alfredo Vicente <alviboi@gmail.com>, 2019.
msgid ""
msgstr ""
"Project-Id-Version: breeze\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-09-25 00:45+0000\n"
"PO-Revision-Date: 2022-03-28 01:41+0200\n"
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Accelerator-Marker: &\n"
"X-Generator: Lokalize 21.12.3\n"
#: main.cpp:25 main.cpp:29
#, kde-format
msgid "Breeze Settings"
msgstr "Configuració del Brisa"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: ui/breezestyleconfig.ui:39
#, kde-format
msgid "General"
msgstr "General"
#. i18n: ectx: property (text), widget (QLabel, _windowDragLabel)
#: ui/breezestyleconfig.ui:51
#, kde-format
msgid "W&indows' drag mode:"
msgstr "Mode d'arrossegament de les f&inestres:"
#. i18n: ectx: property (text), widget (QCheckBox, _viewDrawFocusIndicator)
#: ui/breezestyleconfig.ui:64
#, kde-format
msgid "Draw focus indicator in lists"
msgstr "Dibuixa l'indicador de focus en les llistes"
#. i18n: ectx: property (text), widget (QLabel, _mnemonicsLabel)
#: ui/breezestyleconfig.ui:71
#, kde-format
msgid "&Keyboard accelerators visibility:"
msgstr "Visibilitat dels a&cceleradors de teclat:"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:85
#, kde-format
msgid "Always hide"
msgstr "Oculta sempre"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:90
#, kde-format
msgid "Show when Alt key is pressed"
msgstr "Mostra quan es premi la tecla Alt"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:95
#, kde-format
msgid "Always show"
msgstr "Mostra sempre"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:117
#, kde-format
msgid "Drag windows from titlebar only"
msgstr "Arrossega les finestres només per la barra de títol"
# skip-rule: kct-menubar,kct-toolbar
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:122
#, kde-format
msgid "Drag windows from titlebar, menubar and toolbars"
msgstr "Arrossega les finestres per les barres de títol, de menús i d'eines"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:127
#, kde-format
msgid "Drag windows from all empty areas"
msgstr "Arrossega les finestres per les àrees buides"
#. i18n: ectx: property (text), widget (QCheckBox, _tabBarDrawCenteredTabs)
#: ui/breezestyleconfig.ui:148
#, kde-format
msgid "Center tabbar tabs"
msgstr "Centra les pestanyes a la barra de pestanyes"
#. i18n: ectx: property (text), widget (QCheckBox, _toolBarDrawItemSeparator)
#: ui/breezestyleconfig.ui:155
#, kde-format
msgid "Draw toolbar item separators"
msgstr "Dibuixa els separadors de les barres d'eines"
#. i18n: ectx: property (text), widget (QCheckBox, _sliderDrawTickMarks)
#: ui/breezestyleconfig.ui:162
#, kde-format
msgid "Draw slider tick marks"
msgstr "Dibuixa les marques de verificació als controls lliscants"
#. i18n: ectx: property (text), widget (QCheckBox, _splitterProxyEnabled)
#: ui/breezestyleconfig.ui:169
#, kde-format
msgid "Enable extended resize handles"
msgstr "Activa les nanses de redimensionament ampliades"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: ui/breezestyleconfig.ui:177
#, kde-format
msgid "Frames"
msgstr "Marcs"
#. i18n: ectx: property (text), widget (QCheckBox, _dockWidgetDrawFrame)
#: ui/breezestyleconfig.ui:183
#, kde-format
msgid "Draw frame around dockable panels"
msgstr "Dibuixa un marc al voltant dels plafons acoblables"
#. i18n: ectx: property (text), widget (QCheckBox, _sidePanelDrawFrame)
#: ui/breezestyleconfig.ui:190
#, kde-format
msgid "Draw frame around side panels"
msgstr "Dibuixa un marc al voltant dels plafons laterals"
#. i18n: ectx: property (text), widget (QCheckBox, _menuItemDrawThinFocus)
#: ui/breezestyleconfig.ui:197
#, kde-format
msgid "Draw a thin line to indicate focus in menus and menubars"
msgstr ""
"Dibuixa una línia fina per a indicar el focus en els menús i les barres de "
"menús"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: ui/breezestyleconfig.ui:218
#, kde-format
msgid "Scrollbars"
msgstr "Barres de desplaçament"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarAddLineLabel)
#: ui/breezestyleconfig.ui:237
#, kde-format
msgid "Bottom arrow button t&ype:"
msgstr "T&ipus de botó de la fletxa inferior:"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarSubLineLabel)
#: ui/breezestyleconfig.ui:250
#, kde-format
msgid "&Top arrow button type:"
msgstr "&Tipus de botó de la fletxa superior:"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:264 ui/breezestyleconfig.ui:283
#, kde-format
msgid "No Buttons"
msgstr "Sense botons"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:269 ui/breezestyleconfig.ui:288
#, kde-format
msgid "One Button"
msgstr "Un botó"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:274 ui/breezestyleconfig.ui:293
#, kde-format
msgid "Two Buttons"
msgstr "Dos botons"
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
#: ui/breezestyleconfig.ui:315
#, kde-format
msgid "Transparency"
msgstr "Transparència"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityTransparentLabel)
#: ui/breezestyleconfig.ui:336
#, kde-format
msgid "Transparent"
msgstr "Transparent"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityOpaqueLabel)
#: ui/breezestyleconfig.ui:362
#, kde-format
msgid "Opaque"
msgstr "Opac"
#. i18n: ectx: property (text), widget (QLabel, _menuGroupDescription)
#: ui/breezestyleconfig.ui:373
#, kde-format
msgid "Menu:"
msgstr "Menú:"

View file

@ -1,424 +0,0 @@
# Translation of breeze_kwin_deco.po to Catalan (Valencian)
# Copyright (C) 2014-2023 This_file_is_part_of_KDE
# This file is distributed under the license LGPL version 2.1 or
# version 3 or later versions approved by the membership of KDE e.V.
#
# Josep M. Ferrer <txemaq@gmail.com>, 2014, 2015, 2016, 2017, 2018, 2020, 2022, 2023.
# Antoni Bella Pérez <antonibella5@yahoo.com>, 2015, 2018, 2020, 2022.
# Empar Montoro Martín <montoro_mde@gva.es>, 2019.
msgid ""
msgstr ""
"Project-Id-Version: breeze\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-03-04 02:12+0000\n"
"PO-Revision-Date: 2023-03-05 12:43+0100\n"
"Last-Translator: Josep M. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
"Language: ca@valencia\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Accelerator-Marker: &\n"
"X-Generator: Lokalize 20.12.0\n"
#: config/breezeexceptionlistwidget.cpp:88
#, kde-format
msgid "New Exception - Breeze Settings"
msgstr "Excepció nova - Configuració de Brisa"
#: config/breezeexceptionlistwidget.cpp:136
#, kde-format
msgid "Edit Exception - Breeze Settings"
msgstr "Edita l'excepció - Configuració de Brisa"
#: config/breezeexceptionlistwidget.cpp:167
#, kde-format
msgid "Question - Breeze Settings"
msgstr "Pregunta - Configuració de Brisa"
#: config/breezeexceptionlistwidget.cpp:168
#, kde-format
msgid "Remove selected exception?"
msgstr "Voleu eliminar l'excepció seleccionada?"
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
#: config/breezeexceptionlistwidget.cpp:170
#: config/ui/breezeexceptionlistwidget.ui:91
#, kde-format
msgid "Remove"
msgstr "Elimina"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Warning - Breeze Settings"
msgstr "Avís - Configuració de Brisa"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Regular Expression syntax is incorrect"
msgstr "La sintaxi de l'expressió regular no és correcta"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Exception Type"
msgstr "Tipus d'excepció"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Regular Expression"
msgstr "Expressió regular"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:36 config/ui/breezeexceptiondialog.ui:72
#, kde-format
msgid "Window Title"
msgstr "Títol de la finestra"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:40 config/ui/breezeexceptiondialog.ui:67
#, kde-format
msgid "Window Class Name"
msgstr "Nom de la classe de finestra"
#: config/breezeexceptionmodel.cpp:55
#, kde-format
msgid "Enable/disable this exception"
msgstr "Habilita/inhabilita esta excepció"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: config/ui/breezeconfigurationui.ui:33
#, kde-format
msgid "General"
msgstr "General"
#. i18n: ectx: property (text), widget (QLabel, label_3)
#: config/ui/breezeconfigurationui.ui:39
#, kde-format
msgid "Tit&le alignment:"
msgstr "A&lineació del títol:"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:53
#, kde-format
msgid "Left"
msgstr "Esquerra"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:58
#, kde-format
msgid "Center"
msgstr "Centre"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:63
#, kde-format
msgid "Center (Full Width)"
msgstr "Centre (amplària completa)"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:68
#, kde-format
msgid "Right"
msgstr "Dreta"
#. i18n: ectx: property (text), widget (QLabel, label_4)
#: config/ui/breezeconfigurationui.ui:89
#, kde-format
msgid "B&utton size:"
msgstr "Mida dels b&otons:"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#: config/ui/breezeconfigurationui.ui:103
#, kde-format
msgid "Tiny"
msgstr "Minúscul"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:108
#: config/ui/breezeconfigurationui.ui:221
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Small"
msgstr "Xicotet"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:113
#: config/ui/breezeconfigurationui.ui:226
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Medium"
msgstr "Mitjà"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:118
#: config/ui/breezeconfigurationui.ui:231
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Large"
msgstr "Gran"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:123
#: config/ui/breezeconfigurationui.ui:236
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Very Large"
msgstr "Molt gran"
#. i18n: ectx: property (text), widget (QCheckBox, outlineCloseButton)
#: config/ui/breezeconfigurationui.ui:131
#, kde-format
msgid "Draw a circle around close button"
msgstr "Dibuixa un cercle al voltant del botó de tancament"
#. i18n: ectx: property (text), widget (QCheckBox, drawBorderOnMaximizedWindows)
#: config/ui/breezeconfigurationui.ui:138
#, kde-format
msgid "Draw border on maximized and tiled windows"
msgstr ""
"Dibuixa les vores de les finestres en les finestres maximitzades i en mosaic"
#. i18n: ectx: property (text), widget (QLabel, drawBorderOnMaximizedWindowsHelpLabel)
#: config/ui/breezeconfigurationui.ui:163
#, kde-format
msgid ""
"This setting will allow you to resize from window edges touching screen "
"edges. Scrollbars and window close buttons will shift positions and will not "
"touch screen edges."
msgstr ""
"Este paràmetre permet redimensionar des de les vores de la finestra tocant "
"les vores de la pantalla. Les barres de desplaçament i els botons de "
"tancament de la finestra intercanvien les posicions i no toquen les vores de "
"la pantalla."
#. i18n: ectx: property (text), widget (QCheckBox, drawBackgroundGradient)
#: config/ui/breezeconfigurationui.ui:175
#, kde-format
msgid "Draw titlebar background gradient"
msgstr "Dibuixa el degradat del fons de la barra de títol"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: config/ui/breezeconfigurationui.ui:196
#, kde-format
msgid "Shadows and Outline"
msgstr "Ombres i contorn"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeconfigurationui.ui:202
#, kde-format
msgid "Shadow size:"
msgstr "Mida de l'ombra:"
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:216
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "None"
msgstr "Sense"
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeconfigurationui.ui:244
#, kde-format
msgctxt "strength of the shadow (from transparent to opaque)"
msgid "Shadow strength:"
msgstr "Intensitat de l'ombra:"
#. i18n: ectx: property (suffix), widget (QSpinBox, shadowStrength)
#: config/ui/breezeconfigurationui.ui:257
#, no-c-format, kde-format
msgid "%"
msgstr "%"
#. i18n: ectx: property (text), widget (QLabel, label_5)
#: config/ui/breezeconfigurationui.ui:283
#, kde-format
msgid "Shadow color:"
msgstr "Color de l'ombra:"
#. i18n: ectx: property (text), widget (QLabel, label_6)
#: config/ui/breezeconfigurationui.ui:296
#, kde-format
msgctxt "outline intensity"
msgid "Outline intensity:"
msgstr "Intensitat del contorn:"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:310
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Off"
msgstr "Inactiva"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:315
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Low"
msgstr "Baixa"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:320
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Medium"
msgstr "Mitjana"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:325
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "High"
msgstr "Alta"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:330
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Maximum"
msgstr "Màxima"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: config/ui/breezeconfigurationui.ui:352
#, kde-format
msgid "Window-Specific Overrides"
msgstr "Substitucions específiques de la finestra"
#. i18n: ectx: property (windowTitle), widget (QDialog, BreezeExceptionDialog)
#: config/ui/breezeexceptiondialog.ui:14
#, kde-format
msgid "Dialog"
msgstr "Diàleg"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#: config/ui/breezeexceptiondialog.ui:20
#, kde-format
msgid "Window Identification"
msgstr "Identificació de la finestra"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeexceptiondialog.ui:26
#, kde-format
msgid "&Matching window property: "
msgstr "&Propietat de coincidència de les finestres: "
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeexceptiondialog.ui:39
#, kde-format
msgid "Regular expression &to match: "
msgstr "Expressió regular que h&a de coincidir: "
#. i18n: ectx: property (text), widget (QPushButton, detectDialogButton)
#: config/ui/breezeexceptiondialog.ui:52
#, kde-format
msgid "Detect Window Properties…"
msgstr "Detecta les propietats de la finestra…"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
#: config/ui/breezeexceptiondialog.ui:83
#, kde-format
msgid "Decoration Options"
msgstr "Opcions de decoració"
#. i18n: ectx: property (text), widget (QCheckBox, borderSizeCheckBox)
#: config/ui/breezeexceptiondialog.ui:89
#, kde-format
msgid "Border size:"
msgstr "Mida de la vora:"
#. i18n: ectx: property (text), widget (QCheckBox, hideTitleBar)
#: config/ui/breezeexceptiondialog.ui:96
#, kde-format
msgid "Hide window title bar"
msgstr "Oculta la barra de títol de la finestra"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:107
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Border"
msgstr "Sense vores"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:112
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Side Borders"
msgstr "Sense vores laterals"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:117
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Tiny"
msgstr "Minúscula"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:122
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Normal"
msgstr "Normal"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:127
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Large"
msgstr "Gran"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:132
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Large"
msgstr "Molt gran"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:137
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Huge"
msgstr "Enorme"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:142
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Huge"
msgstr "Molt enorme"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:147
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Oversized"
msgstr "Fora de mida"
#. i18n: ectx: property (text), widget (QPushButton, moveUpButton)
#: config/ui/breezeexceptionlistwidget.ui:70
#, kde-format
msgid "Move Up"
msgstr "Mou cap amunt"
#. i18n: ectx: property (text), widget (QPushButton, moveDownButton)
#: config/ui/breezeexceptionlistwidget.ui:77
#, kde-format
msgid "Move Down"
msgstr "Mou cap avall"
#. i18n: ectx: property (text), widget (QPushButton, addButton)
#: config/ui/breezeexceptionlistwidget.ui:84
#, kde-format
msgid "Add"
msgstr "Afig"
#. i18n: ectx: property (text), widget (QPushButton, editButton)
#: config/ui/breezeexceptionlistwidget.ui:98
#, kde-format
msgid "Edit"
msgstr "Edita"

View file

@ -1,202 +0,0 @@
# Translation of breeze_style_config.po to Catalan (Valencian)
# Copyright (C) 2014-2022 This_file_is_part_of_KDE
# This file is distributed under the license LGPL version 2.1 or
# version 3 or later versions approved by the membership of KDE e.V.
#
# Antoni Bella Pérez <antonibella5@yahoo.com>, 2014, 2015, 2017, 2020, 2022.
# Josep M. Ferrer <txemaq@gmail.com>, 2014, 2015, 2016, 2017, 2018, 2021, 2022.
# Alfredo Vicente <alviboi@gmail.com>, 2019.
msgid ""
msgstr ""
"Project-Id-Version: breeze\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-09-25 00:45+0000\n"
"PO-Revision-Date: 2022-03-28 01:41+0200\n"
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
"Language: ca@valencia\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Accelerator-Marker: &\n"
"X-Generator: Lokalize 21.12.3\n"
#: main.cpp:25 main.cpp:29
#, kde-format
msgid "Breeze Settings"
msgstr "Configuració de Brisa"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: ui/breezestyleconfig.ui:39
#, kde-format
msgid "General"
msgstr "General"
#. i18n: ectx: property (text), widget (QLabel, _windowDragLabel)
#: ui/breezestyleconfig.ui:51
#, kde-format
msgid "W&indows' drag mode:"
msgstr "Mode d'arrossegament de les f&inestres:"
#. i18n: ectx: property (text), widget (QCheckBox, _viewDrawFocusIndicator)
#: ui/breezestyleconfig.ui:64
#, kde-format
msgid "Draw focus indicator in lists"
msgstr "Dibuixa l'indicador de focus en les llistes"
#. i18n: ectx: property (text), widget (QLabel, _mnemonicsLabel)
#: ui/breezestyleconfig.ui:71
#, kde-format
msgid "&Keyboard accelerators visibility:"
msgstr "Visibilitat dels a&cceleradors de teclat:"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:85
#, kde-format
msgid "Always hide"
msgstr "Oculta sempre"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:90
#, kde-format
msgid "Show when Alt key is pressed"
msgstr "Mostra quan es prema la tecla Alt"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:95
#, kde-format
msgid "Always show"
msgstr "Mostra sempre"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:117
#, kde-format
msgid "Drag windows from titlebar only"
msgstr "Arrossega les finestres només per la barra de títol"
# skip-rule: kct-menubar,kct-toolbar
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:122
#, kde-format
msgid "Drag windows from titlebar, menubar and toolbars"
msgstr "Arrossega les finestres per les barres de títol, de menús i d'eines"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:127
#, kde-format
msgid "Drag windows from all empty areas"
msgstr "Arrossega les finestres per les àrees buides"
#. i18n: ectx: property (text), widget (QCheckBox, _tabBarDrawCenteredTabs)
#: ui/breezestyleconfig.ui:148
#, kde-format
msgid "Center tabbar tabs"
msgstr "Centra les pestanyes en la barra de pestanyes"
#. i18n: ectx: property (text), widget (QCheckBox, _toolBarDrawItemSeparator)
#: ui/breezestyleconfig.ui:155
#, kde-format
msgid "Draw toolbar item separators"
msgstr "Dibuixa els separadors de les barres d'eines"
#. i18n: ectx: property (text), widget (QCheckBox, _sliderDrawTickMarks)
#: ui/breezestyleconfig.ui:162
#, kde-format
msgid "Draw slider tick marks"
msgstr "Dibuixa les marques de verificació als controls lliscants"
#. i18n: ectx: property (text), widget (QCheckBox, _splitterProxyEnabled)
#: ui/breezestyleconfig.ui:169
#, kde-format
msgid "Enable extended resize handles"
msgstr "Activa les anses de redimensionament ampliades"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: ui/breezestyleconfig.ui:177
#, kde-format
msgid "Frames"
msgstr "Marcs"
#. i18n: ectx: property (text), widget (QCheckBox, _dockWidgetDrawFrame)
#: ui/breezestyleconfig.ui:183
#, kde-format
msgid "Draw frame around dockable panels"
msgstr "Dibuixa un marc al voltant dels quadros acoblables"
#. i18n: ectx: property (text), widget (QCheckBox, _sidePanelDrawFrame)
#: ui/breezestyleconfig.ui:190
#, kde-format
msgid "Draw frame around side panels"
msgstr "Dibuixa un marc al voltant dels quadros laterals"
#. i18n: ectx: property (text), widget (QCheckBox, _menuItemDrawThinFocus)
#: ui/breezestyleconfig.ui:197
#, kde-format
msgid "Draw a thin line to indicate focus in menus and menubars"
msgstr ""
"Dibuixa una línia fina per a indicar el focus en els menús i les barres de "
"menú"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: ui/breezestyleconfig.ui:218
#, kde-format
msgid "Scrollbars"
msgstr "Barres de desplaçament"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarAddLineLabel)
#: ui/breezestyleconfig.ui:237
#, kde-format
msgid "Bottom arrow button t&ype:"
msgstr "T&ipus de botó de la fletxa avall:"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarSubLineLabel)
#: ui/breezestyleconfig.ui:250
#, kde-format
msgid "&Top arrow button type:"
msgstr "&Tipus de botó de la fletxa amunt:"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:264 ui/breezestyleconfig.ui:283
#, kde-format
msgid "No Buttons"
msgstr "Sense botons"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:269 ui/breezestyleconfig.ui:288
#, kde-format
msgid "One Button"
msgstr "Un botó"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:274 ui/breezestyleconfig.ui:293
#, kde-format
msgid "Two Buttons"
msgstr "Dos botons"
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
#: ui/breezestyleconfig.ui:315
#, kde-format
msgid "Transparency"
msgstr "Transparència"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityTransparentLabel)
#: ui/breezestyleconfig.ui:336
#, kde-format
msgid "Transparent"
msgstr "Transparent"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityOpaqueLabel)
#: ui/breezestyleconfig.ui:362
#, kde-format
msgid "Opaque"
msgstr "Opac"
#. i18n: ectx: property (text), widget (QLabel, _menuGroupDescription)
#: ui/breezestyleconfig.ui:373
#, kde-format
msgid "Menu:"
msgstr "Menú:"

View file

@ -1,416 +0,0 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Lukáš Tinkl <lukas@kde.org>, 2010, 2011, 2012, 2013.
# Vít Pelčák <vit@pelcak.org>, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2023.
#
msgid ""
msgstr ""
"Project-Id-Version: kwin_clients\n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-03-04 02:12+0000\n"
"PO-Revision-Date: 2023-03-06 16:59+0100\n"
"Last-Translator: Vit Pelcak <vit@pelcak.org>\n"
"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Lokalize 22.12.3\n"
#: config/breezeexceptionlistwidget.cpp:88
#, kde-format
msgid "New Exception - Breeze Settings"
msgstr "Nová výjimka - Nastavení Breeze"
#: config/breezeexceptionlistwidget.cpp:136
#, kde-format
msgid "Edit Exception - Breeze Settings"
msgstr "Upravit výjimku - Nastavení Breeze"
#: config/breezeexceptionlistwidget.cpp:167
#, kde-format
msgid "Question - Breeze Settings"
msgstr "Otázka - Nastavení Breeze"
#: config/breezeexceptionlistwidget.cpp:168
#, kde-format
msgid "Remove selected exception?"
msgstr "Odebrat zvolenou výjimku?"
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
#: config/breezeexceptionlistwidget.cpp:170
#: config/ui/breezeexceptionlistwidget.ui:91
#, kde-format
msgid "Remove"
msgstr "Odstranit"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Warning - Breeze Settings"
msgstr "Varování - Nastavení Breeze"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Regular Expression syntax is incorrect"
msgstr "Syntaxe regulárního výrazu je nesprávná"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Exception Type"
msgstr "Typ výjimky"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Regular Expression"
msgstr "Regulární výraz"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:36 config/ui/breezeexceptiondialog.ui:72
#, kde-format
msgid "Window Title"
msgstr "Titulek okna"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:40 config/ui/breezeexceptiondialog.ui:67
#, kde-format
msgid "Window Class Name"
msgstr "Název třídy okna"
#: config/breezeexceptionmodel.cpp:55
#, kde-format
msgid "Enable/disable this exception"
msgstr "Povolit/zakázat tuto výjimku"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: config/ui/breezeconfigurationui.ui:33
#, kde-format
msgid "General"
msgstr "Obecné"
#. i18n: ectx: property (text), widget (QLabel, label_3)
#: config/ui/breezeconfigurationui.ui:39
#, kde-format
msgid "Tit&le alignment:"
msgstr "Zarovnání titu&lku:"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:53
#, kde-format
msgid "Left"
msgstr "Vlevo"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:58
#, kde-format
msgid "Center"
msgstr "Uprostřed"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:63
#, kde-format
msgid "Center (Full Width)"
msgstr "Na střed (plná šířka)"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:68
#, kde-format
msgid "Right"
msgstr "Vpravo"
#. i18n: ectx: property (text), widget (QLabel, label_4)
#: config/ui/breezeconfigurationui.ui:89
#, kde-format
msgid "B&utton size:"
msgstr "Velikost &tlačítka:"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#: config/ui/breezeconfigurationui.ui:103
#, kde-format
msgid "Tiny"
msgstr "Drobná"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:108
#: config/ui/breezeconfigurationui.ui:221
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Small"
msgstr "Malá"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:113
#: config/ui/breezeconfigurationui.ui:226
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Medium"
msgstr "Střední"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:118
#: config/ui/breezeconfigurationui.ui:231
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Large"
msgstr "Velká"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:123
#: config/ui/breezeconfigurationui.ui:236
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Very Large"
msgstr "Velmi velká"
#. i18n: ectx: property (text), widget (QCheckBox, outlineCloseButton)
#: config/ui/breezeconfigurationui.ui:131
#, kde-format
msgid "Draw a circle around close button"
msgstr "Kreslit kruh kolem tlačítka zavřít"
#. i18n: ectx: property (text), widget (QCheckBox, drawBorderOnMaximizedWindows)
#: config/ui/breezeconfigurationui.ui:138
#, kde-format
msgid "Draw border on maximized and tiled windows"
msgstr "Kreslit okraj maximalizovaných a dlaždicovaných oken"
#. i18n: ectx: property (text), widget (QLabel, drawBorderOnMaximizedWindowsHelpLabel)
#: config/ui/breezeconfigurationui.ui:163
#, kde-format
msgid ""
"This setting will allow you to resize from window edges touching screen "
"edges. Scrollbars and window close buttons will shift positions and will not "
"touch screen edges."
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, drawBackgroundGradient)
#: config/ui/breezeconfigurationui.ui:175
#, kde-format
msgid "Draw titlebar background gradient"
msgstr "Vykreslit přechod pruhu titulku okna"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: config/ui/breezeconfigurationui.ui:196
#, kde-format
msgid "Shadows and Outline"
msgstr "Stíny a obrys"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeconfigurationui.ui:202
#, kde-format
msgid "Shadow size:"
msgstr "Velikost stínu:"
# žádné parametry funkce v inspektoru funkcí
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:216
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "None"
msgstr "Žádný"
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeconfigurationui.ui:244
#, kde-format
msgctxt "strength of the shadow (from transparent to opaque)"
msgid "Shadow strength:"
msgstr "Síla stínu:"
#. i18n: ectx: property (suffix), widget (QSpinBox, shadowStrength)
#: config/ui/breezeconfigurationui.ui:257
#, no-c-format, kde-format
msgid "%"
msgstr "%"
#. i18n: ectx: property (text), widget (QLabel, label_5)
#: config/ui/breezeconfigurationui.ui:283
#, kde-format
msgid "Shadow color:"
msgstr "Barva stínu:"
#. i18n: ectx: property (text), widget (QLabel, label_6)
#: config/ui/breezeconfigurationui.ui:296
#, kde-format
msgctxt "outline intensity"
msgid "Outline intensity:"
msgstr "Intenzita obrysu:"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:310
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Off"
msgstr "Vypnuto"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:315
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Low"
msgstr "Nízká"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:320
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Medium"
msgstr "Střední"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:325
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "High"
msgstr "Vysoká"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:330
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Maximum"
msgstr "Maximum"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: config/ui/breezeconfigurationui.ui:352
#, kde-format
msgid "Window-Specific Overrides"
msgstr "Výjimky pro specifická okna"
#. i18n: ectx: property (windowTitle), widget (QDialog, BreezeExceptionDialog)
#: config/ui/breezeexceptiondialog.ui:14
#, kde-format
msgid "Dialog"
msgstr "Dialog"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#: config/ui/breezeexceptiondialog.ui:20
#, kde-format
msgid "Window Identification"
msgstr "Identifikace okna"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeexceptiondialog.ui:26
#, kde-format
msgid "&Matching window property: "
msgstr "Odpovídající vlastnost ok&na:"
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeexceptiondialog.ui:39
#, kde-format
msgid "Regular expression &to match: "
msgstr "Re&gulární výraz pro porovnání: "
#. i18n: ectx: property (text), widget (QPushButton, detectDialogButton)
#: config/ui/breezeexceptiondialog.ui:52
#, kde-format
msgid "Detect Window Properties…"
msgstr "Detekovat vlastnosti okna…"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
#: config/ui/breezeexceptiondialog.ui:83
#, kde-format
msgid "Decoration Options"
msgstr "Možnosti dekorace"
#. i18n: ectx: property (text), widget (QCheckBox, borderSizeCheckBox)
#: config/ui/breezeexceptiondialog.ui:89
#, kde-format
msgid "Border size:"
msgstr "Velikost okraje:"
#. i18n: ectx: property (text), widget (QCheckBox, hideTitleBar)
#: config/ui/breezeexceptiondialog.ui:96
#, kde-format
msgid "Hide window title bar"
msgstr "Skrýt titulkový pruh okna"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:107
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Border"
msgstr "Bez okrajů"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:112
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Side Borders"
msgstr "Bez postranních okrajů"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:117
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Tiny"
msgstr "Malá"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:122
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Normal"
msgstr "Normální"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:127
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Large"
msgstr "Velká"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:132
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Large"
msgstr "Velmi velká"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:137
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Huge"
msgstr "Obrovská"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:142
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Huge"
msgstr "Velmi obrovská"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:147
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Oversized"
msgstr "Nadměrná"
#. i18n: ectx: property (text), widget (QPushButton, moveUpButton)
#: config/ui/breezeexceptionlistwidget.ui:70
#, kde-format
msgid "Move Up"
msgstr "Přesunout nahoru"
#. i18n: ectx: property (text), widget (QPushButton, moveDownButton)
#: config/ui/breezeexceptionlistwidget.ui:77
#, kde-format
msgid "Move Down"
msgstr "Přesunout dolů"
#. i18n: ectx: property (text), widget (QPushButton, addButton)
#: config/ui/breezeexceptionlistwidget.ui:84
#, kde-format
msgid "Add"
msgstr "Přidat"
#. i18n: ectx: property (text), widget (QPushButton, editButton)
#: config/ui/breezeexceptionlistwidget.ui:98
#, kde-format
msgid "Edit"
msgstr "Upravit"

View file

@ -1,201 +0,0 @@
# Copyright (C) YEAR This_file_is_part_of_KDE
# This file is distributed under the same license as the PACKAGE package.
# Vít Pelčák <vit@pelcak.org>, 2014, 2015, 2016, 2017, 2018, 2019.
# Vit Pelcak <vit@pelcak.org>, 2021, 2022.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-09-25 00:45+0000\n"
"PO-Revision-Date: 2022-02-08 14:49+0100\n"
"Last-Translator: Vit Pelcak <vpelcak@suse.cz>\n"
"Language-Team: Czech <kde-i18n-doc@kde.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Lokalize 21.12.2\n"
"X-Language: cs_CZ\n"
"X-Source-Language: en_US\n"
#: main.cpp:25 main.cpp:29
#, kde-format
msgid "Breeze Settings"
msgstr "Nastavení Breeze"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: ui/breezestyleconfig.ui:39
#, kde-format
msgid "General"
msgstr "Obecné"
#. i18n: ectx: property (text), widget (QLabel, _windowDragLabel)
#: ui/breezestyleconfig.ui:51
#, kde-format
msgid "W&indows' drag mode:"
msgstr "Rež&im přesouvání oken:"
#. i18n: ectx: property (text), widget (QCheckBox, _viewDrawFocusIndicator)
#: ui/breezestyleconfig.ui:64
#, kde-format
msgid "Draw focus indicator in lists"
msgstr "Vykreslovat v seznamech ukazatel zaměření"
#. i18n: ectx: property (text), widget (QLabel, _mnemonicsLabel)
#: ui/breezestyleconfig.ui:71
#, kde-format
msgid "&Keyboard accelerators visibility:"
msgstr "&Viditelnost akcelerátorů klávesnice:"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:85
#, kde-format
msgid "Always hide"
msgstr "Vždy skrýt"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:90
#, kde-format
msgid "Show when Alt key is pressed"
msgstr "Zobrazit pokud je stisknuta klávesa Alt"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:95
#, kde-format
msgid "Always show"
msgstr "Vždy zobrazovat"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:117
#, kde-format
msgid "Drag windows from titlebar only"
msgstr "Přesouvat okna pouze z pruhu titulku"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:122
#, kde-format
msgid "Drag windows from titlebar, menubar and toolbars"
msgstr "Přesouvat okna z pruhu titulku, panelu nabídky a panelu nástrojů"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:127
#, kde-format
msgid "Drag windows from all empty areas"
msgstr "Přesouvat okna ze všech prázdných míst"
#. i18n: ectx: property (text), widget (QCheckBox, _tabBarDrawCenteredTabs)
#: ui/breezestyleconfig.ui:148
#, kde-format
msgid "Center tabbar tabs"
msgstr "Vystředit karty"
#. i18n: ectx: property (text), widget (QCheckBox, _toolBarDrawItemSeparator)
#: ui/breezestyleconfig.ui:155
#, kde-format
msgid "Draw toolbar item separators"
msgstr "Kreslit oddělovače položek panelu nástrojů"
#. i18n: ectx: property (text), widget (QCheckBox, _sliderDrawTickMarks)
#: ui/breezestyleconfig.ui:162
#, kde-format
msgid "Draw slider tick marks"
msgstr "Kreslit značky na posuvníku"
#. i18n: ectx: property (text), widget (QCheckBox, _splitterProxyEnabled)
#: ui/breezestyleconfig.ui:169
#, kde-format
msgid "Enable extended resize handles"
msgstr "Povolit rozšířené úchytky změny velikosti"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: ui/breezestyleconfig.ui:177
#, kde-format
msgid "Frames"
msgstr "Rámečky"
#. i18n: ectx: property (text), widget (QCheckBox, _dockWidgetDrawFrame)
#: ui/breezestyleconfig.ui:183
#, kde-format
msgid "Draw frame around dockable panels"
msgstr "Kreslit rámeček okolo ukotvitelných panelů"
#. i18n: ectx: property (text), widget (QCheckBox, _sidePanelDrawFrame)
#: ui/breezestyleconfig.ui:190
#, kde-format
msgid "Draw frame around side panels"
msgstr "Kreslit rámečky okolo postranních panelů"
#. i18n: ectx: property (text), widget (QCheckBox, _menuItemDrawThinFocus)
#: ui/breezestyleconfig.ui:197
#, kde-format
msgid "Draw a thin line to indicate focus in menus and menubars"
msgstr ""
"Kreslit tenkou čáru pro indikování zaměření v nabídkách a panelech nabídky"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: ui/breezestyleconfig.ui:218
#, kde-format
msgid "Scrollbars"
msgstr "Posuvníky"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarAddLineLabel)
#: ui/breezestyleconfig.ui:237
#, kde-format
msgid "Bottom arrow button t&ype:"
msgstr "T&yp tlačítka šipky dolů:"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarSubLineLabel)
#: ui/breezestyleconfig.ui:250
#, kde-format
msgid "&Top arrow button type:"
msgstr "&Typ horního tlačítka:"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:264 ui/breezestyleconfig.ui:283
#, kde-format
msgid "No Buttons"
msgstr "Žádná tlačítka"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:269 ui/breezestyleconfig.ui:288
#, kde-format
msgid "One Button"
msgstr "Jedno tlačítko"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:274 ui/breezestyleconfig.ui:293
#, kde-format
msgid "Two Buttons"
msgstr "Dvě tlačítka"
# Přechod sklouznutí má posunovače, kde vlevo (žádný výběr) znamená průhlednost a vpravo (výběr 100 %) znamená neprůhlednost.
#
# Opačně to nedává smysl.
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
#: ui/breezestyleconfig.ui:315
#, kde-format
msgid "Transparency"
msgstr "Průhlednost"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityTransparentLabel)
#: ui/breezestyleconfig.ui:336
#, kde-format
msgid "Transparent"
msgstr "Průhledný"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityOpaqueLabel)
#: ui/breezestyleconfig.ui:362
#, kde-format
msgid "Opaque"
msgstr "Neprůhledné"
#. i18n: ectx: property (text), widget (QLabel, _menuGroupDescription)
#: ui/breezestyleconfig.ui:373
#, kde-format
msgid "Menu:"
msgstr "Nabídka:"

View file

@ -1,484 +0,0 @@
# Copyright (C) YEAR This_file_is_part_of_KDE
# This file is distributed under the same license as the PACKAGE package.
# Martin Schlander <mschlander@opensuse.org>, 2014, 2015, 2016, 2018, 2019, 2020.
# scootergrisen, 2017.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-03-04 02:12+0000\n"
"PO-Revision-Date: 2020-07-21 17:37+0200\n"
"Last-Translator: Martin Schlander <mschlander@opensuse.org>\n"
"Language-Team: Danish <kde-i18n-doc@kde.org>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 20.04.2\n"
#: config/breezeexceptionlistwidget.cpp:88
#, kde-format
msgid "New Exception - Breeze Settings"
msgstr "Ny undtagelse - Breeze-indstillinger"
#: config/breezeexceptionlistwidget.cpp:136
#, kde-format
msgid "Edit Exception - Breeze Settings"
msgstr "Redigér undtagelse - Breeze-indstillinger"
#: config/breezeexceptionlistwidget.cpp:167
#, kde-format
msgid "Question - Breeze Settings"
msgstr "Spørgsmål - Breeze-indstillinger"
#: config/breezeexceptionlistwidget.cpp:168
#, kde-format
msgid "Remove selected exception?"
msgstr "Fjern den markerede undtagelse?"
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
#: config/breezeexceptionlistwidget.cpp:170
#: config/ui/breezeexceptionlistwidget.ui:91
#, kde-format
msgid "Remove"
msgstr "Fjern"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Warning - Breeze Settings"
msgstr "Advarsel - Breeze-indstillinger"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Regular Expression syntax is incorrect"
msgstr "Syntaks i regulært udtryk er ikke korrekt"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Exception Type"
msgstr "Undtagelse"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Regular Expression"
msgstr "Regulært udtryk"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:36 config/ui/breezeexceptiondialog.ui:72
#, kde-format
msgid "Window Title"
msgstr "Vinduestitel"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:40 config/ui/breezeexceptiondialog.ui:67
#, kde-format
msgid "Window Class Name"
msgstr "Navn på vinduesklasse"
#: config/breezeexceptionmodel.cpp:55
#, kde-format
msgid "Enable/disable this exception"
msgstr "Aktivér/deaktivér denne undtagelse"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: config/ui/breezeconfigurationui.ui:33
#, kde-format
msgid "General"
msgstr "Generelt"
#. i18n: ectx: property (text), widget (QLabel, label_3)
#: config/ui/breezeconfigurationui.ui:39
#, kde-format
msgid "Tit&le alignment:"
msgstr "Tite&ljustering:"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:53
#, kde-format
msgid "Left"
msgstr "Venstre"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:58
#, kde-format
msgid "Center"
msgstr "Centreret"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:63
#, kde-format
msgid "Center (Full Width)"
msgstr "Centrér (fuld bredde)"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:68
#, kde-format
msgid "Right"
msgstr "Højre"
#. i18n: ectx: property (text), widget (QLabel, label_4)
#: config/ui/breezeconfigurationui.ui:89
#, kde-format
msgid "B&utton size:"
msgstr "K&napstørrelse:"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#: config/ui/breezeconfigurationui.ui:103
#, kde-format
msgid "Tiny"
msgstr "Meget lille"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:108
#: config/ui/breezeconfigurationui.ui:221
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Small"
msgstr "Lille"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:113
#: config/ui/breezeconfigurationui.ui:226
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Medium"
msgstr "Mellem"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:118
#: config/ui/breezeconfigurationui.ui:231
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Large"
msgstr "Stor"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:123
#: config/ui/breezeconfigurationui.ui:236
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Very Large"
msgstr "Meget stor"
#. i18n: ectx: property (text), widget (QCheckBox, outlineCloseButton)
#: config/ui/breezeconfigurationui.ui:131
#, kde-format
msgid "Draw a circle around close button"
msgstr "Tegn en cirkel omkring lukkeknappen"
#. i18n: ectx: property (text), widget (QCheckBox, drawBorderOnMaximizedWindows)
#: config/ui/breezeconfigurationui.ui:138
#, fuzzy, kde-format
#| msgid "Display window borders for maximized windows"
msgid "Draw border on maximized and tiled windows"
msgstr "Vis vindueskanter for maksimerede vinduer"
#. i18n: ectx: property (text), widget (QLabel, drawBorderOnMaximizedWindowsHelpLabel)
#: config/ui/breezeconfigurationui.ui:163
#, kde-format
msgid ""
"This setting will allow you to resize from window edges touching screen "
"edges. Scrollbars and window close buttons will shift positions and will not "
"touch screen edges."
msgstr ""
#. i18n: ectx: property (text), widget (QCheckBox, drawBackgroundGradient)
#: config/ui/breezeconfigurationui.ui:175
#, kde-format
msgid "Draw titlebar background gradient"
msgstr "Tegn gradient for titellinjebaggrund"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: config/ui/breezeconfigurationui.ui:196
#, kde-format
msgid "Shadows and Outline"
msgstr ""
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeconfigurationui.ui:202
#, fuzzy, kde-format
#| msgid "Shadows"
msgid "Shadow size:"
msgstr "Skygger"
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:216
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "None"
msgstr "Ingen"
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeconfigurationui.ui:244
#, fuzzy, kde-format
#| msgctxt "strength of the shadow (from transparent to opaque)"
#| msgid "S&trength:"
msgctxt "strength of the shadow (from transparent to opaque)"
msgid "Shadow strength:"
msgstr "S&tyrke:"
#. i18n: ectx: property (suffix), widget (QSpinBox, shadowStrength)
#: config/ui/breezeconfigurationui.ui:257
#, no-c-format, kde-format
msgid "%"
msgstr "%"
#. i18n: ectx: property (text), widget (QLabel, label_5)
#: config/ui/breezeconfigurationui.ui:283
#, fuzzy, kde-format
#| msgid "Shadows"
msgid "Shadow color:"
msgstr "Skygger"
#. i18n: ectx: property (text), widget (QLabel, label_6)
#: config/ui/breezeconfigurationui.ui:296
#, kde-format
msgctxt "outline intensity"
msgid "Outline intensity:"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:310
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Off"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:315
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Low"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:320
#, fuzzy, kde-format
#| msgctxt "@item:inlistbox Button size:"
#| msgid "Medium"
msgctxt "@item:inlistbox Outline intensity:"
msgid "Medium"
msgstr "Mellem"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:325
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "High"
msgstr ""
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:330
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Maximum"
msgstr ""
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: config/ui/breezeconfigurationui.ui:352
#, kde-format
msgid "Window-Specific Overrides"
msgstr "Vinduesspecifik tilsidesættelse"
#. i18n: ectx: property (windowTitle), widget (QDialog, BreezeExceptionDialog)
#: config/ui/breezeexceptiondialog.ui:14
#, kde-format
msgid "Dialog"
msgstr "Dialog"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#: config/ui/breezeexceptiondialog.ui:20
#, kde-format
msgid "Window Identification"
msgstr "Vinduesidentifikation"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeexceptiondialog.ui:26
#, kde-format
msgid "&Matching window property: "
msgstr "&Matchende vinduesegenskab: "
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeexceptiondialog.ui:39
#, kde-format
msgid "Regular expression &to match: "
msgstr "Regulært udtryk der &skal matches: "
#. i18n: ectx: property (text), widget (QPushButton, detectDialogButton)
#: config/ui/breezeexceptiondialog.ui:52
#, fuzzy, kde-format
#| msgid "Detect Window Properties"
msgid "Detect Window Properties…"
msgstr "Detektér vinduesegenskaber"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
#: config/ui/breezeexceptiondialog.ui:83
#, kde-format
msgid "Decoration Options"
msgstr "Dekorationsindstillinger"
#. i18n: ectx: property (text), widget (QCheckBox, borderSizeCheckBox)
#: config/ui/breezeexceptiondialog.ui:89
#, kde-format
msgid "Border size:"
msgstr "Kantstørrelse:"
#. i18n: ectx: property (text), widget (QCheckBox, hideTitleBar)
#: config/ui/breezeexceptiondialog.ui:96
#, kde-format
msgid "Hide window title bar"
msgstr "Skjul vinduets titellinje"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:107
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Border"
msgstr "Ingen kant"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:112
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Side Borders"
msgstr "Ingen sidekanter"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:117
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Tiny"
msgstr "Meget lille"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:122
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Normal"
msgstr "Normal"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:127
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Large"
msgstr "Stor"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:132
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Large"
msgstr "Meget stor"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:137
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Huge"
msgstr "Enorm"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:142
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Huge"
msgstr "Meget enorm"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:147
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Oversized"
msgstr "Overstørrelse"
#. i18n: ectx: property (text), widget (QPushButton, moveUpButton)
#: config/ui/breezeexceptionlistwidget.ui:70
#, kde-format
msgid "Move Up"
msgstr "Flyt op"
#. i18n: ectx: property (text), widget (QPushButton, moveDownButton)
#: config/ui/breezeexceptionlistwidget.ui:77
#, kde-format
msgid "Move Down"
msgstr "Flyt ned"
#. i18n: ectx: property (text), widget (QPushButton, addButton)
#: config/ui/breezeexceptionlistwidget.ui:84
#, kde-format
msgid "Add"
msgstr "Tilføj"
#. i18n: ectx: property (text), widget (QPushButton, editButton)
#: config/ui/breezeexceptionlistwidget.ui:98
#, kde-format
msgid "Edit"
msgstr "Redigér"
#~ msgid "Si&ze:"
#~ msgstr "S&tørrelse:"
#~ msgid "Color:"
#~ msgstr "Farve:"
#~ msgid "Add handle to resize windows with no border"
#~ msgstr "Tilføj håndtag til at ændre størrelse på vinduer uden kant"
#~ msgid "Information about Selected Window"
#~ msgstr "Information om valgt vindue"
#~ msgid "Class: "
#~ msgstr "Klasse: "
#~ msgid "Title: "
#~ msgstr "Titel: "
#~ msgid "Window Property Selection"
#~ msgstr "Valg af vinduesegenskab"
#~ msgid "Use window class (whole application)"
#~ msgstr "Brug vinduesklasse (hele programmet)"
#~ msgid "Use window title"
#~ msgstr "Brug vinduestitel"
#~ msgid "Allow resizing maximized windows from window edges"
#~ msgstr ""
#~ "Tillad ændring af størrelse fra vindues kanter på maksimerede vinduer"
#~ msgid "Draw separator under active window's titlebar"
#~ msgstr "Tegn adskiller under aktivt vindues titellinje"
#~ msgid "Animations"
#~ msgstr "Animationer"
#~ msgid "Anima&tions duration:"
#~ msgstr "Anima&tionsvarighed:"
#~ msgid " ms"
#~ msgstr " ms"
#~ msgid "Enable animations"
#~ msgstr "Aktivér animationer"
#~ msgctxt "@item:inlistbox Button size:"
#~ msgid "Normal"
#~ msgstr "Normal"
#~ msgid "px"
#~ msgstr "px"
#~ msgid "S&ize:"
#~ msgstr "S&tørrelse:"
#~ msgid "Button mouseover transition"
#~ msgstr "Overgang ved museoverkørsel af knap"
#~ msgid "Configure window buttons' mouseover highlight animation"
#~ msgstr "Indstil vinduesknappernes fremhævningsanimation ved museoverkørsel"

View file

@ -1,218 +0,0 @@
# Copyright (C) YEAR This_file_is_part_of_KDE
# This file is distributed under the same license as the PACKAGE package.
# Martin Schlander <mschlander@opensuse.org>, 2014, 2015, 2017, 2018, 2022.
# scootergrisen, 2017.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2022-09-25 00:45+0000\n"
"PO-Revision-Date: 2022-08-08 17:40+0200\n"
"Last-Translator: Martin Schlander <mschlander@opensuse.org>\n"
"Language-Team: Danish <kde-i18n-doc@kde.org>\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Lokalize 21.12.3\n"
#: main.cpp:25 main.cpp:29
#, kde-format
msgid "Breeze Settings"
msgstr "Breeze-indstillinger"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: ui/breezestyleconfig.ui:39
#, kde-format
msgid "General"
msgstr "Generelt"
#. i18n: ectx: property (text), widget (QLabel, _windowDragLabel)
#: ui/breezestyleconfig.ui:51
#, kde-format
msgid "W&indows' drag mode:"
msgstr "Trækket&ilstand for vinduer:"
#. i18n: ectx: property (text), widget (QCheckBox, _viewDrawFocusIndicator)
#: ui/breezestyleconfig.ui:64
#, kde-format
msgid "Draw focus indicator in lists"
msgstr "Tegn fokusindikator i lister"
#. i18n: ectx: property (text), widget (QLabel, _mnemonicsLabel)
#: ui/breezestyleconfig.ui:71
#, kde-format
msgid "&Keyboard accelerators visibility:"
msgstr "&Synlighed af tastaturgenveje:"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:85
#, kde-format
msgid "Always hide"
msgstr "Skjul altid"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:90
#, kde-format
msgid "Show when Alt key is pressed"
msgstr "Vis når Alt-knappen holdes nede"
#. i18n: ectx: property (text), item, widget (QComboBox, _mnemonicsMode)
#: ui/breezestyleconfig.ui:95
#, kde-format
msgid "Always show"
msgstr "Vis altid"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:117
#, kde-format
msgid "Drag windows from titlebar only"
msgstr "Træk kun vinduer via titellinjen"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:122
#, kde-format
msgid "Drag windows from titlebar, menubar and toolbars"
msgstr "Træk vinduer via titellinjen, menulinjen og værktøjslinjer"
#. i18n: ectx: property (text), item, widget (QComboBox, _windowDragMode)
#: ui/breezestyleconfig.ui:127
#, kde-format
msgid "Drag windows from all empty areas"
msgstr "Træk vinduer via alle tomme områder"
#. i18n: ectx: property (text), widget (QCheckBox, _tabBarDrawCenteredTabs)
#: ui/breezestyleconfig.ui:148
#, kde-format
msgid "Center tabbar tabs"
msgstr "Centrér fanebladsbjælke-faneblade"
#. i18n: ectx: property (text), widget (QCheckBox, _toolBarDrawItemSeparator)
#: ui/breezestyleconfig.ui:155
#, kde-format
msgid "Draw toolbar item separators"
msgstr "Tegn værktøjslinjes punktadskillere"
#. i18n: ectx: property (text), widget (QCheckBox, _sliderDrawTickMarks)
#: ui/breezestyleconfig.ui:162
#, kde-format
msgid "Draw slider tick marks"
msgstr "Tegn tikmærker på skydeknap"
#. i18n: ectx: property (text), widget (QCheckBox, _splitterProxyEnabled)
#: ui/breezestyleconfig.ui:169
#, kde-format
msgid "Enable extended resize handles"
msgstr "Aktivér udvidede håndtag til at ændre størrelse"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: ui/breezestyleconfig.ui:177
#, kde-format
msgid "Frames"
msgstr "Rammer"
#. i18n: ectx: property (text), widget (QCheckBox, _dockWidgetDrawFrame)
#: ui/breezestyleconfig.ui:183
#, kde-format
msgid "Draw frame around dockable panels"
msgstr "Tegn ramme omkring dokbare paneler"
#. i18n: ectx: property (text), widget (QCheckBox, _sidePanelDrawFrame)
#: ui/breezestyleconfig.ui:190
#, kde-format
msgid "Draw frame around side panels"
msgstr "Tegn ramme omkring sidepaneler"
#. i18n: ectx: property (text), widget (QCheckBox, _menuItemDrawThinFocus)
#: ui/breezestyleconfig.ui:197
#, kde-format
msgid "Draw a thin line to indicate focus in menus and menubars"
msgstr "Tegn en tynd linje for at indikere fokus i menuer og menulinjer"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: ui/breezestyleconfig.ui:218
#, kde-format
msgid "Scrollbars"
msgstr "Rullebjælker"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarAddLineLabel)
#: ui/breezestyleconfig.ui:237
#, kde-format
msgid "Bottom arrow button t&ype:"
msgstr "Knapt&ype for bundpil:"
#. i18n: ectx: property (text), widget (QLabel, _scrollBarSubLineLabel)
#: ui/breezestyleconfig.ui:250
#, kde-format
msgid "&Top arrow button type:"
msgstr "&Knaptype for toppil:"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:264 ui/breezestyleconfig.ui:283
#, kde-format
msgid "No Buttons"
msgstr "Ingen knapper"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:269 ui/breezestyleconfig.ui:288
#, kde-format
msgid "One Button"
msgstr "En knap"
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarSubLineButtons)
#. i18n: ectx: property (text), item, widget (QComboBox, _scrollBarAddLineButtons)
#: ui/breezestyleconfig.ui:274 ui/breezestyleconfig.ui:293
#, kde-format
msgid "Two Buttons"
msgstr "To knapper"
#. i18n: ectx: attribute (title), widget (QWidget, tab_5)
#: ui/breezestyleconfig.ui:315
#, kde-format
msgid "Transparency"
msgstr "Gennemsigtighed"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityTransparentLabel)
#: ui/breezestyleconfig.ui:336
#, kde-format
msgid "Transparent"
msgstr "Gennemsigtig"
#. i18n: ectx: property (text), widget (QLabel, _menuOpacityOpaqueLabel)
#: ui/breezestyleconfig.ui:362
#, kde-format
msgid "Opaque"
msgstr "Ugennemsigtig"
#. i18n: ectx: property (text), widget (QLabel, _menuGroupDescription)
#: ui/breezestyleconfig.ui:373
#, kde-format
msgid "Menu:"
msgstr "Menu:"
#~ msgid "Always Hide Keyboard Accelerators"
#~ msgstr "Skjul altid tastaturgenveje"
#~ msgid "Show Keyboard Accelerators When Needed"
#~ msgstr "Vis tastaturgenveje når nødvendigt"
#~ msgid "Always Show Keyboard Accelerators"
#~ msgstr "Vis altid tastaturgenveje"
#~ msgid "Draw frame around page titles"
#~ msgstr "Tegn ramme omkring sidetitler"
#~ msgid "Animations"
#~ msgstr "Animationer"
#~ msgid "A&nimations duration:"
#~ msgstr "A&nimationsvarighed:"
#~ msgid " ms"
#~ msgstr " ms"
#~ msgid "Enable animations"
#~ msgstr "Aktivér animationer"

View file

@ -1,605 +0,0 @@
# Frederik Schwarzer <schwarzer@kde.org>, 2014, 2016, 2022.
# Burkhard Lück <lueck@hube-lueck.de>, 2014, 2015, 2017, 2018, 2020, 2021.
# Frank Steinmetzger <dev-kde@felsenfleischer.de>, 2022.
# Jannick Kuhr <opensource@kuhr.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://bugs.kde.org\n"
"POT-Creation-Date: 2023-03-04 02:12+0000\n"
"PO-Revision-Date: 2023-03-16 19:23+0100\n"
"Last-Translator: Jannick Kuhr <opensource@kuhr.org>\n"
"Language-Team: German <kde-i18n-de@kde.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 22.12.3\n"
#: config/breezeexceptionlistwidget.cpp:88
#, kde-format
msgid "New Exception - Breeze Settings"
msgstr "Neue Ausnahme Breeze-Einstellungen"
#: config/breezeexceptionlistwidget.cpp:136
#, kde-format
msgid "Edit Exception - Breeze Settings"
msgstr "Ausnahme bearbeiten Breeze-Einstellungen"
#: config/breezeexceptionlistwidget.cpp:167
#, kde-format
msgid "Question - Breeze Settings"
msgstr "Frage Breeze-Einstellungen"
#: config/breezeexceptionlistwidget.cpp:168
#, kde-format
msgid "Remove selected exception?"
msgstr "Ausgewählte Ausnahme entfernen?"
#. i18n: ectx: property (text), widget (QPushButton, removeButton)
#: config/breezeexceptionlistwidget.cpp:170
#: config/ui/breezeexceptionlistwidget.ui:91
#, kde-format
msgid "Remove"
msgstr "Entfernen"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Warning - Breeze Settings"
msgstr "Warnung Breeze-Einstellungen"
#: config/breezeexceptionlistwidget.cpp:300
#, kde-format
msgid "Regular Expression syntax is incorrect"
msgstr "Die Syntax des regulären Ausdrucks ist nicht korrekt"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Exception Type"
msgstr "Ausnahme-Typ"
#: config/breezeexceptionmodel.cpp:17
#, kde-format
msgid "Regular Expression"
msgstr "Regulärer Ausdruck"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:36 config/ui/breezeexceptiondialog.ui:72
#, kde-format
msgid "Window Title"
msgstr "Fenstertitel"
#. i18n: ectx: property (text), item, widget (QComboBox, exceptionType)
#: config/breezeexceptionmodel.cpp:40 config/ui/breezeexceptiondialog.ui:67
#, kde-format
msgid "Window Class Name"
msgstr "Name der Fensterklasse"
#: config/breezeexceptionmodel.cpp:55
#, kde-format
msgid "Enable/disable this exception"
msgstr "Diese Ausnahme aktivieren/deaktivieren"
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: config/ui/breezeconfigurationui.ui:33
#, kde-format
msgid "General"
msgstr "Allgemein"
#. i18n: ectx: property (text), widget (QLabel, label_3)
#: config/ui/breezeconfigurationui.ui:39
#, kde-format
msgid "Tit&le alignment:"
msgstr "Tite&lausrichtung:"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:53
#, kde-format
msgid "Left"
msgstr "Links"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:58
#, kde-format
msgid "Center"
msgstr "Zentriert"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:63
#, kde-format
msgid "Center (Full Width)"
msgstr "Zentriert (volle Breite)"
#. i18n: ectx: property (text), item, widget (QComboBox, titleAlignment)
#: config/ui/breezeconfigurationui.ui:68
#, kde-format
msgid "Right"
msgstr "Rechts"
#. i18n: ectx: property (text), widget (QLabel, label_4)
#: config/ui/breezeconfigurationui.ui:89
#, kde-format
msgid "B&utton size:"
msgstr "&Knopfgröße:"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#: config/ui/breezeconfigurationui.ui:103
#, kde-format
msgid "Tiny"
msgstr "Winzig"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:108
#: config/ui/breezeconfigurationui.ui:221
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Small"
msgstr "Klein"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:113
#: config/ui/breezeconfigurationui.ui:226
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Medium"
msgstr "Mittel"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:118
#: config/ui/breezeconfigurationui.ui:231
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Large"
msgstr "Groß"
#. i18n: ectx: property (text), item, widget (QComboBox, buttonSize)
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:123
#: config/ui/breezeconfigurationui.ui:236
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "Very Large"
msgstr "Sehr groß"
#. i18n: ectx: property (text), widget (QCheckBox, outlineCloseButton)
#: config/ui/breezeconfigurationui.ui:131
#, kde-format
msgid "Draw a circle around close button"
msgstr "Einen Kreis um den Schließen-Knopf zeichnen"
#. i18n: ectx: property (text), widget (QCheckBox, drawBorderOnMaximizedWindows)
#: config/ui/breezeconfigurationui.ui:138
#, kde-format
msgid "Draw border on maximized and tiled windows"
msgstr "Umrandung um maximierte und gekachelte Fenster zeichnen"
#. i18n: ectx: property (text), widget (QLabel, drawBorderOnMaximizedWindowsHelpLabel)
#: config/ui/breezeconfigurationui.ui:163
#, kde-format
msgid ""
"This setting will allow you to resize from window edges touching screen "
"edges. Scrollbars and window close buttons will shift positions and will not "
"touch screen edges."
msgstr ""
"Diese Einstellung erlaubt es, die Größe über Fensterkanten zu verändern, die "
"den Bildschirmrand berühren. Bildlaufleisten und Schließen-Knöpfe werden "
"verschoben und berühren nicht mehr die Bildschirmränder."
#. i18n: ectx: property (text), widget (QCheckBox, drawBackgroundGradient)
#: config/ui/breezeconfigurationui.ui:175
#, kde-format
msgid "Draw titlebar background gradient"
msgstr "Hintergrundverlauf der Titelleiste zeichnen"
#. i18n: ectx: attribute (title), widget (QWidget, tab_4)
#: config/ui/breezeconfigurationui.ui:196
#, kde-format
msgid "Shadows and Outline"
msgstr "Schatten und Umrandung"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeconfigurationui.ui:202
#, kde-format
msgid "Shadow size:"
msgstr "Schattengröße:"
#. i18n: ectx: property (text), item, widget (QComboBox, shadowSize)
#: config/ui/breezeconfigurationui.ui:216
#, kde-format
msgctxt "@item:inlistbox Button size:"
msgid "None"
msgstr "Keine"
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeconfigurationui.ui:244
#, kde-format
msgctxt "strength of the shadow (from transparent to opaque)"
msgid "Shadow strength:"
msgstr "Schattenstärke:"
#. i18n: ectx: property (suffix), widget (QSpinBox, shadowStrength)
#: config/ui/breezeconfigurationui.ui:257
#, no-c-format, kde-format
msgid "%"
msgstr " %"
#. i18n: ectx: property (text), widget (QLabel, label_5)
#: config/ui/breezeconfigurationui.ui:283
#, kde-format
msgid "Shadow color:"
msgstr "Schattenfarbe:"
#. i18n: ectx: property (text), widget (QLabel, label_6)
#: config/ui/breezeconfigurationui.ui:296
#, kde-format
msgctxt "outline intensity"
msgid "Outline intensity:"
msgstr "Umrandungsintensität:"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:310
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Off"
msgstr "Aus"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:315
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Low"
msgstr "Niedrig"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:320
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Medium"
msgstr "Mittel"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:325
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "High"
msgstr "Hoch"
#. i18n: ectx: property (text), item, widget (QComboBox, outlineIntensity)
#: config/ui/breezeconfigurationui.ui:330
#, kde-format
msgctxt "@item:inlistbox Outline intensity:"
msgid "Maximum"
msgstr "Maximal"
#. i18n: ectx: attribute (title), widget (QWidget, tab_3)
#: config/ui/breezeconfigurationui.ui:352
#, kde-format
msgid "Window-Specific Overrides"
msgstr "Fensterspezifische Einstellungen"
#. i18n: ectx: property (windowTitle), widget (QDialog, BreezeExceptionDialog)
#: config/ui/breezeexceptiondialog.ui:14
#, kde-format
msgid "Dialog"
msgstr "Dialog"
#. i18n: ectx: property (title), widget (QGroupBox, groupBox)
#: config/ui/breezeexceptiondialog.ui:20
#, kde-format
msgid "Window Identification"
msgstr "Fensterkennung"
#. i18n: ectx: property (text), widget (QLabel, label)
#: config/ui/breezeexceptiondialog.ui:26
#, kde-format
msgid "&Matching window property: "
msgstr "&Passende Fenster-Eigenschaft: "
#. i18n: ectx: property (text), widget (QLabel, label_2)
#: config/ui/breezeexceptiondialog.ui:39
#, kde-format
msgid "Regular expression &to match: "
msgstr "Passender &regulärer Ausdruck: "
#. i18n: ectx: property (text), widget (QPushButton, detectDialogButton)
#: config/ui/breezeexceptiondialog.ui:52
#, kde-format
msgid "Detect Window Properties…"
msgstr "Fenstereigenschaften ermitteln ..."
#. i18n: ectx: property (title), widget (QGroupBox, groupBox_2)
#: config/ui/breezeexceptiondialog.ui:83
#, kde-format
msgid "Decoration Options"
msgstr "Dekorations-Einstellungen"
#. i18n: ectx: property (text), widget (QCheckBox, borderSizeCheckBox)
#: config/ui/breezeexceptiondialog.ui:89
#, kde-format
msgid "Border size:"
msgstr "Rahmenbreite:"
#. i18n: ectx: property (text), widget (QCheckBox, hideTitleBar)
#: config/ui/breezeexceptiondialog.ui:96
#, kde-format
msgid "Hide window title bar"
msgstr "Titelleiste ausblenden"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:107
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Border"
msgstr "Keine Umrandung"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:112
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "No Side Borders"
msgstr "Keine seitliche Umrandung"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:117
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Tiny"
msgstr "Winzig"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:122
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Normal"
msgstr "Normal"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:127
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Large"
msgstr "Groß"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:132
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Large"
msgstr "Sehr groß"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:137
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Huge"
msgstr "Riesig"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:142
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Very Huge"
msgstr "Noch riesiger"
#. i18n: ectx: property (text), item, widget (QComboBox, borderSizeComboBox)
#: config/ui/breezeexceptiondialog.ui:147
#, kde-format
msgctxt "@item:inlistbox Border size:"
msgid "Oversized"
msgstr "Übergroß"
#. i18n: ectx: property (text), widget (QPushButton, moveUpButton)
#: config/ui/breezeexceptionlistwidget.ui:70
#, kde-format
msgid "Move Up"
msgstr "Nach oben"
#. i18n: ectx: property (text), widget (QPushButton, moveDownButton)
#: config/ui/breezeexceptionlistwidget.ui:77
#, kde-format
msgid "Move Down"
msgstr "Nach unten"
#. i18n: ectx: property (text), widget (QPushButton, addButton)
#: config/ui/breezeexceptionlistwidget.ui:84
#, kde-format
msgid "Add"
msgstr "Hinzufügen"
#. i18n: ectx: property (text), widget (QPushButton, editButton)
#: config/ui/breezeexceptionlistwidget.ui:98
#, kde-format
msgid "Edit"
msgstr "Bearbeiten"
#~ msgid "Si&ze:"
#~ msgstr "&Größe:"
#~ msgid "Color:"
#~ msgstr "Farbe:"
#~ msgid "Add handle to resize windows with no border"
#~ msgstr "Griff zur Größenänderung von Fenstern ohne Rahmen hinzufügen"
#~ msgid "Information about Selected Window"
#~ msgstr "Informationen zum ausgewählten Fenster"
#~ msgid "Class: "
#~ msgstr "Klasse: "
#~ msgid "Title: "
#~ msgstr "Titel: "
#~ msgid "Window Property Selection"
#~ msgstr "Auswahl der Fenster-Eigenschaft"
#~ msgid "Use window class (whole application)"
#~ msgstr "Fensterklasse verwenden (gesamte Anwendung)"
#~ msgid "Use window title"
#~ msgstr "Fenstertitel verwenden"
#~ msgid "Allow resizing maximized windows from window edges"
#~ msgstr ""
#~ "Größenänderung von maximierten Fenstern über die Fensterkanten zulassen"
#~ msgid "Draw separator under active window's titlebar"
#~ msgstr "Trennung unter der Titelleiste des aktiven Fensters anzeigen"
#~ msgid "Animations"
#~ msgstr "Animationen"
#~ msgid "Anima&tions duration:"
#~ msgstr "&Animationsdauer:"
#~ msgid " ms"
#~ msgstr " ms"
#~ msgid "Enable animations"
#~ msgstr "Animationen aktivieren"
#~ msgctxt "@item:inlistbox Button size:"
#~ msgid "Normal"
#~ msgstr "Normal"
#~ msgid "px"
#~ msgstr "px"
#~ msgid "S&ize:"
#~ msgstr "&Größe:"
#~ msgid "Button mouseover transition"
#~ msgstr "Übergang beim Überfahren mit dem Mauszeiger"
#~ msgid "Configure window buttons' mouseover highlight animation"
#~ msgstr "Animation der Fensterknöpfe beim Überfahren mit der Maus einrichten"
#~ msgid "Title transitions"
#~ msgstr "Titel-Übergänge"
#~ msgid "Configure fading transitions when window title is changed"
#~ msgstr "Übergänge beim Wechsel von Fenstertiteln einrichten"
#~ msgid "Window active state change transitions"
#~ msgstr "Übergang beim Wechsel des Aktivitätsstatus von Fenstern"
#~ msgid ""
#~ "Configure fading between window shadow and glow when window's active "
#~ "state is changed"
#~ msgstr ""
#~ "Übergang zwischen Schatten und Glühen beim Wechsel des Aktivitätsstatus "
#~ "von Fenstern einrichten"
#~ msgid "Window grouping animations"
#~ msgstr "Animationen bei Fenstergruppierung"
#~ msgid ""
#~ "Configure window titlebar animations when windows are grouped/ungrouped"
#~ msgstr ""
#~ "Titelleistenanimationen von Fenstern beim Gruppieren und Lösen aus der "
#~ "Gruppierung einrichten"
#~ msgid "Hide Advanced Configuration Options"
#~ msgstr "Erweiterte Einstellungen ausblenden"
#~ msgid "Show Advanced Configuration Options"
#~ msgstr "Erweiterte Einstellungen anzeigen"
#~ msgid "Border si&ze:"
#~ msgstr "&Umrandungsgröße:"
#~ msgctxt "@item:inlistbox Button size:"
#~ msgid "Huge"
#~ msgstr "Riesig"
#~ msgid "Fine Tuning"
#~ msgstr "Feineinstellungen"
#~ msgid "Close windows by double clicking the menu button"
#~ msgstr "Fenster durch Doppelklick auf Menüknopf schließen"
#~ msgid "Never Draw Separator"
#~ msgstr "Trenner nie anzeigen"
#~ msgid "Draw Separator When Window is Active"
#~ msgstr "Trenner anzeigen, wenn das Fenster aktiv ist"
#~ msgid "Always Draw Separator"
#~ msgstr "Trenner immer anzeigen"
#~ msgid "Separator disp&lay:"
#~ msgstr "Anzeige der &Trenner:"
#~ msgid "Outline active window title"
#~ msgstr "Aktiven Fenstertitel umranden"
#~ msgid "Use narrow space between decoration buttons"
#~ msgstr "Schmalen Abstand zwischen den Knöpfen einfügen"
#~ msgid "Window Drop-Down Shadow"
#~ msgstr "Schattenwurf für Fenster"
#~ msgid "Active Window Glow"
#~ msgstr "Glühen für aktives Fenster"
#~ msgctxt "outline window title"
#~ msgid "Disabled"
#~ msgstr "Deaktiviert"
#~ msgctxt "outline window title"
#~ msgid "Enabled"
#~ msgstr "Aktiviert"
#~ msgid "Separator display:"
#~ msgstr "Anzeige der Trenner:"
#~ msgctxt "Add handle to resize windows with no border"
#~ msgid "Disabled"
#~ msgstr "Deaktiviert"
#~ msgctxt "Add handle to resize windows with no border"
#~ msgid "Enabled"
#~ msgstr "Aktiviert"
#~ msgid "Oxygen"
#~ msgstr "Oxygen"
#~ msgid "Window Actions Menu"
#~ msgstr "Fenster-Aktionsmenü"
#~ msgid "Application Menu"
#~ msgstr "Anwendungsmenü"
#~ msgid "Help"
#~ msgstr "Hilfe"
#~ msgid "Minimize"
#~ msgstr "Minimieren"
#~ msgid "Close"
#~ msgstr "Schließen"
#~ msgid "Keep Above Others"
#~ msgstr "Immer im Vordergrund"
#~ msgid "Keep Below Others"
#~ msgstr "Immer im Hintergrund"
#~ msgid "On All Desktops"
#~ msgstr "Auf allen Arbeitsflächen"
#~ msgid "Shade Button"
#~ msgstr "Fensterheber-Knopf"
#~ msgid "Oxygen Shadow Demo"
#~ msgstr "Oxygen-Schatten-Demo"
#~ msgid "Inactive Windows"
#~ msgstr "Inaktive Fenster"
#~ msgid "Active Windows"
#~ msgstr "Aktive Fenster"

Some files were not shown because too many files have changed in this diff Show more