]> Dogcows Code - chaz/openbox/commitdiff
option to make dragging and findedge ignore windows on lower layers
authorMikael Magnusson <mikachu@comhem.se>
Sat, 4 Sep 2004 19:45:38 +0000 (19:45 +0000)
committerMikael Magnusson <mikachu@comhem.se>
Sat, 4 Sep 2004 19:45:38 +0000 (19:45 +0000)
data/rc.xml.in
data/rc.xsd
openbox/client.c
openbox/config.c
openbox/config.h
openbox/resist.c

index a1f2762718c3ea731a637b47d7fad7b7948afadc..58c6b42d5350ac91679894a7ca764a838df148e1 100644 (file)
@@ -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>
index 9cb585a7a62046d19cbc3e49da13725f02ecb8a9..9f992ed7413a035a31438b787998c72ee7615269 100644 (file)
@@ -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">
index b7ed57b5b086e06182320f048250c78a00d6e115..bc1ccc0e6ca2483747a16d9303d3a32a114a2c21 100644 (file)
@@ -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;
index da1128f4de1cb0834b3b13f405c9d53ebaa98c84..9156c8885d1a9dbd9841b2d09a02f45fb48cad17 100644 (file)
@@ -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);
 
index e13dd091854bc363b5367504c11cdca83649adb7..3117a710859f327e30a0e51ee5d3cb922b80f8ad 100644 (file)
@@ -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;
index c88f594849ff63be7078ba1409df42719c6dff20..42c03675c7ca722f995c99b840eb79662e9db75b 100644 (file)
@@ -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);
This page took 0.031362 seconds and 4 git commands to generate.