]> Pileus Git - ~andy/gtk/commitdiff
[broadway] More complete handling of transient parent
authorAlexander Larsson <alexl@redhat.com>
Mon, 11 Apr 2011 15:48:21 +0000 (17:48 +0200)
committerAlexander Larsson <alexl@redhat.com>
Tue, 12 Apr 2011 09:12:39 +0000 (11:12 +0200)
We now handle any order of transient being set and windows shown/created

gdk/broadway/broadway.js

index 97858fde0e2d3a3d42c582bdb37913a47eede7ad..b75bcf606ec605df674a5a392f2b668598080f29 100644 (file)
@@ -318,7 +318,7 @@ function unregisterWindow(win)
 
 function getTransientToplevel(surface)
 {
-    while (surface.transientParent != 0) {
+    while (surface && surface.transientParent != 0) {
        surface = surfaces[surface.transientParent];
        if (surface && surface.window)
            return surface;
@@ -522,8 +522,12 @@ function cmdSetTransientFor(id, parentId)
        return;
 
     surface.transientParent = parentId;
-    if (surface.visible && surface.isTemp) {
-       alert("TODO: move temps between transient parents when visible");
+    if (parentId != 0 && surfaces[parentId]) {
+       moveToHelper(surface, stackingOrder.indexOf(surfaces[parentId])+1);
+    }
+
+    if (surface.visible) {
+       restackWindows();
     }
 }
 
@@ -534,20 +538,23 @@ function restackWindows() {
     }
 }
 
-function moveToTopHelper(surface) {
+function moveToHelper(surface, position) {
     var i = stackingOrder.indexOf(surface);
     stackingOrder.splice(i, 1);
-    stackingOrder.push(surface);
+    if (position != undefined)
+       stackingOrder.splice(position, 0, surface);
+    else
+       stackingOrder.push(surface);
 
     for (var cid in surfaces) {
        var child = surfaces[cid];
        if (child.transientParent == surface.id)
-           moveToTopHelper(child);
+           moveToHelper(child, stackingOrder.indexOf(surface) + 1);
     }
 }
 
 function moveToTop(surface) {
-    moveToTopHelper(surface);
+    moveToHelper(surface);
     restackWindows();
 }