Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2009-06-17 17:18:59 (GMT)
committer Tomeu Vizoso <tomeu@sugarlabs.org>2009-07-10 15:41:05 (GMT)
commit94266b8bf35429ef57ab1dc08e72017794ade82c (patch)
tree322cee8e7afa6e24407a69785f768356fbbbf116
parent63981356f0f10c4dc95424239026dd253c647276 (diff)
Fix visibility (inspired on gtkmozembed)
-rw-r--r--configure.ac2
-rw-r--r--python/webview.py38
2 files changed, 30 insertions, 10 deletions
diff --git a/configure.ac b/configure.ac
index 464755d..ed3cd1f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,6 +17,8 @@ AC_SUBST([HULAHOP_HOST_OS],[$host_os])
AM_INIT_AUTOMAKE([1.9 foreign dist-bzip2 no-dist-gzip])
+AM_MAINTAINER_MODE
+
AC_PROG_LIBTOOL
AC_PROG_CXX
diff --git a/python/webview.py b/python/webview.py
index 3cccde6..08f55ff 100644
--- a/python/webview.py
+++ b/python/webview.py
@@ -17,6 +17,7 @@
import logging
import gobject
+import gtk
from hulahop import _hulahop
@@ -38,6 +39,7 @@ class _Chrome:
self.title = ''
self._modal = False
self._chrome_flags = interfaces.nsIWebBrowserChrome.CHROME_ALL
+ self._visible = False
def provideWindow(self, parent, flags, position_specified,
size_specified, uri, name, features):
@@ -140,10 +142,6 @@ class _Chrome:
logging.debug("nsIEmbeddingSiteWindow.set_title: %r" % title)
self.title = title
self.web_view._notify_title_changed()
-
- def get_visibility(self):
- #logging.debug("nsIEmbeddingSiteWindow.get_visibility: %r" % self.web_view.get_toplevel().props.visible)
- return self.web_view.get_toplevel().props.visible
def get_webBrowser(self):
return self.web_view.browser
@@ -154,13 +152,20 @@ class _Chrome:
def set_chromeFlags(self, flags):
self._chrome_flags = flags
+ def get_visibility(self):
+ logging.debug("nsIEmbeddingSiteWindow.get_visibility: %r" % self._visible)
+ # See bug https://bugzilla.mozilla.org/show_bug.cgi?id=312998
+ # Work around the problem that sometimes the window is already visible
+ # even though mVisibility isn't true yet.
+ visibility = self.web_view.props.visibility
+ mapped = self.web_view.flags() & gtk.MAPPED
+ return visibility or (not self.web_view.is_chrome and mapped)
+
def set_visibility(self, visibility):
logging.debug("nsIEmbeddingSiteWindow.set_visibility: %r" % visibility)
- if visibility:
- self.web_view.show()
- self.web_view.get_toplevel().show()
- else:
- self.web_view.get_toplevel().hide()
+ if visibility == self.web_view.props.visibility:
+ return
+ self.web_view.props.visibility = visibility
# nsIWebProgressListener
def onStateChange(self, web_progress, request, state_flags, status):
@@ -176,10 +181,14 @@ class _Chrome:
# nsIInterfaceRequestor
def queryInterface(self, uuid):
+ if uuid == interfaces.nsIDOMWindow:
+ return self.web_view.dom_window
+
if not uuid in self._com_interfaces_:
# Components.returnCode = Cr.NS_ERROR_NO_INTERFACE;
logging.warning('Interface %s not implemented by this instance: %r' % (uuid, self))
return None
+
return xpcom.server.WrapObject(self, uuid)
def getInterface(self, uuid):
@@ -205,7 +214,9 @@ class WebView(_hulahop.WebView):
'title' : (str, None, None, None,
gobject.PARAM_READABLE),
'status' : (str, None, None, None,
- gobject.PARAM_READABLE)
+ gobject.PARAM_READABLE),
+ 'visibility' : (bool, None, None, False,
+ gobject.PARAM_READWRITE)
}
def __init__(self):
@@ -228,6 +239,7 @@ class WebView(_hulahop.WebView):
self._status = ''
self._first_uri = None
+ self._visibility = False
def do_setup(self):
_hulahop.WebView.do_setup(self)
@@ -247,6 +259,12 @@ class WebView(_hulahop.WebView):
return self._chrome.title
elif pspec.name == 'status':
return self._status
+ elif pspec.name == 'visibility':
+ return self._visibility
+
+ def do_set_property(self, pspec, value):
+ if pspec.name == 'visibility':
+ self._visibility = value
def get_window_root(self):
return _hulahop.WebView.get_window_root(self)