diff --git a/README.md b/README.md
index c90cee1f..b78ccfa9 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-# MangoWC
-
-
-
+# Mango Wayland Compositor
+
+

+
This project's development is based on [dwl](https://codeberg.org/dwl/dwl/).
@@ -24,18 +24,7 @@ This project's development is based on [dwl](https://codeberg.org/dwl/dwl/).
- Hycov-like overview
- Window effects from scenefx (blur, shadow, corner radius, opacity)
-Master-Stack Layout
-
-https://github.com/user-attachments/assets/a9d4776e-b50b-48fb-94ce-651d8a749b8a
-
-Scroller Layout
-
-https://github.com/user-attachments/assets/c9bf9415-fad1-4400-bcdc-3ad2d76de85a
-
-Layer animaiton
-
-https://github.com/user-attachments/assets/014c893f-115c-4ae9-8342-f9ae3e9a0df0
-
+https://github.com/user-attachments/assets/bb83004a-0563-4b48-ad89-6461a9b78b1f
# Our discord
[mangowc](https://discord.gg/CPjbDxesh5)
@@ -71,16 +60,17 @@ https://github.com/user-attachments/assets/014c893f-115c-4ae9-8342-f9ae3e9a0df0
- hwdata
- seatd
- pcre2
+- xorg-xwayland
+- libxcb
## Arch Linux
-The package is in the Arch User Repository and is availble for manual download [here](https://aur.archlinux.org/packages/mangowc-git) or through a AUR helper like yay:
+The package is in the Arch User Repository and is available for manual download [here](https://aur.archlinux.org/packages/mangowc-git) or through a AUR helper like yay:
```bash
yay -S mangowc-git
```
## Gentoo Linux
-
The package is in the community-maintained repository called GURU.
First, add GURU repository:
@@ -98,15 +88,25 @@ Finally, install the package:
emerge --ask --verbose gui-wm/mangowc
```
+## Fedora Linux
+The package is in the third-party Terra repository.
+First, add the [Terra Repository](https://terra.fyralabs.com/).
+
+Then, install the package:
+
+```bash
+dnf install mangowc
+```
+
## Other
```bash
-git clone -b 0.19.1 https://gitlab.freedesktop.org/wlroots/wlroots.git
+git clone -b 0.19.2 https://gitlab.freedesktop.org/wlroots/wlroots.git
cd wlroots
meson build -Dprefix=/usr
sudo ninja -C build install
-git clone https://github.com/wlrfx/scenefx.git
+git clone -b 0.4.1 https://github.com/wlrfx/scenefx.git
cd scenefx
meson build -Dprefix=/usr
sudo ninja -C build install
@@ -119,7 +119,7 @@ sudo ninja -C build install
## Suggested Tools
-### integrated component
+### Hybrid component
- [dms-shell](https://github.com/AvengeMedia/DankMaterialShell)
### Independent component
@@ -170,7 +170,9 @@ git clone https://github.com/DreamMaoMao/mango-config.git ~/.config/mango
## Config Documentation
-Refer to the [wiki](https://github.com/DreamMaoMao/mango/wiki/)
+Refer to the repo wiki [wiki](https://github.com/DreamMaoMao/mango/wiki/)
+
+or the website docs [docs](https://mangowc.vercel.app/docs)
# NixOS + Home-manager
@@ -189,7 +191,10 @@ Here's an example of using the modules in a flake:
inputs.nixpkgs.follows = "nixpkgs";
};
flake-parts.url = "github:hercules-ci/flake-parts";
- mango.url = "github:DreamMaoMao/mango";
+ mango = {
+ url = "github:DreamMaoMao/mango";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
};
outputs =
inputs@{ self, flake-parts, ... }:
@@ -245,14 +250,6 @@ Here's an example of using the modules in a flake:
}
```
-
-# Sponsor
-
-My current device is a bit outdated and doesn't support certain features like HDR or VRR. If you'd like to support this project, here's how you can help. Thanks!
-
-
-
-
# Packaging mango
To package mango for other distributions, you can check the reference setup for:
@@ -277,3 +274,15 @@ Read The Friendly Manual on packaging software in your distribution first.
- https://github.com/swaywm/sway - Sample of Wayland protocol
- https://github.com/wlrfx/scenefx - Make it simple to add window effect.
+
+
+# Sponsor
+At present, I can only accept sponsorship through an encrypted connection.
+If you find this project helpful to you, you can offer sponsorship in the following ways.
+
+
+
+
+Thanks to the following friends for their sponsorship of this project
+
+[@tonybanters](https://github.com/tonybanters)
diff --git a/config.conf b/config.conf
index 4c8d8d3a..15b654c1 100644
--- a/config.conf
+++ b/config.conf
@@ -26,7 +26,7 @@ focused_opacity=1.0
unfocused_opacity=1.0
# Animation Configuration(support type:zoom,slide)
-# tag_animation_direction: 0-horizontal,1-vertical
+# tag_animation_direction: 1-horizontal,0-vertical
animations=1
layer_animations=1
animation_type_open=slide
@@ -48,6 +48,8 @@ animation_curve_move=0.46,1.0,0.29,1
animation_curve_tag=0.46,1.0,0.29,1
animation_curve_close=0.08,0.92,0,1
animation_curve_focus=0.46,1.0,0.29,1
+animation_curve_opafadeout=0.5,0.5,0.5,0.5
+animation_curve_opafadein=0.46,1.0,0.29,1
# Scroller Layout Setting
scroller_structs=20
@@ -75,7 +77,7 @@ overviewgappo=30
no_border_when_single=0
axis_bind_apply_timeout=100
focus_on_activate=1
-inhibit_regardless_of_visibility=0
+idleinhibit_ignore_visible=0
sloppyfocus=1
warpcursor=1
focus_cross_monitor=0
@@ -238,12 +240,11 @@ bind=CTRL+ALT,Left,resizewin,-50,+0
bind=CTRL+ALT,Right,resizewin,+50,+0
# Mouse Button Bindings
-# NONE mode key only work in ov mode
+# btn_left and btn_right can't bind none mod key
mousebind=SUPER,btn_left,moveresize,curmove
mousebind=NONE,btn_middle,togglemaximizescreen,0
mousebind=SUPER,btn_right,moveresize,curresize
-mousebind=NONE,btn_left,toggleoverview,1
-mousebind=NONE,btn_right,killclient,0
+
# Axis Bindings
axisbind=SUPER,UP,viewtoleft_have_client
diff --git a/mango.desktop b/mango.desktop
index 0c109cea..37c4fad0 100644
--- a/mango.desktop
+++ b/mango.desktop
@@ -1,6 +1,7 @@
[Desktop Entry]
Encoding=UTF-8
Name=Mango
+DesktopNames=mango;wlroots
Comment=mango WM
Exec=mango
Icon=mango
diff --git a/mangowc.scm b/mangowc.scm
new file mode 100644
index 00000000..9c55d43e
--- /dev/null
+++ b/mangowc.scm
@@ -0,0 +1,64 @@
+(define-module (mangowc)
+ #:use-module (guix download)
+ #:use-module (guix git-download)
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module (guix utils)
+ #:use-module (gnu packages wm)
+ #:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages xdisorg)
+ #:use-module (gnu packages pciutils)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages pcre)
+ #:use-module (gnu packages xorg)
+ #:use-module (gnu packages build-tools)
+ #:use-module (gnu packages ninja)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (guix build-system meson)
+ #:use-module (guix licenses))
+
+
+(define-public mangowc-git
+ (package
+ (name "mangowc")
+ (version "git")
+ (source (local-file "." "mangowc-checkout"
+ #:recursive? #t
+ #:select? (or (git-predicate (current-source-directory))
+ (const #t))))
+ (build-system meson-build-system)
+ (arguments
+ (list
+ #:configure-flags
+ #~(list (string-append "-Dsysconfdir=" #$output "/etc"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'configure 'patch-meson
+ (lambda _
+ (substitute* "meson.build"
+ (("'-DSYSCONFDIR=\\\"@0@\\\"'.format\\('/etc'\\)")
+ "'-DSYSCONFDIR=\"@0@\"'.format(sysconfdir)")
+ (("sysconfdir = sysconfdir.substring\\(prefix.length\\(\\)\\)")
+ "")))))))
+ (inputs (list wayland
+ libinput
+ libdrm
+ libxkbcommon
+ pixman
+ libdisplay-info
+ libliftoff
+ hwdata
+ seatd
+ pcre2
+ libxcb
+ xcb-util-wm
+ wlroots
+ scenefx))
+ (native-inputs (list pkg-config wayland-protocols))
+ (home-page "https://github.com/DreamMaoMao/mangowc")
+ (synopsis "Wayland compositor based on wlroots and scenefx")
+ (description "A Wayland compositor based on wlroots and scenefx,
+inspired by dwl but aiming to be more feature-rich.")
+ (license gpl3)))
+
+mangowc-git
diff --git a/meson.build b/meson.build
index 041a1fdf..478ef0e6 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
project('mango', ['c', 'cpp'],
- version : '0.10.5',
+ version : '0.12.1',
)
subdir('protocols')
diff --git a/mmsg/arg.h b/mmsg/arg.h
index ccbd65ab..c3b0d7b9 100644
--- a/mmsg/arg.h
+++ b/mmsg/arg.h
@@ -8,13 +8,13 @@
extern char *argv0;
-/* use main(int argc, char *argv[]) */
+/* use main(int32_t argc, char *argv[]) */
#define ARGBEGIN \
for (argv0 = *argv, argv++, argc--; \
argv[0] && argv[0][0] == '-' && argv[0][1]; argc--, argv++) { \
char argc_; \
char **argv_; \
- int brk_; \
+ int32_t brk_; \
if (argv[0][1] == '-' && argv[0][2] == '\0') { \
argv++; \
argc--; \
diff --git a/mmsg/mmsg.c b/mmsg/mmsg.c
index 6f350ed0..fb1d04fd 100644
--- a/mmsg/mmsg.c
+++ b/mmsg/mmsg.c
@@ -25,31 +25,31 @@ static enum {
WATCH = 1 << 2 | GET,
} mode = NONE;
-static int Oflag;
-static int Tflag;
-static int Lflag;
-static int oflag;
-static int tflag;
-static int lflag;
-static int cflag;
-static int vflag;
-static int mflag;
-static int fflag;
-static int qflag;
-static int dflag;
-static int xflag;
-static int eflag;
-static int kflag;
-static int bflag;
-static int Aflag;
+static int32_t Oflag;
+static int32_t Tflag;
+static int32_t Lflag;
+static int32_t oflag;
+static int32_t tflag;
+static int32_t lflag;
+static int32_t cflag;
+static int32_t vflag;
+static int32_t mflag;
+static int32_t fflag;
+static int32_t qflag;
+static int32_t dflag;
+static int32_t xflag;
+static int32_t eflag;
+static int32_t kflag;
+static int32_t bflag;
+static int32_t Aflag;
static uint32_t occ, seltags, total_clients, urg;
static char *output_name;
-static int tagcount;
+static int32_t tagcount;
static char *tagset;
static char *layout_name;
-static int layoutcount, layout_idx;
+static int32_t layoutcount, layout_idx;
static char *client_tags;
static char *dispatch_cmd;
static char *dispatch_arg1;
@@ -86,8 +86,8 @@ static void noop_description(void *data, struct wl_output *wl_output,
const char *description) {}
// 将 n 转换为 9 位二进制字符串,结果存入 buf(至少长度 10)
-void bin_str_9bits(char *buf, unsigned int n) {
- for (int i = 8; i >= 0; i--) {
+void bin_str_9bits(char *buf, uint32_t n) {
+ for (int32_t i = 8; i >= 0; i--) {
*buf++ = ((n >> i) & 1) ? '1' : '0';
}
*buf = '\0'; // 字符串结尾
@@ -268,7 +268,7 @@ static void dwl_ipc_output_kb_layout(void *data,
static void
dwl_ipc_output_scalefactor(void *data,
struct zdwl_ipc_output_v2 *dwl_ipc_output,
- const unsigned int scalefactor) {
+ const uint32_t scalefactor) {
if (!Aflag)
return;
char *output_name = data;
@@ -324,7 +324,7 @@ static void dwl_ipc_output_frame(void *data,
if (tflag) {
uint32_t mask = seltags;
char *t = tagset;
- int i = 0;
+ int32_t i = 0;
for (; *t && *t >= '0' && *t <= '9'; t++)
i = *t - '0' + i * 10;
@@ -354,7 +354,7 @@ static void dwl_ipc_output_frame(void *data,
if (cflag) {
uint32_t and = ~0, xor = 0;
char *t = client_tags;
- int i = 0;
+ int32_t i = 0;
for (; *t && *t >= '0' && *t <= '9'; t++)
i = *t - '0' + i * 10;
@@ -500,16 +500,52 @@ static const struct wl_registry_listener registry_listener = {
static void usage(void) {
fprintf(stderr,
- "usage:"
- "\t%s [-OTLq]\n"
- "\t%s [-o