diff options
Diffstat (limited to 'src/sxwm.c')
| -rw-r--r-- | src/sxwm.c | 29 |
1 files changed, 27 insertions, 2 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); @@ -1678,7 +1680,7 @@ void other_wm(void) int other_wm_err(Display *d, XErrorEvent *ee) { - errx(0, "can't start because another window manager is already running"); + errx(1, "can't start because another window manager is already running"); return 0; (void)d; (void)ee; @@ -1983,7 +1985,7 @@ void send_wm_take_focus(Window w) void setup(void) { if ((dpy = XOpenDisplay(NULL)) == False) { - errx(0, "can't open display.\nquitting..."); + errx(1, "can't open display.\nquitting..."); } root = XDefaultRootWindow(dpy); @@ -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); |
