Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/browser.py
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2007-05-21 15:54:37 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2007-05-21 15:54:37 (GMT)
commit46fbb37bc2efc531b48712351d80e9e24a9460a8 (patch)
tree7debdf771bd22b8dfa412a11cd895c6627fcc00a /browser.py
parenta651816bcc686fa01a2c22a2b5eef2ccec83b46e (diff)
Port to hulahop (lots of regressions)
Diffstat (limited to 'browser.py')
-rw-r--r--browser.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/browser.py b/browser.py
new file mode 100644
index 0000000..09493a2
--- /dev/null
+++ b/browser.py
@@ -0,0 +1,108 @@
+# Copyright (C) 2006, Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+from hulahop.webview import WebView
+
+class Browser(WebView):
+ def __init__(self):
+ WebView.__init__(self)
+
+"""
+class _PopupCreator(gobject.GObject):
+ __gsignals__ = {
+ 'popup-created': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE, ([])),
+ }
+
+ def __init__(self, parent_window):
+ gobject.GObject.__init__(self)
+
+ logging.debug('Creating the popup widget')
+
+ self._sized_popup = False
+ self._parent_window = parent_window
+
+ self._dialog = gtk.Window()
+ self._dialog.set_resizable(True)
+
+ self._dialog.realize()
+ self._dialog.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
+
+ self._embed = webviewWebView()
+ self._size_to_sid = self._embed.connect('size_to', self._size_to_cb)
+ self._vis_sid = self._embed.connect('visibility', self._visibility_cb)
+
+ self._dialog.add(self._embed)
+
+ def _size_to_cb(self, embed, width, height):
+ logging.debug('Resize the popup to %d %d' % (width, height))
+ self._sized_popup = True
+ self._dialog.resize(width, height)
+
+ def _visibility_cb(self, embed, visible):
+ if visible:
+ if self._sized_popup:
+ logging.debug('Show the popup')
+ self._embed.show()
+ self._dialog.set_transient_for(self._parent_window)
+ self._dialog.show()
+ else:
+ logging.debug('Open a new activity for the popup')
+ self._dialog.remove(self._embed)
+
+ # FIXME We need a better way to handle this.
+ # It seem like a pretty special case though, I doubt
+ # other activities will need something similar.
+ from webactivity import WebActivity
+ from sugar.activity import activityfactory
+ from sugar.activity.activityhandle import ActivityHandle
+ handle = ActivityHandle(activityfactory.create_activity_id())
+ activity = WebActivity(handle, self._embed)
+ activity.show()
+
+ self._embed.disconnect(self._size_to_sid)
+ self._embed.disconnect(self._vis_sid)
+
+ self.emit('popup-created')
+
+ def get_embed(self):
+ return self._embed
+
+class WebView(webview.WebView):
+ __gtype_name__ = "SugarWebBrowser"
+
+ def __init__(self):
+ Browser.__init__(self)
+ self._popup_creators = []
+
+ self.connect('mouse-click', self._dom_click_cb)
+
+ def _dom_click_cb(self, browser, event):
+ if event.button == 3 and event.image_uri:
+ menu = _ImageMenu(browser, event)
+ menu.popup(None, None, None, 1, 0)
+
+ def do_create_window(self):
+ popup_creator = _PopupCreator(self.get_toplevel())
+ popup_creator.connect('popup-created', self._popup_created_cb)
+
+ self._popup_creators.append(popup_creator)
+
+ return popup_creator.get_embed()
+
+ def _popup_created_cb(self, creator):
+ self._popup_creators.remove(creator)
+"""