mirror of
https://gitgud.io/wackyideas/aerothemeplasma.git
synced 2026-06-20 04:15:38 +00:00
Compare commits
No commits in common. "master" and "6.2.5" have entirely different histories.
1484 changed files with 369963 additions and 77110 deletions
32
.gitignore
vendored
32
.gitignore
vendored
|
|
@ -1,31 +1,9 @@
|
|||
PlymouthVista/
|
||||
misc/libplasma/build
|
||||
misc/uac-polkitagent/build
|
||||
misc/defaulttooltip/build
|
||||
misc/plymouth/plymouth-theme-smod/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
|
||||
kwin/effects_cpp/kwin-effect-smodsnap-v2/build-kf6
|
||||
kwin/effects_cpp/kde-effects-aeroglassblur/build
|
||||
plasma/plasmoids/src/sevenstart_src/build
|
||||
plasma/plasmoids/src/seventasks_src/build
|
||||
plasma/plasmoids/src/desktopcontainment/build
|
||||
kwin/effects_cpp/kde-effects-aeroglassblur/build
|
||||
kwin/effects_cpp/kwin-effect-smodsnap-v2/build
|
||||
kwin/effects_cpp/smodglow/build
|
||||
kwin/effects_cpp/aeroglide/build
|
||||
kwin/effects_cpp/startupfeedback/build
|
||||
kwin/effects_cpp/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/
|
||||
build
|
||||
repos
|
||||
manifest
|
||||
kwin/effects_cpp/smodglow/build-kf6
|
||||
kwin/effects_cpp/aeroglide/build-kf6
|
||||
|
|
|
|||
|
|
@ -1,23 +0,0 @@
|
|||
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/
|
||||
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
## 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)
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
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()
|
||||
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
# 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.
|
||||
248
DOCUMENTATION.md
248
DOCUMENTATION.md
|
|
@ -1,248 +0,0 @@
|
|||
# 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.
|
||||
365
INSTALL.md
Executable file → Normal file
365
INSTALL.md
Executable file → Normal file
|
|
@ -3,165 +3,141 @@
|
|||
## TABLE OF CONTENTS
|
||||
|
||||
1. [Prerequisites](#preq)
|
||||
2. [Migration notice](#migration)
|
||||
3. [Getting started](#started)
|
||||
4. [Optional](#optional)
|
||||
5. [GTK](#gtk)
|
||||
6. [Uninstalling AeroThemePlasma (old)](#uninstall_old)
|
||||
2. [Plasma components](#plasma)
|
||||
3. [KWin components](#kwin)
|
||||
4. [Miscellaneous components](#misc)
|
||||
5. [Configuring AeroThemePlasma](#conf)
|
||||
|
||||
## Prerequisites <a name="preq"></a>
|
||||
|
||||
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).
|
||||
**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.
|
||||
|
||||
### Arch Linux
|
||||
|
||||
Required packages:
|
||||
|
||||
```bash
|
||||
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
|
||||
pacman -S cmake extra-cmake-modules ninja qt6-virtualkeyboard qt6-multimedia qt6-5compat plasma-wayland-protocols plasma5support kvantum base-devel
|
||||
```
|
||||
- (optionally) plymouth
|
||||
|
||||
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.
|
||||
|
||||
### 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
|
||||
|
||||
### Kubuntu
|
||||
Required Packages:
|
||||
|
||||
```bash
|
||||
dnf install plasma-workspace-devel unzip kvantum qt6-qtmultimedia-devel qt6-qt5compat-devel libplasma-devel qt6-qtbase-devel qt6-qtwayland-devel plasma-activities-devel kf6-kpackage-devel kf6-kglobalaccel-devel qt6-qtsvg-devel wayland-devel plasma-wayland-protocols kf6-ksvg-devel kf6-kcrash-devel kf6-kguiaddons-devel kf6-kcmutils-devel kf6-kio-devel kdecoration-devel kf6-ki18n-devel kf6-knotifications-devel kf6-kirigami-devel kf6-kiconthemes-devel cmake gmp-ecm-devel kf5-plasma-devel libepoxy-devel kwin-devel kf6-karchive kf6-karchive-devel plasma-wayland-protocols-devel qt6-qtbase-private-devel qt6-qtbase-devel kf6-knewstuff-devel kf6-knotifyconfig-devel kf6-attica-devel kf6-krunner-devel kf6-kdbusaddons-devel kf6-sonnet-devel plasma5support-devel plasma-activities-stats-devel polkit-qt6-1-devel qt-devel libdrm-devel kf6-kitemmodels-devel kf6-kstatusnotifieritem-devel kf6-frameworkintegration-devel
|
||||
apt install build-essential cmake ninja-build curl libqt6virtualkeyboard6 libqt6multimedia6 libqt6core5compat6 libplasma5support6 libkdecorations2-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
|
||||
```
|
||||
|
||||
On Fedora, additional dependencies for X11 include:
|
||||
|
||||
- `kwin-x11`
|
||||
- `kwin-x11-devel`
|
||||
|
||||
### openSUSE Leap / Tumbleweed
|
||||
|
||||
Required packages:
|
||||
### Fedora KDE
|
||||
Required Packages:
|
||||
|
||||
```bash
|
||||
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
|
||||
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 plymouth-devel plymouth-plugin-script
|
||||
```
|
||||
|
||||
In openSUSE, additional dependencies for X11 include:
|
||||
## Compiling
|
||||
|
||||
- `kwin6-x11-devel`
|
||||
|
||||
### Ubuntu 25.10
|
||||
To build the components that need to be compiled (KWin effects, Decoration theme, etc.), run ```compile.sh```:
|
||||
|
||||
```bash
|
||||
apt install build-essential cmake ninja-build curl libqt6virtualkeyboard6 libqt6multimedia6 libqt6core5compat6 libplasma5support6 libkdecorations3-dev libkf6colorscheme-dev libkf6i18n-dev libkf6iconthemes-dev libkf6kcmutils-dev libkirigami-dev libkf6kio-dev libkf6notifications-dev libkf6svg-dev libkf6crash-dev libkf6globalaccel-dev libplasma-dev libplasmaactivities-dev libxcb-composite0-dev libxcb-randr0-dev libxcb-shm0-dev libxcb-damage0-dev libepoxy-dev libqt6svg6-dev kwin-dev plasma-wayland-protocols 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
|
||||
$ chmod +x compile.sh && ./compile.sh
|
||||
```
|
||||
|
||||
On Ubuntu, additional dependencies for X11 include:
|
||||
|
||||
- `kwin-x11`
|
||||
- `kwin-x11-dev`
|
||||
|
||||
## Migration notice <a name="migration"></a>
|
||||
|
||||
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:
|
||||
or
|
||||
|
||||
```bash
|
||||
$ bash migration-uninstall.sh
|
||||
$ sh compile.sh
|
||||
```
|
||||
|
||||
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`
|
||||
## Plasma components <a name="plasma"></a>
|
||||
|
||||
It's advisable to also consult [Uninstalling AeroThemePlasma (old)](#uninstall_old) for more details.
|
||||
This section relates to the directories found in the ```plasma``` folder.
|
||||
|
||||
## Getting started <a name="started"></a>
|
||||
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.
|
||||
|
||||
### Arch Linux
|
||||
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:
|
||||
- Plasma Style
|
||||
- Global Theme (more accurately, just the lock screen)
|
||||
- Plasmoids
|
||||
- Plasma shell
|
||||
- Preset panel layout that can be applied from Edit mode
|
||||
|
||||
*AUR packages coming soon*
|
||||
3. Move ```sddm-theme-mod``` to ```/usr/share/sddm/themes```. Optionally, to enable the Vista start screen, set ```enableStartup=true``` in ```theme.conf.user```
|
||||
4. Import and apply the color scheme through System Settings.
|
||||
7. When applying the global theme, only apply the splash screen and uncheck everything else.
|
||||
|
||||
### From source
|
||||
## KWin components <a name="kwin"></a>
|
||||
|
||||
To download this repository, clone it with `git`:
|
||||
This section relates to the directories found in the ```kwin``` folder.
|
||||
|
||||
```bash
|
||||
$ git clone https://gitgud.io/wackyideas/aerothemeplasma.git aerothemeplasma
|
||||
$ cd aerothemeplasma
|
||||
```
|
||||
1. Move ```effects```, ```tabbox```, ```outline```, ```scripts``` to ```~/.local/share/kwin```.
|
||||
2. In System Settings, apply the following settings:
|
||||
- In Window Behavior -> Titlebar Actions:
|
||||
- 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
|
||||
- In Window Behavior -> Desktop Effects, **disable** the following:
|
||||
- Background Contrast
|
||||
- Blur
|
||||
- Maximize
|
||||
- Sliding Popups
|
||||
- Dialog Parent
|
||||
- Dim Inactive
|
||||
- Logout
|
||||
|
||||
It's highly recommended to use git for downloading AeroThemePlasma as updating becomes much easier.
|
||||
## Miscellaneous components <a name="misc"></a>
|
||||
|
||||
Run the following script:
|
||||
This section relates to the directories found in the ```misc``` folder.
|
||||
|
||||
```sh
|
||||
$ bash install.sh --ninja # Pass --ninja to reduce build times
|
||||
```
|
||||
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.
|
||||
|
||||
This will clone every repository needed for AeroThemePlasma and build everything from source.
|
||||
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```.
|
||||
|
||||
You can also run the install script like this:
|
||||
## Configuring AeroThemePlasma <a name="conf"></a>
|
||||
|
||||
```bash
|
||||
$ chmod +x install.sh && ./install.sh
|
||||
```
|
||||
1. After installing everything, restart KDE Plasma and KWin.
|
||||
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. Disable the following entries in the system tray settings:
|
||||
- Power and Battery
|
||||
- Networks
|
||||
- Keyboard Layout
|
||||
- Audio Volume
|
||||
|
||||
And enable the following entries:
|
||||
- Battery
|
||||
- Network Management
|
||||
- Sound Mixer
|
||||
4. When updating KDE Plasma, usually through a full system upgrade, recompiling KWin effects and the DefaultToolTip component is necessary.
|
||||
5. In System Settings -> Session -> Desktop Session, uncheck the "Ask for confirmation" option.
|
||||
6. In System Settings -> Keyboard -> Shortcuts, under KWin, disable the "Peek at Desktop" shortcut, and remap the "MinimizeAll" to Meta+D
|
||||
7. In System Settings -> Fonts, configure the fonts as shown here:
|
||||
|
||||
## NOTE
|
||||
<img src="screenshots/fontconfig.png">
|
||||
|
||||
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`:
|
||||
The following steps are optional:
|
||||
|
||||
```bash
|
||||
$ LIBEXEC_DIR=libexec bash install.sh --ninja
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
**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.
|
||||
|
||||
### Updating AeroThemePlasma
|
||||
|
||||
Update and do `git pull` on the cloned repository to get new changes:
|
||||
|
||||
```bash
|
||||
$ cd /path/to/aerothemeplasma
|
||||
$ git pull
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
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).
|
||||
|
||||
### Uninstalling AeroThemePlasma
|
||||
|
||||
Uninstalling AeroThemePlasma can be done by running the following script:
|
||||
|
||||
```bash
|
||||
$ 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:
|
||||
8. 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.*
|
||||
9. For Wine users it's recommended to install the [VistaVG Ultimate](https://www.deviantart.com/vishal-gupta/art/VistaVG-Ultimate-57715902) msstyles theme.
|
||||
10. 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```.
|
||||
11. Add the following to ```~/.bashrc``` to get bash to look more like the command prompt on Windows:
|
||||
|
||||
```bash
|
||||
PS1='C:${PWD//\//\\\\}> '
|
||||
|
|
@ -169,161 +145,4 @@ PS1='C:${PWD//\//\\\\}> '
|
|||
echo -e "Microsoft Windows [Version 6.1.7600]\nCopyright (c) 2009 Microsoft Corporation. All rights reserved.\n"
|
||||
```
|
||||
|
||||
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`
|
||||
12. 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.
|
||||
|
|
|
|||
95
README.md
95
README.md
|
|
@ -1,21 +1,22 @@
|
|||
# AeroThemePlasma
|
||||
# AEROTHEMEPLASMA FOR KDE 6
|
||||
|
||||
## WARNING: This version is very early WIP and is not fully finished. Proceed with caution.
|
||||
|
||||
## Microsoft® Windows™ is a registered trademark of Microsoft® Corporation. This name is used for referential use only, and does not aim to usurp copyrights from Microsoft. Microsoft Ⓒ 2025 All rights reserved. All resources belong to Microsoft Corporation.
|
||||
|
||||
## Introduction
|
||||
|
||||
This is a project which aims to recreate the look and feel of Windows 7 as much as possible on KDE Plasma, whilst adapting the design to fit in with modern features provided by KDE Plasma and Linux.
|
||||
It is still in heavy development and testing. ATP has been tested on:
|
||||
|
||||
ATP is in constant development and testing, it has been tested on:
|
||||
|
||||
- Arch Linux x64 and other Arch derivatives
|
||||
- Plasma 6.6.0, KDE Frameworks 6.23.0, Qt 6.10.2
|
||||
- 96 DPI scaling, multi monitor
|
||||
- X11, Wayland*
|
||||
1. Arch Linux x64 and other Arch derivatives, KDE Neon
|
||||
2. Plasma 6.2.2, KDE Frameworks 6.7.0, Qt 6.8.0
|
||||
3. 96 DPI scaling, multi monitor
|
||||
4. X11, Wayland*
|
||||
|
||||
*AeroThemePlasma currently lacks full Wayland support, which may result in Wayland-specific issues.
|
||||
|
||||
## 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.
|
||||
## 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.
|
||||
|
||||
The Plasma 5 version of ATP is available as a tag in this repository, however it is unmaintained and no longer supported.
|
||||
|
||||
|
|
@ -23,8 +24,6 @@ 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>
|
||||
|
||||
[GitHub mirror](https://github.com/WackyIdeas/aerothemeplasma)
|
||||
|
||||
## Installation
|
||||
|
||||
See [INSTALL.md](./INSTALL.md) for a detailed installation guide.
|
||||
|
|
@ -45,7 +44,7 @@ Huge thanks to everyone who helped out along the way by contributing, testing, p
|
|||
### Contributors
|
||||
- [Souris-2d07](https://gitgud.io/souris) for making the following:
|
||||
- Cursor theme
|
||||
- Plymouth theme (old)
|
||||
- Plymouth theme
|
||||
- SDDM theme
|
||||
- KWin decoration theme
|
||||
- Most KWin C++ effects
|
||||
|
|
@ -53,13 +52,11 @@ Huge thanks to everyone who helped out along the way by contributing, testing, p
|
|||
- [That Linux Dude Dominic Hayes](https://github.com/dominichayesferen) for making the following:
|
||||
- Lock screen UI
|
||||
- Icon theme
|
||||
- [catpswin56](https://gitgud.io/catpswin56/) for help with SevenTasks, Sound Mixer plasmoid, Gadgets menu, Polkit UAC skin, as well as many more contributions
|
||||
- [catpswin56](https://gitgud.io/catpswin56/) for help with the Sound Mixer plasmoid, Gadgets menu, as well as many more contributions
|
||||
- [QuinceTart10](https://github.com/QuinceTart10) and [Gamer95875](https://github.com/Gamer95875) for making the sound themes
|
||||
- (In collaboration with) [kfh83](https://github.com/kfh83), [TorutheRedFox](https://github.com/TorutheRedFox) and [ALTaleX](https://github.com/ALTaleX531/dwm_colorization_calculator/blob/main/main.py) for figuring out accurate Aero glass blur and colorization effects
|
||||
- [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
|
||||
- [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
|
||||
|
||||
|
|
@ -72,12 +69,9 @@ Huge thanks to everyone who helped out along the way by contributing, testing, p
|
|||
- [VistaThemePlasma](https://gitgud.io/catpswin56/vistathemeplasma/) by catpswin56
|
||||
- [LonghornThemePlasma](https://gitgud.io/catpswin56/longhornthemeplasma) by catpswin56
|
||||
- [VB1ThemePlasma](https://gitgud.io/catpswin56/vista-beta-plasma) by catpswin56
|
||||
- [Harmony](https://gitgud.io/catpswin56/harmony) by catpswin56
|
||||
- [Gadgets](https://gitgud.io/catpswin56/win-gadgets) 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
|
||||
- [Ice2K.sys](https://toiletflusher.neocities.org/ice2k/) by 0penrc
|
||||
- [Sevulet](https://gitgud.io/snailatte/sevulet) by [snailatte](https://gitgud.io/snailatte)
|
||||
|
||||
## Vista variant
|
||||
|
||||
|
|
@ -87,88 +81,71 @@ Initially I wanted to make a Vista variant of AeroThemePlasma but [catpswin56](h
|
|||
|
||||
### Desktop
|
||||
|
||||

|
||||
<img src="screenshots/desktop.png">
|
||||
|
||||
### Start Menu
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
<img src="screenshots/start_menu.png">
|
||||
<img src="screenshots/start_menu_search.png">
|
||||
<img src="screenshots/start_menu_apps.png">
|
||||
<img src="screenshots/start_menu_openshell.png">
|
||||
|
||||
### Clock
|
||||
|
||||

|
||||
<img src="screenshots/clock.png">
|
||||
|
||||
### System Tray
|
||||
|
||||

|
||||

|
||||
|
||||
### Sound Mixer
|
||||
|
||||

|
||||

|
||||
<img src="screenshots/battery.png">
|
||||
<img src="screenshots/system_tray.png">
|
||||
|
||||
### Notifications
|
||||
|
||||

|
||||

|
||||
<img src="screenshots/notification.png">
|
||||
<img src="screenshots/notification-progress.png">
|
||||
|
||||
### Desktop Icons
|
||||
|
||||

|
||||
<img src="screenshots/icons.png">
|
||||
|
||||
### Lockscreen
|
||||
|
||||

|
||||
<img src="screenshots/lockscreen.png">
|
||||
|
||||
### Aero Peek
|
||||
|
||||

|
||||
<img src="screenshots/peek.png">
|
||||
|
||||
### Alt-Tab Switcher
|
||||
|
||||

|
||||
<img src="screenshots/alt-tab.png">
|
||||
|
||||
### Colorization
|
||||
|
||||

|
||||
<img src="screenshots/colorization.png">
|
||||
Regular colorization:
|
||||

|
||||
<img src="screenshots/aeroblur.png">
|
||||
Basic colorization:
|
||||

|
||||
<img src="screenshots/aeroblursimple.png">
|
||||
Maximized opaque colorization:
|
||||

|
||||
<img src="screenshots/aeroblur_opaque.png">
|
||||
|
||||
### Decorations
|
||||
|
||||

|
||||
<img src="screenshots/decorations.png">
|
||||
|
||||
Decoration themes:
|
||||
|
||||

|
||||
<img src="screenshots/smod_theme.png">
|
||||
|
||||
### Gadgets
|
||||
|
||||

|
||||
<img src="screenshots/gadgets.png">
|
||||
|
||||
### Network details
|
||||
### Firefox
|
||||
|
||||

|
||||
<img src="screenshots/geckium.png">
|
||||
|
||||
### Librewolf
|
||||
### Taskbar (Coming Soon™)
|
||||
|
||||

|
||||
|
||||
### User Account Control (Polkit)
|
||||
|
||||

|
||||

|
||||
|
||||
### Taskbar
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
<img src="screenshots/jumplist.png">
|
||||
|
|
|
|||
47
compile.sh
Executable file
47
compile.sh
Executable file
|
|
@ -0,0 +1,47 @@
|
|||
#!/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
|
||||
|
||||
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
|
||||
|
||||
cd "$PWD/misc/defaulttooltip"
|
||||
sh $USE_SCRIPT
|
||||
cd "$CUR_DIR"
|
||||
|
||||
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
#!/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
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
CUR_DIR=$(pwd)
|
||||
|
||||
# Sanity check to see if the proper tools are installed.
|
||||
if [[ -z "$(command -v kpackagetool6)" ]]; then
|
||||
echo "kpackagetool6 not found. Stopping."
|
||||
exit
|
||||
fi
|
||||
|
||||
# Function that installs/upgrades KDE packages.
|
||||
# install_component $filename "Plasma/Shell"
|
||||
function install_component {
|
||||
COMPONENT=$(basename "$1")
|
||||
INSTALLED=$(kpackagetool6 -l -t "$2" | grep $COMPONENT)
|
||||
if [[ -z "$INSTALLED" ]]; then
|
||||
echo "$COMPONENT isn't installed, installing normally..."
|
||||
kpackagetool6 -t "$2" -i "$1"
|
||||
else
|
||||
echo "$COMPONENT found, upgrading..."
|
||||
kpackagetool6 -t "$2" -u "$1"
|
||||
fi
|
||||
echo -e "\n"
|
||||
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)..."
|
||||
for filename in "$PWD/kwin/effects/"*; do
|
||||
install_component "$filename" "KWin/Effect"
|
||||
done
|
||||
echo "Done."
|
||||
|
||||
echo "Installing KWin scripts..."
|
||||
for filename in "$PWD/kwin/scripts/"*; do
|
||||
install_component "$filename" "KWin/Script"
|
||||
done
|
||||
echo "Done."
|
||||
|
||||
echo "Installing KWin task switchers..."
|
||||
for filename in "$PWD/kwin/tabbox/"*; do
|
||||
install_component "$filename" "KWin/WindowSwitcher"
|
||||
done
|
||||
echo "Done."
|
||||
|
||||
# Outline
|
||||
echo "Installing outline..."
|
||||
KWIN_DIR="$HOME/.local/share/kwin"
|
||||
cp -r "$PWD/kwin/outline" "$KWIN_DIR"
|
||||
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."
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,124 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
CUR_DIR=$(pwd)
|
||||
|
||||
# Sanity check to see if the proper tools are installed
|
||||
if [[ -z "$(command -v tar)" ]]; then
|
||||
echo "tar not found. Stopping."
|
||||
exit
|
||||
fi
|
||||
if [[ -z "$(command -v unzip)" ]]; then
|
||||
echo "unzip not found. Stopping."
|
||||
exit
|
||||
fi
|
||||
|
||||
TMP_DIR="/tmp/atp"
|
||||
mkdir -p "$TMP_DIR"
|
||||
|
||||
# Installs the Kvantum theme.
|
||||
echo "Installing Kvantum theme..."
|
||||
KV_DIR="$HOME/.config"
|
||||
cp -r "$PWD/misc/kvantum/Kvantum" "$KV_DIR"
|
||||
echo "Done."
|
||||
|
||||
# Installs the sound themes.
|
||||
echo "Unpacking sound themes..."
|
||||
SOUNDS_DIR="$HOME/.local/share/sounds"
|
||||
mkdir -p "$SOUNDS_DIR"
|
||||
tar -xf "$PWD/misc/sounds/sounds.tar.gz" --directory "$SOUNDS_DIR"
|
||||
echo "Done."
|
||||
|
||||
# Installs the icon theme.
|
||||
echo "Unpacking icon theme..."
|
||||
ICONS_DIR="$HOME/.local/share/icons"
|
||||
mkdir -p "$ICONS_DIR"
|
||||
tar -xf "$PWD/misc/icons/Windows 7 Aero.tar.gz" --directory "$ICONS_DIR"
|
||||
echo "Done."
|
||||
|
||||
# Installs the cursor theme. Requires admin privileges as this theme gets installed globally so SDDM can use it.
|
||||
echo "Unpacking cursor theme..."
|
||||
CURSOR_DIR="/usr/share/icons"
|
||||
pkexec tar -xf "$PWD/misc/cursors/aero-drop.tar.gz" --directory "$CURSOR_DIR"
|
||||
echo "Done."
|
||||
|
||||
# Installs the modified mimetype associations.
|
||||
echo "Installing mimetypes..."
|
||||
MIMETYPE_DIR="$HOME/.local/share/mime/packages"
|
||||
mkdir -p "$MIMETYPE_DIR"
|
||||
for filename in "$PWD/misc/mimetype/"*; do
|
||||
cp -r "$filename" "$MIMETYPE_DIR"
|
||||
done
|
||||
update-mime-database "$HOME/.local/share/mime"
|
||||
echo "Done."
|
||||
|
||||
|
||||
# Optional components
|
||||
echo "Do you want to install a custom font configuration for Segoe UI fonts? (Recommended) (y/N)"
|
||||
read answer
|
||||
FONTCONF_DIR="$HOME/.config"
|
||||
|
||||
if [ "$answer" != "${answer#[Yy]}" ] ;then
|
||||
|
||||
# Installs custom fontconfig to tweak Segoe UI.
|
||||
if test -f "$FONTCONF_DIR/fontconfig/fonts.conf"; then
|
||||
echo "Backing up fonts.conf to fonts.conf.old"
|
||||
cp -r "$FONTCONF_DIR/fontconfig/fonts.conf" "$FONTCONF_DIR/fontconfig/fonts.conf.old"
|
||||
fi
|
||||
echo "Installing custom font configuration..."
|
||||
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)
|
||||
echo "Adding QML_DISABLE_DISTANCEFIELD=1 to /etc/environment"
|
||||
if [[ -n "$HAS_VAR" ]]; then
|
||||
echo "Variable already added, skipping..."
|
||||
else
|
||||
pkexec sh -c "echo \"QML_DISABLE_DISTANCEFIELD=1\" >> /etc/environment"
|
||||
fi
|
||||
fi
|
||||
echo "Done."
|
||||
|
||||
# Installs custom branding for the system settings info page.
|
||||
echo "Do you want to install custom branding for Info Center? (y/N)"
|
||||
read answer
|
||||
BRANDING_DIR="$HOME/.config/kdedefaults"
|
||||
mkdir -p "$BRANDING_DIR"
|
||||
|
||||
if [ "$answer" != "${answer#[Yy]}" ] ;then
|
||||
for filename in "$PWD/misc/branding/"*; do
|
||||
cp -r "$filename" "$BRANDING_DIR"
|
||||
done
|
||||
kwriteconfig6 --file "$BRANDING_DIR/kcm-about-distrorc" --group General --key LogoPath "$BRANDING_DIR/kcminfo.png"
|
||||
fi
|
||||
echo "Done."
|
||||
|
||||
# Installs the terminal font.
|
||||
echo "Do you want to install the command prompt font (Terminal Vector)? (y/N)"
|
||||
read answer
|
||||
if [ "$answer" != "${answer#[Yy]}" ] ;then
|
||||
curl -L https://www.yohng.com/files/TerminalVector.zip > "$TMP_DIR/TerminalVector.zip"
|
||||
unzip "$TMP_DIR/TerminalVector.zip" -d "$TMP_DIR"
|
||||
kfontinst "$TMP_DIR/TerminalVector.ttf"
|
||||
fi
|
||||
echo "Done."
|
||||
|
||||
# Installs the Plymouth theme.
|
||||
echo "Do you want to install the Plymouth theme? (y/N)"
|
||||
read answer
|
||||
if [ "$answer" != "${answer#[Yy]}" ] ;then
|
||||
if [[ -z "$(command -v git)" ]]; then
|
||||
echo "Git not found. Cannot install Plymouth theme automatically!"
|
||||
echo "Please download the repository from https://github.com/furkrn/PlymouthVista as a zip file by clicking the green code button."
|
||||
echo "Then extract the zip file and run './compile.sh ; sudo ./install.sh' from the extracted directory."
|
||||
else
|
||||
git clone https://github.com/furkrn/PlymouthVista
|
||||
cd PlymouthVista
|
||||
chmod +x ./compile.sh
|
||||
chmod +x ./install.sh
|
||||
./compile.sh
|
||||
pkexec --keep-cwd ./install.sh
|
||||
echo "For more details, check out the project at https://github.com/furkrn/PlymouthVista"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Done."
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
CUR_DIR=$(pwd)
|
||||
|
||||
# Sanity check to see if the proper tools are installed.
|
||||
if [[ -z "$(command -v kpackagetool6)" ]]; then
|
||||
echo "kpackagetool6 not found. Stopping."
|
||||
exit
|
||||
fi
|
||||
if [[ -z "$(command -v cmake)" ]]; then
|
||||
echo "CMake not found. Stopping."
|
||||
exit
|
||||
fi
|
||||
if [[ -z "$(command -v tar)" ]]; then
|
||||
echo "tar not found. Stopping."
|
||||
exit
|
||||
fi
|
||||
if [[ -z "$(command -v sddmthemeinstaller)" ]]; then
|
||||
echo "sddmthemeinstaller not found. Stopping."
|
||||
exit
|
||||
fi
|
||||
|
||||
# Function that installs/upgrades KDE packages.
|
||||
# install_component $filename "Plasma/Shell"
|
||||
function install_component {
|
||||
COMPONENT=$(basename "$1")
|
||||
INSTALLED=$(kpackagetool6 -l -t "$2" | grep $COMPONENT)
|
||||
if [[ -z "$INSTALLED" ]]; then
|
||||
echo "$COMPONENT isn't installed, installing normally..."
|
||||
kpackagetool6 -t "$2" -i "$1"
|
||||
else
|
||||
echo "$COMPONENT found, upgrading..."
|
||||
kpackagetool6 -t "$2" -u "$1"
|
||||
fi
|
||||
echo -e "\n"
|
||||
cd "$CUR_DIR"
|
||||
}
|
||||
|
||||
|
||||
# Installs the Global Theme (Look and feel).
|
||||
install_component "$PWD/plasma/look-and-feel/authui7" "Plasma/LookAndFeel"
|
||||
# Layout template
|
||||
install_component "$PWD/plasma/layout-templates/io.gitgud.wackyideas.taskbar" "Plasma/LayoutTemplate"
|
||||
# Plasma Style
|
||||
install_component "$PWD/plasma/desktoptheme/Seven-Black" "Plasma/Theme"
|
||||
# Shell
|
||||
install_component "$PWD/plasma/shells/io.gitgud.wackyideas.desktop" "Plasma/Shell"
|
||||
|
||||
# Installs the color scheme.
|
||||
echo -e "Installing color scheme..."
|
||||
COLOR_DIR="$HOME/.local/share/color-schemes"
|
||||
mkdir -p "$COLOR_DIR"
|
||||
cp "$PWD/plasma/color_scheme/Aero.colors" "$COLOR_DIR"
|
||||
#plasma-apply-colorscheme Aero
|
||||
|
||||
# Installs the SDDM theme, as well as the SDDM entries required for ATP.
|
||||
echo -e "Installing login manager entries..."
|
||||
cd "plasma/sddm/login-sessions"
|
||||
sh install.sh
|
||||
echo -e "Installing SDDM theme..."
|
||||
cd "$CUR_DIR/plasma/sddm"
|
||||
tar -zcvf "sddm-theme-mod.tar.gz" "sddm-theme-mod"
|
||||
sddmthemeinstaller -i "sddm-theme-mod.tar.gz"
|
||||
rm "sddm-theme-mod.tar.gz"
|
||||
|
||||
#setsid plasmashell --replace & # Restart plasmashell and detach it from the script
|
||||
|
||||
|
||||
|
|
@ -1,76 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# You can pass the following arguments to this script:
|
||||
# --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
|
||||
echo "kpackagetool6 not found. Stopping."
|
||||
exit
|
||||
fi
|
||||
|
||||
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
|
||||
|
||||
# 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
|
||||
echo "Skipping compilation..."
|
||||
else
|
||||
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
|
||||
fi
|
||||
|
||||
# Installs or upgrades plasmoids using kpackagetool6
|
||||
function install_plasmoid {
|
||||
PLASMOID=$(basename "$1")
|
||||
if [[ $PLASMOID == 'src' ]]; then
|
||||
echo "Skipping $PLASMOID"
|
||||
return
|
||||
fi
|
||||
INSTALLED=$(kpackagetool6 -l -t "Plasma/Applet" | grep $PLASMOID)
|
||||
if [[ -z "$INSTALLED" ]]; then
|
||||
echo "$PLASMOID isn't installed, installing normally..."
|
||||
kpackagetool6 -t "Plasma/Applet" -i "$1"
|
||||
else
|
||||
echo "$PLASMOID found, upgrading..."
|
||||
kpackagetool6 -t "Plasma/Applet" -u "$1"
|
||||
fi
|
||||
echo -e "\n"
|
||||
cd "$CUR_DIR"
|
||||
}
|
||||
|
||||
# KPackageTool will update plasmoids on the fly, and this results in
|
||||
# the system tray forgetting the visibility status of upgraded plasmoids.
|
||||
# As such, we need to first terminate plasmashell in order to retain
|
||||
# saved configurations
|
||||
|
||||
killall plasmashell
|
||||
|
||||
for filename in "$PWD/plasma/plasmoids/"*; do
|
||||
install_plasmoid "$filename"
|
||||
done
|
||||
|
||||
setsid plasmashell --replace & # Restart plasmashell and detach it from the script
|
||||
|
||||
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
# 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)
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
# 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)
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
# 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.
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
# 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.
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
# 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
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
# 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.
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
# 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)
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
# 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.
|
||||
117
install.sh
117
install.sh
|
|
@ -1,117 +0,0 @@
|
|||
#!/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."
|
||||
2
kwin/decoration/.git-blame-ignore-revs
Normal file
2
kwin/decoration/.git-blame-ignore-revs
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# clang-format
|
||||
32149dc002ae574ed41f111bf52712b1765b906b
|
||||
7
kwin/decoration/.gitignore
vendored
Normal file
7
kwin/decoration/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
build
|
||||
.clang-format
|
||||
/compile_commands.json
|
||||
.clangd
|
||||
.idea
|
||||
/cmake-build*
|
||||
.cache
|
||||
12
kwin/decoration/.gitlab-ci.yml
Normal file
12
kwin/decoration/.gitlab-ci.yml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# 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
|
||||
41
kwin/decoration/.kde-ci.yml
Normal file
41
kwin/decoration/.kde-ci.yml
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
# 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']
|
||||
6
kwin/decoration/AUTHORS
Normal file
6
kwin/decoration/AUTHORS
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
Cursors:
|
||||
Ken Vermette <vermette@gmail.com>
|
||||
|
||||
Kstyle:
|
||||
Hugo Pereira Da Costa <hugo.pereira@free.fr> - Developer
|
||||
Andrew Lake <jamboarder@gmail.com> - Designer
|
||||
11
kwin/decoration/BreezeConfig.cmake.in
Normal file
11
kwin/decoration/BreezeConfig.cmake.in
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
@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/")
|
||||
173
kwin/decoration/CMakeLists.txt
Normal file
173
kwin/decoration/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
cmake_minimum_required(VERSION 3.16)
|
||||
project(breeze)
|
||||
set(PROJECT_VERSION "5.93.0")
|
||||
set(PROJECT_VERSION_MAJOR 6)
|
||||
|
||||
set(KF5_MIN_VERSION "5.102.0")
|
||||
set(KF6_MIN_VERSION "5.240.0")
|
||||
set(KDE_COMPILERSETTINGS_LEVEL "5.82")
|
||||
set(QT5_MIN_VERSION "5.15.2")
|
||||
set(QT_MIN_VERSION "6.6.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(KDecoration2 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)
|
||||
52
kwin/decoration/README.md
Normal file
52
kwin/decoration/README.md
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# 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.
|
||||
17
kwin/decoration/cmake/GtkUpdateIconCache.cmake
Normal file
17
kwin/decoration/cmake/GtkUpdateIconCache.cmake
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# 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()
|
||||
7
kwin/decoration/install.sh
Normal file
7
kwin/decoration/install.sh
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/bash
|
||||
rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
|
||||
make
|
||||
sudo make install
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
mkdir -p build
|
||||
rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DCMAKE_INSTALL_PREFIX=/usr -G Ninja ..
|
||||
ninja
|
||||
sudo ninja install
|
||||
108
kwin/decoration/kdecoration/CMakeLists.txt
Normal file
108
kwin/decoration/kdecoration/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
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
|
||||
KDecoration2::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.kdecoration2
|
||||
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
|
||||
)
|
||||
4
kwin/decoration/kdecoration/Messages.sh
Normal file
4
kwin/decoration/kdecoration/Messages.sh
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
#!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
|
||||
56
kwin/decoration/kdecoration/breeze.h
Normal file
56
kwin/decoration/kdecoration/breeze.h
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* 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,
|
||||
};
|
||||
}
|
||||
408
kwin/decoration/kdecoration/breezebutton.cpp
Normal file
408
kwin/decoration/kdecoration/breezebutton.cpp
Normal file
|
|
@ -0,0 +1,408 @@
|
|||
/*
|
||||
* 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 <KDecoration2/DecoratedClient>
|
||||
#include <KIconLoader>
|
||||
|
||||
#include <QPainter>
|
||||
#include <QPainterPath>
|
||||
#include <QVariantAnimation>
|
||||
|
||||
namespace Breeze
|
||||
{
|
||||
using KDecoration2::ColorGroup;
|
||||
using KDecoration2::ColorRole;
|
||||
using KDecoration2::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->client(), SIGNAL(iconChanged(QIcon)), this, SLOT(update()));
|
||||
connect(decoration->settings().get(), &KDecoration2::DecorationSettings::reconfigured, this, &Button::reconfigure);
|
||||
connect(this, &KDecoration2::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 QRect &repaintArea)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//__________________________________________________________________
|
||||
Button *Button::create(DecorationButtonType type, KDecoration2::Decoration *decoration, QObject *parent)
|
||||
{
|
||||
if (auto d = qobject_cast<Decoration *>(decoration)) {
|
||||
Button *b = new Button(type, d, parent);
|
||||
const auto c = d->client();
|
||||
switch (type) {
|
||||
case DecorationButtonType::Close:
|
||||
//b->setVisible(c->isCloseable());
|
||||
//QObject::connect(c, &KDecoration2::DecoratedClient::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, &KDecoration2::DecoratedClient::maximizeableChanged, b,
|
||||
[b](bool maximizeable) {
|
||||
auto d = qobject_cast<Decoration *>(b->decoration());
|
||||
const auto c = d->client();
|
||||
|
||||
if (!c)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
b->setVisible(c->isMaximizeable() || c->isMinimizeable());
|
||||
b->setEnabled(maximizeable);
|
||||
});
|
||||
//b->setVisible(c->isMaximizeable());
|
||||
//QObject::connect(c, &KDecoration2::DecoratedClient::maximizeableChanged, b, &Breeze::Button::setVisible);
|
||||
break;
|
||||
|
||||
case DecorationButtonType::Minimize:
|
||||
//b->setVisible(c->isMinimizeable());
|
||||
//QObject::connect(c, &KDecoration2::DecoratedClient::minimizeableChanged, b, &Breeze::Button::setVisible);
|
||||
b->setVisible(c->isMinimizeable() || c->isMaximizeable());
|
||||
b->setEnabled(c->isMinimizeable());
|
||||
QObject::connect(c, &KDecoration2::DecoratedClient::minimizeableChanged, b,
|
||||
[b](bool minimizeable) {
|
||||
auto d = qobject_cast<Decoration *>(b->decoration());
|
||||
const auto c = d->client();
|
||||
|
||||
if (!c)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
b->setVisible(c->isMinimizeable() || c->isMaximizeable());
|
||||
b->setEnabled(minimizeable);
|
||||
});
|
||||
break;
|
||||
|
||||
case DecorationButtonType::ContextHelp:
|
||||
b->setVisible(c->providesContextHelp());
|
||||
QObject::connect(c, &KDecoration2::DecoratedClient::providesContextHelpChanged, b, &Breeze::Button::setVisible);
|
||||
break;
|
||||
|
||||
case DecorationButtonType::Shade:
|
||||
b->setVisible(c->isShadeable());
|
||||
QObject::connect(c, &KDecoration2::DecoratedClient::shadeableChanged, b, &Breeze::Button::setVisible);
|
||||
break;
|
||||
|
||||
case DecorationButtonType::Menu:
|
||||
QObject::connect(c, &KDecoration2::DecoratedClient::iconChanged, b, [b]() {
|
||||
b->update();
|
||||
});
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return b;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//__________________________________________________________________
|
||||
void Button::paint(QPainter *painter, const QRect &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->client();
|
||||
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
|
||||
160
kwin/decoration/kdecoration/breezebutton.h
Normal file
160
kwin/decoration/kdecoration/breezebutton.h
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
/*
|
||||
* 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 <KDecoration2/DecorationButton>
|
||||
|
||||
#include <QHash>
|
||||
#include <QImage>
|
||||
#include <QHoverEvent>
|
||||
#include <QPropertyAnimation>
|
||||
#include <QPixmap>
|
||||
#include <QPainter>
|
||||
|
||||
|
||||
class QVariantAnimation;
|
||||
|
||||
namespace Breeze
|
||||
{
|
||||
|
||||
class Button : public KDecoration2::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(KDecoration2::DecorationButtonType type, KDecoration2::Decoration *decoration, QObject *parent);
|
||||
|
||||
//* render
|
||||
virtual void paint(QPainter *painter, const QRect &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 QRect &repaintArea);
|
||||
void updateGeometry();
|
||||
signals:
|
||||
void buttonHoverStatus(KDecoration2::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(KDecoration2::DecorationButtonType type, Decoration *decoration, QObject *parent = nullptr);
|
||||
|
||||
//* draw button icon
|
||||
void drawIcon(QPainter *) const;
|
||||
|
||||
void startHoverAnimation(qreal endValue);
|
||||
void smodPaint(QPainter *painter, const QRect &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
|
||||
551
kwin/decoration/kdecoration/breezedecoration.cpp
Normal file
551
kwin/decoration/kdecoration/breezedecoration.cpp
Normal file
|
|
@ -0,0 +1,551 @@
|
|||
/*
|
||||
* 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 <KDecoration2/DecorationButtonGroup>
|
||||
#include <KDecoration2/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 KDecoration2::ColorGroup;
|
||||
using KDecoration2::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 = client();
|
||||
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 = client();
|
||||
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 = client();
|
||||
// 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(), &KDecoration2::DecorationSettings::borderSizeChanged, this, &Decoration::recalculateBorders);
|
||||
|
||||
// a change in font might cause the borders to change
|
||||
connect(s.get(), &KDecoration2::DecorationSettings::fontChanged, this, &Decoration::recalculateBorders);
|
||||
connect(s.get(), &KDecoration2::DecorationSettings::spacingChanged, this, &Decoration::recalculateBorders);
|
||||
|
||||
// buttons
|
||||
connect(s.get(), &KDecoration2::DecorationSettings::spacingChanged, this, &Decoration::updateButtonsGeometryDelayed);
|
||||
connect(s.get(), &KDecoration2::DecorationSettings::decorationButtonsLeftChanged, this, &Decoration::updateButtonsGeometryDelayed);
|
||||
connect(s.get(), &KDecoration2::DecorationSettings::decorationButtonsRightChanged, this, &Decoration::updateButtonsGeometryDelayed);
|
||||
|
||||
// full reconfiguration
|
||||
connect(s.get(), &KDecoration2::DecorationSettings::reconfigured, this, &Decoration::reconfigure);
|
||||
connect(s.get(), &KDecoration2::DecorationSettings::reconfigured, SettingsProvider::self(), &SettingsProvider::reconfigure, Qt::UniqueConnection);
|
||||
connect(s.get(), &KDecoration2::DecorationSettings::reconfigured, this, &Decoration::updateButtonsGeometryDelayed);
|
||||
|
||||
connect(c, &KDecoration2::DecoratedClient::adjacentScreenEdgesChanged, this, &Decoration::recalculateBorders);
|
||||
connect(c, &KDecoration2::DecoratedClient::maximizedHorizontallyChanged, this, &Decoration::recalculateBorders);
|
||||
connect(c, &KDecoration2::DecoratedClient::maximizedVerticallyChanged, this, &Decoration::recalculateBorders);
|
||||
connect(c, &KDecoration2::DecoratedClient::shadedChanged, this, &Decoration::recalculateBorders);
|
||||
connect(c, &KDecoration2::DecoratedClient::captionChanged, this, [this]() {
|
||||
// update the caption area
|
||||
update(titleBar());
|
||||
update(); // Prevents rendering artifacts with the text glow
|
||||
});
|
||||
|
||||
connect(c, &KDecoration2::DecoratedClient::activeChanged, this, &Decoration::updateAnimationState);
|
||||
connect(c, &KDecoration2::DecoratedClient::widthChanged, this, &Decoration::updateTitleBar);
|
||||
connect(c, &KDecoration2::DecoratedClient::maximizedChanged, this, &Decoration::updateTitleBar);
|
||||
//connect(c, &KDecoration2::DecoratedClient::maximizedChanged, this, &Decoration::setOpaque);
|
||||
|
||||
connect(c, &KDecoration2::DecoratedClient::widthChanged, this, &Decoration::updateButtonsGeometry);
|
||||
connect(c, &KDecoration2::DecoratedClient::maximizedChanged, this, &Decoration::updateButtonsGeometry);
|
||||
connect(c, &KDecoration2::DecoratedClient::adjacentScreenEdgesChanged, this, &Decoration::updateButtonsGeometry);
|
||||
connect(c, &KDecoration2::DecoratedClient::shadedChanged, this, &Decoration::updateButtonsGeometry);
|
||||
|
||||
connect(c, &KDecoration2::DecoratedClient::widthChanged, this, &Decoration::updateBlur);
|
||||
connect(c, &KDecoration2::DecoratedClient::heightChanged, this, &Decoration::updateBlur);
|
||||
connect(c, &KDecoration2::DecoratedClient::maximizedChanged, this, &Decoration::updateBlur);
|
||||
connect(c, &KDecoration2::DecoratedClient::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 = client();
|
||||
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 = client();
|
||||
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 = client();
|
||||
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 = client();
|
||||
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 KDecoration2::DecorationButtonGroup(KDecoration2::DecorationButtonGroup::Position::Left, this, &Button::create);
|
||||
m_rightButtons = new KDecoration2::DecorationButtonGroup(KDecoration2::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<KDecoration2::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 QRect &repaintRegion)
|
||||
{
|
||||
smodPaint(painter, repaintRegion);
|
||||
return;
|
||||
}
|
||||
|
||||
//________________________________________________________________
|
||||
SizingMargins Decoration::sizingMargins() const
|
||||
{
|
||||
return g_sizingmargins;
|
||||
}
|
||||
|
||||
QRect Decoration::buttonRect(KDecoration2::DecorationButtonType button) const
|
||||
{
|
||||
|
||||
int height = titlebarHeight()-1;
|
||||
int intendedWidth = g_sizingmargins.maximizeSizing().width;
|
||||
int width = 0;
|
||||
switch (button)
|
||||
{
|
||||
case KDecoration2::DecorationButtonType::Minimize:
|
||||
intendedWidth = g_sizingmargins.minimizeSizing().width;
|
||||
break;
|
||||
case KDecoration2::DecorationButtonType::Maximize:
|
||||
intendedWidth = g_sizingmargins.maximizeSizing().width;
|
||||
break;
|
||||
case KDecoration2::DecorationButtonType::Close:
|
||||
intendedWidth = g_sizingmargins.closeSizing().width;
|
||||
break;
|
||||
case KDecoration2::DecorationButtonType::Menu:
|
||||
height = titlebarHeight();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(button == KDecoration2::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 = client();
|
||||
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"
|
||||
280
kwin/decoration/kdecoration/breezedecoration.h
Normal file
280
kwin/decoration/kdecoration/breezedecoration.h
Normal file
|
|
@ -0,0 +1,280 @@
|
|||
/*
|
||||
* 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 <KDecoration2/DecoratedClient>
|
||||
#include <KDecoration2/Decoration>
|
||||
#include <KDecoration2/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 KDecoration2
|
||||
{
|
||||
class DecorationButton;
|
||||
class DecorationButtonGroup;
|
||||
}
|
||||
|
||||
namespace Breeze
|
||||
{
|
||||
class MYSHAREDLIB_EXPORT Decoration : public KDecoration2::Decoration
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
//* constructor
|
||||
explicit Decoration(QObject *parent = nullptr, const QVariantList &args = QVariantList());
|
||||
|
||||
//* destructor
|
||||
virtual ~Decoration();
|
||||
|
||||
//* paint
|
||||
void paint(QPainter *painter, const QRect &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(KDecoration2::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;
|
||||
//@}
|
||||
|
||||
Q_SIGNALS:
|
||||
void buttonHoverStatus(KDecoration2::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 QRect &repaintRegion);
|
||||
void smodPaintGlow(QPainter *painter, const QRect &repaintRegion);
|
||||
void smodPaintOuterBorder(QPainter *painter, const QRect &repaintRegion);
|
||||
void smodPaintTitleBar(QPainter *painter, const QRect &repaintRegion);
|
||||
void updateShadow();
|
||||
std::shared_ptr<KDecoration2::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;
|
||||
KDecoration2::DecorationButtonGroup *m_leftButtons = nullptr;
|
||||
KDecoration2::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() > KDecoration2::BorderSize::NoSides;
|
||||
}
|
||||
}
|
||||
|
||||
bool Decoration::hasNoBorders() const
|
||||
{
|
||||
if (m_internalSettings && m_internalSettings->mask() & BorderSize) {
|
||||
return m_internalSettings->borderSize() == InternalSettings::BorderNone;
|
||||
} else {
|
||||
return settings()->borderSize() == KDecoration2::BorderSize::None;
|
||||
}
|
||||
}
|
||||
|
||||
bool Decoration::hasNoSideBorders() const
|
||||
{
|
||||
if (m_internalSettings && m_internalSettings->mask() & BorderSize) {
|
||||
return m_internalSettings->borderSize() == InternalSettings::BorderNoSides;
|
||||
} else {
|
||||
return settings()->borderSize() == KDecoration2::BorderSize::NoSides;
|
||||
}
|
||||
}
|
||||
|
||||
bool Decoration::isMaximized() const
|
||||
{
|
||||
return client()->isMaximized() && !m_internalSettings->drawBorderOnMaximizedWindows();
|
||||
}
|
||||
|
||||
bool Decoration::isMaximizedHorizontally() const
|
||||
{
|
||||
return client()->isMaximizedHorizontally() && !m_internalSettings->drawBorderOnMaximizedWindows();
|
||||
}
|
||||
|
||||
bool Decoration::isMaximizedVertically() const
|
||||
{
|
||||
return client()->isMaximizedVertically() && !m_internalSettings->drawBorderOnMaximizedWindows();
|
||||
}
|
||||
|
||||
bool Decoration::isLeftEdge() const
|
||||
{
|
||||
const auto c = client();
|
||||
return (c->isMaximizedHorizontally() || c->adjacentScreenEdges().testFlag(Qt::LeftEdge)) && !m_internalSettings->drawBorderOnMaximizedWindows();
|
||||
}
|
||||
|
||||
bool Decoration::isRightEdge() const
|
||||
{
|
||||
const auto c = client();
|
||||
return (c->isMaximizedHorizontally() || c->adjacentScreenEdges().testFlag(Qt::RightEdge)) && !m_internalSettings->drawBorderOnMaximizedWindows();
|
||||
}
|
||||
|
||||
bool Decoration::isTopEdge() const
|
||||
{
|
||||
const auto c = client();
|
||||
return (c->isMaximizedVertically() || c->adjacentScreenEdges().testFlag(Qt::TopEdge)) && !m_internalSettings->drawBorderOnMaximizedWindows();
|
||||
}
|
||||
|
||||
bool Decoration::isBottomEdge() const
|
||||
{
|
||||
const auto c = client();
|
||||
return (c->isMaximizedVertically() || c->adjacentScreenEdges().testFlag(Qt::BottomEdge)) && !m_internalSettings->drawBorderOnMaximizedWindows();
|
||||
}
|
||||
|
||||
bool Decoration::hideTitleBar() const
|
||||
{
|
||||
return m_internalSettings->hideTitleBar() && !client()->isShaded();
|
||||
}
|
||||
|
||||
bool Decoration::isGadgetExplorer() const
|
||||
{
|
||||
const auto c = client();
|
||||
if(c->caption() == QStringLiteral("plasmashell_explorer") && c->windowClass() == QStringLiteral("plasmashell plasmashell")) return true;
|
||||
return false;
|
||||
}
|
||||
bool Decoration::hideIcon() const
|
||||
{
|
||||
if(isGadgetExplorer()) return true;
|
||||
return m_internalSettings->hideIcon() && !client()->isShaded();
|
||||
}
|
||||
|
||||
bool Decoration::hideCaption() const
|
||||
{
|
||||
if(isGadgetExplorer()) return true;
|
||||
return m_internalSettings->hideCaption() && !client()->isShaded();
|
||||
}
|
||||
|
||||
bool Decoration::hideInnerBorder() const
|
||||
{
|
||||
if(isGadgetExplorer()) return true;
|
||||
return m_internalSettings->hideInnerBorder() && !client()->isShaded();
|
||||
}
|
||||
|
||||
bool Decoration::outlinesEnabled() const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
108
kwin/decoration/kdecoration/breezeexceptionlist.cpp
Normal file
108
kwin/decoration/kdecoration/breezeexceptionlist.cpp
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
57
kwin/decoration/kdecoration/breezeexceptionlist.h
Normal file
57
kwin/decoration/kdecoration/breezeexceptionlist.h
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
};
|
||||
|
||||
}
|
||||
7
kwin/decoration/kdecoration/breezesettings.kcfgc
Normal file
7
kwin/decoration/kdecoration/breezesettings.kcfgc
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
File=breezesettingsdata.kcfg
|
||||
ClassName=InternalSettings
|
||||
NameSpace=Breeze
|
||||
Singleton=false
|
||||
Mutators=true
|
||||
GlobalEnums=true
|
||||
Notifiers=OutlineCloseButton
|
||||
132
kwin/decoration/kdecoration/breezesettingsdata.kcfg
Normal file
132
kwin/decoration/kdecoration/breezesettingsdata.kcfg
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
<?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>
|
||||
105
kwin/decoration/kdecoration/breezesettingsprovider.cpp
Normal file
105
kwin/decoration/kdecoration/breezesettingsprovider.cpp
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* 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->client();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
55
kwin/decoration/kdecoration/breezesettingsprovider.h
Normal file
55
kwin/decoration/kdecoration/breezesettingsprovider.h
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* 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;
|
||||
};
|
||||
|
||||
}
|
||||
32
kwin/decoration/kdecoration/config/CMakeLists.txt
Normal file
32
kwin/decoration/kdecoration/config/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
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)
|
||||
221
kwin/decoration/kdecoration/config/breezeconfigwidget.cpp
Normal file
221
kwin/decoration/kdecoration/config/breezeconfigwidget.cpp
Normal file
|
|
@ -0,0 +1,221 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
}
|
||||
|
||||
}
|
||||
80
kwin/decoration/kdecoration/config/breezeconfigwidget.h
Normal file
80
kwin/decoration/kdecoration/config/breezeconfigwidget.h
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
57
kwin/decoration/kdecoration/config/breezedetectwidget.cpp
Normal file
57
kwin/decoration/kdecoration/config/breezedetectwidget.cpp
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
}
|
||||
|
||||
}
|
||||
43
kwin/decoration/kdecoration/config/breezedetectwidget.h
Normal file
43
kwin/decoration/kdecoration/config/breezedetectwidget.h
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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
|
||||
158
kwin/decoration/kdecoration/config/breezeexceptiondialog.cpp
Normal file
158
kwin/decoration/kdecoration/config/breezeexceptiondialog.cpp
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
}
|
||||
|
||||
}
|
||||
93
kwin/decoration/kdecoration/config/breezeexceptiondialog.h
Normal file
93
kwin/decoration/kdecoration/config/breezeexceptiondialog.h
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
};
|
||||
|
||||
}
|
||||
315
kwin/decoration/kdecoration/config/breezeexceptionlistwidget.cpp
Normal file
315
kwin/decoration/kdecoration/config/breezeexceptionlistwidget.cpp
Normal file
|
|
@ -0,0 +1,315 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
}
|
||||
|
||||
}
|
||||
105
kwin/decoration/kdecoration/config/breezeexceptionlistwidget.h
Normal file
105
kwin/decoration/kdecoration/config/breezeexceptionlistwidget.h
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
};
|
||||
|
||||
}
|
||||
72
kwin/decoration/kdecoration/config/breezeexceptionmodel.cpp
Normal file
72
kwin/decoration/kdecoration/config/breezeexceptionmodel.cpp
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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();
|
||||
}
|
||||
|
||||
}
|
||||
60
kwin/decoration/kdecoration/config/breezeexceptionmodel.h
Normal file
60
kwin/decoration/kdecoration/config/breezeexceptionmodel.h
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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];
|
||||
};
|
||||
|
||||
}
|
||||
50
kwin/decoration/kdecoration/config/breezeitemmodel.cpp
Normal file
50
kwin/decoration/kdecoration/config/breezeitemmodel.cpp
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
}
|
||||
|
||||
}
|
||||
94
kwin/decoration/kdecoration/config/breezeitemmodel.h
Normal file
94
kwin/decoration/kdecoration/config/breezeitemmodel.h
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
};
|
||||
|
||||
}
|
||||
373
kwin/decoration/kdecoration/config/breezelistmodel.h
Normal file
373
kwin/decoration/kdecoration/config/breezelistmodel.h
Normal file
|
|
@ -0,0 +1,373 @@
|
|||
//////////////////////////////////////////////////////////////////////////////
|
||||
// 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;
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#include "breezeconfigwidget.h"
|
||||
#include <KPluginFactory>
|
||||
|
||||
K_PLUGIN_CLASS_WITH_JSON(Breeze::ConfigWidget, "kcm_smoddecoration.json")
|
||||
|
||||
#include "kcm_breezedecoration.moc"
|
||||
13
kwin/decoration/kdecoration/config/kcm_smoddecoration.json
Normal file
13
kwin/decoration/kdecoration/config/kcm_smoddecoration.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"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
|
||||
}
|
||||
311
kwin/decoration/kdecoration/config/ui/breezeconfigurationui.ui
Normal file
311
kwin/decoration/kdecoration/config/ui/breezeconfigurationui.ui
Normal file
|
|
@ -0,0 +1,311 @@
|
|||
<?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&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>
|
||||
252
kwin/decoration/kdecoration/config/ui/breezeexceptiondialog.ui
Normal file
252
kwin/decoration/kdecoration/config/ui/breezeexceptiondialog.ui
Normal file
|
|
@ -0,0 +1,252 @@
|
|||
<?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>&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 &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>
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
<?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>
|
||||
150
kwin/decoration/kdecoration/frametexture.cpp
Normal file
150
kwin/decoration/kdecoration/frametexture.cpp
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
#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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
44
kwin/decoration/kdecoration/frametexture.h
Normal file
44
kwin/decoration/kdecoration/frametexture.h
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
#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;
|
||||
};
|
||||
}
|
||||
204
kwin/decoration/kdecoration/sizingmargins.cpp
Normal file
204
kwin/decoration/kdecoration/sizingmargins.cpp
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
#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;
|
||||
}
|
||||
}
|
||||
126
kwin/decoration/kdecoration/sizingmargins.h
Normal file
126
kwin/decoration/kdecoration/sizingmargins.h
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
#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;
|
||||
};
|
||||
}
|
||||
12
kwin/decoration/kdecoration/smod.json
Normal file
12
kwin/decoration/kdecoration/smod.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"KPlugin": {
|
||||
"Description": "Window decoration using the Breeze visual style for the Plasma Desktop",
|
||||
"EnabledByDefault": true,
|
||||
"Name": "SMOD"
|
||||
},
|
||||
"X-KDE-ConfigModule": "kcm_smoddecoration",
|
||||
"org.kde.kdecoration2": {
|
||||
"blur": true,
|
||||
"recommendedBorderSize": "Normal"
|
||||
}
|
||||
}
|
||||
53
kwin/decoration/kdecoration/smod/smod.h
Normal file
53
kwin/decoration/kdecoration/smod/smod.h
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
#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;
|
||||
}
|
||||
}
|
||||
403
kwin/decoration/kdecoration/smod/smodbutton.cpp
Normal file
403
kwin/decoration/kdecoration/smod/smodbutton.cpp
Normal file
|
|
@ -0,0 +1,403 @@
|
|||
#include "../breezebutton.h"
|
||||
#include "../frametexture.h"
|
||||
#include "../sizingmargins.h"
|
||||
|
||||
//#include "../breezedecoration.h"
|
||||
|
||||
#include <QPainter>
|
||||
|
||||
#include <KIconLoader>
|
||||
|
||||
namespace Breeze
|
||||
{
|
||||
using KDecoration2::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 QRect &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()->client();
|
||||
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()->client();
|
||||
|
||||
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)
|
||||
{
|
||||
KDecoration2::DecorationButton::hoverEnterEvent(event);
|
||||
|
||||
if (isHovered())
|
||||
{
|
||||
Q_EMIT buttonHoverStatus(type(), true, geometry().topLeft().toPoint());
|
||||
startHoverAnimation(1.0);
|
||||
}
|
||||
}
|
||||
|
||||
void Button::hoverLeaveEvent(QHoverEvent *event)
|
||||
{
|
||||
KDecoration2::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();
|
||||
}
|
||||
|
||||
}
|
||||
430
kwin/decoration/kdecoration/smod/smoddecoration.cpp
Normal file
430
kwin/decoration/kdecoration/smod/smoddecoration.cpp
Normal file
|
|
@ -0,0 +1,430 @@
|
|||
#include "../breezedecoration.h"
|
||||
#include "../breezebutton.h"
|
||||
#include "../frametexture.h"
|
||||
|
||||
#include <QLabel>
|
||||
#include <QPainter>
|
||||
#include <QPainterPath>
|
||||
#include <QString>
|
||||
#include <QPixmapCache>
|
||||
|
||||
#include <KDecoration2/DecorationButtonGroup>
|
||||
|
||||
namespace Breeze
|
||||
{
|
||||
static int g_sDecoCount = 0;
|
||||
static std::shared_ptr<KDecoration2::DecorationShadow> g_smod_shadow, g_smod_shadow_unfocus;
|
||||
|
||||
|
||||
Decoration::Decoration(QObject *parent, const QVariantList &args)
|
||||
: KDecoration2::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<KDecoration2::DecorationShadow>(nullptr));
|
||||
return;
|
||||
}
|
||||
if (client()->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<KDecoration2::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<KDecoration2::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 QRect &repaintRegion)
|
||||
{
|
||||
painter->fillRect(rect(), Qt::transparent);
|
||||
|
||||
smodPaintOuterBorder(painter, repaintRegion);
|
||||
//smodPaintInnerBorder(painter, repaintRegion);
|
||||
smodPaintGlow(painter, repaintRegion);
|
||||
smodPaintTitleBar(painter, repaintRegion);
|
||||
}
|
||||
|
||||
void Decoration::smodPaintGlow(QPainter *painter, const QRect &repaintRegion)
|
||||
{
|
||||
const auto c = client();
|
||||
|
||||
int SIDEBAR_HEIGHT = qMax(25, (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 QRect &repaintRegion)
|
||||
{
|
||||
Q_UNUSED(repaintRegion);
|
||||
bool active = client()->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 QRect &repaintRegion)
|
||||
{
|
||||
if (hideTitleBar())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hideCaption())
|
||||
{
|
||||
const auto c = client();
|
||||
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());
|
||||
auto rect = fm.boundingRect(caption);
|
||||
int blurWidth = rect.width() + 30;
|
||||
int blurHeight = rect.height();
|
||||
|
||||
QColor shadowColor = QColor(0, 0, 0, 255);
|
||||
QColor textColor = c->color(c->isActive() ? KDecoration2::ColorGroup::Active : KDecoration2::ColorGroup::Inactive, KDecoration2::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<KDecoration2::DecorationButton> button, m_rightButtons->buttons()) {
|
||||
static_cast<Button *>(button.data())->smodPaintGlow(painter, repaintRegion);
|
||||
}*/
|
||||
}
|
||||
|
||||
}
|
||||
8
kwin/decoration/libbreezecommon/CMakeLists.txt
Normal file
8
kwin/decoration/libbreezecommon/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
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)
|
||||
342
kwin/decoration/libbreezecommon/breezeboxshadowrenderer.cpp
Normal file
342
kwin/decoration/libbreezecommon/breezeboxshadowrenderer.cpp
Normal file
|
|
@ -0,0 +1,342 @@
|
|||
/*
|
||||
* 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
|
||||
82
kwin/decoration/libbreezecommon/breezeboxshadowrenderer.h
Normal file
82
kwin/decoration/libbreezecommon/breezeboxshadowrenderer.h
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
/*
|
||||
* 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
|
||||
593
kwin/decoration/po/ar/breeze_kwin_deco.po
Normal file
593
kwin/decoration/po/ar/breeze_kwin_deco.po
Normal file
|
|
@ -0,0 +1,593 @@
|
|||
# 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 "النوافذ النشطة"
|
||||
227
kwin/decoration/po/ar/breeze_style_config.po
Normal file
227
kwin/decoration/po/ar/breeze_style_config.po
Normal file
|
|
@ -0,0 +1,227 @@
|
|||
# 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 "متقدّم"
|
||||
414
kwin/decoration/po/ast/breeze_kwin_deco.po
Normal file
414
kwin/decoration/po/ast/breeze_kwin_deco.po
Normal file
|
|
@ -0,0 +1,414 @@
|
|||
# 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 ""
|
||||
194
kwin/decoration/po/ast/breeze_style_config.po
Normal file
194
kwin/decoration/po/ast/breeze_style_config.po
Normal file
|
|
@ -0,0 +1,194 @@
|
|||
# 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ú:"
|
||||
466
kwin/decoration/po/az/breeze_kwin_deco.po
Normal file
466
kwin/decoration/po/az/breeze_kwin_deco.po
Normal file
|
|
@ -0,0 +1,466 @@
|
|||
# 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"
|
||||
220
kwin/decoration/po/az/breeze_style_config.po
Normal file
220
kwin/decoration/po/az/breeze_style_config.po
Normal file
|
|
@ -0,0 +1,220 @@
|
|||
# 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"
|
||||
417
kwin/decoration/po/bg/breeze_kwin_deco.po
Normal file
417
kwin/decoration/po/bg/breeze_kwin_deco.po
Normal file
|
|
@ -0,0 +1,417 @@
|
|||
# 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 "Редактиране"
|
||||
198
kwin/decoration/po/bg/breeze_style_config.po
Normal file
198
kwin/decoration/po/bg/breeze_style_config.po
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
# 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 "Меню:"
|
||||
465
kwin/decoration/po/bs/breeze_kwin_deco.po
Normal file
465
kwin/decoration/po/bs/breeze_kwin_deco.po
Normal file
|
|
@ -0,0 +1,465 @@
|
|||
# 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"
|
||||
232
kwin/decoration/po/bs/breeze_style_config.po
Normal file
232
kwin/decoration/po/bs/breeze_style_config.po
Normal file
|
|
@ -0,0 +1,232 @@
|
|||
# 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"
|
||||
424
kwin/decoration/po/ca/breeze_kwin_deco.po
Normal file
424
kwin/decoration/po/ca/breeze_kwin_deco.po
Normal file
|
|
@ -0,0 +1,424 @@
|
|||
# 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"
|
||||
202
kwin/decoration/po/ca/breeze_style_config.po
Normal file
202
kwin/decoration/po/ca/breeze_style_config.po
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
# 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ú:"
|
||||
424
kwin/decoration/po/ca@valencia/breeze_kwin_deco.po
Normal file
424
kwin/decoration/po/ca@valencia/breeze_kwin_deco.po
Normal file
|
|
@ -0,0 +1,424 @@
|
|||
# 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"
|
||||
202
kwin/decoration/po/ca@valencia/breeze_style_config.po
Normal file
202
kwin/decoration/po/ca@valencia/breeze_style_config.po
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
# 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ú:"
|
||||
416
kwin/decoration/po/cs/breeze_kwin_deco.po
Normal file
416
kwin/decoration/po/cs/breeze_kwin_deco.po
Normal file
|
|
@ -0,0 +1,416 @@
|
|||
# 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"
|
||||
201
kwin/decoration/po/cs/breeze_style_config.po
Normal file
201
kwin/decoration/po/cs/breeze_style_config.po
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
# 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:"
|
||||
484
kwin/decoration/po/da/breeze_kwin_deco.po
Normal file
484
kwin/decoration/po/da/breeze_kwin_deco.po
Normal file
|
|
@ -0,0 +1,484 @@
|
|||
# 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"
|
||||
218
kwin/decoration/po/da/breeze_style_config.po
Normal file
218
kwin/decoration/po/da/breeze_style_config.po
Normal file
|
|
@ -0,0 +1,218 @@
|
|||
# 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"
|
||||
605
kwin/decoration/po/de/breeze_kwin_deco.po
Normal file
605
kwin/decoration/po/de/breeze_kwin_deco.po
Normal file
|
|
@ -0,0 +1,605 @@
|
|||
# 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 ®ulä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
Loading…
Add table
Add a link
Reference in a new issue