summaryrefslogtreecommitdiff
path: root/src/sxwm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sxwm.c')
-rw-r--r--src/sxwm.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/sxwm.c b/src/sxwm.c
index 820eca8..8a16b11 100644
--- a/src/sxwm.c
+++ b/src/sxwm.c
@@ -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);