Skip to content

Commit a6b86dd

Browse files
committed
added column "extension", partly works
1 parent 2f68abd commit a6b86dd

File tree

7 files changed

+113
-15
lines changed

7 files changed

+113
-15
lines changed

gresources/nemo-icon-view-ui.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<menuitem name="Manual Layout" action="Manual Layout"/>
77
<placeholder name="Auto Layout">
88
<menuitem name="Sort by Name" action="Sort by Name"/>
9+
<menuitem name="Sort by Extension" action="Sort by Extension"/>
910
<menuitem name="Sort by Size" action="Sort by Size"/>
1011
<menuitem name="Sort by Type" action="Sort by Type"/>
1112
<menuitem name="Sort by Detailed Type" action="Sort by Detailed Type"/>
@@ -28,6 +29,7 @@
2829
<menuitem name="Manual Layout" action="Manual Layout"/>
2930
<placeholder name="Auto Layout">
3031
<menuitem name="Sort by Name" action="Sort by Name"/>
32+
<menuitem name="Sort by Extension" action="Sort by Extension"/>
3133
<menuitem name="Sort by Size" action="Sort by Size"/>
3234
<menuitem name="Sort by Type" action="Sort by Type"/>
3335
<menuitem name="Sort by Detailed Type" action="Sort by Detailed Type"/>

