diff options
Diffstat (limited to 'src/sxwm.c')
| -rw-r--r-- | src/sxwm.c | 45 |
1 files changed, 35 insertions, 10 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); @@ -1106,7 +1108,7 @@ void hdl_map_req(XEvent *xev) } if (open_windows == MAX_CLIENTS) { - printf("sxwm: max clients reached, ignoring map request\n"); + fprintf(stderr, "sxwm: max clients reached, ignoring map request\n"); return; } @@ -1458,13 +1460,13 @@ Bool is_child_proc(pid_t parent_pid, pid_t child_pid) snprintf(path, sizeof(path), "/proc/%d/stat", current_pid); f = fopen(path, "r"); if (!f) { - printf("sxwm: could not open %s\n", path); + fprintf(stderr, "sxwm: could not open %s\n", path); return False; } int ppid = 0; if (fscanf(f, "%*d %*s %*c %d", &ppid) != 1) { - printf("sxwm: failed to read ppid from %s\n", path); + fprintf(stderr, "sxwm: failed to read ppid from %s\n", path); fclose(f); return False; } @@ -1476,7 +1478,7 @@ Bool is_child_proc(pid_t parent_pid, pid_t child_pid) if (ppid <= 1) { /* Reached init or kernel */ - printf("sxwm: reached init/kernel, no relationship found\n"); + fprintf(stderr, "sxwm: reached init/kernel, no relationship found\n"); break; } current_pid = ppid; @@ -1720,7 +1722,7 @@ void quit(void) XFreeCursor(dpy, cursor_move); XFreeCursor(dpy, cursor_normal); XFreeCursor(dpy, cursor_resize); - printf("quitting...\n"); + puts("quitting..."); running = False; } @@ -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); @@ -3014,7 +3039,7 @@ void xev_case(XEvent *xev) evtable[xev->type](xev); } else { - printf("sxwm: invalid event type: %d\n", xev->type); + fprintf(stderr, "sxwm: invalid event type: %d\n", xev->type); } } @@ -3023,7 +3048,7 @@ int main(int ac, char **av) if (ac > 1) { if (strcmp(av[1], "-v") == 0 || strcmp(av[1], "--version") == 0) { printf("%s\n%s\n%s\n", SXWM_VERSION, SXWM_AUTHOR, SXWM_LICINFO); - exit(0); + return EXIT_SUCCESS; } else if (strcmp(av[1], "-b") == 0 || strcmp(av[1], "--backup") == 0) { puts("sxwm: using backup keybinds"); @@ -3033,11 +3058,11 @@ int main(int ac, char **av) puts("usage:\n"); puts("\t[-v || --version]: See the version of sxwm\n"); puts("\t[-b || --backup]: Use backup set of keybinds with sxwm\n"); - exit(0); + return EXIT_SUCCESS; } } setup(); - printf("sxwm: starting...\n"); + puts("sxwm: starting..."); run(); - return 0; + return EXIT_SUCCESS; } |
