Git Product home page Git Product logo

labwc's Introduction

labwc

1. Project Description

1.1 What Is This?

Labwc stands for Lab Wayland Compositor, where lab can mean any of the following:

  • sense of experimentation and treading new ground
  • inspired by BunsenLabs and ArchLabs
  • your favorite pet

Labwc is a wlroots-based window-stacking compositor for wayland, inspired by openbox.

It is light-weight and independent with a focus on simply stacking windows well and rendering some window decorations. It takes a no-bling/frills approach and says no to features such as animations. It relies on clients for panels, screenshots, wallpapers and so on to create a full desktop environment.

Labwc tries to stay in keeping with wlroots and sway in terms of general approach and coding style.

Labwc has no reliance on any particular Desktop Environment, Desktop Shell or session. Nor does it depend on any UI toolkits such as Qt or GTK.

1.2 Why?

Firstly, we believe that there is a need for a simple Wayland window-stacking compositor which strikes a balance between minimalism and bloat approximately at the level where Window Managers like Openbox reside in the X11 domain. Most of the core developers are accustomed to low resource Desktop Environments such as Mate/XFCE or standalone Window Managers such as Openbox under X11. Labwc aims to make a similar setup possible under Wayland, with small and independent components rather than a large, integrated software eco-system.

Secondly, the Wayland community has achieved an amazing amount so far, and we want to help solve the unsolved problems to make Wayland viable for more people. We think that standardisation and de-fragmentation is a route to greater Wayland adoption, and wanting to play our part in this, Labwc only understands wayland-protocols & wlr-protocols, and it cannot be controlled with dbus, sway/i3/custom-IPC or other technology.

Thirdly, it is important to us that scope is tightly controlled so that the compositor matures to production quality. On the whole, we value robustness, reliability, stability and simplicity over new features. Coming up with new ideas and features is easy - maintaining and stabilising them is not.

Fourthly, we are of the view that a compositor should be boring in order to do its job well. In this regard we follow in the footsteps of metacity which describes itself as a "Boring window manager for the adult in you. Many window managers are like Marshmallow Froot Loops; Metacity is like Cheerios."

Finally, we think that an elegant solution to all of this does not need feel square and pixelated like something out of the 1990s, but should look contemporary and enable cutting-edge performance.

1.3 Why The Openbox Theme Specification?

In order to avoid reinventing configuration and theme syntaxes, the openbox 3.6 specification is used. This does not mean that labwc is an openbox clone but rather that configuration files will look and feel familiar.

Also, parsing GTK3+ and Qt themes for window decorations is very complicated, so using much simpler specs such as those used by openbox and xfwm makes sense for a compositor such as labwc, both in terms of implementation and for user modification.

Openbox spec is somewhat of a stable standard considering how long it has remained unchanged for and how wide-spread its adoption is by lightweight distributions such as LXDE, LXQt, BunsenLabs, ArchLabs, Mabox and Raspbian. Some widely used themes (for example Numix and Arc) have built-in support.

We could have invented a whole new syntax, but that's not where we want to spend our effort.

1.4 Very High Level Scope

A lot of emphasis is put on code simplicity when considering features.

The main development effort is focused on producing a solid foundation for a stacking compositor rather than adding configuration and theming options.

See scope for full details on implemented features.

High-level summary of items that Labwc supports:

  • Config files (rc.xml, autostart, environment, menu.xml)
  • Theme files and xbm/png/svg icons
  • Basic desktop and client menus
  • HiDPI
  • wlroots protocols such as output-management, layer-shell and foreign-toplevel
  • Optionally xwayland

1.5 Videos

video link date content
Video (2:48) 31-Oct-2022 0.6.0 release video
Video (1:10) 05-Aug-2021 window gymnastics, theming and waybar
Video (3:42) 25-Feb-2021 setting background and themes; xwayland/xdg-shell windows

1.6 Screenshot

The obligatory screenshot:


Screenshot description

2. Build and Installation

To build, simply run:

meson setup build/
meson compile -C build/

Run-time dependencies include:

  • wlroots, wayland, libinput, xkbcommon
  • libxml2, cairo, pango, glib-2.0
  • libpng
  • librsvg >=2.46 (optional)
  • xwayland, xcb (optional)

Build dependencies include:

  • meson, ninja, gcc/clang
  • wayland-protocols

Disable xwayland with meson -Dxwayland=disabled build/

For OS/distribution specific details see wiki.

If the right version of wlroots is not found on the system, the build setup will automatically download the wlroots repo. If this fallback is not desired please use:

meson setup --wrap-mode=nodownload build/

To enforce the supplied wlroots.wrap file, run:

meson setup --force-fallback-for=wlroots build/

If installing after using the wlroots.wrap file, use the following to prevent installing the wlroots headers:

meson install --skip-subprojects -C build/

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, environment and themerc-override.

Run labwc --reconfigure to reload configuration and theme.

For a step-by-step initial configuration guide, see getting-started.

4. Theming

Themes are located at ~/.local/share/themes/\<theme-name\>/openbox-3/ or equivalent XDG_DATA_{DIRS,HOME} location in accordance with freedesktop XDG directory specification.

For full theme options, see labwc-theme(5) or the themerc example file.

For themes, search the internet for "openbox themes" and place them in ~/.local/share/themes/. Some good starting points include:

5. Translations

The default window bar menu can be translated on the weblate platform.

Translation status

6. Usage

./build/labwc [-s <command>]

NOTE: If you are running on NVIDIA, you will need the nvidia-drm.modeset=1 kernel parameter.

If you have not created an rc.xml config file, default bindings will be:

combination action
alt-tab activate next window
super-return alacritty
alt-F3 bemenu
alt-F4 close window
super-a toggle maximize
alt-mouse-left move window
alt-mouse-right resize window
alt-arrow move window to edge
super-arrow resize window to fill half the output
alt-space show the window menu
XF86_AudioLowerVolume amixer sset Master 5%-
XF86_AudioRaiseVolume amixer sset Master 5%+
XF86_AudioMute amixer sset Master toggle
XF86_MonBrightnessUp brightnessctl set +10%
XF86_MonBrightnessDown brightnessctl set 10%-

A root-menu can be opened by clicking on the desktop.

6.1 Gaming

Cursor confinement is supported from version 0.6.2. If using older versions, use a nested gamescope instance for gaming. It can be added to steam via game launch option: gamescope -f -- %command%.

7. Integration

Suggested apps to use with labwc:

See integration for further details.

labwc's People

Contributors

01micko avatar ahesford avatar apbryan avatar arnaudv6 avatar consolatis avatar digint avatar dimkr avatar droc12345 avatar flrian avatar heroin-moose avatar hype3 avatar jbeich avatar jlindgren90 avatar johanmalm avatar joshua-ashton avatar jp7677 avatar kyak avatar mechpen avatar norwayfun avatar nullablevoidptr avatar ph42on avatar redtide avatar sachin-bhat avatar snownf avatar spl237 avatar stefonarch avatar telent avatar tokyo4j avatar weblate avatar xi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

labwc's Issues

[Question] Where do minimized windows go?

This is really just a question, but I haven't figured out where the minimized windows go? Is this an unfinished feature and they go to void, or is there any toolbar that is currently supported by labwc? Sorry for spamming the issues with this.

Multi-monitor configs with a monitor above are unusable

With a 4 monitor config, with 3 on the bottom row and 1 above it becomes unusable. Due to the fact that all other monitors have to have their y coord raised up by 1080 (in my case) and the top monitor placed at 0,0. All windows spawn at somewhere around 0,0 in my testing. Making this setup unusable since windows spawn off screen.

[Feature Request] Corner Hotspot

My laptop's screen is limited , so i would like the running application to take full space in the screen.

Recommended Bar application for labwc is waybar. It is one of best bar for Wayland too. Unfortunately,it doesn't support Auto-Hide feature .
I have opened Issue here:

Alexays/Waybar#1048 (comment)

Temporary solution for this is "hotspot" feature where the compositor executes a command when the cursor reaches designated corner of the screen.

Unexpected behaviour with steam applications

Hi.

If I wan't to go fullscreen on youtube or any other movie window it only goes to fullscreen of the size of the actual window size. Not using the whole monitor. And if I click on fullscreen on window border it goes to fullscreen but with the border around the window.

It's the same in games if I go fullscreen I still see the border around the window.

toggle maximize doesnt work

I have added "ToggleFullscreen" to my keybinds in rc.xml (ref:7sarus/dotfiles@f54b3cd)
But it doesn't seem to work. Toggle maximize works fine. How do I get log or something of this to see if something is wrong on my end?

Build failure with latest master

Hi,
I'm trying to build the project on my machine but am failing at the compilation stage (log attached).
I'm trying to add this compositor to Gentoo linux and would appreciate the help, thanks!

