Compare commits
2 Commits
1a8c461af2
...
6c748439ed
Author | SHA1 | Date | |
---|---|---|---|
6c748439ed | |||
fbf26a7d66 |
@ -683,11 +683,29 @@ append_opener(GtkWidget *menu, GAppInfo *opener, const OpenContext *template)
|
|||||||
ctx->content_type = g_strdup(template->content_type);
|
ctx->content_type = g_strdup(template->content_type);
|
||||||
ctx->app_info = opener;
|
ctx->app_info = opener;
|
||||||
|
|
||||||
// It's documented that we can touch the child, if we want formatting:
|
|
||||||
// https://docs.gtk.org/gtk3/class.MenuItem.html
|
|
||||||
// XXX: Would g_app_info_get_display_name() be any better?
|
// XXX: Would g_app_info_get_display_name() be any better?
|
||||||
gchar *name = g_strdup_printf("Open With %s", g_app_info_get_name(opener));
|
gchar *name = g_strdup_printf("Open With %s", g_app_info_get_name(opener));
|
||||||
|
|
||||||
|
// It's documented that we can touch the child, if we want to use markup.
|
||||||
|
#if 0
|
||||||
GtkWidget *item = gtk_menu_item_new_with_label(name);
|
GtkWidget *item = gtk_menu_item_new_with_label(name);
|
||||||
|
#else
|
||||||
|
// GtkImageMenuItem overrides the toggle_size_request class method
|
||||||
|
// to get the image shown in the "margin"--too much work to duplicate.
|
||||||
|
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
|
||||||
|
|
||||||
|
GtkWidget *item = gtk_image_menu_item_new_with_label(name);
|
||||||
|
GIcon *icon = g_app_info_get_icon(opener);
|
||||||
|
if (icon) {
|
||||||
|
GtkWidget *image = gtk_image_new_from_gicon(icon, GTK_ICON_SIZE_MENU);
|
||||||
|
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
|
||||||
|
gtk_image_menu_item_set_always_show_image(
|
||||||
|
GTK_IMAGE_MENU_ITEM(item), TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
G_GNUC_END_IGNORE_DEPRECATIONS;
|
||||||
|
#endif
|
||||||
|
|
||||||
g_free(name);
|
g_free(name);
|
||||||
g_signal_connect_data(item, "activate", G_CALLBACK(open_context_launch),
|
g_signal_connect_data(item, "activate", G_CALLBACK(open_context_launch),
|
||||||
ctx, open_context_notify, 0);
|
ctx, open_context_notify, 0);
|
||||||
|
21
fiv-io.c
21
fiv-io.c
@ -2711,6 +2711,7 @@ fiv_io_open_from_data(
|
|||||||
|
|
||||||
typedef struct _ModelEntry {
|
typedef struct _ModelEntry {
|
||||||
gchar *uri; ///< GIO URI
|
gchar *uri; ///< GIO URI
|
||||||
|
gchar *collate_key; ///< Collate key for the filename
|
||||||
gint64 mtime_msec; ///< Modification time in milliseconds
|
gint64 mtime_msec; ///< Modification time in milliseconds
|
||||||
} ModelEntry;
|
} ModelEntry;
|
||||||
|
|
||||||
@ -2718,6 +2719,7 @@ static void
|
|||||||
model_entry_finalize(ModelEntry *entry)
|
model_entry_finalize(ModelEntry *entry)
|
||||||
{
|
{
|
||||||
g_free(entry->uri);
|
g_free(entry->uri);
|
||||||
|
g_free(entry->collate_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct _FivIoModel {
|
struct _FivIoModel {
|
||||||
@ -2778,17 +2780,6 @@ model_supports(FivIoModel *self, const gchar *filename)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
|
||||||
model_compare_name(GFile *location1, GFile *location2)
|
|
||||||
{
|
|
||||||
gchar *name1 = g_file_get_parse_name(location1);
|
|
||||||
gchar *name2 = g_file_get_parse_name(location2);
|
|
||||||
int result = g_utf8_collate(name1, name2);
|
|
||||||
g_free(name1);
|
|
||||||
g_free(name2);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
model_compare_entries(FivIoModel *self, const ModelEntry *entry1, GFile *file1,
|
model_compare_entries(FivIoModel *self, const ModelEntry *entry1, GFile *file1,
|
||||||
const ModelEntry *entry2, GFile *file2)
|
const ModelEntry *entry2, GFile *file2)
|
||||||
@ -2809,7 +2800,7 @@ model_compare_entries(FivIoModel *self, const ModelEntry *entry1, GFile *file1,
|
|||||||
// Fall-through
|
// Fall-through
|
||||||
case FIV_IO_MODEL_SORT_NAME:
|
case FIV_IO_MODEL_SORT_NAME:
|
||||||
case FIV_IO_MODEL_SORT_COUNT:
|
case FIV_IO_MODEL_SORT_COUNT:
|
||||||
result = model_compare_name(file1, file2);
|
result = strcmp(entry1->collate_key, entry2->collate_key);
|
||||||
}
|
}
|
||||||
return self->sort_descending ? -result : +result;
|
return self->sort_descending ? -result : +result;
|
||||||
}
|
}
|
||||||
@ -2870,6 +2861,12 @@ model_reload(FivIoModel *self, GError **error)
|
|||||||
g_date_time_unref(mtime);
|
g_date_time_unref(mtime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gchar *parse_name = g_file_get_parse_name(child);
|
||||||
|
// TODO(p): Make it possible to use g_utf8_collate_key() instead,
|
||||||
|
// which does not use natural sorting.
|
||||||
|
entry.collate_key = g_utf8_collate_key_for_filename(parse_name, -1);
|
||||||
|
g_free(parse_name);
|
||||||
|
|
||||||
const char *name = g_file_info_get_name(info);
|
const char *name = g_file_info_get_name(info);
|
||||||
if (g_file_info_get_file_type(info) == G_FILE_TYPE_DIRECTORY) {
|
if (g_file_info_get_file_type(info) == G_FILE_TYPE_DIRECTORY) {
|
||||||
entry.uri = g_file_get_uri(child);
|
entry.uri = g_file_get_uri(child);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user