diff --git a/src/screen_search.c b/src/screen_search.c
index 8242f1350088382827df26b22d8610f892bf6c8c..a1f5045acf0b2d42905994abb305eebcb76d3947 100644 (file)
--- a/src/screen_search.c
+++ b/src/screen_search.c
*
*/
-#include "config.h"
-
-#ifndef DISABLE_SEARCH_SCREEN
-#include "ncmpc.h"
+#include "i18n.h"
#include "options.h"
-#include "support.h"
+#include "charset.h"
#include "mpdclient.h"
#include "strfsong.h"
#include "command.h"
return NULL;
}
+static void
+paint(mpdclient_t *c);
+
+static void
+search_repaint(void)
+{
+ paint(NULL);
+ wrefresh(browser.lw->w);
+}
+
+static void
+search_repaint_if_active(void)
+{
+ if (screen_is_visible(&screen_search))
+ search_repaint();
+}
+
/* the playlist have been updated -> fix highlights */
static void
playlist_changed_callback(mpdclient_t *c, int event, gpointer data)
{
browser_playlist_changed(&browser, c, event, data);
+ search_repaint_if_active();
}
/* sanity check search mode value */
}
filelist_sort(list, compare_filelistentry_format);
- list->updated = TRUE;
} else {
list = mpdclient_filelist_search(c, FALSE, table, local_pattern);
if (list == NULL)
i=0;
while (strv[i]) {
- D("strv[%d] = \"%s\"\n", i, strv[i]);
i++;
}
arg[j] = g_strdup_printf("%s %s", arg[j], strv[i]);
g_free(tmp);
} else {
- D("Bad search tag %s\n", strv[i]);
screen_status_printf(_("Bad search tag %s"), strv[i]);
}
i++;
} else if (strv[i+1] == NULL || strlen(strv[i+1]) == 0) {
- D("No argument for search tag %s\n", strv[i]);
screen_status_printf(_("No argument for search tag %s"), strv[i]);
i++;
// j--;
if (mpdclient_finish_command(c) && fl)
filelist_free(fl);
-
- fl->updated = TRUE;
}
i=0;
}
static void
-paint(mpd_unused screen_t *screen, mpdclient_t *c)
+paint(mpd_unused mpdclient_t *c)
{
- browser.lw->clear = 1;
-
if (browser.filelist) {
browser.lw->flags = 0;
list_window_paint(browser.lw, browser_lw_callback, browser.filelist);
- browser.filelist->updated = FALSE;
} else {
browser.lw->flags = LW_HIDE_CURSOR;
list_window_paint(browser.lw, lw_search_help_callback, NULL);
- if( !MPD_VERSION_LT(c, 0, 12, 0) )
- g_strdup_printf("Advanced search disabled (MPD version < 0.12.0");
- // wmove(lw->w, 0, 0);
- //wclrtobot(lw->w);
}
-
- wnoutrefresh(browser.lw->w);
-}
-
-static void
-update(screen_t *screen, mpdclient_t *c)
-{
- if (browser.filelist == NULL || browser.filelist->updated) {
- paint(screen, c);
- return;
- }
-
- list_window_paint(browser.lw, browser_lw_callback, browser.filelist);
- wnoutrefresh(browser.lw->w);
}
static const char *
search_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
{
switch (cmd) {
- case CMD_PLAY:
- browser_handle_enter(&browser, c);
- return 1;
-
- case CMD_SELECT:
- if (browser_handle_select(&browser, c) == 0) {
- /* continue and select next item... */
- cmd = CMD_LIST_NEXT;
- }
- /* call list_window_cmd to go to the next item */
- return list_window_cmd(browser.lw, filelist_length(browser.filelist), cmd);
-
- case CMD_SELECT_ALL:
- browser_handle_select_all(&browser, c);
- paint (screen, c);
- return 0;
-
case CMD_SEARCH_MODE:
options.search_mode++;
if (mode[options.search_mode].label == NULL)
pattern);
sync_highlights(c, browser.filelist);
}
+ search_repaint();
return 1;
case CMD_SCREEN_SEARCH:
search_new(screen, c);
+ search_repaint();
return 1;
case CMD_CLEAR:
search_clear(screen, c, TRUE);
list_window_reset(browser.lw);
+ search_repaint();
return 1;
- case CMD_LIST_FIND:
- case CMD_LIST_RFIND:
- case CMD_LIST_FIND_NEXT:
- case CMD_LIST_RFIND_NEXT:
- if (browser.filelist)
- return screen_find(screen,
- browser.lw, filelist_length(browser.filelist),
- cmd, browser_lw_callback,
- browser.filelist);
- else
- return 1;
-
- case CMD_MOUSE_EVENT:
- return browser_handle_mouse_event(&browser, c);
-
default:
- if (browser.filelist)
- return list_window_cmd(browser.lw,
- filelist_length(browser.filelist), cmd);
+ break;
+ }
+
+ if (browser.filelist != NULL &&
+ browser_cmd(&browser, screen, c, cmd)) {
+ search_repaint();
+ return 1;
}
return 0;
.open = open,
.resize = resize,
.paint = paint,
- .update = update,
.cmd = search_cmd,
.get_title = get_title,
};
-
-#endif /* ENABLE_SEARCH_SCREEN */