>>> Configuring source in /var/tmp/portage/gui-wm/labwc-9999/work/labwc-9999 ...
meson setup --buildtype plain --libdir lib64 --localstatedir /var/lib --prefix /usr --sysconfdir /etc --wrap-mode nodownload --build.pkg-config-path /usr/share/pkgconfig --pkg-config-path /usr/share/pkgconfig --native-file /var/tmp/portage/gui-wm/labwc-9999/temp/meson.x86_64-pc-linux-gnu.amd64.ini -Dxwayland=enabled /var/tmp/portage/gui-wm/labwc-9999/work/labwc-9999 /var/tmp/portage/gui-wm/labwc-9999/work/labwc-9999-build
DEPRECATION: c_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: c_link_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: cpp_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: cpp_link_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: fortran_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: fortran_link_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: objc_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: objc_link_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: objcpp_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: objcpp_link_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
The Meson build system
Version: 0.56.2
Source dir: /var/tmp/portage/gui-wm/labwc-9999/work/labwc-9999
Build dir: /var/tmp/portage/gui-wm/labwc-9999/work/labwc-9999-build
Build type: native build
Project name: labwc
Project version: undefined
C compiler for the host machine: x86_64-pc-linux-gnu-gcc (gcc 10.2.0 "x86_64-pc-linux-gnu-gcc (Gentoo 10.2.0-r5 p6) 10.2.0")
C linker for the host machine: x86_64-pc-linux-gnu-gcc ld.bfd 2.35.2
Host machine cpu family: x86_64
Host machine cpu: x86_64
Compiler for C supports arguments -Wno-unused-parameter: YES
Compiler for C supports arguments -Wundef: YES
Neither a subproject directory nor a wlroots.wrap file was found.
Subproject  wlroots is buildable: NO (disabling)
Found pkg-config: /usr/bin/x86_64-pc-linux-gnu-pkg-config (1.7.3)
Run-time dependency wlroots found: YES 0.12.0
Fetching value of define "WLR_HAS_XWAYLAND" with dependency wlroots: 1
Run-time dependency wayland-server found: YES 1.19.0
Run-time dependency wayland-protocols found: YES 1.20
Run-time dependency xkbcommon found: YES 1.0.3
Run-time dependency xcb found: YES 1.14
Run-time dependency libxml-2.0 found: YES 2.9.10
Run-time dependency glib-2.0 found: YES 2.66.7
Run-time dependency cairo found: YES 1.16.0
Run-time dependency pangocairo found: YES 1.42.4
Run-time dependency libinput found: YES 1.17.0
Run-time dependency pixman-1 found: YES 0.40.0
Library m found: YES
Program wayland-scanner found: YES (/usr/bin/wayland-scanner)
Configuring config.h using configuration
Program pandoc found: NO
Build targets in project: 2

labwc undefined

  Subprojects
    wlroots: NO Neither a subproject directory nor a wlroots.wrap file was found.

