aboutsummaryrefslogtreecommitdiffstats
path: root/list_window.c
diff options
context:
space:
mode:
authorKalle Wallin <kaw@linux.se>2004-03-26 12:31:40 +0000
committerKalle Wallin <kaw@linux.se>2004-03-26 12:31:40 +0000
commitde0277cb4f648484179ddca68a39cadcdb892338 (patch)
tree1684dbcfc8c0d7c1de1dc5ffbdb9a983c1511caf /list_window.c
parent8ccbb1a4fc500d7ae746868da85907f4c80f1ea2 (diff)
downloadmpd-de0277cb4f648484179ddca68a39cadcdb892338.tar.gz
mpd-de0277cb4f648484179ddca68a39cadcdb892338.tar.xz
mpd-de0277cb4f648484179ddca68a39cadcdb892338.zip
Added reversed and wrapped list search (find).
git-svn-id: https://svn.musicpd.org/ncmpc/trunk@497 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'list_window.c')
-rw-r--r--list_window.c52
1 files changed, 46 insertions, 6 deletions
diff --git a/list_window.c b/list_window.c
index 21ee9119f..ee08a8b81 100644
--- a/list_window.c
+++ b/list_window.c
@@ -150,20 +150,58 @@ int
list_window_find(list_window_t *lw,
list_window_callback_fn_t callback,
void *callback_data,
- char *str)
+ char *str,
+ int wrap)
{
int h;
int i = lw->selected+1;
char *label;
+
+ while( wrap || i==lw->selected+1 )
+ {
+ while( (label=(callback) (i,&h,callback_data)) )
+ {
+ if( str && label && strcasestr(label, str) )
+ {
+ lw->selected = i;
+ return 0;
+ }
+ i++;
+ if( wrap && i==lw->selected )
+ return 1;
+ }
+ i=0; /* first item */
+ }
+ return 1;
+}
- while( (label=(callback) (i,&h,callback_data)) )
+
+int
+list_window_rfind(list_window_t *lw,
+ list_window_callback_fn_t callback,
+ void *callback_data,
+ char *str,
+ int wrap,
+ int rows)
+{
+ int h;
+ int i = lw->selected-1;
+ char *label;
+
+ while( wrap || i==lw->selected-1 )
{
- if( str && label && strcasestr(label, str) )
+ while( i>=0 && (label=(callback) (i,&h,callback_data)) )
{
- lw->selected = i;
- return 0;
+ if( str && label && strcasestr(label, str) )
+ {
+ lw->selected = i;
+ return 0;
+ }
+ i--;
+ if( wrap && i==lw->selected )
+ return 1;
}
- i++;
+ i=rows-1; /* last item */
}
return 1;
}
@@ -204,3 +242,5 @@ list_window_cmd(list_window_t *lw, int rows, command_t cmd)
}
return 1;
}
+
+