def remember_location(view):
    """Add current location to history stack."""
    history = list(Gst.get('history'))
    location = tuple([view.get_property(x) for x in
        ('latitude', 'longitude', 'zoom-level')])
    if history[-1] != location:
        history.append(location)
    Gst.set_history(history[-30:])
def go_back(*ignore):
    """Return the map view to where the user last set it."""
    history = list(Gst.get('history'))
    lat, lon, zoom = history.pop()
    if valid_coords(lat, lon):
        MapView.set_zoom_level(zoom)
        MapView.center_on(lat, lon)
    if len(history) > 1:
        Gst.set_history(history)
    else:
        Gst.reset('history')
 def launch(self):
     """Do some things that GtkBuilder XML can't do.
     
     Ideally this method would not exist. If you see something here that
     can be done directly in the GtkBuilder XML, please let me know.
     """
     self.loaded_photos.set_sort_column_id(3, Gtk.SortType.ASCENDING)
     
     self.about.set_version(REVISION)
     self.about.set_program_name(APPNAME)
     self.about.set_logo(GdkPixbuf.Pixbuf.new_from_file_at_size(
         join(PKG_DATA_DIR, PACKAGE + '.svg'), 192, 192))
     
     self.main.resize(*Gst.get('window-size'))
     self.main.show_all()
     
     Gst.bind('left-pane-page', self.photo_camera_gps, 'page')
     Gst.bind('use-dark-theme', Gtk.Settings.get_default(),
              'gtk-application-prefer-dark-theme')
     
     placeholder = self.empty_photo_list
     toolbar = self.photo_btn_bar
     
     def photo_pane_visibility(liststore, *ignore):
         """Hide the placeholder and show the toolbar when appropriate."""
         empty = liststore.get_iter_first() is None
         placeholder.set_visible(empty)
         toolbar.set_visible(not empty)
     
     self.loaded_photos.connect('row-inserted', photo_pane_visibility)
     self.loaded_photos.connect('row-deleted', photo_pane_visibility)
     self.photos_view.connect('button-press-event', self.photoview_pressed)
     self.photos_view.connect('button-release-event', self.photoview_released)
     self.photos_selection.connect('changed', self.update_highlights)
     self.photos_selection.connect('changed', self.button_sensitivity)
     
     self.error_bar.connect('response',
         lambda widget, signal: widget.hide())