Found ninja-1.10.2 at /usr/bin/ninja
>>> Source configured.
>>> Compiling source in /var/tmp/portage/gui-wm/labwc-9999/work/labwc-9999 ...
ninja -v -j8 -l0 -C /var/tmp/portage/gui-wm/labwc-9999/work/labwc-9999-build
ninja: Entering directory `/var/tmp/portage/gui-wm/labwc-9999/work/labwc-9999-build'
[1/44] /usr/bin/wayland-scanner private-code ../labwc-9999/protocols/wlr-layer-shell-unstable-v1.xml protocols/libserver_protos.a.p/wlr-layer-shell-unstable-v1-protocol.c
[2/44] /usr/bin/wayland-scanner server-header ../labwc-9999/protocols/wlr-layer-shell-unstable-v1.xml protocols/libserver_protos.a.p/wlr-layer-shell-unstable-v1-protocol.h
[3/44] /usr/bin/wayland-scanner private-code //usr/share/wayland-protocols/stable/xdg-shell/xdg-shell.xml protocols/libserver_protos.a.p/xdg-shell-protocol.c
[4/44] /usr/bin/wayland-scanner server-header ../labwc-9999/protocols/wlr-layer-shell-unstable-v1.xml labwc.p/wlr-layer-shell-unstable-v1-protocol.h
[5/44] /usr/bin/wayland-scanner server-header //usr/share/wayland-protocols/stable/xdg-shell/xdg-shell.xml protocols/libserver_protos.a.p/xdg-shell-protocol.h
[6/44] /usr/bin/wayland-scanner server-header //usr/share/wayland-protocols/stable/xdg-shell/xdg-shell.xml labwc.p/xdg-shell-protocol.h
[7/44] x86_64-pc-linux-gnu-gcc -Iprotocols/libserver_protos.a.p -Iprotocols -I../labwc-9999/protocols -I/usr/lib64/libffi/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -fPIC -MD -MQ protocols/libserver_protos.a.p/meson-generated_wlr-layer-shell-unstable-v1-protocol.c.o -MF protocols/libserver_protos.a.p/meson-generated_wlr-layer-shell-unstable-v1-protocol.c.o.d -o protocols/libserver_protos.a.p/meson-generated_wlr-layer-shell-unstable-v1-protocol.c.o -c protocols/libserver_protos.a.p/wlr-layer-shell-unstable-v1-protocol.c
[8/44] x86_64-pc-linux-gnu-gcc -Iprotocols/libserver_protos.a.p -Iprotocols -I../labwc-9999/protocols -I/usr/lib64/libffi/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -fPIC -MD -MQ protocols/libserver_protos.a.p/meson-generated_xdg-shell-protocol.c.o -MF protocols/libserver_protos.a.p/meson-generated_xdg-shell-protocol.c.o.d -o protocols/libserver_protos.a.p/meson-generated_xdg-shell-protocol.c.o -c protocols/libserver_protos.a.p/xdg-shell-protocol.c
[9/44] rm -f protocols/libserver_protos.a && x86_64-pc-linux-gnu-ar csrD protocols/libserver_protos.a protocols/libserver_protos.a.p/meson-generated_xdg-shell-protocol.c.o protocols/libserver_protos.a.p/meson-generated_wlr-layer-shell-unstable-v1-protocol.c.o
[10/44] x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_deco.c.o -MF labwc.p/src_deco.c.o.d -o labwc.p/src_deco.c.o -c ../labwc-9999/src/deco.c
FAILED: labwc.p/src_deco.c.o
x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_deco.c.o -MF labwc.p/src_deco.c.o.d -o labwc.p/src_deco.c.o -c ../labwc-9999/src/deco.c
In file included from ../labwc-9999/include/labwc.h:19,
                 from ../labwc-9999/src/deco.c:9:
/usr/include/wlr/types/wlr_layer_shell_v1.h:52:52: error: field ‘keyboard_interactive’ has incomplete type
   52 |  enum zwlr_layer_surface_v1_keyboard_interactivity keyboard_interactive;
      |                                                    ^~~~~~~~~~~~~~~~~~~~
[11/44] x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_interactive.c.o -MF labwc.p/src_interactive.c.o.d -o labwc.p/src_interactive.c.o -c ../labwc-9999/src/interactive.c
FAILED: labwc.p/src_interactive.c.o
x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_interactive.c.o -MF labwc.p/src_interactive.c.o.d -o labwc.p/src_interactive.c.o -c ../labwc-9999/src/interactive.c
In file included from ../labwc-9999/include/labwc.h:19,
                 from ../labwc-9999/src/interactive.c:1:
/usr/include/wlr/types/wlr_layer_shell_v1.h:52:52: error: field ‘keyboard_interactive’ has incomplete type
   52 |  enum zwlr_layer_surface_v1_keyboard_interactivity keyboard_interactive;
      |                                                    ^~~~~~~~~~~~~~~~~~~~
[12/44] x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_action.c.o -MF labwc.p/src_action.c.o.d -o labwc.p/src_action.c.o -c ../labwc-9999/src/action.c
FAILED: labwc.p/src_action.c.o
x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_action.c.o -MF labwc.p/src_action.c.o.d -o labwc.p/src_action.c.o -c ../labwc-9999/src/action.c
In file included from ../labwc-9999/include/labwc.h:19,
                 from ../labwc-9999/src/action.c:4:
/usr/include/wlr/types/wlr_layer_shell_v1.h:52:52: error: field ‘keyboard_interactive’ has incomplete type
   52 |  enum zwlr_layer_surface_v1_keyboard_interactivity keyboard_interactive;
      |                                                    ^~~~~~~~~~~~~~~~~~~~
[13/44] x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_damage.c.o -MF labwc.p/src_damage.c.o.d -o labwc.p/src_damage.c.o -c ../labwc-9999/src/damage.c
FAILED: labwc.p/src_damage.c.o
x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_damage.c.o -MF labwc.p/src_damage.c.o.d -o labwc.p/src_damage.c.o -c ../labwc-9999/src/damage.c
In file included from ../labwc-9999/include/labwc.h:19,
                 from ../labwc-9999/src/damage.c:1:
/usr/include/wlr/types/wlr_layer_shell_v1.h:52:52: error: field ‘keyboard_interactive’ has incomplete type
   52 |  enum zwlr_layer_surface_v1_keyboard_interactivity keyboard_interactive;
      |                                                    ^~~~~~~~~~~~~~~~~~~~
[14/44] x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_desktop.c.o -MF labwc.p/src_desktop.c.o.d -o labwc.p/src_desktop.c.o -c ../labwc-9999/src/desktop.c
FAILED: labwc.p/src_desktop.c.o
x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_desktop.c.o -MF labwc.p/src_desktop.c.o.d -o labwc.p/src_desktop.c.o -c ../labwc-9999/src/desktop.c
In file included from ../labwc-9999/include/labwc.h:19,
                 from ../labwc-9999/src/desktop.c:3:
/usr/include/wlr/types/wlr_layer_shell_v1.h:52:52: error: field ‘keyboard_interactive’ has incomplete type
   52 |  enum zwlr_layer_surface_v1_keyboard_interactivity keyboard_interactive;
      |                                                    ^~~~~~~~~~~~~~~~~~~~
[15/44] x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_cursor.c.o -MF labwc.p/src_cursor.c.o.d -o labwc.p/src_cursor.c.o -c ../labwc-9999/src/cursor.c
FAILED: labwc.p/src_cursor.c.o
x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_cursor.c.o -MF labwc.p/src_cursor.c.o.d -o labwc.p/src_cursor.c.o -c ../labwc-9999/src/cursor.c
In file included from ../labwc-9999/include/labwc.h:19,
                 from ../labwc-9999/src/cursor.c:2:
/usr/include/wlr/types/wlr_layer_shell_v1.h:52:52: error: field ‘keyboard_interactive’ has incomplete type
   52 |  enum zwlr_layer_surface_v1_keyboard_interactivity keyboard_interactive;
      |                                                    ^~~~~~~~~~~~~~~~~~~~
[16/44] x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_keyboard.c.o -MF labwc.p/src_keyboard.c.o.d -o labwc.p/src_keyboard.c.o -c ../labwc-9999/src/keyboard.c
FAILED: labwc.p/src_keyboard.c.o
x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_keyboard.c.o -MF labwc.p/src_keyboard.c.o.d -o labwc.p/src_keyboard.c.o -c ../labwc-9999/src/keyboard.c
In file included from ../labwc-9999/include/labwc.h:19,
                 from ../labwc-9999/src/keyboard.c:2:
/usr/include/wlr/types/wlr_layer_shell_v1.h:52:52: error: field ‘keyboard_interactive’ has incomplete type
   52 |  enum zwlr_layer_surface_v1_keyboard_interactivity keyboard_interactive;
      |                                                    ^~~~~~~~~~~~~~~~~~~~
[17/44] x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_layers.c.o -MF labwc.p/src_layers.c.o.d -o labwc.p/src_layers.c.o -c ../labwc-9999/src/layers.c
FAILED: labwc.p/src_layers.c.o
x86_64-pc-linux-gnu-gcc -Ilabwc.p -I. -I../labwc-9999 -Iinclude -I../labwc-9999/include -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/cairo -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -DWLR_USE_UNSTABLE -Wno-enum-compare -Wno-unused-parameter -Wundef -march=znver1 -O3 -fgraphite-identity -floop-nest-optimize -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition -flto=8 -fuse-linker-plugin -fno-signed-zeros -fno-trapping-math -fassociative-math -freciprocal-math -Wl,-O1 -Wl,--as-needed -pthread -MD -MQ labwc.p/src_layers.c.o -MF labwc.p/src_layers.c.o.d -o labwc.p/src_layers.c.o -c ../labwc-9999/src/layers.c
In file included from ../labwc-9999/src/layers.c:14:
/usr/include/wlr/types/wlr_layer_shell_v1.h:52:52: error: field ‘keyboard_interactive’ has incomplete type
   52 |  enum zwlr_layer_surface_v1_keyboard_interactivity keyboard_interactive;
      |                                                    ^~~~~~~~~~~~~~~~~~~~
ninja: build stopped: subcommand failed.

Grab openbox rc.xml file if it exists.

If this compositor is influenced by openbox and even migh works with it's config, should labwc take openbox config if there is one? For example there might be additional entry in config_dirs array (dir.c, line 21) after labwc entry. If there is special entry, for labwc take it, if no - al least check available openbox one.

Primary selection doesn't work?

Primary selection doesn't work for me using kitty (tested in sway, it works there). I believe it's using the newer version of the protocol, not the interim "gtk" version

From poking around I found a relevant-looking comment in cursor.c, which makes me wonder if it's unimplemented

https://github.com/johanmalm/labwc/blob/41fe085824fa97181447e9e827873c7019c53057/src/cursor.c#L405

(If I uncomment it and rebuild I get error: 'struct seat' has no member named 'request_set_primary_selection' so I guess it's a little more complicated than that)

<command> expand tilde and variables

Os: Fedora 34.20210423.n.0 (Silverblue)
labwc version: 0.2.0

It seems labwc can't execute bash script. Here is my rc.xml and my script. My script works well when I run it from terminal but somehow it can't run when I put in <command>

all output goes to stderr

labwc outputs everything to stderr, including DEBUG and INFO messages (when run with -v flag) and all messages from client programs run by labwc (which can obviously also include INFO and DEBUG messages if the programs are verbose).

This can be easily verified by running $ labwc -vv 1> stdout.txt 2> stderr.txt and examining the resulting files.

fluxbox

I used openbox, blackbox, and fluxbox, way back >15 years ago. I switched largely because I thought mounting removable media was a pain. Of the 3, I thought fluxbox was the best, I don't remember if it's how the right click menus worked, I think it had tabbed windows, and you could easily trigger a run prompt. I know it had a taskbar. It was still of course very minimal. Do you have any plans to investigate its features to make certain they're available?

no input configuration

As far as I can tell, there's no way to configure e.g. key repeat rates or mouse acceleration with labwc. This should just be a matter of plumbing settings from the config file into libinput.

[Question] Display Manager

I installed labwc using the AUR. By default, my display manager (lightdm) doesn't show an option to labwc.

How can I login into labwc with lightdm?

Thanks for the project.

[Feature Request] Snapping the Windows

It would be nicer to have Snapping feature.

Snapping feature is when you drag windows to edge of the screen and window gets aligned to right side,left side, bottom side or fullscreen depending on edge.

It's present in KDE plasma, Wayfire, AwesomeWM , etc.

I think that this feature will not bloat labwc .

[Question] How to get list of opened windows ?

I am not sure if it's a common question to be asked. I know on sway window manager, we can get list of opened windows with "swaymsg", though I never understand how it works. Can I do something like that on labwc ? I am arranging some stuffs to achieve something like "LXDE" on wayland. Labwc is the first thing on top list. Along with yambar as panel and other TUI tools as a proponent. Thanks. Once everything is complete, perhaps we can make something like "LWDE" (something like lxde but for wayland) :).

Maximised windows overlap waybar

Hi,

I am using labwc as compiled from the master in this repo. Using the latest version of waybar as available in Arch Linux.

When running waybar, and maximising a window, it covers waybar. The behaviour I would expect is that it would remain visible.

Am I getting something wrong? Is there anything I have missed?

Regards, a happy labwc user :)

Hang for seconds then crash when launch applications.

Getting a hang for seconds and then crash when I want to launch terminal and other program. I got this logs. Wlroots issue or labwc itself, thanks.

labwc: render/wlr_texture.c:28: wlr_texture_from_pixels: Assertion `stride > 0' failed.
 err: wayland.c:1074: failed to read events from the Wayland socket: Broken pipe
 err: wayland.c:1492: failed to flush wayland socket: Broken pipe
 err: wayland.c:1492: failed to flush wayland socket: Broken pipe
 err: wayland.c:1492: failed to flush wayland socket: Broken pipe

build error

Hello Johan. Your project looks awesome.
gentoo user here, with POSIX_TIME in kernel set OK and using glibc.
trying to build 678d327, I get this error:

