From 46fbb37bc2efc531b48712351d80e9e24a9460a8 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Mon, 21 May 2007 15:54:37 +0000 Subject: Port to hulahop (lots of regressions) --- (limited to 'browser.py') 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) +""" -- cgit v0.9.1