ensure that normal clients are stacked below overrides when raising
authorMike Blumenkrantz <zmike@osg.samsung.com>
Tue, 8 Sep 2015 21:47:48 +0000 (17:47 -0400)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Tue, 8 Sep 2015 21:47:48 +0000 (17:47 -0400)
when a client is set to "Always on Top", it will be on the same layer
as override clients. this can cause strange stacking and mouse eventing
in cases where these windows occupy the same space and the normal client
is stacked over the override

src/bin/e_comp_object.c

index 268f61d..e6176da 100644 (file)
@@ -1323,8 +1323,19 @@ _e_comp_intercept_raise(void *data, Evas_Object *obj)
      evas_object_raise(obj);
    else
      {
-        /* still stack below layer marker */
-        evas_object_stack_below(obj, e_comp->layers[cw->layer].obj);
+        Evas_Object *op;
+
+        /* still stack below override below the layer marker */
+        for (op = o = e_comp->layers[cw->layer].obj;
+             o && o != e_comp->layers[cw->layer - 1].obj;
+             op = o, o = evas_object_below_get(o))
+          {
+             E_Client *ec;
+
+             ec = e_comp_object_client_get(o);
+             if (ec && (!ec->override)) break;
+          }
+        evas_object_stack_below(obj, op);
         if (e_client_focus_track_enabled())
           e_client_raise_latest_set(cw->ec); //modify raise list if necessary
      }