ninja: Entering directory `build/'
[11/18] Compiling C object labwc.p/src_output.c.o
FAILED: labwc.p/src_output.c.o 
cc -Ilabwc.p -I. -I.. -I../include -Isubprojects/wlroots -I../subprojects/wlroots -Isubprojects/wlroots/include -I../subprojects/wlroots/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/cairo -I/usr/lib64/libffi/include -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/libpng16 -I/usr/include/pango-1.0 -I/usr/include/fribidi -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -g -DWLR_USE_UNSTABLE -Wno-unused-parameter -Wundef -MD -MQ labwc.p/src_output.c.o -MF labwc.p/src_output.c.o.d -o labwc.p/src_output.c.o -c ../src/output.c
../src/output.c: In function 'output_frame_notify':
../src/output.c:278:2: warning: implicit declaration of function 'clock_gettime' [-Wimplicit-function-declaration]
  278 |  clock_gettime(CLOCK_MONOTONIC, &now);
      |  ^~~~~~~~~~~~~
../src/output.c:278:16: error: 'CLOCK_MONOTONIC' undeclared (first use in this function)
  278 |  clock_gettime(CLOCK_MONOTONIC, &now);
      |                ^~~~~~~~~~~~~~~
../src/output.c:278:16: note: each undeclared identifier is reported only once for each function it appears in
[17/18] Generating symbol file subprojects/wlroots/libwlroots.so.6.p/libwlroots.so.6.symbols

Also xwayland is a build time dependency, when trying to use system's wlroots. Not runtime. Do you plan to make it optional?

labwc segfaults whenever started inside an already started session

Hello!

I am packaging labwc for the Nixpkgs collection. When I tried to start the labwc binary inside an already running Wayfire instance, it tried to open the instance but closed itself with the classic Segmentation fault (core dumped) message.

Usually, when I test such window managers for Wayland, they open a window named wlroots - WL-1. But in the case of labwc, it opens but quickly segfaults.

On the other hand, when I open labwc via terminal, it runs OK.

Stutter/hang with kitty+nano

Hi,

Building on Ubuntu 20.04, error on:

[244/266] Compiling C object labwc.p/src_seat.c.o ../src/seat.c: In function ‘seat_focus_surface’: ../src/seat.c:128:3: warning: implicit declaration of function ‘wlr_seat_keyboard_notify_clear_focus’; did you mean ‘wlr_seat_keyboard_clear_focus’? [-Wimplicit-function-declaration] 128 | wlr_seat_keyboard_notify_clear_focus(seat->seat); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | wlr_seat_keyboard_clear_focus [266/266] Linking target labwc FAILED: labwc

Changing seat.c to wlr_seat_keyboard_clear_focus made the build go through.

Hang for seconds then crash when launch applications.

Getting a hang for seconds and then crash when I want to launch terminal and other program. I got this logs. Wlroots issue or labwc itself, thanks.

labwc: render/wlr_texture.c:28: wlr_texture_from_pixels: Assertion `stride > 0' failed.
 err: wayland.c:1074: failed to read events from the Wayland socket: Broken pipe
 err: wayland.c:1492: failed to flush wayland socket: Broken pipe
 err: wayland.c:1492: failed to flush wayland socket: Broken pipe
 err: wayland.c:1492: failed to flush wayland socket: Broken pipe

[Question] Multiple keyboard layouts

Is it currently possible to have multiple keyboard layouts and cycle between them using a key combination? I believe swaywm supports that natively.

Better support for notifications

Thunderbird notifications display in the center of the screen and get decorations.

xeyes tells me it's a Wayland window and no XWayland too 🤔

[Feature request] Drag to screen edge to tile

Would it be possible to implement basic drag to screen edge to tile functionality in labwc? Apologies if this is already possible and I have missed this!

For example: On window being dragged to the left side of the screen, the window gets automatically resized to 50% and left on the left side of the screen.

If it's not possible to trigger this with the mouse, would it be possible to implement it with a key combo?

My proposal is only for left/right tiling, not necessarily anything more complex than that.

If this can be implemented, it might be interesting to see how Wayfire does it, for example.

labwc doesn't pass key shortcuts to child labwc

If labwc runs inside labwc, one would expect the keyboard shortcuts to be passed to the client when its window is active. However, that doesn't currently happen, which means that keyboard shortcuts cannot be used in the client. It can also catch the user by surprise if he expects to close an active window with labwc using Alt-Esc and it closes the parent instead.

Latest master make machine runs heavy.

I'm sorry for non-technical description, I compile latest master and run it, something I notice is my fan runs faster. It doesn't happen when I use other Wayland compositor (e.g Sway, hikari) and Labwc from my previous compilation (before the latest master). Happening for both archlinux and Debian. Thanks.

[render/swapchain.c:97] No free output buffer slot

Bisected to swaywm/wlroots@441bac139fdf. Affects nesting on another compositor (wayland backend) but not console (drm backend) or Xorg (x11 backend).

$ sway
$ HOME=/var/empty labwc
[labwc] info: cannot find rc.xml config file; using defaults
[labwc] info: load default key bindings
[labwc] info: cannot find theme (Clearlooks-3.4), using built-in
<Cursor moved over labwc window>
00:00:01.788 [render/swapchain.c:97] No free output buffer slot
00:00:01.788 [render/swapchain.c:97] No free output buffer slot
00:00:01.788 [render/swapchain.c:97] No free output buffer slot
^C

$ labwc -v
labwc 0.1.0-22-g1fb9d5e
wlroots 0.12.0-375-g44fa2c4b
Debug log
$ HOME=/var/empty labwc -d
[labwc] info: cannot find rc.xml config file; using defaults
[labwc] info: load default key bindings
00:00:00.005 [backend/wayland/backend.c:361] Creating wayland backend
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: wl_shm v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: wl_drm v2
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_linux_dmabuf_v1 v3
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: wl_compositor v4
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: wl_subcompositor v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: wl_data_device_manager v3
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwlr_gamma_control_manager_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zxdg_output_manager_v1 v3
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: org_kde_kwin_idle v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_idle_inhibit_manager_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwlr_layer_shell_v1 v4
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: xdg_wm_base v2
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_tablet_manager_v2 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: org_kde_kwin_server_decoration_manager v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zxdg_decoration_manager_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_relative_pointer_manager_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_pointer_constraints_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: wp_presentation v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwlr_output_manager_v1 v2
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwlr_output_power_manager_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_input_method_manager_v2 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_text_input_manager_v3 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwlr_foreign_toplevel_manager_v1 v3
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwlr_export_dmabuf_manager_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwlr_screencopy_manager_v1 v3
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwlr_data_control_manager_v1 v2
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_primary_selection_device_manager_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: wp_viewporter v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zxdg_exporter_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zxdg_importer_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zxdg_exporter_v2 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zxdg_importer_v2 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_virtual_keyboard_manager_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwlr_virtual_pointer_manager_v1 v2
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwlr_input_inhibit_manager_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_keyboard_shortcuts_inhibit_manager_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: wl_seat v7
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: zwp_pointer_gestures_v1 v1
00:00:00.005 [backend/wayland/backend.c:192] Remote wayland global: wl_output v3
00:00:00.005 [backend/wayland/seat.c:754] seat 0x801e40900 offered pointer
00:00:00.005 [backend/wayland/seat.c:791] seat 0x801e40900 offered keyboard
00:00:00.005 [backend/wayland/backend.c:419] Opening DRM render node /dev/dri/renderD128
00:00:00.011 [render/gbm_allocator.c:180] Created GBM allocator with backend drm
00:00:00.016 [render/egl.c:306] Using EGL 1.5
00:00:00.016 [render/egl.c:307] Supported EGL client extensions: EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_EXT_platform_x11 EGL_KHR_platform_x11 EGL_MESA_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless
00:00:00.016 [render/egl.c:308] Supported EGL display extensions: EGL_ANDROID_blob_cache EGL_ANDROID_native_fence_sync EGL_EXT_buffer_age EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_IMG_context_priority EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display
00:00:00.016 [render/egl.c:310] Supported EGL device extensions: EGL_EXT_device_drm
00:00:00.016 [render/egl.c:312] EGL vendor: Mesa Project
00:00:00.016 [render/egl.c:149] Supported DMA-BUF formats: AB4H XB4H AR30 XR30 AB30 AR24 AB24 XR24 XB24 AR15 RG16 R8   R16  GR88 GR32 YUV9 YU11 YU12 YU16 YU24 YVU9 YV11 YV12 YV16 YV24 NV12 P010 P012 P016 NV16 AYUV XYUV YUYV UYVY
00:00:00.016 [render/egl.c:151] EGL DMA-BUF format modifiers supported
00:00:00.017 [render/egl.c:352] Obtained high priority context
00:00:00.018 [render/gles2/renderer.c:865] Using OpenGL ES 3.2 Mesa 21.1.0-devel (git-a04a797b89b)
00:00:00.018 [render/gles2/renderer.c:866] GL vendor: Intel
00:00:00.018 [render/gles2/renderer.c:867] GL renderer: Mesa Intel(R) HD Graphics 530 (SKL GT2)
00:00:00.018 [render/gles2/renderer.c:868] Supported GLES2 extensions: GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_filter_anisotropic GL_EXT_texture_compression_s3tc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_EXT_draw_instanced GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_OES_depth_texture GL_AMD_performance_monitor GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_NV_conditional_render GL_OES_get_program_binary GL_APPLE_texture_max_level GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_OES_viewport_array GL_ANGLE_pack_reverse_row_order GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_EXT_occlusion_query_boolean GL_EXT_robustness GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_KHR_robustness GL_KHR_texture_compression_astc_ldr GL_NV_pixel_buffer_object GL_OES_depth_texture_cube_map GL_OES_required_internalformat GL_OES_surfaceless_context GL_EXT_color_buffer_float GL_EXT_sRGB_write_control GL_EXT_separate_shader_objects GL_EXT_shader_framebuffer_fetch GL_EXT_shader_group_vote GL_EXT_shader_implicit_conversions GL_EXT_shader_integer_mix GL_EXT_tessellation_point_size GL_EXT_tessellation_shader GL_INTEL_conservative_rasterization GL_ANDROID_extension_pack_es31a GL_EXT_base_instance GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_copy_image GL_EXT_draw_buffers_indexed GL_EXT_draw_elements_base_vertex GL_EXT_gpu_shader5 GL_EXT_polygon_offset_clamp GL_EXT_primitive_bounding_box GL_EXT_render_snorm GL_EXT_shader_io_blocks GL_EXT_texture_border_clamp GL_EXT_texture_buffer GL_EXT_texture_cube_map_array GL_EXT_texture_norm16 GL_EXT_texture_view GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_KHR_context_flush_control GL_KHR_robust_buffer_access_behavior GL_NV_image_formats GL_OES_copy_image GL_OES_draw_buffers_indexed GL_OES_draw_elements_base_vertex GL_OES_gpu_shader5 GL_OES_primitive_bounding_box GL_OES_sample_shading GL_OES_sample_variables GL_OES_shader_io_blocks GL_OES_shader_multisample_interpolation GL_OES_tessellation_point_size GL_OES_tessellation_shader GL_OES_texture_border_clamp GL_OES_texture_buffer GL_OES_texture_cube_map_array GL_OES_texture_stencil8 GL_OES_texture_storage_multisample_2d_array GL_OES_texture_view GL_EXT_blend_func_extended GL_EXT_buffer_storage GL_EXT_float_blend GL_EXT_geometry_point_size GL_EXT_geometry_shader GL_EXT_shader_samples_identical GL_EXT_texture_sRGB_R8 GL_KHR_no_error GL_KHR_texture_compression_astc_sliced_3d GL_NV_fragment_shader_interlock GL_OES_EGL_image_external_essl3 GL_OES_geometry_point_size GL_OES_geometry_shader GL_OES_shader_image_atomic GL_EXT_clip_cull_distance GL_EXT_disjoint_timer_query GL_EXT_texture_compression_s3tc_srgb GL_MESA_shader_integer_functions GL_EXT_clip_control GL_EXT_color_buffer_half_float GL_EXT_semaphore GL_EXT_semaphore_fd GL_EXT_texture_compression_bptc GL_KHR_parallel_shader_compile GL_EXT_EGL_image_storage GL_EXT_shader_framebuffer_fetch_non_coherent GL_EXT_texture_shadow_lod GL_INTEL_blackhole_render GL_MESA_framebuffer_flip_y GL_NV_compute_shader_derivatives GL_EXT_demote_to_helper_invocation GL_EXT_depth_clamp GL_EXT_texture_query_lod
00:00:00.021 [GLES2] VS SIMD8 shader: 16 inst, 0 loops, 47 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 256 to 176 bytes.
00:00:00.022 [GLES2] SIMD32 shader inefficient

