Sway/I3 inspired tiling window manager for Wayfire

Overview

Swayfire

Sway/I3 inspired tiling window manager for Wayfire.

This project aims to emulate and improve upon sway/i3wm features as a plugin for the Wayfire compositor.

Currently, Swayfire implements most basic tiling features such as splits and window movement and navigation keys. Swayfire also supports mouse resizing and moving of windows/tiled parents.

NOTE: Swayfire is currently still in early development and not meant to be used yet.

Notable planned features:

  • Sway/i3-like Window decorations (borders, titles, and tabbed and stacked titles as in Sway/i3)
  • Sway/i3 ipc (wherever is makes sense)
  • Option for rounded corners for floating windows and window groups
  • Scratchpad

Installation

To build and install from source:

# Swayfire is developped using clang, but should compile with gcc as
# well at least. The following exports are optional:
export CC=clang
export CXX=clang++

# Generate the build directory:
meson setup --prefix /usr build

# To compile Swayfire:
meson compile -C build

# To install Swayfire:
meson install -C build

Alternatively, Swayfire has been packaged for the following distros:

Arch Linux

swayfire-git is available in the AUR.

yay -S swayfire-git

Contributing

Contributions are welcome.

Swayfire uses the c++17 standard and a modified llvm coding style defined in .clang_format. Please run meson compile format -C build to run the formatter before every commit.

