option to make dragging and findedge ignore windows on lower layers
Mikael Magnusson mikachu@comhem.se
6 files changed,
26 insertions(+),
0 deletions(-)
M
data/rc.xml.in
→
data/rc.xml.in
@@ -11,6 +11,7 @@
<resistance> <strength>10</strength> <screen_edge_strength>20</screen_edge_strength> + <edges_hit_layers_below>no</edges_hit_layers_below> </resistance> <focus>
M
data/rc.xsd
→
data/rc.xsd
@@ -65,6 +65,7 @@ </xs:annotation>
<xs:sequence> <xs:element name="strength" type="xs:integer"/> <xs:element name="screen_edge_strength" type="xs:integer"/> + <xs:element name="edges_hit_layers_below" type="xs:yesorno"/> </xs:sequence> </xs:complexType> <xs:complexType name="focus">
M
openbox/client.c
→
openbox/client.c
@@ -3151,6 +3151,8 @@ if(screen_desktop != cur->desktop && cur->desktop != DESKTOP_ALL)
continue; if(cur->iconic) continue; + if(cur->layer < c->layer && !config_resist_layers_below) + continue; his_edge_start = cur->frame->area.x; his_edge_end = cur->frame->area.x + cur->frame->area.width;@@ -3191,6 +3193,8 @@ continue;
if(screen_desktop != cur->desktop && cur->desktop != DESKTOP_ALL) continue; if(cur->iconic) + continue; + if(cur->layer < c->layer && !config_resist_layers_below) continue; his_edge_start = cur->frame->area.x;@@ -3234,6 +3238,8 @@ if(screen_desktop != cur->desktop && cur->desktop != DESKTOP_ALL)
continue; if(cur->iconic) continue; + if(cur->layer < c->layer && !config_resist_layers_below) + continue; his_edge_start = cur->frame->area.y; his_edge_end = cur->frame->area.y + cur->frame->area.height;@@ -3275,6 +3281,8 @@ continue;
if(screen_desktop != cur->desktop && cur->desktop != DESKTOP_ALL) continue; if(cur->iconic) + continue; + if(cur->layer < c->layer && !config_resist_layers_below) continue; his_edge_start = cur->frame->area.y;
M
openbox/config.c
→
openbox/config.c
@@ -73,6 +73,8 @@
gint config_resist_win; gint config_resist_edge; +gboolean config_resist_layers_below; + /* <keybind key="C-x">@@ -422,6 +424,8 @@ if ((n = parse_find_node("strength", node)))
config_resist_win = parse_int(doc, n); if ((n = parse_find_node("screen_edge_strength", node))) config_resist_edge = parse_int(doc, n); + if ((n = parse_find_node("edges_hit_layers_below", node))) + config_resist_layers_below = parse_bool(doc, n); } typedef struct@@ -589,6 +593,7 @@ parse_register(i, "mouse", parse_mouse, NULL);
config_resist_win = 10; config_resist_edge = 20; + config_resist_layers_below = FALSE; parse_register(i, "resistance", parse_resistance, NULL);
M
openbox/config.h
→
openbox/config.h
@@ -104,6 +104,8 @@ /*! Number of pixels to resist while crossing another window's edge */
extern gint config_resist_win; /*! Number of pixels to resist while crossing a screen's edge */ extern gint config_resist_edge; +/*! Should windows resist edges at layers below */ +extern gboolean config_resist_layers_below; /*! Warp near edge on menu? */ extern gboolean config_menu_warppointer;
M
openbox/resist.c
→
openbox/resist.c
@@ -54,8 +54,13 @@
if (!WINDOW_IS_CLIENT(it->data)) continue; target = it->data; + /* don't snap to self or non-visibles */ if (!target->frame->visible || target == c) continue; + + /* don't snap to windows in layers beneath */ + if(target->layer < c->layer && !config_resist_layers_below) + continue; tl = RECT_LEFT(target->frame->area) - 1; tt = RECT_TOP(target->frame->area) - 1;@@ -194,6 +199,10 @@ target = it->data;
/* don't snap to invisibles or ourself */ if (!target->frame->visible || target == c) continue; + + /* don't snap to windows in layers beneath */ + if(target->layer < c->layer && !config_resist_layers_below) + continue; tl = RECT_LEFT(target->frame->area); tr = RECT_RIGHT(target->frame->area);