diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/caja-window-manage-views.c | 57 | ||||
| -rw-r--r-- | src/caja-window-slot.h | 2 | 
2 files changed, 42 insertions, 17 deletions
diff --git a/src/caja-window-manage-views.c b/src/caja-window-manage-views.c index 89722d04..f3e30f6a 100644 --- a/src/caja-window-manage-views.c +++ b/src/caja-window-manage-views.c @@ -84,9 +84,11 @@  static void begin_location_change                     (CajaWindowSlot         *slot,          GFile                      *location,          GList                      *new_selection, -        CajaLocationChangeType  type, +        CajaLocationChangeType      type,          guint                       distance, -        const char                 *scroll_pos); +        const char                 *scroll_pos, +        CajaWindowGoToCallback      callback, +        gpointer                    user_data);  static void free_location_change                      (CajaWindowSlot         *slot);  static void end_location_change                       (CajaWindowSlot         *slot);  static void cancel_location_change                    (CajaWindowSlot         *slot); @@ -697,7 +699,7 @@ caja_window_slot_open_location_full (CajaWindowSlot *slot,      }      begin_location_change (target_slot, location, new_selection, -                           CAJA_LOCATION_CHANGE_STANDARD, 0, NULL); +                           CAJA_LOCATION_CHANGE_STANDARD, 0, NULL, callback, user_data);      /* Additionally, load this in all slots that have no location, this means         we load both panes in e.g. a newly opened dual pane window. */ @@ -705,10 +707,9 @@ caja_window_slot_open_location_full (CajaWindowSlot *slot,      {          pane = l->data;          slot = pane->active_slot; -        if (slot->location == NULL && slot->pending_location == NULL) -        { +        if (slot->location == NULL && slot->pending_location == NULL) {              begin_location_change (slot, location, new_selection, -                                   CAJA_LOCATION_CHANGE_STANDARD, 0, NULL); +                                   CAJA_LOCATION_CHANGE_STANDARD, 0, NULL, NULL, NULL);          }      }  } @@ -862,6 +863,20 @@ caja_window_slot_content_view_matches_iid (CajaWindowSlot *slot,      return eel_strcmp (caja_view_get_view_id (slot->content_view), iid) == 0;  } +static gboolean +report_callback (CajaWindowSlot *slot, +                 GError *error) +{ +    if (slot->open_callback != NULL) { +        slot->open_callback (slot->pane->window, error, slot->open_callback_user_data); +        slot->open_callback = NULL; +        slot->open_callback_user_data = NULL; + +        return TRUE; +    } + +    return FALSE; +}  /*   * begin_location_change @@ -874,6 +889,8 @@ caja_window_slot_content_view_matches_iid (CajaWindowSlot *slot,   * @distance: If type is back or forward, the index into the back or forward chain. If   * type is standard or reload, this is ignored, and must be 0.   * @scroll_pos: The file to scroll to when the location is loaded. + * @callback: function to be called when the location is changed. + * @user_data: data for @callback.   *   * This is the core function for changing the location of a window. Every change to the   * location begins here. @@ -884,7 +901,9 @@ begin_location_change (CajaWindowSlot *slot,                         GList *new_selection,                         CajaLocationChangeType type,                         guint distance, -                       const char *scroll_pos) +                       const char *scroll_pos, +                       CajaWindowGoToCallback callback, +                       gpointer user_data)  {      CajaWindow *window;      CajaDirectory *directory; @@ -918,6 +937,9 @@ begin_location_change (CajaWindowSlot *slot,      slot->pending_scroll_to = g_strdup (scroll_pos); +    slot->open_callback = callback; +    slot->open_callback_user_data = user_data; +      directory = caja_directory_get (location);      /* The code to force a reload is here because if we do it @@ -1249,11 +1271,15 @@ got_file_info_for_view_selection_callback (CajaFile *file,          }          create_content_view (slot, view_id);          g_free (view_id); + +        report_callback (slot, NULL);      }      else      { -        display_view_selection_failure (window, file, -                                        location, error); +    	if (!report_callback (slot, error)) { +        	display_view_selection_failure (window, file, +                	                        location, error); +        }          if (!gtk_widget_get_visible (GTK_WIDGET (window)))          { @@ -1265,11 +1291,6 @@ got_file_info_for_view_selection_callback (CajaFile *file,              {                  g_assert (caja_application_get_n_windows () == 1); -                /* Make sure we re-use this window */ -                if (CAJA_IS_SPATIAL_WINDOW (window)) -                { -                    CAJA_SPATIAL_WINDOW (window)->affect_spatial_window_on_next_location_change = TRUE; -                }                  /* the user could have typed in a home directory that doesn't exist,                     in which case going home would cause an infinite loop, so we                     better test for that */ @@ -2038,7 +2059,7 @@ caja_window_report_view_failed (CajaWindow *window,      {          /* We loose the pending selection change here, but who cares... */          begin_location_change (slot, fallback_load_location, NULL, -                               CAJA_LOCATION_CHANGE_FALLBACK, 0, NULL); +                               CAJA_LOCATION_CHANGE_FALLBACK, 0, NULL, NULL, NULL);          g_object_unref (fallback_load_location);      } @@ -2289,7 +2310,8 @@ caja_navigation_window_back_or_forward (CajaNavigationWindow *window,           location, NULL,           back ? CAJA_LOCATION_CHANGE_BACK : CAJA_LOCATION_CHANGE_FORWARD,           distance, -         scroll_pos); +         scroll_pos, +         NULL, NULL);          g_free (scroll_pos);      } @@ -2325,7 +2347,8 @@ caja_window_slot_reload (CajaWindowSlot *slot)      }      begin_location_change      (slot, location, selection, -     CAJA_LOCATION_CHANGE_RELOAD, 0, current_pos); +     CAJA_LOCATION_CHANGE_RELOAD, 0, current_pos, +     NULL, NULL);      g_free (current_pos);      g_object_unref (location);      eel_g_object_list_free (selection); diff --git a/src/caja-window-slot.h b/src/caja-window-slot.h index e0e93db9..ea858166 100644 --- a/src/caja-window-slot.h +++ b/src/caja-window-slot.h @@ -109,6 +109,8 @@ struct CajaWindowSlot      GCancellable *mount_cancellable;      GError *mount_error;      gboolean tried_mount; +    CajaWindowGoToCallback open_callback; +    gpointer open_callback_user_data;      GCancellable *find_mount_cancellable;  | 
