def __on_run_file_chooser(self, webview, request): """ Run own file chooser @param webview as WebView @param request as WebKit2.FileChooserRequest """ from eolie.database_settings import DatabaseSettings uri = webview.get_uri() settings_db = DatabaseSettings() dialog = Gtk.FileChooserNative.new(_("Select files to upload"), self._window, Gtk.FileChooserAction.OPEN, _("Open"), _("Cancel")) chooser_uri = settings_db.get_chooser_uri(uri) if chooser_uri is not None: dialog.set_current_folder_uri(chooser_uri) response = dialog.run() if response in [ Gtk.ResponseType.DELETE_EVENT, Gtk.ResponseType.CANCEL ]: request.cancel() else: request.select_files(dialog.get_filenames()) settings_db.set_chooser_uri(dialog.get_current_folder_uri(), uri) return True
def update_spell_checking(self): """ Update spell checking """ from eolie.database_settings import DatabaseSettings settings_db = DatabaseSettings() codes = settings_db.get_languages(self.get_uri()) # If None, default user language if codes is not None: self.get_context().set_spell_checking_languages(codes)
def _on_default_zoom_button_clicked(self, button): """ Restore default zoom level @param button as Gtk.Button """ from eolie.database_settings import DatabaseSettings webview = self.__window.container.current.webview settings_db = DatabaseSettings() settings_db.set_zoom(100, webview.get_uri()) webview.update_zoom_level() button.set_label("100 %")
def zoom_in(self): """ Zoom in view @return current zoom after zoom in """ from eolie.database_settings import DatabaseSettings settings_db = DatabaseSettings() current = settings_db.get_zoom(self.get_uri()) if current is None: current = 100 current += 10 settings_db.set_zoom(current, self.get_uri()) self.update_zoom_level() return current
def update_zoom_level(self): """ Update zoom level """ from eolie.database_settings import DatabaseSettings try: settings_db = DatabaseSettings() zoom_level = settings_db.get_zoom(self.get_uri()) if zoom_level is None: zoom_level = 100 if self.__related_view is None: zoom_level *= self.get_ancestor(Gtk.Window).zoom_level else: zoom_level *= self.__related_view.get_ancestor( Gtk.Window).zoom_level except Exception as e: print("WebView::update_zoom_level()", e) debug("Update zoom level: %s" % zoom_level) self.set_zoom_level(zoom_level / 100)
def __init__(self, uri, name, code): """ Init row @param uri as str @param name as str @param code as str """ Gtk.EventBox.__init__(self) settings_db = DatabaseSettings() self.__uri = uri self.__code = code grid = Gtk.Grid() grid.set_column_spacing(5) grid.show() label = Gtk.Label.new(name) label.set_hexpand(True) label.set_property("halign", Gtk.Align.START) label.show() check = Gtk.CheckButton() check.connect("toggled", self.__on_check_toggled, settings_db) check.show() grid.add(check) grid.add(label) self.add(grid) self.connect("button-press-event", self.__on_button_press_event, check) user_code = "" codes = settings_db.get_languages(uri) if codes is None: codes = [] locales = GLib.get_language_names() if locales: user_code = locales[0].split(".")[0] codes = [user_code] check.set_active(codes is not None and code in codes) # Here we force add of default language if user_code == code: check.toggled()
def __init(self): """ Init main application """ self.settings = Settings.new() # Init extensions GLib.setenv('PYTHONPATH', self.__extension_dir, True) # Create favicon path d = Gio.File.new_for_path(self.__FAVICONS_PATH) if not d.query_exists(): d.make_directory_with_parents() # Setup default context context = WebKit2.WebContext.get_default() Context(context) # Setup ephemeral context self.__ephemeral_context = WebKit2.WebContext.new_ephemeral() Context(self.__ephemeral_context) # Add a global DBus helper self.helper = DBusHelper() # First init sync worker try: from eolie.mozilla_sync import SyncWorker self.sync_worker = SyncWorker() # Run a first sync in 10 seconds, speed up app start GLib.timeout_add_seconds(10, self.sync_worker.sync, False) # Then run a sync every hour GLib.timeout_add_seconds(3600, self.sync_worker.sync, True) except Exception as e: print("Application::init():", e) self.sync_worker = None if self.prefers_app_menu(): menu = self.get_app_menu() self.set_app_menu(menu) cssProviderFile = Gio.File.new_for_uri( 'resource:///org/gnome/Eolie/application.css') cssProvider = Gtk.CssProvider() cssProvider.load_from_file(cssProviderFile) screen = Gdk.Screen.get_default() styleContext = Gtk.StyleContext() styleContext.add_provider_for_screen(screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER) self.history = DatabaseHistory() self.bookmarks = DatabaseBookmarks() # We store cursors for main thread SqlCursor.add(self.history) SqlCursor.add(self.bookmarks) self.websettings = DatabaseSettings() self.adblock = DatabaseAdblock() self.adblock.update() self.phishing = DatabasePhishing() self.adblock_exceptions = DatabaseExceptions("adblock") self.popup_exceptions = DatabaseExceptions("popup") self.image_exceptions = DatabaseExceptions("image") if self.settings.get_user_value("jsblock") is not None: self.js_exceptions = DatabaseExceptions("js") else: self.js_exceptions = None self.phishing.update() self.art = Art() self.search = Search() self.download_manager = DownloadManager() self.pages_menu = PagesMenu() shortcut_action = Gio.SimpleAction.new('shortcut', GLib.VariantType.new('s')) shortcut_action.connect('activate', self.__on_shortcut_action) self.add_action(shortcut_action) self.set_accels_for_action("win.shortcut::expose", ["<Alt>e"]) self.set_accels_for_action("win.exceptions::site", ["<Control>e"]) self.set_accels_for_action("win.shortcut::show_left_panel", ["F9"]) self.set_accels_for_action("win.shortcut::uri", ["<Control>l", "<Control>b"]) self.set_accels_for_action("win.shortcut::new_page", ["<Control>t"]) self.set_accels_for_action("win.shortcut::last_page", ["<Control><Shift>t"]) self.set_accels_for_action("app.shortcut::new_window", ["<Control>n"]) self.set_accels_for_action("win.shortcut::private", ["<Control><Shift>p"]) self.set_accels_for_action("win.shortcut::close_page", ["<Control>w"]) self.set_accels_for_action("win.shortcut::quit", ["<Control>q"]) self.set_accels_for_action("win.shortcut::save", ["<Control>s"]) self.set_accels_for_action("win.shortcut::filter", ["<Control>i"]) self.set_accels_for_action("win.shortcut::reload", ["<Control>r", "F5"]) self.set_accels_for_action("win.shortcut::find", ["<Control>f"]) self.set_accels_for_action("win.shortcut::print", ["<Control>p"]) self.set_accels_for_action("win.shortcut::source", ["<Control><Shift>c"]) self.set_accels_for_action("win.shortcut::history", ["<Control>h"]) self.set_accels_for_action("win.shortcut::search", ["<Control>k"]) self.set_accels_for_action("win.shortcut::fullscreen", ["F11"]) self.set_accels_for_action("app.settings", ["<Control><Shift>s"]) self.set_accels_for_action("win.shortcut::backward", ["<Alt>Left", "XF86Back"]) self.set_accels_for_action("win.shortcut::forward", ["<Alt>Right", "XF86Forward"]) self.set_accels_for_action("win.shortcut::next", ["<Control>Tab", "<Control>Page_Down"]) self.set_accels_for_action("win.shortcut::previous", ["<Control><Shift>Tab", "<Control>Page_Up"]) self.set_accels_for_action("win.shortcut::zoom_in", ["<Control>KP_Add", "<Control>plus", "<Control>equal"]) self.set_accels_for_action("win.shortcut::zoom_out", ["<Control>KP_Subtract", "<Control>minus"]) self.set_accels_for_action("win.shortcut::zoom_default", ["<Control>KP_0", "<Control>0"])
def _on_menu_button_toggled(self, button): """ Show settings menu @param button as Gtk.ToogleButton """ from eolie.database_settings import DatabaseSettings from eolie.languages import LanguagesWidget if not button.get_active(): return self.__window.close_popovers() uri = self.__window.container.current.webview.get_uri() if not uri: return parsed = urlparse(uri) # Adblock exceptions page_ex = El().adblock_exceptions.find(parsed.netloc + parsed.path) site_ex = El().adblock_exceptions.find(parsed.netloc) if not page_ex and not site_ex: self.__adblock_exceptions.change_state(GLib.Variant("s", "none")) elif site_ex: self.__adblock_exceptions.change_state(GLib.Variant("s", "site")) else: self.__adblock_exceptions.change_state(GLib.Variant("s", "page")) # Image exceptions page_ex = El().image_exceptions.find(parsed.netloc + parsed.path) site_ex = El().image_exceptions.find(parsed.netloc) if not page_ex and not site_ex: self.__image_exceptions.change_state(GLib.Variant("s", "none")) elif site_ex: self.__image_exceptions.change_state(GLib.Variant("s", "site")) else: self.__image_exceptions.change_state(GLib.Variant("s", "page")) # Popup exceptions page_ex = El().popup_exceptions.find(parsed.netloc + parsed.path) site_ex = El().popup_exceptions.find(parsed.netloc) if not page_ex and not site_ex: self.__popup_exceptions.change_state(GLib.Variant("s", "none")) elif site_ex: self.__popup_exceptions.change_state(GLib.Variant("s", "site")) else: self.__popup_exceptions.change_state(GLib.Variant("s", "page")) popover = Gtk.PopoverMenu.new() builder = Gtk.Builder() builder.add_from_resource("/org/gnome/Eolie/ActionsMenu.ui") fullscreen_button = builder.get_object("fullscreen_button") if self.__window.is_fullscreen: fullscreen_button.set_active(True) fullscreen_button.set_tooltip_text(_("Leave fullscreen")) else: fullscreen_button.set_tooltip_text(_("Enter fullscreen")) builder.connect_signals(self) widget = builder.get_object("widget") webview = self.__window.container.current.webview settings_db = DatabaseSettings() current = settings_db.get_zoom(webview.get_uri()) if current is None: current = 100 builder.get_object("default_zoom_button").set_label( "{} %".format(current)) popover.add(widget) exceptions = builder.get_object("exceptions") languages = LanguagesWidget(uri) languages.show() popover.add(exceptions) popover.add(languages) popover.child_set_property(exceptions, "submenu", "exceptions") popover.child_set_property(languages, "submenu", "languages") # Merge appmenu, we assume we only have one level (section -> items) if not El().prefers_app_menu(): separator = Gtk.Separator.new(Gtk.Orientation.HORIZONTAL) separator.show() widget.add(separator) menu = El().get_app_menu() for i in range(0, menu.get_n_items()): section = menu.get_item_link(i, "section") for y in range(0, section.get_n_items()): label = section.get_item_attribute_value(y, "label") action = section.get_item_attribute_value(y, "action") item = Gtk.ModelButton.new() item.set_property("text", label.get_string()) item.set_action_name(action.get_string()) item.show() widget.add(item) popover.set_relative_to(button) popover.connect("closed", self.__on_popover_closed, button) popover.popup()
def __init(self): """ Init main application """ self.settings = Settings.new() # Init extensions GLib.setenv("PYTHONPATH", self.__extension_dir, True) # Create favicon path if not GLib.file_test(self.__FAVICONS_PATH, GLib.FileTest.IS_DIR): GLib.mkdir_with_parents(self.__FAVICONS_PATH, 0o0750) # Add a global DBus helper self.helper = DBusHelper() # First init sync worker from eolie.mozilla_sync import SyncWorker if SyncWorker.check_modules(): self.sync_worker = SyncWorker() # Run a first sync in 10 seconds, speed up app start GLib.timeout_add_seconds(10, self.sync_worker.sync, False) # Then run a sync every hour GLib.timeout_add_seconds(3600, self.sync_worker.sync, True) else: self.sync_worker = None if self.prefers_app_menu(): menu = self.get_app_menu() self.set_app_menu(menu) cssProviderFile = Gio.File.new_for_uri( 'resource:///org/gnome/Eolie/application.css') cssProvider = Gtk.CssProvider() cssProvider.load_from_file(cssProviderFile) screen = Gdk.Screen.get_default() styleContext = Gtk.StyleContext() styleContext.add_provider_for_screen(screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_USER) self.history = DatabaseHistory() self.bookmarks = DatabaseBookmarks() # We store cursors for main thread SqlCursor.add(self.history) SqlCursor.add(self.bookmarks) self.websettings = DatabaseSettings() self.adblock = DatabaseAdblock() self.adblock.update() self.phishing = DatabasePhishing() self.adblock_exceptions = DatabaseExceptions("adblock") # Do not remove this! self.update_default_style_sheet() self.popup_exceptions = DatabaseExceptions("popups") self.image_exceptions = DatabaseExceptions("images") if self.settings.get_user_value("jsblock") is not None: self.js_exceptions = DatabaseExceptions("js") else: self.js_exceptions = None self.phishing.update() self.art = Art() self.search = Search() self.download_manager = DownloadManager() self.pages_menu = PagesMenu() # Check MOZ_PLUGIN_PATH if self.settings.get_value('enable-plugins') and\ not GLib.getenv("MOZ_PLUGIN_PATH"): print("You need to set MOZ_PLUGIN_PATH to use plugins") # https://wiki.ubuntu.com/Unity/LauncherAPI self.__unity = None if is_unity(): try: gi.require_version('Unity', '7.0') from gi.repository import Unity self.__unity = Unity.LauncherEntry.get_for_desktop_id( "org.gnome.Eolie.desktop") except: pass # Init profiles self.set_profiles() shortcut_action = Gio.SimpleAction.new('shortcut', GLib.VariantType.new('s')) shortcut_action.connect('activate', self.__on_shortcut_action) self.add_action(shortcut_action) self.set_accels_for_action("win.shortcut::expose", ["<Alt>e"]) self.set_accels_for_action("win.exceptions::site", ["<Control>e"]) self.set_accels_for_action("win.shortcut::show_left_panel", ["F9"]) self.set_accels_for_action("win.shortcut::uri", ["<Control>l", "<Control>b"]) self.set_accels_for_action("win.shortcut::new_page", ["<Control>t"]) self.set_accels_for_action("win.shortcut::last_page", ["<Control><Shift>t"]) self.set_accels_for_action("app.shortcut::new_window", ["<Control>n"]) self.set_accels_for_action("win.shortcut::private", ["<Control><Shift>p"]) self.set_accels_for_action("win.shortcut::close_page", ["<Control>w"]) self.set_accels_for_action("win.shortcut::quit", ["<Control>q"]) self.set_accels_for_action("win.shortcut::save", ["<Control><Shift>s"]) self.set_accels_for_action("win.shortcut::filter", ["<Control>i"]) self.set_accels_for_action("win.shortcut::reload", ["<Control>r", "F5"]) self.set_accels_for_action("win.shortcut::home", ["<Control>Home"]) self.set_accels_for_action("win.shortcut::find", ["<Control>f"]) self.set_accels_for_action("win.shortcut::print", ["<Control>p"]) self.set_accels_for_action("win.shortcut::source", ["<Control><Shift>c"]) self.set_accels_for_action("win.shortcut::history", ["<Control>h"]) self.set_accels_for_action("win.shortcut::search", ["<Control>k"]) self.set_accels_for_action("win.shortcut::fullscreen", ["F11"]) self.set_accels_for_action("app.settings", ["<Control>s"]) self.set_accels_for_action("win.shortcut::backward", ["<Alt>Left", "XF86Back"]) self.set_accels_for_action("win.shortcut::forward", ["<Alt>Right", "XF86Forward"]) self.set_accels_for_action("win.shortcut::next", ["<Control>Tab", "<Control>Page_Down"]) self.set_accels_for_action("win.shortcut::previous", ["<Control><Shift>Tab", "<Control>Page_Up"]) self.set_accels_for_action("win.shortcut::next_site", ["<Control>twosuperior"]) self.set_accels_for_action("win.shortcut::previous_site", ["<Control><Shift>twosuperior"]) self.set_accels_for_action( "win.shortcut::zoom_in", ["<Control>KP_Add", "<Control>plus", "<Control>equal"]) self.set_accels_for_action("win.shortcut::zoom_out", ["<Control>KP_Subtract", "<Control>minus"]) self.set_accels_for_action("win.shortcut::zoom_default", ["<Control>KP_0", "<Control>0"])