From d227eda9cba8f120b49ab6b9d6d3b46651f8c6c2 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Fri, 22 Mar 2013 14:21:51 -0400
Subject: [PATCH] Call resize handler in intervals to prevent lags and double onresize calls in Chrome (#1489005)

---
 CHANGELOG         |    1 +
 skins/larry/ui.js |   44 ++++++++++++++++++++++++++------------------
 2 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index bcbe264..04ec31d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Call resize handler in intervals to prevent lags and double onresize calls in Chrome (#1489005)
 - Fix javascript error in IE9 when loading form with placeholders into an iframe (#1489008)
 - Fix handling of some conditional comment tags in HTML message (#1489004)
 - Add rel="noreferrer" for links in displayed messages (#1484686)
diff --git a/skins/larry/ui.js b/skins/larry/ui.js
index b787dbb..58e03fb 100644
--- a/skins/larry/ui.js
+++ b/skins/larry/ui.js
@@ -287,28 +287,36 @@
   /**
    * Update UI on window resize
    */
-  function resize()
+  function resize(e)
   {
-    if (rcmail.env.task == 'mail') {
-      if (rcmail.env.action == 'show' || rcmail.env.action == 'preview')
-        layout_messageview();
-      else if (rcmail.env.action == 'compose')
-        layout_composeview();
-    }
+    // resize in intervals to prevent lags and double onresize calls in Chrome (#1489005)
+    var interval = e ? 10 : 0;
 
-    // make iframe footer buttons float if scrolling is active
-    $('body.iframe .footerleft').each(function(){
-      var footer = $(this),
-        body = $(document.body),
-        floating = footer.hasClass('floating'),
-        overflow = body.outerHeight(true) > $(window).height();
+    if (rcmail.resize_timeout)
+      window.clearTimeout(rcmail.resize_timeout);
 
-      if (overflow != floating) {
-        var action = overflow ? 'addClass' : 'removeClass';
-        footer[action]('floating');
-        body[action]('floatingbuttons');
+    rcmail.resize_timeout = window.setTimeout(function() {
+      if (rcmail.env.task == 'mail') {
+        if (rcmail.env.action == 'show' || rcmail.env.action == 'preview')
+          layout_messageview();
+        else if (rcmail.env.action == 'compose')
+          layout_composeview();
       }
-    });
+
+      // make iframe footer buttons float if scrolling is active
+      $('body.iframe .footerleft').each(function(){
+        var footer = $(this),
+          body = $(document.body),
+          floating = footer.hasClass('floating'),
+          overflow = body.outerHeight(true) > $(window).height();
+
+        if (overflow != floating) {
+          var action = overflow ? 'addClass' : 'removeClass';
+          footer[action]('floating');
+          body[action]('floatingbuttons');
+        }
+      });
+    }, interval);
   }
 
   /**

--
Gitblit v1.9.1