mirror of
https://github.com/MidnightCommander/mc
synced 2025-01-18 09:19:24 +03:00
Ticket #38: fixed saving other_dir path into panels.ini.
Save Info, Tree and etc. panels state, and restore after. Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
parent
fbd2154cb5
commit
6a4124c8ea
35
src/layout.c
35
src/layout.c
@ -913,6 +913,14 @@ set_display_type (int num, int type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Restoring saved path from panels.ini for nonlist panel */
|
||||||
|
/* when it's first creation (for example view_info) */
|
||||||
|
if (old_widget == NULL && type != view_listing) {
|
||||||
|
char panel_dir[MC_MAXPATHLEN];
|
||||||
|
mc_get_current_wd (panel_dir, sizeof (panel_dir));
|
||||||
|
panels[num].last_saved_dir = g_strdup (panel_dir);
|
||||||
|
}
|
||||||
|
|
||||||
switch (type){
|
switch (type){
|
||||||
case view_listing:
|
case view_listing:
|
||||||
new_widget = restore_into_right_dir_panel(num, old_widget);
|
new_widget = restore_into_right_dir_panel(num, old_widget);
|
||||||
@ -1133,7 +1141,8 @@ save_panel_dir (int index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Save current list_view widget directory into panel */
|
/* Save current list_view widget directory into panel */
|
||||||
Widget *restore_into_right_dir_panel(int index, Widget *from_widget)
|
Widget *
|
||||||
|
restore_into_right_dir_panel (int index, Widget *from_widget)
|
||||||
{
|
{
|
||||||
Widget *new_widget = 0;
|
Widget *new_widget = 0;
|
||||||
const char *saved_dir = panels [index].last_saved_dir;
|
const char *saved_dir = panels [index].last_saved_dir;
|
||||||
@ -1141,10 +1150,30 @@ Widget *restore_into_right_dir_panel(int index, Widget *from_widget)
|
|||||||
get_display_type(index) != view_listing);
|
get_display_type(index) != view_listing);
|
||||||
const char *p_name = get_nth_panel_name (index);
|
const char *p_name = get_nth_panel_name (index);
|
||||||
|
|
||||||
if (last_was_panel) {
|
if (last_was_panel)
|
||||||
new_widget = (Widget *) panel_new_with_dir (p_name, saved_dir);
|
new_widget = (Widget *) panel_new_with_dir (p_name, saved_dir);
|
||||||
} else
|
else
|
||||||
new_widget = (Widget *) panel_new (p_name);
|
new_widget = (Widget *) panel_new (p_name);
|
||||||
|
|
||||||
return new_widget;
|
return new_widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return working dir, if it's view_listing - cwd,
|
||||||
|
but for other types - last_saved_dir */
|
||||||
|
const char *
|
||||||
|
get_panel_dir_for (const WPanel *widget)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_VIEWS; i++)
|
||||||
|
if ((WPanel *) get_panel_widget (i) == widget)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (i >= MAX_VIEWS)
|
||||||
|
return ".";
|
||||||
|
|
||||||
|
if (get_display_type (i) == view_listing)
|
||||||
|
return ((WPanel *) get_panel_widget (i))->cwd;
|
||||||
|
|
||||||
|
return panels[i].last_saved_dir;
|
||||||
|
}
|
||||||
|
@ -27,8 +27,9 @@ struct Widget *get_panel_widget (int index);
|
|||||||
|
|
||||||
struct WPanel *get_other_panel (void);
|
struct WPanel *get_other_panel (void);
|
||||||
|
|
||||||
void save_panel_dir(int index);
|
void save_panel_dir (int index);
|
||||||
Widget *restore_into_right_dir_panel(int index, Widget *from_widget);
|
Widget *restore_into_right_dir_panel (int index, Widget *from_widget);
|
||||||
|
const char *get_panel_dir_for (const WPanel *widget);
|
||||||
|
|
||||||
void set_hintbar (const char *str);
|
void set_hintbar (const char *str);
|
||||||
|
|
||||||
|
10
src/setup.c
10
src/setup.c
@ -352,12 +352,12 @@ save_panel_types (void)
|
|||||||
if (type == view_listing)
|
if (type == view_listing)
|
||||||
panel_save_setup (right_panel, right_panel->panel_name);
|
panel_save_setup (right_panel, right_panel->panel_name);
|
||||||
|
|
||||||
mc_config_set_string(mc_panels_config, "Dirs" , "other_dir",
|
mc_config_set_string (mc_panels_config, "Dirs" , "other_dir",
|
||||||
get_other_type () == view_listing
|
get_panel_dir_for (other_panel));
|
||||||
? other_panel->cwd : ".");
|
|
||||||
if (current_panel != NULL)
|
if (current_panel != NULL)
|
||||||
mc_config_set_string(mc_panels_config, "Dirs" , "current_is_left",
|
mc_config_set_string (mc_panels_config, "Dirs" , "current_is_left",
|
||||||
get_current_index () == 0 ? "1" : "0");
|
get_current_index () == 0 ? "1" : "0");
|
||||||
|
|
||||||
if (mc_panels_config->ini_path == NULL)
|
if (mc_panels_config->ini_path == NULL)
|
||||||
mc_panels_config->ini_path = g_strdup(panels_profile_name);
|
mc_panels_config->ini_path = g_strdup(panels_profile_name);
|
||||||
|
Loading…
Reference in New Issue
Block a user