mirror of
https://github.com/labwc/labwc.git
synced 2026-04-11 08:21:13 -04:00
Merge branch 'master' into mouseemu
This commit is contained in:
commit
06129fe1ce
178 changed files with 10958 additions and 2691 deletions
17
.github/workflows/build.yml
vendored
17
.github/workflows/build.yml
vendored
|
|
@ -29,7 +29,7 @@ jobs:
|
|||
matrix:
|
||||
name: [
|
||||
Arch,
|
||||
Debian,
|
||||
# Debian,
|
||||
FreeBSD,
|
||||
Void-musl
|
||||
]
|
||||
|
|
@ -40,11 +40,11 @@ jobs:
|
|||
env:
|
||||
TARGET: 'sh -xe'
|
||||
|
||||
- name: Debian
|
||||
os: ubuntu-latest
|
||||
container: debian:testing
|
||||
env:
|
||||
TARGET: 'sh -xe'
|
||||
# - name: Debian
|
||||
# os: ubuntu-latest
|
||||
# container: debian:testing
|
||||
# env:
|
||||
# TARGET: 'sh -xe'
|
||||
|
||||
- name: FreeBSD
|
||||
os: ubuntu-latest
|
||||
|
|
@ -81,6 +81,7 @@ jobs:
|
|||
apt-get upgrade -y
|
||||
apt-get install -y git gcc clang gdb xwayland
|
||||
apt-get build-dep -y labwc
|
||||
apt-get install libwlroots-0.18-dev
|
||||
|
||||
- name: Install FreeBSD dependencies
|
||||
if: matrix.name == 'FreeBSD'
|
||||
|
|
@ -105,8 +106,8 @@ jobs:
|
|||
xbps-install -Syu
|
||||
xbps-install -y git meson gcc clang pkg-config scdoc \
|
||||
cairo-devel glib-devel libpng-devel librsvg-devel libxml2-devel \
|
||||
pango-devel wlroots0.17-devel gdb bash xorg-server-xwayland \
|
||||
dejavu-fonts-ttf
|
||||
pango-devel wlroots0.18-devel gdb bash xorg-server-xwayland \
|
||||
dejavu-fonts-ttf libsfdo-devel
|
||||
|
||||
# These build are executed on all runners
|
||||
- name: Build with gcc
|
||||
|
|
|
|||
|
|
@ -14,9 +14,10 @@
|
|||
- [4.3.3 The use of GNU extensions](#the-use-of-gnu-extensions)
|
||||
- [4.3.4 Naming Conventions](#naming-conventions)
|
||||
- [5. Commit Messages](#commit-messages)
|
||||
- [6. Submitting Patches](#submitting-patches)
|
||||
- [7. Native Language Support](#native-language-support)
|
||||
- [8. Upversion](#upversion)
|
||||
- [6. Unit Tests](#unit-tests)
|
||||
- [7. Submitting Patches](#submitting-patches)
|
||||
- [8. Native Language Support](#native-language-support)
|
||||
- [9. Upversion](#upversion)
|
||||
|
||||
# How to Contribute
|
||||
|
||||
|
|
@ -345,6 +346,29 @@ This first line should:
|
|||
And please wrap the commit message at max 74 characters, otherwise `git log`
|
||||
and similar look so weird. URLs and other references are exempt.
|
||||
|
||||
# Unit Tests
|
||||
|
||||
## Introduction
|
||||
|
||||
The tests live in the `t/` directory.
|
||||
|
||||
In the bigger scheme of validating that the compositor meets users' needs, unit
|
||||
tests do not contribute a great deal. However, they have a role to play in
|
||||
providing some verification that stand-alone functions behave as expected.
|
||||
|
||||
On this project, writing unit-tests is not compulsory nor do we measure
|
||||
coverage. The inclusion of the t/ directory does not signifiy a move towards
|
||||
test-driven development. We intend to use unit tests sparingly and only when
|
||||
devs find them useful.
|
||||
|
||||
## Usage
|
||||
|
||||
From repo top level directory:
|
||||
|
||||
meson setup -Dtest=enabled build
|
||||
meson compile -C build/
|
||||
meson test --verbose -C build/
|
||||
|
||||
# Submitting patches
|
||||
|
||||
Base both bugfixes and new features on `master`.
|
||||
|
|
|
|||
287
NEWS.md
287
NEWS.md
|
|
@ -9,7 +9,9 @@ The format is based on [Keep a Changelog]
|
|||
|
||||
| Date | All Changes | wlroots version | lines-of-code |
|
||||
|------------|---------------|-----------------|---------------|
|
||||
| 2024-06-09 | [unreleased] | 0.17.3 | |
|
||||
| 2024-08-16 | [0.8.0] | 0.18.0 | 23320 |
|
||||
| 2024-06-19 | [0.7.4] | 0.17.4 | 22746 |
|
||||
| 2024-06-12 | [0.7.3] | 0.17.4 | 22731 |
|
||||
| 2024-05-10 | [0.7.2] | 0.17.3 | 21368 |
|
||||
| 2024-03-01 | [0.7.1] | 0.17.1 | 18624 |
|
||||
| 2023-12-22 | [0.7.0] | 0.17.1 | 16576 |
|
||||
|
|
@ -31,13 +33,254 @@ The format is based on [Keep a Changelog]
|
|||
|
||||
## [unreleased]
|
||||
|
||||
The most noteworthy additions in this release are:
|
||||
|
||||
1. Titlebar window icons and layout configuration
|
||||
2. Support for the cosmic-workspace protocol and the openbox inspired
|
||||
client-list-combined-menu for a better user experience with workspaces.
|
||||
|
||||
Notes to package maintainers:
|
||||
|
||||
- The SSD titlebar window icon support requires libsfdo to be added as a
|
||||
dependency or statically linked. If this is not wanted, add -Dicon=disabled to
|
||||
the `meson setup` command in the build script for the next release.
|
||||
- PRs #1716 and #2205 add labwc xdg-portal configuration, modify `labwc.desktop`
|
||||
and amend `XDG_CURRENT_DESKTOP` which should enable better out-of-the-box
|
||||
support for xdg-desktop-portal, but if you already ship a custom setup for
|
||||
this you or have different requirements, please review this change.
|
||||
|
||||
### Added
|
||||
|
||||
- Support dmabuf feedback (#2234, #1278)
|
||||
- Add initial implementation of cosmic-workspace-unstable-v1 (#2030)
|
||||
- Optionally support SSD titlebar window icons. When an icon file is not found
|
||||
or could not be loaded, the window menu icon is shown as before. The icon
|
||||
theme can be selected with `<theme><icon>` (#2128)
|
||||
- Add actions `ToggleSnapToEdge` and `ToggleSnapToRegion`. These behave like
|
||||
`SnapToEdge` and `SnapToRegion`, except that they untile the window when
|
||||
already being tiled to the given region or direction.
|
||||
Written-by: @jp7677 and @tokyo4j (#2154)
|
||||
- Add action `UnSnap`. This behaves like `ToggleSnapToEdge/Region` but
|
||||
unconditionally. Written-by: @jp7677 and @tokyo4j (#2154)
|
||||
- Handle xdg-shell `show_window_menu` requests (#2167)
|
||||
- Support the openbox style menus listed below. Written-by: @droc12345
|
||||
1. `client-list-combined-menu` shows windows across all workspaces. This can
|
||||
be used with a mouse/key bind using:
|
||||
`<action name="ShowMenu" menu="client-list-combined-menu"/>` (#2101)
|
||||
2. `client-send-to` shows all workspaces that the current window can be sent
|
||||
to. This can additional be used within a client menu using:
|
||||
`<menu id="client-send-to-menu" label="Send to Workspace..." />` (#2152)
|
||||
- Add theme option for titlebar padding and button spacing (#2189)
|
||||
|
||||
```
|
||||
window.button.height: 26
|
||||
window.titlebar.padding.width: 0
|
||||
window.titlebar.padding.height: 0
|
||||
window.button.spacing: 0
|
||||
```
|
||||
|
||||
- Set titlebar height based on the maximum height of any of the objects within
|
||||
it, rather than just taking the font height into account (#2152)
|
||||
- Add theme option for setting button hover effect corner radius (#2127, #2231)
|
||||
|
||||
```
|
||||
window.button.hover.bg.corner-radius: 0
|
||||
```
|
||||
|
||||
- Add position arguments for menus. Written-by: @droc12345 (#2102)
|
||||
|
||||
```
|
||||
<action name="ShowMenu">
|
||||
<menu>root-menu</menu>
|
||||
<position>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
</position>
|
||||
</action>
|
||||
```
|
||||
|
||||
- Allow interactive window movement when horizontally or vertically maximized
|
||||
and add associated config option `<resistance><unMaximizeThreshold>` (#2052)
|
||||
- Add optional Shade (shade.xbm) and AllDesktops (desk.xbm) buttons and theme
|
||||
options:
|
||||
|
||||
```
|
||||
window.active.button.desk.unpressed.image.color
|
||||
window.inactive.button.desk.unpressed.image.color
|
||||
window.active.button.shade.unpressed.image.color
|
||||
window.inactive.button.shade.unpressed.image.color
|
||||
```
|
||||
|
||||
- Make action `FocusOutput` behave like `MoveToOutput` by adding direction and
|
||||
wrap arguments. Written-by: @orfeasxyz (#2100)
|
||||
- Add config option for titlebar layout. Written-by: @xi (#2088, #2150)
|
||||
|
||||
```
|
||||
<titlebar>
|
||||
<layout>icon:iconify,max,close</layout>
|
||||
<showTitle>yes|no</showTitle>
|
||||
</titlebar>
|
||||
```
|
||||
|
||||
- Add `Oblique` option to `<theme><font><style>`. Written-by: @droc12345 (#2097)
|
||||
- Support menu titles defined by `<separator label="">`.
|
||||
- Add the theme option `menu.title.bg.color: #589bda`
|
||||
- Add theme options `menu.title.text.color` and `menu.title.text.justify`.
|
||||
Written-by: @droc12345 (#2097)
|
||||
- Add font place MenuHeader: `<font place="MenuHeader">`.
|
||||
Written-by: @droc12345 (#2097)
|
||||
- Add actions `EnableTabletMouseEmulation` and `DisableTabletMouseEmulation`.
|
||||
Written-by: @jp7677 (#2091)
|
||||
- Set 'labwc' as `app_id` and `title` for nested outputs (#2055)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix button release events sometimes not being sent (#2226)
|
||||
- Fix xdg-shell popups appearing on wrong output with some Qt themes. (#2224)
|
||||
- Take into account xdg-shell minimum window size for resizing. This is
|
||||
relevant when using `<resize drawContents="no">` (#2221)
|
||||
- Fix button scaling issues (#2207, #2225)
|
||||
- Add portals.conf file, amend `labwc.desktop` and modify `XDG_CURRENT_DESKTOP`
|
||||
for better out-of-the-box xdg-desktop-portal support. This helps with for
|
||||
example screensharing. Written-by: @rcalixte @jp7677 (#1503, #1716)
|
||||
- Disable the Inhibit D-BUS interface in xdg-portals configuration to fix an
|
||||
issue with some clients (like Firefox) ignoring the idle-inhibit protocol.
|
||||
Written-by: @jp7677 (#2205)
|
||||
- Prevent `Drag` mousebinds from running without button press (#2196)
|
||||
- Handle slow un-maximize with empty natural geometry better (#2191)
|
||||
- Fix de-synced SSD when shrinking Thunderbird xdg-shell window (#2190)
|
||||
- Fix xdg-shell out-of-sync configure state when clients time out
|
||||
Written-by: @cillian64 (#2174)
|
||||
- Fix small flicker when client initially submits a window size smaller than the
|
||||
minimum value (#2166)
|
||||
- Allow server-side decoration to be smaller than minimal size by hiding
|
||||
buttons (#2116)
|
||||
- Fix incorrect cursor shape on titlebar corner without buttons (#2105)
|
||||
- Fix delayed pipe menu response on item destroy (#2094)
|
||||
- Destroy xdg-shell foreign toplevel handle on unmap (#2075)
|
||||
- Sync XWayland foreign-toplevel and associated outputs on re-map (#2075)
|
||||
|
||||
### Changed
|
||||
|
||||
- Theme options `padding.height` and `titlebar.height` have been removed to
|
||||
minimize breaking changes with the visual appearance of the titlebar when
|
||||
using openbox themes. As a result, and depending on your configuration,
|
||||
the titlebar height may change by a small number of pixels (#2189)
|
||||
- Move input config `<scrollFactor>` to `<libinput>` section to allow
|
||||
per-device configuration of scroll factor (e.g. setting different scroll
|
||||
factors for mice and touchpads). (#2057)
|
||||
|
||||
## [0.8.0]
|
||||
|
||||
The main focus in this release has been to port labwc to wlroots 0.18 and to
|
||||
grind out associated regressions. Nonetheless, it contains a few non-related
|
||||
additions and fixes as described below.
|
||||
|
||||
There are a couple of regression warnings when using wlroots 0.18:
|
||||
|
||||
1. There appears to be an issue with increased commit failures, particularly
|
||||
with intel drivers. If this turns out to be an issue for anyone please try
|
||||
running with `WLR_DRM_NO_ATOMIC=1` or run the labwc v0.7 branch or its latest
|
||||
release until this is resolved.
|
||||
2. Fullscreen VRR is broken but should be fixed once wlroots 0.18.1 is released.
|
||||
Again, if that is a problem we advise to stay with the v0.7 branch in the
|
||||
short term until fixed. PR #2079
|
||||
|
||||
A v0.7 branch has been created for bug fixes beyond `0.7.3` (built with wlroots
|
||||
`0.17`).
|
||||
|
||||
A big thank you goes to @Consolatis for carefully crafting the commits to port
|
||||
across to wlroots 0.18.0. Many thanks also to the other core devs @ahesford,
|
||||
@jlindgren90, @johanmalm and @tokyo4j for reviewing, merging as well as
|
||||
contributing many patches with fixes and new features. And in this release we
|
||||
have some great contributions from @jp7677, @kode54, @xi and @heroin-moose which
|
||||
have been attributed with a 'Written-by' against each relevant log entry.
|
||||
|
||||
### Added
|
||||
|
||||
- Add options `fullscreen` and `fullscreenForced` for `<core><allowTearing>`
|
||||
Written-by: @jp7677 & @Consolatis PR #1941
|
||||
- Optionally allow keybindings when session is locked, which for example can be
|
||||
useful for volume settings. Written-by: @xi PR #2041
|
||||
|
||||
```xml
|
||||
<keyboard><keybind key="" allowWhenLocked="">
|
||||
```
|
||||
|
||||
- Add resistance when dragging tiled/maximized windows with config option
|
||||
`<resistance><unSnapThreshold>`. PR #2009 #2056
|
||||
- Implement support for renderer loss recovery. Written-by: @kode54 PR #1997
|
||||
- Support xinitrc scripts to configure XWayland server on launch. PR #1963
|
||||
- Add theme option `window.button.width` to set window button size.
|
||||
Written-by: @heroin-moose PR #1965
|
||||
- Add `cascade` placement policy. PR #1890
|
||||
|
||||
```xml
|
||||
<placement>
|
||||
<policy>cascade</policy>
|
||||
<cascadeOffset x="40" y="30"/>
|
||||
</placement>
|
||||
```
|
||||
|
||||
- Support relative tablet motion. Written-by: @jp7677 PR #1962
|
||||
|
||||
```xml
|
||||
<tabletTool motion="absolute|relative" relativeMotionSensitivity="1.0"/>
|
||||
```
|
||||
|
||||
### Fixed
|
||||
|
||||
- Make tablet rotation follow output rotation. Written-by: @jp7677. PR #2060
|
||||
- Fix error when launching windowed Chromium. PR #2069
|
||||
- Fix empty `XKB_DEFAULT_LAYOUT` bug. PR #2061
|
||||
- Take into account CSD borders when unconstraining XDG popups. PR #2016
|
||||
- Choose xdg-popup output depending on xdg-positioner PR #2016
|
||||
- Fix wlroots-0.18 regression causing flicker with some layer-shell clients like
|
||||
fuzzel on launch. PR #2021
|
||||
- Fix incorrect condition in server-side-deco logic PR #2020
|
||||
- Fix flicker of snapped windows in nested session. PR #2010
|
||||
- Fix tearing with atomic mode setting. Written-by: @kode54 PR #1996
|
||||
- Handle initially maximized and fullscreen xdg-shell windows better.
|
||||
PRs #1956 and #2007
|
||||
- Set initial geometry of maximized and fullscreen XWayland windows in the
|
||||
`map_request` handler to avoid visual glitches with some apps. PR #1529
|
||||
- Disable pango glyph position rounding to avoid text geometry jump around when
|
||||
changing scale.
|
||||
|
||||
### Changed
|
||||
|
||||
- Make windows stay fullscreen when associated output is disconnected. PR #2040
|
||||
|
||||
## [0.7.4]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Make SSD borders respect snapped state on Reconfigure. PR #2003
|
||||
- Fix magnifier by disabling direct scanout when active. PR #1989
|
||||
- Fix crash triggered by pipemenu without parent `<menu>` element. PR #1988
|
||||
|
||||
## [0.7.3]
|
||||
|
||||
Following a couple of big releases, this one feels like more steady with lots of
|
||||
focus on bug fixes and stability. In terms of new features the most noteworthy
|
||||
ones include improved tablet support (by @jp7677), `Super_L` on-release keybinds
|
||||
(by @spl237 from the Raspberry Pi teams) and the screen magnifier which was a
|
||||
joint effort by @spl237 and @Consolatis.
|
||||
|
||||
### Added
|
||||
|
||||
- Add config option `<core><xwaylandPersistence>` to support keeping XWayland
|
||||
alive even when no clients are connected. PR #1961
|
||||
- Support xdg-shell protocol v3 with popup repositioning. #1950
|
||||
Also see https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3514
|
||||
which adds support on the wlroots side.
|
||||
- Add action `ToggleTabletMouseEmulation`. Written-by: jp7677 PR #1915
|
||||
- Implement `<resize><drawContents>`. With thanks to @tokyo4j PR #1863
|
||||
- Add `onRelease` option to `<keybind>` in support of binding `Super_L` to a
|
||||
menu. Written-by: @spl237 PR #1888
|
||||
- Add initial support for `security-context-v1` (user configurable blocklists
|
||||
are still missing). Written-by: @nesteroff PR #1817
|
||||
- Add partial support for `tablet-v2-manager`. Written-by: @jp7677 PR #1678
|
||||
- Add support for `tablet-v2-manager`. Written-by: @jp7677 PR #1678 #1882
|
||||
- Add action `UnMaximize`. PR #1831
|
||||
- Support multiple IME popups. PR #1823
|
||||
- Add `All` context for mouse bindings which need to be handled irrespective of
|
||||
|
|
@ -51,6 +294,33 @@ The format is based on [Keep a Changelog]
|
|||
|
||||
### Fixed
|
||||
|
||||
- When looking for menu.xml, go through all paths rather than just giving up
|
||||
if not found in the first path searched. This makes it consistent with how
|
||||
other config/theme files are handled. PR #1971
|
||||
- Fix memory leaks in theme.c and menu.c. PR #1971
|
||||
- Fix session-lock bugs related to keyboard focus. PR #1952
|
||||
- Clear focused surface on lock
|
||||
- Restore focused view on unlock
|
||||
- Fix memory leak in ssd/ssd-shadow.c PR #1954
|
||||
- Respect `menu.overlap.x` when using pipemenus. PR #1940
|
||||
- Do not try to restore windows to very small width/height on unmaximize.
|
||||
This fixes a bug with Thonny (Python IDE made with Tk). PR #1938
|
||||
- Conditially set squared server-side decoration (SSD) corners when a view is
|
||||
tiled. Written-by: @jp7677 PR #1926
|
||||
- Remember initial direction when starting window-cycling with `PreviousView`.
|
||||
Also make the toggling of direction when shift is pressed relative to the
|
||||
initial direction. For example if W-j is bound to PreviousWindow, subsequent
|
||||
key presses will continue to cycle backwards unless shift is also pressed.
|
||||
Written-by: @droc12345 PR #1919
|
||||
- Show dnd icon above layer-shell surfaces. PR #1936
|
||||
- Initialize locale after reading environment files so that client-menu items
|
||||
and workspace names follow the env var `LANG` should that be set in
|
||||
`~/.config/labwc/environment` (which is not recommended, but we prefer to
|
||||
handle it properly if it is). PR #1927
|
||||
- Fix crash on `menu.xml` containing `<item>` without a parent `<menu>`.
|
||||
PR #1907
|
||||
- Reset XWayland cursor image on cursor theme reload to avoid trying to read
|
||||
destroyed pixel data. PR #1895
|
||||
- Prevent child views from opening outside of usable area. PR #1878
|
||||
- Fix IME popups issues (flicker when popup surface is initially mapped
|
||||
and incorrectly showing multiple popups). PR #1872
|
||||
|
|
@ -74,15 +344,15 @@ The format is based on [Keep a Changelog]
|
|||
|
||||
### Changed
|
||||
|
||||
- Remove subprojects/seatd.wrap as no longer needed
|
||||
- Action `MoveToCursor` is deprecated in favour of:
|
||||
`<action name="AutoPlace" policy="cursor"/>`.
|
||||
|
||||
## [0.7.2]
|
||||
|
||||
This release is shaping up to be the second in a row that is larger than
|
||||
usual in terms of both fixes and new features. Significant additions
|
||||
include input-methods, pipemenus, snap-to-edge overlays and optionally
|
||||
drop-shadows.
|
||||
This release shaped up to be the second in a row that is larger than usual in
|
||||
terms of both fixes and new features. Significant additions include
|
||||
input-methods, pipemenus, snap-to-edge overlays and optionally drop-shadows.
|
||||
|
||||
As usual, most of the commits are by the core devs: @ahesford, @Consolatis,
|
||||
@jlindgren90, @johanmalm and @tokyo4j, but we also have many great
|
||||
|
|
@ -1394,7 +1664,10 @@ Compile with wlroots 0.12.0 and wayland-server >=1.16
|
|||
ShowMenu
|
||||
|
||||
[Keep a Changelog]: https://keepachangelog.com/en/1.0.0/
|
||||
[unreleased]: https://github.com/labwc/labwc/compare/0.7.2...HEAD
|
||||
[unreleased]: https://github.com/labwc/labwc/compare/0.8.0...HEAD
|
||||
[0.8.0]: https://github.com/labwc/labwc/compare/0.7.3...0.8.0
|
||||
[0.7.4]: https://github.com/labwc/labwc/compare/0.7.3...0.7.4
|
||||
[0.7.3]: https://github.com/labwc/labwc/compare/0.7.2...0.7.3
|
||||
[0.7.2]: https://github.com/labwc/labwc/compare/0.7.1...0.7.2
|
||||
[0.7.1]: https://github.com/labwc/labwc/compare/0.7.0...0.7.1
|
||||
[0.7.0]: https://github.com/labwc/labwc/compare/0.6.6...0.7.0
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ prevent installing the wlroots headers:
|
|||
## 3. Configuration
|
||||
|
||||
User config files are located at `${XDG_CONFIG_HOME:-$HOME/.config/labwc/}`
|
||||
with the following five files being used: [rc.xml], [menu.xml], [autostart], [shutdown],
|
||||
with the following six files being used: [rc.xml], [menu.xml], [autostart], [shutdown],
|
||||
[environment] and [themerc-override].
|
||||
|
||||
Run `labwc --reconfigure` to reload configuration and theme.
|
||||
|
|
|
|||
3
data/labwc-portals.conf
Normal file
3
data/labwc-portals.conf
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[preferred]
|
||||
default=wlr;*
|
||||
org.freedesktop.impl.portal.Inhibit=none
|
||||
|
|
@ -4,4 +4,4 @@ Comment=A wayland stacking compositor
|
|||
Exec=labwc
|
||||
Icon=labwc
|
||||
Type=Application
|
||||
DesktopNames=wlroots
|
||||
DesktopNames=labwc;wlroots
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ Config layout for ~/.config/labwc/
|
|||
- rc.xml
|
||||
- shutdown
|
||||
- themerc-override
|
||||
- xinitrc
|
||||
|
||||
See `man labwc-config and `man labwc-theme` for further details.
|
||||
|
||||
|
|
|
|||
|
|
@ -60,13 +60,13 @@
|
|||
|
||||
##
|
||||
## This allows xdg-desktop-portal-wlr to function (e.g. for screen-recording).
|
||||
## It is automatically set to "wlroots" by labwc though, so it is only
|
||||
## It is automatically set to "labwc:wlroots" by labwc though, so it is only
|
||||
## included here for completeness. Again, labwc will not over-write an
|
||||
## already set environment variable, so if you need it set to something else,
|
||||
## then uncomment and adjust.
|
||||
##
|
||||
|
||||
# XDG_CURRENT_DESKTOP=wlroots
|
||||
# XDG_CURRENT_DESKTOP=labwc:wlroots
|
||||
|
||||
##
|
||||
## This causes a virtual output to be created automatically whenever there
|
||||
|
|
|
|||
|
|
@ -91,19 +91,35 @@ Actions are used in menus and keyboard/mouse bindings.
|
|||
Move window relative to its current position. Positive value of x moves
|
||||
it right, negative left. Positive value of y moves it down, negative up.
|
||||
|
||||
*<action name="ToggleSnapToEdge" direction="value" />*++
|
||||
*<action name="SnapToEdge" direction="value" />*
|
||||
Resize window to fill half the output in the given direction. Supports
|
||||
directions "left", "up", "right", "down" and "center".
|
||||
|
||||
ToggleSnapToEdge additionally toggles the active window between
|
||||
tiled to the given direction and its untiled position.
|
||||
|
||||
*<action name="ToggleSnapToRegion" region="value" />*++
|
||||
*<action name="SnapToRegion" region="value" />*
|
||||
Resize and move active window according to the given region.
|
||||
|
||||
ToggleSnapToRegion additionally toggles the active window between
|
||||
tiled to the given region and its untiled position.
|
||||
|
||||
See labwc-config(5) for further information on how to define regions.
|
||||
|
||||
*<action name="NextWindow" />*
|
||||
Cycle focus to next window.
|
||||
*<action name="UnSnap" />*
|
||||
Resize and move the active window back to its untiled or unmaximized
|
||||
position if it had been maximized or tiled to a direction or region.
|
||||
|
||||
*<action name="NextWindow" />*++
|
||||
*<action name="PreviousWindow" />*
|
||||
Cycle focus to previous window.
|
||||
Cycle focus to next/previous window respectively.++
|
||||
Default keybind for NextWindow is Alt-Tab.
|
||||
|
||||
The shift key is used to reverse direction while cycling.
|
||||
|
||||
The arrow keys are used to move forwards/backwards while cycling.
|
||||
|
||||
*<action name="Reconfigure" />*
|
||||
Re-load configuration and theme files.
|
||||
|
|
@ -111,14 +127,26 @@ Actions are used in menus and keyboard/mouse bindings.
|
|||
*<action name="ShowMenu" menu="value" atCursor="yes" />*
|
||||
Show a menu.
|
||||
|
||||
*menu* The name of the menu to show. The menus "root-menu" and
|
||||
"client-menu" are guaranteed to exist, but others may be defined
|
||||
explicitly. See labwc-menu(5) for more information.
|
||||
*menu* The name of the menu to show. The menus "root-menu",
|
||||
"client-menu", "client-send-to-menu" and "client-list-combined-menu"
|
||||
are guaranteed to exist, but others may be defined explicitly.
|
||||
See labwc-menu(5) for more information.
|
||||
|
||||
*atCursor* [yes|no] When opening a menu, open the menu at the location
|
||||
of the mouse cursor. When set to no, the menu will appear at the
|
||||
upper-left corner of the window associated with the action. Default is
|
||||
yes.
|
||||
upper-left corner of the window associated with the action or underneath
|
||||
the window button that opened the menu. Default is yes.
|
||||
|
||||
*position* Show the menu in the specified position on the monitor
|
||||
that has cursor focus, see below.
|
||||
|
||||
The position tag has two sub-tags. <x> and <y> specify a position and
|
||||
take either a pixel value, the string "center" which will center the
|
||||
menu in that dimension, or a relative value specified as a percentage
|
||||
A relative value is interpreted in terms of the monitor the menu will
|
||||
be shown on, and will be relative to the left/top edge of the menu
|
||||
window and monitor for positive values, and to the right/bottom edge
|
||||
for negative values.
|
||||
|
||||
*<action name="SetDecorations" decorations="value" forceSSD="no" />*
|
||||
Set decorations of focused window.
|
||||
|
|
@ -184,12 +212,27 @@ Actions are used in menus and keyboard/mouse bindings.
|
|||
original window. There can be multiple windows with this mode set.
|
||||
|
||||
*<action name="ToggleTearing" />*
|
||||
Toggles tearing for the focused window.
|
||||
Toggles tearing for the focused window between enabled and disabled.
|
||||
This overrides the preference (tearing hint) from the focused window.
|
||||
|
||||
*<action name="FocusOutput" output="HDMI-A-1" />*
|
||||
Give focus to topmost window on given output and warp the cursor
|
||||
to the center of the window. If the given output does not contain
|
||||
any windows, the cursor is centered on the given output.
|
||||
Requires the config option 'allowTearing'. When 'allowTearing' is set
|
||||
to 'fullscreen' or 'fullscreenForced', tearing will still only be
|
||||
enabled if the active window is in fullscreen mode.
|
||||
|
||||
*<action name="FocusOutput" output="HDMI-A-1" direction="value" wrap="no" />*
|
||||
Give focus to topmost window on other output and warp the cursor
|
||||
to the center of the window.
|
||||
|
||||
If *output* is specified, the focus is given to the specified output and
|
||||
*direction* is ignored. If *output* is omitted, *direction* may be one
|
||||
of "left", "right", "up" or "down" to indicate that the focus should be
|
||||
given to the next output in that direction (if one exists).
|
||||
|
||||
*wrap* [yes|no] When using the direction attribute, wrap around
|
||||
from right-to-left or top-to-bottom, and vice versa. Default is no.
|
||||
|
||||
If the target output does not contain any windows, the cursor will
|
||||
be centered on the output.
|
||||
|
||||
*<action name="MoveToOutput" output="HDMI-A-1" direction="value" wrap="no" />*
|
||||
Moves active window to other output, unless the window state is
|
||||
|
|
@ -273,9 +316,9 @@ Actions are used in menus and keyboard/mouse bindings.
|
|||
*<action name="AutoPlace" policy="value"/>*
|
||||
Reposition the window according to the desired placement policy.
|
||||
|
||||
*policy* [automatic|cursor|center] Use the specified policy, which has
|
||||
the same meaning as the corresponding value for *<placement><policy>*.
|
||||
Default is automatic.
|
||||
*policy* [automatic|cursor|center|cascade] Use the specified policy,
|
||||
which has the same meaning as the corresponding value for
|
||||
*<placement><policy>*. Default is automatic.
|
||||
|
||||
*<action name="Shade" />*++
|
||||
*<action name="Unshade" />*++
|
||||
|
|
@ -286,6 +329,11 @@ Actions are used in menus and keyboard/mouse bindings.
|
|||
decorations (including those for which the server-side titlebar has been
|
||||
hidden) are not eligible for shading.
|
||||
|
||||
*<action name="EnableTabletMouseEmulation" />*++
|
||||
*<action name="DisableTabletMouseEmulation" />*++
|
||||
*<action name="ToggleTabletMouseEmulation">*
|
||||
Enable, disable or toggle mouse emulation for drawing tablets respectively.
|
||||
|
||||
*<action name="ToggleMagnify">*
|
||||
Toggle the screen magnifier on or off at the last magnification level
|
||||
used.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ labwc - configuration files
|
|||
|
||||
Labwc uses openbox-3.6 specification for configuration and theming, but does not
|
||||
support all options. The following files form the basis of the labwc
|
||||
configuration: rc.xml, menu.xml, autostart, shutdown and environment.
|
||||
configuration: rc.xml, menu.xml, autostart, shutdown, environment and xinitrc.
|
||||
|
||||
No configuration files are needed to start and run labwc.
|
||||
|
||||
|
|
@ -78,6 +78,10 @@ in labwc-theme(5).
|
|||
*rc.xml* is the main configuration file and all its options are described in
|
||||
detail below.
|
||||
|
||||
The *xinitrc* file is executed as a shell script whenever labwc launches the
|
||||
Xwayland X11 server. This may happen multiple times throughout the session if
|
||||
Xwayland is not configured to persist when no X11 clients are connected.
|
||||
|
||||
# CONFIGURATION
|
||||
|
||||
This section describes *rc.xml* configuration options.
|
||||
|
|
@ -181,11 +185,23 @@ this is for compatibility with Openbox.
|
|||
*fullscreen* enables adaptive sync whenever a window is in fullscreen
|
||||
mode.
|
||||
|
||||
*<core><allowTearing>* [yes|no]
|
||||
*<core><allowTearing>* [yes|no|fullscreen|fullscreenForced]
|
||||
Allow tearing to reduce input lag. Default is no.
|
||||
This option requires setting the environment variable
|
||||
WLR_DRM_NO_ATOMIC=1.
|
||||
*yes* allow tearing if requested by the active window.
|
||||
|
||||
*yes* allows tearing if requested by the active window.
|
||||
|
||||
*fullscreen* allows tearing if requested by the active window, but
|
||||
only when the window is in fullscreen mode.
|
||||
|
||||
*fullscreenForced* enables tearing whenever the active window is in
|
||||
fullscreen mode, whether or not the application has requested tearing.
|
||||
|
||||
Use the *ToggleTearing* action for forcefully enable tearing.
|
||||
|
||||
Note: Enabling this option with atomic mode setting is experimental. If
|
||||
you experience undesirable side effects when tearing is allowed,
|
||||
consider setting the environment variable WLR_DRM_NO_ATOMIC=1 when
|
||||
launching labwc.
|
||||
|
||||
*<core><reuseOutputMode>* [yes|no]
|
||||
Try to re-use the existing output mode (resolution / refresh rate).
|
||||
|
|
@ -194,14 +210,31 @@ this is for compatibility with Openbox.
|
|||
be used with labwc the preferred mode of the monitor is used instead.
|
||||
Default is no.
|
||||
|
||||
*<core><xwaylandPersistence>* [yes|no]
|
||||
Keep XWayland alive even when no clients are connected, rather than
|
||||
using a "lazy" policy that allows the server to launch on demand and die
|
||||
when it is no longer needed. Default is no.
|
||||
|
||||
Note: changing this setting requires a restart of labwc.
|
||||
|
||||
## PLACEMENT
|
||||
|
||||
*<placement><policy>* [center|automatic|cursor]
|
||||
*<placement><policy>* [center|automatic|cursor|cascade]
|
||||
Specify a placement policy for new windows. The "center" policy will
|
||||
always place windows at the center of the active output. The "automatic"
|
||||
policy will try to place new windows in such a way that they will
|
||||
have minimal overlap with existing windows. The "cursor" policy will
|
||||
center new windows under the cursor. Default is "center".
|
||||
center new windows under the cursor. The "cascade" policy will try to
|
||||
place new windows at the center of the active output, but possibly
|
||||
shifts its position to bottom-right not to cover existing windows.
|
||||
Default is "center".
|
||||
|
||||
*<placement><cascadeOffset><x>*++
|
||||
*<placement><cascadeOffset><y>*
|
||||
Specify the offset by which a new window can be shifted from an existing
|
||||
window when <placement><policy> is "cascade". These values must be positive.
|
||||
Default is the height of titlebar (the sum of *titlebar.height* and
|
||||
*border.width* from theme) plus 5 for both *x* and *y*.
|
||||
|
||||
## WINDOW SWITCHER
|
||||
|
||||
|
|
@ -293,6 +326,15 @@ this is for compatibility with Openbox.
|
|||
|
||||
The default value for both parameters is 20 pixels.
|
||||
|
||||
*<resistance><unSnapThreshold>*
|
||||
Sets the movement of cursor in pixel required for a tiled or maximized
|
||||
window to be moved with an interactive move. Default is 20.
|
||||
|
||||
*<resistance><unMaximizeThreshold>*
|
||||
Sets the one-dimentional movement of cursor in pixel required for a
|
||||
*vertically or horizontally* maximized window to be moved with an
|
||||
interactive move. Default is 150.
|
||||
|
||||
## FOCUS
|
||||
|
||||
*<focus><followMouse>* [yes|no]
|
||||
|
|
@ -395,6 +437,29 @@ extending outward from the snapped edge.
|
|||
*<theme><name>*
|
||||
The name of the Openbox theme to use. It is not set by default.
|
||||
|
||||
*<theme><icon>*
|
||||
The name of the icon theme to use. It is not set by default.
|
||||
|
||||
*<theme><titlebar><layout>*
|
||||
Selection and order of buttons in a window's titlebar.
|
||||
The following identifiers can be used, each only once:
|
||||
- 'icon': window icon
|
||||
- 'menu': window menu
|
||||
- 'iconify': iconify
|
||||
- 'max': maximize toggle
|
||||
- 'close': close
|
||||
- 'shade': shade toggle
|
||||
- 'desk': all-desktops toggle
|
||||
|
||||
A colon deliminator is used to separate buttons on the left and right,
|
||||
whereas commas are used to separate items within a section. It is
|
||||
mandatory to use one colon.
|
||||
|
||||
Default: icon:iconify,max,close
|
||||
|
||||
*<theme><titlebar><showTitle>* [yes|no]
|
||||
Show the window title in the titlebar. Default is yes.
|
||||
|
||||
*<theme><cornerRadius>*
|
||||
The radius of server side decoration top corners. Default is 8.
|
||||
|
||||
|
|
@ -411,6 +476,7 @@ extending outward from the snapped edge.
|
|||
- ActiveWindow - titlebar of active window
|
||||
- InactiveWindow - titlebar of all windows that aren't focused by the
|
||||
cursor
|
||||
- MenuHeader - menu title
|
||||
- MenuItem - menu item (currently only root menu)
|
||||
- OnScreenDisplay - items in the on screen display
|
||||
If no place attribute is provided, the setting will be applied to all
|
||||
|
|
@ -423,7 +489,7 @@ extending outward from the snapped edge.
|
|||
Font size in pixels. Default is 10.
|
||||
|
||||
*<theme><font place=""><slant>*
|
||||
Font slant (normal or italic). Default is normal.
|
||||
Font slant (normal, oblique or italic). Default is normal.
|
||||
|
||||
*<theme><font place=""><weight>*
|
||||
Font weight (normal or bold). Default is normal.
|
||||
|
|
@ -471,7 +537,7 @@ extending outward from the snapped edge.
|
|||
Stores the keyboard layout either globally or per window and restores
|
||||
it when switching back to the window. Default is global.
|
||||
|
||||
*<keyboard><keybind key="" layoutDependent="">*
|
||||
*<keyboard><keybind key="" layoutDependent="" onRelease="" allowWhenLocked="">*
|
||||
Define a *key* binding in the format *modifier-key*, where supported
|
||||
modifiers are:
|
||||
- S (shift)
|
||||
|
|
@ -497,8 +563,11 @@ extending outward from the snapped edge.
|
|||
If set to "no" (or is absent) the keybind will be layout agnostic.
|
||||
Default is no.
|
||||
|
||||
*<keyboard><keybind key="" onRelease="yes|no">*
|
||||
*onRelease*, when yes, fires the keybind action when the key or key
|
||||
*allowWhenLocked* [yes|no]
|
||||
Make this keybind work even if the screen is locked. Default is no.
|
||||
|
||||
*onRelease* [yes|no]
|
||||
When yes, fires the keybind action when the key or key
|
||||
combination is released, rather than first pressed. This is useful to
|
||||
bind actions to only modifier keys, where the action should fire when
|
||||
the modifier is used without another key. Default is no.
|
||||
|
|
@ -507,7 +576,6 @@ extending outward from the snapped edge.
|
|||
pressed & released, without interference from other multi-key
|
||||
combinations that include the super key:
|
||||
|
||||
|
||||
```
|
||||
<keybind key="Super_L" onRelease="yes">
|
||||
<action name="Execute" command="rofi -show drun"/>
|
||||
|
|
@ -551,9 +619,6 @@ extending outward from the snapped edge.
|
|||
*<mouse><doubleClickTime>*
|
||||
Set double click time in milliseconds. Default is 500.
|
||||
|
||||
*<mouse><scrollFactor>*
|
||||
Set scroll factor. Default is 1.0.
|
||||
|
||||
*<mouse><context name=""><mousebind button="" direction="" action=""><action>*
|
||||
Multiple *<mousebind>* can exist within one *<context>*; and multiple
|
||||
*<action>* can exist within one *<mousebind>*.
|
||||
|
|
@ -563,10 +628,13 @@ extending outward from the snapped edge.
|
|||
buttons and the window title are shown.
|
||||
- Title: The area of the titlebar (including blank space) between
|
||||
the window buttons, where the window title is displayed.
|
||||
- WindowMenu: The button on the left.
|
||||
- Iconify: The button that looks like an underline.
|
||||
- Maximize: The button that looks like a box.
|
||||
- Close: The button that looks like an X.
|
||||
- Icon: A window icon that, by default, displays a window menu.
|
||||
- WindowMenu: A button that, by default, displays a window menu.
|
||||
- Iconify: A button that, by default, iconifies a window.
|
||||
- Maximize: A button that, by default, toggles maximization of a window.
|
||||
- Shade: A button that, by default, toggles window shading.
|
||||
- AllDesktops: A button that, by default, toggles omnipresence of a window.
|
||||
- Close: A button that, by default, closses a window.
|
||||
- Top: The top edge of the window's border.
|
||||
- Bottom: The bottom edge of the window's border.
|
||||
- Left: The left edge of the window's border.
|
||||
|
|
@ -656,9 +724,12 @@ extending outward from the snapped edge.
|
|||
If the output name is left empty or the output does not exists, the
|
||||
tablet will span all outputs.
|
||||
|
||||
The tablet cursor automatically applies the orientation/rotation of
|
||||
a mapped output for absolute motion.
|
||||
|
||||
*<tablet rotate="" />* [0|90|180|270]
|
||||
The tablet orientation can be changed in 90 degree steps. Default is
|
||||
no rotation (0). Rotation will be applied after applying tablet area
|
||||
no rotation (0). Rotation will be applied before applying tablet area
|
||||
transformation.
|
||||
|
||||
See also *calibrationMatrix* in libinput section below for advanced
|
||||
|
|
@ -688,6 +759,9 @@ extending outward from the snapped edge.
|
|||
tablet specific restrictions, e.g. no support for drag-and-drop, but
|
||||
also omits tablet specific features like reporting pen pressure.
|
||||
|
||||
Use the *ToggleTabletMouseEmulation* action for toggling between
|
||||
mouse emulation on and off.
|
||||
|
||||
*<tablet><map button="" to="" />*
|
||||
Pen and pad buttons behave like regular mouse buttons.With mouse
|
||||
emulation set to "no", which is the default, and if not specified
|
||||
|
|
@ -724,6 +798,24 @@ extending outward from the snapped edge.
|
|||
|
||||
See mouse section above for all supported mouse buttons.
|
||||
|
||||
## TABLET TOOL
|
||||
|
||||
```
|
||||
<tabletTool motion="absolute" relativeMotionSensitivity="1" />
|
||||
```
|
||||
|
||||
*<tabletTool motion="">* [absolute|relative]
|
||||
All tablet tools, except of type mouse and lens, use "absolute"
|
||||
positioning by default. The *motion* attribute allows to set tools
|
||||
to relative motion instead. Positioning for a tablet mouse or
|
||||
tablet lens cannot be changed, those tools always use relative mode.
|
||||
|
||||
*<tabletTool relativeMotionSensitivity="">*
|
||||
When using relative motion, *relativeMotionSensitivity* controls
|
||||
the speed of the cursor. Using a value lower than 1.0 decreases the
|
||||
speed, using a value greater than 1.0 increases the speed of the
|
||||
cursor. The default is "1.0".
|
||||
|
||||
## LIBINPUT
|
||||
|
||||
```
|
||||
|
|
@ -742,6 +834,7 @@ extending outward from the snapped edge.
|
|||
<clickMethod></clickMethod>
|
||||
<sendEventsMode></sendEventsMode>
|
||||
<calibrationMatrix></calibrationMatrix>
|
||||
<scrollFactor>1.0</scrollFactor>
|
||||
</device>
|
||||
</libinput>
|
||||
```
|
||||
|
|
@ -867,6 +960,9 @@ The most common matrices are:
|
|||
visit https://wayland.freedesktop.org/libinput/doc/latest/absolute-axes.html#calibration-of-absolute-devices
|
||||
for more information.
|
||||
|
||||
*<libinput><scrollFactor>*
|
||||
Set scroll factor. Default is 1.0.
|
||||
|
||||
## WINDOW RULES
|
||||
|
||||
Two types of window rules are supported, actions and properties. They are
|
||||
|
|
@ -960,7 +1056,7 @@ situation.
|
|||
*<menu><ignoreButtonReleasePeriod>*
|
||||
How long (in milliseconds) the initial button release event is ignored
|
||||
for. The reason for this logic and behaviour is to avoid a fast
|
||||
press-move-release sequence indended to just open the menu resulting in
|
||||
press-move-release sequence intended to just open the menu resulting in
|
||||
the closure of the menu or the selection of (typically the first) menu
|
||||
item. This behaviour only affects the first button-release. It is not
|
||||
anticipated that most users will want to change this, but the config
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ The menu file must be entirely enclosed within <openbox_menu> and
|
|||
<!-- A submenu defined elsewhere -->
|
||||
<menu id="" />
|
||||
|
||||
<!-- Horizontal line >
|
||||
<!-- Horizontal line -->
|
||||
<separator />
|
||||
|
||||
<!-- An inline submenu -->
|
||||
|
|
@ -33,6 +33,9 @@ The menu file must be entirely enclosed within <openbox_menu> and
|
|||
...some content...
|
||||
</menu>
|
||||
|
||||
<!-- Title -->
|
||||
<separator label=""/>
|
||||
|
||||
<!-- Pipemenu -->
|
||||
<menu id="" label="" execute="COMMAND"/>
|
||||
|
||||
|
|
@ -45,6 +48,12 @@ The menu file must be entirely enclosed within <openbox_menu> and
|
|||
ShowMenu action. Default identifiers are
|
||||
- "root-menu" for the root window context menu
|
||||
- "client-menu" for a window's titlebar context menu
|
||||
- "client-list-combined-menu" for a list of all windows across
|
||||
all workspaces. Will change focus to the app that gets
|
||||
selected or go to workspace without activating any app if
|
||||
"Go there" is selected.
|
||||
- "client-send-to-menu" shows all workspaces and sends current
|
||||
view to that workspace when selected.
|
||||
|
||||
*menu.id* (when nested under other *<menu>* element)
|
||||
Link to a submenu defined elsewhere (by a *<menu id="">* at toplevel)
|
||||
|
|
@ -63,6 +72,11 @@ The menu file must be entirely enclosed within <openbox_menu> and
|
|||
*menu.separator*
|
||||
Horizontal line.
|
||||
|
||||
*menu.separator.label*
|
||||
In a "separator" element, the label attribute transforms the separator
|
||||
from a horizontal line to a menu title (heading) with the text specified
|
||||
by label in it.
|
||||
|
||||
*menu.execute*
|
||||
Command to execute for pipe menu. See details below.
|
||||
|
||||
|
|
|
|||
|
|
@ -47,17 +47,17 @@ labwc-config(5).
|
|||
# THEME ELEMENTS
|
||||
|
||||
*border.width*
|
||||
Line width (integer) of border border drawn around window frames.
|
||||
Line width (integer) of border drawn around window frames.
|
||||
Default is 1.
|
||||
|
||||
*padding.height*
|
||||
Vertical padding size, used for spacing out elements in the window
|
||||
decorations. Default is 3.
|
||||
*window.titlebar.padding.width*
|
||||
Horizontal titlebar padding size, in pixels, between border and first
|
||||
button on the left/right.
|
||||
Default is 0.
|
||||
|
||||
*titlebar.height*
|
||||
Window title bar height.
|
||||
Default equals the vertical font extents of the title plus 2x
|
||||
padding.height.
|
||||
*window.titlebar.padding.height*
|
||||
Vertical titlebar padding size, in pixels.
|
||||
Default is 0.
|
||||
|
||||
*menu.items.padding.x*
|
||||
Horizontal padding of menu text entries in pixels.
|
||||
|
|
@ -67,6 +67,10 @@ labwc-config(5).
|
|||
Vertical padding of menu text entries in pixels.
|
||||
Default is 4.
|
||||
|
||||
*menu.title.text.justify*
|
||||
Specifies how menu titles are aligned in the titlebar.
|
||||
Type justification. Default Center.
|
||||
|
||||
*menu.overlap.x*
|
||||
Horizontal overlap in pixels between submenus and their parents. A
|
||||
positive value move submenus over the top of their parents, whereas a
|
||||
|
|
@ -114,6 +118,22 @@ labwc-config(5).
|
|||
Specifies how window titles are aligned in the titlebar for both
|
||||
focused and unfocused windows. Type justification. Default Left.
|
||||
|
||||
*window.button.width*
|
||||
Width of a titlebar button, in pixels.
|
||||
Default is 26.
|
||||
|
||||
*window.button.spacing*
|
||||
Space between titlebar buttons, in pixels.
|
||||
Default is 0.
|
||||
|
||||
*window.button.hover.bg.corner-radius*
|
||||
Radius of the hover effect of a titlebar button, in pixels.
|
||||
Default is 0.
|
||||
|
||||
Note: for a circular hover effect, set *window.button.width* and
|
||||
*window.button.height* equal and *window.button.hover.bg.corner-radius* half
|
||||
of them.
|
||||
|
||||
*window.active.button.unpressed.image.color*
|
||||
Color of the images in titlebar buttons in their default, unpressed,
|
||||
state. This element is for the focused window.
|
||||
|
|
@ -122,13 +142,19 @@ labwc-config(5).
|
|||
Color of the images in titlebar buttons in their default, unpressed,
|
||||
state. This element is for non-focused windows.
|
||||
|
||||
Note: The button elements (i.e. window.[in]active.button.\*) support defining
|
||||
different types of buttons individually by inserting the type ("menu",
|
||||
"iconify", "max" and "close") after the button node. For example:
|
||||
window.active.button.iconify.unpressed.image.color
|
||||
This syntax is not documented on the openbox.org wiki, but is supported by
|
||||
openbox and is used by many popular themes. For the sake of brevity, these
|
||||
elements are not listed here, but are supported.
|
||||
Note: Button elements (i.e. window.[in]active.button.\*) may be defined uniquely
|
||||
for each type of button ("menu", "iconify", "max", "shade", "desk" or "close")
|
||||
by appending the type after the "button" node. For example:
|
||||
|
||||
- window.active.button.iconify.unpressed.image.color indicates the color of the
|
||||
iconify button for active windows; while
|
||||
|
||||
- window.inactive.button.close.unpressed.image.color indicates the color of the
|
||||
close button for inactive windows.
|
||||
|
||||
This syntax is not documented by Openbox, but is supported and is used by many
|
||||
popular themes. For the sake of brevity, these elements are not listed here, but
|
||||
all are supported.
|
||||
|
||||
*window.active.shadow.size*
|
||||
Size of the drop-shadow for the focused window, in pixels.
|
||||
|
|
@ -170,6 +196,13 @@ elements are not listed here, but are supported.
|
|||
*menu.separator.color*
|
||||
Menu separator color. Default #888888.
|
||||
|
||||
*menu.title.bg.color*
|
||||
Menu title color. Default #589bda.
|
||||
Note: A menu title is a separator with a label.
|
||||
|
||||
*menu.title.text.color*
|
||||
Text color of separator label. Default #ffffff.
|
||||
|
||||
*osd.bg.color*
|
||||
Background color of on-screen-display. Inherits
|
||||
*window.active.title.bg.color* if not set.
|
||||
|
|
@ -303,6 +336,10 @@ file within a particular theme. The following xbm buttons are supported:
|
|||
- close.xbm
|
||||
- menu.xbm
|
||||
- max_toggled.xbm
|
||||
- desk.xbm
|
||||
- desk_toggled.xbm
|
||||
- shade.xbm
|
||||
- shade_toggled.xbm
|
||||
|
||||
Additional icons can be defined to be shown when the mouse pointer is hovering
|
||||
over the button in question:
|
||||
|
|
@ -312,6 +349,10 @@ over the button in question:
|
|||
- close_hover.xbm
|
||||
- menu_hover.xbm
|
||||
- max_toggled_hover.xbm
|
||||
- desk_hover.xbm
|
||||
- desk_toggle_hover.xbm
|
||||
- shade_hover.xbm
|
||||
- shade_toggle_hover.xbm
|
||||
|
||||
One advantage of xbm buttons over other formats is that they change color based
|
||||
on the theme. Other formats use the suffices "-active" and "-inactive" to align
|
||||
|
|
@ -345,6 +386,22 @@ following icons should be added:
|
|||
- menu_hover-active.[png|svg]
|
||||
- menu_hover-inactive.[png|svg]
|
||||
- menu-inactive.[png|svg]
|
||||
- shade-active.[png|svg]
|
||||
- shade_hover-active.[png|svg]
|
||||
- shade_hover-inactive.[png|svg]
|
||||
- shade-inactive.[png|svg]
|
||||
- shade_toggled-active.[png|svg]
|
||||
- shade_toggled-inactive.[png|svg]
|
||||
- shade_toggled_hover-active.[png|svg]
|
||||
- shade_toggled_hover-inactive.[png|svg]
|
||||
- desk-active.[png|svg]
|
||||
- desk_hover-active.[png|svg]
|
||||
- desk_hover-inactive.[png|svg]
|
||||
- desk-inactive.[png|svg]
|
||||
- desk_toggled-active.[png|svg]
|
||||
- desk_toggled-inactive.[png|svg]
|
||||
- desk_toggled_hover-active.[png|svg]
|
||||
- desk_toggled_hover-inactive.[png|svg]
|
||||
|
||||
# DEFINITIONS
|
||||
|
||||
|
|
|
|||
|
|
@ -37,12 +37,24 @@
|
|||
<action name="ToggleOmnipresent" />
|
||||
</item>
|
||||
</menu>
|
||||
<!--
|
||||
openbox default workspace selector
|
||||
to use replace above workspace menu with the example below
|
||||
the label is required, but you can change the text.
|
||||
|
||||
<menu id="client-send-to-menu" label="Send to..." />
|
||||
-->
|
||||
<item label="Close">
|
||||
<action name="Close" />
|
||||
</item>
|
||||
</menu>
|
||||
|
||||
<menu id="root-menu">
|
||||
<!-- Make client-list-combined-menu a submenu of root-menu
|
||||
You must supply a label or it will not appear in root-menu -->
|
||||
<!--
|
||||
<menu id="client-list-combined-menu" label="Running..." />
|
||||
-->
|
||||
<item label="Web browser">
|
||||
<action name="Execute" command="firefox" />
|
||||
</item>
|
||||
|
|
@ -61,6 +73,12 @@
|
|||
</menu>
|
||||
|
||||
<menu id="some-custom-menu">
|
||||
<!--
|
||||
Creates menu title.
|
||||
To create an empty header with no text,
|
||||
set label=" ", not label=""
|
||||
-->
|
||||
<separator label="custom menu" />
|
||||
<item label="Reconfigure">
|
||||
<action name="Reconfigure" />
|
||||
</item>
|
||||
|
|
|
|||
|
|
@ -13,15 +13,26 @@
|
|||
<adaptiveSync>no</adaptiveSync>
|
||||
<allowTearing>no</allowTearing>
|
||||
<reuseOutputMode>no</reuseOutputMode>
|
||||
<xwaylandPersistence>no</xwaylandPersistence>
|
||||
</core>
|
||||
|
||||
<placement>
|
||||
<policy>center</policy>
|
||||
<!--
|
||||
When <placement><policy> is "cascade", the offset for cascading new
|
||||
windows can be overwritten like this:
|
||||
<cascadeOffset x="40" y="30" />
|
||||
-->
|
||||
</placement>
|
||||
|
||||
<!-- <font><theme> can be defined without an attribute to set all places -->
|
||||
<theme>
|
||||
<name></name>
|
||||
<icon></icon>
|
||||
<titlebar>
|
||||
<layout>icon:iconify,max,close</layout>
|
||||
<showTitle>yes</showTitle>
|
||||
</titlebar>
|
||||
<cornerRadius>8</cornerRadius>
|
||||
<keepBorder>yes</keepBorder>
|
||||
<dropShadows>no</dropShadows>
|
||||
|
|
@ -37,6 +48,12 @@
|
|||
<slant>normal</slant>
|
||||
<weight>normal</weight>
|
||||
</font>
|
||||
<font place="MenuHeader">
|
||||
<name>sans</name>
|
||||
<size>10</size>
|
||||
<slant>normal</slant>
|
||||
<weight>normal</weight>
|
||||
</font>
|
||||
<font place="MenuItem">
|
||||
<name>sans</name>
|
||||
<size>10</size>
|
||||
|
|
@ -101,6 +118,10 @@
|
|||
<resistance>
|
||||
<screenEdgeStrength>20</screenEdgeStrength>
|
||||
<windowEdgeStrength>20</windowEdgeStrength>
|
||||
<!-- resistance for maximized/tiled windows -->
|
||||
<unSnapThreshold>20</unSnapThreshold>
|
||||
<!-- resistance for vertically/horizontally maximized windows -->
|
||||
<unMaximizeThreshold>150</unMaximizeThreshold>
|
||||
</resistance>
|
||||
|
||||
<resize>
|
||||
|
|
@ -252,7 +273,7 @@
|
|||
<action name="SnapToEdge" direction="down" />
|
||||
</keybind>
|
||||
<keybind key="A-Space">
|
||||
<action name="ShowMenu" menu="client-menu" />
|
||||
<action name="ShowMenu" menu="client-menu" atCursor="no" />
|
||||
</keybind>
|
||||
<keybind key="XF86_AudioLowerVolume">
|
||||
<action name="Execute" command="amixer sset Master 5%-" />
|
||||
|
|
@ -299,6 +320,16 @@
|
|||
<action name="SnapToRegion" region="bottom-right" />
|
||||
</keybind>
|
||||
-->
|
||||
<!-- keybind for client-list-combined-menu - will center in middle of screen -->
|
||||
<!--
|
||||
<keybind key="W-Space">
|
||||
<action name="ShowMenu" menu="client-list-combined-menu" />
|
||||
<position>
|
||||
<x>center</x>
|
||||
<y>center</y>
|
||||
</position>
|
||||
</keybind>
|
||||
-->
|
||||
</keyboard>
|
||||
|
||||
<!--
|
||||
|
|
@ -316,7 +347,6 @@
|
|||
|
||||
<!-- time is in ms -->
|
||||
<doubleClickTime>500</doubleClickTime>
|
||||
<scrollFactor>1.0</scrollFactor>
|
||||
|
||||
<context name="Frame">
|
||||
<mousebind button="A-Left" action="Press">
|
||||
|
|
@ -421,10 +451,31 @@
|
|||
|
||||
<context name="WindowMenu">
|
||||
<mousebind button="Left" action="Click">
|
||||
<action name="ShowMenu" menu="client-menu" />
|
||||
<action name="ShowMenu" menu="client-menu" atCursor="no" />
|
||||
</mousebind>
|
||||
<mousebind button="Right" action="Click">
|
||||
<action name="ShowMenu" menu="client-menu" />
|
||||
<action name="ShowMenu" menu="client-menu" atCursor="no" />
|
||||
</mousebind>
|
||||
</context>
|
||||
|
||||
<context name="Icon">
|
||||
<mousebind button="Left" action="Click">
|
||||
<action name="ShowMenu" menu="client-menu" atCursor="no" />
|
||||
</mousebind>
|
||||
<mousebind button="Right" action="Click">
|
||||
<action name="ShowMenu" menu="client-menu" atCursor="no" />
|
||||
</mousebind>
|
||||
</context>
|
||||
|
||||
<context name="Shade">
|
||||
<mousebind button="Left" action="Click">
|
||||
<action name="ToggleShade" />
|
||||
</mousebind>
|
||||
</context>
|
||||
|
||||
<context name="AllDesktops">
|
||||
<mousebind button="Left" action="Click">
|
||||
<action name="ToggleOmnipresent" />
|
||||
</mousebind>
|
||||
</context>
|
||||
|
||||
|
|
@ -464,6 +515,8 @@
|
|||
</mousebind>
|
||||
<mousebind button="Middle" action="Press">
|
||||
<action name="ShowMenu" menu="root-menu" />
|
||||
<!-- openbox default, swap with above line to activate -->
|
||||
<!-- <action name="ShowMenu" menu="client-list-combined-menu" /> -->
|
||||
</mousebind>
|
||||
<mousebind direction="Up" action="Scroll">
|
||||
<action name="GoToDesktop" to="left" wrap="yes" />
|
||||
|
|
@ -523,6 +576,16 @@
|
|||
<map button="Stylus2" to="Middle" />
|
||||
</tablet>
|
||||
|
||||
<!--
|
||||
All tablet tools, except of type mouse and lens, use absolute
|
||||
positioning by default. The *motion* attribute allows to set tools
|
||||
to relative motion instead. When using relative motion,
|
||||
*relativeMotionSensitivity* controls the speed of the cursor. Using
|
||||
a value lower than 1.0 decreases the speed, using a value greater than
|
||||
1.0 increases the speed of the cursor.
|
||||
-->
|
||||
<tabletTool motion="absolute" relativeMotionSensitivity="1.0" />
|
||||
|
||||
<!--
|
||||
The *category* attribute is optional and can be set to touch, touchpad,
|
||||
non-touch, default or the name of a device. You can obtain device names by
|
||||
|
|
@ -538,6 +601,7 @@
|
|||
- clickMethod [none|buttonAreas|clickfinger]
|
||||
- sendEventsMode [yes|no|disabledOnExternalMouse]
|
||||
- calibrationMatrix [six float values split by space]
|
||||
- scrollFactor [float]
|
||||
-->
|
||||
<libinput>
|
||||
<device category="default">
|
||||
|
|
@ -554,6 +618,7 @@
|
|||
<clickMethod></clickMethod>
|
||||
<sendEventsMode></sendEventsMode>
|
||||
<calibrationMatrix></calibrationMatrix>
|
||||
<scrollFactor>1.0</scrollFactor>
|
||||
</device>
|
||||
</libinput>
|
||||
|
||||
|
|
|
|||
21
docs/themerc
21
docs/themerc
|
|
@ -7,11 +7,13 @@
|
|||
|
||||
# general
|
||||
border.width: 1
|
||||
padding.height: 3
|
||||
|
||||
# The following options has no default, but fallbacks back to
|
||||
# font-height + 2x padding.height if not set.
|
||||
# titlebar.height:
|
||||
#
|
||||
# We do not support the global padding.{width,height} of openbox because
|
||||
# the default labwc button geometry has deviates from that of openbox
|
||||
#
|
||||
window.titlebar.padding.width: 0
|
||||
window.titlebar.padding.height: 0
|
||||
|
||||
# window border
|
||||
window.active.border.color: #e1dedb
|
||||
|
|
@ -29,6 +31,14 @@ window.active.label.text.color: #000000
|
|||
window.inactive.label.text.color: #000000
|
||||
window.label.text.justify: center
|
||||
|
||||
# window button width and spacing
|
||||
window.button.width: 26
|
||||
window.button.height: 26
|
||||
window.button.spacing: 0
|
||||
|
||||
# window button hover effect
|
||||
window.button.hover.bg.corner-radius: 0
|
||||
|
||||
# window buttons
|
||||
window.active.button.unpressed.image.color: #000000
|
||||
window.inactive.button.unpressed.image.color: #000000
|
||||
|
|
@ -59,6 +69,9 @@ menu.separator.width: 1
|
|||
menu.separator.padding.width: 6
|
||||
menu.separator.padding.height: 3
|
||||
menu.separator.color: #888888
|
||||
menu.title.bg.color: #589bda
|
||||
menu.title.text.color: #ffffff
|
||||
menu.title.text.justify: Center
|
||||
|
||||
# on screen display (window-cycle dialog)
|
||||
osd.bg.color: #e1dedb
|
||||
|
|
|
|||
28
docs/xinitrc
Normal file
28
docs/xinitrc
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#!/bin/sh
|
||||
|
||||
## This file is run every time labwc launches Xwayland.
|
||||
##
|
||||
## In the default configuration, Xwayland will be launched lazily, and will
|
||||
## terminate after several seconds when no X11 clients are connected. Thus,
|
||||
## this script may run repeatedly throughout a single labwc session.
|
||||
|
||||
# Configure the X resource database if a file is provided
|
||||
#
|
||||
# NOTE: when Xwayland is launched lazily, an X11 client that triggers its
|
||||
# launch may attempt to read the resource database before this command can be
|
||||
# run. In that case, it is recommended to make a symlink to .Xdefaults:
|
||||
#
|
||||
# ln -s .Xresources "${HOME}/.Xdefaults"
|
||||
#
|
||||
# With this link in place, X11 applications will fall back to reading
|
||||
# the .Xdefaults file directly when no resource database can be read from the
|
||||
# server's root window properties.
|
||||
#
|
||||
# Invoking xrdb is still useful to pre-load the resource database for
|
||||
# subsequent clients, because any additional clients launched while the X
|
||||
# server remains alive will be able to query the database without resorting to
|
||||
# filesystem access.
|
||||
|
||||
if [ -r "${HOME}/.Xresources" ] && command -v xrdb >/dev/null 2>&1; then
|
||||
xrdb -merge "${HOME}/.Xresources"
|
||||
fi
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
struct view;
|
||||
struct server;
|
||||
struct cursor_context;
|
||||
|
||||
struct action {
|
||||
struct wl_list link; /*
|
||||
|
|
@ -34,8 +35,16 @@ void action_arg_from_xml_node(struct action *action, const char *nodename, const
|
|||
|
||||
bool actions_contain_toggle_keybinds(struct wl_list *action_list);
|
||||
|
||||
/**
|
||||
* actions_run() - Run actions.
|
||||
* @activator: Target view to apply actions (e.g. Maximize, Focus etc.).
|
||||
* NULL is allowed, in which case the focused/hovered view is used.
|
||||
* @ctx: Set for action invocations via mousebindings. Used to get the
|
||||
* direction of resize or the position of the window menu button for ShowMenu
|
||||
* action.
|
||||
*/
|
||||
void actions_run(struct view *activator, struct server *server,
|
||||
struct wl_list *actions, uint32_t resize_edges);
|
||||
struct wl_list *actions, struct cursor_context *ctx);
|
||||
|
||||
void action_free(struct action *action);
|
||||
void action_list_free(struct wl_list *action_list);
|
||||
|
|
|
|||
|
|
@ -32,21 +32,55 @@
|
|||
struct lab_data_buffer {
|
||||
struct wlr_buffer base;
|
||||
|
||||
cairo_t *cairo;
|
||||
void *data;
|
||||
cairo_surface_t *surface; /* optional */
|
||||
cairo_t *cairo; /* optional */
|
||||
void *data; /* owned by surface if surface != NULL */
|
||||
uint32_t format;
|
||||
size_t stride;
|
||||
bool free_on_destroy;
|
||||
uint32_t unscaled_width;
|
||||
uint32_t unscaled_height;
|
||||
/*
|
||||
* The logical size of the surface in layout pixels.
|
||||
* The raw pixel data may be larger or smaller.
|
||||
*/
|
||||
uint32_t logical_width;
|
||||
uint32_t logical_height;
|
||||
};
|
||||
|
||||
/* Create a buffer which creates a new cairo CAIRO_FORMAT_ARGB32 surface */
|
||||
struct lab_data_buffer *buffer_create_cairo(uint32_t width, uint32_t height,
|
||||
float scale, bool free_on_destroy);
|
||||
/*
|
||||
* Create a buffer which holds (and takes ownership of) an existing
|
||||
* CAIRO_FORMAT_ARGB32 image surface.
|
||||
*
|
||||
* The logical size is set to the surface size in pixels, ignoring
|
||||
* device scale. No cairo context is created.
|
||||
*/
|
||||
struct lab_data_buffer *buffer_adopt_cairo_surface(cairo_surface_t *surface);
|
||||
|
||||
/* Create a buffer which wraps a given DRM_FORMAT_ARGB8888 pointer */
|
||||
struct lab_data_buffer *buffer_create_wrap(void *pixel_data, uint32_t width,
|
||||
uint32_t height, uint32_t stride, bool free_on_destroy);
|
||||
/*
|
||||
* Create a buffer which holds a new CAIRO_FORMAT_ARGB32 image surface.
|
||||
* Additionally create a cairo context for drawing to the surface.
|
||||
*/
|
||||
struct lab_data_buffer *buffer_create_cairo(uint32_t logical_width,
|
||||
uint32_t logical_height, float scale);
|
||||
|
||||
/*
|
||||
* Create a buffer from an image surface, for display as an icon.
|
||||
*
|
||||
* The surface is either adopted by the buffer (which takes ownership),
|
||||
* or copied and then destroyed.
|
||||
*
|
||||
* This function allows non-ARGB32 source images and converts to
|
||||
* CAIRO_FORMAT_ARGB32 if needed.
|
||||
*/
|
||||
struct lab_data_buffer *buffer_convert_cairo_surface_for_icon(
|
||||
cairo_surface_t *surface, uint32_t icon_size, float scale);
|
||||
|
||||
/*
|
||||
* Create a buffer which holds (and takes ownership of) raw pixel data
|
||||
* in pre-multiplied ARGB32 format.
|
||||
*
|
||||
* The logical size is set to the width and height of the pixel data.
|
||||
* No cairo surface or context is created.
|
||||
*/
|
||||
struct lab_data_buffer *buffer_create_from_data(void *pixel_data, uint32_t width,
|
||||
uint32_t height, uint32_t stride);
|
||||
|
||||
#endif /* LABWC_BUFFER_H */
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_BUTTON_PNG_H
|
||||
#define LABWC_BUTTON_PNG_H
|
||||
|
||||
struct lab_data_buffer;
|
||||
|
||||
void button_png_load(const char *button_name, struct lab_data_buffer **buffer);
|
||||
|
||||
#endif /* LABWC_BUTTON_PNG_H */
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_BUTTON_SVG_H
|
||||
#define LABWC_BUTTON_SVG_H
|
||||
|
||||
struct lab_data_buffer;
|
||||
|
||||
void button_svg_load(const char *button_name, struct lab_data_buffer **buffer,
|
||||
int size);
|
||||
|
||||
#endif /* LABWC_BUTTON_SVG_H */
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_BUTTON_XBM_H
|
||||
#define LABWC_BUTTON_XBM_H
|
||||
|
||||
struct lab_data_buffer;
|
||||
|
||||
/**
|
||||
* button_xbm_from_bitmap() - create button from monochrome bitmap
|
||||
* @bitmap: bitmap data array in hexadecimal xbm format
|
||||
* @buffer: cairo-surface-buffer to create
|
||||
* @rgba: color
|
||||
*
|
||||
* Example bitmap: char button[6] = { 0x3f, 0x3f, 0x21, 0x21, 0x21, 0x3f };
|
||||
*/
|
||||
void button_xbm_from_bitmap(const char *bitmap, struct lab_data_buffer **buffer,
|
||||
float *rgba);
|
||||
|
||||
/* button_xbm_load - Convert xbm file to buffer with cairo surface */
|
||||
void button_xbm_load(const char *button_name, struct lab_data_buffer **buffer,
|
||||
float *rgba);
|
||||
|
||||
#endif /* LABWC_BUTTON_XBM_H */
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_BUTTON_COMMON_H
|
||||
#define LABWC_BUTTON_COMMON_H
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
/**
|
||||
* button_filename() - Get full filename for button.
|
||||
* @name: The name of the button (for example 'iconify.xbm').
|
||||
* @buf: Buffer to fill with the full filename
|
||||
* @len: Length of buffer
|
||||
*
|
||||
* Example return value: /usr/share/themes/Numix/openbox-3/iconify.xbm
|
||||
*/
|
||||
void button_filename(const char *name, char *buf, size_t len);
|
||||
|
||||
#endif /* LABWC_BUTTON_COMMON_H */
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_ARRAY_H
|
||||
#define LABWC_ARRAY_H
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <wayland-server-core.h>
|
||||
|
||||
/*
|
||||
|
|
@ -41,4 +43,34 @@ wl_array_len(struct wl_array *array)
|
|||
pos && (const char *)pos >= (const char *)(array)->data; \
|
||||
(pos)--)
|
||||
|
||||
/**
|
||||
* array_add() - add item to wl_array and exit on allocation error
|
||||
* @_arr: wl_array to add the item to
|
||||
* @_val: the item to add to the array
|
||||
*
|
||||
* Let us illustrate the function of this macro by an example:
|
||||
*
|
||||
* uint32_t value = 5;
|
||||
* array_add(array, value);
|
||||
*
|
||||
* ...is the equivalent of the code below which is how you would
|
||||
* otherwise use the wl_array API:
|
||||
*
|
||||
* uint32_t *elm = wl_array_add(array, sizeof(uint32_t));
|
||||
* if (!elm) {
|
||||
* perror("failed to allocate memory");
|
||||
* exit(EXIT_FAILURE);
|
||||
* }
|
||||
* *elm = value;
|
||||
*/
|
||||
#define array_add(_arr, _val) do { \
|
||||
__typeof__(_val) *_entry = wl_array_add( \
|
||||
(_arr), sizeof(__typeof__(_val))); \
|
||||
if (!_entry) { \
|
||||
perror("Failed to allocate memory"); \
|
||||
exit(EXIT_FAILURE); \
|
||||
} \
|
||||
*_entry = (_val); \
|
||||
} while (0)
|
||||
|
||||
#endif /* LABWC_ARRAY_H */
|
||||
|
|
|
|||
26
include/common/box.h
Normal file
26
include/common/box.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_BOX_H
|
||||
#define LABWC_BOX_H
|
||||
|
||||
#include <wlr/util/box.h>
|
||||
|
||||
bool box_contains(struct wlr_box *box_super, struct wlr_box *box_sub);
|
||||
|
||||
bool box_intersects(struct wlr_box *box_a, struct wlr_box *box_b);
|
||||
|
||||
/* Returns the bounding box of 2 boxes */
|
||||
void box_union(struct wlr_box *box_dest, struct wlr_box *box_a,
|
||||
struct wlr_box *box_b);
|
||||
|
||||
/*
|
||||
* Fits and centers a content box (width & height) within a bounding box
|
||||
* (max_width & max_height). The content box is downscaled if necessary
|
||||
* (preserving aspect ratio) but not upscaled.
|
||||
*
|
||||
* The returned x & y coordinates are the centered content position
|
||||
* relative to the top-left corner of the bounding box.
|
||||
*/
|
||||
struct wlr_box box_fit_within(int width, int height, int max_width,
|
||||
int max_height);
|
||||
|
||||
#endif /* LABWC_BOX_H */
|
||||
|
|
@ -43,6 +43,13 @@ void buf_expand_tilde(struct buf *s);
|
|||
*/
|
||||
void buf_expand_shell_variables(struct buf *s);
|
||||
|
||||
/**
|
||||
* buf_add_fmt - add format string to C string buffer
|
||||
* @s: buffer
|
||||
* @fmt: format string to be added
|
||||
*/
|
||||
void buf_add_fmt(struct buf *s, const char *fmt, ...);
|
||||
|
||||
/**
|
||||
* buf_add - add data to C string buffer
|
||||
* @s: buffer
|
||||
|
|
|
|||
10
include/common/direction.h
Normal file
10
include/common/direction.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_DIRECTION_H
|
||||
#define LABWC_DIRECTION_H
|
||||
|
||||
#include "view.h"
|
||||
|
||||
enum wlr_direction direction_from_view_edge(enum view_edge edge);
|
||||
enum wlr_direction direction_get_opposite(enum wlr_direction direction);
|
||||
|
||||
#endif /* LABWC_DIRECTION_H */
|
||||
|
|
@ -6,7 +6,8 @@ struct lab_data_buffer;
|
|||
|
||||
enum font_slant {
|
||||
FONT_SLANT_NORMAL = 0,
|
||||
FONT_SLANT_ITALIC
|
||||
FONT_SLANT_ITALIC,
|
||||
FONT_SLANT_OBLIQUE
|
||||
};
|
||||
|
||||
enum font_weight {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
struct wlr_scene_node;
|
||||
struct wlr_surface;
|
||||
struct wlr_scene_output;
|
||||
struct wlr_output_state;
|
||||
|
||||
struct wlr_surface *lab_wlr_surface_from_node(struct wlr_scene_node *node);
|
||||
|
||||
|
|
@ -18,6 +19,7 @@ struct wlr_surface *lab_wlr_surface_from_node(struct wlr_scene_node *node);
|
|||
struct wlr_scene_node *lab_wlr_scene_get_prev_node(struct wlr_scene_node *node);
|
||||
|
||||
/* A variant of wlr_scene_output_commit() that respects wlr_output->pending */
|
||||
bool lab_wlr_scene_output_commit(struct wlr_scene_output *scene_output);
|
||||
bool lab_wlr_scene_output_commit(struct wlr_scene_output *scene_output,
|
||||
struct wlr_output_state *output_state);
|
||||
|
||||
#endif /* LABWC_SCENE_HELPERS_H */
|
||||
|
|
|
|||
19
include/common/set.h
Normal file
19
include/common/set.h
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_SET_H
|
||||
#define LABWC_SET_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define LAB_SET_MAX_SIZE 16
|
||||
|
||||
struct lab_set {
|
||||
uint32_t values[LAB_SET_MAX_SIZE];
|
||||
int size;
|
||||
};
|
||||
|
||||
bool lab_set_contains(struct lab_set *set, uint32_t value);
|
||||
void lab_set_add(struct lab_set *set, uint32_t value);
|
||||
void lab_set_remove(struct lab_set *set, uint32_t value);
|
||||
|
||||
#endif /* LABWC_SET_H */
|
||||
|
|
@ -322,6 +322,16 @@ static struct mouse_combos {
|
|||
.button = "Left",
|
||||
.event = "Click",
|
||||
.action = "ToggleMaximize",
|
||||
}, {
|
||||
.context = "Shade",
|
||||
.button = "Left",
|
||||
.event = "Click",
|
||||
.action = "ToggleShade",
|
||||
}, {
|
||||
.context = "AllDesktops",
|
||||
.button = "Left",
|
||||
.event = "Click",
|
||||
.action = "ToggleOmnipresent",
|
||||
}, {
|
||||
.context = "Maximize",
|
||||
.button = "Right",
|
||||
|
|
@ -366,6 +376,32 @@ static struct mouse_combos {
|
|||
.name = "atCursor",
|
||||
.value = "no",
|
||||
},
|
||||
}, {
|
||||
.context = "Icon",
|
||||
.button = "Left",
|
||||
.event = "Click",
|
||||
.action = "ShowMenu",
|
||||
.attributes[0] = {
|
||||
.name = "menu",
|
||||
.value = "client-menu",
|
||||
},
|
||||
.attributes[1] = {
|
||||
.name = "atCursor",
|
||||
.value = "no",
|
||||
},
|
||||
}, {
|
||||
.context = "Icon",
|
||||
.button = "Right",
|
||||
.event = "Click",
|
||||
.action = "ShowMenu",
|
||||
.attributes[0] = {
|
||||
.name = "menu",
|
||||
.value = "client-menu",
|
||||
},
|
||||
.attributes[1] = {
|
||||
.name = "atCursor",
|
||||
.value = "no",
|
||||
},
|
||||
}, {
|
||||
.context = "Root",
|
||||
.button = "Left",
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ struct keybind {
|
|||
xkb_keycode_t keycodes[MAX_KEYCODES];
|
||||
size_t keycodes_len;
|
||||
int keycodes_layout;
|
||||
bool allow_when_locked;
|
||||
struct wl_list actions; /* struct action.link */
|
||||
struct wl_list link; /* struct rcxml.keybinds */
|
||||
bool on_release;
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ struct libinput_category {
|
|||
int click_method; /* -1 or libinput_config_click_method */
|
||||
int send_events_mode; /* -1 or libinput_config_send_events_mode */
|
||||
bool have_calibration_matrix;
|
||||
double scroll_factor;
|
||||
float calibration_matrix[6];
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -11,15 +11,18 @@
|
|||
#include "common/font.h"
|
||||
#include "config/touch.h"
|
||||
#include "config/tablet.h"
|
||||
#include "config/tablet-tool.h"
|
||||
#include "config/libinput.h"
|
||||
#include "resize-indicator.h"
|
||||
#include "ssd.h"
|
||||
#include "theme.h"
|
||||
|
||||
enum view_placement_policy {
|
||||
LAB_PLACE_INVALID = 0,
|
||||
LAB_PLACE_CENTER,
|
||||
LAB_PLACE_CURSOR,
|
||||
LAB_PLACE_AUTOMATIC
|
||||
LAB_PLACE_AUTOMATIC,
|
||||
LAB_PLACE_CASCADE,
|
||||
};
|
||||
|
||||
enum adaptive_sync_mode {
|
||||
|
|
@ -28,6 +31,13 @@ enum adaptive_sync_mode {
|
|||
LAB_ADAPTIVE_SYNC_FULLSCREEN,
|
||||
};
|
||||
|
||||
enum tearing_mode {
|
||||
LAB_TEARING_DISABLED = 0,
|
||||
LAB_TEARING_ENABLED,
|
||||
LAB_TEARING_FULLSCREEN,
|
||||
LAB_TEARING_FULLSCREEN_FORCED,
|
||||
};
|
||||
|
||||
enum tiling_events_mode {
|
||||
LAB_TILING_EVENTS_NEVER = 0,
|
||||
LAB_TILING_EVENTS_REGION = 1 << 0,
|
||||
|
|
@ -36,6 +46,11 @@ enum tiling_events_mode {
|
|||
(LAB_TILING_EVENTS_REGION | LAB_TILING_EVENTS_EDGE),
|
||||
};
|
||||
|
||||
struct title_button {
|
||||
enum ssd_part_type type;
|
||||
struct wl_list link;
|
||||
};
|
||||
|
||||
struct usable_area_override {
|
||||
struct border margin;
|
||||
char *output;
|
||||
|
|
@ -52,9 +67,12 @@ struct rcxml {
|
|||
bool xdg_shell_server_side_deco;
|
||||
int gap;
|
||||
enum adaptive_sync_mode adaptive_sync;
|
||||
bool allow_tearing;
|
||||
enum tearing_mode allow_tearing;
|
||||
bool reuse_output_mode;
|
||||
enum view_placement_policy placement_policy;
|
||||
bool xwayland_persistence;
|
||||
int placement_cascade_offset_x;
|
||||
int placement_cascade_offset_y;
|
||||
|
||||
/* focus */
|
||||
bool focus_follow_mouse;
|
||||
|
|
@ -63,11 +81,17 @@ struct rcxml {
|
|||
|
||||
/* theme */
|
||||
char *theme_name;
|
||||
char *icon_theme_name;
|
||||
struct wl_list title_buttons_left;
|
||||
struct wl_list title_buttons_right;
|
||||
int corner_radius;
|
||||
bool show_title;
|
||||
bool title_layout_loaded;
|
||||
bool ssd_keep_border;
|
||||
bool shadows_enabled;
|
||||
struct font font_activewindow;
|
||||
struct font font_inactivewindow;
|
||||
struct font font_menuheader;
|
||||
struct font font_menuitem;
|
||||
struct font font_osd;
|
||||
|
||||
|
|
@ -87,7 +111,6 @@ struct rcxml {
|
|||
/* mouse */
|
||||
long doubleclick_time; /* in ms */
|
||||
struct wl_list mousebinds; /* struct mousebind.link */
|
||||
double scroll_factor;
|
||||
|
||||
/* touch tablet */
|
||||
struct wl_list touch_configs;
|
||||
|
|
@ -101,6 +124,10 @@ struct rcxml {
|
|||
uint16_t button_map_count;
|
||||
struct button_map_entry button_map[BUTTON_MAP_MAX];
|
||||
} tablet;
|
||||
struct tablet_tool_config {
|
||||
enum motion motion;
|
||||
double relative_motion_sensitivity;
|
||||
} tablet_tool;
|
||||
|
||||
/* libinput */
|
||||
struct wl_list libinput_categories;
|
||||
|
|
@ -108,6 +135,8 @@ struct rcxml {
|
|||
/* resistance */
|
||||
int screen_edge_strength;
|
||||
int window_edge_strength;
|
||||
int unsnap_threshold;
|
||||
int unmaximize_threshold;
|
||||
|
||||
/* window snapping */
|
||||
int snap_edge_range;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,12 @@
|
|||
|
||||
struct server;
|
||||
|
||||
/**
|
||||
* session_run_script - run a named session script (or, in merge-config mode,
|
||||
* all named session scripts) from the XDG path.
|
||||
*/
|
||||
void session_run_script(const char *script);
|
||||
|
||||
/**
|
||||
* session_environment_init - set environment variables based on <key>=<value>
|
||||
* pairs in `${XDG_CONFIG_DIRS:-/etc/xdg}/labwc/environment` with user override
|
||||
|
|
|
|||
14
include/config/tablet-tool.h
Normal file
14
include/config/tablet-tool.h
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_TABLET_TOOL_CONFIG_H
|
||||
#define LABWC_TABLET_TOOL_CONFIG_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
enum motion {
|
||||
LAB_TABLET_MOTION_ABSOLUTE = 0,
|
||||
LAB_TABLET_MOTION_RELATIVE,
|
||||
};
|
||||
|
||||
enum motion tablet_parse_motion(const char *name);
|
||||
|
||||
#endif /* LABWC_TABLET_TOOL_CONFIG_H */
|
||||
12
include/icon-loader.h
Normal file
12
include/icon-loader.h
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_ICON_LOADER_H
|
||||
#define LABWC_ICON_LOADER_H
|
||||
|
||||
struct server;
|
||||
|
||||
void icon_loader_init(struct server *server);
|
||||
void icon_loader_finish(struct server *server);
|
||||
struct lab_data_buffer *icon_loader_lookup(struct server *server,
|
||||
const char *app_id, int size, float scale);
|
||||
|
||||
#endif /* LABWC_ICON_LOADER_H */
|
||||
10
include/img/img-png.h
Normal file
10
include/img/img-png.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_IMG_PNG_H
|
||||
#define LABWC_IMG_PNG_H
|
||||
|
||||
struct lab_data_buffer;
|
||||
|
||||
void img_png_load(const char *filename, struct lab_data_buffer **buffer,
|
||||
int size, float scale);
|
||||
|
||||
#endif /* LABWC_IMG_PNG_H */
|
||||
10
include/img/img-svg.h
Normal file
10
include/img/img-svg.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_IMG_SVG_H
|
||||
#define LABWC_IMG_SVG_H
|
||||
|
||||
struct lab_data_buffer;
|
||||
|
||||
void img_svg_load(const char *filename, struct lab_data_buffer **buffer,
|
||||
int size, float scale);
|
||||
|
||||
#endif /* LABWC_IMG_SVG_H */
|
||||
22
include/img/img-xbm.h
Normal file
22
include/img/img-xbm.h
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_IMG_XBM_H
|
||||
#define LABWC_IMG_XBM_H
|
||||
|
||||
struct lab_data_buffer;
|
||||
|
||||
/**
|
||||
* img_xbm_from_bitmap() - create button from monochrome bitmap
|
||||
* @bitmap: bitmap data array in hexadecimal xbm format
|
||||
* @buffer: cairo-surface-buffer to create
|
||||
* @rgba: color
|
||||
*
|
||||
* Example bitmap: char button[6] = { 0x3f, 0x3f, 0x21, 0x21, 0x21, 0x3f };
|
||||
*/
|
||||
void img_xbm_from_bitmap(const char *bitmap, struct lab_data_buffer **buffer,
|
||||
float *rgba);
|
||||
|
||||
/* img_xbm_load - Convert xbm file to buffer with cairo surface */
|
||||
void img_xbm_load(const char *filename, struct lab_data_buffer **buffer,
|
||||
float *rgba);
|
||||
|
||||
#endif /* LABWC_IMG_XBM_H */
|
||||
10
include/img/img-xpm.h
Normal file
10
include/img/img-xpm.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_IMG_XPM_H
|
||||
#define LABWC_IMG_XPM_H
|
||||
|
||||
struct lab_data_buffer;
|
||||
|
||||
void img_xpm_load(const char *filename, struct lab_data_buffer **buffer,
|
||||
int size, float scale);
|
||||
|
||||
#endif /* LABWC_IMG_XPM_H */
|
||||
|
|
@ -11,7 +11,7 @@ struct seat;
|
|||
struct server;
|
||||
struct wlr_surface;
|
||||
struct wlr_scene_node;
|
||||
enum wlr_button_state;
|
||||
enum wl_pointer_button_state;
|
||||
|
||||
/* Cursors used internally by labwc */
|
||||
enum lab_cursors {
|
||||
|
|
@ -142,15 +142,18 @@ bool cursor_process_button_release(struct seat *seat, uint32_t button, uint32_t
|
|||
* Finishes cursor button release. The return value indicates if an interactive
|
||||
* move/resize had been finished. Should be called after notifying a client.
|
||||
*/
|
||||
bool cursor_finish_button_release(struct seat *seat);
|
||||
bool cursor_finish_button_release(struct seat *seat, uint32_t button);
|
||||
|
||||
void cursor_init(struct seat *seat);
|
||||
void cursor_reload(struct seat *seat);
|
||||
void cursor_emulate_move(struct seat *seat,
|
||||
struct wlr_input_device *device,
|
||||
double dx, double dy, uint32_t time_msec);
|
||||
void cursor_emulate_move_absolute(struct seat *seat,
|
||||
struct wlr_input_device *device,
|
||||
double x, double y, uint32_t time_msec);
|
||||
void cursor_emulate_button(struct seat *seat,
|
||||
uint32_t button, enum wlr_button_state state, uint32_t time_msec);
|
||||
uint32_t button, enum wl_pointer_button_state state, uint32_t time_msec);
|
||||
void cursor_finish(struct seat *seat);
|
||||
|
||||
#endif /* LABWC_CURSOR_H */
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ struct drawing_tablet_pad {
|
|||
struct wl_list link; /* seat.tablet_pads */
|
||||
};
|
||||
|
||||
void tablet_pad_init(struct seat *seat, struct wlr_input_device *wlr_input_device);
|
||||
void tablet_pad_create(struct seat *seat, struct wlr_input_device *wlr_input_device);
|
||||
void tablet_pad_attach_tablet(struct seat *seat);
|
||||
void tablet_pad_enter_surface(struct seat *seat, struct wlr_surface *wlr_surface);
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ struct drawing_tablet_tool {
|
|||
struct wl_list link; /* seat.tablet_tools */
|
||||
};
|
||||
|
||||
void tablet_tool_init(struct seat *seat,
|
||||
void tablet_tool_create(struct seat *seat,
|
||||
struct wlr_tablet_tool *wlr_tablet_tool);
|
||||
bool tablet_tool_has_focused_surface(struct seat *seat);
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,8 @@ struct drawing_tablet {
|
|||
struct seat *seat;
|
||||
struct wlr_tablet *tablet;
|
||||
struct wlr_tablet_v2_tablet *tablet_v2;
|
||||
double x, y;
|
||||
enum motion motion_mode;
|
||||
double x, y, dx, dy;
|
||||
double distance;
|
||||
double pressure;
|
||||
double tilt_x, tilt_y;
|
||||
|
|
@ -22,15 +23,13 @@ struct drawing_tablet {
|
|||
double slider;
|
||||
double wheel_delta;
|
||||
struct {
|
||||
struct wl_listener proximity;
|
||||
struct wl_listener axis;
|
||||
struct wl_listener tip;
|
||||
struct wl_listener button;
|
||||
struct wl_listener destroy;
|
||||
} handlers;
|
||||
struct wl_list link; /* seat.tablets */
|
||||
};
|
||||
|
||||
void tablet_init(struct seat *seat, struct wlr_input_device *wlr_input_device);
|
||||
void tablet_init(struct seat *seat);
|
||||
void tablet_finish(struct seat *seat);
|
||||
void tablet_create(struct seat *seat, struct wlr_input_device *wlr_input_device);
|
||||
|
||||
#endif /* LABWC_TABLET_H */
|
||||
|
|
|
|||
118
include/labwc.h
118
include/labwc.h
|
|
@ -44,6 +44,7 @@
|
|||
#include <wlr/types/wlr_input_method_v2.h>
|
||||
#include <wlr/types/wlr_tablet_v2.h>
|
||||
#include <wlr/util/log.h>
|
||||
#include "common/set.h"
|
||||
#include "config/keybind.h"
|
||||
#include "config/rcxml.h"
|
||||
#include "input/cursor.h"
|
||||
|
|
@ -71,6 +72,8 @@ enum input_mode {
|
|||
struct input {
|
||||
struct wlr_input_device *wlr_input_device;
|
||||
struct seat *seat;
|
||||
/* Set for pointer/touch devices */
|
||||
double scroll_factor;
|
||||
struct wl_listener destroy;
|
||||
struct wl_list link; /* seat.inputs */
|
||||
};
|
||||
|
|
@ -127,9 +130,8 @@ struct seat {
|
|||
struct input_method_relay *input_method_relay;
|
||||
|
||||
/**
|
||||
* pressed view/surface/node will usually be NULL and is only set on
|
||||
* button press while the mouse is over a view or surface, and reset
|
||||
* to NULL on button release.
|
||||
* This is usually zeroed and is only set on button press while the
|
||||
* mouse is over a view or surface, and zeroed on button release.
|
||||
* It is used to send cursor motion events to a surface even though
|
||||
* the cursor has left the surface in the meantime.
|
||||
*
|
||||
|
|
@ -142,13 +144,9 @@ struct seat {
|
|||
*
|
||||
* Both (view && !surface) and (surface && !view) are possible.
|
||||
*/
|
||||
struct {
|
||||
struct view *view;
|
||||
struct wlr_scene_node *node;
|
||||
struct wlr_surface *surface;
|
||||
struct wlr_surface *toplevel;
|
||||
uint32_t resize_edges;
|
||||
} pressed;
|
||||
struct cursor_context pressed;
|
||||
|
||||
struct lab_set bound_buttons;
|
||||
|
||||
struct {
|
||||
bool active;
|
||||
|
|
@ -164,7 +162,6 @@ struct seat {
|
|||
/* Used to prevent region snapping when starting a move with A-Left */
|
||||
bool region_prevent_snap;
|
||||
|
||||
struct wl_client *active_client_while_inhibited;
|
||||
struct wl_list inputs;
|
||||
struct wl_listener new_input;
|
||||
struct wl_listener focus_change;
|
||||
|
|
@ -193,6 +190,11 @@ struct seat {
|
|||
struct wl_listener touch_motion;
|
||||
struct wl_listener touch_frame;
|
||||
|
||||
struct wl_listener tablet_tool_proximity;
|
||||
struct wl_listener tablet_tool_axis;
|
||||
struct wl_listener tablet_tool_tip;
|
||||
struct wl_listener tablet_tool_button;
|
||||
|
||||
struct wl_list tablets;
|
||||
struct wl_list tablet_tools;
|
||||
struct wl_list tablet_pads;
|
||||
|
|
@ -210,6 +212,12 @@ struct seat {
|
|||
struct lab_data_buffer;
|
||||
struct workspace;
|
||||
|
||||
enum lab_cycle_dir {
|
||||
LAB_CYCLE_DIR_NONE,
|
||||
LAB_CYCLE_DIR_FORWARD,
|
||||
LAB_CYCLE_DIR_BACKWARD,
|
||||
};
|
||||
|
||||
struct server {
|
||||
struct wl_display *wl_display;
|
||||
struct wl_event_loop *wl_event_loop; /* Can be used for timer events */
|
||||
|
|
@ -220,11 +228,12 @@ struct server {
|
|||
struct wlr_backend *backend;
|
||||
} headless;
|
||||
struct wlr_session *session;
|
||||
struct wlr_linux_dmabuf_v1 *linux_dmabuf;
|
||||
|
||||
struct wlr_xdg_shell *xdg_shell;
|
||||
struct wlr_layer_shell_v1 *layer_shell;
|
||||
|
||||
struct wl_listener new_xdg_surface;
|
||||
struct wl_listener new_xdg_toplevel;
|
||||
struct wl_listener new_layer_surface;
|
||||
|
||||
struct wl_listener kde_server_decoration;
|
||||
|
|
@ -236,12 +245,9 @@ struct server {
|
|||
struct wl_listener xwayland_new_surface;
|
||||
#endif
|
||||
|
||||
struct wlr_input_inhibit_manager *input_inhibit;
|
||||
struct wl_listener input_inhibit_activate;
|
||||
struct wl_listener input_inhibit_deactivate;
|
||||
|
||||
struct wlr_xdg_activation_v1 *xdg_activation;
|
||||
struct wl_listener xdg_activation_request;
|
||||
struct wl_listener xdg_activation_new_token;
|
||||
|
||||
struct wl_list views;
|
||||
struct wl_list unmanaged_surfaces;
|
||||
|
|
@ -249,11 +255,14 @@ struct server {
|
|||
struct seat seat;
|
||||
struct wlr_scene *scene;
|
||||
struct wlr_scene_output_layout *scene_layout;
|
||||
bool direct_scanout_enabled;
|
||||
|
||||
/* cursor interactive */
|
||||
enum input_mode input_mode;
|
||||
struct view *grabbed_view;
|
||||
/* Cursor position when interactive move/resize is requested */
|
||||
double grab_x, grab_y;
|
||||
/* View geometry when interactive move/resize is requested */
|
||||
struct wlr_box grab_box;
|
||||
uint32_t resize_edges;
|
||||
|
||||
|
|
@ -294,9 +303,16 @@ struct server {
|
|||
struct wlr_scene_tree *menu_tree;
|
||||
|
||||
/* Workspaces */
|
||||
struct wl_list workspaces; /* struct workspace.link */
|
||||
struct workspace *workspace_current;
|
||||
struct workspace *workspace_last;
|
||||
struct {
|
||||
struct wl_list all; /* struct workspace.link */
|
||||
struct workspace *current;
|
||||
struct workspace *last;
|
||||
struct lab_cosmic_workspace_manager *cosmic_manager;
|
||||
struct lab_cosmic_workspace_group *cosmic_group;
|
||||
struct {
|
||||
struct wl_listener layout_output_added;
|
||||
} on;
|
||||
} workspaces;
|
||||
|
||||
struct wl_list outputs;
|
||||
struct wl_listener new_output;
|
||||
|
|
@ -315,6 +331,8 @@ struct server {
|
|||
*/
|
||||
int pending_output_layout_change;
|
||||
|
||||
struct wl_listener renderer_lost;
|
||||
|
||||
struct wlr_gamma_control_manager_v1 *gamma_control_manager_v1;
|
||||
struct wl_listener gamma_control_set_gamma;
|
||||
|
||||
|
|
@ -349,6 +367,8 @@ struct server {
|
|||
struct wlr_scene_tree *preview_parent;
|
||||
struct wlr_scene_node *preview_anchor;
|
||||
struct multi_rect *preview_outline;
|
||||
enum lab_cycle_dir initial_direction;
|
||||
bool initial_keybind_contained_shift;
|
||||
} osd_state;
|
||||
|
||||
struct theme *theme;
|
||||
|
|
@ -356,6 +376,8 @@ struct server {
|
|||
struct menu *menu_current;
|
||||
struct wl_list menus;
|
||||
|
||||
struct icon_loader *icon_loader;
|
||||
|
||||
pid_t primary_client_pid;
|
||||
};
|
||||
|
||||
|
|
@ -365,6 +387,7 @@ struct output {
|
|||
struct wl_list link; /* server.outputs */
|
||||
struct server *server;
|
||||
struct wlr_output *wlr_output;
|
||||
struct wlr_output_state pending;
|
||||
struct wlr_scene_output *scene_output;
|
||||
struct wlr_scene_tree *layer_tree[LAB_NR_LAYERS];
|
||||
struct wlr_scene_tree *layer_popup_tree;
|
||||
|
|
@ -383,6 +406,8 @@ struct output {
|
|||
|
||||
bool leased;
|
||||
bool gamma_lut_changed;
|
||||
|
||||
uint32_t nr_tearing_failures;
|
||||
};
|
||||
|
||||
#undef LAB_NR_LAYERS
|
||||
|
|
@ -421,7 +446,7 @@ void foreign_toplevel_update_outputs(struct view *view);
|
|||
* - optionally raise above other views
|
||||
*
|
||||
* It's okay to call this function even if the view isn't mapped or the
|
||||
* session is locked/input is inhibited; it will simply do nothing.
|
||||
* session is locked; it will simply do nothing.
|
||||
*/
|
||||
void desktop_focus_view(struct view *view, bool raise);
|
||||
|
||||
|
|
@ -434,6 +459,7 @@ void desktop_focus_view_or_surface(struct seat *seat, struct view *view,
|
|||
|
||||
void desktop_arrange_all_views(struct server *server);
|
||||
void desktop_focus_output(struct output *output);
|
||||
void warp_cursor(struct view *view);
|
||||
struct view *desktop_topmost_focusable_view(struct server *server);
|
||||
|
||||
/**
|
||||
|
|
@ -442,12 +468,6 @@ struct view *desktop_topmost_focusable_view(struct server *server);
|
|||
*/
|
||||
void desktop_update_top_layer_visiblity(struct server *server);
|
||||
|
||||
enum lab_cycle_dir {
|
||||
LAB_CYCLE_DIR_NONE,
|
||||
LAB_CYCLE_DIR_FORWARD,
|
||||
LAB_CYCLE_DIR_BACKWARD,
|
||||
};
|
||||
|
||||
/**
|
||||
* desktop_cycle_view - return view to 'cycle' to
|
||||
* @start_view: reference point for finding next view to cycle to
|
||||
|
|
@ -478,12 +498,21 @@ void seat_focus_surface(struct seat *seat, struct wlr_surface *surface);
|
|||
void seat_focus_lock_surface(struct seat *seat, struct wlr_surface *surface);
|
||||
|
||||
void seat_set_focus_layer(struct seat *seat, struct wlr_layer_surface_v1 *layer);
|
||||
void seat_set_pressed(struct seat *seat, struct view *view,
|
||||
struct wlr_scene_node *node, struct wlr_surface *surface,
|
||||
struct wlr_surface *toplevel, uint32_t resize_edges);
|
||||
void seat_set_pressed(struct seat *seat, struct cursor_context *ctx);
|
||||
void seat_reset_pressed(struct seat *seat);
|
||||
void seat_output_layout_changed(struct seat *seat);
|
||||
|
||||
/**
|
||||
* interactive_anchor_to_cursor() - repositions the geometry to remain
|
||||
* underneath the cursor when its size changes during interactive move.
|
||||
* This function also resizes server->grab_box and repositions it to remain
|
||||
* underneath server->grab_{x,y}.
|
||||
*
|
||||
* geo->{width,height} are provided by the caller.
|
||||
* geo->{x,y} are computed by this function.
|
||||
*/
|
||||
void interactive_anchor_to_cursor(struct server *server, struct wlr_box *geo);
|
||||
|
||||
void interactive_begin(struct view *view, enum input_mode mode, uint32_t edges);
|
||||
void interactive_finish(struct view *view);
|
||||
void interactive_cancel(struct view *view);
|
||||
|
|
@ -497,27 +526,44 @@ struct output *output_from_wlr_output(struct server *server,
|
|||
struct output *output_from_name(struct server *server, const char *name);
|
||||
struct output *output_nearest_to(struct server *server, int lx, int ly);
|
||||
struct output *output_nearest_to_cursor(struct server *server);
|
||||
|
||||
/**
|
||||
* output_get_adjacent() - get next output, in a given direction,
|
||||
* from a given output
|
||||
*
|
||||
* @output: reference output
|
||||
* @edge: direction in which to look for the nearest output
|
||||
* @wrap: if true, wrap around at layout edge
|
||||
*
|
||||
* Note: if output is NULL, the output nearest the cursor will be used as the
|
||||
* reference instead.
|
||||
*/
|
||||
struct output *output_get_adjacent(struct output *output,
|
||||
enum view_edge edge, bool wrap);
|
||||
|
||||
bool output_is_usable(struct output *output);
|
||||
void output_update_usable_area(struct output *output);
|
||||
void output_update_all_usable_areas(struct server *server, bool layout_changed);
|
||||
bool output_get_tearing_allowance(struct output *output);
|
||||
struct wlr_box output_usable_area_in_layout_coords(struct output *output);
|
||||
struct wlr_box output_usable_area_scaled(struct output *output);
|
||||
void handle_output_power_manager_set_mode(struct wl_listener *listener,
|
||||
void *data);
|
||||
void output_enable_adaptive_sync(struct wlr_output *output, bool enabled);
|
||||
|
||||
/**
|
||||
* output_max_scale() - get maximum scale factor of all usable outputs.
|
||||
* Used when loading/rendering resources (e.g. icons) that may be
|
||||
* displayed on any output.
|
||||
*/
|
||||
float output_max_scale(struct server *server);
|
||||
|
||||
void new_tearing_hint(struct wl_listener *listener, void *data);
|
||||
|
||||
void server_init(struct server *server);
|
||||
void server_start(struct server *server);
|
||||
void server_finish(struct server *server);
|
||||
|
||||
/*
|
||||
* wlroots "input inhibitor" extension (required for swaylock) blocks
|
||||
* any client other than the requesting client from receiving events
|
||||
*/
|
||||
bool input_inhibit_blocks_surface(struct seat *seat,
|
||||
struct wl_resource *resource);
|
||||
|
||||
void create_constraint(struct wl_listener *listener, void *data);
|
||||
void constrain_cursor(struct server *server, struct wlr_pointer_constraint_v1
|
||||
*constraint);
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ struct lab_layer_popup {
|
|||
struct wl_listener commit;
|
||||
struct wl_listener destroy;
|
||||
struct wl_listener new_popup;
|
||||
struct wl_listener reposition;
|
||||
};
|
||||
|
||||
void layers_init(struct server *server);
|
||||
|
|
|
|||
|
|
@ -20,5 +20,6 @@ bool output_wants_magnification(struct output *output);
|
|||
void magnify(struct output *output, struct wlr_buffer *output_buffer,
|
||||
struct wlr_box *damage);
|
||||
bool is_magnify_on(void);
|
||||
void magnify_reset(void);
|
||||
|
||||
#endif /* LABWC_MAGNIFIER_H */
|
||||
|
|
|
|||
|
|
@ -27,6 +27,12 @@ struct menu_scene {
|
|||
struct scaled_font_buffer *buffer;
|
||||
};
|
||||
|
||||
enum menuitem_type {
|
||||
LAB_MENU_ITEM = 0,
|
||||
LAB_MENU_SEPARATOR_LINE,
|
||||
LAB_MENU_TITLE,
|
||||
};
|
||||
|
||||
struct menuitem {
|
||||
struct wl_list actions;
|
||||
char *execute;
|
||||
|
|
@ -34,11 +40,14 @@ struct menuitem {
|
|||
struct menu *parent;
|
||||
struct menu *submenu;
|
||||
bool selectable;
|
||||
enum menuitem_type type;
|
||||
int height;
|
||||
int native_width;
|
||||
struct wlr_scene_tree *tree;
|
||||
struct menu_scene normal;
|
||||
struct menu_scene selected;
|
||||
struct menu_pipe_context *pipe_ctx;
|
||||
struct view *client_list_view; /* used by internal client-list */
|
||||
struct wl_list link; /* menu.menuitems */
|
||||
};
|
||||
|
||||
|
|
@ -46,7 +55,6 @@ struct menuitem {
|
|||
struct menu {
|
||||
char *id;
|
||||
char *label;
|
||||
int item_height;
|
||||
struct menu *parent;
|
||||
|
||||
struct {
|
||||
|
|
@ -128,4 +136,7 @@ void menu_close_root(struct server *server);
|
|||
/* menu_reconfigure - reload theme and content */
|
||||
void menu_reconfigure(struct server *server);
|
||||
|
||||
void update_client_list_combined_menu(struct server *server);
|
||||
void update_client_send_to_menu(struct server *server);
|
||||
|
||||
#endif /* LABWC_MENU_H */
|
||||
|
|
|
|||
34
include/output-state.h
Normal file
34
include/output-state.h
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_OUTPUT_STATE_H
|
||||
#define LABWC_OUTPUT_STATE_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
struct output;
|
||||
struct wlr_output;
|
||||
|
||||
void output_state_init(struct output *output);
|
||||
|
||||
/* Forward port of removed functions */
|
||||
|
||||
bool wlr_output_test(struct wlr_output *wlr_output);
|
||||
|
||||
bool wlr_output_commit(struct wlr_output *wlr_output);
|
||||
|
||||
void wlr_output_enable(struct wlr_output *wlr_output, bool enabled);
|
||||
|
||||
void wlr_output_set_mode(struct wlr_output *wlr_output,
|
||||
struct wlr_output_mode *mode);
|
||||
|
||||
void wlr_output_set_custom_mode(struct wlr_output *wlr_output,
|
||||
int32_t width, int32_t height, int32_t refresh);
|
||||
|
||||
void wlr_output_set_scale(struct wlr_output *wlr_output, float scale);
|
||||
|
||||
void wlr_output_set_transform(struct wlr_output *wlr_output,
|
||||
enum wl_output_transform transform);
|
||||
|
||||
void wlr_output_enable_adaptive_sync(struct wlr_output *wlr_output,
|
||||
bool enabled);
|
||||
|
||||
#endif // LABWC_OUTPUT_STATE_H
|
||||
61
include/protocols/cosmic-workspaces-internal.h
Normal file
61
include/protocols/cosmic-workspaces-internal.h
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_PROTOCOLS_COSMIC_WORKSPACES_INTERNAL_H
|
||||
#define LABWC_PROTOCOLS_COSMIC_WORKSPACES_INTERNAL_H
|
||||
|
||||
struct lab_cosmic_workspace;
|
||||
struct lab_cosmic_workspace_group;
|
||||
struct lab_cosmic_workspace_manager;
|
||||
|
||||
enum pending_change {
|
||||
/* group events */
|
||||
CW_PENDING_WS_CREATE = 1 << 0,
|
||||
|
||||
/* ws events*/
|
||||
CW_PENDING_WS_ACTIVATE = 1 << 1,
|
||||
CW_PENDING_WS_DEACTIVATE = 1 << 2,
|
||||
CW_PENDING_WS_REMOVE = 1 << 3,
|
||||
};
|
||||
|
||||
struct transaction {
|
||||
uint32_t change;
|
||||
struct wl_list link;
|
||||
};
|
||||
|
||||
struct transaction_workspace {
|
||||
struct transaction base;
|
||||
struct lab_cosmic_workspace *workspace;
|
||||
};
|
||||
|
||||
struct transaction_group {
|
||||
struct transaction base;
|
||||
struct lab_cosmic_workspace_group *group;
|
||||
char *new_workspace_name;
|
||||
};
|
||||
|
||||
struct session_context {
|
||||
int ref_count;
|
||||
struct wl_list transactions;
|
||||
};
|
||||
|
||||
struct wl_resource_addon {
|
||||
struct session_context *ctx;
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct wl_resource_addon *resource_addon_create(struct session_context *ctx);
|
||||
|
||||
void transaction_add_workspace_ev(struct lab_cosmic_workspace *ws,
|
||||
struct wl_resource *resource, enum pending_change change);
|
||||
|
||||
void transaction_add_workspace_group_ev(struct lab_cosmic_workspace_group *group,
|
||||
struct wl_resource *resource, enum pending_change change,
|
||||
const char *new_workspace_name);
|
||||
|
||||
void resource_addon_destroy(struct wl_resource_addon *addon);
|
||||
|
||||
void group_output_send_initial_state(struct lab_cosmic_workspace_group *group,
|
||||
struct wl_resource *group_resource);
|
||||
|
||||
void manager_schedule_done_event(struct lab_cosmic_workspace_manager *manager);
|
||||
|
||||
#endif /* LABWC_PROTOCOLS_COSMIC_WORKSPACES_INTERNAL_H */
|
||||
94
include/protocols/cosmic-workspaces.h
Normal file
94
include/protocols/cosmic-workspaces.h
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#ifndef LABWC_PROTOCOLS_COSMIC_WORKSPACES_H
|
||||
#define LABWC_PROTOCOLS_COSMIC_WORKSPACES_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <wayland-server-core.h>
|
||||
|
||||
struct wlr_output;
|
||||
|
||||
struct lab_cosmic_workspace_manager {
|
||||
struct wl_global *global;
|
||||
struct wl_list groups;
|
||||
uint32_t caps;
|
||||
struct wl_event_source *idle_source;
|
||||
struct wl_event_loop *event_loop;
|
||||
|
||||
struct {
|
||||
struct wl_listener display_destroy;
|
||||
} on;
|
||||
|
||||
struct wl_list resources;
|
||||
};
|
||||
|
||||
struct lab_cosmic_workspace_group {
|
||||
struct lab_cosmic_workspace_manager *manager;
|
||||
struct wl_list workspaces;
|
||||
struct wl_array capabilities;
|
||||
struct {
|
||||
struct wl_signal create_workspace;
|
||||
struct wl_signal destroy;
|
||||
} events;
|
||||
|
||||
struct wl_list link;
|
||||
struct wl_list outputs;
|
||||
struct wl_list resources;
|
||||
};
|
||||
|
||||
struct lab_cosmic_workspace {
|
||||
struct lab_cosmic_workspace_group *group;
|
||||
char *name;
|
||||
struct wl_array coordinates;
|
||||
struct wl_array capabilities;
|
||||
uint32_t state; /* enum lab_cosmic_workspace_state */
|
||||
uint32_t state_pending; /* enum lab_cosmic_workspace_state */
|
||||
|
||||
struct {
|
||||
struct wl_signal activate;
|
||||
struct wl_signal deactivate;
|
||||
struct wl_signal remove;
|
||||
struct wl_signal destroy;
|
||||
} events;
|
||||
|
||||
struct wl_list link;
|
||||
struct wl_list resources;
|
||||
};
|
||||
|
||||
enum lab_cosmic_workspace_caps {
|
||||
CW_CAP_NONE = 0,
|
||||
CW_CAP_GRP_ALL = 0x000000ff,
|
||||
CW_CAP_WS_ALL = 0x0000ff00,
|
||||
|
||||
/* group caps */
|
||||
CW_CAP_GRP_WS_CREATE = 1 << 0,
|
||||
|
||||
/* workspace caps */
|
||||
CW_CAP_WS_ACTIVATE = 1 << 8,
|
||||
CW_CAP_WS_DEACTIVATE = 1 << 9,
|
||||
CW_CAP_WS_REMOVE = 1 << 10,
|
||||
};
|
||||
|
||||
struct lab_cosmic_workspace_manager *lab_cosmic_workspace_manager_create(
|
||||
struct wl_display *display, uint32_t caps, uint32_t version);
|
||||
|
||||
struct lab_cosmic_workspace_group *lab_cosmic_workspace_group_create(
|
||||
struct lab_cosmic_workspace_manager *manager);
|
||||
|
||||
void lab_cosmic_workspace_group_output_enter(
|
||||
struct lab_cosmic_workspace_group *group, struct wlr_output *output);
|
||||
|
||||
void lab_cosmic_workspace_group_output_leave(
|
||||
|
||||
struct lab_cosmic_workspace_group *group, struct wlr_output *output);
|
||||
void lab_cosmic_workspace_group_destroy(struct lab_cosmic_workspace_group *group);
|
||||
|
||||
struct lab_cosmic_workspace *lab_cosmic_workspace_create(struct lab_cosmic_workspace_group *group);
|
||||
void lab_cosmic_workspace_set_name(struct lab_cosmic_workspace *workspace, const char *name);
|
||||
void lab_cosmic_workspace_set_active(struct lab_cosmic_workspace *workspace, bool enabled);
|
||||
void lab_cosmic_workspace_set_urgent(struct lab_cosmic_workspace *workspace, bool enabled);
|
||||
void lab_cosmic_workspace_set_hidden(struct lab_cosmic_workspace *workspace, bool enabled);
|
||||
void lab_cosmic_workspace_set_coordinates(struct lab_cosmic_workspace *workspace,
|
||||
struct wl_array *coordinates);
|
||||
void lab_cosmic_workspace_destroy(struct lab_cosmic_workspace *workspace);
|
||||
|
||||
#endif /* LABWC_PROTOCOLS_COSMIC_WORKSPACES_H */
|
||||
|
|
@ -3,7 +3,12 @@
|
|||
#define LABWC_RESISTANCE_H
|
||||
#include "labwc.h"
|
||||
|
||||
void resistance_move_apply(struct view *view, double *x, double *y);
|
||||
/**
|
||||
* resistance_unsnap_apply() - Apply resistance when dragging a
|
||||
* maximized/tiled window. Returns true when the view needs to be un-tiled.
|
||||
*/
|
||||
bool resistance_unsnap_apply(struct view *view, int *x, int *y);
|
||||
void resistance_move_apply(struct view *view, int *x, int *y);
|
||||
void resistance_resize_apply(struct view *view, struct wlr_box *new_view_geo);
|
||||
|
||||
#endif /* LABWC_RESISTANCE_H */
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ struct server;
|
|||
struct session_lock_manager {
|
||||
struct server *server;
|
||||
struct wlr_session_lock_manager_v1 *wlr_manager;
|
||||
/* View re-focused on unlock */
|
||||
struct view *last_active_view;
|
||||
struct wlr_surface *focused;
|
||||
/*
|
||||
* When not locked: lock=NULL, locked=false
|
||||
|
|
@ -19,7 +21,7 @@ struct session_lock_manager {
|
|||
struct wlr_session_lock_v1 *lock;
|
||||
bool locked;
|
||||
|
||||
struct wl_list session_lock_outputs;
|
||||
struct wl_list lock_outputs;
|
||||
|
||||
struct wl_listener new_lock;
|
||||
struct wl_listener destroy;
|
||||
|
|
|
|||
|
|
@ -18,13 +18,16 @@
|
|||
struct ssd_button {
|
||||
struct view *view;
|
||||
enum ssd_part_type type;
|
||||
struct wlr_scene_node *normal;
|
||||
struct wlr_scene_node *hover;
|
||||
struct wlr_scene_node *toggled;
|
||||
struct wlr_scene_node *toggled_hover;
|
||||
struct wlr_scene_node *background;
|
||||
struct wlr_scene_tree *icon_tree;
|
||||
struct wlr_scene_tree *hover_tree;
|
||||
/*
|
||||
* Bitmap of lab_button_state that represents a combination of
|
||||
* hover/toggled/rounded states.
|
||||
*/
|
||||
uint8_t state_set;
|
||||
/*
|
||||
* Button nodes for each combination of hover/toggled/rounded states.
|
||||
* nodes[state_set] should be displayed.
|
||||
*/
|
||||
struct wlr_scene_node *nodes[LAB_BS_ALL + 1];
|
||||
|
||||
struct wl_listener destroy;
|
||||
};
|
||||
|
|
@ -49,13 +52,33 @@ struct ssd {
|
|||
* don't update things we don't have to.
|
||||
*/
|
||||
struct {
|
||||
bool was_maximized; /* To un-round corner buttons and toggle icon on maximize */
|
||||
/* Button icons need to be swapped on shade or omnipresent toggles */
|
||||
bool was_shaded;
|
||||
bool was_omnipresent;
|
||||
|
||||
/*
|
||||
* Corners need to be (un)rounded and borders need be shown/hidden
|
||||
* when toggling maximization, and the button needs to be swapped on
|
||||
* maximization toggles.
|
||||
*/
|
||||
bool was_maximized;
|
||||
|
||||
/*
|
||||
* Corners need to be (un)rounded but borders should be kept shown when
|
||||
* the window is (un)tiled and notified about it or when the window may
|
||||
* become so small that only a squared scene-rect can be used to render
|
||||
* such a small titlebar.
|
||||
*/
|
||||
bool was_squared;
|
||||
|
||||
struct wlr_box geometry;
|
||||
struct ssd_state_title {
|
||||
char *text;
|
||||
struct ssd_state_title_width active;
|
||||
struct ssd_state_title_width inactive;
|
||||
} title;
|
||||
|
||||
char *app_id;
|
||||
} state;
|
||||
|
||||
/* An invisible area around the view which allows resizing */
|
||||
|
|
@ -99,9 +122,6 @@ struct ssd_part {
|
|||
/* This part represented in scene graph */
|
||||
struct wlr_scene_node *node;
|
||||
|
||||
/* Targeted geometry. May be NULL */
|
||||
struct wlr_box *geometry;
|
||||
|
||||
struct wl_list link;
|
||||
};
|
||||
|
||||
|
|
@ -124,19 +144,12 @@ struct ssd_part *add_scene_rect(
|
|||
struct ssd_part *add_scene_buffer(
|
||||
struct wl_list *list, enum ssd_part_type type,
|
||||
struct wlr_scene_tree *parent, struct wlr_buffer *buffer, int x, int y);
|
||||
struct ssd_part *add_scene_button(
|
||||
struct wl_list *part_list, enum ssd_part_type type,
|
||||
struct wlr_scene_tree *parent, float *bg_color,
|
||||
struct wlr_buffer *icon_buffer, struct wlr_buffer *hover_buffer,
|
||||
int x, struct view *view);
|
||||
void add_toggled_icon(struct ssd_button *button, struct wl_list *part_list,
|
||||
enum ssd_part_type type, struct wlr_buffer *icon_buffer,
|
||||
struct wlr_buffer *hover_buffer);
|
||||
struct ssd_part *add_scene_button_corner(
|
||||
struct wl_list *part_list, enum ssd_part_type type,
|
||||
enum ssd_part_type corner_type, struct wlr_scene_tree *parent,
|
||||
struct wlr_buffer *corner_buffer, struct wlr_buffer *icon_buffer,
|
||||
struct wlr_buffer *hover_buffer, int x, struct view *view);
|
||||
struct ssd_part *add_scene_button(struct wl_list *part_list,
|
||||
enum ssd_part_type type, struct wlr_scene_tree *parent,
|
||||
struct lab_data_buffer *buffers[LAB_BS_ALL + 1], int x, int y,
|
||||
struct view *view);
|
||||
void update_window_icon_buffer(struct wlr_scene_node *button_node,
|
||||
struct lab_data_buffer *buffer);
|
||||
|
||||
/* SSD internal helpers */
|
||||
struct ssd_part *ssd_get_part(
|
||||
|
|
@ -147,6 +160,7 @@ void ssd_destroy_parts(struct wl_list *list);
|
|||
void ssd_titlebar_create(struct ssd *ssd);
|
||||
void ssd_titlebar_update(struct ssd *ssd);
|
||||
void ssd_titlebar_destroy(struct ssd *ssd);
|
||||
bool ssd_should_be_squared(struct ssd *ssd);
|
||||
|
||||
void ssd_border_create(struct ssd *ssd);
|
||||
void ssd_border_update(struct ssd *ssd);
|
||||
|
|
|
|||
|
|
@ -5,8 +5,6 @@
|
|||
#include <wayland-server-core.h>
|
||||
#include "common/border.h"
|
||||
|
||||
#define SSD_BUTTON_COUNT 4
|
||||
#define SSD_BUTTON_WIDTH 26
|
||||
#define SSD_EXTENDED_AREA 8
|
||||
|
||||
/*
|
||||
|
|
@ -23,12 +21,25 @@
|
|||
*/
|
||||
enum ssd_part_type {
|
||||
LAB_SSD_NONE = 0,
|
||||
LAB_SSD_BUTTON_CLOSE,
|
||||
|
||||
LAB_SSD_BUTTON_CLOSE = 1,
|
||||
LAB_SSD_BUTTON_MAXIMIZE,
|
||||
LAB_SSD_BUTTON_ICONIFY,
|
||||
LAB_SSD_BUTTON_WINDOW_ICON,
|
||||
LAB_SSD_BUTTON_WINDOW_MENU,
|
||||
LAB_SSD_BUTTON_SHADE,
|
||||
LAB_SSD_BUTTON_OMNIPRESENT,
|
||||
/* only for internal use */
|
||||
LAB_SSD_BUTTON_FIRST = LAB_SSD_BUTTON_CLOSE,
|
||||
LAB_SSD_BUTTON_LAST = LAB_SSD_BUTTON_OMNIPRESENT,
|
||||
LAB_SSD_BUTTON,
|
||||
|
||||
LAB_SSD_PART_TITLEBAR,
|
||||
LAB_SSD_PART_TITLEBAR_CORNER_RIGHT,
|
||||
LAB_SSD_PART_TITLEBAR_CORNER_LEFT,
|
||||
LAB_SSD_PART_TITLE,
|
||||
|
||||
/* shared by shadows, borders and extents */
|
||||
LAB_SSD_PART_CORNER_TOP_LEFT,
|
||||
LAB_SSD_PART_CORNER_TOP_RIGHT,
|
||||
LAB_SSD_PART_CORNER_BOTTOM_RIGHT,
|
||||
|
|
@ -37,6 +48,7 @@ enum ssd_part_type {
|
|||
LAB_SSD_PART_RIGHT,
|
||||
LAB_SSD_PART_BOTTOM,
|
||||
LAB_SSD_PART_LEFT,
|
||||
|
||||
LAB_SSD_CLIENT,
|
||||
LAB_SSD_FRAME,
|
||||
LAB_SSD_ROOT,
|
||||
|
|
@ -74,12 +86,14 @@ struct wlr_scene_node;
|
|||
*/
|
||||
struct ssd *ssd_create(struct view *view, bool active);
|
||||
struct border ssd_get_margin(const struct ssd *ssd);
|
||||
int ssd_get_corner_width(void);
|
||||
void ssd_update_margin(struct ssd *ssd);
|
||||
void ssd_set_active(struct ssd *ssd, bool active);
|
||||
void ssd_update_title(struct ssd *ssd);
|
||||
void ssd_update_geometry(struct ssd *ssd);
|
||||
void ssd_destroy(struct ssd *ssd);
|
||||
void ssd_set_titlebar(struct ssd *ssd, bool enabled);
|
||||
void ssd_update_window_icon(struct ssd *ssd);
|
||||
|
||||
void ssd_enable_keybind_inhibit_indicator(struct ssd *ssd, bool enable);
|
||||
void ssd_enable_shade(struct ssd *ssd, bool enable);
|
||||
|
|
@ -97,7 +111,6 @@ enum ssd_part_type ssd_at(const struct ssd *ssd,
|
|||
enum ssd_part_type ssd_get_part_type(const struct ssd *ssd,
|
||||
struct wlr_scene_node *node);
|
||||
uint32_t ssd_resize_edges(enum ssd_part_type type);
|
||||
bool ssd_is_button(enum ssd_part_type type);
|
||||
bool ssd_part_contains(enum ssd_part_type whole, enum ssd_part_type candidate);
|
||||
enum ssd_mode ssd_mode_parse(const char *mode);
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include <stdio.h>
|
||||
#include <wlr/render/wlr_renderer.h>
|
||||
#include "ssd.h"
|
||||
|
||||
enum lab_justification {
|
||||
LAB_JUSTIFY_LEFT,
|
||||
|
|
@ -25,9 +26,24 @@ struct theme_snapping_overlay {
|
|||
float border_color[3][4];
|
||||
};
|
||||
|
||||
enum lab_button_state {
|
||||
LAB_BS_HOVERD = 1 << 0,
|
||||
LAB_BS_TOGGLED = 1 << 1,
|
||||
LAB_BS_ROUNDED = 1 << 2,
|
||||
|
||||
LAB_BS_ALL = LAB_BS_HOVERD | LAB_BS_TOGGLED | LAB_BS_ROUNDED,
|
||||
};
|
||||
|
||||
struct theme {
|
||||
int border_width;
|
||||
int padding_height;
|
||||
|
||||
/*
|
||||
* the space between title bar border and
|
||||
* buttons on the left/right/top
|
||||
*/
|
||||
int window_titlebar_padding_width;
|
||||
int window_titlebar_padding_height;
|
||||
|
||||
int title_height;
|
||||
int menu_overlap_x;
|
||||
int menu_overlap_y;
|
||||
|
|
@ -44,20 +60,19 @@ struct theme {
|
|||
float window_active_label_text_color[4];
|
||||
float window_inactive_label_text_color[4];
|
||||
enum lab_justification window_label_text_justify;
|
||||
enum lab_justification menu_title_text_justify;
|
||||
|
||||
/* button colors */
|
||||
float window_active_button_menu_unpressed_image_color[4];
|
||||
float window_active_button_iconify_unpressed_image_color[4];
|
||||
float window_active_button_max_unpressed_image_color[4];
|
||||
float window_active_button_close_unpressed_image_color[4];
|
||||
float window_inactive_button_menu_unpressed_image_color[4];
|
||||
float window_inactive_button_iconify_unpressed_image_color[4];
|
||||
float window_inactive_button_max_unpressed_image_color[4];
|
||||
float window_inactive_button_close_unpressed_image_color[4];
|
||||
/* TODO: add pressed and hover colors for buttons */
|
||||
/* buttons */
|
||||
int window_button_width;
|
||||
int window_button_height;
|
||||
int window_button_spacing;
|
||||
|
||||
/* the corner radius of the hover effect */
|
||||
int window_button_hover_bg_corner_radius;
|
||||
|
||||
int menu_item_padding_x;
|
||||
int menu_item_padding_y;
|
||||
int menu_item_height;
|
||||
|
||||
float menu_items_bg_color[4];
|
||||
float menu_items_text_color[4];
|
||||
|
|
@ -72,6 +87,10 @@ struct theme {
|
|||
int menu_separator_padding_height;
|
||||
float menu_separator_color[4];
|
||||
|
||||
float menu_title_bg_color[4];
|
||||
|
||||
float menu_title_text_color[4];
|
||||
|
||||
int osd_border_width;
|
||||
|
||||
float osd_bg_color[4];
|
||||
|
|
@ -99,31 +118,26 @@ struct theme {
|
|||
float window_active_shadow_color[4];
|
||||
float window_inactive_shadow_color[4];
|
||||
|
||||
struct {
|
||||
/*
|
||||
* The texture of a window buttons for each hover/toggled/rounded
|
||||
* state. This can be accessed like:
|
||||
*
|
||||
* buttons[LAB_SSD_BUTTON_ICONIFY][LAB_BS_HOVERD | LAB_BS_TOGGLED]
|
||||
*
|
||||
* Elements in buttons[0] are all NULL since LAB_SSD_BUTTON_FIRST is 1.
|
||||
*/
|
||||
struct lab_data_buffer *buttons
|
||||
[LAB_SSD_BUTTON_LAST + 1][LAB_BS_ALL + 1];
|
||||
|
||||
/* TODO: add toggled/hover/pressed/disabled colors for buttons */
|
||||
float button_colors[LAB_SSD_BUTTON_LAST + 1][4];
|
||||
|
||||
/* TODO: move other window.(in)active.* entries to here */
|
||||
|
||||
} window[2]; /* indexed by THEME_INACTIVE and THEME_ACTIVE */
|
||||
|
||||
/* textures */
|
||||
struct lab_data_buffer *button_close_active_unpressed;
|
||||
struct lab_data_buffer *button_maximize_active_unpressed;
|
||||
struct lab_data_buffer *button_restore_active_unpressed;
|
||||
struct lab_data_buffer *button_iconify_active_unpressed;
|
||||
struct lab_data_buffer *button_menu_active_unpressed;
|
||||
|
||||
struct lab_data_buffer *button_close_inactive_unpressed;
|
||||
struct lab_data_buffer *button_maximize_inactive_unpressed;
|
||||
struct lab_data_buffer *button_restore_inactive_unpressed;
|
||||
struct lab_data_buffer *button_iconify_inactive_unpressed;
|
||||
struct lab_data_buffer *button_menu_inactive_unpressed;
|
||||
|
||||
/* hover variants are optional and may be NULL */
|
||||
struct lab_data_buffer *button_close_active_hover;
|
||||
struct lab_data_buffer *button_maximize_active_hover;
|
||||
struct lab_data_buffer *button_restore_active_hover;
|
||||
struct lab_data_buffer *button_iconify_active_hover;
|
||||
struct lab_data_buffer *button_menu_active_hover;
|
||||
|
||||
struct lab_data_buffer *button_close_inactive_hover;
|
||||
struct lab_data_buffer *button_maximize_inactive_hover;
|
||||
struct lab_data_buffer *button_restore_inactive_hover;
|
||||
struct lab_data_buffer *button_iconify_inactive_hover;
|
||||
struct lab_data_buffer *button_menu_inactive_hover;
|
||||
|
||||
struct lab_data_buffer *corner_top_left_active_normal;
|
||||
struct lab_data_buffer *corner_top_right_active_normal;
|
||||
|
|
@ -137,7 +151,10 @@ struct theme {
|
|||
struct lab_data_buffer *shadow_corner_bottom_inactive;
|
||||
struct lab_data_buffer *shadow_edge_inactive;
|
||||
|
||||
/* not set in rc.xml/themerc, but derived from font & padding_height */
|
||||
/*
|
||||
* Not set in rc.xml/themerc, but derived from the tallest titlebar
|
||||
* object plus 2 * window_titlebar_padding_height
|
||||
*/
|
||||
int osd_window_switcher_item_height;
|
||||
|
||||
/* magnifier */
|
||||
|
|
@ -145,6 +162,9 @@ struct theme {
|
|||
int mag_border_width;
|
||||
};
|
||||
|
||||
#define THEME_INACTIVE 0
|
||||
#define THEME_ACTIVE 1
|
||||
|
||||
struct server;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#ifndef LABWC_VIEW_H
|
||||
#define LABWC_VIEW_H
|
||||
|
||||
#include "config/rcxml.h"
|
||||
#include "config.h"
|
||||
#include "ssd.h"
|
||||
#include <stdbool.h>
|
||||
|
|
@ -10,9 +11,18 @@
|
|||
#include <wlr/util/box.h>
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
|
||||
#define LAB_MIN_VIEW_WIDTH (SSD_BUTTON_WIDTH * SSD_BUTTON_COUNT)
|
||||
#define LAB_MIN_VIEW_HEIGHT 60
|
||||
|
||||
/*
|
||||
* Fallback view geometry used in some cases where a better position
|
||||
* and/or size can't be determined. Try to avoid using these except as
|
||||
* a last resort.
|
||||
*/
|
||||
#define VIEW_FALLBACK_X 100
|
||||
#define VIEW_FALLBACK_Y 100
|
||||
#define VIEW_FALLBACK_WIDTH 640
|
||||
#define VIEW_FALLBACK_HEIGHT 480
|
||||
|
||||
/*
|
||||
* In labwc, a view is a container for surfaces which can be moved around by
|
||||
* the user. In practice this means XDG toplevel and XWayland windows.
|
||||
|
|
@ -31,6 +41,12 @@ enum ssd_preference {
|
|||
LAB_SSD_PREF_SERVER,
|
||||
};
|
||||
|
||||
enum three_state {
|
||||
LAB_STATE_UNSPECIFIED = 0,
|
||||
LAB_STATE_ENABLED,
|
||||
LAB_STATE_DISABLED
|
||||
};
|
||||
|
||||
/**
|
||||
* Directions in which a view can be maximized. "None" is used
|
||||
* internally to mean "not maximized" but is not valid in rc.xml.
|
||||
|
|
@ -188,6 +204,7 @@ struct view {
|
|||
enum view_axis maximized;
|
||||
bool fullscreen;
|
||||
bool tearing_hint;
|
||||
enum three_state force_tearing;
|
||||
bool visible_on_all_workspaces;
|
||||
enum view_edge tiled;
|
||||
uint32_t edges_visible; /* enum wlr_edges bitset */
|
||||
|
|
@ -281,6 +298,7 @@ struct xdg_toplevel_view {
|
|||
|
||||
/* Events unique to xdg-toplevel views */
|
||||
struct wl_listener set_app_id;
|
||||
struct wl_listener request_show_window_menu;
|
||||
struct wl_listener new_popup;
|
||||
};
|
||||
|
||||
|
|
@ -451,8 +469,15 @@ void view_moved(struct view *view);
|
|||
void view_minimize(struct view *view, bool minimized);
|
||||
bool view_compute_centered_position(struct view *view,
|
||||
const struct wlr_box *ref, int w, int h, int *x, int *y);
|
||||
void view_set_fallback_natural_geometry(struct view *view);
|
||||
void view_store_natural_geometry(struct view *view);
|
||||
|
||||
/**
|
||||
* view_apply_natural_geometry - adjust view->natural_geometry if it doesn't
|
||||
* intersect with view->output and then apply it
|
||||
*/
|
||||
void view_apply_natural_geometry(struct view *view);
|
||||
|
||||
/**
|
||||
* view_effective_height - effective height of view, with respect to shaded state
|
||||
* @view: view for which effective height is desired
|
||||
|
|
@ -475,7 +500,7 @@ void view_center(struct view *view, const struct wlr_box *ref);
|
|||
* @policy: placement policy to apply
|
||||
*/
|
||||
void view_place_by_policy(struct view *view, bool allow_cursor,
|
||||
enum view_placement_policy);
|
||||
enum view_placement_policy policy);
|
||||
void view_constrain_size_to_that_of_usable_area(struct view *view);
|
||||
|
||||
void view_restore_to(struct view *view, struct wlr_box geometry);
|
||||
|
|
@ -495,6 +520,7 @@ void view_toggle_always_on_bottom(struct view *view);
|
|||
void view_toggle_visible_on_all_workspaces(struct view *view);
|
||||
|
||||
bool view_is_tiled(struct view *view);
|
||||
bool view_is_tiled_and_notify_tiled(struct view *view);
|
||||
bool view_is_floating(struct view *view);
|
||||
void view_move_to_workspace(struct view *view, struct workspace *workspace);
|
||||
enum ssd_mode view_get_ssd_mode(struct view *view);
|
||||
|
|
@ -529,6 +555,7 @@ const char *view_get_string_prop(struct view *view, const char *prop);
|
|||
void view_update_title(struct view *view);
|
||||
void view_update_app_id(struct view *view);
|
||||
void view_reload_ssd(struct view *view);
|
||||
int view_get_min_width(void);
|
||||
|
||||
void view_set_shade(struct view *view, bool shaded);
|
||||
|
||||
|
|
@ -540,8 +567,6 @@ void view_on_output_destroy(struct view *view);
|
|||
void view_connect_map(struct view *view, struct wlr_surface *surface);
|
||||
void view_destroy(struct view *view);
|
||||
|
||||
struct output *view_get_adjacent_output(struct view *view, enum view_edge edge,
|
||||
bool wrap);
|
||||
enum view_axis view_axis_parse(const char *direction);
|
||||
enum view_edge view_edge_parse(const char *direction);
|
||||
enum view_placement_policy view_placement_parse(const char *policy);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include <stdbool.h>
|
||||
#include <wayland-util.h>
|
||||
#include <wayland-server-core.h>
|
||||
|
||||
struct seat;
|
||||
struct server;
|
||||
|
|
@ -19,6 +20,13 @@ struct workspace {
|
|||
|
||||
char *name;
|
||||
struct wlr_scene_tree *tree;
|
||||
|
||||
struct lab_cosmic_workspace *cosmic_workspace;
|
||||
struct {
|
||||
struct wl_listener activate;
|
||||
struct wl_listener deactivate;
|
||||
struct wl_listener remove;
|
||||
} on;
|
||||
};
|
||||
|
||||
void workspaces_init(struct server *server);
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ struct xwayland_view {
|
|||
struct wl_listener set_override_redirect;
|
||||
struct wl_listener set_strut_partial;
|
||||
struct wl_listener set_window_type;
|
||||
struct wl_listener map_request;
|
||||
|
||||
/* Not (yet) implemented */
|
||||
/* struct wl_listener set_role; */
|
||||
|
|
|
|||
44
meson.build
44
meson.build
|
|
@ -1,7 +1,7 @@
|
|||
project(
|
||||
'labwc',
|
||||
'c',
|
||||
version: '0.7.2',
|
||||
version: '0.8.0',
|
||||
license: 'GPL-2.0-only',
|
||||
meson_version: '>=0.59.0',
|
||||
default_options: [
|
||||
|
|
@ -36,6 +36,7 @@ add_project_arguments(cc.get_supported_arguments([
|
|||
'-Wunused-macros',
|
||||
|
||||
'-Wno-unused-parameter',
|
||||
'-Wno-expansion-to-defined',
|
||||
]), language: 'c')
|
||||
|
||||
version='"@0@"'.format(meson.project_version())
|
||||
|
|
@ -49,15 +50,16 @@ endif
|
|||
add_project_arguments('-DLABWC_VERSION=@0@'.format(version), language: 'c')
|
||||
|
||||
wlroots = dependency(
|
||||
'wlroots',
|
||||
'wlroots-0.18',
|
||||
default_options: ['default_library=static', 'examples=false'],
|
||||
version: ['>=0.17.0', '<0.18.0'],
|
||||
version: ['>=0.18.0', '<0.19.0'],
|
||||
)
|
||||
|
||||
wlroots_has_xwayland = wlroots.get_variable('have_xwayland') == 'true'
|
||||
have_libsfdo = not get_option('icon').disabled()
|
||||
|
||||
wayland_server = dependency('wayland-server', version: '>=1.19.0')
|
||||
wayland_protos = dependency('wayland-protocols')
|
||||
wayland_protos = dependency('wayland-protocols', version: '>=1.35')
|
||||
xkbcommon = dependency('xkbcommon')
|
||||
xcb = dependency('xcb', required: get_option('xwayland'))
|
||||
xcb_icccm = dependency('xcb-icccm', required: get_option('xwayland'))
|
||||
|
|
@ -72,6 +74,24 @@ pixman = dependency('pixman-1')
|
|||
math = cc.find_library('m')
|
||||
png = dependency('libpng')
|
||||
svg = dependency('librsvg-2.0', version: '>=2.46', required: false)
|
||||
sfdo_basedir = dependency(
|
||||
'libsfdo-basedir',
|
||||
default_options: ['default_library=static', 'examples=false', 'tests=false'],
|
||||
version: '>=0.1.0',
|
||||
required: have_libsfdo,
|
||||
)
|
||||
sfdo_desktop = dependency(
|
||||
'libsfdo-desktop',
|
||||
default_options: ['default_library=static', 'examples=false', 'tests=false'],
|
||||
version: '>=0.1.0',
|
||||
required: have_libsfdo,
|
||||
)
|
||||
sfdo_icon = dependency(
|
||||
'libsfdo-icon',
|
||||
default_options: ['default_library=static', 'examples=false', 'tests=false'],
|
||||
version: '>=0.1.0',
|
||||
required: have_libsfdo,
|
||||
)
|
||||
|
||||
if get_option('xwayland').enabled() and not wlroots_has_xwayland
|
||||
error('no wlroots Xwayland support')
|
||||
|
|
@ -87,6 +107,8 @@ else
|
|||
endif
|
||||
conf_data.set10('HAVE_RSVG', have_rsvg)
|
||||
|
||||
conf_data.set10('HAVE_LIBSFDO', have_libsfdo)
|
||||
|
||||
if get_option('static_analyzer').enabled()
|
||||
add_project_arguments(['-fanalyzer'], language: 'c')
|
||||
endif
|
||||
|
|
@ -125,11 +147,23 @@ if have_rsvg
|
|||
svg,
|
||||
]
|
||||
endif
|
||||
if have_libsfdo
|
||||
labwc_deps += [
|
||||
sfdo_basedir,
|
||||
sfdo_desktop,
|
||||
sfdo_icon,
|
||||
]
|
||||
endif
|
||||
|
||||
subdir('include')
|
||||
subdir('src')
|
||||
subdir('docs')
|
||||
|
||||
dep_cmocka = dependency('cmocka', required: get_option('test'))
|
||||
if dep_cmocka.found()
|
||||
subdir('t')
|
||||
endif
|
||||
|
||||
executable(
|
||||
meson.project_name(),
|
||||
labwc_sources,
|
||||
|
|
@ -140,6 +174,8 @@ executable(
|
|||
|
||||
install_data('data/labwc.desktop', install_dir: get_option('datadir') / 'wayland-sessions')
|
||||
|
||||
install_data('data/labwc-portals.conf', install_dir: get_option('datadir') / 'xdg-desktop-portal')
|
||||
|
||||
icons = ['labwc-symbolic.svg', 'labwc.svg']
|
||||
foreach icon : icons
|
||||
icon_path = join_paths('data', icon)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
option('man-pages', type: 'feature', value: 'auto', description: 'Generate and install man pages')
|
||||
option('xwayland', type: 'feature', value: 'auto', description: 'Enable support for X11 applications')
|
||||
option('svg', type: 'feature', value: 'enabled', description: 'Enable svg window buttons')
|
||||
option('icon', type: 'feature', value: 'enabled', description: 'Enable window icons')
|
||||
option('nls', type: 'feature', value: 'auto', description: 'Enable native language support')
|
||||
option('static_analyzer', type: 'feature', value: 'disabled', description: 'Run gcc static analyzer')
|
||||
option('test', type: 'feature', value: 'disabled', description: 'Run tests')
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
ar cs de el es et eu fa fi fr gl hu id it ja ka ko lt nl pa pl pt ru sv tr uk zh_CN
|
||||
ar cs da de el es et eu fa fi fr gl hu id it ja ka ko lt nl pa pl pt pt_BR ru sv tr uk zh_CN
|
||||
|
|
|
|||
46
po/ar.po
46
po/ar.po
|
|
@ -7,65 +7,71 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-03-11 10:23+0000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-09-23 20:01+0000\n"
|
||||
"Last-Translator: Abdullah Albaroty <albaroty@gmail.com>\n"
|
||||
"Language-Team: Arabic <https://translate.lxqt-project.org/projects/labwc/labwc/ar/>\n"
|
||||
"Language-Team: Arabic <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/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 ? 4 : 5;\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 ? 4 : 5;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr "اذهب هناك..."
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "إعادة تهيئة"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "أخرج"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "صغّر"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "كبّر"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "ملء الشاشة"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "طي/إلغاء طي"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "إخف الإطار"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "دائمًا في القمة"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "أنقل يسارا"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "أنقل يمينا"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "أظهر في مساحات العمل دائما"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "مساحة عمل"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "غلق"
|
||||
|
|
|
|||
38
po/cs.po
38
po/cs.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-03-02 02:00+0100\n"
|
||||
"Last-Translator: zenobit <zenobit@disroot.org>\n"
|
||||
"Language-Team: Czech <zenobit@disroot.org>\n"
|
||||
|
|
@ -16,54 +16,58 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Překonfigurovat"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Odejít"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimalizovat"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maximalizovat"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Na celou obrazovku"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Rolovat nahoru/dolů"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Dekorace"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Vždy nahoře"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Posunout doleva"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Posunout doprava"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Vždy na viditelné Pracovní Ploše"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Pracovní Plocha"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Zavřít"
|
||||
|
|
|
|||
75
po/da.po
Normal file
75
po/da.po
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
# Labwc pot file
|
||||
# Copyright (C) 2024
|
||||
# This file is distributed under the same license as the labwc package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-08-18 20:01+0000\n"
|
||||
"Last-Translator: Peter Jespersen <flywheel@illogical.dk>\n"
|
||||
"Language-Team: Danish <https://translate.lxqt-project.org/projects/labwc/labwc/da/>\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: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Genindstil"
|
||||
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Afslut"
|
||||
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimer"
|
||||
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maksimer"
|
||||
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Fuldskærm"
|
||||
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Rul Op/Ned"
|
||||
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Dekorationer"
|
||||
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Altid øverst"
|
||||
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Flyt til venstre"
|
||||
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Flyt til højre"
|
||||
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Altid på synlig arbejdsplads"
|
||||
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Arbejdsplads"
|
||||
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Luk"
|
||||
40
po/de.po
40
po/de.po
|
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-03-04 07:14+0000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-06-23 13:42+0000\n"
|
||||
"Last-Translator: Standreas <standreas@riseup.net>\n"
|
||||
"Language-Team: German <https://translate.lxqt-project.org/projects/labwc/labwc/de/>\n"
|
||||
"Language: de\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Rekonfigurieren"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Beenden"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimieren"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maximieren"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Vollbild"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Hoch/Runterrollen"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Dekorationen"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Immer im Vordergrund"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "nach links"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "nach rechts"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Immer auf aktiver Arbeitsfläche"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Arbeitsfläche"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Schließen"
|
||||
|
|
|
|||
42
po/el.po
42
po/el.po
|
|
@ -7,9 +7,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-04-20 15:23+0000\n"
|
||||
"Last-Translator: Yannis Drougas <drougas@gmail.com>\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-09-25 20:01+0000\n"
|
||||
"Last-Translator: Giannis Antypas <gianni.antypas@gmail.com>\n"
|
||||
"Language-Team: Greek <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/el/>\n"
|
||||
"Language: el\n"
|
||||
|
|
@ -19,54 +19,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr "Πήγαινε εκεί..."
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Επαναρύθμιση"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Έξοδος"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Ελαχιστοποίηση"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Μεγιστοποίηση"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Πλήρης οθόνη"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Τύλιγμα/Ξετύλιγμα"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Διακόσμηση"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Πάντα στο προσκήνιο"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Στα αριστερά"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Στα δεξιά"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Πάντα στην ενεργή επιφάνεια εργασίας"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Επιφάνεια εργασίας"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Κλείσιμο"
|
||||
|
|
|
|||
38
po/es.po
38
po/es.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-03-19 11:08+0000\n"
|
||||
"Last-Translator: Roberalz <lumintnian@outlook.com>\n"
|
||||
"Language-Team: Spanish <https://translate.lxqt-project.org/projects/labwc/labwc/es/>\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Reconfigurar"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Salir"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimizar"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maximizar"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Pantalla completa"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Enrollar hacia arriba/abajo"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Decoraciones"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Siempre encima"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Mover a la izquierda"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Mover a la derecha"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Siempre en un espacio de trabajo visible"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Espacio de trabajo"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
|
|
|
|||
43
po/et.po
43
po/et.po
|
|
@ -7,10 +7,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-01-23 09:23+0000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-09-23 20:01+0000\n"
|
||||
"Last-Translator: Priit Jõerüüt <lxqtwlate@joeruut.com>\n"
|
||||
"Language-Team: Estonian <https://translate.lxqt-project.org/projects/labwc/labwc/et/>\n"
|
||||
"Language-Team: Estonian <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/et/>\n"
|
||||
"Language: et\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
|
@ -18,54 +19,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr "Suundu..."
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Seadista uuesti"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Välju"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Vähenda"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Suurenda"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Täisekraanivaade"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Keri üles/alla"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Akende välimus"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Alati kõige peal"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Tõsta vasakule"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Tõsta paremale"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Alati nähtav töölaual"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Töölaud"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Sulge"
|
||||
|
|
|
|||
38
po/eu.po
38
po/eu.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-03-19 11:08+0000\n"
|
||||
"Last-Translator: Roberalz <lumintnian@outlook.com>\n"
|
||||
"Language-Team: Basque <https://translate.lxqt-project.org/projects/labwc/labwc/eu/>\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Berriz konfiguratu"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Irten"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimizatu"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maximizatu"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Pantaila osoa"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Ibili gora/behera"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Apaingarriak"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Beti gainean"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Mugitu ezkerrera"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Mugitu eskuinera"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Beti ikusgai dagoen lan-eremuan"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Langunea"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Itxi"
|
||||
|
|
|
|||
38
po/fa.po
38
po/fa.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
|
|
@ -16,54 +16,58 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
|
|
|||
41
po/fi.po
41
po/fi.po
|
|
@ -7,11 +7,10 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-04-20 15:23+0000\n"
|
||||
"Last-Translator: Jouni Järvinen <jounijarvis@gmail.com>\n"
|
||||
"Language-Team: Finnish <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/fi/>\n"
|
||||
"Language-Team: Finnish <https://translate.lxqt-project.org/projects/labwc/labwc/fi/>\n"
|
||||
"Language: fi\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
|
@ -19,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Uudelleenmääritä"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Poistu"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Pienennä"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Suurenna"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Koko näyttö"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Rullaa ylös/alas"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Kehykset"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Aina ylimpänä"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Siirrä vasemmalle"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Siirrä oikealle"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Aina näkyvässä työtilassa"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Työtila"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Sulje"
|
||||
|
|
|
|||
46
po/fr.po
46
po/fr.po
|
|
@ -7,9 +7,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-03-20 18:15+0000\n"
|
||||
"Last-Translator: rico542 <rico@alwaysdata.net>\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-09-30 20:01+0000\n"
|
||||
"Last-Translator: Eric Migeon <weblate.tilux@spamgourmet.com>\n"
|
||||
"Language-Team: French <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/fr/>\n"
|
||||
"Language: fr\n"
|
||||
|
|
@ -19,54 +19,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Reconfigurer"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Quitter"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimiser"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maximiser"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Plein écran"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Enrouler/Dérouler"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Décorations"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Toujours au dessus"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
msgstr "Bouger à gauche"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Déplacer à gauche"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
msgstr "Bouger à droite"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Déplacer à droite"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Toujours sur le bureau visible"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Bureau"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
|
|
|||
38
po/gl.po
38
po/gl.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-03-19 11:08+0000\n"
|
||||
"Last-Translator: Roberalz <lumintnian@outlook.com>\n"
|
||||
"Language-Team: Galician <https://translate.lxqt-project.org/projects/labwc/labwc/gl/>\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Reconfigurar"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Saír"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimizar"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maximizar"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Pantalla completa"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Rodar cara arriba/abaixo"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Decoracións"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Sempre enriba"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Mover á esquerda"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Mover á dereita"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Sempre no espazo de traballo visible"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Espazo de traballo"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Pechar"
|
||||
|
|
|
|||
38
po/hu.po
38
po/hu.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-02-19 21:23+0000\n"
|
||||
"Last-Translator: winerysearch <david.fitala@gmail.com>\n"
|
||||
"Language-Team: Hungarian <https://translate.lxqt-project.org/projects/labwc/labwc/hu/>\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Rekonfigurál"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Kilépés"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Kis méret"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Teljes méret"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Teljes képernyő"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Felhúz / Legördül"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Dekorációk"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Mindig felül"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Balra dokkol"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Jobbra dokkol"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Kitűz"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Munkaasztal"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Bezárás"
|
||||
|
|
|
|||
38
po/id.po
38
po/id.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-03-12 21:48+0000\n"
|
||||
"Last-Translator: alwanasary <baity.jannati@gmail.com>\n"
|
||||
"Language-Team: Indonesian <https://translate.lxqt-project.org/projects/labwc/labwc/id/>\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Atur Ulang"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Keluar"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Sembunyikan"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Perluas Jendela"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Tampil Menyeluruh"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Gulir atas/bawah"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Dekorasi"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Selalu di Muka"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Geser ke Kiri"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Geser ke Kanan"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Selalu pada Ruang Kerja yang Terlihat"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Ruang Kerja"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Tutup"
|
||||
|
|
|
|||
43
po/it.po
43
po/it.po
|
|
@ -7,10 +7,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-01-23 09:23+0000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-09-21 20:01+0000\n"
|
||||
"Last-Translator: Standreas <standreas@riseup.net>\n"
|
||||
"Language-Team: Italian <https://translate.lxqt-project.org/projects/labwc/labwc/it/>\n"
|
||||
"Language-Team: Italian <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/it/>\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
|
@ -18,54 +19,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr "Vai lì..."
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Riconfigura"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Esci"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimizza"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Massimizza"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Schermo intero"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Arrotola/srotola"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Decorazioni"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Sempre sopra"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Sposta a sinistra"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Sposta a destra"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Sempre sull'area di lavoro visibile"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Area di lavoro"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Chiudi"
|
||||
|
|
|
|||
38
po/ja.po
38
po/ja.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-03-15 16:23+0000\n"
|
||||
"Last-Translator: Hiroaki Yamamoto <hrak1529@gmail.com>\n"
|
||||
"Language-Team: Japanese <https://translate.lxqt-project.org/projects/labwc/labwc/ja/>\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "再設定"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "終了"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "最小化"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "最大化"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "フルスクリーン"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "折りたたむ/広げる"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "デコレーション"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "常に最前面に表示"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "左に移動"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "右に移動"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "現在のワークスペースに常に表示"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "ワークスペース"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "閉じる"
|
||||
|
|
|
|||
40
po/ka.po
40
po/ka.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2023-02-22 09:43+0100\n"
|
||||
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
|
||||
"Language-Team: Georgian <ka>\n"
|
||||
|
|
@ -18,56 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "თავიდან მორგება"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "გასვლა"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "ჩაკეცვა"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "გადიდება"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "მთელ ეკრანზე"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "დეკორაციები"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#, fuzzy
|
||||
#| msgid "Always On Top"
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "ყოველთვისყველაზეზემოდან"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "მარცხნივ გაწევა"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "მარჯვნივ გაწევა"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "სამუშაო ადგილი"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "დახურვა"
|
||||
|
|
|
|||
72
po/ko.po
72
po/ko.po
|
|
@ -7,63 +7,69 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-07-03 08:01+0000\n"
|
||||
"Last-Translator: tark1998 <tark1998@gmail.com>\n"
|
||||
"Language-Team: Korean <https://translate.lxqt-project.org/projects/labwc/labwc/ko/>\n"
|
||||
"Language: ko\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr ""
|
||||
msgstr "재설정"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr ""
|
||||
msgstr "종료"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr ""
|
||||
msgstr "최소화"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr ""
|
||||
msgstr "최대화"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr ""
|
||||
msgstr "전체화면"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
msgstr ""
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "접기/펼치기"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr ""
|
||||
msgstr "창 장식"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr ""
|
||||
msgstr "항상 최상단에 표시"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
msgstr ""
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "좌로 이동"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
msgstr ""
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "우로 이동"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr ""
|
||||
msgstr "현재 작업공간에 항상 표시"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr ""
|
||||
msgstr "작업공간"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
msgstr "닫기"
|
||||
|
|
|
|||
38
po/labwc.pot
38
po/labwc.pot
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
|
@ -17,54 +17,58 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
|
|
|||
38
po/lt.po
38
po/lt.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-02-29 14:23+0000\n"
|
||||
"Last-Translator: Moo <hazap@hotmail.com>\n"
|
||||
"Language-Team: Lithuanian <https://translate.lxqt-project.org/projects/labwc/labwc/lt/>\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Konfigūruoti iš naujo"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Išeiti"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Suskleisti"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Išskleisti"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Visas ekranas"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Užraityti/atraityti"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Dekoracijos"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Visada viršuje"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Perkelti kairėn"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Perkelti dešinėn"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Visada matomoje darbo srityje"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Darbo sritis"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Užverti"
|
||||
|
|
|
|||
|
|
@ -1,11 +1,18 @@
|
|||
i18n = import('i18n')
|
||||
add_project_arguments('-DGETTEXT_PACKAGE="' + meson.project_name() + '"',
|
||||
|
||||
add_project_arguments(
|
||||
'-DGETTEXT_PACKAGE="' + meson.project_name() + '"',
|
||||
'-DLOCALEDIR="' + get_option('prefix') / get_option('localedir') + '"',
|
||||
language:'c')
|
||||
i18n.gettext(meson.project_name(),
|
||||
args: ['--directory=' + source_root,
|
||||
language:'c',
|
||||
)
|
||||
|
||||
i18n.gettext(
|
||||
meson.project_name(),
|
||||
args: [
|
||||
'--directory=' + source_root,
|
||||
'--add-comments=TRANSLATORS',
|
||||
'--keyword=_',
|
||||
'--msgid-bugs=https://github.com/labwc/labwc/issues'],
|
||||
preset: 'glib'
|
||||
'--msgid-bugs=https://github.com/labwc/labwc/issues',
|
||||
],
|
||||
preset: 'glib',
|
||||
)
|
||||
|
|
|
|||
43
po/nl.po
43
po/nl.po
|
|
@ -7,10 +7,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-01-23 09:23+0000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-09-21 20:01+0000\n"
|
||||
"Last-Translator: Heimen Stoffels <vistausss@fastmail.com>\n"
|
||||
"Language-Team: Dutch <https://translate.lxqt-project.org/projects/labwc/labwc/nl/>\n"
|
||||
"Language-Team: Dutch <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/nl/>\n"
|
||||
"Language: nl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
|
@ -18,54 +19,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr "Openen…"
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Opnieuw instellen"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Afsluiten"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimaliseren"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maximaliseren"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Schermvullende weergave"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Op-/Afrollen"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Decoraties"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Altijd bovenaan"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Naar links verplaatsen"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Naar rechts verplaatsen"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Altijd op zichtbaar werkblad"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Werkblad"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Sluiten"
|
||||
|
|
|
|||
38
po/pa.po
38
po/pa.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-02-21 14:23+0000\n"
|
||||
"Last-Translator: A S Alam <amanpreet.alam@gmail.com>\n"
|
||||
"Language-Team: Punjabi <https://translate.lxqt-project.org/projects/labwc/labwc/pa/>\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "ਮੁੜ-ਸੰਰਚਨਾ ਕਰੋ"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "ਬਾਹਰ"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "ਘੱਟੋ-ਘੱਟ"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "ਵੱਧ ਤੋਂ ਵੱਧ"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "ਪੂਰੀ ਸਕਰੀਨ"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "ਉੱਤੇ/ਹੇਠਾਂ ਸਕਰਾਓ"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "ਸਜਾਵਟ"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "ਹਮੇਸ਼ਾਂ ਉੱਤੇ ਰੱਖੋ"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "ਖੱਬੇ ਭੇਜੋ"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "ਸੱਜੇ ਭੇਜੋ"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "ਹਮੇਸ਼ਾਂ ਦਿੱਖ ਵਰਕਸਪੇਸ ਉੱਤੇ"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "ਵਰਕਸਪੇਸ"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "ਬੰਦ ਕਰੋ"
|
||||
|
|
|
|||
46
po/pl.po
46
po/pl.po
|
|
@ -7,65 +7,71 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-01-23 09:23+0000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-09-21 20:01+0000\n"
|
||||
"Last-Translator: Jan Rolski <wbcwknvstb@proton.me>\n"
|
||||
"Language-Team: Polish <https://translate.lxqt-project.org/projects/labwc/labwc/pl/>\n"
|
||||
"Language-Team: Polish <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/pl/>\n"
|
||||
"Language: pl\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%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr "Przejdź tam..."
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Rekonfiguruj"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Wyjdź"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimalizuj"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maksymalizuj"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Pełny ekran"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Zwiń w górę/w dół"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Dekoracje"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Zawsze na wierzchu"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Przenieś w lewo"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Przenieś w prawo"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Zawsze na widocznym obszarze roboczym"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Przestrzeń robocza"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Zamknij"
|
||||
|
|
|
|||
40
po/pt.po
40
po/pt.po
|
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-03-27 22:23+0000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-09-21 20:01+0000\n"
|
||||
"Last-Translator: Hugo Carvalho <hugokarvalho@hotmail.com>\n"
|
||||
"Language-Team: Portuguese <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/pt/>\n"
|
||||
|
|
@ -19,54 +19,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr "Ir lá..."
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Reconfigurar"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Sair"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimizar"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maximizar"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Ecrã inteiro"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Rolar para cima/baixo"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Decorações"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Sempre no topo"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Mover para a esquerda"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Mover para a direita"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Sempre visível na área de trabalho"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Área de trabalho"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
|
|
|||
75
po/pt_BR.po
Normal file
75
po/pt_BR.po
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
# Labwc pot file
|
||||
# Copyright (C) 2024
|
||||
# This file is distributed under the same license as the labwc package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-08-24 20:01+0000\n"
|
||||
"Last-Translator: daniel <punished.haddock@proton.me>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://translate.lxqt-project.org/projects/labwc/labwc/pt_BR/>\n"
|
||||
"Language: pt_BR\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: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Reconfigurar"
|
||||
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Sair"
|
||||
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimizar"
|
||||
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maximizar"
|
||||
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Tela Cheia"
|
||||
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Rolar para Cima/Baixo"
|
||||
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Decorações"
|
||||
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Sempre no Topo"
|
||||
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Mover à Esquerda"
|
||||
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Mover à Direita"
|
||||
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Sempre Visível na Área de Trabalho"
|
||||
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Área de Trabalho"
|
||||
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
38
po/ru.po
38
po/ru.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-02-26 12:23+0000\n"
|
||||
"Last-Translator: Alice Ventus <zolkin.ag@phystech.edu>\n"
|
||||
"Language-Team: Russian <https://translate.lxqt-project.org/projects/labwc/labwc/ru/>\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"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"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Перенастроить"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Выход"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Свернуть"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Развернуть"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "На весь экран"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Свернуть/развернуть в заголовок"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Декорации"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Всегда на переднем плане"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Переместить влево"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Переместить вправо"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "На всех рабочих пространствах"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Рабочее пространство"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Закрыть"
|
||||
|
|
|
|||
43
po/sv.po
43
po/sv.po
|
|
@ -7,10 +7,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-01-24 11:23+0000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-10-12 07:24+0000\n"
|
||||
"Last-Translator: bittin <bittin@reimu.nl>\n"
|
||||
"Language-Team: Swedish <https://translate.lxqt-project.org/projects/labwc/labwc/sv/>\n"
|
||||
"Language-Team: Swedish <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/sv/>\n"
|
||||
"Language: sv\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
|
@ -18,54 +19,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr "Gå dit..."
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Konfigurera om"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Avsluta"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Minimera"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Maximera"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Fullskärm"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Rulla upp/ned"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Dekorationer"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Alltid överst"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Flytta till vänster"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Flytta till höger"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Alltid på aktiv arbetsyta"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Arbetsyta"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Stäng"
|
||||
|
|
|
|||
45
po/tr.po
45
po/tr.po
|
|
@ -7,10 +7,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-02-24 22:23+0000\n"
|
||||
"Last-Translator: Sabri Ünal <libreajans@gmail.com>\n"
|
||||
"Language-Team: Turkish <https://translate.lxqt-project.org/projects/labwc/labwc/tr/>\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-10-03 08:01+0000\n"
|
||||
"Last-Translator: Dr. Ayhan YALÇINSOY <ayhanyalcinsoy@pisilinux.org>\n"
|
||||
"Language-Team: Turkish <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/tr/>\n"
|
||||
"Language: tr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
|
@ -18,54 +19,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr "Şuraya git..."
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Yeniden Yapılandır"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Çıkış"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Küçült"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Büyüt"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "Tam Ekran"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Yukarı/aşağı katla"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Süslemeler"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Her Zaman Üstte"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Sola taşı"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Sağa taşı"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Her Zaman Görünür Çalışma Alanında"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Çalışma Alanı"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Kapat"
|
||||
|
|
|
|||
46
po/uk.po
46
po/uk.po
|
|
@ -7,65 +7,71 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"PO-Revision-Date: 2024-01-28 20:10+0000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-09-24 08:01+0000\n"
|
||||
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\n"
|
||||
"Language-Team: Ukrainian <https://translate.lxqt-project.org/projects/labwc/labwc/uk/>\n"
|
||||
"Language-Team: Ukrainian <https://translate.lxqt-project.org/projects/labwc/"
|
||||
"labwc/uk/>\n"
|
||||
"Language: uk\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"
|
||||
"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"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr "Перейти до..."
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "Переналаштувати"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "Вихід"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "Згорнути"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "Розгорнути"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "На весь екран"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "Згорнути/розгорнути"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "Декорації"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "Завжди зверху"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "Перемістити ліворуч"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "Перемістити праворуч"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "Завжди на видимому робочому просторі"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "Робочий простір"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "Закрити"
|
||||
|
|
|
|||
38
po/zh_CN.po
38
po/zh_CN.po
|
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: labwc\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/labwc/labwc/issues\n"
|
||||
"POT-Creation-Date: 2024-03-17 11:06+1000\n"
|
||||
"POT-Creation-Date: 2024-09-19 21:09+1000\n"
|
||||
"PO-Revision-Date: 2024-01-30 08:23+0000\n"
|
||||
"Last-Translator: kmephistoh <kanhaosmile@gmail.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://translate.lxqt-project.org/projects/labwc/labwc/zh_CN/>\n"
|
||||
|
|
@ -18,54 +18,58 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.2.1\n"
|
||||
|
||||
#: src/menu/menu.c:704
|
||||
#: src/menu/menu.c:1017
|
||||
msgid "Go there..."
|
||||
msgstr ""
|
||||
|
||||
#: src/menu/menu.c:1037
|
||||
msgid "Reconfigure"
|
||||
msgstr "配置重载"
|
||||
|
||||
#: src/menu/menu.c:706
|
||||
#: src/menu/menu.c:1039
|
||||
msgid "Exit"
|
||||
msgstr "退出"
|
||||
|
||||
#: src/menu/menu.c:722
|
||||
#: src/menu/menu.c:1055
|
||||
msgid "Minimize"
|
||||
msgstr "最小化"
|
||||
|
||||
#: src/menu/menu.c:724
|
||||
#: src/menu/menu.c:1057
|
||||
msgid "Maximize"
|
||||
msgstr "最大化"
|
||||
|
||||
#: src/menu/menu.c:726
|
||||
#: src/menu/menu.c:1059
|
||||
msgid "Fullscreen"
|
||||
msgstr "全屏"
|
||||
|
||||
#: src/menu/menu.c:728
|
||||
msgid "Roll up/down"
|
||||
#: src/menu/menu.c:1061
|
||||
msgid "Roll Up/Down"
|
||||
msgstr "滚动 上/下"
|
||||
|
||||
#: src/menu/menu.c:730
|
||||
#: src/menu/menu.c:1063
|
||||
msgid "Decorations"
|
||||
msgstr "装饰"
|
||||
|
||||
#: src/menu/menu.c:732
|
||||
#: src/menu/menu.c:1065
|
||||
msgid "Always on Top"
|
||||
msgstr "最上层显示"
|
||||
|
||||
#: src/menu/menu.c:737
|
||||
msgid "Move left"
|
||||
#: src/menu/menu.c:1070
|
||||
msgid "Move Left"
|
||||
msgstr "左移"
|
||||
|
||||
#: src/menu/menu.c:744
|
||||
msgid "Move right"
|
||||
#: src/menu/menu.c:1077
|
||||
msgid "Move Right"
|
||||
msgstr "右移"
|
||||
|
||||
#: src/menu/menu.c:749
|
||||
#: src/menu/menu.c:1082
|
||||
msgid "Always on Visible Workspace"
|
||||
msgstr "始终在可见工作区"
|
||||
|
||||
#: src/menu/menu.c:752 src/config/rcxml.c:1384
|
||||
#: src/menu/menu.c:1085 src/config/rcxml.c:1629
|
||||
msgid "Workspace"
|
||||
msgstr "工作区"
|
||||
|
||||
#: src/menu/menu.c:755
|
||||
#: src/menu/menu.c:1088
|
||||
msgid "Close"
|
||||
msgstr "关闭"
|
||||
|
|
|
|||
364
protocols/cosmic-workspace-unstable-v1.xml
Normal file
364
protocols/cosmic-workspace-unstable-v1.xml
Normal file
|
|
@ -0,0 +1,364 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<protocol name="cosmic_workspace_unstable_v1">
|
||||
<copyright>
|
||||
Copyright © 2019 Christopher Billington
|
||||
Copyright © 2020 Ilia Bozhinov
|
||||
Copyright © 2022 Victoria Brekenfeld
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this
|
||||
software and its documentation for any purpose is hereby granted
|
||||
without fee, provided that the above copyright notice appear in
|
||||
all copies and that both that copyright notice and this permission
|
||||
notice appear in supporting documentation, and that the name of
|
||||
the copyright holders not be used in advertising or publicity
|
||||
pertaining to distribution of the software without specific,
|
||||
written prior permission. The copyright holders make no
|
||||
representations about the suitability of this software for any
|
||||
purpose. It is provided "as is" without express or implied
|
||||
warranty.
|
||||
|
||||
THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
|
||||
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||||
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
</copyright>
|
||||
|
||||
<interface name="zcosmic_workspace_manager_v1" version="1">
|
||||
<description summary="list and control workspaces">
|
||||
Workspaces, also called virtual desktops, are groups of surfaces. A
|
||||
compositor with a concept of workspaces may only show some such groups of
|
||||
surfaces (those of 'active' workspaces) at a time. 'Activating' a
|
||||
workspace is a request for the compositor to display that workspace's
|
||||
surfaces as normal, whereas the compositor may hide or otherwise
|
||||
de-emphasise surfaces that are associated only with 'inactive' workspaces.
|
||||
Workspaces are grouped by which sets of outputs they correspond to, and
|
||||
may contain surfaces only from those outputs. In this way, it is possible
|
||||
for each output to have its own set of workspaces, or for all outputs (or
|
||||
any other arbitrary grouping) to share workspaces. Compositors may
|
||||
optionally conceptually arrange each group of workspaces in an
|
||||
N-dimensional grid.
|
||||
|
||||
The purpose of this protocol is to enable the creation of taskbars and
|
||||
docks by providing them with a list of workspaces and their properties,
|
||||
and allowing them to activate and deactivate workspaces.
|
||||
|
||||
After a client binds the zcosmic_workspace_manager_v1, each workspace will be
|
||||
sent via the workspace event.
|
||||
</description>
|
||||
|
||||
<event name="workspace_group">
|
||||
<description summary="a workspace group has been created">
|
||||
This event is emitted whenever a new workspace group has been created.
|
||||
|
||||
All initial details of the workspace group (workspaces, outputs) will be
|
||||
sent immediately after this event via the corresponding events in
|
||||
zcosmic_workspace_group_handle_v1.
|
||||
</description>
|
||||
<arg name="workspace_group" type="new_id" interface="zcosmic_workspace_group_handle_v1"/>
|
||||
</event>
|
||||
|
||||
<request name="commit">
|
||||
<description summary="all requests about the workspaces have been sent">
|
||||
The client must send this request after it has finished sending other
|
||||
requests. The compositor must process a series of requests preceding a
|
||||
commit request atomically.
|
||||
|
||||
This allows changes to the workspace properties to be seen as atomic,
|
||||
even if they happen via multiple events, and even if they involve
|
||||
multiple zcosmic_workspace_handle_v1 objects, for example, deactivating one
|
||||
workspace and activating another.
|
||||
</description>
|
||||
</request>
|
||||
|
||||
<event name="done">
|
||||
<description summary="all information about the workspace groups has been sent">
|
||||
This event is sent after all changes in all workspace groups have been
|
||||
sent.
|
||||
|
||||
This allows changes to one or more zcosmic_workspace_group_handle_v1
|
||||
properties and zcosmic_workspace_handle_v1 properties to be seen as atomic,
|
||||
even if they happen via multiple events.
|
||||
In particular, an output moving from one workspace group to
|
||||
another sends an output_enter event and an output_leave event to the two
|
||||
zcosmic_workspace_group_handle_v1 objects in question. The compositor sends
|
||||
the done event only after updating the output information in both
|
||||
workspace groups.
|
||||
</description>
|
||||
</event>
|
||||
|
||||
<event name="finished">
|
||||
<description summary="the compositor has finished with the workspace_manager">
|
||||
This event indicates that the compositor is done sending events to the
|
||||
zcosmic_workspace_manager_v1. The server will destroy the object
|
||||
immediately after sending this request, so it will become invalid and
|
||||
the client should free any resources associated with it.
|
||||
</description>
|
||||
</event>
|
||||
|
||||
<request name="stop">
|
||||
<description summary="stop sending events">
|
||||
Indicates the client no longer wishes to receive events for new
|
||||
workspace groups. However the compositor may emit further workspace
|
||||
events, until the finished event is emitted.
|
||||
|
||||
The client must not send any more requests after this one.
|
||||
</description>
|
||||
</request>
|
||||
</interface>
|
||||
|
||||
<interface name="zcosmic_workspace_group_handle_v1" version="1">
|
||||
<description summary="a workspace group assigned to a set of outputs">
|
||||
A zcosmic_workspace_group_handle_v1 object represents a a workspace group
|
||||
that is assigned a set of outputs and contains a number of workspaces.
|
||||
|
||||
The set of outputs assigned to the workspace group is conveyed to the client via
|
||||
output_enter and output_leave events, and its workspaces are conveyed with
|
||||
workspace events.
|
||||
|
||||
For example, a compositor which has a set of workspaces for each output may
|
||||
advertise a workspace group (and its workspaces) per output, whereas a compositor
|
||||
where a workspace spans all outputs may advertise a single workspace group for all
|
||||
outputs.
|
||||
</description>
|
||||
|
||||
<enum name="zcosmic_workspace_group_capabilities_v1">
|
||||
<entry name="create_workspace" value="1" summary="create_workspace request is available"/>
|
||||
</enum>
|
||||
|
||||
<event name="capabilities">
|
||||
<description summary="compositor capabilities">
|
||||
This event advertises the capabilities supported by the compositor. If
|
||||
a capability isn't supported, clients should hide or disable the UI
|
||||
elements that expose this functionality. For instance, if the
|
||||
compositor doesn't advertise support for creating workspaces, a button
|
||||
triggering the create_workspace request should not be displayed.
|
||||
|
||||
The compositor will ignore requests it doesn't support. For instance,
|
||||
a compositor which doesn't advertise support for creating workspaces will ignore
|
||||
create_workspace requests.
|
||||
|
||||
Compositors must send this event once after creation of an
|
||||
zcosmic_workspace_group_handle_v1 . When the capabilities change, compositors
|
||||
must send this event again.
|
||||
|
||||
The capabilities are sent as an array of 32-bit unsigned integers in
|
||||
native endianness.
|
||||
</description>
|
||||
<arg name="capabilities" type="array" summary="array of 32-bit capabilities"/>
|
||||
</event>
|
||||
|
||||
<event name="output_enter">
|
||||
<description summary="output assigned to workspace group">
|
||||
This event is emitted whenever an output is assigned to the workspace
|
||||
group.
|
||||
</description>
|
||||
<arg name="output" type="object" interface="wl_output"/>
|
||||
</event>
|
||||
|
||||
<event name="output_leave">
|
||||
<description summary="output removed from workspace group">
|
||||
This event is emitted whenever an output is removed from the workspace
|
||||
group.
|
||||
</description>
|
||||
<arg name="output" type="object" interface="wl_output"/>
|
||||
</event>
|
||||
|
||||
<event name="workspace">
|
||||
<description summary="workspace added to workspace group">
|
||||
This event is emitted whenever a new workspace has been created.
|
||||
A workspace can only be a member of a single workspace group and cannot
|
||||
be re-assigned.
|
||||
|
||||
All initial details of the workspace (name, coordinates, state) will
|
||||
be sent immediately after this event via the corresponding events in
|
||||
zcosmic_workspace_handle_v1.
|
||||
</description>
|
||||
<arg name="workspace" type="new_id" interface="zcosmic_workspace_handle_v1"/>
|
||||
</event>
|
||||
|
||||
<event name="remove">
|
||||
<description summary="this workspace group has been destroyed">
|
||||
This event means the zcosmic_workspace_group_handle_v1 has been destroyed.
|
||||
It is guaranteed there won't be any more events for this
|
||||
zcosmic_workspace_group_handle_v1. The zext_workspace_group_handle_v1 becomes
|
||||
inert so any requests will be ignored except the destroy request.
|
||||
|
||||
The compositor must remove all workspaces belonging to a workspace group
|
||||
before removing the workspace group.
|
||||
</description>
|
||||
</event>
|
||||
|
||||
<request name="create_workspace">
|
||||
<description summary="create a new workspace">
|
||||
Request that the compositor create a new workspace with the given name.
|
||||
|
||||
There is no guarantee that the compositor will create a new workspace,
|
||||
or that the created workspace will have the provided name.
|
||||
</description>
|
||||
<arg name="workspace" type="string"/>
|
||||
</request>
|
||||
|
||||
<request name="destroy" type="destructor">
|
||||
<description summary="destroy the zcosmic_workspace_group_handle_v1 object">
|
||||
Destroys the zcosmic_workspace_group_handle_v1 object.
|
||||
|
||||
This request should be called either when the client does not want to
|
||||
use the workspace object any more or after the remove event to finalize
|
||||
the destruction of the object.
|
||||
</description>
|
||||
</request>
|
||||
</interface>
|
||||
|
||||
<interface name="zcosmic_workspace_handle_v1" version="1">
|
||||
<description summary="a workspace handing a group of surfaces">
|
||||
A zcosmic_workspace_handle_v1 object represents a a workspace that handles a
|
||||
group of surfaces.
|
||||
|
||||
Each workspace has a name, conveyed to the client with the name event; a
|
||||
list of states, conveyed to the client with the state event; and
|
||||
optionally a set of coordinates, conveyed to the client with the
|
||||
coordinates event. The client may request that the compositor activate or
|
||||
deactivate the workspace.
|
||||
|
||||
Each workspace can belong to only a single workspace group.
|
||||
Depepending on the compositor policy, there might be workspaces with
|
||||
the same name in different workspace groups, but these workspaces are still
|
||||
separate (e.g. one of them might be active while the other is not).
|
||||
</description>
|
||||
|
||||
<event name="name">
|
||||
<description summary="workspace name changed">
|
||||
This event is emitted immediately after the zcosmic_workspace_handle_v1 is
|
||||
created and whenever the name of the workspace changes.
|
||||
</description>
|
||||
<arg name="name" type="string"/>
|
||||
</event>
|
||||
|
||||
<event name="coordinates">
|
||||
<description summary="workspace coordinates changed">
|
||||
This event is used to organize workspaces into an N-dimensional grid
|
||||
within a workspace group, and if supported, is emitted immediately after
|
||||
the zcosmic_workspace_handle_v1 is created and whenever the coordinates of
|
||||
the workspace change. Compositors may not send this event if they do not
|
||||
conceptually arrange workspaces in this way. If compositors simply
|
||||
number workspaces, without any geometric interpretation, they may send
|
||||
1D coordinates, which clients should not interpret as implying any
|
||||
geometry. Sending an empty array means that the compositor no longer
|
||||
orders the workspace geometrically.
|
||||
|
||||
Coordinates have an arbitrary number of dimensions N with an uint32
|
||||
position along each dimension. By convention if N > 1, the first
|
||||
dimension is X, the second Y, the third Z, and so on. The compositor may
|
||||
chose to utilize these events for a more novel workspace layout
|
||||
convention, however. No guarantee is made about the grid being filled or
|
||||
bounded; there may be a workspace at coordinate 1 and another at
|
||||
coordinate 1000 and none in between. Within a workspace group, however,
|
||||
workspaces must have unique coordinates of equal dimensionality.
|
||||
</description>
|
||||
<arg name="coordinates" type="array"/>
|
||||
</event>
|
||||
|
||||
<event name="state">
|
||||
<description summary="the state of the workspace changed">
|
||||
This event is emitted immediately after the zcosmic_workspace_handle_v1 is
|
||||
created and each time the workspace state changes, either because of a
|
||||
compositor action or because of a request in this protocol.
|
||||
</description>
|
||||
<arg name="state" type="array"/>
|
||||
</event>
|
||||
|
||||
<enum name="state">
|
||||
<description summary="types of states on the workspace">
|
||||
The different states that a workspace can have.
|
||||
</description>
|
||||
|
||||
<entry name="active" value="0" summary="the workspace is active"/>
|
||||
<entry name="urgent" value="1" summary="the workspace requests attention"/>
|
||||
<entry name="hidden" value="2">
|
||||
<description summary="the workspace is not visible">
|
||||
The workspace is not visible in its workspace group, and clients
|
||||
attempting to visualize the compositor workspace state should not
|
||||
display such workspaces.
|
||||
</description>
|
||||
</entry>
|
||||
</enum>
|
||||
|
||||
<enum name="zcosmic_workspace_capabilities_v1">
|
||||
<entry name="activate" value="1" summary="activate request is available"/>
|
||||
<entry name="deactivate" value="2" summary="deactivate request is available"/>
|
||||
<entry name="remove" value="3" summary="remove request is available"/>
|
||||
</enum>
|
||||
|
||||
<event name="capabilities">
|
||||
<description summary="compositor capabilities">
|
||||
This event advertises the capabilities supported by the compositor. If
|
||||
a capability isn't supported, clients should hide or disable the UI
|
||||
elements that expose this functionality. For instance, if the
|
||||
compositor doesn't advertise support for removing workspaces, a button
|
||||
triggering the remove request should not be displayed.
|
||||
|
||||
The compositor will ignore requests it doesn't support. For instance,
|
||||
a compositor which doesn't advertise support for remove will ignore
|
||||
remove requests.
|
||||
|
||||
Compositors must send this event once after creation of an
|
||||
zcosmic_workspace_handle_v1 . When the capabilities change, compositors
|
||||
must send this event again.
|
||||
|
||||
The capabilities are sent as an array of 32-bit unsigned integers in
|
||||
native endianness.
|
||||
</description>
|
||||
<arg name="capabilities" type="array" summary="array of 32-bit capabilities"/>
|
||||
</event>
|
||||
|
||||
<event name="remove">
|
||||
<description summary="this workspace has been destroyed">
|
||||
This event means the zcosmic_workspace_handle_v1 has been destroyed. It is
|
||||
guaranteed there won't be any more events for this
|
||||
zcosmic_workspace_handle_v1. The zext_workspace_handle_v1 becomes inert so
|
||||
any requests will be ignored except the destroy request.
|
||||
</description>
|
||||
</event>
|
||||
|
||||
<request name="destroy" type="destructor">
|
||||
<description summary="destroy the zcosmic_workspace_handle_v1 object">
|
||||
Destroys the zcosmic_workspace_handle_v1 object.
|
||||
|
||||
This request should be called either when the client does not want to
|
||||
use the workspace object any more or after the remove event to finalize
|
||||
the destruction of the object.
|
||||
</description>
|
||||
</request>
|
||||
|
||||
<request name="activate">
|
||||
<description summary="activate the workspace">
|
||||
Request that this workspace be activated.
|
||||
|
||||
There is no guarantee the workspace will be actually activated, and
|
||||
behaviour may be compositor-dependent. For example, activating a
|
||||
workspace may or may not deactivate all other workspaces in the same
|
||||
group.
|
||||
</description>
|
||||
</request>
|
||||
|
||||
<request name="deactivate">
|
||||
<description summary="activate the workspace">
|
||||
Request that this workspace be deactivated.
|
||||
|
||||
There is no guarantee the workspace will be actually deactivated.
|
||||
</description>
|
||||
</request>
|
||||
|
||||
<request name="remove">
|
||||
<description summary="remove the workspace">
|
||||
Request that this workspace be removed.
|
||||
|
||||
There is no guarantee the workspace will be actually removed.
|
||||
</description>
|
||||
</request>
|
||||
</interface>
|
||||
</protocol>
|
||||
|
|
@ -16,11 +16,12 @@ wayland_scanner_server = generator(
|
|||
server_protocols = [
|
||||
wl_protocol_dir / 'stable/xdg-shell/xdg-shell.xml',
|
||||
wl_protocol_dir / 'unstable/pointer-constraints/pointer-constraints-unstable-v1.xml',
|
||||
wl_protocol_dir / 'unstable/tablet/tablet-unstable-v2.xml',
|
||||
wl_protocol_dir / 'stable/tablet/tablet-v2.xml',
|
||||
wl_protocol_dir / 'staging/cursor-shape/cursor-shape-v1.xml',
|
||||
wl_protocol_dir / 'staging/drm-lease/drm-lease-v1.xml',
|
||||
wl_protocol_dir / 'staging/xwayland-shell/xwayland-shell-v1.xml',
|
||||
wl_protocol_dir / 'staging/tearing-control/tearing-control-v1.xml',
|
||||
'cosmic-workspace-unstable-v1.xml',
|
||||
'wlr-layer-shell-unstable-v1.xml',
|
||||
'wlr-input-inhibitor-unstable-v1.xml',
|
||||
'wlr-output-power-management-unstable-v1.xml',
|
||||
|
|
|
|||
|
|
@ -19,14 +19,10 @@ run_checks () {
|
|||
return $?
|
||||
fi
|
||||
|
||||
find src/ include/ \( -name "*.c" -o -name "*.h" \) -type f |
|
||||
{
|
||||
errors=0
|
||||
while IFS= read -r file; do
|
||||
run_checkpatch "$file" || errors=1
|
||||
done
|
||||
return ${errors}
|
||||
}
|
||||
find src/ include/ \( -name "*.c" -o -name "*.h" \) -type f -print0 |
|
||||
nice xargs -0 --max-args 1 --max-procs $(nproc) \
|
||||
scripts/checkpatch.pl --terse --no-tree --strict --file
|
||||
return $?
|
||||
}
|
||||
|
||||
main () {
|
||||
|
|
|
|||
2
scripts/checkpatch.pl
vendored
2
scripts/checkpatch.pl
vendored
|
|
@ -5657,7 +5657,7 @@ sub process {
|
|||
#labwc-custom check to ignore some pango/libxml2/etc CamelCase variants
|
||||
$var !~ /^(?:_?Pango\w+)/ &&
|
||||
$var !~ /^(?:xml\w+)/ &&
|
||||
$var !~ /^(?:GString|GError)/ &&
|
||||
$var !~ /^(?:GString|GError|GHashTable)/ &&
|
||||
$var !~ /^(?:RsvgRectangle|RsvgHandle)/ &&
|
||||
$var !~ /^(?:XKB_KEY_XF86Switch_VT_1)/ &&
|
||||
|
||||
|
|
|
|||
290
src/action.c
290
src/action.c
|
|
@ -19,7 +19,6 @@
|
|||
#include "menu/menu.h"
|
||||
#include "osd.h"
|
||||
#include "output-virtual.h"
|
||||
#include "placement.h"
|
||||
#include "regions.h"
|
||||
#include "ssd.h"
|
||||
#include "view.h"
|
||||
|
|
@ -70,6 +69,7 @@ enum action_type {
|
|||
ACTION_TYPE_EXECUTE,
|
||||
ACTION_TYPE_EXIT,
|
||||
ACTION_TYPE_MOVE_TO_EDGE,
|
||||
ACTION_TYPE_TOGGLE_SNAP_TO_EDGE,
|
||||
ACTION_TYPE_SNAP_TO_EDGE,
|
||||
ACTION_TYPE_GROW_TO_EDGE,
|
||||
ACTION_TYPE_SHRINK_TO_EDGE,
|
||||
|
|
@ -100,7 +100,9 @@ enum action_type {
|
|||
ACTION_TYPE_MOVE_RELATIVE,
|
||||
ACTION_TYPE_SEND_TO_DESKTOP,
|
||||
ACTION_TYPE_GO_TO_DESKTOP,
|
||||
ACTION_TYPE_TOGGLE_SNAP_TO_REGION,
|
||||
ACTION_TYPE_SNAP_TO_REGION,
|
||||
ACTION_TYPE_UNSNAP,
|
||||
ACTION_TYPE_TOGGLE_KEYBINDS,
|
||||
ACTION_TYPE_FOCUS_OUTPUT,
|
||||
ACTION_TYPE_MOVE_TO_OUTPUT,
|
||||
|
|
@ -114,6 +116,9 @@ enum action_type {
|
|||
ACTION_TYPE_SHADE,
|
||||
ACTION_TYPE_UNSHADE,
|
||||
ACTION_TYPE_TOGGLE_SHADE,
|
||||
ACTION_TYPE_ENABLE_TABLET_MOUSE_EMULATION,
|
||||
ACTION_TYPE_DISABLE_TABLET_MOUSE_EMULATION,
|
||||
ACTION_TYPE_TOGGLE_TABLET_MOUSE_EMULATION,
|
||||
ACTION_TYPE_TOGGLE_MAGNIFY,
|
||||
ACTION_TYPE_ZOOM_IN,
|
||||
ACTION_TYPE_ZOOM_OUT
|
||||
|
|
@ -128,6 +133,7 @@ const char *action_names[] = {
|
|||
"Execute",
|
||||
"Exit",
|
||||
"MoveToEdge",
|
||||
"ToggleSnapToEdge",
|
||||
"SnapToEdge",
|
||||
"GrowToEdge",
|
||||
"ShrinkToEdge",
|
||||
|
|
@ -158,7 +164,9 @@ const char *action_names[] = {
|
|||
"MoveRelative",
|
||||
"SendToDesktop",
|
||||
"GoToDesktop",
|
||||
"ToggleSnapToRegion",
|
||||
"SnapToRegion",
|
||||
"UnSnap",
|
||||
"ToggleKeybinds",
|
||||
"FocusOutput",
|
||||
"MoveToOutput",
|
||||
|
|
@ -172,6 +180,9 @@ const char *action_names[] = {
|
|||
"Shade",
|
||||
"Unshade",
|
||||
"ToggleShade",
|
||||
"EnableTabletMouseEmulation",
|
||||
"DisableTabletMouseEmulation",
|
||||
"ToggleTabletMouseEmulation",
|
||||
"ToggleMagnify",
|
||||
"ZoomIn",
|
||||
"ZoomOut",
|
||||
|
|
@ -314,12 +325,15 @@ action_arg_from_xml_node(struct action *action, const char *nodename, const char
|
|||
goto cleanup;
|
||||
}
|
||||
/* Falls through */
|
||||
case ACTION_TYPE_TOGGLE_SNAP_TO_EDGE:
|
||||
case ACTION_TYPE_SNAP_TO_EDGE:
|
||||
case ACTION_TYPE_GROW_TO_EDGE:
|
||||
case ACTION_TYPE_SHRINK_TO_EDGE:
|
||||
if (!strcmp(argument, "direction")) {
|
||||
enum view_edge edge = view_edge_parse(content);
|
||||
if ((edge == VIEW_EDGE_CENTER && action->type != ACTION_TYPE_SNAP_TO_EDGE)
|
||||
bool allow_center = action->type == ACTION_TYPE_TOGGLE_SNAP_TO_EDGE
|
||||
|| action->type == ACTION_TYPE_SNAP_TO_EDGE;
|
||||
if ((edge == VIEW_EDGE_CENTER && !allow_center)
|
||||
|| edge == VIEW_EDGE_INVALID) {
|
||||
wlr_log(WLR_ERROR, "Invalid argument for action %s: '%s' (%s)",
|
||||
action_names[action->type], argument, content);
|
||||
|
|
@ -338,6 +352,14 @@ action_arg_from_xml_node(struct action *action, const char *nodename, const char
|
|||
action_arg_add_bool(action, argument, parse_bool(content, true));
|
||||
goto cleanup;
|
||||
}
|
||||
if (!strcasecmp(argument, "x.position")) {
|
||||
action_arg_add_str(action, argument, content);
|
||||
goto cleanup;
|
||||
}
|
||||
if (!strcasecmp(argument, "y.position")) {
|
||||
action_arg_add_str(action, argument, content);
|
||||
goto cleanup;
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_MAXIMIZE:
|
||||
case ACTION_TYPE_MAXIMIZE:
|
||||
|
|
@ -400,6 +422,7 @@ action_arg_from_xml_node(struct action *action, const char *nodename, const char
|
|||
goto cleanup;
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_SNAP_TO_REGION:
|
||||
case ACTION_TYPE_SNAP_TO_REGION:
|
||||
if (!strcmp(argument, "region")) {
|
||||
action_arg_add_str(action, argument, content);
|
||||
|
|
@ -407,11 +430,6 @@ action_arg_from_xml_node(struct action *action, const char *nodename, const char
|
|||
}
|
||||
break;
|
||||
case ACTION_TYPE_FOCUS_OUTPUT:
|
||||
if (!strcmp(argument, "output")) {
|
||||
action_arg_add_str(action, argument, content);
|
||||
goto cleanup;
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_MOVE_TO_OUTPUT:
|
||||
if (!strcmp(argument, "output")) {
|
||||
action_arg_add_str(action, argument, content);
|
||||
|
|
@ -530,6 +548,7 @@ action_is_valid(struct action *action)
|
|||
arg_name = "command";
|
||||
break;
|
||||
case ACTION_TYPE_MOVE_TO_EDGE:
|
||||
case ACTION_TYPE_TOGGLE_SNAP_TO_EDGE:
|
||||
case ACTION_TYPE_SNAP_TO_EDGE:
|
||||
case ACTION_TYPE_GROW_TO_EDGE:
|
||||
case ACTION_TYPE_SHRINK_TO_EDGE:
|
||||
|
|
@ -543,12 +562,10 @@ action_is_valid(struct action *action)
|
|||
case ACTION_TYPE_SEND_TO_DESKTOP:
|
||||
arg_name = "to";
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_SNAP_TO_REGION:
|
||||
case ACTION_TYPE_SNAP_TO_REGION:
|
||||
arg_name = "region";
|
||||
break;
|
||||
case ACTION_TYPE_FOCUS_OUTPUT:
|
||||
arg_name = "output";
|
||||
break;
|
||||
case ACTION_TYPE_IF:
|
||||
case ACTION_TYPE_FOR_EACH:
|
||||
; /* works around "a label can only be part of a statement" */
|
||||
|
|
@ -613,8 +630,9 @@ action_list_free(struct wl_list *action_list)
|
|||
}
|
||||
|
||||
static void
|
||||
show_menu(struct server *server, struct view *view,
|
||||
const char *menu_name, bool at_cursor)
|
||||
show_menu(struct server *server, struct view *view, struct cursor_context *ctx,
|
||||
const char *menu_name, bool at_cursor,
|
||||
const char *pos_x, const char *pos_y)
|
||||
{
|
||||
if (server->input_mode != LAB_INPUT_STATE_PASSTHROUGH
|
||||
&& server->input_mode != LAB_INPUT_STATE_MENU) {
|
||||
|
|
@ -627,18 +645,88 @@ show_menu(struct server *server, struct view *view,
|
|||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* We always refresh client-list-combined-menu and client-send-to-menu
|
||||
* so that they are up-to-date whether they are directly opened as a
|
||||
* top-level menu or opened as a submenu which we don't know at this
|
||||
* point. It is also needed to calculate the proper width for placement
|
||||
* as it fluctuates depending on application/workspace titles.
|
||||
*/
|
||||
update_client_list_combined_menu(menu->server);
|
||||
update_client_send_to_menu(menu->server);
|
||||
|
||||
int x = server->seat.cursor->x;
|
||||
int y = server->seat.cursor->y;
|
||||
|
||||
/* The client menu needs an active client */
|
||||
if (!view && strcasecmp(menu_name, "client-menu") == 0) {
|
||||
bool is_client_menu = !strcasecmp(menu_name, "client-menu");
|
||||
if (is_client_menu && !view) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Place menu in the view corner if desired (and menu is not root-menu) */
|
||||
if (!at_cursor && view) {
|
||||
x = view->current.x;
|
||||
y = view->current.y;
|
||||
/* Push the client menu underneath the button */
|
||||
if (is_client_menu && ssd_part_contains(
|
||||
LAB_SSD_BUTTON, ctx->type)) {
|
||||
assert(ctx->node);
|
||||
int ly;
|
||||
wlr_scene_node_coords(ctx->node, &x, &ly);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* determine placement by looking at x and y
|
||||
* x/y can be number, "center" or a %percent of screen dimensions
|
||||
*/
|
||||
if (pos_x && pos_y) {
|
||||
struct output *output = output_nearest_to(server,
|
||||
server->seat.cursor->x, server->seat.cursor->y);
|
||||
struct menuitem *item;
|
||||
struct theme *theme = server->theme;
|
||||
int max_width = theme->menu_min_width;
|
||||
|
||||
wl_list_for_each(item, &menu->menuitems, link) {
|
||||
if (item->native_width > max_width) {
|
||||
max_width = item->native_width < theme->menu_max_width
|
||||
? item->native_width : theme->menu_max_width;
|
||||
}
|
||||
}
|
||||
|
||||
if (!strcasecmp(pos_x, "center")) {
|
||||
x = (output->usable_area.width / 2) - (max_width / 2);
|
||||
} else if (strchr(pos_x, '%')) {
|
||||
x = (output->usable_area.width * atoi(pos_x)) / 100;
|
||||
} else {
|
||||
if (pos_x[0] == '-') {
|
||||
int neg_x = strtol(pos_x, NULL, 10);
|
||||
x = output->usable_area.width + neg_x;
|
||||
} else {
|
||||
x = atoi(pos_x);
|
||||
}
|
||||
}
|
||||
|
||||
if (!strcasecmp(pos_y, "center")) {
|
||||
y = (output->usable_area.height / 2) - (menu->size.height / 2);
|
||||
} else if (strchr(pos_y, '%')) {
|
||||
y = (output->usable_area.height * atoi(pos_y)) / 100;
|
||||
} else {
|
||||
if (pos_y[0] == '-') {
|
||||
int neg_y = strtol(pos_y, NULL, 10);
|
||||
y = output->usable_area.height + neg_y;
|
||||
} else {
|
||||
y = atoi(pos_y);
|
||||
}
|
||||
}
|
||||
/* keep menu from being off screen */
|
||||
x = MAX(x, 0);
|
||||
x = MIN(x, (output->usable_area.width -1));
|
||||
y = MAX(y, 0);
|
||||
y = MIN(y, (output->usable_area.height -1));
|
||||
/* adjust for which monitor to appear on */
|
||||
x += output->usable_area.x;
|
||||
y += output->usable_area.y;
|
||||
}
|
||||
|
||||
/* Replaced by next show_menu() or cleaned on view_destroy() */
|
||||
|
|
@ -648,7 +736,7 @@ show_menu(struct server *server, struct view *view,
|
|||
|
||||
static struct view *
|
||||
view_for_action(struct view *activator, struct server *server,
|
||||
struct action *action, uint32_t *resize_edges)
|
||||
struct action *action, struct cursor_context *ctx)
|
||||
{
|
||||
/* View is explicitly specified for mousebinds */
|
||||
if (activator) {
|
||||
|
|
@ -660,13 +748,8 @@ view_for_action(struct view *activator, struct server *server,
|
|||
case ACTION_TYPE_FOCUS:
|
||||
case ACTION_TYPE_MOVE:
|
||||
case ACTION_TYPE_RESIZE: {
|
||||
struct cursor_context ctx = get_cursor_context(server);
|
||||
if (action->type == ACTION_TYPE_RESIZE) {
|
||||
/* Select resize edges for the keybind case */
|
||||
*resize_edges = cursor_get_resize_edges(
|
||||
server->seat.cursor, &ctx);
|
||||
}
|
||||
return ctx.view;
|
||||
*ctx = get_cursor_context(server);
|
||||
return ctx->view;
|
||||
}
|
||||
default:
|
||||
return server->active_view;
|
||||
|
|
@ -694,14 +777,57 @@ run_if_action(struct view *view, struct server *server, struct action *action)
|
|||
|
||||
actions = action_get_actionlist(action, branch);
|
||||
if (actions) {
|
||||
actions_run(view, server, actions, 0);
|
||||
actions_run(view, server, actions, NULL);
|
||||
}
|
||||
return !strcmp(branch, "then");
|
||||
}
|
||||
|
||||
static bool
|
||||
shift_is_pressed(struct server *server)
|
||||
{
|
||||
uint32_t modifiers = wlr_keyboard_get_modifiers(
|
||||
&server->seat.keyboard_group->keyboard);
|
||||
return modifiers & WLR_MODIFIER_SHIFT;
|
||||
}
|
||||
|
||||
static void
|
||||
start_window_cycling(struct server *server, enum lab_cycle_dir direction)
|
||||
{
|
||||
/* Remember direction so it can be followed by subsequent key presses */
|
||||
server->osd_state.initial_direction = direction;
|
||||
server->osd_state.initial_keybind_contained_shift =
|
||||
shift_is_pressed(server);
|
||||
server->osd_state.cycle_view = desktop_cycle_view(server,
|
||||
server->osd_state.cycle_view, direction);
|
||||
osd_update(server);
|
||||
}
|
||||
|
||||
static struct output *
|
||||
get_target_output(struct output *output, struct server *server,
|
||||
struct action *action)
|
||||
{
|
||||
const char *output_name = action_get_str(action, "output", NULL);
|
||||
struct output *target = NULL;
|
||||
|
||||
if (output_name) {
|
||||
target = output_from_name(server, output_name);
|
||||
} else {
|
||||
enum view_edge edge =
|
||||
action_get_int(action, "direction", VIEW_EDGE_INVALID);
|
||||
bool wrap = action_get_bool(action, "wrap", false);
|
||||
target = output_get_adjacent(output, edge, wrap);
|
||||
}
|
||||
|
||||
if (!target) {
|
||||
wlr_log(WLR_DEBUG, "Invalid output");
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
void
|
||||
actions_run(struct view *activator, struct server *server,
|
||||
struct wl_list *actions, uint32_t resize_edges)
|
||||
struct wl_list *actions, struct cursor_context *cursor_ctx)
|
||||
{
|
||||
if (!actions) {
|
||||
wlr_log(WLR_ERROR, "empty actions");
|
||||
|
|
@ -713,6 +839,13 @@ actions_run(struct view *activator, struct server *server,
|
|||
|
||||
struct view *view;
|
||||
struct action *action;
|
||||
struct output *output;
|
||||
struct output *target;
|
||||
struct cursor_context ctx = {0};
|
||||
if (cursor_ctx) {
|
||||
ctx = *cursor_ctx;
|
||||
}
|
||||
|
||||
wl_list_for_each(action, actions, link) {
|
||||
wlr_log(WLR_DEBUG, "Handling action %u: %s", action->type,
|
||||
action_names[action->type]);
|
||||
|
|
@ -721,8 +854,7 @@ actions_run(struct view *activator, struct server *server,
|
|||
* Refetch view because it may have been changed due to the
|
||||
* previous action
|
||||
*/
|
||||
view = view_for_action(activator, server, action,
|
||||
&resize_edges);
|
||||
view = view_for_action(activator, server, action, &ctx);
|
||||
|
||||
switch (action->type) {
|
||||
case ACTION_TYPE_CLOSE:
|
||||
|
|
@ -765,10 +897,20 @@ actions_run(struct view *activator, struct server *server,
|
|||
view_move_to_edge(view, edge, snap_to_windows);
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_SNAP_TO_EDGE:
|
||||
case ACTION_TYPE_SNAP_TO_EDGE:
|
||||
if (view) {
|
||||
/* Config parsing makes sure that direction is a valid direction */
|
||||
enum view_edge edge = action_get_int(action, "direction", 0);
|
||||
if (action->type == ACTION_TYPE_TOGGLE_SNAP_TO_EDGE
|
||||
&& view->maximized == VIEW_AXIS_NONE
|
||||
&& !view->fullscreen
|
||||
&& view_is_tiled(view)
|
||||
&& view->tiled == edge) {
|
||||
view_set_untiled(view);
|
||||
view_apply_natural_geometry(view);
|
||||
break;
|
||||
}
|
||||
view_snap_to_edge(view, edge,
|
||||
/*across_outputs*/ true,
|
||||
/*store_natural_geometry*/ true);
|
||||
|
|
@ -789,22 +931,20 @@ actions_run(struct view *activator, struct server *server,
|
|||
}
|
||||
break;
|
||||
case ACTION_TYPE_NEXT_WINDOW:
|
||||
server->osd_state.cycle_view = desktop_cycle_view(server,
|
||||
server->osd_state.cycle_view, LAB_CYCLE_DIR_FORWARD);
|
||||
osd_update(server);
|
||||
start_window_cycling(server, LAB_CYCLE_DIR_FORWARD);
|
||||
break;
|
||||
case ACTION_TYPE_PREVIOUS_WINDOW:
|
||||
server->osd_state.cycle_view = desktop_cycle_view(server,
|
||||
server->osd_state.cycle_view, LAB_CYCLE_DIR_BACKWARD);
|
||||
osd_update(server);
|
||||
start_window_cycling(server, LAB_CYCLE_DIR_BACKWARD);
|
||||
break;
|
||||
case ACTION_TYPE_RECONFIGURE:
|
||||
kill(getpid(), SIGHUP);
|
||||
break;
|
||||
case ACTION_TYPE_SHOW_MENU:
|
||||
show_menu(server, view,
|
||||
show_menu(server, view, &ctx,
|
||||
action_get_str(action, "menu", NULL),
|
||||
action_get_bool(action, "atCursor", true));
|
||||
action_get_bool(action, "atCursor", true),
|
||||
action_get_str(action, "x.position", NULL),
|
||||
action_get_str(action, "y.position", NULL));
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_MAXIMIZE:
|
||||
if (view) {
|
||||
|
|
@ -893,6 +1033,8 @@ actions_run(struct view *activator, struct server *server,
|
|||
break;
|
||||
case ACTION_TYPE_RESIZE:
|
||||
if (view) {
|
||||
uint32_t resize_edges = cursor_get_resize_edges(
|
||||
server->seat.cursor, &ctx);
|
||||
interactive_begin(view, LAB_INPUT_STATE_RESIZE,
|
||||
resize_edges);
|
||||
}
|
||||
|
|
@ -964,7 +1106,7 @@ actions_run(struct view *activator, struct server *server,
|
|||
* a required argument for both SendToDesktop and GoToDesktop.
|
||||
*/
|
||||
struct workspace *target = workspaces_find(
|
||||
server->workspace_current, to, wrap);
|
||||
server->workspaces.current, to, wrap);
|
||||
if (!target) {
|
||||
break;
|
||||
}
|
||||
|
|
@ -987,25 +1129,10 @@ actions_run(struct view *activator, struct server *server,
|
|||
if (!view) {
|
||||
break;
|
||||
}
|
||||
const char *output_name = action_get_str(action, "output", NULL);
|
||||
struct output *target = NULL;
|
||||
if (output_name) {
|
||||
target = output_from_name(view->server, output_name);
|
||||
} else {
|
||||
enum view_edge edge = action_get_int(action, "direction", 0);
|
||||
bool wrap = action_get_bool(action, "wrap", false);
|
||||
target = view_get_adjacent_output(view, edge, wrap);
|
||||
target = get_target_output(view->output, server, action);
|
||||
if (target) {
|
||||
view_move_to_output(view, target);
|
||||
}
|
||||
if (!target) {
|
||||
/*
|
||||
* Most likely because we're already on the
|
||||
* output furthest in the requested direction
|
||||
* or the output or direction was invalid.
|
||||
*/
|
||||
wlr_log(WLR_DEBUG, "Invalid output");
|
||||
break;
|
||||
}
|
||||
view_move_to_output(view, target);
|
||||
break;
|
||||
case ACTION_TYPE_FIT_TO_OUTPUT:
|
||||
if (!view) {
|
||||
|
|
@ -1013,32 +1140,51 @@ actions_run(struct view *activator, struct server *server,
|
|||
}
|
||||
view_constrain_size_to_that_of_usable_area(view);
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_SNAP_TO_REGION:
|
||||
case ACTION_TYPE_SNAP_TO_REGION:
|
||||
if (!view) {
|
||||
break;
|
||||
}
|
||||
struct output *output = view->output;
|
||||
output = view->output;
|
||||
if (!output) {
|
||||
break;
|
||||
}
|
||||
const char *region_name = action_get_str(action, "region", NULL);
|
||||
struct region *region = regions_from_name(region_name, output);
|
||||
if (region) {
|
||||
if (action->type == ACTION_TYPE_TOGGLE_SNAP_TO_REGION
|
||||
&& view->maximized == VIEW_AXIS_NONE
|
||||
&& !view->fullscreen
|
||||
&& view_is_tiled(view)
|
||||
&& view->tiled_region == region) {
|
||||
view_set_untiled(view);
|
||||
view_apply_natural_geometry(view);
|
||||
break;
|
||||
}
|
||||
view_snap_to_region(view, region,
|
||||
/*store_natural_geometry*/ true);
|
||||
} else {
|
||||
wlr_log(WLR_ERROR, "Invalid SnapToRegion id: '%s'", region_name);
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_UNSNAP:
|
||||
if (view && !view->fullscreen && !view_is_floating(view)) {
|
||||
view_maximize(view, VIEW_AXIS_NONE,
|
||||
/* store_natural_geometry */ false);
|
||||
view_set_untiled(view);
|
||||
view_apply_natural_geometry(view);
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_KEYBINDS:
|
||||
if (view) {
|
||||
view_toggle_keybinds(view);
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_FOCUS_OUTPUT:
|
||||
{
|
||||
const char *output_name = action_get_str(action, "output", NULL);
|
||||
desktop_focus_output(output_from_name(server, output_name));
|
||||
output = output_nearest_to_cursor(server);
|
||||
target = get_target_output(output, server, action);
|
||||
if (target) {
|
||||
desktop_focus_output(target);
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_IF:
|
||||
|
|
@ -1061,7 +1207,7 @@ actions_run(struct view *activator, struct server *server,
|
|||
struct wl_list *actions;
|
||||
actions = action_get_actionlist(action, "none");
|
||||
if (actions) {
|
||||
actions_run(view, server, actions, 0);
|
||||
actions_run(view, server, actions, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1091,9 +1237,22 @@ actions_run(struct view *activator, struct server *server,
|
|||
break;
|
||||
case ACTION_TYPE_TOGGLE_TEARING:
|
||||
if (view) {
|
||||
view->tearing_hint = !view->tearing_hint;
|
||||
wlr_log(WLR_DEBUG, "tearing %sabled",
|
||||
view->tearing_hint ? "en" : "dis");
|
||||
switch (view->force_tearing) {
|
||||
case LAB_STATE_UNSPECIFIED:
|
||||
view->force_tearing =
|
||||
output_get_tearing_allowance(view->output)
|
||||
? LAB_STATE_DISABLED : LAB_STATE_ENABLED;
|
||||
break;
|
||||
case LAB_STATE_DISABLED:
|
||||
view->force_tearing = LAB_STATE_ENABLED;
|
||||
break;
|
||||
case LAB_STATE_ENABLED:
|
||||
view->force_tearing = LAB_STATE_DISABLED;
|
||||
break;
|
||||
}
|
||||
wlr_log(WLR_ERROR, "force tearing %sabled",
|
||||
view->force_tearing == LAB_STATE_ENABLED
|
||||
? "en" : "dis");
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_SHADE:
|
||||
|
|
@ -1111,6 +1270,15 @@ actions_run(struct view *activator, struct server *server,
|
|||
view_set_shade(view, false);
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_ENABLE_TABLET_MOUSE_EMULATION:
|
||||
rc.tablet.force_mouse_emulation = true;
|
||||
break;
|
||||
case ACTION_TYPE_DISABLE_TABLET_MOUSE_EMULATION:
|
||||
rc.tablet.force_mouse_emulation = false;
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_TABLET_MOUSE_EMULATION:
|
||||
rc.tablet.force_mouse_emulation = !rc.tablet.force_mouse_emulation;
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_MAGNIFY:
|
||||
magnify_toggle(server);
|
||||
break;
|
||||
|
|
|
|||
129
src/buffer.c
129
src/buffer.c
|
|
@ -29,6 +29,7 @@
|
|||
#include <drm_fourcc.h>
|
||||
#include <wlr/interfaces/wlr_buffer.h>
|
||||
#include "buffer.h"
|
||||
#include "common/box.h"
|
||||
#include "common/mem.h"
|
||||
|
||||
static const struct wlr_buffer_impl data_buffer_impl;
|
||||
|
|
@ -44,14 +45,12 @@ static void
|
|||
data_buffer_destroy(struct wlr_buffer *wlr_buffer)
|
||||
{
|
||||
struct lab_data_buffer *buffer = data_buffer_from_buffer(wlr_buffer);
|
||||
if (!buffer->free_on_destroy) {
|
||||
free(buffer);
|
||||
return;
|
||||
}
|
||||
if (buffer->cairo) {
|
||||
cairo_surface_t *surf = cairo_get_target(buffer->cairo);
|
||||
cairo_destroy(buffer->cairo);
|
||||
cairo_surface_destroy(surf);
|
||||
}
|
||||
if (buffer->surface) {
|
||||
/* this also frees buffer->data */
|
||||
cairo_surface_destroy(buffer->surface);
|
||||
} else if (buffer->data) {
|
||||
free(buffer->data);
|
||||
buffer->data = NULL;
|
||||
|
|
@ -85,19 +84,35 @@ static const struct wlr_buffer_impl data_buffer_impl = {
|
|||
};
|
||||
|
||||
struct lab_data_buffer *
|
||||
buffer_create_cairo(uint32_t width, uint32_t height, float scale,
|
||||
bool free_on_destroy)
|
||||
buffer_adopt_cairo_surface(cairo_surface_t *surface)
|
||||
{
|
||||
struct lab_data_buffer *buffer = znew(*buffer);
|
||||
buffer->unscaled_width = width;
|
||||
buffer->unscaled_height = height;
|
||||
width *= scale;
|
||||
height *= scale;
|
||||
assert(cairo_surface_get_type(surface) == CAIRO_SURFACE_TYPE_IMAGE);
|
||||
assert(cairo_image_surface_get_format(surface) == CAIRO_FORMAT_ARGB32);
|
||||
|
||||
/* Allocate the buffer with the scaled size */
|
||||
int width = cairo_image_surface_get_width(surface);
|
||||
int height = cairo_image_surface_get_height(surface);
|
||||
|
||||
struct lab_data_buffer *buffer = znew(*buffer);
|
||||
wlr_buffer_init(&buffer->base, &data_buffer_impl, width, height);
|
||||
cairo_surface_t *surf =
|
||||
cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
|
||||
|
||||
buffer->surface = surface;
|
||||
buffer->data = cairo_image_surface_get_data(buffer->surface);
|
||||
buffer->format = DRM_FORMAT_ARGB8888;
|
||||
buffer->stride = cairo_image_surface_get_stride(buffer->surface);
|
||||
buffer->logical_width = width;
|
||||
buffer->logical_height = height;
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
struct lab_data_buffer *
|
||||
buffer_create_cairo(uint32_t logical_width, uint32_t logical_height, float scale)
|
||||
{
|
||||
/* Create an image surface with the scaled size */
|
||||
cairo_surface_t *surface =
|
||||
cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
|
||||
lroundf(logical_width * scale),
|
||||
lroundf(logical_height * scale));
|
||||
|
||||
/**
|
||||
* Tell cairo about the device scale so we can keep drawing in unscaled
|
||||
|
|
@ -106,34 +121,82 @@ buffer_create_cairo(uint32_t width, uint32_t height, float scale,
|
|||
*
|
||||
* For a more complete explanation see PR #389
|
||||
*/
|
||||
cairo_surface_set_device_scale(surf, scale, scale);
|
||||
cairo_surface_set_device_scale(surface, scale, scale);
|
||||
|
||||
buffer->cairo = cairo_create(surf);
|
||||
buffer->data = cairo_image_surface_get_data(surf);
|
||||
buffer->format = DRM_FORMAT_ARGB8888;
|
||||
buffer->stride = cairo_image_surface_get_stride(surf);
|
||||
buffer->free_on_destroy = free_on_destroy;
|
||||
/*
|
||||
* Adopt the image surface into a buffer, set the correct
|
||||
* logical size, and create a cairo context for drawing
|
||||
*/
|
||||
struct lab_data_buffer *buffer = buffer_adopt_cairo_surface(surface);
|
||||
buffer->logical_width = logical_width;
|
||||
buffer->logical_height = logical_height;
|
||||
buffer->cairo = cairo_create(surface);
|
||||
|
||||
if (!buffer->data) {
|
||||
cairo_destroy(buffer->cairo);
|
||||
cairo_surface_destroy(surf);
|
||||
free(buffer);
|
||||
buffer = NULL;
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
struct lab_data_buffer *
|
||||
buffer_create_wrap(void *pixel_data, uint32_t width, uint32_t height,
|
||||
uint32_t stride, bool free_on_destroy)
|
||||
buffer_convert_cairo_surface_for_icon(cairo_surface_t *surface,
|
||||
uint32_t icon_size, float scale)
|
||||
{
|
||||
assert(cairo_surface_get_type(surface) == CAIRO_SURFACE_TYPE_IMAGE);
|
||||
|
||||
/*
|
||||
* Compute logical size for display and decide whether we can
|
||||
* use the image data directly (fast path). Requirements are:
|
||||
*
|
||||
* - The pixel format must be ARGB32.
|
||||
* - The image must not be so large as to need downsampling by
|
||||
* more than 2x when displayed at the target scale. wlr_scene
|
||||
* uses linear interpolation without pixel averaging, which
|
||||
* starts to skip samples if downsampling more than 2x,
|
||||
* resulting in a grainy look.
|
||||
*/
|
||||
int width = cairo_image_surface_get_width(surface);
|
||||
int height = cairo_image_surface_get_height(surface);
|
||||
struct wlr_box logical =
|
||||
box_fit_within(width, height, icon_size, icon_size);
|
||||
struct lab_data_buffer *buffer;
|
||||
|
||||
if (cairo_image_surface_get_format(surface) == CAIRO_FORMAT_ARGB32
|
||||
&& width <= 2 * logical.width * scale
|
||||
&& height <= 2 * logical.height * scale) {
|
||||
buffer = buffer_adopt_cairo_surface(surface);
|
||||
/* set logical size for display */
|
||||
buffer->logical_width = logical.width;
|
||||
buffer->logical_height = logical.height;
|
||||
} else {
|
||||
/* convert to ARGB32 and scale for display (slow path) */
|
||||
buffer = buffer_create_cairo(logical.width,
|
||||
logical.height, scale);
|
||||
|
||||
cairo_t *cairo = buffer->cairo;
|
||||
cairo_scale(cairo, (double)logical.width / width,
|
||||
(double)logical.height / height);
|
||||
cairo_set_source_surface(cairo, surface, 0, 0);
|
||||
cairo_pattern_set_filter(cairo_get_source(cairo),
|
||||
CAIRO_FILTER_GOOD);
|
||||
cairo_paint(cairo);
|
||||
|
||||
/* ensure pixel data is updated */
|
||||
cairo_surface_flush(buffer->surface);
|
||||
/* destroy original surface */
|
||||
cairo_surface_destroy(surface);
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
struct lab_data_buffer *
|
||||
buffer_create_from_data(void *pixel_data, uint32_t width, uint32_t height,
|
||||
uint32_t stride)
|
||||
{
|
||||
struct lab_data_buffer *buffer = znew(*buffer);
|
||||
wlr_buffer_init(&buffer->base, &data_buffer_impl, width, height);
|
||||
buffer->unscaled_width = width;
|
||||
buffer->unscaled_height = height;
|
||||
buffer->logical_width = width;
|
||||
buffer->logical_height = height;
|
||||
buffer->data = pixel_data;
|
||||
buffer->format = DRM_FORMAT_ARGB8888;
|
||||
buffer->stride = stride;
|
||||
buffer->free_on_destroy = free_on_destroy;
|
||||
return buffer;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,27 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "button/common.h"
|
||||
#include "common/dir.h"
|
||||
#include "config/rcxml.h"
|
||||
#include "labwc.h"
|
||||
|
||||
void
|
||||
button_filename(const char *name, char *buf, size_t len)
|
||||
{
|
||||
struct wl_list paths;
|
||||
paths_theme_create(&paths, rc.theme_name, name);
|
||||
|
||||
/*
|
||||
* You can't really merge buttons, so let's just iterate forwards
|
||||
* and stop on the first hit
|
||||
*/
|
||||
struct path *path;
|
||||
wl_list_for_each(path, &paths, link) {
|
||||
if (access(path->string, R_OK) == 0) {
|
||||
snprintf(buf, len, "%s", path->string);
|
||||
break;
|
||||
}
|
||||
}
|
||||
paths_destroy(&paths);
|
||||
}
|
||||
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