00:00:00.022 [GLES2] FS SIMD8 shader: 5 inst, 0 loops, 30 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 80 to 48 bytes.
00:00:00.022 [GLES2] FS SIMD16 shader: 5 inst, 0 loops, 46 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 80 to 48 bytes.
00:00:00.023 [GLES2] VS SIMD8 shader: 20 inst, 0 loops, 63 cycles, 0:0 spills:fills, 2 sends, scheduled with mode top-down, Promoted 0 constants, compacted 320 to 208 bytes.
00:00:00.024 [GLES2] SIMD32 shader inefficient

00:00:00.024 [GLES2] FS SIMD8 shader: 16 inst, 0 loops, 118 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 256 to 192 bytes.
00:00:00.024 [GLES2] FS SIMD16 shader: 16 inst, 0 loops, 150 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 256 to 192 bytes.
00:00:00.025 [GLES2] VS SIMD8 shader: 16 inst, 0 loops, 45 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 256 to 176 bytes.
00:00:00.025 [GLES2] SIMD32 shader inefficient

00:00:00.025 [GLES2] FS SIMD8 shader: 8 inst, 0 loops, 794 cycles, 0:0 spills:fills, 2 sends, scheduled with mode top-down, Promoted 0 constants, compacted 128 to 80 bytes.
00:00:00.025 [GLES2] FS SIMD16 shader: 8 inst, 0 loops, 814 cycles, 0:0 spills:fills, 2 sends, scheduled with mode top-down, Promoted 0 constants, compacted 128 to 80 bytes.
00:00:00.026 [GLES2] VS SIMD8 shader: 16 inst, 0 loops, 45 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 256 to 176 bytes.
00:00:00.027 [GLES2] SIMD32 shader inefficient

00:00:00.027 [GLES2] FS SIMD8 shader: 8 inst, 0 loops, 792 cycles, 0:0 spills:fills, 2 sends, scheduled with mode top-down, Promoted 0 constants, compacted 128 to 80 bytes.
00:00:00.027 [GLES2] FS SIMD16 shader: 8 inst, 0 loops, 810 cycles, 0:0 spills:fills, 2 sends, scheduled with mode top-down, Promoted 0 constants, compacted 128 to 80 bytes.
00:00:00.028 [GLES2] VS SIMD8 shader: 16 inst, 0 loops, 45 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 256 to 176 bytes.
00:00:00.028 [GLES2] SIMD32 shader inefficient

00:00:00.028 [GLES2] FS SIMD8 shader: 8 inst, 0 loops, 794 cycles, 0:0 spills:fills, 2 sends, scheduled with mode top-down, Promoted 0 constants, compacted 128 to 80 bytes.
00:00:00.028 [GLES2] FS SIMD16 shader: 8 inst, 0 loops, 814 cycles, 0:0 spills:fills, 2 sends, scheduled with mode top-down, Promoted 0 constants, compacted 128 to 80 bytes.
00:00:00.032 [xcursor/wlr_xcursor.c:244] Loaded cursor theme 'default', available cursors:
00:00:00.032 [xcursor/wlr_xcursor.c:250] bottom_left_corner (1 images) 16x16+1,14
00:00:00.032 [xcursor/wlr_xcursor.c:250] bottom_right_corner (1 images) 16x16+14,14
00:00:00.032 [xcursor/wlr_xcursor.c:250] bottom_side (1 images) 15x16+7,14
00:00:00.032 [xcursor/wlr_xcursor.c:250] grabbing (1 images) 16x16+8,8
00:00:00.032 [xcursor/wlr_xcursor.c:250] left_ptr (1 images) 10x16+1,1
00:00:00.032 [xcursor/wlr_xcursor.c:250] left_side (1 images) 16x15+1,7
00:00:00.032 [xcursor/wlr_xcursor.c:250] right_side (1 images) 16x15+14,7
00:00:00.032 [xcursor/wlr_xcursor.c:250] top_left_corner (1 images) 16x16+1,1
00:00:00.032 [xcursor/wlr_xcursor.c:250] top_right_corner (1 images) 16x16+14,1
00:00:00.032 [xcursor/wlr_xcursor.c:250] top_side (1 images) 15x16+7,1
00:00:00.032 [xcursor/wlr_xcursor.c:250] xterm (1 images) 9x16+4,8
00:00:00.032 [xcursor/wlr_xcursor.c:250] hand1 (1 images) 13x16+12,0
00:00:00.032 [xcursor/wlr_xcursor.c:250] watch (1 images) 16x16+15,9
00:00:00.032 [../src/server.c:201] xwayland is running on display :1
00:00:00.032 [backend/wayland/backend.c:251] Initializating wayland backend
00:00:00.034 [../src/server.c:249] WAYLAND_DISPLAY=wayland-0
[labwc] info: cannot find theme (Clearlooks-3.4), using built-in
00:00:00.037 [render/swapchain.c:105] Allocating new swapchain buffer
00:00:00.038 [render/gbm_allocator.c:125] Allocated 1280x720 GBM buffer (format 0x34325241, modifier 0x100000000000004)
00:00:00.038 [render/gles2/renderer.c:131] Created GL FBO for buffer 1280x720
00:00:00.038 [GLES2] SIMD32 shader inefficient

