Skip to content

Commit

Permalink
#214 - solve issue of XMLHttpRequest "NS_ERROR_NOT_INITIALISED" XMLHt…
Browse files Browse the repository at this point in the history
…tpRequest.init function is not available, use a workaround

git-svn-id: https://pyjamas.svn.sourceforge.net/svnroot/pyjamas/trunk@1741 7a2bd370-bda8-463c-979e-2900ccfb811e
  • Loading branch information
lkcl committed Sep 6, 2009
1 parent ac1fe42 commit 00f70a0
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 8 deletions.
6 changes: 4 additions & 2 deletions examples/slideshow/Slideshow.py
Expand Up @@ -16,6 +16,7 @@
from SlideLoader import SlideListLoader
from pyjamas.Timer import Timer
from pyjamas.ui.Button import Button
from pyjamas import DOM

class Slideshow:

Expand Down Expand Up @@ -67,8 +68,9 @@ def onModuleLoad(self):
# kludgy way to detect "real" pyjd / pyjs difference.
# there's a bug in XULRunner nsIXMLHttpRequest which
# stops it from working (open "NS_ERROR_NOT_INITIALISED")
if not hasattr(pyjd, "Browser"):
Timer(1, self)
#if not hasattr(pyjd, "Browser"):
Timer(1000, self)
#DOM.buttonClick(self.b.getElement())

def onClick(self, sender):
self.loadSinks()
Expand Down
3 changes: 3 additions & 0 deletions library/pyjamas/DOM.py
Expand Up @@ -43,6 +43,9 @@ def set_listener(item, listener):
else:
listeners[hash(item)] = listener

# ugh, *spew*, *hurl* http://code.google.com/p/pyjamas/issues/detail?id=213
hack_timer_workaround_bug_button = None

def init():

mf = get_main_frame()
Expand Down
1 change: 0 additions & 1 deletion library/pyjamas/HTTPRequest.py
Expand Up @@ -107,7 +107,6 @@ def asyncPostImpl(self, user, pwd, url, postData, handler,
else:
# EEK! xmlhttprequest.open in xpcom is a miserable bastard.
#xmlHttp.open("POST", url, True, '', '')
print xmlHttp.open, dir(xmlHttp.open)
print url, xmlHttp.open("POST", url)
xmlHttp.setRequestHeader("Content-Type", content_type)
xmlHttp.setRequestHeader("Content-Length", str(len(postData)))
Expand Down
20 changes: 20 additions & 0 deletions library/pyjamas/platform/DOMhulahop.py
Expand Up @@ -5,3 +5,23 @@ def getAbsoluteLeft(elem):
def getAbsoluteTop(elem):
top = elem.getBoundingClientRect().top
return top + elem.ownerDocument.body.scrollTop

def init():

mf = get_main_frame()
mf._addWindowEventListener("click", browser_event_cb)
mf._addWindowEventListener("change", browser_event_cb)
mf._addWindowEventListener("mouseout", browser_event_cb)
mf._addWindowEventListener("mousedown", browser_event_cb)
mf._addWindowEventListener("mouseup", browser_event_cb)
mf._addWindowEventListener("resize", browser_event_cb)
mf._addWindowEventListener("keyup", browser_event_cb)
mf._addWindowEventListener("keydown", browser_event_cb)
mf._addWindowEventListener("keypress", browser_event_cb)

cb = get_main_frame()._timer_callback_workaround
global hack_timer_workaround_bug_button
mf._hack_timer_workaround_bug_button = createButton()
mf.addEventListener(mf._hack_timer_workaround_bug_button, "click", cb)


30 changes: 25 additions & 5 deletions pyjd/hula.py
Expand Up @@ -156,6 +156,22 @@ def _loading(self, progress_listener, progress):
pass
#print "loading", progress, self.getDomWindow().location.href

def _trigger_fake_button(self):
doc = self.getDomDocument()
wnd = self.getDomWindow()
element = self._hack_timer_workaround_bug_button
evt = doc.createEvent('MouseEvents')
evt.initMouseEvent("click", True, True, wnd, 1, 0, 0, 0, 0, False,
False, False, False, 0, element)
element.dispatchEvent(evt)

def _timer_callback_workaround(self, *args):

global timer_q
while timer_q:
fn = timer_q.pop()
fn()

def is_loaded():
return wv.already_initialised

Expand All @@ -164,6 +180,10 @@ def is_loaded():

def add_timer_queue(fn):
timer_q.append(fn)
wv._trigger_fake_button()

#DOM.buttonClick(self.b.getElement())

# hope and pray that an event occurs!
#event = gtk.gdk.new()
#gtk.gdk.push(event)
Expand All @@ -172,18 +192,18 @@ def run(one_event=False, block=True):
if one_event:
if block or gtk.events_pending():
gtk.main_iteration()
sys.stdout.flush()
else:
while 1:
gtk.main_iteration()

if timer_q:
fn = timer_q.pop()
fn()
sys.stdout.flush()

#gtk.main()

def setup(application, appdir=None, width=800, height=600):

gtk.gdk.threads_init()

win = gtk.Window(gtk.WINDOW_TOPLEVEL)
win.set_size_request(width, height)
win.connect('destroy', gtk.main_quit)
Expand All @@ -198,7 +218,7 @@ def setup(application, appdir=None, width=800, height=600):
wv.load_app()

while 1:
if is_loaded():
if is_loaded() and not gtk.events_pending():
return
run(one_event=True)

Expand Down

0 comments on commit 00f70a0

Please sign in to comment.