def __create_initial_windows(self, foreground): """ Create initial windows based on saved session @param foreground as bool if foreground loading allowed """ size = (800, 600) maximized = False try: windows = load(open(EOLIE_DATA_PATH + "/session_states.bin", "rb")) if self.settings.get_value("remember-session"): for window in windows: if not window["states"]: continue new_window = self.get_new_window(window["size"], window["maximized"]) items = [] i = 0 if foreground else 1 for (uri, title, atime, gtime, ephemeral, state) in window["states"]: loading_type = wanted_loading_type(i) webkit_state = WebKit2.WebViewSessionState( GLib.Bytes.new(state)) items.append((uri, title, atime, gtime, ephemeral, webkit_state, loading_type)) i += 1 new_window.container.add_webviews(items) elif windows: size = windows[0]["size"] maximized = windows[0]["maximized"] except Exception as e: print("Application::__create_initial_windows()", e) if not self.get_windows(): self.get_new_window(size, maximized)
def __init__(self, activity, state=None): WebKit2.WebView.__init__(self) self._activity = activity web_settings = self.get_settings() # "Experimental" features that Epiphany enabled by default web_settings.props.enable_webgl = True web_settings.props.enable_webaudio = True # Add SugarLabs user agent: identifier = ' SugarLabs/' + self.CURRENT_SUGAR_VERSION web_settings.props.user_agent += identifier self.set_settings(web_settings) # This property is used to set the title immediatly the user # presses Enter on the URL Entry self.loading_uri = None self.security_status = None # Reference to the global history and callbacks to handle it: self._global_history = globalhistory.get_global_history() self.connect('load-changed', self.__load_changed_cb) self.connect('notify::title', self.__title_changed_cb) self.connect('decide-policy', self.__decide_policy_cb) self.connect('permission-request', self.__permission_request_cb) self.connect('run-file-chooser', self.__run_file_chooser) self.connect('load-failed', self.__load_failed_cb) self._inject_media_style = False self.props.zoom_level = ZOOM_ORIGINAL ContentInvoker(self) if state is not None: gbytes = GLib.Bytes(b64decode(state)) session_state = WebKit2.WebViewSessionState(gbytes) self.restore_session_state(session_state) # this is what epiphany does: # https://github.com/GNOME/epiphany/blob/ # 04e7811c32ba8a2c980a77aac1316b77f0969057/src/ephy-session.c#L280 bf_list = self.get_back_forward_list() item = bf_list.get_current_item() if item is not None: self.go_to_back_forward_list_item(item) # we use this if the browser crashes self.cached_uri = None
def __restore_state(self): """ Restore saved state @return restored pages count as int """ count = 0 try: session_states = load( open(self.LOCAL_PATH + "/session_states.bin", "rb")) for (uri, private, state) in session_states: webkit_state = WebKit2.WebViewSessionState( GLib.Bytes.new(state)) GLib.idle_add(self.active_window.container.add_web_view, uri, count == 0, private, None, None, webkit_state) count += 1 except Exception as e: print("Application::restore_state()", e) return count
def __restore_state(self): """ Restore saved state @return True as bool if restored """ window_type = Gdk.WindowType.CHILD try: session_states = load( open(LOCAL_PATH + "/session_states.bin", "rb")) for (uri, ephemeral, state) in session_states: webkit_state = WebKit2.WebViewSessionState( GLib.Bytes.new(state)) GLib.idle_add(self.active_window.container.add_webview, uri, window_type, ephemeral, None, webkit_state, window_type == Gdk.WindowType.CHILD) window_type = Gdk.WindowType.OFFSCREEN except Exception as e: print("Application::restore_state()", e) return window_type != Gdk.WindowType.CHILD
def __on_openall_clicked(self, action, variant): """ Add all entries @param Gio.SimpleAction @param GVariant """ for i in range(0, self.__closed_section.get_n_items()): uri_attr = self.__closed_section.get_item_attribute_value(i, "uri") if uri_attr is None: continue priv_attr = self.__closed_section.get_item_attribute_value( i, "private") state_attr = self.__closed_section.get_item_attribute_value( i, "state") if state_attr is not None: webkit_state = WebKit2.WebViewSessionState( GLib.Bytes.new(state_attr.get_string())) else: webkit_state = None GLib.idle_add(self.__app.active_window.container.add_webview, uri_attr.get_string(), Gdk.WindowType.OFFSCREEN, priv_attr.get_boolean(), None, webkit_state, False) self.__closed_section.remove(i)