def __init__(self, app): Gtk.ApplicationWindow.__init__(self, application=app, title=_("News")) self.settings = Gio.Settings.new('org.gnome.News') self.set_size_request(200, 100) self.set_icon_name('gnome-news') self.fetcher = Fetcher() self.tracker = TrackerRSS() self.fetcher.connect('new-item', self.tracker.new_feed_item_signal) self.restore_saved_size() # Start drawing UI self._setup_view()
class Window(Gtk.ApplicationWindow): @log def __init__(self, app): Gtk.ApplicationWindow.__init__(self, application=app, title=_("News")) self.settings = Gio.Settings.new('org.gnome.News') self.set_size_request(200, 100) self.set_icon_name('gnome-news') self.fetcher = Fetcher() self.tracker = TrackerRSS() self.fetcher.connect('new-item', self.tracker.new_feed_item_signal) self.restore_saved_size() # Start drawing UI self._setup_view() @log def restore_saved_size(self): # Restore window size from gsettings size_setting = self.settings.get_value('window-size') if isinstance(size_setting[0], int) and isinstance(size_setting[1], int): self.resize(size_setting[0], size_setting[1]) position_setting = self.settings.get_value('window-position') if len(position_setting) == 2 \ and isinstance(position_setting[0], int) \ and isinstance(position_setting[1], int): self.move(position_setting[0], position_setting[1]) if self.settings.get_value('window-maximized'): self.maximize() # Save changes to window size self.connect("window-state-event", self._on_window_state_event) self.configure_event_handler = self.connect("configure-event", self._on_configure_event) def _on_window_state_event(self, widget, event): self.settings.set_boolean('window-maximized', 'GDK_WINDOW_STATE_MAXIMIZED' in event.new_window_state.value_names) def _on_configure_event(self, widget, event): with self.handler_block(self.configure_event_handler): GLib.idle_add(self._store_window_size_and_position, widget, priority=GLib.PRIORITY_LOW) def _store_window_size_and_position(self, widget): size = widget.get_size() self.settings.set_value('window-size', GLib.Variant('ai', [size[0], size[1]])) position = widget.get_position() self.settings.set_value('window-position', GLib.Variant('ai', [position[0], position[1]])) @log def _setup_view(self): self._box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.views = [] self.toolbar = Toolbar(self) self._stack = Gtk.Stack( transition_type=Gtk.StackTransitionType.CROSSFADE, transition_duration=100, visible=True, can_focus=False) self._overlay = Gtk.Overlay(child=self._stack) self.set_titlebar(self.toolbar.header_bar) self._box.pack_start(self._overlay, True, True, 0) self.add(self._box) self._add_views() self.show_all() self.toolbar._back_button.set_visible(False) @log def _add_views(self): self.views.append(view.NewView(self.tracker)) self.views.append(view.FeedsView(self.tracker)) self.views.append(view.StarredView(self.tracker)) self.views.append(view.ReadView(self.tracker)) for i in self.views: if i.title: self._stack.add_titled(i, i.name, i.title) else: self._stack.add_named(i, i.name) i.connect('open-article', self.toolbar._update_title) self.views.append(view.SearchView(self.tracker)) self.toolbar.set_stack(self._stack) self._stack.set_visible_child(self.views[0]) self.fetcher.connect('items-updated', self.views[0].update_items) @log def _open_article_view(self, url): self.feed_view = view.FeedView(self.tracker, url) self._stack.previous_view = self._stack.get_visible_child() self._stack.add_named(self.feed_view, 'feedview') self._stack.set_visible_child(self.feed_view) @log def on_back_button_clicked(self, widget): self._stack.set_visible_child(self._stack.previous_view) self._stack.previous_view = None self._stack.remove(self.feed_view) self.feed_view = None self.toolbar.set_state(ToolbarState.MAIN)