GWin32VolumeMonitor: Sort the volumes correctly

Use a static GQueue to form the GList of mounts by appending (which
is fast, because GQueue tracks the tail pointer of its internal GList),
then return that GList. This way we don't need to form the list
by prepending, which would have made it necessary to reverse it before
returning.

If the list is not ordered correctly, local drives in GTK places sidebar
are shown in reverse order.
This commit is contained in:
Руслан Ижбулатов 2019-02-13 13:55:11 +00:00
parent ea1235ca69
commit 0c16230b28

View File

@ -111,7 +111,7 @@ get_mounts (GVolumeMonitor *volume_monitor)
{ {
DWORD drives; DWORD drives;
gchar drive[4] = "A:\\"; gchar drive[4] = "A:\\";
GList *list = NULL; GQueue queue = G_QUEUE_INIT;
drives = get_viewable_logical_drives (); drives = get_viewable_logical_drives ();
@ -121,13 +121,13 @@ get_mounts (GVolumeMonitor *volume_monitor)
while (drives && drive[0] <= 'Z') while (drives && drive[0] <= 'Z')
{ {
if (drives & 1) if (drives & 1)
{ g_queue_push_tail (&queue, _g_win32_mount_new (volume_monitor, drive, NULL));
list = g_list_prepend (list, _g_win32_mount_new (volume_monitor, drive, NULL));
}
drives >>= 1; drives >>= 1;
drive[0]++; drive[0]++;
} }
return list;
return g_steal_pointer (&queue.head);
} }
/* actually 'mounting' volumes is out of GIOs business on win32, so no volumes are delivered either */ /* actually 'mounting' volumes is out of GIOs business on win32, so no volumes are delivered either */