libnemo-private/nemo-column-utilities.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,16 @@ get_builtin_columns (void)
7272
"label", _("Date Modified"),
7373
"description", _("The date the file was modified."),
7474
NULL));
75+
76+
columns = g_list_append (NULL, //G comment
77+
g_object_new (NEMO_TYPE_COLUMN,
78+
"name", "extension",
79+
"attribute", "extension",
80+
"label", _("Extension"),
81+
"description", _("The extension of the file."),
82+
"width-chars", 60,
83+
NULL));
84+
7585
columns = g_list_append (columns,
7686
g_object_new (NEMO_TYPE_COLUMN,
7787
"name", "date_modified_with_time",

libnemo-private/nemo-file.c

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ static guint signals[LAST_SIGNAL] = { 0 };
128128
static GHashTable *symbolic_links;
129129

130130
static GQuark attribute_name_q,
131+
attribute_ext_q,
131132
attribute_size_q,
132133
attribute_type_q,
133134
attribute_detailed_type_q,
@@ -173,6 +174,7 @@ static void nemo_file_info_iface_init (NemoFileInfoInterface
173174
static gboolean update_info_and_name (NemoFile *file,
174175
GFileInfo *info);
175176
static const char * nemo_file_peek_display_name (NemoFile *file);
177+
const char * nemo_file_peek_extension_name (NemoFile *file);
176178
static const char * nemo_file_peek_display_name_collation_key (NemoFile *file);
177179
static void file_mount_unmounted (GMount *mount, gpointer data);
178180
static void metadata_hash_free (GHashTable *hash);
@@ -3074,6 +3076,20 @@ compare_by_display_name (NemoFile *file_1, NemoFile *file_2)
30743076
return compare;
30753077
}
30763078

3079+
static int
3080+
compare_by_extension_name (NemoFile *file_1, NemoFile *file_2)
3081+
{
3082+
const char *key_1, *key_2;
3083+
int compare=0;
3084+
3085+
key_1 = nemo_file_peek_extension_name (file_1);
3086+
key_2 = nemo_file_peek_extension_name (file_2);
3087+
3088+
compare = g_strcmp0 (key_1, key_2);
3089+
3090+
return compare;
3091+
}
3092+
30773093
static int
30783094
compare_by_directory_name (NemoFile *file_1, NemoFile *file_2)
30793095
{
@@ -3357,6 +3373,12 @@ nemo_file_compare_for_sort (NemoFile *file_1,
33573373
result = compare_by_directory_name (file_1, file_2);
33583374
}
33593375
break;
3376+
case NEMO_FILE_SORT_BY_EXTENSION_NAME:
3377+
result = compare_by_extension_name (file_1, file_2);
3378+
if (result == 0) {
3379+
result = compare_by_display_name (file_1, file_2);
3380+
}
3381+
break;
33603382
case NEMO_FILE_SORT_BY_SIZE:
33613383
/* Compare directory sizes ourselves, then if necessary
33623384
* use GnomeVFS to compare file sizes.
@@ -3446,6 +3468,13 @@ nemo_file_compare_for_sort_by_attribute_q (NemoFile *file_1,
34463468
favorites_first,
34473469
reversed,
34483470
search_dir);
3471+
} else if (attribute == attribute_ext_q) {
3472+
return nemo_file_compare_for_sort (file_1, file_2,
3473+
NEMO_FILE_SORT_BY_EXTENSION_NAME,
3474+
directories_first,
3475+
favorites_first,
3476+
reversed,
3477+
search_dir);
34493478
} else if (attribute == attribute_size_q) {
34503479
return nemo_file_compare_for_sort (file_1, file_2,
34513480
NEMO_FILE_SORT_BY_SIZE,
@@ -4036,6 +4065,28 @@ nemo_file_peek_display_name_collation_key (NemoFile *file)
40364065
return res;
40374066
}
40384067

4068+
const char *
4069+
nemo_file_peek_extension_name (NemoFile *file)
4070+
{
4071+
if (file == NULL) {
4072+
return NULL;
4073+
}
4074+
4075+
if (nemo_file_is_broken_symbolic_link (file)) {
4076+
return g_strdup (_("link (broken)"));
4077+
}
4078+
4079+
char *str, *token, *result;
4080+
str = g_strdup (eel_ref_str_peek(file->details->name));//strdup()
4081+
4082+
while ((token = strsep(&str, "."))) {result = g_strdup(token);}
4083+
if (result == NULL) {result = "";}
4084+
g_free(str);
4085+
g_free(token);
4086+
4087+
return result;
4088+
}
4089+
40394090
static const char *
40404091
nemo_file_peek_display_name (NemoFile *file)
40414092
{
@@ -4077,6 +4128,12 @@ nemo_file_get_display_name (NemoFile *file)
40774128
return g_strdup (nemo_file_peek_display_name (file));
40784129
}
40794130

4131+
char *
4132+
nemo_file_get_extension_name (NemoFile *file)
4133+
{
4134+
return g_strdup (nemo_file_peek_extension_name (file));
4135+
}
4136+
40804137
char *
40814138
nemo_file_get_edit_name (NemoFile *file)
40824139
{
@@ -6689,6 +6746,9 @@ nemo_file_get_string_attribute_q (NemoFile *file, GQuark attribute_q)
66896746
if (attribute_q == attribute_name_q) {
66906747
return nemo_file_get_display_name (file);
66916748
}
6749+
if (attribute_q == attribute_ext_q) {
6750+
return nemo_file_get_extension_name (file);
6751+
}
66926752
if (attribute_q == attribute_type_q) {
66936753
return nemo_file_get_type_as_string (file);
66946754
}
@@ -8900,6 +8960,7 @@ nemo_file_class_init (NemoFileClass *class)
89008960
nemo_file_info_getter = nemo_file_get_internal;
89018961

89028962
attribute_name_q = g_quark_from_static_string ("name");
8963+
attribute_ext_q = g_quark_from_static_string ("extension");
89038964
attribute_size_q = g_quark_from_static_string ("size");
89048965
attribute_type_q = g_quark_from_static_string ("type");
89058966
attribute_detailed_type_q = g_quark_from_static_string ("detailed_type");

libnemo-private/nemo-file.h

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ typedef struct NemoFile NemoFile;
5757
typedef enum {
5858
NEMO_FILE_SORT_NONE,
5959
NEMO_FILE_SORT_BY_DISPLAY_NAME,
60+
NEMO_FILE_SORT_BY_EXTENSION_NAME,
6061
NEMO_FILE_SORT_BY_SIZE,
6162
NEMO_FILE_SORT_BY_TYPE,
6263
NEMO_FILE_SORT_BY_DETAILED_TYPE,
@@ -155,7 +156,7 @@ NemoFile * nemo_file_get_existing_by_uri (const char
155156
* 1) Using these is type safe.
156157
* 2) You are allowed to call these with NULL,
157158
*/
158-
NemoFile * nemo_file_ref (NemoFile *file);
159+
NemoFile * nemo_file_ref (NemoFile *file);
159160
void nemo_file_unref (NemoFile *file);
160161

161162
/* Monitor the file. */
@@ -189,15 +190,18 @@ gboolean nemo_file_contains_text (NemoFile
189190
char * nemo_file_get_display_name (NemoFile *file);
190191
char * nemo_file_get_edit_name (NemoFile *file);
191192
char * nemo_file_get_name (NemoFile *file);
193+
char * nemo_file_get_extension_name (NemoFile *file);
194+
192195
const char * nemo_file_peek_name (NemoFile *file);
196+
const char * nemo_file_peek_extension_name (NemoFile *file);
193197

194198
GFile * nemo_file_get_location (NemoFile *file);
195-
char * nemo_file_get_description (NemoFile *file);
199+
char * nemo_file_get_description (NemoFile *file);
196200
char * nemo_file_get_uri (NemoFile *file);
197201
char * nemo_file_get_path (NemoFile *file);
198202
char * nemo_file_get_uri_scheme (NemoFile *file);
199203
gboolean nemo_file_has_uri_scheme (NemoFile *file, const gchar *scheme);
200-
NemoFile * nemo_file_get_parent (NemoFile *file);
204+
NemoFile * nemo_file_get_parent (NemoFile *file);
201205
GFile * nemo_file_get_parent_location (NemoFile *file);
202206
char * nemo_file_get_parent_uri (NemoFile *file);
203207
char * nemo_file_get_parent_uri_for_display (NemoFile *file);
@@ -208,7 +212,7 @@ time_t nemo_file_get_ctime (NemoFile
208212
GFileType nemo_file_get_file_type (NemoFile *file);
209213
char * nemo_file_get_mime_type (NemoFile *file);
210214
gboolean nemo_file_is_mime_type (NemoFile *file,
211-
const char *mime_type);
215+
const char *mime_type);
212216
gboolean nemo_file_is_launchable (NemoFile *file);
213217
gboolean nemo_file_is_symbolic_link (NemoFile *file);
214218
gboolean nemo_file_is_mountpoint (NemoFile *file);
@@ -220,27 +224,27 @@ char * nemo_file_get_volume_name (NemoFile
220224
char * nemo_file_get_symbolic_link_target_path (NemoFile *file);
221225
char * nemo_file_get_symbolic_link_target_uri (NemoFile *file);
222226
gboolean nemo_file_is_broken_symbolic_link (NemoFile *file);
223-
gboolean nemo_file_is_nemo_link (NemoFile *file);
227+
gboolean nemo_file_is_nemo_link (NemoFile *file);
224228
gboolean nemo_file_is_executable (NemoFile *file);
225229
gboolean nemo_file_is_directory (NemoFile *file);
226230
gboolean nemo_file_is_user_special_directory (NemoFile *file,
227231
GUserDirectory special_directory);
228-
gboolean nemo_file_is_archive (NemoFile *file);
232+
gboolean nemo_file_is_archive (NemoFile *file);
229233
gboolean nemo_file_is_in_trash (NemoFile *file);
230234
gboolean nemo_file_is_in_recent (NemoFile *file);
231235
gboolean nemo_file_is_in_favorites (NemoFile *file);
232236
gboolean nemo_file_is_in_search (NemoFile *file);
233237
gboolean nemo_file_is_unavailable_favorite (NemoFile *file);
234238
gboolean nemo_file_is_in_admin (NemoFile *file);
235239
gboolean nemo_file_is_in_desktop (NemoFile *file);
236-
gboolean nemo_file_is_home (NemoFile *file);
240+
gboolean nemo_file_is_home (NemoFile *file);
237241
gboolean nemo_file_is_desktop_directory (NemoFile *file);
238242
GError * nemo_file_get_file_info_error (NemoFile *file);
239243
gboolean nemo_file_get_directory_item_count (NemoFile *file,
240244
guint *count,
241245
gboolean *count_unreadable);
242246
void nemo_file_recompute_deep_counts (NemoFile *file);
243-
NemoRequestStatus nemo_file_get_deep_counts (NemoFile *file,
247+
NemoRequestStatus nemo_file_get_deep_counts (NemoFile *file,
244248
guint *directory_count,
245249
guint *file_count,
246250
guint *unreadable_directory_count,
@@ -266,7 +270,7 @@ GFilesystemPreviewType nemo_file_get_filesystem_use_preview (NemoFile *f
266270

267271
char * nemo_file_get_filesystem_id (NemoFile *file);
268272

269-
NemoFile * nemo_file_get_trash_original_file (NemoFile *file);
273+
NemoFile * nemo_file_get_trash_original_file (NemoFile *file);
270274

271275
/* Permissions. */
272276
gboolean nemo_file_can_get_permissions (NemoFile *file);

libnemo-private/org.nemo.gschema.xml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,13 @@
3131
<enum id="org.nemo.SortOrder">
3232
<value nick="manually" value="0"/>
3333
<value nick="name" value="1"/>
34-
<value nick="size" value="2"/>
35-
<value nick="type" value="3"/>
36-
<value nick="detailed_type" value="4"/>
37-
<value nick="mtime" value="5"/>
38-
<value nick="atime" value="6"/>
39-
<value nick="trash-time" value="7"/>
34+
<value nick="extension" value="2"/>
35+
<value nick="size" value="3"/>
36+
<value nick="type" value="4"/>
37+
<value nick="detailed_type" value="5"/>
38+
<value nick="mtime" value="6"/>
39+
<value nick="atime" value="7"/>
40+
<value nick="trash-time" value="8"/>
4041
</enum>
4142

4243
<enum id="org.nemo.ZoomLevel">

src/nemo-desktop-icon-grid-view.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ static const DesktopSortCriterion sort_criteria[] = {
9494
"Desktop Sort by Name",
9595
"name",
9696
NEMO_FILE_SORT_BY_DISPLAY_NAME
97+
},
98+
{
99+
"Desktop Sort by Extension",
100+
"extension",
101+
NEMO_FILE_SORT_BY_EXTENSION_NAME
97102
},
98103
{
99104
"Desktop Sort by Size",
@@ -1074,6 +1079,10 @@ static const GtkRadioActionEntry desktop_sort_radio_entries[] = {
10741079
N_("Name"), NULL,
10751080
NULL,
10761081
NEMO_FILE_SORT_BY_DISPLAY_NAME },
1082+
{ "Desktop Sort by Extension", NULL,
1083+
N_("Extension"), NULL,
1084+
NULL,
1085+
NEMO_FILE_SORT_BY_EXTENSION_NAME },
10771086
{ "Desktop Sort by Size", NULL,
10781087
N_("Size"), NULL,
10791088
NULL,

src/nemo-icon-view.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,13 @@ static const SortCriterion sort_criteria[] = {
137137
N_("by _Name"),
138138
N_("Keep icons sorted by name in rows")
139139
},
140+
{
141+
NEMO_FILE_SORT_BY_EXTENSION_NAME,
142+
"extension",
143+
"Sort by Extension",
144+
N_("by _Extension"),
145+
N_("Keep icons sorted by Extension in rows")
146+
},
140147
{
141148
NEMO_FILE_SORT_BY_SIZE,
142149
"size",
@@ -1428,6 +1435,10 @@ static const GtkRadioActionEntry arrange_radio_entries[] = {
14281435
N_("By _Name"), NULL,
14291436
N_("Keep icons sorted by name in rows"),
14301437
NEMO_FILE_SORT_BY_DISPLAY_NAME },
1438+
{ "Sort by Extension", NULL,
1439+
N_("By _Extension"), NULL,
1440+
N_("Keep icons sorted by extension in rows"),
1441+
NEMO_FILE_SORT_BY_EXTENSION_NAME },
14311442
{ "Sort by Size", NULL,
14321443
N_("By _Size"), NULL,
14331444
N_("Keep icons sorted by size in rows"),

0 commit comments

Comments
 (0)