Xpoint
   [напомнить пароль]

Баг ? Метод popupBoxObject.moveTo

Метки: [без меток]
2007-06-03 07:15:05 [обр] Cube(2/2)[досье]

При работе из расширения, метод popupBoxObject.moveTo работает как-то неожиданно.
Ожидается, что он принимает экранные координаты и отображает popup в этих координатах. Однако, при работе из расширения, очень похоже на то, что сначала он пересчитывает передаваемые ему аргументы в координаты клиентской области браузера. Т. е., если окно браузера не развёрнуто на весь экран и сдвинуто вправо/вниз, то при малых координатах popup может оказаться вне окна браузера.
Firefox 2.0.0.4
В обычном xul (даже работающем из chrome) moveTo работает так, как от него ожидается.

Это баг или я что-то делаю неправильно ?
Далее минимальный код, для иллюстрации.
xul (не расширение):

?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window title="moveTo bug ?"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
      onload="onload();">

   <script type="application/x-javascript">
      <![CDATA[
         function onload ()
         {
            window. addEventListener ("mousemove", mmh, true);
         }
         function mmh (event)
         {
            var tt = document. getElementById ("popup1");
            var box = document. getElementById ("vbox1");
            tt. showPopup (box, event. screenX, event. screenY - 32, "tooltip", "", "");
            tt. moveTo (event. screenX, event. screenY - 32);
         }
      ]]>
   </script>
   <vbox id="vbox1">
      <popupset>
         <tooltip id="popup1" label="this tooltip has no moveTo bug" position="at_cursor"/>
      </popupset>
   </vbox>
</window>

оверлей расширения:

?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE overlay [
<!ENTITY % platformDTD SYSTEM "chrome://navigator/locale/navigator.dtd" >
%platformDTD;
]>
<overlay id="movetobug" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <script src="movetobug.js"/>
   <script type="application/x-javascript">
        <![CDATA[
            window. addEventListener ("load", movetobug. init, false);
        ]]>
    </script>
   <popupset id="mainPopupSet">
      <tooltip id="movetobug-tooltip" label="moveTo bug"/>
   </popupset>
</overlay

js расширения:

var movetobug =
{
   init: function (event)
   {
      window. addEventListener
      (
         "mousemove",
         movetobug. mousemove,
         true
      );
   },

   mousemove: function (event)
   {
      var _this = movetobug;
        var tooltip = document. getElementById ("movetobug-tooltip");
        var tb = document. getElementById ("content");
      var x = event. screenX;
      var y = event. screenY;
      if (!_this. popupIsShown)
      tooltip. showPopup (tb, x, y, "tooltip", "", "");
      tooltip. moveTo (x, y);
   }
}
Powered by POEM™ Engine Copyright © 2002-2005