diff options
author | Kalle Wallin <kaw@linux.se> | 2005-06-14 17:30:17 +0000 |
---|---|---|
committer | Kalle Wallin <kaw@linux.se> | 2005-06-14 17:30:17 +0000 |
commit | 34637e024a702d5ff5a431f14d67e2a7fb6331c4 (patch) | |
tree | 1fd3d13e639e675d34dea70f99cb5c5fbfc1a1c4 /src/screen_file.c | |
parent | f522f83aa4d84c18d98c2d14e79e45d50043418d (diff) | |
download | mpd-34637e024a702d5ff5a431f14d67e2a7fb6331c4.tar.gz mpd-34637e024a702d5ff5a431f14d67e2a7fb6331c4.tar.xz mpd-34637e024a702d5ff5a431f14d67e2a7fb6331c4.zip |
Moved list window state code to list_window.c
git-svn-id: https://svn.musicpd.org/ncmpc/trunk@3353 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/screen_file.c')
-rw-r--r-- | src/screen_file.c | 49 |
1 files changed, 6 insertions, 43 deletions
diff --git a/src/screen_file.c b/src/screen_file.c index 002e9cd73..b2ca1b6cd 100644 --- a/src/screen_file.c +++ b/src/screen_file.c @@ -45,7 +45,7 @@ static list_window_t *lw = NULL; -static GList *lw_state_list = NULL; +static list_window_state_t *lw_state = NULL; static mpdclient_filelist_t *filelist = NULL; @@ -153,31 +153,6 @@ playlist_changed_callback(mpdclient_t *c, int event, gpointer data) } } -/* store current state when entering a subdirectory */ -static void -push_lw_state(void) -{ - list_window_t *tmp = g_malloc(sizeof(list_window_t)); - - memcpy(tmp, lw, sizeof(list_window_t)); - lw_state_list = g_list_prepend(lw_state_list, (gpointer) tmp); -} - -/* get previous state when leaving a directory */ -static void -pop_lw_state(void) -{ - if( lw_state_list ) - { - list_window_t *tmp = lw_state_list->data; - - memcpy(lw, tmp, sizeof(list_window_t)); - g_free(tmp); - lw_state_list->data = NULL; - lw_state_list = g_list_delete_link(lw_state_list, lw_state_list); - } -} - /* list_window callback */ char * browse_lw_callback(int index, int *highlight, void *data) @@ -248,7 +223,7 @@ change_directory(screen_t *screen, mpdclient_t *c, filelist_entry_t *entry) path = g_strdup(parent); list_window_reset(lw); /* restore previous list window state */ - pop_lw_state(); + list_window_pop_state(lw_state,lw); } else if( entity->type==MPD_INFO_ENTITY_TYPE_DIRECTORY) @@ -257,8 +232,7 @@ change_directory(screen_t *screen, mpdclient_t *c, filelist_entry_t *entry) mpd_Directory *dir = entity->info.directory; path = utf8_to_locale(dir->path); /* save current list window state */ - push_lw_state(); - list_window_reset(lw); + list_window_push_state(lw_state,lw); } else return -1; @@ -537,6 +511,7 @@ static void browse_init(WINDOW *w, int cols, int rows) { lw = list_window_init(w, cols, rows); + lw_state = list_window_init_state(); } static void @@ -549,22 +524,10 @@ browse_resize(int cols, int rows) static void browse_exit(void) { - if( lw_state_list ) - { - GList *list = lw_state_list; - while( list ) - { - g_free(list->data); - list->data = NULL; - list = list->next; - } - g_list_free(lw_state_list); - lw_state_list = NULL; - - } if( filelist ) filelist = mpdclient_filelist_free(filelist); - list_window_free(lw); + lw = list_window_free(lw); + lw_state = list_window_free_state(lw_state); } static void |