Advertisement
Guest User

SimpleWeb Browser

a guest
Dec 31st, 2012
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 20.86 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. from gettext import gettext as _
  4.  
  5. import sys
  6. import gobject
  7. import gtk
  8. import pango
  9. import webkit
  10.  
  11. from inspector import Inspector
  12.  
  13. # DEFAULT_PAGE can be overridden at the command line
  14. DEFAULT_PAGE = "http://www.google.com/"
  15. HOME_PAGE = "http://www.google.com/"
  16. SEARCH_PAGE = "http://www.google.com/"
  17. MIN_FONT_SIZE = 4.0
  18. DEFAULT_ZOOM = 1.0
  19. LANGUAGE = "pt"
  20.  
  21. class SimpleToolBar(gtk.Toolbar):
  22.  
  23.     __gsignals__ = {
  24.         "refresh-requested": (gobject.SIGNAL_RUN_FIRST,
  25.                               gobject.TYPE_NONE, ()),
  26.         "go-back-requested": (gobject.SIGNAL_RUN_FIRST,
  27.                               gobject.TYPE_NONE, ()),
  28.         "go-forward-requested": (gobject.SIGNAL_RUN_FIRST,
  29.                               gobject.TYPE_NONE, ()),
  30.         "zoom-in-requested": (gobject.SIGNAL_RUN_FIRST,
  31.                               gobject.TYPE_NONE, ()),
  32.         "zoom-out-requested": (gobject.SIGNAL_RUN_FIRST,
  33.                               gobject.TYPE_NONE, ()),
  34.         "go-home-requested": (gobject.SIGNAL_RUN_FIRST,
  35.                               gobject.TYPE_NONE, ()),
  36.         "google-requested": (gobject.SIGNAL_RUN_FIRST,
  37.                               gobject.TYPE_NONE, ()),
  38.         "load-requested": (gobject.SIGNAL_RUN_FIRST,
  39.                                gobject.TYPE_NONE,
  40.                                (gobject.TYPE_STRING,)),
  41.         "new-tab-requested": (gobject.SIGNAL_RUN_FIRST,
  42.                                   gobject.TYPE_NONE, ()),
  43.         }
  44.  
  45.  
  46.     def __init__(self, location_enabled=True, toolbar_enabled=True):
  47.         gtk.Toolbar.__init__(self)
  48.  
  49.         if toolbar_enabled:
  50.             self.addTabBtn = gtk.ToolButton(gtk.STOCK_ADD)
  51.             self.addTabBtn.connect("clicked", self._add_tab_cb)
  52.             self.addTabBtn.set_tooltip_text("Abrir nova aba")
  53.             self.insert(self.addTabBtn, -1)
  54.             self.addTabBtn.show()
  55.  
  56.             # add back button
  57.             self.BackBtn = gtk.ToolButton(gtk.STOCK_GO_BACK)
  58.             self.BackBtn.connect("clicked", self._go_back_cb)
  59.             self.BackBtn.set_tooltip_text("Voltar")
  60.             self.insert(gtk.SeparatorToolItem() ,-1 );
  61.             self.BackBtn.set_sensitive(True)
  62.             self.insert(self.BackBtn, -1)
  63.             self.BackBtn.show()
  64.  
  65.             # add forward button
  66.             self.FwdBtn = gtk.ToolButton(gtk.STOCK_GO_FORWARD)
  67.             self.FwdBtn.connect("clicked", self._go_forward_cb)
  68.             self.FwdBtn.set_tooltip_text("Avançar")
  69.             self.FwdBtn.set_sensitive(True)
  70.             self.insert(self.FwdBtn, -1)
  71.             self.FwdBtn.show()
  72.  
  73.             # add home button
  74.             self.HomeBtn = gtk.ToolButton(gtk.STOCK_HOME)
  75.             self.HomeBtn.connect("clicked", self._go_home_cb)
  76.             self.HomeBtn.set_tooltip_text("Página Inicial")
  77.             self.insert(gtk.SeparatorToolItem() ,-1 );
  78.             self.insert(self.HomeBtn, -1)
  79.             self.HomeBtn.show()
  80.  
  81.             # add search button
  82.             self.GoogleBtn = gtk.ToolButton(gtk.STOCK_FIND)
  83.             self.GoogleBtn.connect("clicked", self._google_cb)
  84.             self.GoogleBtn.set_tooltip_text("Pesquisa do Google")
  85.             self.insert(self.GoogleBtn, -1)
  86.             self.GoogleBtn.show()
  87.  
  88.             if location_enabled:
  89.                 # location entry
  90.                 self._entry = gtk.Entry()
  91.                 self._entry.connect('activate', self._entry_activate_cb)
  92.                 entry_item = gtk.ToolItem()
  93.                 entry_item.set_expand(True)
  94.                 entry_item.add(self._entry)
  95.                 self._entry.show()
  96.                 self.insert(entry_item, -1)
  97.                 entry_item.show()
  98.  
  99.             # add refresh button
  100.             self.RefreshBtn = gtk.ToolButton(gtk.STOCK_REFRESH)
  101.             self.RefreshBtn.connect('clicked', self._refresh_cb)
  102.             self.RefreshBtn.set_tooltip_text("Atualizar")
  103.             self.insert(self.RefreshBtn, -1)
  104.             self.RefreshBtn.show()
  105.  
  106.             # add zoom in button
  107.             self.ZoomInBtn = gtk.ToolButton(gtk.STOCK_GO_UP)
  108.             self.ZoomInBtn.connect("clicked", self._zoom_in_cb)
  109.             self.ZoomInBtn.set_tooltip_text("Mais Zoom")
  110.             self.insert(gtk.SeparatorToolItem() ,-1 );
  111.             self.insert(self.ZoomInBtn, -1)
  112.             self.ZoomInBtn.show()
  113.  
  114.             # add zoom out button
  115.             self.ZoomOutBtn = gtk.ToolButton(gtk.STOCK_GO_DOWN)
  116.             self.ZoomOutBtn.connect("clicked", self._zoom_out_cb)
  117.             self.ZoomOutBtn.set_tooltip_text("Menos Zoom")
  118.             self.insert(self.ZoomOutBtn, -1)
  119.             self.ZoomOutBtn.show()
  120.  
  121.     def _refresh_cb(self, button):
  122.         self.emit("load-requested", self._entry.props.text)
  123.  
  124.     def _go_back_cb(self, button):
  125.         self.emit("go-back-requested")
  126.  
  127.     def _go_forward_cb(self, button):
  128.         self.emit("go-forward-requested")
  129.  
  130.     def _zoom_in_cb(self, button):
  131.         self.emit("zoom-in-requested")
  132.  
  133.     def _zoom_out_cb(self, button):
  134.         self.emit("zoom-out-requested")
  135.  
  136.     def _go_home_cb(self, text):
  137.         self.emit("go-home-requested")
  138.  
  139.     def _google_cb(self, text):
  140.         self.emit("google-requested")
  141.  
  142.     def location_set_text (self, text):
  143.         self._entry.set_text(text)
  144.  
  145.     def _entry_activate_cb(self, entry):
  146.         self.emit("load-requested", self._entry.props.text)
  147.  
  148.     def _add_tab_cb(self, button):
  149.         self.emit("new-tab-requested")
  150.  
  151. class WebKitView(webkit.WebView):
  152.  
  153.     def __init__(self):
  154.         webkit.WebView.__init__(self)
  155.         settings = self.get_settings()
  156.         settings.set_property("enable-developer-extras", True)
  157.         settings.set_property("minimum-font-size", MIN_FONT_SIZE)
  158.         self.set_zoom_level(DEFAULT_ZOOM)
  159.  
  160.       # scale other content besides from text as well
  161.         self.set_full_content_zoom(True)
  162.  
  163.         # make sure the items will be added in the end
  164.         # hence the reason for the connect_after
  165.         self.connect_after("populate-popup", self.populate_popup)
  166.         self.set_settings(settings)
  167.  
  168.     def populate_popup(self, view, menu):
  169.  
  170.         # zoom buttons
  171.         zoom_in = gtk.ImageMenuItem(gtk.STOCK_ZOOM_IN)
  172.         zoom_in.connect('activate', zoom_in_cb, view)
  173.         menu.append(zoom_in)
  174.  
  175.         zoom_out = gtk.ImageMenuItem(gtk.STOCK_ZOOM_OUT)
  176.         zoom_out.connect('activate', zoom_out_cb, view)
  177.         menu.append(zoom_out)
  178.  
  179.         zoom_hundred = gtk.ImageMenuItem(gtk.STOCK_ZOOM_100)
  180.         zoom_hundred.connect('activate', zoom_hundred_cb, view)
  181.         menu.append(zoom_hundred)
  182.  
  183.         printitem = gtk.ImageMenuItem(gtk.STOCK_PRINT)
  184.         menu.append(printitem)
  185.         printitem.connect('activate', print_cb, view)
  186.  
  187.         menu.append(gtk.SeparatorMenuItem())
  188.  
  189.         aboutitem = gtk.ImageMenuItem(gtk.STOCK_ABOUT)
  190.         menu.append(aboutitem)
  191.         aboutitem.connect('activate', about_pywebkitgtk_cb, view)
  192.  
  193.         menu.show_all()
  194.         return False
  195.  
  196. class TabLabel (gtk.HBox):
  197.     """A class for Tab labels"""
  198.  
  199.     __gsignals__ = {
  200.         "close": (gobject.SIGNAL_RUN_FIRST,
  201.                   gobject.TYPE_NONE,
  202.                   (gobject.TYPE_OBJECT,))
  203.         }
  204.  
  205.     def __init__ (self, title, child):
  206.         """initialize the tab label"""
  207.         gtk.HBox.__init__(self, False, 4)
  208.         self.title = title
  209.         self.child = child
  210.         self.label = gtk.Label(title)
  211.         self.label.props.max_width_chars = 30
  212.         self.label.set_ellipsize(pango.ELLIPSIZE_MIDDLE)
  213.         self.label.set_alignment(0.0, 0.5)
  214.  
  215.         icon = gtk.image_new_from_stock(gtk.STOCK_ORIENTATION_PORTRAIT, gtk.ICON_SIZE_BUTTON)
  216.         close_image = gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
  217.         close_button = gtk.Button()
  218.         close_button.set_relief(gtk.RELIEF_NONE)
  219.         close_button.connect("clicked", self._close_tab, child)
  220.         close_button.set_image(close_image)
  221.         self.pack_start(icon, False, False, 0)
  222.         self.pack_start(self.label, True, True, 0)
  223.         self.pack_start(close_button, False, False, 0)
  224.  
  225.         self.set_data("label", self.label)
  226.         self.set_data("close-button", close_button)
  227.         self.connect("style-set", tab_label_style_set_cb)
  228.  
  229.     def set_label (self, text):
  230.         """sets the text of this label"""
  231.         self.label.set_label(text)
  232.  
  233.     def _close_tab (self, widget, child):
  234.         self.emit("close", child)
  235.  
  236. def tab_label_style_set_cb (tab_label, style):
  237.     context = tab_label.get_pango_context()
  238.     metrics = context.get_metrics(tab_label.style.font_desc, context.get_language())
  239.     char_width = metrics.get_approximate_digit_width()
  240.     (width, height) = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)
  241.     tab_label.set_size_request(16 * pango.PIXELS(char_width) + 2 * width,
  242.                                pango.PIXELS(metrics.get_ascent() +
  243.     metrics.get_descent()))
  244.  
  245. class TabView (gtk.Notebook):
  246.  
  247.     __gsignals__ = {
  248.         "focus-view-title-changed": (gobject.SIGNAL_RUN_FIRST,
  249.                                      gobject.TYPE_NONE,
  250.                                      (gobject.TYPE_OBJECT, gobject.TYPE_STRING,)),
  251.         "progress-changed": (gobject.SIGNAL_RUN_FIRST,
  252.                                      gobject.TYPE_NONE,
  253.                                      (gobject.TYPE_OBJECT, gobject.TYPE_STRING,)),
  254.         "hover-changed": (gobject.SIGNAL_RUN_FIRST,
  255.                                      gobject.TYPE_NONE,
  256.                                      (gobject.TYPE_OBJECT, gobject.TYPE_STRING,)),
  257.         "new-window-requested": (gobject.SIGNAL_RUN_FIRST,
  258.                                      gobject.TYPE_NONE,
  259.                                      (gobject.TYPE_OBJECT,))
  260.         }
  261.  
  262.     def __init__ (self):
  263.         """initialize the tab_content"""
  264.         gtk.Notebook.__init__(self)
  265.         self.props.scrollable = True
  266.         self.props.homogeneous = True
  267.         self.connect("switch-page", self._switch_page)
  268.  
  269.         self.show_all()
  270.         self._hovered_uri = None
  271.  
  272.     def load_uri (self, text):
  273.         """load the given uri in the current web view"""
  274.         child = self.get_nth_page(self.get_current_page())
  275.         view = child.get_child()
  276.         frame = view.get_main_frame()
  277.         if frame.get_uri() == "about:blank":
  278.             _close_tab(None, child)
  279.             self.new_tab(text)
  280.         else:
  281.             view.open(text)
  282.         self.emit("focus-view-title-changed", frame, text)
  283.  
  284.     def new_tab_with_webview (self, webview):
  285.         """creates a new tab with the given webview as its child"""
  286.         self._construct_tab_content(webview)
  287.  
  288.     def new_tab (self, url):
  289.         """creates a new page in a new tab"""
  290.         # create the tab content
  291.         browser = WebKitView()
  292.         self._construct_tab_content(browser, url)
  293.  
  294.     def _construct_tab_content (self, web_view, url):
  295.         web_view.connect("hovering-over-link", self._hovering_over_link_cb)
  296.         web_view.connect("populate-popup", self._populate_page_popup_cb)
  297.         web_view.connect("load-finished", self._view_load_finished_cb)
  298.         web_view.connect("create-web-view", self._new_web_view_request_cb)
  299.         web_view.connect("title-changed", self._title_changed_cb)
  300.         inspector = Inspector(web_view.get_web_inspector())
  301.         web_view.connect("load-progress-changed", self._notify_progress_cb)
  302.  
  303.         scrolled_window = gtk.ScrolledWindow()
  304.         scrolled_window.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC
  305.         scrolled_window.props.vscrollbar_policy = gtk.POLICY_AUTOMATIC
  306.         scrolled_window.add(web_view)
  307.         scrolled_window.show_all()
  308.  
  309.         # create the tab
  310.         if not url:
  311.             label = TabLabel("New Tab", scrolled_window)
  312.         else:
  313.             label = TabLabel(url, scrolled_window)
  314.         label.connect("close", self._close_tab)
  315.         label.show_all()
  316.  
  317.         new_tab_number = self.append_page(scrolled_window, label)
  318.         self.set_tab_label_packing(scrolled_window, False, False, gtk.PACK_START)
  319.         self.set_tab_label(scrolled_window, label)
  320.  
  321.         # hide the tab if there's only one
  322.         self.set_show_tabs(self.get_n_pages() > 1)
  323.  
  324.         self.show_all()
  325.         self.set_current_page(new_tab_number)
  326.  
  327.         # load the content
  328.         self._hovered_uri = None
  329.         if not url:
  330.             url = "about:blank"
  331. #            info_dialog_cb(self, url)
  332.         else:
  333.             web_view.load_uri(url)
  334.  
  335.     def _populate_page_popup_cb(self, view, menu):
  336.         # misc
  337.         if self._hovered_uri:
  338.             open_in_new_tab = gtk.MenuItem(_("Abrir link em nova aba"))
  339.             open_in_new_tab.connect("activate", self._open_in_new_tab, view)
  340.             menu.insert(open_in_new_tab, 0)
  341.  
  342.     def _open_in_new_tab (self, menuitem, view):
  343.         self.new_tab(self._hovered_uri)
  344.  
  345.     def _close_tab (self, label, child):
  346.         page_num = self.page_num(child)
  347.         if page_num != -1:
  348.             view = child.get_child()
  349.             view.destroy()
  350.             self.remove_page(page_num)
  351.         self.set_show_tabs(self.get_n_pages() > 1)
  352.  
  353.     def _switch_page (self, notebook, page, page_num):
  354.         child = self.get_nth_page(page_num)
  355.         view = child.get_child()
  356.         frame = view.get_main_frame()
  357.         self.emit("focus-view-title-changed", frame, frame.props.title)
  358.  
  359.     def _notify_progress_cb(self, view, data):
  360.         self.emit("progress-changed", view, data)
  361.  
  362.     def _hovering_over_link_cb (self, view, title, uri):
  363.         self._hovered_uri = uri
  364.         self.emit("hover-changed", view, uri)
  365.  
  366.     def _title_changed_cb (self, view, frame, title):
  367.         child = self.get_nth_page(self.get_current_page())
  368.         label = self.get_tab_label(child)
  369.         label.set_label(title)
  370.         self.emit("focus-view-title-changed", frame, title)
  371.  
  372.     def _view_load_finished_cb(self, view, frame):
  373.         child = self.get_nth_page(self.get_current_page())
  374.         label = self.get_tab_label(child)
  375.         title = frame.get_title()
  376.         if not title:
  377.             title = frame.get_uri()
  378.         if title:
  379.             label.set_label(title)
  380.  
  381.     def _new_web_view_request_cb (self, web_view, web_frame):
  382.         scrolled_window = gtk.ScrolledWindow()
  383.         scrolled_window.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC
  384.         scrolled_window.props.vscrollbar_policy = gtk.POLICY_AUTOMATIC
  385.         view = WebKitView()
  386.  
  387.         scrolled_window.add(view)
  388.         scrolled_window.show_all()
  389.  
  390.         vbox = gtk.VBox(spacing=1)
  391.         vbox.pack_start(scrolled_window, True, True)
  392.  
  393.         window = gtk.Window()
  394.         window.add(vbox)
  395.         view.connect("web-view-ready", self._new_web_view_ready_cb)
  396.         return view
  397.  
  398.     def _new_web_view_ready_cb (self, web_view):
  399.         self.emit("new-window-requested", web_view)
  400.  
  401.  
  402. class WebBrowser(gtk.Window):
  403.  
  404.     def __init__(self):
  405.         gtk.Window.__init__(self)
  406.         toolbar = SimpleToolBar()
  407.         tab_content = TabView()
  408.  
  409.         tab_content.connect("new-window-requested", self._new_window_requested_cb)
  410.         tab_content.connect("progress-changed", self._update_progress_cb)
  411.         tab_content.connect("hover-changed", self._update_hover_cb)
  412.         tab_content.connect("focus-view-title-changed", self._title_changed_cb, toolbar)
  413.  
  414.  
  415.         toolbar.connect("refresh-requested", load_requested_cb, tab_content)
  416.         toolbar.connect("go-back-requested", go_back_requested_cb, tab_content)
  417.         toolbar.connect("go-forward-requested", go_forward_requested_cb, tab_content)
  418.         toolbar.connect("zoom-in-requested", zoom_in_requested_cb, tab_content)
  419.         toolbar.connect("zoom-out-requested", zoom_out_requested_cb, tab_content)
  420.         toolbar.connect("go-home-requested", load_requested_cb, HOME_PAGE, tab_content)
  421.         toolbar.connect("google-requested", load_requested_cb, SEARCH_PAGE, tab_content)
  422.         toolbar.connect("load-requested", load_requested_cb, tab_content)
  423.         toolbar.connect("new-tab-requested", new_tab_requested_cb, tab_content)
  424.        
  425.         self.pbar = gtk.ProgressBar()
  426.         self.pbar.set_size_request(0, 16)
  427.  
  428.         vbox = gtk.VBox(spacing=1)
  429.         vbox.pack_start(toolbar, expand=False, fill=False)
  430.         vbox.pack_start(tab_content)
  431.         vbox.pack_start(self.pbar, expand=False, fill=False)
  432.  
  433.         self.add(vbox)
  434.         self.set_default_size(1152, 768)
  435.         self.connect('destroy', destroy_cb, tab_content)
  436.  
  437.         self.show_all()
  438.  
  439.         tab_content.new_tab(is_url_file(DEFAULT_PAGE))
  440.  
  441.     def _old_window_requested_cb (self, tab_content, view):
  442.         window = view.get_toplevel()
  443.         features = view.get_window_features()
  444.  
  445.  
  446.         scrolled_window = view.get_parent()
  447.         if features.get_property("scrollbar-visible"):
  448.             scrolled_window.props.hscrollbar_policy = gtk.POLICY_NEVER
  449.             scrolled_window.props.vscrollbar_policy = gtk.POLICY_NEVER
  450.  
  451.         isLocationbarVisible = features.get_property("locationbar-visible")
  452.         isToolbarVisible = features.get_property("toolbar-visible")
  453.         if isLocationbarVisible or isToolbarVisible:
  454.             toolbar = SimpleToolBar(isLocationbarVisible, isToolbarVisible)
  455.             scrolled_window.get_parent().pack_start(toolbar, False, False, 0)
  456.  
  457.         window.set_default_size(features.props.width, features.props.height)
  458.         window.move(features.props.x, features.props.y)
  459.  
  460.         window.show_all()
  461.         return True
  462.  
  463.     def _new_window_requested_cb (self, tab_content, view):
  464.         program = '/usr/local/bin/simpleweb.py'
  465.         launcher = '/usr/bin/python'
  466.         url = tab_content._hovered_uri
  467.         command = [launcher, program, url]
  468.         (cpid, cstdin, cstdout, cstderr)=gobject.spawn_async(command)
  469.  
  470.     def _title_changed_cb (self, tab_content, frame, title, toolbar):
  471.         if not title:
  472.            title = frame.get_uri()
  473.         self.set_title(_("SimpleWeb - %s") % title)
  474.         load_committed_cb(tab_content, frame, toolbar)
  475.  
  476.     def _update_progress_cb (self, widget, tab_content, data):
  477.          self.pbar.set_text("%s%%" % data)
  478.          self.pbar.set_fraction(float(data) / 100.0)
  479.  
  480.     def _update_hover_cb (self, widget, tab_content, data):
  481.         if not data:
  482.             data = ''
  483.         self.pbar.set_text("%s" % data)
  484.  
  485. # event handlers
  486. def go_back_requested_cb (widget, tab_content):
  487.     cview = current_view(tab_content)
  488.     cview.go_back()
  489.  
  490. def go_forward_requested_cb (widget, tab_content):
  491.     cview = current_view(tab_content)
  492.     cview.go_forward()
  493.  
  494. def zoom_in_requested_cb (widget, tab_content):
  495.     cview = current_view(tab_content)
  496.     cview.zoom_in()
  497.  
  498. def zoom_out_requested_cb (widget, tab_content):
  499.     cview = current_view(tab_content)
  500.     cview.zoom_out()
  501.     self.DEFAULT_ZOOM = cview.get_zoom_level()
  502.  
  503. def new_tab_requested_cb (toolbar, tab_content):
  504.     text = "http://"
  505.     tab_content.new_tab(None)
  506.     toolbar.location_set_text(text)
  507.  
  508. def load_requested_cb (widget, text, tab_content):
  509.     if text:
  510.         url = is_url_file(text)
  511.         tab_content.load_uri(url)
  512.     return
  513.  
  514. def load_committed_cb (tab_content, frame, toolbar):
  515.     uri = frame.get_uri()
  516.     cview = current_view(tab_content)
  517.     if not uri:
  518.         uri = "http://"
  519.     toolbar.location_set_text(uri)
  520.     toolbar.BackBtn.set_sensitive(cview.can_go_back())
  521.     toolbar.FwdBtn.set_sensitive(cview.can_go_forward())
  522.  
  523. # PCLOS Utility Function #
  524. def current_view(tab_content):
  525.     currentTab = tab_content.get_nth_page(tab_content.get_current_page())
  526.     childView = currentTab.get_child()
  527.     return childView
  528.  
  529. def is_url_file(text):
  530.     try:
  531.         text.index("://")
  532.         return text
  533.     except:
  534.         text = "://" + text
  535.     try:
  536.         text.index(":///")
  537.         text = "file" + text
  538.     except:
  539.         text = "http" + text
  540.     return text
  541.  
  542. def destroy_cb(window, tab_content):
  543.     """destroy window resources"""
  544.     num_pages = tab_content.get_n_pages()
  545.     while num_pages != -1:
  546.         child = tab_content.get_nth_page(num_pages)
  547.         if child:
  548.             view = child.get_child()
  549.         num_pages = num_pages - 1
  550.     window.destroy()
  551.     gtk.main_quit()
  552.  
  553. # context menu item callbacks
  554. def about_pywebkitgtk_cb(menu_item, web_view):
  555.     web_view.open("http://forum.ubuntued.info/viewtopic.php?f=19&t=3647")
  556.  
  557. def zoom_in_cb(menu_item, web_view):
  558.     """Zoom into the page"""
  559.     web_view.zoom_in()
  560.  
  561. def zoom_out_cb(menu_item, web_view):
  562.     """Zoom out of the page"""
  563.     web_view.zoom_out()
  564.  
  565. def zoom_hundred_cb(menu_item, web_view):
  566.     """Zoom 100%"""
  567.     if not (web_view.get_zoom_level() == 1.0):
  568.         web_view.set_zoom_level(1.0)
  569.  
  570. def print_cb(menu_item, web_view):
  571.     mainframe = web_view.get_main_frame()
  572.     mainframe.print_full(gtk.PrintOperation(), gtk.PRINT_OPERATION_ACTION_PRINT_DIALOG);
  573.  
  574. if __name__ == "__main__":
  575.     if len(sys.argv) > 1:
  576.         DEFAULT_PAGE = sys.argv[1]
  577.     webbrowser = WebBrowser()
  578.     gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement