From a293bd23779466b50af230c6a45c02107ce9628c Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Thu, 2 May 2002 15:01:38 +0000 Subject: [PATCH] r1433: Added Sort to the OpenDir SOAP method (Stephen Watson). --- ROX-Filer/Help/Changes | 4 ++++ ROX-Filer/src/remote.c | 24 +++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ROX-Filer/Help/Changes b/ROX-Filer/Help/Changes index cb327b9c..1bc2a3d7 100644 --- a/ROX-Filer/Help/Changes +++ b/ROX-Filer/Help/Changes @@ -2,6 +2,10 @@ A RISC OS-like filer for X by Thomas Leonard +02-Apr-2002 +~~~~~~~~~~~ +Added Sort to the OpenDir SOAP method (Stephen Watson). + 30-Apr-2002 ~~~~~~~~~~~ Alpha-blending for Small icons, too. diff --git a/ROX-Filer/src/remote.c b/ROX-Filer/src/remote.c index 18c770db..d41cfa19 100644 --- a/ROX-Filer/src/remote.c +++ b/ROX-Filer/src/remote.c @@ -115,7 +115,7 @@ gboolean remote_init(xmlDocPtr rpc, gboolean new_copy) soap_register("Version", rpc_Version, NULL, NULL); soap_register("Run", rpc_Run, "Filename", NULL); - soap_register("OpenDir", rpc_OpenDir, "Filename", "Style,Details"); + soap_register("OpenDir", rpc_OpenDir, "Filename", "Style,Details,Sort"); soap_register("CloseDir", rpc_CloseDir, "Filename", NULL); soap_register("Examine", rpc_Examine, "Filename", NULL); soap_register("Show", rpc_Show, "Directory,Leafname", NULL); @@ -518,16 +518,17 @@ static xmlNodePtr rpc_Version(GList *args) return reply; } -/* Args: Path, [Style, Details] */ +/* Args: Path, [Style, Details, Sort] */ static xmlNodePtr rpc_OpenDir(GList *args) { char *path; - char *style, *details; + char *style, *details, *sort; FilerWindow *fwin; path = string_value(ARG(0)); style = string_value(ARG(1)); details = string_value(ARG(2)); + sort = string_value(ARG(3)); fwin = filer_opendir(path, NULL); g_free(path); @@ -569,6 +570,23 @@ static xmlNodePtr rpc_OpenDir(GList *args) g_free(details); } + if (sort) + { + int (*cmp)(const void *, const void *); + + cmp = !g_strcasecmp(sort, "Name") ? sort_by_name : + !g_strcasecmp(sort, "Type") ? sort_by_type : + !g_strcasecmp(sort, "Date") ? sort_by_date : + !g_strcasecmp(sort, "Size") ? sort_by_size : + NULL; + if (!cmp) + g_warning("Unknown sorting criteria '%s'\n", sort); + else + display_set_sort_fn(fwin, cmp); + + g_free(sort); + } + return NULL; } -- 2.11.4.GIT