vlc | branch: master | Rafaël Carré <[email protected]> | Mon Nov 28 22:23:40 2011 -0500| [9d759fed27350f5a9489597e38c06fb07ad87247] | committer: Rafaël Carré
ncurses: don't erase search box content split out open box function > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9d759fed27350f5a9489597e38c06fb07ad87247 --- modules/gui/ncurses.c | 92 +++++++++++++++++++++++-------------------------- 1 files changed, 43 insertions(+), 49 deletions(-) diff --git a/modules/gui/ncurses.c b/modules/gui/ncurses.c index f2802fe..53051b5 100644 --- a/modules/gui/ncurses.c +++ b/modules/gui/ncurses.c @@ -206,7 +206,6 @@ struct intf_sys_t /* Search Box context */ char search_chain[20]; - char *old_search; int before_search; /* Open Box Context */ @@ -1132,13 +1131,12 @@ static int DrawStatus(intf_thread_t *intf) static void FillTextBox(intf_sys_t *sys) { int width = COLS - 2; - const char *title = sys->box_type == BOX_OPEN ? "Open: %s" : "Find: %s"; - char *chain = sys->box_type == BOX_OPEN ? sys->open_chain : - sys->old_search ? sys->old_search : - sys->search_chain; DrawEmptyLine(7, 1, width); - mvnprintw(7, 1, width, _(title), chain); + if (sys->box_type == BOX_OPEN) + mvnprintw(7, 1, width, _("Open: %s"), sys->open_chain); + else + mvnprintw(7, 1, width, _("Find: %s"), sys->search_chain); } static void FillBox(intf_thread_t *intf) @@ -1441,6 +1439,40 @@ static bool HandleBrowseKey(intf_thread_t *intf, int key) return false; } +static void OpenSelection(intf_thread_t *intf) +{ + intf_sys_t *sys = intf->p_sys; + char *uri = make_URI(sys->open_chain, NULL); + if (uri == NULL) + return; + + playlist_t *p_playlist = pl_Get(intf); + vlc_mutex_lock(&sys->pl_lock); + playlist_item_t *p_parent = sys->node; + vlc_mutex_unlock(&sys->pl_lock); + + PL_LOCK; + if (!p_parent) { + playlist_item_t *current; + current= playlist_CurrentPlayingItem(p_playlist); + p_parent = current ? current->p_parent : NULL; + if (!p_parent) + p_parent = p_playlist->p_local_onelevel; + } + + while (p_parent->p_parent && p_parent->p_parent->p_parent) + p_parent = p_parent->p_parent; + PL_UNLOCK; + + playlist_Add(p_playlist, uri, NULL, + PLAYLIST_APPEND|PLAYLIST_GO, PLAYLIST_END, + p_parent->p_input == p_playlist->p_local_onelevel->p_input, + false); + + sys->plidx_follow = true; + free(uri); +} + static void HandleEditBoxKey(intf_thread_t *intf, int key, int box) { intf_sys_t *sys = intf->p_sys; @@ -1458,44 +1490,11 @@ static void HandleEditBoxKey(intf_thread_t *intf, int key, int box) case KEY_ENTER: case '\r': case '\n': - if (search) { - if (len) - sys->old_search = strdup(sys->search_chain); - else if (sys->old_search) - SearchPlaylist(sys, sys->old_search); - } else if (len) { - char *uri = make_URI(sys->open_chain, NULL); - if (uri == NULL) { - sys->box_type = BOX_PLAYLIST; - return; - } - - playlist_t *p_playlist = pl_Get(intf); - vlc_mutex_lock(&sys->pl_lock); - playlist_item_t *p_parent = sys->node; - vlc_mutex_unlock(&sys->pl_lock); - - PL_LOCK; - if (!p_parent) { - playlist_item_t *current; - current= playlist_CurrentPlayingItem(p_playlist); - p_parent = current ? current->p_parent : NULL; - if (!p_parent) - p_parent = p_playlist->p_local_onelevel; - } - - while (p_parent->p_parent && p_parent->p_parent->p_parent) - p_parent = p_parent->p_parent; - PL_UNLOCK; - - playlist_Add(p_playlist, uri, NULL, - PLAYLIST_APPEND|PLAYLIST_GO, PLAYLIST_END, - p_parent->p_input == p_playlist->p_local_onelevel->p_input, - false); + if (search) + SearchPlaylist(sys, sys->search_chain); + else + OpenSelection(intf); - free(uri); - sys->plidx_follow = true; - } sys->box_type = BOX_PLAYLIST; return; @@ -1534,11 +1533,8 @@ static void HandleEditBoxKey(intf_thread_t *intf, int key, int box) } } - if (search) { - free(sys->old_search); - sys->old_search = NULL; + if (search) SearchPlaylist(sys, str); - } } static void InputNavigate(input_thread_t* p_input, const char *var) @@ -1575,7 +1571,6 @@ static void HandleCommonKey(intf_thread_t *intf, int key) case 'S': BoxSwitch(sys, BOX_STATS); return; case '/': /* Search */ - sys->search_chain[0] = '\0'; sys->plidx_follow = false; if (sys->box_type == BOX_PLAYLIST) { sys->before_search = sys->box_idx; @@ -1853,7 +1848,6 @@ static void Close(vlc_object_t *p_this) DirsDestroy(sys); free(sys->current_dir); - free(sys->old_search); if (sys->p_input) vlc_object_release(sys->p_input); _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
