[gtk+] broadway: Remove separate browser windows hack
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] broadway: Remove separate browser windows hack
- Date: Wed, 19 Dec 2012 23:00:57 +0000 (UTC)
commit 9c3cd49abdaeee28aaa3558179f45ab4efed0e9d
Author: Alexander Larsson <alexl redhat com>
Date: Wed Dec 19 13:09:38 2012 +0100
broadway: Remove separate browser windows hack
This never really worked well, we need to be able to fully handle
sizes from the client.
gdk/broadway/broadway.js | 267 ++++++----------------------------------------
1 files changed, 31 insertions(+), 236 deletions(-)
---
diff --git a/gdk/broadway/broadway.js b/gdk/broadway/broadway.js
index acfec42..0a162ad 100644
--- a/gdk/broadway/broadway.js
+++ b/gdk/broadway/broadway.js
@@ -132,18 +132,6 @@ function createXHR()
return null;
}
-/* This resizes the window so the *inner* size is the specified size */
-function resizeBrowserWindow(window, w, h) {
- var innerW = window.innerWidth;
- var innerH = window.innerHeight;
-
- var outerW = window.outerWidth;
- var outerH = window.outerHeight;
-
- window.resizeTo(w + outerW - innerW,
- h + outerH - innerH);
-}
-
function resizeCanvas(canvas, w, h)
{
/* Canvas resize clears the data, so we need to save it first */
@@ -163,8 +151,6 @@ function resizeCanvas(canvas, w, h)
context.drawImage(tmpCanvas, 0, 0, tmpCanvas.width, tmpCanvas.height);
}
-var useToplevelWindows = false;
-var toplevelWindows = [];
var grab = new Object();
grab.window = null;
grab.ownerEvents = false;
@@ -276,121 +262,11 @@ function flushSurface(surface)
}
}
-function ensureSurfaceInDocument(surface, doc)
-{
- if (surface.document != doc) {
- var oldCanvas = surface.canvas;
- var canvas = doc.importNode(oldCanvas, false);
- doc.body.appendChild(canvas);
- canvas.surface = surface;
- oldCanvas.parentNode.removeChild(oldCanvas);
-
- surface.canvas = canvas;
- if (surface.toplevelElement == oldCanvas)
- surface.toplevelElement = canvas;
- surface.document = doc;
- }
-}
-
function sendConfigureNotify(surface)
{
sendInput("w", [surface.id, surface.x, surface.y, surface.width, surface.height]);
}
-var windowGeometryTimeout = null;
-
-function updateBrowserWindowGeometry(win, alwaysSendConfigure) {
- if (win.closed)
- return;
-
- var surface = win.surface;
-
- var innerW = win.innerWidth;
- var innerH = win.innerHeight;
-
- var x = surface.x;
- var y = surface.y;
-
- if (win.mozInnerScreenX != undefined) {
- x = win.mozInnerScreenX;
- y = win.mozInnerScreenY;
- } else if (win.screenTop != undefined) {
- x = win.screenTop;
- y = win.screenLeft;
- } else {
- alert("No implementation to get window position");
- }
-
- if (alwaysSendConfigure || x != surface.x || y != surface.y ||
- innerW != surface.width || innerH != surface.height) {
- var oldX = surface.x;
- var oldY = surface.y;
- surface.x = x;
- surface.y = y;
- if (surface.width != innerW || surface.height != innerH)
- resizeCanvas(surface.canvas, innerW, innerH);
- surface.width = innerW;
- surface.height = innerH;
- sendConfigureNotify(surface);
- for (id in surfaces) {
- var childSurface = surfaces[id];
- var transientToplevel = getTransientToplevel(childSurface);
- if (transientToplevel != null && transientToplevel == surface) {
- childSurface.x += surface.x - oldX;
- childSurface.y += surface.y - oldY;
- sendConfigureNotify(childSurface);
- }
- }
- }
-}
-
-function browserWindowClosed(win) {
- var surface = win.surface;
-
- sendInput ("W", [surface.id]);
- for (id in surfaces) {
- var childSurface = surfaces[id];
- var transientToplevel = getTransientToplevel(childSurface);
- if (transientToplevel != null && transientToplevel == surface) {
- sendInput ("W", [childSurface.id]);
- }
- }
-}
-
-function registerWindow(win)
-{
- toplevelWindows.push(win);
- win.onresize = function(ev) { updateBrowserWindowGeometry(ev.target, false); };
- if (!windowGeometryTimeout)
- windowGeometryTimeout = setInterval(function () {
- for (var i = 0; i < toplevelWindows.length; i++)
- updateBrowserWindowGeometry(toplevelWindows[i], false);
- }, 2000);
- win.onunload = function(ev) { browserWindowClosed(ev.target.defaultView); };
-}
-
-function unregisterWindow(win)
-{
- var i = toplevelWindows.indexOf(win);
- if (i >= 0)
- toplevelWindows.splice(i, 1);
-
- if (windowGeometryTimeout && toplevelWindows.length == 0) {
- clearInterval(windowGeometryTimeout);
- windowGeometryTimeout = null;
- }
-}
-
-function getTransientToplevel(surface)
-{
- while (surface && surface.transientParent != 0) {
- surface = surfaces[surface.transientParent];
- if (surface && surface.window)
- return surface;
- }
- return null;
-}
-
function getStyle(el, styleProp)
{
if (el.currentStyle) {
@@ -440,8 +316,6 @@ function cmdCreateSurface(id, x, y, width, height, isTemp)
surface.drawQueue = [];
surface.transientParent = 0;
surface.visible = false;
- surface.window = null;
- surface.document = document;
surface.frame = null;
var canvas = document.createElement("canvas");
@@ -451,7 +325,7 @@ function cmdCreateSurface(id, x, y, width, height, isTemp)
surface.canvas = canvas;
var toplevelElement;
- if (useToplevelWindows || isTemp) {
+ if (isTemp) {
toplevelElement = canvas;
document.body.appendChild(canvas);
} else {
@@ -511,42 +385,10 @@ function cmdShowSurface(id)
var xOffset = surface.x;
var yOffset = surface.y;
- if (useToplevelWindows) {
- var doc = document;
- if (!surface.isTemp) {
- var options =
- 'width='+surface.width+',height='+surface.height+
- ',location=no,menubar=no,scrollbars=no,toolbar=no';
- if (surface.positioned)
- options = options +
- ',left='+surface.x+',top='+surface.y+',screenX='+surface.x+',screenY='+surface.y;
- var win = window.open('','_blank', options);
- win.surface = surface;
- registerWindow(win);
- doc = win.document;
- doc.open();
- doc.write("<body></body>");
- setupDocument(doc);
-
- surface.window = win;
- xOffset = 0;
- yOffset = 0;
- } else {
- var transientToplevel = getTransientToplevel(surface);
- if (transientToplevel) {
- doc = transientToplevel.window.document;
- xOffset = surface.x - transientToplevel.x;
- yOffset = surface.y - transientToplevel.y;
- }
- }
-
- ensureSurfaceInDocument(surface, doc);
- } else {
- if (surface.frame) {
- var offset = getFrameOffset(surface);
- xOffset -= offset.x;
- yOffset -= offset.y;
- }
+ if (surface.frame) {
+ var offset = getFrameOffset(surface);
+ xOffset -= offset.x;
+ yOffset -= offset.y;
}
surface.toplevelElement.style["left"] = xOffset + "px";
@@ -554,9 +396,6 @@ function cmdShowSurface(id)
surface.toplevelElement.style["visibility"] = "visible";
restackWindows();
-
- if (surface.window)
- updateBrowserWindowGeometry(surface.window, false);
}
function cmdHideSurface(id)
@@ -573,15 +412,6 @@ function cmdHideSurface(id)
var element = surface.toplevelElement;
element.style["visibility"] = "hidden";
-
- // Import the canvas into the main document
- ensureSurfaceInDocument(surface, document);
-
- if (surface.window) {
- unregisterWindow(surface.window);
- surface.window.close();
- surface.window = null;
- }
}
function cmdSetTransientFor(id, parentId)
@@ -666,45 +496,30 @@ function cmdMoveResizeSurface(id, has_pos, x, y, has_size, w, h)
resizeCanvas(surface.canvas, w, h);
if (surface.visible) {
- if (surface.window) {
- /* TODO: This moves the outer frame position, we really want the inner position.
- * However this isn't *strictly* invalid, as any WM could have done whatever it
- * wanted with the positioning of the window.
- */
- if (has_pos)
- surface.window.moveTo(surface.x, surface.y);
- if (has_size)
- resizeBrowserWindow(surface.window, w, h);
- } else {
- if (has_pos) {
- var xOffset = surface.x;
- var yOffset = surface.y;
-
- var transientToplevel = getTransientToplevel(surface);
- if (transientToplevel) {
- xOffset = surface.x - transientToplevel.x;
- yOffset = surface.y - transientToplevel.y;
- }
+ if (has_pos) {
+ var xOffset = surface.x;
+ var yOffset = surface.y;
- var element = surface.canvas;
- if (surface.frame) {
- element = surface.frame;
- var offset = getFrameOffset(surface);
- xOffset -= offset.x;
- yOffset -= offset.y;
- }
+ var transientToplevel = getTransientToplevel(surface);
+ if (transientToplevel) {
+ xOffset = surface.x - transientToplevel.x;
+ yOffset = surface.y - transientToplevel.y;
+ }
- element.style["left"] = xOffset + "px";
- element.style["top"] = yOffset + "px";
+ var element = surface.canvas;
+ if (surface.frame) {
+ element = surface.frame;
+ var offset = getFrameOffset(surface);
+ xOffset -= offset.x;
+ yOffset -= offset.y;
}
+
+ element.style["left"] = xOffset + "px";
+ element.style["top"] = yOffset + "px";
}
}
- if (surface.window) {
- updateBrowserWindowGeometry(surface.window, true);
- } else {
- sendConfigureNotify(surface);
- }
+ sendConfigureNotify(surface);
}
function cmdFlushSurface(id)
@@ -985,13 +800,8 @@ function getPositionsFromAbsCoord(absX, absY, relativeId) {
function getPositionsFromEvent(ev, relativeId) {
var absX, absY;
- if (useToplevelWindows) {
- absX = ev.screenX;
- absY = ev.screenY;
- } else {
- absX = ev.pageX;
- absY = ev.pageY;
- }
+ absX = ev.pageX;
+ absY = ev.pageY;
var res = getPositionsFromAbsCoord(absX, absY, relativeId);
lastX = res.rootX;
@@ -1020,10 +830,6 @@ function updateForEvent(ev) {
lastState |= GDK_MOD1_MASK;
lastTimeStamp = ev.timeStamp;
- if (ev.target.surface && ev.target.surface.window) {
- var win = ev.target.surface.window;
- updateBrowserWindowGeometry(win, false);
- }
}
function onMouseMove (ev) {
@@ -2830,8 +2636,6 @@ function connect()
var query_string = url.split("?");
if (query_string.length > 1) {
var params = query_string[1].split("&");
- if (params[0].indexOf("toplevel") != -1)
- useToplevelWindows = true;
}
var loc = window.location.toString().replace("http:", "ws:");
@@ -2848,19 +2652,14 @@ function connect()
ws.onopen = function() {
inputSocket = ws;
var w, h;
- if (useToplevelWindows) {
- w = window.screen.width;
- h = window.screen.height;
- } else {
+ w = window.innerWidth;
+ h = window.innerHeight;
+ window.onresize = function(ev) {
+ var w, h;
w = window.innerWidth;
h = window.innerHeight;
- window.onresize = function(ev) {
- var w, h;
- w = window.innerWidth;
- h = window.innerHeight;
- sendInput ("d", [w, h]);
- };
- }
+ sendInput ("d", [w, h]);
+ };
sendInput ("d", [w, h]);
};
ws.onclose = function() {
@@ -2871,8 +2670,4 @@ function connect()
};
setupDocument(document);
- window.onunload = function (ev) {
- for (var i = 0; i < toplevelWindows.length; i++)
- toplevelWindows[i].close();
- };
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]