From fa9325e7c4c7dac7dba3e0e669ea530ee726b6ef Mon Sep 17 00:00:00 2001 From: a bellenir Date: Tue, 29 Jul 2014 20:22:39 +0000 Subject: [PATCH] busted; wip --- source/input.c | 4 +++- source/screen.c | 28 ++++++++++++++++++++++++++++ source/screen.h | 3 ++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/source/input.c b/source/input.c index 89a129c..4c6acec 100644 --- a/source/input.c +++ b/source/input.c @@ -108,7 +108,9 @@ static binding_t Default_Bindings[] = { { "h", &handle_collapse }, { "wj", &screen_focus_next }, { "wk", &screen_focus_prev }, - { "w\n", &screen_focus_master } + { "wm", &screen_focus_master }, + { "w\n", &screen_swap_with_master }, + { "R", &screen_force_redraw } }; static char Key_Buffer[16] = {0}; diff --git a/source/screen.c b/source/screen.c index c4e3c6e..1ff3d90 100644 --- a/source/screen.c +++ b/source/screen.c @@ -146,3 +146,31 @@ void screen_focus_master(void){ state_set_screen_dirty(true); } +//TODO: this should be a function in list.h +list_node_t* find_prev_node(list_node_t* node){ + list_node_t* prev = (Frame_List->head == node) ? NULL : Frame_List->head; + while(prev && prev->next != node) prev=prev->next; + return prev; +} + +void screen_swap_with_master(void){ + list_node_t* focused = state_get_focused_node(); + list_node_t* master = Frame_List->head; + list_node_t* prev = find_prev_node(focused); + list_node_t* tmp = master->next; + if(prev){ //if prev is null, implies focus is already master & should do nothing + //put master in list + prev->next = master; + master->next = focused->next; + //make focused new heaad + focused->next = tmp; + Frame_List->head = focused; + screen_force_redraw(); + } +} + +void screen_force_redraw(void){ + state_set_screen_dirty(true); + state_set_screen_resized(true); +} + diff --git a/source/screen.h b/source/screen.h index 5cea675..976e7a7 100644 --- a/source/screen.h +++ b/source/screen.h @@ -15,6 +15,7 @@ void screen_close(void); void screen_focus_next(void); void screen_focus_prev(void); void screen_focus_master(void); - +void screen_swap_with_master(void); +void screen_force_redraw(void); #endif /* SCREEN_H */ -- 2.49.0