diff options
Diffstat (limited to 'compfy/uncomment_sliding_animation.patch')
-rw-r--r-- | compfy/uncomment_sliding_animation.patch | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/compfy/uncomment_sliding_animation.patch b/compfy/uncomment_sliding_animation.patch new file mode 100644 index 0000000..77f613d --- /dev/null +++ b/compfy/uncomment_sliding_animation.patch @@ -0,0 +1,259 @@ +diff --git a/src/common.h b/src/common.h +index 978acf7..bcffb81 100644 +--- a/src/common.h ++++ b/src/common.h +@@ -186,9 +186,9 @@ typedef struct session { + /// Width of root window. + int root_width; + /// Current desktop number of root window +- // int root_desktop_num; ++ int root_desktop_num; + /// Desktop switch direction +- // int root_desktop_switch_direction; ++ int root_desktop_switch_direction; + /// X Composite overlay window. + xcb_window_t overlay; + /// The target window for debug mode +diff --git a/src/compfy.c b/src/compfy.c +index 975bfaf..d5dcc54 100644 +--- a/src/compfy.c ++++ b/src/compfy.c +@@ -597,13 +597,13 @@ static void configure_root(session_t *ps) { + ps->root_width = r->width; + ps->root_height = r->height; + +- // auto prop = x_get_prop(ps->c, ps->root, ps->atoms->a_NET_CURRENT_DESKTOP, +- // 1L, XCB_ATOM_CARDINAL, 32); ++ auto prop = x_get_prop(ps->c, ps->root, ps->atoms->a_NET_CURRENT_DESKTOP, ++ 1L, XCB_ATOM_CARDINAL, 32); + +- // ps->root_desktop_switch_direction = 0; +- // if (prop.nitems) { +- // ps->root_desktop_num = (int)*prop.c32; +- // } ++ ps->root_desktop_switch_direction = 0; ++ if (prop.nitems) { ++ ps->root_desktop_num = (int)*prop.c32; ++ } + + rebuild_screen_reg(ps); + rebuild_shadow_exclude_reg(ps); +@@ -1752,7 +1752,7 @@ static void draw_callback_impl(EV_P_ session_t *ps, int revents attr_unused) { + } + if (!animation_running) { + ps->animation_time = 0L; +- // ps->root_desktop_switch_direction = 0; ++ ps->root_desktop_switch_direction = 0; + } + + // TODO(yshui) Investigate how big the X critical section needs to be. There are +diff --git a/src/config.c b/src/config.c +index deca6ad..45da9a0 100644 +--- a/src/config.c ++++ b/src/config.c +@@ -759,6 +759,8 @@ enum wm_support parse_wm_support(const char *src) { + return WM_SUPPORT_HERB; + } else if (strcmp(src, "dwm") == 0) { + return WM_SUPPORT_DWM; ++ } else if (strcmp(src, "bspwm") == 0) { ++ return WM_SUPPORT_BSPWM; + } else if (strcmp(src, "legacy") == 0) { + return WM_SUPPORT_LEGACY; + } +diff --git a/src/config.h b/src/config.h +index 4276203..fe03eca 100644 +--- a/src/config.h ++++ b/src/config.h +@@ -49,8 +49,8 @@ enum open_window_animation { + OPEN_WINDOW_ANIMATION_SLIDE_DOWN, + OPEN_WINDOW_ANIMATION_SLIDE_LEFT, + OPEN_WINDOW_ANIMATION_SLIDE_RIGHT, +- // OPEN_WINDOW_ANIMATION_SLIDE_IN, +- // OPEN_WINDOW_ANIMATION_SLIDE_OUT, ++ OPEN_WINDOW_ANIMATION_SLIDE_IN, ++ OPEN_WINDOW_ANIMATION_SLIDE_OUT, + OPEN_WINDOW_ANIMATION_INVALID, + }; + +@@ -59,6 +59,7 @@ enum wm_support { + WM_SUPPORT_AWESOME, + WM_SUPPORT_HERB, + WM_SUPPORT_DWM, ++ WM_SUPPORT_BSPWM, + WM_SUPPORT_LEGACY, + WM_SUPPORT_INVALID, + }; +diff --git a/src/event.c b/src/event.c +index acbc82d..bf5bd1d 100644 +--- a/src/event.c ++++ b/src/event.c +@@ -450,15 +450,15 @@ static inline void ev_property_notify(session_t *ps, xcb_property_notify_event_t + + if (ps->root == ev->window) { + // If desktop number property changes +- // if (ev->atom == ps->atoms->a_NET_CURRENT_DESKTOP) { +- // auto prop = x_get_prop(ps->c, ps->root, ps->atoms->a_NET_CURRENT_DESKTOP, +- // 1L, XCB_ATOM_CARDINAL, 32); +- +- // if (prop.nitems) { +- // ps->root_desktop_switch_direction = ((int)*prop.c32) - ps->root_desktop_num; +- // ps->root_desktop_num = (int)*prop.c32; +- // } +- // } ++ if (ev->atom == ps->atoms->a_NET_CURRENT_DESKTOP) { ++ auto prop = x_get_prop(ps->c, ps->root, ps->atoms->a_NET_CURRENT_DESKTOP, ++ 1L, XCB_ATOM_CARDINAL, 32); ++ ++ if (prop.nitems) { ++ ps->root_desktop_switch_direction = ((int)*prop.c32) - ps->root_desktop_num; ++ ps->root_desktop_num = (int)*prop.c32; ++ } ++ } + + if (ps->o.use_ewmh_active_win && ps->atoms->a_NET_ACTIVE_WINDOW == ev->atom) { + // to update focus +diff --git a/src/win.c b/src/win.c +index 4d96bb7..df3af08 100644 +--- a/src/win.c ++++ b/src/win.c +@@ -484,13 +484,9 @@ static void init_animation(session_t *ps, struct managed_win *w) { + if (ps->o.wintype_option[w->window_type].animation < OPEN_WINDOW_ANIMATION_INVALID) + animation = ps->o.wintype_option[w->window_type].animation; + +- // if (ps->root_desktop_switch_direction != 0) { +- // if (ps->o.animation_for_workspace_switch_in == OPEN_WINDOW_ANIMATION_AUTO) { +- // animation = OPEN_WINDOW_ANIMATION_SLIDE_IN; +- // } else { +- // animation = ps->o.animation_for_workspace_switch_in; +- // } +- // } ++ if (ps->root_desktop_switch_direction != 0) { ++ animation = OPEN_WINDOW_ANIMATION_SLIDE_IN; ++ } + + if (c2_match(ps, w, ps->o.animation_open_blacklist, NULL)) { + animation = OPEN_WINDOW_ANIMATION_NONE; +@@ -553,28 +549,16 @@ static void init_animation(session_t *ps, struct managed_win *w) { + w->animation_h = w->pending_g.height; + break; + } +- // case OPEN_WINDOW_ANIMATION_SLIDE_IN: { +- // w->animation_center_x = w->pending_g.x + w->pending_g.width * 0.5; +- // w->animation_center_y = w->pending_g.y + w->pending_g.height * 0.5 - +- // ps->root_height * +- // ((ps->root_desktop_switch_direction < 0 && +- // ps->root_desktop_switch_direction >= -1) || +- // ps->root_desktop_switch_direction > 1?1:-1); +- // w->animation_w = w->pending_g.width; +- // w->animation_h = w->pending_g.height; +- // break; +- // } +- // case OPEN_WINDOW_ANIMATION_SLIDE_OUT: { +- // w->animation_dest_center_x = w->pending_g.x + w->pending_g.width * 0.5; +- // w->animation_dest_center_y = w->pending_g.y + w->pending_g.height * 0.5 - +- // ps->root_height * +- // ((ps->root_desktop_switch_direction < 0 && +- // ps->root_desktop_switch_direction >= -1) || +- // ps->root_desktop_switch_direction > 1?-1:1); +- // w->animation_dest_w = w->pending_g.width; +- // w->animation_dest_h = w->pending_g.height; +- // break; +- // } ++ case OPEN_WINDOW_ANIMATION_SLIDE_IN: { ++ w->animation_center_x = w->pending_g.x + w->pending_g.width * 0.5 + ++ ps->root_width * ++ (ps->root_desktop_switch_direction < 0?-1:1); ++ ++ w->animation_center_y = w->pending_g.y + w->pending_g.height * 0.5; ++ w->animation_w = w->pending_g.width; ++ w->animation_h = w->pending_g.height; ++ break; ++ } + case OPEN_WINDOW_ANIMATION_INVALID: assert(false); break; + } + } +@@ -599,10 +583,10 @@ static void init_animation_unmap(session_t *ps, struct managed_win *w) { + animation = OPEN_WINDOW_ANIMATION_SLIDE_RIGHT; + else if (animation == OPEN_WINDOW_ANIMATION_SLIDE_RIGHT) + animation = OPEN_WINDOW_ANIMATION_SLIDE_LEFT; +- // else if (animation == OPEN_WINDOW_ANIMATION_SLIDE_IN) +- // animation = OPEN_WINDOW_ANIMATION_SLIDE_OUT; +- // else if (animation == OPEN_WINDOW_ANIMATION_SLIDE_OUT) +- // animation = OPEN_WINDOW_ANIMATION_SLIDE_IN; ++ else if (animation == OPEN_WINDOW_ANIMATION_SLIDE_IN) ++ animation = OPEN_WINDOW_ANIMATION_SLIDE_OUT; ++ else if (animation == OPEN_WINDOW_ANIMATION_SLIDE_OUT) ++ animation = OPEN_WINDOW_ANIMATION_SLIDE_IN; + + } else { + animation = ps->o.animation_for_unmap_window; +@@ -611,12 +595,9 @@ static void init_animation_unmap(session_t *ps, struct managed_win *w) { + animation = ps->o.wintype_option[w->window_type].animation_unmap; + } + +- // if (ps->root_desktop_switch_direction != 0) { +- // if (ps->o.animation_for_workspace_switch_out == OPEN_WINDOW_ANIMATION_AUTO) +- // animation = OPEN_WINDOW_ANIMATION_SLIDE_OUT; +- // else +- // animation = ps->o.animation_for_workspace_switch_out; +- // } ++ if (ps->root_desktop_switch_direction != 0) { ++ animation = OPEN_WINDOW_ANIMATION_SLIDE_OUT; ++ } + + if (c2_match(ps, w, ps->o.animation_unmap_blacklist, NULL)) { + animation = OPEN_WINDOW_ANIMATION_NONE; +@@ -679,28 +660,15 @@ static void init_animation_unmap(session_t *ps, struct managed_win *w) { + w->animation_dest_h = w->pending_g.height; + break; + } +- // case OPEN_WINDOW_ANIMATION_SLIDE_IN: { +- // w->animation_center_x = w->pending_g.x + w->pending_g.width * 0.5; +- // w->animation_center_y = w->pending_g.y + w->pending_g.height * 0.5 - +- // ps->root_height * +- // ((ps->root_desktop_switch_direction < 0 && +- // ps->root_desktop_switch_direction >= -1) || +- // ps->root_desktop_switch_direction > 1?1:-1); +- // w->animation_w = w->pending_g.width; +- // w->animation_h = w->pending_g.height; +- // break; +- // } +- // case OPEN_WINDOW_ANIMATION_SLIDE_OUT: { +- // w->animation_dest_center_x = w->pending_g.x + w->pending_g.width * 0.5; +- // w->animation_dest_center_y = w->pending_g.y + w->pending_g.height * 0.5 - +- // ps->root_height * +- // ((ps->root_desktop_switch_direction < 0 && +- // ps->root_desktop_switch_direction >= -1) || +- // ps->root_desktop_switch_direction > 1?-1:1); +- // w->animation_dest_w = w->pending_g.width; +- // w->animation_dest_h = w->pending_g.height; +- // break; +- // } ++ case OPEN_WINDOW_ANIMATION_SLIDE_OUT: { ++ w->animation_dest_center_x = w->pending_g.x + w->pending_g.width * 0.5 - ++ ps->root_width * ++ (ps->root_desktop_switch_direction < 0?-1:1); ++ w->animation_dest_center_y = w->pending_g.y + w->pending_g.height * 0.5; ++ w->animation_dest_w = w->pending_g.width; ++ w->animation_dest_h = w->pending_g.height; ++ break; ++ } + case OPEN_WINDOW_ANIMATION_INVALID: assert(false); break; + } + } +@@ -1133,11 +1101,11 @@ double win_calc_opacity_target(session_t *ps, const struct managed_win *w) { + return 0; + } + if (w->state == WSTATE_UNMAPPING || w->state == WSTATE_DESTROYING) { +- // if (ps->root_desktop_switch_direction) +- // return w->opacity; ++// if (ps->root_desktop_switch_direction) ++// return w->opacity; + +- return 0; +- } ++ return 0; ++ } + // Try obeying opacity property and window type opacity firstly + if (w->has_opacity_prop) { + opacity = ((double)w->opacity_prop) / OPAQUE; |