Beispiel #1
0
 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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
 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)