all repos — openbox @ 9e6aa531d0cc0d9a7000c9856c6a8a159f1d8248

openbox fork - make it a bit more like ryudo

remove the four corners option
document what these serious macros are with art!
Dana Jansens danakj@orodu.net
commit

9e6aa531d0cc0d9a7000c9856c6a8a159f1d8248

parent

59a33c03b04a817108809f2c1d4cbd531f0404fc

3 files changed, 66 insertions(+), 41 deletions(-)

jump to
M openbox/action.copenbox/action.c

@@ -1566,22 +1566,10 @@ }

static guint32 pick_corner(gint x, gint y, gint cx, gint cy, gint cw, gint ch) { - if (config_resize_four_corners) { - if (x - cx > cw / 2) { - if (y - cy > ch / 2) - return prop_atoms.net_wm_moveresize_size_bottomright; - else - return prop_atoms.net_wm_moveresize_size_topright; - } else { - if (y - cy > ch / 2) - return prop_atoms.net_wm_moveresize_size_bottomleft; - else - return prop_atoms.net_wm_moveresize_size_topleft; - } - } else { - /* let's make x and y client relative instead of screen relative */ - x = x - cx; - y = ch - y + cy; + /* let's make x and y client relative instead of screen relative */ + x = x - cx; + y = ch - (y - cy); /* y is inverted, 0 is at the bottom of the window */ + #define X x*ch/cw #define A -4*X + 7*ch/3 #define B 4*X -15*ch/9

@@ -1596,26 +1584,67 @@ #define b (x < 4*cw/9)

#define c (x > 5*cw/9) #define d (y < 4*ch/9) - if (y < A && y >= C) - return prop_atoms.net_wm_moveresize_size_topleft; - else if (y >= A && y >= B && a) - return prop_atoms.net_wm_moveresize_size_top; - else if (y < B && y >= D) - return prop_atoms.net_wm_moveresize_size_topright; - else if (y < C && y >= E && b) - return prop_atoms.net_wm_moveresize_size_left; - else if (y < D && y >= F && c) - return prop_atoms.net_wm_moveresize_size_right; - else if (y < E && y >= G) - return prop_atoms.net_wm_moveresize_size_bottomleft; - else if (y < G && y < H && d) - return prop_atoms.net_wm_moveresize_size_bottom; - else if (y >= H && y < F) - return prop_atoms.net_wm_moveresize_size_bottomright; - else - return prop_atoms.net_wm_moveresize_move; - } -} + /* + Each of these defines (except X which is just there for fun), represents + the equation of a line. The lines they represent are shown in the diagram + below. Checking y against these lines, we are able to choose a region + of the window as shown. + + +---------------------A-------|-------|-------B---------------------+ + | |A B| | + | |A | | B| | + | | A B | | + | | A | | B | | + | | A B | | + | | A | | B | | + | northwest | A north B | northeast | + | | A | | B | | + | | A B | | + C---------------------+----A--+-------+--B----+---------------------D + |CCCCCCC | A B | DDDDDDD| + | CCCCCCCC | A | | B | DDDDDDDD | + | CCCCCCC A B DDDDDDD | + - - - - - - - - - - - +CCCCCCC+aaaaaaa+DDDDDDD+ - - - - - - - - - - - + | | b c | | + | west | b move c | east | + | | b c | | + - - - - - - - - - - - +EEEEEEE+ddddddd+FFFFFFF+- - - - - - - - - - - + | EEEEEEE G H FFFFFFF | + | EEEEEEEE | G | | H | FFFFFFFF | + |EEEEEEE | G H | FFFFFFF| + E---------------------+----G--+-------+--H----+---------------------F + | | G H | | + | | G | | H | | + | southwest | G south H | southeast | + | | G | | H | | + | | G H | | + | | G | | H | | + | | G H | | + | |G | | H| | + | |G H| | + +---------------------G-------|-------|-------H---------------------+ + */ + + if (y < A && y >= C) + return prop_atoms.net_wm_moveresize_size_topleft; + else if (y >= A && y >= B && a) + return prop_atoms.net_wm_moveresize_size_top; + else if (y < B && y >= D) + return prop_atoms.net_wm_moveresize_size_topright; + else if (y < C && y >= E && b) + return prop_atoms.net_wm_moveresize_size_left; + else if (y < D && y >= F && c) + return prop_atoms.net_wm_moveresize_size_right; + else if (y < E && y >= G) + return prop_atoms.net_wm_moveresize_size_bottomleft; + else if (y < G && y < H && d) + return prop_atoms.net_wm_moveresize_size_bottom; + else if (y >= H && y < F) + return prop_atoms.net_wm_moveresize_size_bottomright; + else + return prop_atoms.net_wm_moveresize_move; + +#undef X #undef A #undef B #undef C

@@ -1628,6 +1657,7 @@ #undef a

#undef b #undef c #undef d +} void action_moveresize(union ActionData *data) {
M openbox/config.copenbox/config.c

@@ -535,8 +535,6 @@ node = node->children;

if ((n = parse_find_node("drawContents", node))) config_resize_redraw = parse_bool(doc, n); - if ((n = parse_find_node("fourCorner", node))) - config_resize_four_corners = parse_bool(doc, n); if ((n = parse_find_node("popupShow", node))) { config_resize_popup_show = parse_int(doc, n); if (parse_contains("Always", doc, n))
M openbox/config.hopenbox/config.h

@@ -46,9 +46,6 @@

/*! When true windows' contents are refreshed while they are resized; otherwise they are not updated until the resize is complete */ extern gboolean config_resize_redraw; -/*! Divide windows in 4 or 9 areas when doing a resize. The middle will be move - when selecting 9 corners */ -extern gboolean config_resize_four_corners; /*! show move/resize popups? 0 = no, 1 = always, 2 = only resizing !1 increments */ extern gint config_resize_popup_show;