Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2011-10-30 16:34:41 (GMT)
committer Daniel Drake <dsd@laptop.org>2011-10-30 16:37:44 (GMT)
commit27ac71d9e016dcaadfb7d96ff1df989abb0ebe5a (patch)
treef0f8723708098b4f9ec54a426f2fc9e19923dc8f
parent1991022c70872130fd6b7cc47d837eee23dad419 (diff)
gtk3
-rw-r--r--browser.py193
-rw-r--r--downloadmanager.py40
-rw-r--r--edittoolbar.py25
-rw-r--r--filepicker.py16
-rw-r--r--globalhistory.py8
-rw-r--r--linkbutton.py26
-rw-r--r--model.py10
-rw-r--r--palettes.py62
-rw-r--r--places.py2
-rw-r--r--progresslistener.py16
-rw-r--r--sessionhistory.py16
-rw-r--r--sessionstore.py5
-rw-r--r--viewtoolbar.py10
-rw-r--r--webactivity.py90
-rw-r--r--webtoolbar.py73
-rw-r--r--widgets.py34
16 files changed, 217 insertions, 409 deletions
diff --git a/browser.py b/browser.py
index e1d8990..b0c56ef 100644
--- a/browser.py
+++ b/browser.py
@@ -20,20 +20,12 @@ import os
import time
from gettext import gettext as _
-import gobject
-import gtk
-import pango
-import hulahop
-import xpcom
-from xpcom.nsError import *
-from xpcom import components
-from xpcom.components import interfaces
-from hulahop.webview import WebView
-
-from sugar import env
-from sugar.activity import activity
-from sugar.graphics import style
-from sugar.graphics.icon import Icon
+from gi.repository import GObject, Gtk, Pango, WebKit
+
+from sugar3 import env
+from sugar3.activity import activity
+from sugar3.graphics import style
+from sugar3.graphics.icon import Icon
import sessionstore
from palettes import ContentInvoker
@@ -46,8 +38,6 @@ _LIBRARY_PATH = '/usr/share/library-common/index.html'
class SaveListener(object):
- _com_interfaces_ = interfaces.nsIWebProgressListener
-
def __init__(self, user_data, callback):
self._user_data = user_data
self._callback = callback
@@ -79,9 +69,6 @@ class SaveListener(object):
class CommandListener(object):
-
- _com_interfaces_ = interfaces.nsIDOMEventListener
-
def __init__(self, window):
self._window = window
@@ -102,13 +89,11 @@ class TabbedView(BrowserNotebook):
__gtype_name__ = 'TabbedView'
__gsignals__ = {
- 'focus-url-entry': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
+ 'focus-url-entry': (GObject.SignalFlags.RUN_FIRST,
+ None,
([])),
}
- _com_interfaces_ = interfaces.nsIWindowCreator
-
AGENT_SHEET = os.path.join(activity.get_bundle_path(),
'agent-stylesheet.css')
USER_SHEET = os.path.join(env.get_profile_path(), 'gecko',
@@ -120,36 +105,10 @@ class TabbedView(BrowserNotebook):
self.props.show_border = False
self.props.scrollable = True
- io_service_class = components.classes[ \
- "@mozilla.org/network/io-service;1"]
- io_service = io_service_class.getService(interfaces.nsIIOService)
-
# Use xpcom to turn off "offline mode" detection, which disables
# access to localhost for no good reason. (Trac #6250.)
- io_service2 = io_service_class.getService(interfaces.nsIIOService2)
- io_service2.manageOfflineStatus = False
-
- cls = components.classes['@mozilla.org/content/style-sheet-service;1']
- style_sheet_service = cls.getService(interfaces.nsIStyleSheetService)
-
- if os.path.exists(TabbedView.AGENT_SHEET):
- agent_sheet_uri = io_service.newURI('file:///' +
- TabbedView.AGENT_SHEET,
- None, None)
- style_sheet_service.loadAndRegisterSheet(agent_sheet_uri,
- interfaces.nsIStyleSheetService.AGENT_SHEET)
-
- if os.path.exists(TabbedView.USER_SHEET):
- url = 'file:///' + TabbedView.USER_SHEET
- user_sheet_uri = io_service.newURI(url, None, None)
- style_sheet_service.loadAndRegisterSheet(user_sheet_uri,
- interfaces.nsIStyleSheetService.USER_SHEET)
-
- cls = components.classes['@mozilla.org/embedcomp/window-watcher;1']
- window_watcher = cls.getService(interfaces.nsIWindowWatcher)
- window_creator = xpcom.server.WrapObject(self,
- interfaces.nsIWindowCreator)
- window_watcher.setWindowCreator(window_creator)
+ #io_service2 = io_service_class.getService(interfaces.nsIIOService2)
+ #io_service2.manageOfflineStatus = False
self.connect('size-allocate', self.__size_allocate_cb)
self.connect('page-added', self.__page_added_cb)
@@ -242,7 +201,8 @@ class TabbedView(BrowserNotebook):
n_pages = self.get_n_pages()
canvas_size = self.get_allocation()
- overlap_size = self.style_get_property('tab-overlap') * n_pages - 1
+ #overlap_size = self.style_get('tab-overlap') * n_pages - 1
+ overlap_size = 0 #FIXME
allowed_size = canvas_size.width - overlap_size
tab_new_size = int(allowed_size * 1.0 / (n_pages + 1))
@@ -285,7 +245,7 @@ class TabbedView(BrowserNotebook):
def _get_current_browser(self):
return self.get_nth_page(self.get_current_page())
- current_browser = gobject.property(type=object,
+ current_browser = GObject.property(type=object,
getter=_get_current_browser)
def get_session(self):
@@ -310,7 +270,7 @@ class TabbedView(BrowserNotebook):
sessionstore.set_session(browser, tab_session)
-gtk.rc_parse_string('''
+Gtk.rc_parse_string('''
style "browse-tab-close" {
xthickness = 0
ythickness = 0
@@ -318,37 +278,37 @@ gtk.rc_parse_string('''
widget "*browse-tab-close" style "browse-tab-close"''')
-class TabLabel(gtk.HBox):
+class TabLabel(Gtk.HBox):
__gtype_name__ = 'TabLabel'
__gsignals__ = {
- 'tab-close': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
+ 'tab-close': (GObject.SignalFlags.RUN_FIRST,
+ None,
([object])),
}
def __init__(self, browser):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self._browser = browser
self._browser.connect('is-setup', self.__browser_is_setup_cb)
- self._label = gtk.Label(_('Untitled'))
- self._label.set_ellipsize(pango.ELLIPSIZE_END)
+ self._label = Gtk.Label(label=_('Untitled'))
+ self._label.set_ellipsize(Pango.EllipsizeMode.END)
self._label.set_alignment(0, 0.5)
- self.pack_start(self._label)
+ self.pack_start(self._label, True, True, 0)
self._label.show()
close_tab_icon = Icon(icon_name='browse-close-tab')
- button = gtk.Button()
- button.props.relief = gtk.RELIEF_NONE
+ button = Gtk.Button()
+ button.props.relief = Gtk.ReliefStyle.NONE
button.props.focus_on_click = False
- icon_box = gtk.HBox()
+ icon_box = Gtk.HBox()
icon_box.pack_start(close_tab_icon, True, False, 0)
button.add(icon_box)
button.connect('clicked', self.__button_clicked_cb)
button.set_name('browse-tab-close')
- self.pack_start(button, expand=False)
+ self.pack_start(button, False, True, 0)
close_tab_icon.show()
icon_box.show()
button.show()
@@ -385,119 +345,46 @@ class TabLabel(gtk.HBox):
self._label.set_text(browser.props.title)
-class Browser(WebView):
+class Browser(WebKit.WebView):
__gtype_name__ = 'Browser'
__gsignals__ = {
- 'is-setup': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
+ 'is-setup': (GObject.SignalFlags.RUN_FIRST,
+ None,
([])),
- 'new-tab': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
+ 'new-tab': (GObject.SignalFlags.RUN_FIRST,
+ None,
([str])),
}
def __init__(self):
- WebView.__init__(self)
-
- self.history = HistoryListener()
- self.progress = ProgressListener()
-
- cls = components.classes["@mozilla.org/typeaheadfind;1"]
- self.typeahead = cls.createInstance(interfaces.nsITypeAheadFind)
-
- def do_setup(self):
- WebView.do_setup(self)
- listener = xpcom.server.WrapObject(ContentInvoker(self),
- interfaces.nsIDOMEventListener)
- self.window_root.addEventListener('click', listener, False)
-
- listener = xpcom.server.WrapObject(CommandListener(self.dom_window),
- interfaces.nsIDOMEventListener)
- self.window_root.addEventListener('command', listener, False)
-
- self.progress.setup(self)
-
- self.history.setup(self.web_navigation)
-
- self.typeahead.init(self.doc_shell)
-
- self.emit('is-setup')
-
- def get_url_from_nsiuri(self, uri):
- """
- get a nsIURI object and return a string with the url
- """
- if uri == None:
- return ''
- cls = components.classes['@mozilla.org/intl/texttosuburi;1']
- texttosuburi = cls.getService(interfaces.nsITextToSubURI)
- return texttosuburi.unEscapeURIForUI(uri.originCharset, uri.spec)
-
- def get_session(self):
- return sessionstore.get_session(self)
-
- def set_session(self, data):
- return sessionstore.set_session(self, data)
-
- def get_source(self, async_cb, async_err_cb):
- cls = components.classes[ \
- '@mozilla.org/embedding/browser/nsWebBrowserPersist;1']
- persist = cls.createInstance(interfaces.nsIWebBrowserPersist)
- # get the source from the cache
- persist.persistFlags = \
- interfaces.nsIWebBrowserPersist.PERSIST_FLAGS_FROM_CACHE
-
- temp_path = os.path.join(activity.get_activity_root(), 'instance')
- file_path = os.path.join(temp_path, '%i' % time.time())
- cls = components.classes["@mozilla.org/file/local;1"]
- local_file = cls.createInstance(interfaces.nsILocalFile)
- local_file.initWithPath(file_path)
-
- progresslistener = SaveListener(file_path, async_cb)
- persist.progressListener = xpcom.server.WrapObject(
- progresslistener, interfaces.nsIWebProgressListener)
-
- uri = self.web_navigation.currentURI
- persist.saveURI(uri, self.doc_shell, None, None, None, local_file)
+ WebKit.WebView.__init__(self)
def zoom_in(self):
- contentViewer = self.doc_shell.queryInterface( \
- interfaces.nsIDocShell).contentViewer
- if contentViewer is not None:
- markupDocumentViewer = contentViewer.queryInterface( \
- interfaces.nsIMarkupDocumentViewer)
- markupDocumentViewer.fullZoom += _ZOOM_AMOUNT
+ pass # FIXME
def zoom_out(self):
- contentViewer = self.doc_shell.queryInterface( \
- interfaces.nsIDocShell).contentViewer
- if contentViewer is not None:
- markupDocumentViewer = contentViewer.queryInterface( \
- interfaces.nsIMarkupDocumentViewer)
- markupDocumentViewer.fullZoom -= _ZOOM_AMOUNT
+ pass #FIXME
def get_history_index(self):
- return self.web_navigation.sessionHistory.index
+ pass #FIXME
def set_history_index(self, index):
- if index == -1:
- return
- self.web_navigation.gotoIndex(index)
+ pass #FIXME
def open_new_tab(self, url):
self.emit('new-tab', url)
-class PopupDialog(gtk.Window):
+class PopupDialog(Gtk.Window):
def __init__(self):
- gtk.Window.__init__(self)
+ GObject.GObject.__init__(self)
- self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
+ self.set_type_hint(Gdk.WindowTypeHint.DIALOG)
border = style.GRID_CELL_SIZE
- self.set_default_size(gtk.gdk.screen_width() - border * 2,
- gtk.gdk.screen_height() - border * 2)
+ self.set_default_size(Gdk.Screen.width() - border * 2,
+ Gdk.Screen.height() - border * 2)
self.view = WebView()
self.view.connect('notify::visibility', self.__notify_visibility_cb)
diff --git a/downloadmanager.py b/downloadmanager.py
index 98d4f1a..5e1b194 100644
--- a/downloadmanager.py
+++ b/downloadmanager.py
@@ -21,21 +21,15 @@ from gettext import gettext as _
import time
import tempfile
-import gtk
-import hulahop
-import xpcom
-from xpcom.nsError import *
-from xpcom import components
-from xpcom.components import interfaces
-from xpcom.server.factory import Factory
-
-from sugar.datastore import datastore
-from sugar import profile
-from sugar import mime
-from sugar.graphics.alert import Alert, TimeoutAlert
-from sugar.graphics.icon import Icon
-from sugar.graphics import style
-from sugar.activity import activity
+from gi.repository import Gtk
+
+from sugar3.datastore import datastore
+from sugar3 import profile
+from sugar3 import mime
+from sugar3.graphics.alert import Alert, TimeoutAlert
+from sugar3.graphics.icon import Icon
+from sugar3.graphics import style
+from sugar3.activity import activity
# #3903 - this constant can be removed and assumed to be 1 when dbus-python
# 0.82.3 is the only version used
import dbus
@@ -188,11 +182,11 @@ class Download:
self._stop_alert.props.title = _('Download completed')
self._stop_alert.props.msg = self._get_file_name()
open_icon = Icon(icon_name='zoom-activity')
- self._stop_alert.add_button(gtk.RESPONSE_APPLY,
+ self._stop_alert.add_button(Gtk.ResponseType.APPLY,
_('Show in Journal'), open_icon)
open_icon.show()
ok_icon = Icon(icon_name='dialog-ok')
- self._stop_alert.add_button(gtk.RESPONSE_OK, _('Ok'), ok_icon)
+ self._stop_alert.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon)
ok_icon.show()
self._activity.add_alert(self._stop_alert)
self._stop_alert.connect('response', self.__stop_response_cb)
@@ -219,7 +213,7 @@ class Download:
timeout=360 * DBUS_PYTHON_TIMEOUT_UNITS_PER_SECOND)
def _check_image_mime_type(self):
- for pixbuf_format in gtk.gdk.pixbuf_get_formats():
+ for pixbuf_format in GdkPixbuf.Pixbuf.get_formats():
if self._mime_type in pixbuf_format['mime_types']:
return True
return False
@@ -227,7 +221,7 @@ class Download:
def _get_preview_image(self):
preview_width, preview_height = style.zoom(300), style.zoom(225)
- pixbuf = gtk.gdk.pixbuf_new_from_file(self._target_file.path)
+ pixbuf = GdkPixbuf.Pixbuf.new_from_file(self._target_file.path)
width, height = pixbuf.get_width(), pixbuf.get_height()
scale = 1
@@ -236,7 +230,7 @@ class Download:
scale_y = preview_height / float(height)
scale = min(scale_x, scale_y)
- pixbuf2 = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, \
+ pixbuf2 = GdkPixbuf.Pixbuf(GdkPixbuf.Colorspace.RGB, \
pixbuf.get_has_alpha(), \
pixbuf.get_bits_per_sample(), \
preview_width, preview_height)
@@ -249,7 +243,7 @@ class Download:
preview_width - (margin_x * 2), \
preview_height - (margin_y * 2), \
margin_x, margin_y, scale, scale, \
- gtk.gdk.INTERP_BILINEAR)
+ GdkPixbuf.InterpType.BILINEAR)
preview_data = []
@@ -262,7 +256,7 @@ class Download:
def __start_response_cb(self, alert, response_id):
global _active_downloads
- if response_id is gtk.RESPONSE_CANCEL:
+ if response_id is Gtk.ResponseType.CANCEL:
logging.debug('Download Canceled')
logging.debug('target_path=%r', self._target_file.path)
self.cancelable.cancel(NS_ERROR_FAILURE)
@@ -278,7 +272,7 @@ class Download:
def __stop_response_cb(self, alert, response_id):
global _active_downloads
- if response_id is gtk.RESPONSE_APPLY:
+ if response_id is Gtk.ResponseType.APPLY:
logging.debug('Start application with downloaded object')
activity.show_object_in_journal(self._object_id)
self._activity.remove_alert(alert)
diff --git a/edittoolbar.py b/edittoolbar.py
index f0cdb1a..ad5ba59 100644
--- a/edittoolbar.py
+++ b/edittoolbar.py
@@ -15,21 +15,16 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import gtk
+from gi.repository import Gtk, Gdk
from gettext import gettext as _
-from xpcom.components import interfaces
-
-from sugar.activity import activity
-from sugar.graphics import iconentry
-from sugar.graphics.toolbutton import ToolButton
-from sugar.graphics import style
+from sugar3.activity import activity
+from sugar3.graphics import iconentry
+from sugar3.graphics.toolbutton import ToolButton
+from sugar3.graphics import style
class EditToolbar(activity.EditToolbar):
-
- _com_interfaces_ = interfaces.nsIObserver
-
def __init__(self, act):
activity.EditToolbar.__init__(self)
@@ -64,13 +59,13 @@ class EditToolbar(activity.EditToolbar):
logging.debug('observe: %r %r %r' % (subject, topic, data))
"""
- separator = gtk.SeparatorToolItem()
+ separator = Gtk.SeparatorToolItem()
separator.set_draw(False)
separator.set_expand(True)
self.insert(separator, -1)
separator.show()
- search_item = gtk.ToolItem()
+ search_item = Gtk.ToolItem()
self.search_entry = iconentry.IconEntry()
self.search_entry.set_icon_from_name(iconentry.ICON_ENTRY_PRIMARY,
'system-search')
@@ -78,7 +73,7 @@ class EditToolbar(activity.EditToolbar):
self.search_entry.connect('activate', self.__search_entry_activate_cb)
self.search_entry.connect('changed', self.__search_entry_changed_cb)
- width = int(gtk.gdk.screen_width() / 3)
+ width = int(Gdk.Screen.width() / 3)
self.search_entry.set_size_request(width, -1)
search_item.add(self.search_entry)
@@ -135,12 +130,12 @@ class EditToolbar(activity.EditToolbar):
if found == interfaces.nsITypeAheadFind.FIND_NOTFOUND:
self._prev.props.sensitive = False
self._next.props.sensitive = False
- entry.modify_text(gtk.STATE_NORMAL,
+ entry.modify_text(Gtk.StateType.NORMAL,
style.COLOR_BUTTON_GREY.get_gdk_color())
else:
self._prev.props.sensitive = True
self._next.props.sensitive = True
- entry.modify_text(gtk.STATE_NORMAL,
+ entry.modify_text(Gtk.StateType.NORMAL,
style.COLOR_BLACK.get_gdk_color())
def __find_previous_cb(self, button):
diff --git a/filepicker.py b/filepicker.py
index 27bf383..e1f3df9 100644
--- a/filepicker.py
+++ b/filepicker.py
@@ -19,16 +19,10 @@ import os
import tempfile
import shutil
-import gtk
-import hulahop
+from gi.repository import Gtk
-import xpcom
-from xpcom import components
-from xpcom.components import interfaces
-from xpcom.server.factory import Factory
-
-from sugar.graphics.objectchooser import ObjectChooser
-from sugar.activity.activity import get_activity_root
+from sugar3.graphics.objectchooser import ObjectChooser
+from sugar3.activity.activity import get_activity_root
_temp_dirs_to_clean = []
@@ -45,8 +39,6 @@ def cleanup_temp_files():
class FilePicker:
- _com_interfaces_ = interfaces.nsIFilePicker
-
cid = '{57901c41-06cb-4b9e-8258-37323327b583}'
description = 'Sugar File Picker'
@@ -74,7 +66,7 @@ class FilePicker:
jobject = None
try:
result = chooser.run()
- if result == gtk.RESPONSE_ACCEPT:
+ if result == Gtk.ResponseType.ACCEPT:
jobject = chooser.get_selected_object()
logging.debug('FilePicker.show: %r', jobject)
diff --git a/globalhistory.py b/globalhistory.py
index 1ec0a72..884a458 100644
--- a/globalhistory.py
+++ b/globalhistory.py
@@ -16,18 +16,10 @@
from datetime import datetime
-from xpcom import components
-from xpcom.components import interfaces
-from xpcom.server.factory import Factory
-
import places
class GlobalHistory:
- _com_interfaces_ = interfaces.nsIGlobalHistory, \
- interfaces.nsIGlobalHistory2, \
- interfaces.nsIGlobalHistory3
-
cid = '{2a53cf28-c48e-4a01-ba18-3d3fef3e2985}'
description = 'Sugar Global History'
diff --git a/linkbutton.py b/linkbutton.py
index 4a0a18f..b43374c 100644
--- a/linkbutton.py
+++ b/linkbutton.py
@@ -15,24 +15,24 @@
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
-import gtk
+from gi.repository import Gtk
import os
-import gobject
+from gi.repository import GObject
from gettext import gettext as _
import rsvg
import re
import gc
-from sugar.graphics.palette import Palette
-from sugar.graphics.tray import TrayButton
-from sugar.graphics import style
+from sugar3.graphics.palette import Palette
+from sugar3.graphics.tray import TrayButton
+from sugar3.graphics import style
-class LinkButton(TrayButton, gobject.GObject):
+class LinkButton(TrayButton, GObject.GObject):
__gtype_name__ = 'LinkButton'
__gsignals__ = {
- 'remove_link': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE, ([str])),
+ 'remove_link': (GObject.SignalFlags.RUN_FIRST,
+ None, ([str])),
}
def __init__(self, url, buf, color, title, owner, index, hash):
@@ -44,8 +44,8 @@ class LinkButton(TrayButton, gobject.GObject):
self.setup_rollover_options(info)
def set_image(self, buf, fill='#0000ff', stroke='#4d4c4f'):
- img = gtk.Image()
- loader = gtk.gdk.PixbufLoader()
+ img = Gtk.Image()
+ loader = GdkPixbuf.PixbufLoader()
loader.write(buf)
loader.close()
pixbuf = loader.get_pixbuf()
@@ -55,7 +55,7 @@ class LinkButton(TrayButton, gobject.GObject):
pixbuf_bg = self._read_link_background(xo_buddy, fill, stroke)
pixbuf_bg = pixbuf_bg.scale_simple(style.zoom(120),
style.zoom(110),
- gtk.gdk.INTERP_BILINEAR)
+ GdkPixbuf.InterpType.BILINEAR)
dest_x = style.zoom(10)
dest_y = style.zoom(20)
w = pixbuf.get_width()
@@ -64,7 +64,7 @@ class LinkButton(TrayButton, gobject.GObject):
scale_y = 1
pixbuf.composite(pixbuf_bg, dest_x, dest_y, w, h, dest_x, dest_y,
- scale_x, scale_y, gtk.gdk.INTERP_BILINEAR, 255)
+ scale_x, scale_y, GdkPixbuf.InterpType.BILINEAR, 255)
img.set_from_pixbuf(pixbuf_bg)
self.set_icon_widget(img)
img.show()
@@ -92,7 +92,7 @@ class LinkButton(TrayButton, gobject.GObject):
palette = Palette(info, text_maxlen=50)
self.set_palette(palette)
- menu_item = gtk.MenuItem(_('Remove'))
+ menu_item = Gtk.MenuItem(_('Remove'))
menu_item.connect('activate', self.item_remove_cb)
palette.menu.append(menu_item)
menu_item.show()
diff --git a/model.py b/model.py
index f6d7eae..d3d26e4 100644
--- a/model.py
+++ b/model.py
@@ -18,21 +18,21 @@
import cjson
import sha
-import gobject
+from gi.repository import GObject
import base64
-class Model(gobject.GObject):
+class Model(GObject.GObject):
''' The model of web-activity which uses json to serialize its data
to a file and deserealize from it.
'''
__gsignals__ = {
- 'add_link': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE, ([int])),
+ 'add_link': (GObject.SignalFlags.RUN_FIRST,
+ None, ([int])),
}
def __init__(self):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self.data = {}
self.data['shared_links'] = []
self.data['deleted'] = []
diff --git a/palettes.py b/palettes.py
index 3c8eebb..82dae3d 100644
--- a/palettes.py
+++ b/palettes.py
@@ -20,41 +20,19 @@ import tempfile
import urlparse
from gettext import gettext as _
-import gtk
-import gobject
-import xpcom
-from xpcom import components
-from xpcom.components import interfaces
+from gi.repository import Gtk
+from gi.repository import GObject
-from sugar.graphics.palette import Palette, Invoker
-from sugar.graphics.menuitem import MenuItem
-from sugar.graphics.icon import Icon
-from sugar import profile
-from sugar.activity import activity
+from sugar3.graphics.palette import Palette, Invoker
+from sugar3.graphics.menuitem import MenuItem
+from sugar3.graphics.icon import Icon
+from sugar3 import profile
+from sugar3.activity import activity
-import downloadmanager
-
-
-class MouseOutListener(gobject.GObject):
- _com_interfaces_ = interfaces.nsIDOMEventListener
-
- __gsignals__ = {
- 'mouse-out': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
- ([])),
- }
-
- def __init__(self, target):
- gobject.GObject.__init__(self)
- self.target = target
-
- def handleEvent(self, event):
- self.emit('mouse-out')
+#import downloadmanager
class ContentInvoker(Invoker):
- _com_interfaces_ = interfaces.nsIDOMEventListener
-
def __init__(self, browser):
Invoker.__init__(self)
self._position_hint = self.AT_CURSOR
@@ -66,7 +44,7 @@ class ContentInvoker(Invoker):
return self.AT_CURSOR
def get_rect(self):
- return gtk.gdk.Rectangle()
+ return ()
def get_toplevel(self):
return None
@@ -153,7 +131,7 @@ class LinkPalette(Palette):
menu_item = MenuItem(_('Keep link'))
icon = Icon(icon_name='document-save', xo_color=profile.get_color(),
- icon_size=gtk.ICON_SIZE_MENU)
+ icon_size=Gtk.IconSize.MENU)
menu_item.set_image(icon)
menu_item.connect('activate', self.__download_activate_cb)
self.menu.append(menu_item)
@@ -161,7 +139,7 @@ class LinkPalette(Palette):
menu_item = MenuItem(_('Copy link'))
icon = Icon(icon_name='edit-copy', xo_color=profile.get_color(),
- icon_size=gtk.ICON_SIZE_MENU)
+ icon_size=Gtk.IconSize.MENU)
menu_item.set_image(icon)
menu_item.connect('activate', self.__copy_activate_cb)
self.menu.append(menu_item)
@@ -175,9 +153,9 @@ class LinkPalette(Palette):
self._browser.grab_focus()
def __copy_activate_cb(self, menu_item):
- clipboard = gtk.Clipboard()
- targets = gtk.target_list_add_uri_targets()
- targets = gtk.target_list_add_text_targets(targets)
+ clipboard = Gtk.Clipboard()
+ targets = Gtk.target_list_add_uri_targets()
+ targets = Gtk.target_list_add_text_targets(targets)
targets.append(('text/x-moz-url', 0, 0))
clipboard.set_with_data(targets,
@@ -186,9 +164,9 @@ class LinkPalette(Palette):
def __clipboard_get_func_cb(self, clipboard, selection_data, info, data):
uri_targets = \
- [target[0] for target in gtk.target_list_add_uri_targets()]
+ [target[0] for target in Gtk.target_list_add_uri_targets()]
text_targets = \
- [target[0] for target in gtk.target_list_add_text_targets()]
+ [target[0] for target in Gtk.target_list_add_text_targets()]
if selection_data.target in uri_targets:
selection_data.set_uris([self._url])
@@ -217,7 +195,7 @@ class ImagePalette(Palette):
menu_item = MenuItem(_('Keep image'))
icon = Icon(icon_name='document-save', xo_color=profile.get_color(),
- icon_size=gtk.ICON_SIZE_MENU)
+ icon_size=Gtk.IconSize.MENU)
menu_item.set_image(icon)
menu_item.connect('activate', self.__download_activate_cb)
self.menu.append(menu_item)
@@ -225,7 +203,7 @@ class ImagePalette(Palette):
menu_item = MenuItem(_('Copy image'))
icon = Icon(icon_name='edit-copy', xo_color=profile.get_color(),
- icon_size=gtk.ICON_SIZE_MENU)
+ icon_size=Gtk.IconSize.MENU)
menu_item.set_image(icon)
menu_item.connect('activate', self.__copy_activate_cb)
self.menu.append(menu_item)
@@ -268,8 +246,6 @@ class ImagePalette(Palette):
class _ImageProgressListener(object):
- _com_interfaces_ = interfaces.nsIWebProgressListener
-
def __init__(self, temp_file):
self._temp_file = temp_file
@@ -289,7 +265,7 @@ class _ImageProgressListener(object):
def onStateChange(self, webProgress, request, stateFlags, status):
if (stateFlags & interfaces.nsIWebProgressListener.STATE_IS_REQUEST and
stateFlags & interfaces.nsIWebProgressListener.STATE_STOP):
- clipboard = gtk.Clipboard()
+ clipboard = Gtk.Clipboard()
clipboard.set_with_data([('text/uri-list', 0, 0)],
_clipboard_get_func_cb,
_clipboard_clear_func_cb,
diff --git a/places.py b/places.py
index d44d747..90956fe 100644
--- a/places.py
+++ b/places.py
@@ -18,7 +18,7 @@ import os
import sqlite3
from datetime import datetime, timedelta
-from sugar.activity import activity
+from sugar3.activity import activity
_store = None
diff --git a/progresslistener.py b/progresslistener.py
index fb08b13..44491fb 100644
--- a/progresslistener.py
+++ b/progresslistener.py
@@ -16,16 +16,12 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import gobject
-import xpcom
-from xpcom.components import interfaces
+from gi.repository import GObject
-class ProgressListener(gobject.GObject):
- _com_interfaces_ = interfaces.nsIWebProgressListener
-
+class ProgressListener(GObject.GObject):
def __init__(self):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self._location = None
self._loading = False
@@ -90,14 +86,14 @@ class ProgressListener(gobject.GObject):
def _get_location(self):
return self._location
- location = gobject.property(type=object, getter=_get_location)
+ location = GObject.property(type=object, getter=_get_location)
def _get_loading(self):
return self._loading
- loading = gobject.property(type=bool, default=False, getter=_get_loading)
+ loading = GObject.property(type=bool, default=False, getter=_get_loading)
def _get_progress(self):
return self._progress
- progress = gobject.property(type=float, getter=_get_progress)
+ progress = GObject.property(type=float, getter=_get_progress)
diff --git a/sessionhistory.py b/sessionhistory.py
index be4ab93..5c659f0 100644
--- a/sessionhistory.py
+++ b/sessionhistory.py
@@ -16,24 +16,20 @@
import logging
-import gobject
-import xpcom
-from xpcom.components import interfaces
+from gi.repository import GObject
-class HistoryListener(gobject.GObject):
- _com_interfaces_ = interfaces.nsISHistoryListener
-
+class HistoryListener(GObject.GObject):
__gsignals__ = {
- 'session-history-changed': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
+ 'session-history-changed': (GObject.SignalFlags.RUN_FIRST,
+ None,
([int])),
- 'session-link-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'session-link-changed': (GObject.SignalFlags.RUN_FIRST, None,
([str])),
}
def __init__(self):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self._wrapped_self = xpcom.server.WrapObject( \
self, interfaces.nsISHistoryListener)
diff --git a/sessionstore.py b/sessionstore.py
index 73edb24..674f4fe 100644
--- a/sessionstore.py
+++ b/sessionstore.py
@@ -19,11 +19,8 @@
import logging
-from xpcom import components
-from xpcom.components import interfaces
-
-
def get_session(browser):
+ return ''
session_history = browser.web_navigation.sessionHistory
if session_history.count == 0:
diff --git a/viewtoolbar.py b/viewtoolbar.py
index 61f4943..429f6d5 100644
--- a/viewtoolbar.py
+++ b/viewtoolbar.py
@@ -17,14 +17,14 @@
from gettext import gettext as _
-import gtk
+from gi.repository import Gtk, GObject
-from sugar.graphics.toolbutton import ToolButton
+from sugar3.graphics.toolbutton import ToolButton
-class ViewToolbar(gtk.Toolbar):
+class ViewToolbar(Gtk.Toolbar):
def __init__(self, activity):
- gtk.Toolbar.__init__(self)
+ GObject.GObject.__init__(self)
self._activity = activity
self._activity.tray.connect('unmap', self.__unmap_cb)
@@ -42,7 +42,7 @@ class ViewToolbar(gtk.Toolbar):
self.insert(self.zoomin, -1)
self.zoomin.show()
- self.separator = gtk.SeparatorToolItem()
+ self.separator = Gtk.SeparatorToolItem()
self.separator.set_draw(True)
self.insert(self.separator, -1)
self.separator.show()
diff --git a/webactivity.py b/webactivity.py
index 707b602..5d61678 100644
--- a/webactivity.py
+++ b/webactivity.py
@@ -21,36 +21,36 @@ from gettext import gettext as _
from gettext import ngettext
import os
-import gobject
-gobject.threads_init()
+from gi.repository import GObject
+GObject.threads_init()
-import gtk
+from gi.repository import Gtk
import base64
import time
import shutil
import sqlite3
import cjson
-import gconf
+from gi.repository import GConf
import locale
import cairo
from hashlib import sha1
# HACK: Needed by http://dev.sugarlabs.org/ticket/456
-import gnome
-gnome.init('Hulahop', '1.0')
+#import gnome
+#gnome.init('Hulahop', '1.0')
-from sugar.activity import activity
-from sugar.graphics import style
+from sugar3.activity import activity
+from sugar3.graphics import style
import telepathy
import telepathy.client
-from sugar.presence import presenceservice
-from sugar.graphics.tray import HTray
-from sugar import profile
-from sugar.graphics.alert import Alert
-from sugar.graphics.icon import Icon
-from sugar import mime
+from sugar3.presence import presenceservice
+from sugar3.graphics.tray import HTray
+from sugar3 import profile
+from sugar3.graphics.alert import Alert
+from sugar3.graphics.icon import Icon
+from sugar3 import mime
-from sugar.graphics.toolbarbox import ToolbarButton
+from sugar3.graphics.toolbarbox import ToolbarButton
PROFILE_VERSION = 2
@@ -78,7 +78,7 @@ if _profile_version < PROFILE_VERSION:
def _seed_xs_cookie():
''' Create a HTTP Cookie to authenticate with the Schoolserver
'''
- client = gconf.client_get_default()
+ client = GConf.Client.get_default()
backup_url = client.get_string('/desktop/sugar/backup_url')
if not backup_url:
_logger.debug('seed_xs_cookie: Not registered with Schoolserver')
@@ -132,13 +132,6 @@ def _seed_xs_cookie():
_logger.debug('seed_xs_cookie: Updated cookie successfully')
-import hulahop
-hulahop.set_app_version(os.environ['SUGAR_BUNDLE_VERSION'])
-hulahop.startup(_profile_path)
-
-from xpcom import components
-
-
def _set_char_preference(name, value):
cls = components.classes["@mozilla.org/preferences-service;1"]
prefService = cls.getService(components.interfaces.nsIPrefService)
@@ -164,14 +157,14 @@ from browser import TabbedView
from webtoolbar import PrimaryToolbar
from edittoolbar import EditToolbar
from viewtoolbar import ViewToolbar
-import downloadmanager
+#import downloadmanager
# TODO: make the registration clearer SL #3087
-import globalhistory # pylint: disable=W0611
-import filepicker # pylint: disable=W0611
+#import globalhistory # pylint: disable=W0611
+#import filepicker # pylint: disable=W0611
from model import Model
-from sugar.presence.tubeconn import TubeConnection
+from sugar3.presence.tubeconn import TubeConnection
from messenger import Messenger
from linkbutton import LinkButton
@@ -188,24 +181,14 @@ class WebActivity(activity.Activity):
_logger.debug('Starting the web activity')
- downloadmanager.remove_old_parts()
+ #downloadmanager.remove_old_parts()
self._force_close = False
self._tabbed_view = TabbedView()
self._tabbed_view.connect('focus-url-entry', self._on_focus_url_entry)
- _set_accept_languages()
- _seed_xs_cookie()
-
- # don't pick up the sugar theme - use the native mozilla one instead
- cls = components.classes['@mozilla.org/preferences-service;1']
- pref_service = cls.getService(components.interfaces.nsIPrefService)
- branch = pref_service.getBranch("mozilla.widget.")
- branch.setBoolPref("disable-native-theme", True)
-
- # Start password manager
- cls = components.classes["@mozilla.org/login-manager;1"]
- login_manager = cls.getService(components.interfaces.nsILoginManager)
+ #_set_accept_languages()
+ #_seed_xs_cookie()
# HACK
# Currently, the multiple tabs feature crashes the Browse activity
@@ -221,7 +204,7 @@ class WebActivity(activity.Activity):
' to a bug in cairo/mozilla')
self._tray = HTray()
- self.set_tray(self._tray, gtk.POS_BOTTOM)
+ self.set_tray(self._tray, Gtk.PositionType.BOTTOM)
self._tray.show()
self._primary_toolbar = PrimaryToolbar(self._tabbed_view, self)
@@ -441,10 +424,10 @@ class WebActivity(activity.Activity):
browser = self._tabbed_view.current_browser
if not self._jobject.metadata['title_set_by_user'] == '1':
- if browser.props.title == '':
- self.metadata['title'] = _('Untitled')
- else:
+ if browser.props.title:
self.metadata['title'] = browser.props.title
+ else:
+ self.metadata['title'] = _('Untitled')
self.model.data['history'] = self._tabbed_view.get_session()
current_tab = self._tabbed_view.get_current_page()
@@ -454,6 +437,7 @@ class WebActivity(activity.Activity):
for n in range(0, self._tabbed_view.get_n_pages()):
n_browser = self._tabbed_view.get_nth_page(n)
if n_browser != None:
+ continue #FIXME
nsiuri = n_browser.progress.location
ui_uri = n_browser.get_url_from_nsiuri(nsiuri)
history_index = n_browser.get_history_index()
@@ -476,10 +460,10 @@ class WebActivity(activity.Activity):
self._tabbed_view.load_homepage()
def _key_press_cb(self, widget, event):
- key_name = gtk.gdk.keyval_name(event.keyval)
+ key_name = Gdk.keyval_name(event.keyval)
browser = self._tabbed_view.props.current_browser
- if event.state & gtk.gdk.CONTROL_MASK:
+ if event.get_state() & Gdk.EventMask.CONTROL_MASK:
if key_name == 'd':
self._add_link()
@@ -503,7 +487,7 @@ class WebActivity(activity.Activity):
elif key_name == 'r':
flags = components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE
browser.web_navigation.reload(flags)
- elif gtk.gdk.keyval_name(event.keyval) == "t":
+ elif Gdk.keyval_name(event.keyval) == "t":
if not self._disable_multiple_tabs:
self._tabbed_view.add_tab()
else:
@@ -579,7 +563,7 @@ class WebActivity(activity.Activity):
window = self._tabbed_view.props.current_browser.window
width, height = window.get_size()
- screenshot = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, has_alpha=False,
+ screenshot = GdkPixbuf.Pixbuf(GdkPixbuf.Colorspace.RGB, has_alpha=False,
bits_per_sample=8, width=width,
height=height)
screenshot.get_from_drawable(window, window.get_colormap(), 0, 0, 0, 0,
@@ -587,7 +571,7 @@ class WebActivity(activity.Activity):
screenshot = screenshot.scale_simple(style.zoom(100),
style.zoom(80),
- gtk.gdk.INTERP_BILINEAR)
+ GdkPixbuf.InterpType.BILINEAR)
buf = self.get_buffer(screenshot)
return buf
@@ -609,9 +593,9 @@ class WebActivity(activity.Activity):
cancel_icon = Icon(icon_name='dialog-cancel')
cancel_label = ngettext('Continue download', 'Continue downloads',
downloadmanager.num_downloads())
- alert.add_button(gtk.RESPONSE_CANCEL, cancel_label, cancel_icon)
+ alert.add_button(Gtk.ResponseType.CANCEL, cancel_label, cancel_icon)
stop_icon = Icon(icon_name='dialog-ok')
- alert.add_button(gtk.RESPONSE_OK, _('Stop'), stop_icon)
+ alert.add_button(Gtk.ResponseType.OK, _('Stop'), stop_icon)
stop_icon.show()
self.add_alert(alert)
alert.connect('response', self.__inprogress_response_cb)
@@ -621,9 +605,9 @@ class WebActivity(activity.Activity):
def __inprogress_response_cb(self, alert, response_id):
self.remove_alert(alert)
- if response_id is gtk.RESPONSE_CANCEL:
+ if response_id is Gtk.ResponseType.CANCEL:
logging.debug('Keep on')
- elif response_id == gtk.RESPONSE_OK:
+ elif response_id == Gtk.ResponseType.OK:
logging.debug('Stop downloads and quit')
self._force_close = True
downloadmanager.remove_all_downloads()
diff --git a/webtoolbar.py b/webtoolbar.py
index 97bdcd6..b9b0327 100644
--- a/webtoolbar.py
+++ b/webtoolbar.py
@@ -18,19 +18,18 @@
from gettext import gettext as _
-import gobject
-import gtk
-import pango
-from xpcom.components import interfaces
-
-from sugar.graphics.toolbutton import ToolButton
-from sugar.graphics.menuitem import MenuItem
-from sugar.graphics import iconentry
-from sugar.graphics.toolbarbox import ToolbarBox as ToolbarBase
-from sugar.activity.widgets import ActivityToolbarButton
-from sugar.activity.widgets import StopButton
-
-import filepicker
+from gi.repository import GObject
+from gi.repository import Gtk
+from gi.repository import Pango
+
+from sugar3.graphics.toolbutton import ToolButton
+from sugar3.graphics.menuitem import MenuItem
+from sugar3.graphics import iconentry
+from sugar3.graphics.toolbarbox import ToolbarBox as ToolbarBase
+from sugar3.activity.widgets import ActivityToolbarButton
+from sugar3.activity.widgets import StopButton
+
+#import filepicker
import places
@@ -42,13 +41,13 @@ class WebEntry(iconentry.IconEntry):
_COL_TITLE = 1
def __init__(self):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self._address = None
self._title = None
self._search_view = self._search_create_view()
- self._search_window = gtk.Window(gtk.WINDOW_POPUP)
+ self._search_window = Gtk.Window(type=Gtk.WindowType.POPUP)
self._search_window.add(self._search_view)
self._search_view.show()
@@ -78,44 +77,44 @@ class WebEntry(iconentry.IconEntry):
def _set_address(self, address):
self._address = address
- address = gobject.property(type=str, setter=_set_address)
+ address = GObject.property(type=str, setter=_set_address)
def _set_title(self, title):
self._title = title
if title is not None and not self.props.has_focus:
self._set_text(title)
- title = gobject.property(type=str, setter=_set_title)
+ title = GObject.property(type=str, setter=_set_title)
def _search_create_view(self):
- view = gtk.TreeView()
+ view = Gtk.TreeView()
view.props.headers_visible = False
view.connect('button-press-event', self.__view_button_press_event_cb)
- column = gtk.TreeViewColumn()
+ column = Gtk.TreeViewColumn()
view.append_column(column)
- cell = gtk.CellRendererText()
- cell.props.ellipsize = pango.ELLIPSIZE_END
+ cell = Gtk.CellRendererText()
+ cell.props.ellipsize = Pango.EllipsizeMode.END
cell.props.ellipsize_set = True
cell.props.font = 'Bold'
column.pack_start(cell, True)
- column.set_attributes(cell, text=self._COL_TITLE)
+ column.add_attribute(cell, 'text', self._COL_TITLE)
- cell = gtk.CellRendererText()
- cell.props.ellipsize = pango.ELLIPSIZE_END
+ cell = Gtk.CellRendererText()
+ cell.props.ellipsize = Pango.EllipsizeMode.END
cell.props.ellipsize_set = True
- cell.props.alignment = pango.ALIGN_LEFT
- column.pack_start(cell)
+ cell.props.alignment = Pango.Alignment.LEFT
+ column.pack_start(cell, True)
- column.set_attributes(cell, text=self._COL_ADDRESS)
+ column.add_attribute(cell, 'text', self._COL_ADDRESS)
return view
def _search_update(self):
- list_store = gtk.ListStore(str, str)
+ list_store = Gtk.ListStore(str, str)
for place in places.get_store().search(self.props.text):
list_store.append([place.uri, place.title])
@@ -131,7 +130,7 @@ class WebEntry(iconentry.IconEntry):
x = entry_x + entry_h / 2
y = entry_y + entry_h
width = self.allocation.width - entry_h
- height = gtk.gdk.screen_height() / 3
+ height = Gdk.Screen.height() / 3
self._search_window.move(x, y)
self._search_window.resize(width, height)
@@ -165,7 +164,7 @@ class WebEntry(iconentry.IconEntry):
self.activate(uri)
def __key_press_event_cb(self, entry, event):
- keyname = gtk.gdk.keyval_name(event.keyval)
+ keyname = Gdk.keyval_name(event.keyval)
selection = self._search_view.get_selection()
model, selected = selection.get_selected()
@@ -220,11 +219,11 @@ class PrimaryToolbar(ToolbarBase):
__gtype_name__ = 'PrimaryToolbar'
__gsignals__ = {
- 'add-link': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
+ 'add-link': (GObject.SignalFlags.RUN_FIRST,
+ None,
([])),
- 'go-home': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
+ 'go-home': (GObject.SignalFlags.RUN_FIRST,
+ None,
([])),
}
@@ -253,7 +252,7 @@ class PrimaryToolbar(ToolbarBase):
self.entry.connect('icon-press', self._stop_and_reload_cb)
self.entry.connect('activate', self._entry_activate_cb)
- entry_item = gtk.ToolItem()
+ entry_item = Gtk.ToolItem()
entry_item.set_expand(True)
entry_item.add(self.entry)
self.entry.show()
@@ -294,7 +293,7 @@ class PrimaryToolbar(ToolbarBase):
self._session_history_changed_hid = None
self._title_changed_hid = None
- gobject.idle_add(lambda:
+ GObject.idle_add(lambda:
self._connect_to_browser(tabbed_view.props.current_browser))
tabbed_view.connect_after('switch-page', self.__switch_page_cb)
@@ -343,7 +342,7 @@ class PrimaryToolbar(ToolbarBase):
def _session_history_changed_cb(self, session_history, current_page_index):
# We have to wait until the history info is updated.
- gobject.idle_add(self._reload_session_history, current_page_index)
+ GObject.idle_add(self._reload_session_history, current_page_index)
def __location_changed_cb(self, progress_listener, pspec):
self._set_address(progress_listener.location)
diff --git a/widgets.py b/widgets.py
index 1759e38..608dbb6 100644
--- a/widgets.py
+++ b/widgets.py
@@ -16,34 +16,34 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import gobject
-import gtk
+from gi.repository import GObject
+from gi.repository import Gtk
-from sugar.graphics.icon import Icon
+from sugar3.graphics.icon import Icon
-class TabAdd(gtk.HBox):
+class TabAdd(Gtk.HBox):
__gtype_name__ = 'TabAdd'
__gsignals__ = {
- 'tab-added': (gobject.SIGNAL_RUN_FIRST,
- gobject.TYPE_NONE,
+ 'tab-added': (GObject.SignalFlags.RUN_FIRST,
+ None,
([])),
}
def __init__(self):
- gtk.HBox.__init__(self)
+ GObject.GObject.__init__(self)
add_tab_icon = Icon(icon_name='add')
- button = gtk.Button()
- button.props.relief = gtk.RELIEF_NONE
+ button = Gtk.Button()
+ button.props.relief = Gtk.ReliefStyle.NONE
button.props.focus_on_click = False
- icon_box = gtk.HBox()
+ icon_box = Gtk.HBox()
icon_box.pack_start(add_tab_icon, True, False, 0)
button.add(icon_box)
button.connect('clicked', self.__button_clicked_cb)
button.set_name('browse-tab-add')
- self.pack_start(button)
+ self.pack_start(button, True, True, 0)
add_tab_icon.show()
icon_box.show()
button.show()
@@ -52,19 +52,19 @@ class TabAdd(gtk.HBox):
self.emit('tab-added')
-class BrowserNotebook(gtk.Notebook):
+class BrowserNotebook(Gtk.Notebook):
__gtype_name__ = 'BrowserNotebook'
"""Handle an extra tab at the end with an Add Tab button."""
def __init__(self):
- gtk.Notebook.__init__(self)
+ GObject.GObject.__init__(self)
self._switch_handler = self.connect('switch-page',
self.__on_switch_page)
tab_add = TabAdd()
tab_add.connect('tab-added', self.on_add_tab)
- empty_page = gtk.HBox()
+ empty_page = Gtk.HBox()
self.append_page(empty_page, tab_add)
empty_page.show()
@@ -73,7 +73,7 @@ class BrowserNotebook(gtk.Notebook):
def __on_switch_page(self, notebook, page, page_num):
"""Don't switch to the extra tab at the end."""
- if page_num == gtk.Notebook.get_n_pages(self) - 1:
+ if page_num == Gtk.Notebook.get_n_pages(self) - 1:
self.handler_block(self._switch_handler)
self.set_current_page(-1)
self.handler_unblock(self._switch_handler)
@@ -82,7 +82,7 @@ class BrowserNotebook(gtk.Notebook):
def get_n_pages(self):
"""Skip the extra tab at the end on the pages count."""
- return gtk.Notebook.get_n_pages(self) - 1
+ return Gtk.Notebook.get_n_pages(self) - 1
def append_page(self, page, label):
"""Append keeping the extra tab at the end."""
@@ -92,4 +92,4 @@ class BrowserNotebook(gtk.Notebook):
"""If indexing from the end, skip the extra tab."""
if number < 0:
number = self.get_n_pages() - 1
- gtk.Notebook.set_current_page(self, number)
+ Gtk.Notebook.set_current_page(self, number)