Comments
  • build: don't use wayfire's pkgconfig metadata_dir var

    build: don't use wayfire's pkgconfig metadata_dir var

    Hi! Before commenting about this PR, thank you for this nice plugin.

    I've been trying NixOS with Wayfire and wanted to install a plugin outside of the default ones. The problem occurrs during the installation of the .xml metadata files because Nix won't let me doing it on the Wayfire's prefix. This PR has a more complete explanation and a half part of my solution.

    Looking around other external plugins, I've found this commit by the same author of the mentioned PR and it clicked with me. So, I forked this repo, commited almost the same changes, set the WAYFIRE_PLUGIN_* env variables, and currently it works very well!

    I've never used meson before, but I hope it's the solution I'm looking for.

    opened by EzequielRamis 5
  • deco: split decoration and surface, improve performances when decoration is hidden

    deco: split decoration and surface, improve performances when decoration is hidden

    Split the Surface from the Decoration to make it compatible with the wayfire 0.8 API. Remove the surface of a window if its decoration is meant to be hidden (either toggled manually or when in fullscreen). It should improve performances by allowing Wayfire to perform a scan out when possible (on fullscreen windows, for example).

    opened by aruhier 5
  • deco: Implement

    deco: Implement "should corner be rounded" detection

    Currently, corner radii >0 are pretty ugly and useless since it is blindly applied to every corner. We need to detect whether a corner should be rounded or not so as to avoid "holes" as described in https://github.com/Javyre/swayfire/issues/19#issuecomment-847123760

    opened by Javyre 4
  • Added PKGBUILD for easy installation on Arch

    Added PKGBUILD for easy installation on Arch

    Hello there!

    First, thanks for the work you've done on this! Since this module is relatively new, there isn't an AUR submission for this. I thought I might want to contribute the PKGBUILD file that I've made to install this module on my Arch system, in the hope that it helps potential users, and when this module is ready for prime time, this file can be submitted to the Arch User Repository, or even packaged in the official distro!

    opened by WaseemAlkurdi 3
  • build fail with latest wayfire

    build fail with latest wayfire

    [2/8] Compiling C++ object src/core/libswayfire.so.p/grab.cpp.o FAILED: src/core/libswayfire.so.p/grab.cpp.o c++ -Isrc/core/libswayfire.so.p -Isrc/core -I../src/core -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/pixman-1 -I/usr/include/pango-1.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/libdrm -I/usr/include/libevdev-1.0 -I/usr/include/libxml2 -fdiagnostics-color=always -fpch-preprocess -include prefix.hpp -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -std=c++17 -O0 -g -DWLR_USE_UNSTABLE -DWAYFIRE_PLUGIN -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -Wp,-D_GLIBCXX_ASSERTIONS -fPIC -pthread -MD -MQ src/core/libswayfire.so.p/grab.cpp.o -MF src/core/libswayfire.so.p/grab.cpp.o.d -o src/core/libswayfire.so.p/grab.cpp.o -c ../src/core/grab.cpp

    opened by Whernog 2
  • Fails to build with latest Wayfire

    Fails to build with latest Wayfire

    Regressed by https://github.com/wayfirewm/wayfire/commit/a79978b20b0d.

    In file included from src/core/binding.cpp:2:
    src/core/core.hpp:1182:34: error: no type named 'view_change_viewport_signal' in namespace 'wf'; did you mean 'view_change_workspace_signal'?
                    dynamic_cast<wf::view_change_viewport_signal *>(data_);
                                 ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
                                     view_change_workspace_signal
    /usr/include/wayfire/signal-definitions.hpp:604:8: note: 'view_change_workspace_signal' declared here
    struct view_change_workspace_signal : public _view_signal
           ^
    
    opened by jbeich 2
  • Build fails

    Build fails

    After following the directions in the README, the build fails with this output:

    FAILED: src/deco/libswayfire-deco.so.p/deco.cpp.o
    ccache c++ -Isrc/deco/libswayfire-deco.so.p -Isrc/deco -I../src/deco -I/usr/lib64/libffi/include -I/usr/include/libdrm -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/uuid -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -std=c++17 -O3 -DWLR_USE_UNSTABLE -DWAYFIRE_PLUGIN -fPIC -fpch-preprocess -include prefix.hpp -MD -MQ src/deco/libswayfire-deco.so.p/deco.cpp.o -MF src/deco/libswayfire-deco.so.p/deco.cpp.o.d -o src/deco/libswayfire-deco.so.p/deco.cpp.o -c ../src/deco/deco.cpp
    ../src/deco/deco.cpp: In member function 'void ViewDecoration::detach_surface()':
    ../src/deco/deco.cpp:57:56: error: no match for 'operator=' (operand types are 'std::unique_ptr<wf::surface_interface_t ' and 'void')
    
    opened by wrkzk 2
  • Decorations: segfault when closing a window

    Decorations: segfault when closing a window

    Wayfire segfaults a bit randomly when closing a window with Swayfire-decorations enabled:

    Log: wayfire_segv.log Trace: wayfire_strace.log

    How to reproduce

    After starting Wayfire, open 2 windows in tiled mode, close one of it, Wayfire crashes. Doing other actions like changing workspace seem to inhibit the issue.

    opened by aruhier 2
  • core: Fullscreening views not picked up by GeoEnforcer

    core: Fullscreening views not picked up by GeoEnforcer

    Open a view. Fullscreen it with the WMActions plugin. The view is not resized but instead weirdly squished in place by the geoenforcer.

    reported by @aruhier

    opened by Javyre 2
  • Unbreak build on non-glibc systems

    Unbreak build on non-glibc systems

    Found on FreeBSD but Alpine Linux (musl) maybe affected as well.

    $ meson setup /tmp/swayfire_build && meson compile -C /tmp/swayfire_build
    src/pch/prefix.hpp:10:10: fatal error: 'bits/stdint-intn.h' file not found
    #include <bits/stdint-intn.h>
             ^~~~~~~~~~~~~~~~~~~~
    $ meson setup -Db_pch=false /tmp/swayfire_build && meson compile -C /tmp/swayfire_build
    src/core/core.hpp:4:10: fatal error: 'bits/stdint-intn.h' file not found
    #include <bits/stdint-intn.h>
             ^~~~~~~~~~~~~~~~~~~~
    
    opened by jbeich 1
  • answer to question from IRC

    answer to question from IRC

    Hi, I just saw your question on IRC but you've disconnected :)

    I'm having some trouble implementing interactive resizing using the mouse. The views seem to lag behind when their geometry is set it doesnt apply it right away and so getting their geometry with get_wm_geometry is unreliable as well using set_resizing only solves this lag in a few simple cases where only a single view is being resized, but it still happens when resizing multiple views at the same time when theyre tiled together

    The problem is the following: Wayfire does not resize the views directly. Instead, the Wayland compositor sends a request to the client to resize to the new size. The client needs to submit a new buffer (which might not even have the requested size). So, when you set_geometry() or similar, the view does not really resize, it will resize when the client submits a new buffer.

    There are two main ways to fix this issue. One of these is the transaction system sway and river use. They try to ensure every frame is perfect by waiting for all clients to resize and then updating the contents on the screen. This approach is a bit complicated, requires synchronizing the state, timeouts when a client is not responsive, etc. It might be possible to implement in Wayfire once https://github.com/WayfireWM/wayfire/issues/995 is done.

    The another way is much more hacky, but IMO it works well enough in practice. The idea is to force the position of the views with a transformer (scaling and translating them), and then waiting for their size to change, in which case we just remove the transformers. This is what simple-tile does. https://github.com/WayfireWM/wayfire/blob/master/plugins/tile/tree.cpp#L261

    I hope this answers your question.

    opened by ammen99 1
  • Is this still maintained?

    Is this still maintained?

    Hello, I am just wondering if this project is still maintained or not. Obviously if you don't have time that is fine but I am just wondering as if you don't have plans to maintain it may I recommend archiving it so people know? Thanks for this awesome plugin!

    opened by Vixeliz 0
  • Adjust meson.build dependency versions for correct packages

    Adjust meson.build dependency versions for correct packages

    This is related to #50

    The dependencies for Wayfire seem incorrectly set. Attempting to build via either the AUR or source results in dependency errors. Looking at the base repository for Wayfire the >=0.8.0 version is set for wf-config.

    Adjusting the dependencies according to these changes makes the package buildable and installable again.

    opened by Epzillon 0
  • Unmatching version while installing wayfire + alot of error messages

    Unmatching version while installing wayfire + alot of error messages

    I tried installing it with ninja but i got an ninja: error: loading 'build.ninja': No such file or directory

    So i generated a ninja build with meson, but it requests a wrong version (that apparently doesn't exists)

    so after i changed the version inside ninja.build i got this as return

    `The Meson build system
    Version: 0.63.0
    Source dir: /home/lavender/swayfire
    Build dir: /home/lavender/swayfire/build
    Build type: native build
    Project name: swayfire
    Project version: 0.1
    C compiler for the host machine: ccache cc (gcc 12.1.1 "cc (GCC) 12.1.1 20220730")
    C linker for the host machine: cc ld.bfd 2.38
    C++ compiler for the host machine: ccache c++ (gcc 12.1.1 "c++ (GCC) 12.1.1 20220730")
    C++ linker for the host machine: c++ ld.bfd 2.38
    Host machine cpu family: x86_64
    Host machine cpu: x86_64
    Found pkg-config: /usr/bin/pkg-config (1.8.0)
    Dependency wayfire found: NO found 0.7.3 but need: '>=0.8.0'
    Found CMake: /usr/bin/cmake (3.23.3)
    Run-time dependency wayfire found: NO (tried cmake)
    
    meson.build:16:0: ERROR: Invalid version of dependency, need 'wayfire' ['>=0.8.0'] found '0.7.3'.
    
    A full log can be found at /home/lavender/swayfire/build/meson-logs/meson-log.txt
    
    ~/swayfire master`
    
    
    The Meson build system
    Version: 0.63.0
    Source dir: /home/lavender/swayfire
    Build dir: /home/lavender/swayfire/build
    Build type: native build
    Project name: swayfire
    Project version: 0.1
    C compiler for the host machine: ccache cc (gcc 12.1.1 "cc (GCC) 12.1.1 20220730")
    C linker for the host machine: cc ld.bfd 2.38
    C++ compiler for the host machine: ccache c++ (gcc 12.1.1 "c++ (GCC) 12.1.1 20220730")
    C++ linker for the host machine: c++ ld.bfd 2.38
    Host machine cpu family: x86_64
    Host machine cpu: x86_64
    Found pkg-config: /usr/bin/pkg-config (1.8.0)
    Run-time dependency wayfire found: YES 0.7.3
    Run-time dependency wlroots found: YES 0.15.1
    Run-time dependency wf-config found: YES 0.7.1
    Run-time dependency cairo found: YES 1.17.6
    Run-time dependency pixman-1 found: YES 0.40.0
    DEPRECATION: target swayfire-deco links against shared module swayfire, which is incorrect.
                 This will be an error in the future, so please use shared_library() for swayfire instead.
                 If shared_module() was used for swayfire because it has references to undefined symbols,
                 use shared_libary() with `override_options: ['b_lundef=false']` instead.
    Message:
    ----------------
    swayfire 0.1
    ----------------
    
    Build targets in project: 2
    
    Found ninja-1.11.0 at /usr/bin/ninja
    
    ~/swayfire master*
    ❯ sudo ninja -C build install
    
    [sudo] password for lavender:
    ninja: Entering directory `build'
    [4/12] Compiling C++ object src/core/libswayfire.so.p/resize.cpp.o
    FAILED: src/core/libswayfire.so.p/resize.cpp.o
    ccache c++ -Isrc/core/libswayfire.so.p -Isrc/core -I../src/core -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/pixman-1 -I/usr/include/pango-1.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/libdrm -I/usr/include/libevdev-1.0 -I/usr/include/libxml2 -fdiagnostics-color=always -fpch-preprocess -include prefix.hpp -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -std=c++17 -O0 -g -DWLR_USE_UNSTABLE -DWAYFIRE_PLUGIN -fPIC -pthread -MD -MQ src/core/libswayfire.so.p/resize.cpp.o -MF src/core/libswayfire.so.p/resize.cpp.o.d -o src/core/libswayfire.so.p/resize.cpp.o -c ../src/core/resize.cpp
    In file included from ../src/core/resize.cpp:2:
    ../src/core/core.hpp: In lambda function:
    ../src/core/core.hpp:1183:34: error: ‘view_change_workspace_signal’ in namespace ‘wf’ does not name a type
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ../src/core/core.hpp:1183:63: error: expected ‘>’ before ‘*’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                               ^
    ../src/core/core.hpp:1183:63: error: expected ‘(’ before ‘*’ token
    ../src/core/core.hpp:1183:64: error: expected primary-expression before ‘>’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                                ^
    ../src/core/core.hpp:1183:72: error: expected ‘)’ before ‘;’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                                        ^
    ../src/core/resize.cpp: In member function ‘virtual wf::dimensions_t SplitNode::try_resize_child(Node, wf::dimensions_t, uint32_t)’:
    ../src/core/resize.cpp:242:1: warning: control reaches end of non-void function [-Wreturn-type]
      242 | }
          | ^
    [5/12] Compiling C++ object src/core/libswayfire.so.p/grab.cpp.o
    FAILED: src/core/libswayfire.so.p/grab.cpp.o
    ccache c++ -Isrc/core/libswayfire.so.p -Isrc/core -I../src/core -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/pixman-1 -I/usr/include/pango-1.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/libdrm -I/usr/include/libevdev-1.0 -I/usr/include/libxml2 -fdiagnostics-color=always -fpch-preprocess -include prefix.hpp -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -std=c++17 -O0 -g -DWLR_USE_UNSTABLE -DWAYFIRE_PLUGIN -fPIC -pthread -MD -MQ src/core/libswayfire.so.p/grab.cpp.o -MF src/core/libswayfire.so.p/grab.cpp.o.d -o src/core/libswayfire.so.p/grab.cpp.o -c ../src/core/grab.cpp
    In file included from ../src/core/grab.hpp:4,
                     from ../src/core/grab.cpp:1:
    ../src/core/core.hpp: In lambda function:
    ../src/core/core.hpp:1183:34: error: ‘view_change_workspace_signal’ in namespace ‘wf’ does not name a type
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ../src/core/core.hpp:1183:63: error: expected ‘>’ before ‘*’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                               ^
    ../src/core/core.hpp:1183:63: error: expected ‘(’ before ‘*’ token
    ../src/core/core.hpp:1183:64: error: expected primary-expression before ‘>’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                                ^
    ../src/core/core.hpp:1183:72: error: expected ‘)’ before ‘;’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                                        ^
    [6/12] Compiling C++ object src/core/libswayfire.so.p/binding.cpp.o
    FAILED: src/core/libswayfire.so.p/binding.cpp.o
    ccache c++ -Isrc/core/libswayfire.so.p -Isrc/core -I../src/core -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/pixman-1 -I/usr/include/pango-1.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/libdrm -I/usr/include/libevdev-1.0 -I/usr/include/libxml2 -fdiagnostics-color=always -fpch-preprocess -include prefix.hpp -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -std=c++17 -O0 -g -DWLR_USE_UNSTABLE -DWAYFIRE_PLUGIN -fPIC -pthread -MD -MQ src/core/libswayfire.so.p/binding.cpp.o -MF src/core/libswayfire.so.p/binding.cpp.o.d -o src/core/libswayfire.so.p/binding.cpp.o -c ../src/core/binding.cpp
    In file included from ../src/core/binding.cpp:2:
    ../src/core/core.hpp: In lambda function:
    ../src/core/core.hpp:1183:34: error: ‘view_change_workspace_signal’ in namespace ‘wf’ does not name a type
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ../src/core/core.hpp:1183:63: error: expected ‘>’ before ‘*’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                               ^
    ../src/core/core.hpp:1183:63: error: expected ‘(’ before ‘*’ token
    ../src/core/core.hpp:1183:64: error: expected primary-expression before ‘>’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                                ^
    ../src/core/core.hpp:1183:72: error: expected ‘)’ before ‘;’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                                        ^
    [7/12] Compiling C++ object src/core/libswayfire.so.p/core.cpp.o
    FAILED: src/core/libswayfire.so.p/core.cpp.o
    ccache c++ -Isrc/core/libswayfire.so.p -Isrc/core -I../src/core -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/pixman-1 -I/usr/include/pango-1.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/libdrm -I/usr/include/libevdev-1.0 -I/usr/include/libxml2 -fdiagnostics-color=always -fpch-preprocess -include prefix.hpp -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -std=c++17 -O0 -g -DWLR_USE_UNSTABLE -DWAYFIRE_PLUGIN -fPIC -pthread -MD -MQ src/core/libswayfire.so.p/core.cpp.o -MF src/core/libswayfire.so.p/core.cpp.o.d -o src/core/libswayfire.so.p/core.cpp.o -c ../src/core/core.cpp
    In file included from ../src/core/core.cpp:1:
    ../src/core/core.hpp: In lambda function:
    ../src/core/core.hpp:1183:34: error: ‘view_change_workspace_signal’ in namespace ‘wf’ does not name a type
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ../src/core/core.hpp:1183:63: error: expected ‘>’ before ‘*’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                               ^
    ../src/core/core.hpp:1183:63: error: expected ‘(’ before ‘*’ token
    ../src/core/core.hpp:1183:64: error: expected primary-expression before ‘>’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                                ^
    ../src/core/core.hpp:1183:72: error: expected ‘)’ before ‘;’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                                        ^
    ../src/core/core.cpp: In member function ‘virtual void SplitNode::notify_child_title_changed(Node)’:
    ../src/core/core.cpp:598:49: warning: unused parameter ‘child’ [-Wunused-parameter]
      598 | void SplitNode::notify_child_title_changed(Node child) { emit_title_changed(); }
          |                                            ~~~~~^~~~~
    ../src/core/core.cpp: In member function ‘virtual Node SplitNode::get_adjacent(Node, Direction)’:
    ../src/core/core.cpp:701:9: warning: this statement may fall through [-Wimplicit-fallthrough=]
      701 |         switch (dir) {
          |         ^~~~~~
    ../src/core/core.cpp:717:5: note: here
      717 |     case SplitType::HSPLIT:
          |     ^~~~
    ../src/core/core.cpp:733:1: warning: control reaches end of non-void function [-Wreturn-type]
      733 | }
          | ^
    ../src/core/core.cpp: In member function ‘virtual bool SplitNode::move_child(Node, Direction)’:
    ../src/core/core.cpp:867:5: warning: this statement may fall through [-Wimplicit-fallthrough=]
      867 |     }
          |     ^
    ../src/core/core.cpp:868:5: note: here
      868 |     case SplitType::HSPLIT:
          |     ^~~~
    ../src/core/core.cpp:885:1: warning: control reaches end of non-void function [-Wreturn-type]
      885 | }
          | ^
    ../src/core/core.cpp: In member function ‘virtual Node Workspace::get_adjacent(Node, Direction)’:
    ../src/core/core.cpp:1428:1: warning: control reaches end of non-void function [-Wreturn-type]
     1428 | }
          | ^
    [8/12] Compiling C++ object src/deco/libswayfire-deco.so.p/deco.cpp.o
    FAILED: src/deco/libswayfire-deco.so.p/deco.cpp.o
    ccache c++ -Isrc/deco/libswayfire-deco.so.p -Isrc/deco -I../src/deco -I/usr/include/cairo -I/usr/include/lzo -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/pixman-1 -I/usr/include/pango-1.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/libdrm -I/usr/include/libevdev-1.0 -I/usr/include/libxml2 -fdiagnostics-color=always -fpch-preprocess -include prefix.hpp -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -std=c++17 -O0 -g -DWLR_USE_UNSTABLE -DWAYFIRE_PLUGIN -fPIC -pthread -MD -MQ src/deco/libswayfire-deco.so.p/deco.cpp.o -MF src/deco/libswayfire-deco.so.p/deco.cpp.o.d -o src/deco/libswayfire-deco.so.p/deco.cpp.o -c ../src/deco/deco.cpp
    In file included from ../src/deco/deco.hpp:11,
                     from ../src/deco/deco.cpp:1:
    ../src/deco/../core/core.hpp: In lambda function:
    ../src/deco/../core/core.hpp:1183:34: error: ‘view_change_workspace_signal’ in namespace ‘wf’ does not name a type
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ../src/deco/../core/core.hpp:1183:63: error: expected ‘>’ before ‘*’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                               ^
    ../src/deco/../core/core.hpp:1183:63: error: expected ‘(’ before ‘*’ token
    ../src/deco/../core/core.hpp:1183:64: error: expected primary-expression before ‘>’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                                ^
    ../src/deco/../core/core.hpp:1183:72: error: expected ‘)’ before ‘;’ token
     1183 |                 dynamic_cast<wf::view_change_workspace_signal *>(data_);
          |                                                                        ^
    ../src/deco/deco.cpp: In member function ‘void ViewDecoration::detach_surface()’:
    ../src/deco/deco.cpp:57:56: error: no match for ‘operator=’ (operand types are ‘std::unique_ptr<wf::surface_interface_t>’ and ‘void’)
       57 |     surface = node->view->remove_subsurface(surface_ref);
          |                                                        ^
    In file included from /usr/include/c++/12.1.1/memory:76,
                     from ../src/pch/prefix.hpp:4:
    /usr/include/c++/12.1.1/bits/unique_ptr.h:422:9: note: candidate: ‘template<class _Up, class _Ep> typename std::enable_if<std::__and_<std::__and_<std::is_convertible<typename std::unique_ptr<_Up, _Ep>::pointer, typename std::__uniq_ptr_impl<_Tp, _Dp>::pointer>, std::__not_<std::is_array<_Up> > >, std::is_assignable<_T2&, _U2&&> >::value, std::unique_ptr<_Tp, _Dp>&>::type std::unique_ptr<_Tp, _Dp>::operator=(std::unique_ptr<_Up, _Ep>&&) [with _Ep = _Up; _Tp = wf::surface_interface_t; _Dp = std::default_delete<wf::surface_interface_t>]’
      422 |         operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
          |         ^~~~~~~~
    /usr/include/c++/12.1.1/bits/unique_ptr.h:422:9: note:   template argument deduction/substitution failed:
    ../src/deco/deco.cpp:57:56: note:   mismatched types ‘std::unique_ptr<_Tp, _Dp>’ and ‘void’
       57 |     surface = node->view->remove_subsurface(surface_ref);
          |                                                        ^
    /usr/include/c++/12.1.1/bits/unique_ptr.h:406:19: note: candidate: ‘std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>::operator=(std::unique_ptr<_Tp, _Dp>&&) [with _Tp = wf::surface_interface_t; _Dp = std::default_delete<wf::surface_interface_t>]’
      406 |       unique_ptr& operator=(unique_ptr&&) = default;
          |                   ^~~~~~~~
    /usr/include/c++/12.1.1/bits/unique_ptr.h:406:29: note:   no known conversion for argument 1 from ‘void’ to ‘std::unique_ptr<wf::surface_interface_t>&&’
      406 |       unique_ptr& operator=(unique_ptr&&) = default;
          |                             ^~~~~~~~~~~~
    /usr/include/c++/12.1.1/bits/unique_ptr.h:432:7: note: candidate: ‘std::unique_ptr<_Tp, _Dp>& std::unique_ptr<_Tp, _Dp>::operator=(std::nullptr_t) [with _Tp = wf::surface_interface_t; _Dp = std::default_delete<wf::surface_interface_t>; std::nullptr_t = std::nullptr_t]’
      432 |       operator=(nullptr_t) noexcept
          |       ^~~~~~~~
    /usr/include/c++/12.1.1/bits/unique_ptr.h:432:17: note:   no known conversion for argument 1 from ‘void’ to ‘std::nullptr_t’
      432 |       operator=(nullptr_t) noexcept
          |                 ^~~~~~~~~
    ../src/deco/deco.cpp: In member function ‘void SwayfireDeco::decorate_node(Node)’:
    ../src/deco/deco.cpp:420:46: error: cannot convert ‘std::remove_reference<std::unique_ptr<ViewDecoration, std::default_delete<ViewDecoration> >&>::type’ {aka ‘std::unique_ptr<ViewDecoration, std::default_delete<ViewDecoration> >’} to ‘wf::surface_interface_t*’
      420 |         vnode->view->set_decoration(std::move(deco));
          |                                     ~~~~~~~~~^~~~~~
          |                                              |
          |                                              std::remove_reference<std::unique_ptr<ViewDecoration, std::default_delete<ViewDecoration> >&>::type {aka std::unique_ptr<ViewDecoration, std::default_delete<ViewDecoration> >}
    In file included from /usr/include/wayfire/signal-definitions.hpp:4,
                     from ../src/pch/prefix.hpp:22:
    /usr/include/wayfire/view.hpp:328:54: note:   initializing argument 1 of ‘virtual void wf::view_interface_t::set_decoration(wf::surface_interface_t*)’
      328 |     virtual void set_decoration(surface_interface_t *frame);
          |                                 ~~~~~~~~~~~~~~~~~~~~~^~~~~
    In file included from /usr/include/c++/12.1.1/vector:63,
                     from /usr/include/c++/12.1.1/functional:62,
                     from ../src/pch/prefix.hpp:2:
    /usr/include/c++/12.1.1/bits/stl_uninitialized.h: In instantiation of ‘constexpr bool std::__check_constructible() [with _ValueType = TitleBarSubSurf; _Tp = TitleBarSubSurf&&]’:
    /usr/include/c++/12.1.1/bits/stl_uninitialized.h:182:4:   required from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = move_iterator<TitleBarSubSurf*>; _ForwardIterator = TitleBarSubSurf*]’
    /usr/include/c++/12.1.1/bits/stl_uninitialized.h:372:37:   required from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, allocator<_Tp>&) [with _InputIterator = move_iterator<TitleBarSubSurf*>; _ForwardIterator = TitleBarSubSurf*; _Tp = TitleBarSubSurf]’
    /usr/include/c++/12.1.1/bits/stl_uninitialized.h:397:2:   required from ‘_ForwardIterator std::__uninitialized_move_if_noexcept_a(_InputIterator, _InputIterator, _ForwardIterator, _Allocator&) [with _InputIterator = TitleBarSubSurf*; _ForwardIterator = TitleBarSubSurf*; _Allocator = allocator<TitleBarSubSurf>]’
    /usr/include/c++/12.1.1/bits/vector.tcc:487:3:   required from ‘void std::vector<_Tp, _Alloc>::_M_realloc_insert(iterator, _Args&& ...) [with _Args = {}; _Tp = TitleBarSubSurf; _Alloc = std::allocator<TitleBarSubSurf>; iterator = std::vector<TitleBarSubSurf>::iterator]’
    /usr/include/c++/12.1.1/bits/vector.tcc:123:21:   required from ‘std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {}; _Tp = TitleBarSubSurf; _Alloc = std::allocator<TitleBarSubSurf>; reference = TitleBarSubSurf&]’
    ../src/deco/deco.hpp:447:38:   required from here
    /usr/include/c++/12.1.1/bits/stl_uninitialized.h:90:56: error: static assertion failed: result type must be constructible from input type
       90 |       static_assert(is_constructible<_ValueType, _Tp>::value,
          |                                                        ^~~~~
    /usr/include/c++/12.1.1/bits/stl_uninitialized.h:90:56: note: ‘std::integral_constant<bool, false>::value’ evaluates to false
    
    opened by Tryware 0
  • swayfire keybinding acting on  applications in windows

    swayfire keybinding acting on applications in windows

    For the border window, the focus movement behavior is performed. The key is captured by the application in the window, and so is the window movement behavior. it is different from i3/sway 's behavior,this will cause the characters bound by the keys to be printed on my terminal during the layout process

    expect: The key binding of window movement will not be captured by the application in the window

    opened by shenweijiekdel 0
  • swayfire_deco causes Wayfire to crush

    swayfire_deco causes Wayfire to crush

    hi,

    I tried swayfire as a possible replacement for sway. I tries to load both modules, but when I add swayfire_deco in wayfire.ini, wayfire does not start. I tried to load it dynamically from wcm and while wayfire session crushed.

    DD 28-02-22 08:13:07.126 - [src/output/plugin-loader.cpp:135] Loaded plugin /usr/lib/wayfire/libswayfire-deco.so DD 28-02-22 08:13:07.126 - [src/deco/deco.cpp:529] === deco init === DD 28-02-22 08:13:07.126 - [src/output/output.cpp:432] output DP-1: activate plugin swayfire-deco DD 28-02-22 08:13:07.126 - [src/deco/deco.cpp:417] Decorating split-node-9 EE 28-02-22 08:13:07.126 - [src/main.cpp:132] Fatal error: Segmentation fault EE 28-02-22 08:13:07.144 - #1 wf::print_trace(bool) ??:? EE 28-02-22 08:13:07.158 - #2 __restore_rt libc_sigaction.c:? EE 28-02-22 08:13:07.170 - #3 set_outer_corners(nonstd::observer_ptr<INode>, unsigned char) ??:? EE 28-02-22 08:13:07.181 - #4 set_outer_corners(nonstd::observer_ptr<INode>, unsigned char) ??:? EE 28-02-22 08:13:07.195 - #5 wf::signal_connection_t::emit(wf::signal_data_t*) ??:? EE 28-02-22 08:13:07.210 - #6 wf::compositor_core_impl_t::add_view(std::unique_ptr<wf::view_interface_t, std::default_delete<wf::view_interface_t> >) ??:? EE 28-02-22 08:13:07.221 - #7 SwayfireDeco::decorate_node(nonstd::observer_ptr<INode>) ??:? EE 28-02-22 08:13:07.232 - #8 SplitNode::for_each_node(std::function<void (nonstd::observer_ptr<INode>)> const&) ??:? EE 28-02-22 08:13:07.244 - #9 non-virtual thunk to DecorationSurface::get_offset() ??:? EE 28-02-22 08:13:07.256 - #10 Workspaces::for_each(std::function<void (nonstd::observer_ptr<Workspace>)> const&) ??:? EE 28-02-22 08:13:07.267 - #11 SwayfireDeco::swf_init() ??:? EE 28-02-22 08:13:07.281 - #12 wf::signal_connection_t::emit(wf::signal_data_t*) ??:? EE 28-02-22 08:13:07.294 - #13 SwayfirePlugin::init() ??:? EE 28-02-22 08:13:07.309 - #14 plugin_manager::reload_dynamic_plugins() ??:? EE 28-02-22 08:13:07.320 - #15 wl_event_loop_dispatch_idle ??:? EE 28-02-22 08:13:07.332 - #16 wl_event_loop_dispatch ??:? EE 28-02-22 08:13:07.343 - #17 wl_display_run ??:? EE 28-02-22 08:13:07.359 - #18 main ??:? EE 28-02-22 08:13:07.373 - #19 __libc_start_call_main libc-start.c:? EE 28-02-22 08:13:07.386 - #20 __libc_start_main_alias_2 :? EE 28-02-22 08:13:07.401 - #21 _start ??:?

    Swayfire package is built from https://aur.archlinux.org/packages/swayfire-git so it should be rather fresh,

    opened by struthio 1
Owner
Javier Pollak
Love rust, most work on @Snowlabs in collaboration with @CherryMan. Also upload some random projects I work on when I'm bored at school.
Javier Pollak
x11 window manager

viru - Yet Another WM

zbj 15 Dec 6, 2021
tabbed window manager that can tile windows inside floating containers

tabbed window manager that can tile windows inside floating containers

Seninha 131 Dec 27, 2022
WMBar is a window manager agnostic status bar that aims to be lightweight, simple, extensible/modular and fast.

WMBar is a window manager agnostic status bar that aims to be lightweight, simple, extensible/modular and fast.

WMBar 1 Nov 27, 2021
Modern Window Sitter for X11 based Desktop Environments

Modern Window Sitter for X11 based Desktop Environments (Coming to Wayland, Windows and Mac soon-ish). But using with a terminal emulator is recommended.

Antony Jr 40 Nov 30, 2022
GUI for calibrating the wacom tablet to a screen or window

wacom-settings GUI for calibrating the wacom tablet to a screen or window. Learning project for writing in C. Uses GTK4 library for the GUI and X11 li

null 21 Oct 11, 2022
An addon of imgui for supporting docks in the imgui's window

An addon of imgui for support dock in the window

BB 207 Nov 29, 2022
Window and GUI system based on Dear ImGui from OCornut

ImWindow Window and GUI system based on ImGui from OCornut. Include docking/floating window, multi window and multi render support. Platform Actually

Thibault Hennequin 715 Dec 20, 2022
Hypr is a tiling window manager written in modern C++.

Hypr is a Linux tiling window manager for Xorg. It's written in XCB with modern C++ and aims to provide easily readable and expandable code. !WARNING:

vaxerski 709 Jan 4, 2023
Utility to enable workspace switching with touchpad gestures in Sway.

sway-gest [WIP - Not in usable state yet] Utility to enable workspace switching with touchpad gestures in Sway. Touchpad gestures are supposed to be i

Alexandr Řehulka 1 Dec 23, 2021
Lua as an advanced configuration language for wayfire

wf-lua Experiment to use Lua as an advanced configuration language for wayfire. wf-lua is meant for use-cases where writing an actual wayfire plugin s

Javier Pollak 15 Nov 3, 2022
Wayfire plugin for handling touchpad gestures globally in a layer-shell surface

wf-globalgestures Global touchpad gestures plugin for Wayfire: implements a special protocol (also in this repo) that lets clients request that a part

null 3 Oct 3, 2022
Maintained fork of the Openbox WM with support for tiling and others

Maintained fork of the Openbox WM with support for tiling and others

null 10 Jun 27, 2022
A C++ port of Wave Function Collapse Tiling

Wave Function Collapse in C++ This is a C++ port of https://github.com/mxgmn/WaveFunctionCollapse. All sample images come from https://github.com/mxgm

Emil Ernerfeldt 297 Dec 26, 2022
NWM is a simple window manager for linux which uses Xlib for managing windows

NWM is a simple window manager for linux which uses Xlib for managing windows.

Kumar Gaurav Pandey 18 Nov 27, 2022
dwm is an extremely fast, small, and dynamic window manager for X.

dwm - dynamic window manager dwm is an extremely fast, small, and dynamic window manager for X. My Patches This is in the order that I patched everyth

Christian Chiarulli 32 Dec 23, 2022
x11 window manager

viru - Yet Another WM

zbj 15 Dec 6, 2021
A very stupid window manager.

vswm - very stupid window manager ================================= Probably the most stupid window manager ever created, written over an ancient rel

Felix Hägglund Wennergren 31 Sep 27, 2022
tabbed window manager that can tile windows inside floating containers

tabbed window manager that can tile windows inside floating containers

Seninha 131 Dec 27, 2022
WMBar is a window manager agnostic status bar that aims to be lightweight, simple, extensible/modular and fast.

WMBar is a window manager agnostic status bar that aims to be lightweight, simple, extensible/modular and fast.

WMBar 1 Nov 27, 2021
Small Header-Only Window and OpenGL Manager.

LxDemOWin Linux Demo OpenGL and Window manager A small header-Only Window and OpenGL manager made in C, written in about 2 hours. With some basic code

PipeWarp 6 Oct 23, 2022