00:00:00.038 [GLES2] FS SIMD8 shader: 5 inst, 0 loops, 18 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 80 to 48 bytes.
00:00:00.038 [GLES2] FS SIMD16 shader: 5 inst, 0 loops, 26 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 80 to 48 bytes.
00:00:00.039 [GLES2] VS SIMD8 shader: 18 inst, 0 loops, 52 cycles, 0:0 spills:fills, 1 sends, scheduled with mode top-down, Promoted 0 constants, compacted 288 to 256 bytes.
00:00:00.041 [render/swapchain.c:105] Allocating new swapchain buffer
00:00:00.042 [render/gbm_allocator.c:125] Allocated 1280x720 GBM buffer (format 0x34325241, modifier 0x100000000000004)
00:00:00.042 [render/gles2/renderer.c:131] Created GL FBO for buffer 1280x720
00:00:00.042 [render/swapchain.c:105] Allocating new swapchain buffer
00:00:00.043 [render/gbm_allocator.c:125] Allocated 1280x720 GBM buffer (format 0x34325241, modifier 0x100000000000004)
00:00:00.043 [render/gles2/renderer.c:131] Created GL FBO for buffer 1280x720
00:00:07.487 [render/swapchain.c:105] Allocating new swapchain buffer
00:00:07.488 [render/gbm_allocator.c:125] Allocated 10x16 GBM buffer (format 0x34325241, modifier 0x100000000000004)
00:00:07.488 [render/gles2/renderer.c:131] Created GL FBO for buffer 10x16
00:00:07.490 [render/swapchain.c:105] Allocating new swapchain buffer
00:00:07.491 [render/gbm_allocator.c:125] Allocated 10x16 GBM buffer (format 0x34325241, modifier 0x100000000000004)
00:00:07.492 [render/gles2/renderer.c:131] Created GL FBO for buffer 10x16
00:00:07.494 [render/swapchain.c:105] Allocating new swapchain buffer
00:00:07.496 [render/gbm_allocator.c:125] Allocated 10x16 GBM buffer (format 0x34325241, modifier 0x100000000000004)
00:00:07.496 [render/gles2/renderer.c:131] Created GL FBO for buffer 10x16
00:00:07.496 [render/swapchain.c:105] Allocating new swapchain buffer
00:00:07.498 [render/gbm_allocator.c:125] Allocated 10x16 GBM buffer (format 0x34325241, modifier 0x100000000000004)
00:00:07.498 [render/gles2/renderer.c:131] Created GL FBO for buffer 10x16
00:00:07.498 [render/swapchain.c:97] No free output buffer slot
00:00:07.498 [types/wlr_output.c:1068] Falling back to software cursor on output 'WL-1'
00:00:07.498 [render/swapchain.c:97] No free output buffer slot
00:00:07.498 [types/wlr_output.c:1068] Falling back to software cursor on output 'WL-1'
00:00:07.499 [render/swapchain.c:97] No free output buffer slot
00:00:07.499 [types/wlr_output.c:1068] Falling back to software cursor on output 'WL-1'
00:00:07.499 [render/swapchain.c:97] No free output buffer slot
00:00:07.499 [types/wlr_output.c:1068] Falling back to software cursor on output 'WL-1'
00:00:07.499 [render/swapchain.c:97] No free output buffer slot
00:00:07.499 [types/wlr_output.c:1068] Falling back to software cursor on output 'WL-1'
00:00:07.499 [render/swapchain.c:97] No free output buffer slot
00:00:07.499 [types/wlr_output.c:1068] Falling back to software cursor on output 'WL-1'
00:00:07.499 [render/swapchain.c:97] No free output buffer slot
00:00:07.499 [types/wlr_output.c:1068] Falling back to software cursor on output 'WL-1'
00:00:07.500 [render/swapchain.c:97] No free output buffer slot
00:00:07.500 [types/wlr_output.c:1068] Falling back to software cursor on output 'WL-1'
^C

Environment Variable Expansion

On Openbox, I set my PATH variable in the environment config file, in order to prepend my custom entries to the PATH when I launch it from SDDM. Given the difference in how the environment config file is handled here, is there another recommended method for setting a variable such as PATH that should be applied "globally" (for the logged in user) such that it expands the variable? For example, setting 'PATH=${HOME}/bin:${PATH}', so that my labwc hotkeys can launch custom scripts from that directory.

labwc crash when changing to tty

When changing to tty (ctrl+alt+Fx), labwc crashes.
Using up-to-date Arch Linux. labwc compiled from master using the PKGBUILD labwc-git.
I am running seatd using "seatd -u username" before running labwc.
Am I doing anything wrong? Do you need any more information to debug this?

[nipsis@desktop ~]$ labwc -dV
00:00:00.000 [../labwc/src/config/session.c:55] read environment file /home/nipsis/.config/labwc/environment
00:00:00.000 [../labwc/src/config/rcxml.c:466] read config file /home/nipsis/.config/labwc/rc.xml
00:00:00.000 [../labwc/src/config/rcxml.c:405] load default mouse bindings
00:00:00.000 [libseat] [libseat/libseat.c:73] Seat opened with backend 'seatd'
00:00:00.000 [libseat] [libseat/backend/seatd.c:227] Enabling seat
00:00:00.000 [backend/session/session.c:110] Successfully loaded libseat session
00:00:00.002 [backend/backend.c:282] Found 1 GPUs
00:00:00.002 [backend/drm/backend.c:175] Initializing DRM backend for /dev/dri/card0 (i915)
00:00:00.002 [backend/drm/drm.c:260] Found 3 DRM CRTCs
00:00:00.002 [backend/drm/drm.c:187] Found 9 DRM planes
00:00:00.003 [render/egl.c:175] Supported EGL client extensions: EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_exten
sions EGL_KHR_debug EGL_EXT_platform_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_EXT_platform_x11 EGL_KHR_platform_x11 EGL_MESA_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_pla
tform_surfaceless
00:00:00.009 [render/egl.c:316] Supported EGL display extensions: EGL_ANDROID_blob_cache EGL_ANDROID_native_fence_sync EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_mo
difiers EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_ima
ge EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image_base EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_
configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display
00:00:00.009 [render/egl.c:318] Supported EGL device extensions: EGL_EXT_device_drm
00:00:00.009 [render/egl.c:320] Using EGL 1.4
00:00:00.009 [render/egl.c:321] EGL vendor: Mesa Project
00:00:00.011 [render/gles2/renderer.c:732] Creating GLES2 renderer
00:00:00.011 [render/gles2/renderer.c:733] Using OpenGL ES 3.0 Mesa 21.2.1
00:00:00.011 [render/gles2/renderer.c:734] GL vendor: Intel Open Source Technology Center
00:00:00.011 [render/gles2/renderer.c:735] GL renderer: Mesa DRI Intel(R) HD Graphics 2500 (IVB GT1)
00:00:00.011 [render/gles2/renderer.c:736] Supported GLES2 extensions: GL_EXT_blend_minmax GL_EXT_multi_draw_arrays GL_EXT_texture_filter_anisotropic GL_EXT_texture_compression_s3tc GL_EXT_texture_compression_dxt1
 GL_EXT_texture_compression_rgtc GL_EXT_texture_format_BGRA8888 GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_rgb8_rgba8 GL_OES_stand
