diff options
| author | uint <72694427+uint23@users.noreply.github.com> | 2025-09-09 14:34:08 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-09 14:34:08 +0100 |
| commit | 0114b4c9ab39571225666754fb2f284af5765502 (patch) | |
| tree | 088c6ae28cfc9d8d5be3b2ea71cfa574caae6ad0 /src/sxwm.c | |
| parent | 591c5503a05f9306709f9b4a4e59ea06ec7c91a6 (diff) | |
| parent | c4de221356ebee849b7000bc1ba1f19be1c9ec1f (diff) | |
Merge pull request #209 from l0wigh/main
Setting and resetting opacity based on window fullscreen state
Diffstat (limited to 'src/sxwm.c')
| -rw-r--r-- | src/sxwm.c | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -89,6 +89,7 @@ void remove_scratchpad(int n); /* void resize_stack_add(void); */ /* void resize_stack_sub(void); */ void run(void); +void reset_opacity(Window w); void scan_existing_windows(void); void select_input(Window w, Mask masks); void send_wm_take_focus(Window w); @@ -96,6 +97,7 @@ void setup(void); void setup_atoms(void); void set_frame_extents(Window w); void set_input_focus(Client *c, Bool raise_win, Bool warp); +void set_opacity(Window w, double opacity); void set_win_scratchpad(int n); int snap_coordinate(int pos, int size, int screen_size, int snap_dist); void spawn(const char * const *argv); @@ -2174,6 +2176,27 @@ void set_win_scratchpad(int n) scratchpads[n].enabled = False; } +void reset_opacity(Window w) +{ + Atom atom = XInternAtom(dpy, "_NET_WM_WINDOW_OPACITY", False); + XDeleteProperty(dpy, w, atom); +} + + +void set_opacity(Window w, double opacity) +{ + unsigned long op = (unsigned long)(opacity * 0xFFFFFFFF); + Atom atom = XInternAtom(dpy, "_NET_WM_WINDOW_OPACITY", False); + + if (opacity < 0.0) { + opacity = 0.0; + } + if (opacity > 1.0) { + opacity = 1.0; + } + XChangeProperty(dpy, w, atom, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&op, 1); +} + int snap_coordinate(int pos, int size, int screen_size, int snap_dist) { if (UDIST(pos, 0) <= snap_dist) { @@ -2659,10 +2682,12 @@ void toggle_fullscreen(void) XSetWindowBorderWidth(dpy, focused->win, 0); XMoveResizeWindow(dpy, focused->win, fs_x, fs_y, fs_w, fs_h); XRaiseWindow(dpy, focused->win); + set_opacity(focused->win, 100); } else { XMoveResizeWindow(dpy, focused->win, focused->orig_x, focused->orig_y, focused->orig_w, focused->orig_h); XSetWindowBorderWidth(dpy, focused->win, user_config.border_width); + reset_opacity(focused->win); if (!focused->floating) { focused->mon = get_monitor_for(focused); |
