]> git.mdlowis.com Git - archive/afm.git/commitdiff
busted; wip
authora bellenir <a@bellenir.com>
Tue, 29 Jul 2014 20:22:39 +0000 (20:22 +0000)
committera bellenir <a@bellenir.com>
Tue, 29 Jul 2014 20:22:39 +0000 (20:22 +0000)
source/input.c
source/screen.c
source/screen.h

index 89a129cbfd2e86f3615e3171c51c8b5a3b430dc2..4c6acec285c8a9e70d2414618fa36888aefcf41e 100644 (file)
@@ -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};
index c4e3c6e94b58348efd9004a32a4f6bb907306f0c..1ff3d901c3fb1581c5bd4db6152c9e71caab21b8 100644 (file)
@@ -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);
+}
+
index 5cea6753cb96256f48b1499a6893476591478486..976e7a7091ea43ee741fc1874ca74a8bbff0dcd9 100644 (file)
@@ -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 */