Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2007-05-28 14:48:41 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2007-05-28 14:48:41 (GMT)
commita07dcc0c503cc081b7fc4e877a148258b45af583 (patch)
treed4b1888e4f635d3e7b03abd482e8468bf02d9517 /python
parent32a18dfc6da97801673dd0bf7424350489694ca0 (diff)
First try at popup support.
Diffstat (limited to 'python')
-rw-r--r--python/webview.py88
1 files changed, 76 insertions, 12 deletions
diff --git a/python/webview.py b/python/webview.py
index 443131a..93de5bf 100644
--- a/python/webview.py
+++ b/python/webview.py
@@ -14,6 +14,7 @@
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
+import logging
import gobject
@@ -22,58 +23,115 @@ from hulahop import _hulahop
import xpcom
from xpcom import components
from xpcom.components import interfaces
+from xpcom.nsError import *
class _Chrome:
- _com_interfaces_ = interfaces.nsIWebBrowserChrome, \
- interfaces.nsIEmbeddingSiteWindow
+ _com_interfaces_ = interfaces.nsIWebBrowserChrome, \
+ interfaces.nsIEmbeddingSiteWindow, \
+ interfaces.nsIInterfaceRequestor
def __init__(self, web_view):
self.web_view = web_view
self.title = ''
-
+ self._visibility = False
+
# nsIWebBrowserChrome
def destroyBrowserWindow(self):
- pass
+ logging.debug("nsIWebBrowserChrome.destroyBrowserWindow")
def exitModalEventLoop(self, status):
- pass
+ logging.debug("nsIWebBrowserChrome.exitModalEventLoop")
def isWindowModal(self):
+ logging.debug("nsIWebBrowserChrome.isWindowModal")
return False
def setStatus(self, statusType, status):
+ #logging.debug("nsIWebBrowserChrome.setStatus")
pass
def showAsModal(self):
- pass
+ logging.debug("nsIWebBrowserChrome.showAsModal")
def sizeBrowserTo(self, cx, cy):
- pass
+ logging.debug("nsIWebBrowserChrome.sizeBrowserTo: %r %r" % (cx, cy))
+ self.web_view.get_toplevel().resize(cx, cy)
+ self.web_view.type = WebView.TYPE_POPUP
# nsIEmbeddingSiteWindow
def getDimensions(self, flags):
- pass
+ logging.debug("nsIEmbeddingSiteWindow.getDimensions: %r" % flags)
+ base_window = self.web_view.browser.queryInterface(interfaces.nsIBaseWindow)
+ if (flags & interfaces.nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION) and \
+ ((flags & interfaces.nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_INNER) or \
+ (flags & interfaces.nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_OUTER)):
+ return base_window.getPositionAndSize()
+ elif flags & interfaces.nsIEmbeddingSiteWindow.DIM_FLAGS_POSITION:
+ x, y = base_window.getPosition()
+ return (x, y, 0, 0)
+ elif (flags & interfaces.nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_INNER) or \
+ (flags & interfaces.nsIEmbeddingSiteWindow.DIM_FLAGS_SIZE_OUTER):
+ width, height = base_window.getSize()
+ return (0, 0, width, height)
+ else:
+ raise xpcom.Exception('Invalid flags: %r' % flags)
def setDimensions(self, flags, x, y, cx, cy):
- pass
+ logging.debug("nsIEmbeddingSiteWindow.setDimensions: %r" % flags)
def setFocus(self):
- pass
+ logging.debug("nsIEmbeddingSiteWindow.setFocus")
+ base_window = self.web_view.browser.queryInterface(interfaces.nsIBaseWindow)
+ base_window.setFocus()
def get_title(self):
+ logging.debug("nsIEmbeddingSiteWindow.get_title: %r" % self.title)
return self.title
def set_title(self, title):
+ logging.debug("nsIEmbeddingSiteWindow.set_title: %r" % title)
self.title = title
self.web_view._notify_title_changed()
def get_visibility(self):
- return True
+ logging.debug("nsIEmbeddingSiteWindow.get_visibility: %r" % self._visibility)
+ return self._visibility
def set_visibility(self, visibility):
- pass
+ logging.debug("nsIEmbeddingSiteWindow.set_visibility: %r" % visibility)
+ if self._visibility != visibility:
+ self._visibility = visibility
+ if self._visibility:
+ self.web_view.get_toplevel().show()
+ else:
+ self.web_view.get_toplevel().hide()
+
+ def queryInterface(self, uuid):
+ if not uuid in self._com_interfaces_:
+ # Components.returnCode = Cr.NS_ERROR_NO_INTERFACE;
+ logging.error('Interface %s not implemented by this instance: %r' % (uuid, self))
+ return None
+ return xpcom.server.WrapObject(self, uuid)
+
+ def getInterface(self, uuid):
+ result = self.queryInterface(uuid)
+
+ if not result:
+ # delegate to the nsIWebBrowser
+ requestor = self.web_view.browser.queryInterface(interfaces.nsIInterfaceRequestor)
+ try:
+ result = requestor.getInterface(uuid)
+ except xpcom.Exception:
+ logging.error('Interface %s not implemented by this instance: %r' % (uuid, self.web_view.browser))
+ result = None
+
+ return result
class WebView(_hulahop.WebView):
+
+ TYPE_WINDOW = 0
+ TYPE_POPUP = 1
+
__gproperties__ = {
'title' : (str, None, None, None,
gobject.PARAM_READABLE)
@@ -81,11 +139,16 @@ class WebView(_hulahop.WebView):
def __init__(self):
_hulahop.WebView.__init__(self)
+ self.type = WebView.TYPE_WINDOW
+
self._chrome = xpcom.server.WrapObject(
_Chrome(self), interfaces.nsIEmbeddingSiteWindow)
weak_ref = xpcom.client.WeakReference(self._chrome)
self.browser.containerWindow = self._chrome
+ item = self.browser.queryInterface(interfaces.nsIDocShellTreeItem)
+ item.itemType = interfaces.nsIDocShellTreeItem.typeContentWrapper
+
self.create_window()
def _notify_title_changed(self):
@@ -124,3 +187,4 @@ class WebView(_hulahop.WebView):
doc_shell = property(get_doc_shell)
web_progress = property(get_web_progress)
web_navigation = property(get_web_navigation)
+