Skip to content

Commit

Permalink
[libcaja-private] Re-check file MIME type before picking an application.
Browse files Browse the repository at this point in the history
An example of when the MIME type might change: a file is initially created
with 0 bytes of content, but more data is added later. Empty files are always
detected as plain text, but the file might not be empty anymore when the user
opens it.

This commit affects the behavior when double-clicking a file and when right-
clicking on it too.
  • Loading branch information
Max-E authored and lukefromdc committed Jan 3, 2019
1 parent e51b16d commit 9991fb1
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 0 deletions.
18 changes: 18 additions & 0 deletions libcaja-private/caja-file.c
Original file line number Diff line number Diff line change
Expand Up @@ -2555,6 +2555,24 @@ caja_file_update_info (CajaFile *file,
return update_info_internal (file, info, FALSE);
}

void
caja_file_refresh_info (CajaFile *file)
{
GFile *gfile;
GFileInfo *new_info;

gfile = caja_file_get_location (file);
new_info = g_file_query_info (gfile, CAJA_FILE_DEFAULT_ATTRIBUTES,
G_FILE_QUERY_INFO_NONE, NULL, NULL);
if (new_info != NULL) {
if (caja_file_update_info (file, new_info)) {
caja_file_changed (file);
}
g_object_unref (new_info);
}
g_object_unref (gfile);
}

static gboolean
update_name_internal (CajaFile *file,
const char *name,
Expand Down
6 changes: 6 additions & 0 deletions libcaja-private/caja-file.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,12 @@ void caja_file_monitor_add (CajaFile
void caja_file_monitor_remove (CajaFile *file,
gconstpointer client);

/* Synchronously refreshes file info from disk.
* This can call caja_file_changed, so don't call this function from any
* of the callbacks for that event.
*/
void caja_file_refresh_info (CajaFile *file);

/* Waiting for data that's read asynchronously.
* This interface currently works only for metadata, but could be expanded
* to other attributes as well.
Expand Down
6 changes: 6 additions & 0 deletions libcaja-private/caja-mime-actions.c
Original file line number Diff line number Diff line change
Expand Up @@ -997,6 +997,12 @@ make_activation_parameters (GList *uris,
uri = l->data;
file = caja_file_get_by_uri (uri);

/* Double-check if a file's MIME type has changed before we commit to a
choice of application for it. This can happen if, for instance, file
was originally created with 0 bytes and then content was added to it
later-- it will change from plaintext to something else. */
caja_file_refresh_info (file);

app = caja_mime_get_default_application_for_file (file);
if (app != NULL)
{
Expand Down
7 changes: 7 additions & 0 deletions src/file-manager/fm-directory-view.c
Original file line number Diff line number Diff line change
Expand Up @@ -8813,6 +8813,13 @@ real_update_menus (FMDirectoryView *view)

file = CAJA_FILE (l->data);

/* Double-check if the files' MIME types have changed before we
commit to a choice of applications for them. This can happen
if, for instance, a file was originally created with 0 bytes
and then content was added to it later-- it will change from
plaintext to something else. */
caja_file_refresh_info (file);

if (!caja_mime_file_opens_in_external_app (file)) {
show_app = FALSE;
}
Expand Down

0 comments on commit 9991fb1

Please sign in to comment.