ard_derivatives GL_OES_stencil8 GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float GL_EXT_dra
w_instanced GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_OES_depth_texture GL_OES_packed_depth_stencil GL_EXT_texture_type_2_10_10_10_REV GL_NV_conditional_render GL_OES_get_program_binary GL_APPLE_texture_max_l
evel GL_EXT_discard_framebuffer GL_EXT_read_format_bgra GL_EXT_frag_depth GL_NV_fbo_color_attachments GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_array_object GL_ANGLE_pack_reverse_row_order GL_ANGLE_t
exture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_EXT_occlusion_query_boolean GL_EXT_robustness GL_EXT_texture_rg GL_EXT_unpack_subimage GL_NV_draw_buffers GL_NV_read_buffer GL_NV_read_depth GL_NV_read_
depth_stencil GL_NV_read_stencil GL_EXT_draw_buffers GL_EXT_map_buffer_range GL_KHR_debug GL_KHR_robustness GL_NV_pixel_buffer_object GL_OES_depth_texture_cube_map GL_OES_required_internalformat GL_OES_surfaceless
_context GL_EXT_color_buffer_float GL_EXT_sRGB_write_control GL_EXT_separate_shader_objects GL_EXT_shader_group_vote GL_EXT_shader_integer_mix GL_INTEL_performance_query GL_EXT_base_instance GL_EXT_compressed_ETC1
_RGB8_sub_texture GL_EXT_copy_image GL_EXT_draw_buffers_indexed GL_EXT_draw_elements_base_vertex GL_EXT_polygon_offset_clamp GL_EXT_texture_border_clamp GL_KHR_blend_equation_advanced GL_KHR_context_flush_control
GL_OES_copy_image GL_OES_draw_buffers_indexed GL_OES_draw_elements_base_vertex GL_OES_sample_shading GL_OES_sample_variables GL_OES_shader_multisample_interpolation GL_OES_texture_border_clamp GL_EXT_blend_func_ex
tended GL_EXT_float_blend GL_EXT_texture_sRGB_R8 GL_KHR_no_error GL_OES_EGL_image_external_essl3 GL_EXT_clip_cull_distance GL_EXT_disjoint_timer_query GL_EXT_texture_compression_s3tc_srgb GL_MESA_shader_integer_fu
nctions GL_EXT_clip_control GL_EXT_color_buffer_half_float GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_semaphore GL_EXT_semaphore_fd GL_EXT_texture_compression_bptc GL_KHR_parallel_shader_compile GL_EXT_EG
L_image_storage GL_EXT_shader_framebuffer_fetch_non_coherent GL_EXT_texture_shadow_lod GL_INTEL_blackhole_render GL_MESA_framebuffer_flip_y GL_EXT_demote_to_helper_invocation GL_EXT_depth_clamp GL_EXT_texture_quer
y_lod GL_MESA_bgra
00:00:00.353 [backend/drm/drm.c:1158] Scanning DRM connectors on /dev/dri/card0
00:00:00.355 [backend/drm/drm.c:1212] Found connector 'VGA-1'
00:00:00.356 [backend/drm/drm.c:1212] Found connector 'HDMI-A-1'
00:00:00.375 [backend/drm/drm.c:1212] Found connector 'DP-1'
00:00:00.375 [backend/drm/drm.c:1248] 'DP-1' connected
00:00:00.375 [backend/drm/drm.c:1260] Physical size: 530x300
00:00:00.375 [backend/drm/drm.c:1300] Detected modes:
00:00:00.375 [backend/drm/drm.c:1322]   1920x1080@60000 (preferred)
00:00:00.375 [backend/drm/drm.c:1322]   1920x1080@74973
00:00:00.375 [backend/drm/drm.c:1322]   1920x1080@60000
00:00:00.375 [backend/drm/drm.c:1322]   1920x1080@59940
00:00:00.375 [backend/drm/drm.c:1322]   1920x1080@50000
00:00:00.375 [backend/drm/drm.c:1322]   1600x1200@60000
00:00:00.375 [backend/drm/drm.c:1322]   1680x1050@59954
00:00:00.375 [backend/drm/drm.c:1322]   1280x1024@75025
00:00:00.375 [backend/drm/drm.c:1322]   1280x1024@60020
00:00:00.375 [backend/drm/drm.c:1322]   1440x900@59887
00:00:00.375 [backend/drm/drm.c:1322]   1280x960@60000
00:00:00.375 [backend/drm/drm.c:1322]   1152x864@75000
00:00:00.375 [backend/drm/drm.c:1322]   1280x720@60000
00:00:00.375 [backend/drm/drm.c:1322]   1280x720@60000
00:00:00.375 [backend/drm/drm.c:1322]   1280x720@59940
00:00:00.375 [backend/drm/drm.c:1322]   1280x720@50000
00:00:00.375 [backend/drm/drm.c:1322]   1024x768@75029
00:00:02.618 [libseat] [libseat/backend/seatd.c:222] Disabling seattloupor), code Value (no extension), sequence 322, value 0ect_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown: The name o
rg.freedesktop.UPower was n00:00:02.845 [backend/session/session.c:326] Failed to close device 9: Bad file descriptor
00:00:02.869 [backend/drm/backend.c:127] DRM fd paused
[5961:5976:0922/095104.585771:ERROR:connection.cc(66)] X connection error received.
Qt WARNING: The X11 connection broke (error 1). Did the X11 server die?
Segmentation fault (core dumped)

Build fails

Build seems to fail with latest master. Is it just me?
Using up-to-date Arch Linux.

[289/312] Compiling C object labwc.p/src_xdg.c.o
FAILED: labwc.p/src_xdg.c.o
cc -Ilabwc.p -I. -I.. -Iinclude -I../include -Isubprojects/wlroots/include -I../subprojects/wlroots/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/libxml2 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -std=c11 -g -DWLR_USE_UNSTABLE -Wno-unused-parameter -Wundef '-DLABWC_VERSION="0.3.0-122-g6396608"' -pthread -MD -MQ labwc.p/src_xdg.c.o -MF labwc.p/src_xdg.c.o.d -o labwc.p/src_xdg.c.o -c ../src/xdg.c
../src/xdg.c: In function ‘handle_request_maximize’:
../src/xdg.c:137:54: error: ‘struct wlr_xdg_toplevel’ has no member named ‘client_pending’
137 | view_maximize(view, surface->toplevel->client_pending.maximized);
| ^~
[294/312] Compiling C object labwc.p/src_xwayland.c.o
ninja: build stopped: subcommand failed.

tests implicitly depend on wlroots

Default compiler on BSDs doesn't include directories where packages are installed to avoid tainting build environment. This works fine with Meson which asks pkg-config for include directories of each dependency. However, tests here have a transitive dependency on wlroots that's not explicitly declared in meson.build.

$ cc --version
FreeBSD clang version 10.0.1 (git@github.com:llvm/llvm-project.git llvmorg-10.0.1-rc2-0-g77d76b71d7d)
Target: x86_64-unknown-freebsd13.0
Thread model: posix
InstalledDir: /usr/bin

$ pkg info -l wlroots
wlroots-0.11.0:
[...]
        /usr/local/include/wlr/types/wlr_keyboard.h

$ meson _build && ninja -C _build
[20/49] Compiling C object tests/t1000_rcxml_simple_parse.p/t1000-rcxml-simple-parse.c.o
FAILED: tests/t1000_rcxml_simple_parse.p/t1000-rcxml-simple-parse.c.o
ccache cc -Itests/t1000_rcxml_simple_parse.p -Itests -I../tests -I../include -Xclang -fcolor-diagnostics -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Werror -std=c11 -g -DWLR_USE_UNSTABLE -Wno-unused-parameter -Wundef -MD -MQ tests/t1000_rcxml_simple_parse.p/t1000-rcxml-simple-parse.c.o -MF tests/t1000_rcxml_simple_parse.p/t1000-rcxml-simple-parse.c.o.d -o tests/t1000_rcxml_simple_parse.p/t1000-rcxml-simple-parse.c.o -c ../tests/t1000-rcxml-simple-parse.c
In file included from ../tests/t1000-rcxml-simple-parse.c:7:
../include/rcxml.h:6:10: fatal error: 'wlr/types/wlr_keyboard.h' file not found
#include <wlr/types/wlr_keyboard.h>
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
[21/49] Compiling C object tests/t1001_rcxml_nodenames_simple.p/t1001-rcxml-nodenames-simple.c.o
FAILED: tests/t1001_rcxml_nodenames_simple.p/t1001-rcxml-nodenames-simple.c.o
ccache cc -Itests/t1001_rcxml_nodenames_simple.p -Itests -I../tests -I../include -Xclang -fcolor-diagnostics -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -Werror -std=c11 -g -DWLR_USE_UNSTABLE -Wno-unused-parameter -Wundef -MD -MQ tests/t1001_rcxml_nodenames_simple.p/t1001-rcxml-nodenames-simple.c.o -MF tests/t1001_rcxml_nodenames_simple.p/t1001-rcxml-nodenames-simple.c.o.d -o tests/t1001_rcxml_nodenames_simple.p/t1001-rcxml-nodenames-simple.c.o -c ../tests/t1001-rcxml-nodenames-simple.c
In file included from ../tests/t1001-rcxml-nodenames-simple.c:8:
../include/rcxml.h:6:10: fatal error: 'wlr/types/wlr_keyboard.h' file not found
#include <wlr/types/wlr_keyboard.h>
         ^~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.

Only border

Hi.

This is a feature I really want. Will it be possible in the future to just have a border around windows like sway, bspwm or any other tiling window managers? I really like the minimalistic of tiling window managers but not the tiling part of them.

Example:
The user can set the border width and color. Like 2px and orange will get a 2px and orange border around the windows.

Unable to drag windows

Hello

I am trying out labwc to keep a wm that resembles openbox from xorg.

I have some issues that may stem from bad configs perhaps. I reconfigured/restarted labwc several times.

Some files

rc.xml
<?xml version="1.0" encoding="UTF-8"?>

<!-- Use <openbox_config> as root element for openbox compatibility -->
<openbox_config>

<!-- labwc specific settings - additional to openbox -->
<lab>
  <!-- Use server-side decorations for xdg-shell views if CSD can be disabled -->
  <xdg_shell_server_side_deco>yes</xdg_shell_server_side_deco>
</lab>

<theme>
  <!-- <name>Clearlooks-3.4</name> -->
  <!-- This font size also determintes the height of the window title bar -->
  <font place="ActiveWindow">
    <name>JetBrains Mono</name>
    <size>10</size>
  </font>
</theme>

<!-- see labwc-actions(5) for a list of supported actions -->
<keyboard>
  <keybind key="A-Escape">
    <action name="Exit"/>
  </keybind>
  <keybind key="A-Tab">
    <action name="NextWindow"/>
  </keybind>
  <keybind key="S-T">
    <action name="Execute"><command>alacritty</command></action>
  </keybind>
</keyboard>

<mouse>
  <context name="Frame">
    <mousebind button="A-Left" action="Drag">
      <action name="Move"/>
    </mousebind>
    <mousebind button="A-Right" action="Drag">
      <action name="Resize"/>
    </mousebind>
  </context>
