--- git/mc.org/src/layout.c	2009-05-10 17:39:09.000000000 +0200
+++ git/mc/src/layout.c	2009-07-18 22:32:33.000000000 +0200
@@ -85,9 +85,15 @@
 /* Set if the split is the same */
 int equal_split = 1;
 
+/* Set if the split follows the focus */
+int dynamic_split = 0;
+
 /* First panel size if the panel are not split equally */
 int first_panel_size = 0;
 
+/* Active panel size if the panel are split dynamically */
+int dynamic_panel_size = 0;
+
 /* The number of output lines shown (if available) */
 int output_lines = 0;
 
@@ -128,6 +134,7 @@
 /* Internal variables */
 static int _horizontal_split;
 static int _equal_split;
+static int _dynamic_split;
 static int _first_panel_size;
 static int _menubar_visible;
 static int _output_lines;
@@ -145,7 +152,7 @@
 #define MINWIDTH 12
 #define MINHEIGHT 5
 
-#define BY      12
+#define BY      14
 
 #define B_2LEFT B_USER
 #define B_2RIGHT (B_USER + 1)
@@ -174,6 +181,7 @@
     { N_("show &Mini status"), &show_mini_info,  0 },
     { N_("menu&Bar visible"),  &menubar_visible, 0 },
     { N_("&Equal split"),      &equal_split,     0 },
+    { N_("&Dynamic split"),    &dynamic_split,   0 },
     { N_("pe&Rmissions"),      &permission_mode, 0 },
     { N_("&File types"),       &filetype_mode,   0 },
     { 0, 0, 0 }
@@ -227,13 +235,16 @@
     old_horizontal_split = _horizontal_split; 
    
     attrset (COLOR_NORMAL);
-    dlg_move (layout_dlg, 6, 6);
+    dlg_move (layout_dlg, 7, 6);
     tty_printf ("%03d", _first_panel_size);
-    dlg_move (layout_dlg, 6, 18);
+    dlg_move (layout_dlg, 7, 18);
     if (_horizontal_split)
 	tty_printf ("%03d", height - _first_panel_size);
     else
-	tty_printf ("%03d", COLS - _first_panel_size);
+    if(_dynamic_split)
+    tty_printf ("---"); 
+    else 
+    tty_printf ("%03d", COLS - _first_panel_size); 
 }
 
 static int b2left_cback (int action)
@@ -299,7 +310,7 @@
 
 	attrset (COLOR_HOT_NORMAL);
 	update_split ();
