diff --git a/src/config/parse_config.h b/src/config/parse_config.h index d4256ea..4f3a533 100644 --- a/src/config/parse_config.h +++ b/src/config/parse_config.h @@ -60,6 +60,7 @@ typedef struct { int no_force_center; int isterm; int noswallow; + int noblur; int scratchpad_width; int scratchpad_height; float focused_opacity; @@ -1416,6 +1417,7 @@ void parse_config_line(Config *config, const char *line) { rule->isoverlay = -1; rule->isterm = -1; rule->noswallow = -1; + rule->noblur = -1; rule->monitor = NULL; rule->offsetx = 0; rule->offsety = 0; @@ -1499,6 +1501,8 @@ void parse_config_line(Config *config, const char *line) { rule->isterm = atoi(val); } else if (strcmp(key, "noswallow") == 0) { rule->noswallow = atoi(val); + } else if (strcmp(key, "noblur") == 0) { + rule->noblur = atoi(val); } else if (strcmp(key, "scroller_proportion") == 0) { rule->scroller_proportion = atof(val); } else if (strcmp(key, "isfullscreen") == 0) { diff --git a/src/mango.c b/src/mango.c index 6d3d199..100868b 100644 --- a/src/mango.c +++ b/src/mango.c @@ -310,6 +310,7 @@ struct Client { float unfocused_opacity; char oldmonname[128]; int scratchpad_width, scratchpad_height; + int noblur; }; typedef struct { @@ -1044,6 +1045,7 @@ static void apply_rule_properties(Client *c, const ConfigWinRule *r) { APPLY_INT_PROP(c, r, isunglobal); APPLY_INT_PROP(c, r, scratchpad_width); APPLY_INT_PROP(c, r, scratchpad_height); + APPLY_INT_PROP(c, r, noblur); APPLY_FLOAT_PROP(c, r, scroller_proportion); APPLY_FLOAT_PROP(c, r, focused_opacity); @@ -3205,7 +3207,7 @@ static void iter_xdg_scene_buffers(struct wlr_scene_buffer *buffer, int sx, if (wlr_subsurface_try_from_wlr_surface(surface) != NULL) return; - if (blur && c) { + if (blur && c && !c->noblur) { wlr_scene_buffer_set_backdrop_blur(buffer, true); wlr_scene_buffer_set_backdrop_blur_ignore_transparent(buffer, true); if (blur_optimized) { @@ -3300,6 +3302,7 @@ mapnotify(struct wl_listener *listener, void *data) { return; } + // border c->border = wlr_scene_rect_create(c->scene, 0, 0, c->isurgent ? urgentcolor : bordercolor); wlr_scene_node_lower_to_bottom(&c->border->node); @@ -3308,15 +3311,6 @@ mapnotify(struct wl_listener *listener, void *data) { border_radius_location_default); wlr_scene_node_set_enabled(&c->border->node, true); - c->shadow = wlr_scene_shadow_create(c->scene, 0, 0, border_radius, - shadows_blur, shadowscolor); - - wlr_scene_node_lower_to_bottom(&c->shadow->node); - wlr_scene_node_set_enabled(&c->shadow->node, true); - - wlr_scene_node_for_each_buffer(&c->scene_surface->node, - iter_xdg_scene_buffers, c); - /* Initialize client geometry with room for border */ client_set_tiled(c, WLR_EDGE_TOP | WLR_EDGE_BOTTOM | WLR_EDGE_LEFT | WLR_EDGE_RIGHT); @@ -3345,6 +3339,16 @@ mapnotify(struct wl_listener *listener, void *data) { applyrules(c); } + // effects + c->shadow = wlr_scene_shadow_create(c->scene, 0, 0, border_radius, + shadows_blur, shadowscolor); + + wlr_scene_node_lower_to_bottom(&c->shadow->node); + wlr_scene_node_set_enabled(&c->shadow->node, true); + + wlr_scene_node_for_each_buffer(&c->scene_surface->node, + iter_xdg_scene_buffers, c); + // make sure the animation is open type c->is_pending_open_animation = true; resize(c, c->geom, 0);