option to make dragging and findedge ignore windows on lower layers
This commit is contained in:
parent
1ed2670b89
commit
c02f68499f
6 changed files with 26 additions and 0 deletions
|
@ -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>
|
||||
|
|
|
@ -65,6 +65,7 @@
|
|||
<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">
|
||||
|
|
|
@ -3151,6 +3151,8 @@ gint client_directional_edge_search(ObClient *c, ObDirection dir)
|
|||
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;
|
||||
|
@ -3192,6 +3194,8 @@ gint client_directional_edge_search(ObClient *c, ObDirection dir)
|
|||
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;
|
||||
|
@ -3234,6 +3238,8 @@ gint client_directional_edge_search(ObClient *c, ObDirection dir)
|
|||
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;
|
||||
|
@ -3276,6 +3282,8 @@ gint client_directional_edge_search(ObClient *c, ObDirection dir)
|
|||
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;
|
||||
|
|
|
@ -73,6 +73,8 @@ GSList *config_menu_files;
|
|||
gint config_resist_win;
|
||||
gint config_resist_edge;
|
||||
|
||||
gboolean config_resist_layers_below;
|
||||
|
||||
/*
|
||||
|
||||
<keybind key="C-x">
|
||||
|
@ -422,6 +424,8 @@ static void parse_resistance(ObParseInst *i, xmlDocPtr doc, xmlNodePtr 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 @@ void config_startup(ObParseInst *i)
|
|||
|
||||
config_resist_win = 10;
|
||||
config_resist_edge = 20;
|
||||
config_resist_layers_below = FALSE;
|
||||
|
||||
parse_register(i, "resistance", parse_resistance, NULL);
|
||||
|
||||
|
|
|
@ -104,6 +104,8 @@ extern gint config_mouse_dclicktime;
|
|||
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;
|
||||
|
|
|
@ -54,9 +54,14 @@ void resist_move_windows(ObClient *c, gint *x, gint *y)
|
|||
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;
|
||||
tr = RECT_RIGHT(target->frame->area) + 1;
|
||||
|
@ -195,6 +200,10 @@ void resist_size_windows(ObClient *c, gint *w, gint *h, ObCorner corn)
|
|||
/* 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);
|
||||
tt = RECT_TOP(target->frame->area);
|
||||
|
|
Loading…
Reference in a new issue