-	dlg_move (h, 6, 13);
+	dlg_move (h, 7, 13);
 	addch ('=');
 	if (console_flag){
 	    if (old_output_lines != _output_lines){
@@ -314,8 +325,9 @@
 	return MSG_HANDLED;
 
     case DLG_POST_KEY:
-	_filetype_mode = check_options [9].widget->state & C_BOOL;
-	_permission_mode = check_options [8].widget->state & C_BOOL;
+    _filetype_mode = check_options [10].widget->state & C_BOOL; 
+    _permission_mode = check_options [9].widget->state & C_BOOL; 
+    _dynamic_split = check_options [8].widget->state & C_BOOL; 
 	_equal_split = check_options [7].widget->state & C_BOOL;
 	_menubar_visible = check_options [6].widget->state & C_BOOL;
 	_command_prompt = check_options [5].widget->state & C_BOOL;
@@ -439,14 +451,14 @@
     }
 
     layout_dlg =
-	create_dlg (0, 0, 15, first_width + second_width + 9,
+	create_dlg (0, 0, 17, first_width + second_width + 9,
 		    dialog_colors, layout_callback, "[Layout]",
 		    _("Layout"), DLG_CENTER | DLG_REVERSE);
 
-    add_widget (layout_dlg, groupbox_new (2, 4, 6, first_width, title1));
-    add_widget (layout_dlg, groupbox_new (8, 4, 4, first_width, title2));
+    add_widget (layout_dlg, groupbox_new (2, 4, 8, first_width, title1));
+    add_widget (layout_dlg, groupbox_new (10, 4, 4, first_width, title2));
     add_widget (layout_dlg,
-		groupbox_new (2, 5 + first_width, 10, second_width,
+		groupbox_new (2, 5 + first_width, 12, second_width,
 			      title3));
 
     add_widget (layout_dlg,
@@ -473,32 +485,44 @@
 	    check_new (LAYOUT_OPTIONS_COUNT - i - 1, 7 + first_width, XTRACT (i));
 	add_widget (layout_dlg, check_options[i].widget);
     }
-    check_options[9].widget = check_new (10, 6, XTRACT (9));
+    /* permissions */
+    check_options[9].widget = check_new (12, 6, XTRACT (9));
     add_widget (layout_dlg, check_options[9].widget);
-    check_options[8].widget = check_new (9, 6, XTRACT (8));
-    add_widget (layout_dlg, check_options[8].widget);
+    /* filetype */
+    check_options[10].widget = check_new (11, 6, XTRACT (10));
+    add_widget (layout_dlg, check_options[10].widget);
 
     _filetype_mode = filetype_mode;
     _permission_mode = permission_mode;
     _equal_split = equal_split;
+    _dynamic_split = dynamic_split;
     _menubar_visible = menubar_visible;
     _command_prompt = command_prompt;
     _keybar_visible = keybar_visible;
     _message_visible = message_visible;
     _xterm_title = xterm_title;
     _free_space = free_space;
+
     bright_widget =
-	button_new (6, 15, B_2RIGHT, NARROW_BUTTON, "&>", b2right_cback);
+	button_new (7, 15, B_2RIGHT, NARROW_BUTTON, "&>", b2right_cback);
     add_widget (layout_dlg, bright_widget);
     bleft_widget =
-	button_new (6, 9, B_2LEFT, NARROW_BUTTON, "&<", b2left_cback);
+	button_new (7, 9, B_2LEFT, NARROW_BUTTON, "&<", b2left_cback);
     add_widget (layout_dlg, bleft_widget);
+
+    /* dynamic split */
+    check_options[8].widget = check_new (6, 6, XTRACT (8));
+    add_widget (layout_dlg, check_options[8].widget);
+
     check_options[7].widget = check_new (5, 6, XTRACT (7));
     old_first_panel_size = -1;
     old_horizontal_split = -1;
     old_output_lines = -1;
 
-    _first_panel_size = first_panel_size;
+    if(dynamic_split) 
+        _first_panel_size = dynamic_panel_size; 
+    else 
+        _first_panel_size = first_panel_size; 
     _output_lines = output_lines;
     add_widget (layout_dlg, check_options[7].widget);
     radio_widget = radio_new (3, 6, 2, s_split_direction);
@@ -533,6 +557,7 @@
 		*check_options [i].variable = check_options [i].widget->state & C_BOOL;
 	horizontal_split = radio_widget->sel;
 	first_panel_size = _first_panel_size;
+    dynamic_panel_size = _first_panel_size;
 	output_lines = _output_lines;
 	layout_do_change = 1;
     }
@@ -563,6 +588,12 @@
 	else if (first_panel_size > COLS - MINWIDTH)
 	    first_panel_size = COLS - MINWIDTH;
     }
+    if (dynamic_split){ 
+        if (   panels[0].widget == current_panel ) 
+            first_panel_size = dynamic_panel_size; 
+        if (   panels[1].widget == current_panel ) 
+            first_panel_size = COLS - dynamic_panel_size; 
+    } 
 }
 
 #ifdef HAVE_SLANG
--- git/mc.org/src/layout.h	2009-05-10 17:39:09.000000000 +0200
+++ git/mc/src/layout.h	2009-07-18 22:03:09.000000000 +0200
@@ -37,7 +37,9 @@
 
 extern int winch_flag;
 extern int equal_split;
+extern int dynamic_split;
 extern int first_panel_size;
+extern int dynamic_panel_size;
 extern int output_lines;
 extern int command_prompt;
 extern int keybar_visible;
--- git/mc.org/src/screen.c	2009-05-10 17:39:09.000000000 +0200
+++ git/mc/src/screen.c	2009-07-18 22:04:46.000000000 +0200
@@ -2387,7 +2387,12 @@
 	return MSG_HANDLED;
 
     case WIDGET_FOCUS:
-	current_panel = panel;
+    current_panel = panel;
+    if(dynamic_split) { 
+      setup_panels(); 
+      paint_panel (get_panel_widget(0)); 
+      paint_panel (get_panel_widget(1)); 
+    } 
 	panel->active = 1;
 	if (mc_chdir (panel->cwd) != 0) {
 	    char *cwd = strip_password (g_strdup (panel->cwd), 1);
--- git/mc.org/src/setup.c	2009-05-10 17:39:09.000000000 +0200
+++ git/mc/src/setup.c	2009-07-18 22:05:53.000000000 +0200
@@ -130,7 +130,9 @@
     int *opt_addr;
 } layout [] = {
     { "equal_split", &equal_split },
+    { "dynamic_split", &dynamic_split },
     { "first_panel_size", &first_panel_size },
+    { "dynamic_panel_size", &dynamic_panel_size },
     { "message_visible", &message_visible },
     { "keybar_visible", &keybar_visible },
     { "xterm_title", &xterm_title },