</mouse>
</openbox_config>
Simple labwc startup log
[labwc] info: read environment file (/home/julius/.config/labwc/environment)
[labwc] info: read config file (/home/julius/.config/labwc/rc.xml)
[labwc] info: tap enabled for libinput device
[labwc] info: cannot find theme (Clearlooks-3.4), using built-in
[labwc] info: read menu file (/home/julius/.config/labwc/menu.xml)
[labwc] info: run autostart file (/home/julius/.config/labwc/autostart)

My issues

  1. Trying to open alacritty (terminal) with Super-T does nothing, I have to open it manually from the menu.xml.

  2. Trying to open telegram-desktop from both menu.xml and alacritty results in a segfault.

  3. Trying to move or resize the windows does nothing.

  4. Trying to switch to tty1 or any other does not work. Do I need to add a keybind?

  5. The above log mentions

    [labwc] info: cannot find theme (Clearlooks-3.4), using built-in

    Where would I get this theme from?

Support sub-menus

Is this a possibility?

I couldn't see a reference in the scope but it should be possible and maybe something for the future, in the name of user friendliness.

I already have code that generates a menu.xml file.

It is based on work by @jamesbond3142 - see fatdog/openbox-xdgmenu depending on fatdog/gnome-menus-2

I just stripped out the icon code, hence removing gtk dependency and formatted xml a bit better

Code zipped file below;
openbox-xdgmenu.zip

Used with -p option categories are ignored and a monolithic menu is built and works in labwc, but of course goes off screen if many GUI packages are installed.

20211023_18h16m02s_grim

Similar could be written in pure shell but would be a little slower, but exactly the same end result could be achieved.

Example output with categories enabled:

<?xml version="1.0" encoding="UTF-8"?>

<openbox_menu>
<menu id="xdg-menu-Accessories" label="Accessories">
  <item label="Graphical Disk Map">
	<action name="Execute"><command>gdmap</command></action>
  </item>
  <item label="PeasyDiff compare two files/folders">
	<action name="Execute"><command>peasydiff</command></action>
  </item>
  <item label="PupMenu">
	<action name="Execute"><command>PupMenu</command></action>
  </item>
  <item label="PupMenuEdit">
	<action name="Execute"><command>PupMenuEdit</command></action>
  </item>
  <item label="UExtract">
	<action name="Execute"><command>/usr/local/apps/UExtract/AppRun</command></action>
  </item>
  <item label="X Virtual Keyboard">
	<action name="Execute"><command>x-keyboard</command></action>
  </item>
  <item label="Xarchiver">
	<action name="Execute"><command>xarchiver   </command></action>
  </item>
  <item label="pRun">
	<action name="Execute"><command>prun</command></action>
  </item>
  <item label="pupMd5sum Graphical Checksum">
	<action name="Execute"><command>pupmd5sum.sh</command></action>
  </item>
</menu>
<menu id="xdg-menu-Games" label="Games">
  <item label="Pipe Panic">
	<action name="Execute"><command>pipepanic</command></action>
  </item>
</menu>
<menu id="xdg-menu-Graphics" label="Graphics">
  <item label="GNU Image Manipulation Program">
	<action name="Execute"><command>gimp-2.10</command></action>
  </item>
</menu>
<menu id="xdg-menu-Internet" label="Internet">
  <item label="Firewall Setup">
	<action name="Execute"><command>firewall_ng</command></action>
  </item>
  <item label="PcurlFtp file sharing">
	<action name="Execute"><command>rox -d /root/File-Sharing</command></action>
  </item>
  <item label="PeasyPort LAN scanner">
	<action name="Execute"><command>peasyport</command></action>
  </item>
  <item label="PureFTPd">
	<action name="Execute"><command>run-pureftpd</command></action>
  </item>
  <item label="YASSM Samba share mounter">
	<action name="Execute"><command>yassm</command></action>
  </item>
</menu>
<menu id="xdg-menu-Office" label="Office">
  <item label="AbiWord">
	<action name="Execute"><command>abiword</command></action>
  </item>
  <item label="Gnumeric">
	<action name="Execute"><command>gnumeric</command></action>
  </item>
</menu>
<!-- snipped here for brevity -->
</openbox_menu>

Anyway, supporting the Categories would be the key.

What would be the simplest and of course cleanest way to go about adding sub-menus?

Possibilities that I see:

  • use the output as above - but that would involve pipe menus - probably a lot of work
  • separate each sub-menu into it's own menu, and having the root menu execute each sub-menu
  • is it already possible?
  • something else?

Thanks for reading.

Keyboard is going crazy

Hi.

I don't know if this is an issue with LABWC or their is some error in my configuration.
But after a while when I am in a terminal my keyboard is going crazy and backspace starting and cant be stopped (tried both Alacritty & Gnome-terminal).
Move cursor to Firefox and program starts scrolling and can't be stopped and if I move mouse over tabs that are open it starts changing tabs.
So keyboard is going crazy :)

I am swedish speaking and have a 4K monitor connected to Displayport.
Don't know if this is the best solution for wlr-randr. I don't see any other modes than 1024x768 when typing wlr-randr in terminal.

My configs:

  • environment
    XKB_DEFAULT_LAYOUT=se

  • autostart
    wlr-randr --output X11-1 --custom-mode 3840x2160@60Hz &
    swaybg -c '#113344' >/dev/null 2>&1 &

Using openSUSE Tumbleweed and build LABWC packages using openSUSE Build Service

Hang for seconds then crash when launch applications.

Getting a hang for seconds and then crash when I want to launch terminal and other program. I got this logs. Wlroots issue or labwc itself, thanks.

labwc: render/wlr_texture.c:28: wlr_texture_from_pixels: Assertion `stride > 0' failed.
 err: wayland.c:1074: failed to read events from the Wayland socket: Broken pipe
 err: wayland.c:1492: failed to flush wayland socket: Broken pipe
 err: wayland.c:1492: failed to flush wayland socket: Broken pipe
 err: wayland.c:1492: failed to flush wayland socket: Broken pipe

[Feature Request] Workspaces

Last time I used labwc, resizing feels a bit finicky doing it from corners of a window. It would be nice to have a function to use Alt+Right mouse button to resize it anywhere within the window and Alt+Left mouse button for moving a window.

Is it out of the scope to support both of these features?

Stuck alt-tab cycle-window OSD

It's been reported that someone got stuck in the alt-tab cycler and that has higher priority than switching to a tty so couldn't escape it.

Need to find a way of reproducing the issue before trying to fix it.

Worth considering:

  1. Maybe need to move the cycle_view related code from keyboard_modifiers_notify() to handle_compositor_keybindings().
  2. After handle_keybinding() is called for WL_KEYBOARD_KEY_STATE_PRESSED, maybe we need to prevent the equivalent WL_KEYBOARD_KEY_STATE_RELEASED being forwarded to clients.

labwc doesn't handle multiple monitors correctly

I compiled labwc with gcc, system is Void Linux x86-64 glibc. GPU driver is nouveau (mesa-dri).

When I run # labwc -s sakura, the window with sakura is empty. Exiting labwc using the exit option in the menu works, but it produces segfault. Output from stderr:

[labwc] cannot find rc.xml config file
[labwc] loading default key bindings
[labwc] cannot find theme (Clearlooks), using built-in
Gdk-Message: 20:09:51.074: Unable to load hand2 from the cursor theme

(sakura:1189): VTE-WARNING **: 20:09:51.075: (../src/vtegtk.cc:2447):int vte_terminal_match_add_regex(VteTerminal*, VteRegex*, guint32): runtime check failed: (_vte_regex_has_multiline_compile_flag(regex))

(sakura:1189): VTE-WARNING **: 20:09:51.075: (../src/vtegtk.cc:2447):int vte_terminal_match_add_regex(VteTerminal*, VteRegex*, guint32): runtime check failed: (_vte_regex_has_multiline_compile_flag(regex))
Gdk-Message: 20:10:03.313: Unable to load hand2 from the cursor theme

(sakura:1194): VTE-WARNING **: 20:10:03.314: (../src/vtegtk.cc:2447):int vte_terminal_match_add_regex(VteTerminal*, VteRegex*, guint32): runtime check failed: (_vte_regex_has_multiline_compile_flag(regex))

(sakura:1194): VTE-WARNING **: 20:10:03.314: (../src/vtegtk.cc:2447):int vte_terminal_match_add_regex(VteTerminal*, VteRegex*, guint32): runtime check failed: (_vte_regex_has_multiline_compile_flag(regex))
Gdk-Message: 20:10:14.693: Error reading events from display: Connection reset by peer
Gdk-Message: 20:10:14.698: Error reading events from display: Broken pipe

Output from kernel:

Oct 22 20:10:14 [kernel] [  368.704214] labwc[1184]: segfault at 21 ip 0000000000000021 sp 00007fffb3c6f658 error 14 in labwc[400000+5000]

Similar issue happens with other programs such as foot, only the output from the respective programs differ. When I use Alt + Esc instead of the exit menu option, terminal contents quickly flash, then the display goes black and I have to manually restart the machine.

Steps to reproduce:
no idea

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.