mirror of
https://git.davidovski.xyz/dot.git
synced 2024-08-15 00:43:28 +00:00
260 lines
9.4 KiB
Diff
260 lines
9.4 KiB
Diff
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;
|