static void update_desktop_directory (CajaDesktopDirectory *desktop) { char *desktop_path; char *desktop_uri; CajaDirectory *real_directory; real_directory = desktop->details->real_directory; if (real_directory != NULL) { g_hash_table_foreach_remove (desktop->details->callbacks, (GHRFunc) gtk_true, NULL); g_hash_table_foreach_remove (desktop->details->monitors, (GHRFunc) gtk_true, NULL); g_signal_handlers_disconnect_by_func (real_directory, done_loading_callback, desktop); g_signal_handlers_disconnect_by_func (real_directory, forward_files_added_cover, desktop); g_signal_handlers_disconnect_by_func (real_directory, forward_files_changed_cover, desktop); caja_directory_unref (real_directory); } desktop_path = caja_get_desktop_directory (); desktop_uri = g_filename_to_uri (desktop_path, NULL, NULL); real_directory = caja_directory_get_by_uri (desktop_uri); g_free (desktop_uri); g_free (desktop_path); g_signal_connect_object (real_directory, "done_loading", G_CALLBACK (done_loading_callback), desktop, 0); g_signal_connect_object (real_directory, "files_added", G_CALLBACK (forward_files_added_cover), desktop, 0); g_signal_connect_object (real_directory, "files_changed", G_CALLBACK (forward_files_changed_cover), desktop, 0); desktop->details->real_directory = real_directory; }
/* either called due to slot change, or due to location change in the current slot. */ static void real_sync_search_widgets (CajaWindowPane *window_pane) { CajaWindowSlot *slot; CajaDirectory *directory; CajaSearchDirectory *search_directory; CajaNavigationWindowPane *pane; pane = CAJA_NAVIGATION_WINDOW_PANE (window_pane); slot = window_pane->active_slot; search_directory = NULL; directory = caja_directory_get (slot->location); if (CAJA_IS_SEARCH_DIRECTORY (directory)) { search_directory = CAJA_SEARCH_DIRECTORY (directory); } if (search_directory != NULL && !caja_search_directory_is_saved_search (search_directory)) { caja_navigation_window_pane_show_location_bar_temporarily (pane); caja_navigation_window_pane_set_bar_mode (pane, CAJA_BAR_SEARCH); pane->temporary_search_bar = FALSE; } else { pane->temporary_search_bar = TRUE; caja_navigation_window_pane_hide_temporary_bars (pane); } caja_directory_unref (directory); }
static void file_entry_free (FileEntry *file_entry) { caja_file_unref (file_entry->file); if (file_entry->reverse_map) { g_hash_table_destroy (file_entry->reverse_map); file_entry->reverse_map = NULL; } if (file_entry->subdirectory != NULL) { caja_directory_unref (file_entry->subdirectory); } if (file_entry->files != NULL) { g_sequence_free (file_entry->files); } g_free (file_entry); }
static void desktop_finalize (GObject *object) { CajaDesktopDirectory *desktop; desktop = CAJA_DESKTOP_DIRECTORY (object); caja_directory_unref (desktop->details->real_directory); g_hash_table_destroy (desktop->details->callbacks); g_hash_table_destroy (desktop->details->monitors); g_free (desktop->details); eel_preferences_remove_callback (CAJA_PREFERENCES_DESKTOP_IS_HOME_DIR, desktop_directory_changed_callback, desktop); G_OBJECT_CLASS (caja_desktop_directory_parent_class)->finalize (object); }
static void query_editor_changed_callback (CajaSearchBar *bar, CajaQuery *query, gboolean reload, CajaWindowSlot *slot) { CajaDirectory *directory; directory = caja_directory_get_for_file (slot->viewed_file); g_assert (CAJA_IS_SEARCH_DIRECTORY (directory)); caja_search_directory_set_query (CAJA_SEARCH_DIRECTORY (directory), query); if (reload) { caja_window_slot_reload (slot); } caja_directory_unref (directory); }
static gboolean caja_drag_can_accept_files (CajaFile *drop_target_item) { CajaDirectory *directory; if (caja_file_is_directory (drop_target_item)) { gboolean res; /* target is a directory, accept if editable */ directory = caja_directory_get_for_file (drop_target_item); res = caja_directory_is_editable (directory); caja_directory_unref (directory); return res; } if (CAJA_IS_DESKTOP_ICON_FILE (drop_target_item)) { return TRUE; } /* All Caja links are assumed to be links to directories. * Therefore, they all can accept drags, like all other * directories to. As with other directories, there can be * errors when the actual copy is attempted due to * permissions. */ if (caja_file_is_caja_link (drop_target_item)) { return TRUE; } if (caja_is_engrampa_installed () && caja_file_is_archive (drop_target_item)) { return TRUE; } return FALSE; }
static void real_update_query_editor (CajaWindowSlot *slot) { GtkWidget *query_editor; CajaQuery *query; CajaDirectory *directory; CajaSearchDirectory *search_directory; directory = caja_directory_get (slot->location); if (CAJA_IS_SEARCH_DIRECTORY (directory)) { search_directory = CAJA_SEARCH_DIRECTORY (directory); query_editor = caja_query_editor_new (caja_search_directory_is_saved_search (search_directory), caja_search_directory_is_indexed (search_directory)); slot->query_editor = CAJA_QUERY_EDITOR (query_editor); caja_window_slot_add_extra_location_widget (slot, query_editor); gtk_widget_show (query_editor); g_signal_connect_object (query_editor, "changed", G_CALLBACK (query_editor_changed_callback), slot, 0); query = caja_search_directory_get_query (search_directory); if (query != NULL) { caja_query_editor_set_query (CAJA_QUERY_EDITOR (query_editor), query); g_object_unref (query); } else { caja_query_editor_set_default_query (CAJA_QUERY_EDITOR (query_editor)); } } caja_directory_unref (directory); }
static void search_bar_activate_callback (CajaSearchBar *bar, CajaNavigationWindowPane *pane) { char *uri, *current_uri; CajaDirectory *directory; CajaSearchDirectory *search_directory; CajaQuery *query; GFile *location; uri = caja_search_directory_generate_new_uri (); location = g_file_new_for_uri (uri); g_free (uri); directory = caja_directory_get (location); g_assert (CAJA_IS_SEARCH_DIRECTORY (directory)); search_directory = CAJA_SEARCH_DIRECTORY (directory); query = caja_search_bar_get_query (CAJA_SEARCH_BAR (pane->search_bar)); if (query != NULL) { CajaWindowSlot *slot = CAJA_WINDOW_PANE (pane)->active_slot; if (!caja_search_directory_is_indexed (search_directory)) { current_uri = caja_window_slot_get_location_uri (slot); caja_query_set_location (query, current_uri); g_free (current_uri); } caja_search_directory_set_query (search_directory, query); g_object_unref (query); } caja_window_slot_go_to (CAJA_WINDOW_PANE (pane)->active_slot, location, FALSE); caja_directory_unref (directory); g_object_unref (location); }
gboolean caja_navigation_window_pane_hide_temporary_bars (CajaNavigationWindowPane *pane) { CajaWindowSlot *slot; CajaDirectory *directory; gboolean success; g_assert (CAJA_IS_NAVIGATION_WINDOW_PANE (pane)); slot = CAJA_WINDOW_PANE(pane)->active_slot; success = FALSE; if (pane->temporary_location_bar) { if (caja_navigation_window_pane_location_bar_showing (pane)) { caja_navigation_window_pane_hide_location_bar (pane, FALSE); } pane->temporary_location_bar = FALSE; success = TRUE; } if (pane->temporary_navigation_bar) { directory = caja_directory_get (slot->location); if (CAJA_IS_SEARCH_DIRECTORY (directory)) { caja_navigation_window_pane_set_bar_mode (pane, CAJA_BAR_SEARCH); } else { if (!g_settings_get_boolean (caja_preferences, CAJA_PREFERENCES_ALWAYS_USE_LOCATION_ENTRY)) { caja_navigation_window_pane_set_bar_mode (pane, CAJA_BAR_PATH); } } pane->temporary_navigation_bar = FALSE; success = TRUE; caja_directory_unref (directory); } if (pane->temporary_search_bar) { CajaNavigationWindow *window; if (!g_settings_get_boolean (caja_preferences, CAJA_PREFERENCES_ALWAYS_USE_LOCATION_ENTRY)) { caja_navigation_window_pane_set_bar_mode (pane, CAJA_BAR_PATH); } else { caja_navigation_window_pane_set_bar_mode (pane, CAJA_BAR_NAVIGATION); } window = CAJA_NAVIGATION_WINDOW (CAJA_WINDOW_PANE (pane)->window); caja_navigation_window_set_search_button (window, FALSE); pane->temporary_search_bar = FALSE; success = TRUE; } return success; }