From 934759ef3c4e09ce10f875881ec15c690503ff84 Mon Sep 17 00:00:00 2001 From: a bellenir Date: Fri, 1 Aug 2014 05:17:37 +0000 Subject: [PATCH] swap focused frame with previous with wK --- source/input.c | 1 + source/screen.c | 28 ++++++++++++++++++++++++++++ source/screen.h | 1 + 3 files changed, 30 insertions(+) diff --git a/source/input.c b/source/input.c index 6e7d7a8..9a43a6b 100644 --- a/source/input.c +++ b/source/input.c @@ -115,6 +115,7 @@ static binding_t Default_Bindings[] = { { "wm", &screen_focus_master }, { "w\n", &screen_swap_with_master }, { "wJ", &screen_swap_frame_next }, + { "wK", &screen_swap_frame_prev }, { "R", &handle_force_redraw } }; diff --git a/source/screen.c b/source/screen.c index 1c88e07..047cd3a 100644 --- a/source/screen.c +++ b/source/screen.c @@ -180,3 +180,31 @@ void screen_swap_frame_next(void){ } } +void screen_swap_frame_prev(void){ + if(Frame_List->head != Frame_List->tail){ + list_node_t* focused = state_get_focused_node(); + if(focused != Frame_List->head){ + list_node_t* prev = list_prev(Frame_List, focused); + Frame_T* ffoc = (Frame_T*)focused->contents; + Frame_T* fpre = (Frame_T*)prev->contents; + mem_retain(fpre); + list_delete_node(Frame_List, prev); + list_insert_after(Frame_List, focused, fpre); + stoopid_redraw(ffoc, fpre); + }else{ + list_node_t* prev = Frame_List->tail; + list_node_t* new_node = NULL; + Frame_T* ffoc = (Frame_T*)focused->contents; + Frame_T* fpre = (Frame_T*)prev->contents; + mem_retain(ffoc); + mem_retain(fpre); + list_delete_node(Frame_List, focused); + list_delete_node(Frame_List, prev); + list_insert_after(Frame_List, NULL, fpre); + new_node = list_insert_after(Frame_List, Frame_List->tail, ffoc); + state_set_focused_node(new_node); + stoopid_redraw(ffoc, fpre); + } + } +} + diff --git a/source/screen.h b/source/screen.h index 2049bd6..f081117 100644 --- a/source/screen.h +++ b/source/screen.h @@ -17,5 +17,6 @@ void screen_focus_prev(void); void screen_focus_master(void); void screen_swap_with_master(void); void screen_swap_frame_next(void); +void screen_swap_frame_prev(void); #endif /* SCREEN_H */ -- 2.52.0