Init/deinit clean up

...to provide symmetrical usage of init/deinit functions.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
Andrew Borodin 2010-11-22 14:02:59 +02:00
parent fdb61594df
commit 116fdc4220
3 changed files with 32 additions and 34 deletions

View File

@ -46,9 +46,10 @@
#include "lib/tty/win.h" /* xterm_flag */ #include "lib/tty/win.h" /* xterm_flag */
#include "lib/skin.h" #include "lib/skin.h"
#include "lib/filehighlight.h" #include "lib/filehighlight.h"
#include "lib/fileloc.h"
#include "lib/strutil.h" #include "lib/strutil.h"
#include "lib/util.h" #include "lib/util.h"
#include "lib/vfs/mc-vfs/vfs.h" /* vfs_translate_url() */ #include "lib/vfs/mc-vfs/vfs.h" /* vfs_init(), vfs_shut() */
#include "args.h" #include "args.h"
#include "midnight.h" /* current_panel */ #include "midnight.h" /* current_panel */
@ -58,11 +59,6 @@
#include "layout.h" /* command_prompt */ #include "layout.h" /* command_prompt */
#include "ext.h" /* flush_extension_file() */ #include "ext.h" /* flush_extension_file() */
#include "command.h" /* cmdline */ #include "command.h" /* cmdline */
#include "clipboard.h" /* clipboard_store_path, clipboard_store_path */
#ifdef USE_INTERNAL_EDIT
#include "src/editor/edit.h" /* edit_stack_init(), edit_stack_free() */
#endif
#ifdef HAVE_CHARSET #ifdef HAVE_CHARSET
#include "lib/charsets.h" #include "lib/charsets.h"
@ -213,7 +209,7 @@ OS_Setup (void)
/* This variable is used by the subshell */ /* This variable is used by the subshell */
home_dir = getenv ("HOME"); home_dir = getenv ("HOME");
if (!home_dir) if (home_dir == NULL)
home_dir = mc_home; home_dir = mc_home;
} }
@ -440,10 +436,6 @@ main (int argc, char *argv[])
vfs_init (); vfs_init ();
#ifdef USE_INTERNAL_EDIT
edit_stack_init ();
#endif
if (!mc_args_handle (argc, argv, "mc")) if (!mc_args_handle (argc, argv, "mc"))
exit (EXIT_FAILURE); exit (EXIT_FAILURE);
@ -484,11 +476,8 @@ main (int argc, char *argv[])
load_keymap_defs (); load_keymap_defs ();
tty_init_colors (mc_args__disable_colors, mc_args__force_colors); tty_init_colors (mc_args__disable_colors, mc_args__force_colors);
isInitialized = mc_skin_init (&error); isInitialized = mc_skin_init (&error);
mc_filehighlight = mc_fhl_new (TRUE); mc_filehighlight = mc_fhl_new (TRUE);
dlg_set_default_colors (); dlg_set_default_colors ();
if (!isInitialized) if (!isInitialized)
@ -500,7 +489,7 @@ main (int argc, char *argv[])
/* create home directory */ /* create home directory */
/* do it after the screen library initialization to show the error message */ /* do it after the screen library initialization to show the error message */
mc_dir = concat_dir_and_file (home_dir, MC_USERCONF_DIR); mc_dir = g_build_filename (home_dir, MC_USERCONF_DIR, (char *) NULL);
canonicalize_pathname (mc_dir); canonicalize_pathname (mc_dir);
if ((stat (mc_dir, &s) != 0) && (errno == ENOENT) && mkdir (mc_dir, 0700) != 0) if ((stat (mc_dir, &s) != 0) && (errno == ENOENT) && mkdir (mc_dir, 0700) != 0)
message (D_ERROR, _("Warning"), _("Cannot create %s directory"), mc_dir); message (D_ERROR, _("Warning"), _("Cannot create %s directory"), mc_dir);
@ -548,9 +537,12 @@ main (int argc, char *argv[])
mc_fhl_free (&mc_filehighlight); mc_fhl_free (&mc_filehighlight);
mc_skin_deinit (); mc_skin_deinit ();
tty_colors_done ();
tty_shutdown (); tty_shutdown ();
done_setup ();
if (console_flag && (quit & SUBSHELL_EXIT) == 0) if (console_flag && (quit & SUBSHELL_EXIT) == 0)
handle_console (CONSOLE_RESTORE); handle_console (CONSOLE_RESTORE);
if (alternate_plus_minus) if (alternate_plus_minus)
@ -560,7 +552,6 @@ main (int argc, char *argv[])
if (console_flag) if (console_flag)
handle_console (CONSOLE_DONE); handle_console (CONSOLE_DONE);
putchar ('\n'); /* Hack to make shell's prompt start at left of screen */
if (mc_run_mode == MC_RUN_FULL && mc_args__last_wd_file != NULL if (mc_run_mode == MC_RUN_FULL && mc_args__last_wd_file != NULL
&& last_wd_string != NULL && !print_last_revert) && last_wd_string != NULL && !print_last_revert)
@ -584,21 +575,13 @@ main (int argc, char *argv[])
g_free (shell); g_free (shell);
done_key (); done_key ();
#ifdef HAVE_CHARSET
free_codepages_list ();
g_free (autodetect_codeset);
#endif
g_free (clipboard_store_path);
g_free (clipboard_paste_path);
str_uninit_strings (); str_uninit_strings ();
g_free (mc_run_param0); g_free (mc_run_param0);
g_free (mc_run_param1); g_free (mc_run_param1);
#ifdef USE_INTERNAL_EDIT putchar ('\n'); /* Hack to make shell's prompt start at left of screen */
edit_stack_free ();
#endif
return 0; return 0;
} }

View File

@ -44,6 +44,7 @@
#include "lib/tty/tty.h" #include "lib/tty/tty.h"
#include "lib/tty/key.h" /* For init_key() */ #include "lib/tty/key.h" /* For init_key() */
#include "lib/tty/mouse.h"
#include "lib/tty/win.h" /* xterm_flag */ #include "lib/tty/win.h" /* xterm_flag */
#include "lib/skin.h" #include "lib/skin.h"
#include "lib/util.h" #include "lib/util.h"
@ -821,7 +822,6 @@ done_screen (void)
tty_reset_shell_mode (); tty_reset_shell_mode ();
tty_noraw_mode (); tty_noraw_mode ();
tty_keypad (FALSE); tty_keypad (FALSE);
tty_colors_done ();
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -934,7 +934,6 @@ mc_maybe_editor_or_viewer (void)
default: default:
break; break;
} }
midnight_shutdown = 1;
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -1284,6 +1283,7 @@ midnight_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void
switch (msg) switch (msg)
{ {
case DLG_INIT: case DLG_INIT:
panel_init ();
setup_panels (); setup_panels ();
return MSG_HANDLED; return MSG_HANDLED;
@ -1464,6 +1464,10 @@ midnight_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void
} }
return MSG_HANDLED; return MSG_HANDLED;
case DLG_END:
panel_deinit ();
return MSG_HANDLED;
default: default:
return default_dlg_callback (h, sender, msg, parm, data); return default_dlg_callback (h, sender, msg, parm, data);
} }
@ -1574,13 +1578,16 @@ void
do_nc (void) do_nc (void)
{ {
dlg_colors_t midnight_colors; dlg_colors_t midnight_colors;
midnight_colors[DLG_COLOR_NORMAL] = mc_skin_color_get ("dialog", "_default_"); midnight_colors[DLG_COLOR_NORMAL] = mc_skin_color_get ("dialog", "_default_");
midnight_colors[DLG_COLOR_FOCUS] = mc_skin_color_get ("dialog", "focus"); midnight_colors[DLG_COLOR_FOCUS] = mc_skin_color_get ("dialog", "focus");
midnight_colors[DLG_COLOR_HOT_NORMAL] = mc_skin_color_get ("dialog", "hotnormal"); midnight_colors[DLG_COLOR_HOT_NORMAL] = mc_skin_color_get ("dialog", "hotnormal");
midnight_colors[DLG_COLOR_HOT_FOCUS] = mc_skin_color_get ("dialog", "hotfocus"); midnight_colors[DLG_COLOR_HOT_FOCUS] = mc_skin_color_get ("dialog", "hotfocus");
midnight_colors[DLG_COLOR_TITLE] = mc_skin_color_get ("dialog", "title"); midnight_colors[DLG_COLOR_TITLE] = mc_skin_color_get ("dialog", "title");
panel_init (); #ifdef USE_INTERNAL_EDIT
edit_stack_init ();
#endif
midnight_dlg = create_dlg (FALSE, 0, 0, LINES, COLS, midnight_colors, midnight_callback, midnight_dlg = create_dlg (FALSE, 0, 0, LINES, COLS, midnight_colors, midnight_callback,
"[main]", NULL, DLG_WANT_IDLE); "[main]", NULL, DLG_WANT_IDLE);
@ -1597,20 +1604,21 @@ do_nc (void)
{ {
create_panels_and_run_mc (); create_panels_and_run_mc ();
/* Program end */
midnight_shutdown = 1;
/* destroy_dlg destroys even current_panel->cwd, so we have to save a copy :) */ /* destroy_dlg destroys even current_panel->cwd, so we have to save a copy :) */
if (mc_args__last_wd_file != NULL && vfs_current_is_local ()) if (mc_args__last_wd_file != NULL && vfs_current_is_local ())
last_wd_string = g_strdup (current_panel->cwd); last_wd_string = g_strdup (current_panel->cwd);
} }
/* Program end */
midnight_shutdown = 1;
dialog_switch_shutdown (); dialog_switch_shutdown ();
done_mc (); done_mc ();
destroy_dlg (midnight_dlg); destroy_dlg (midnight_dlg);
panel_deinit (); current_panel = NULL;
current_panel = 0;
done_setup (); #ifdef USE_INTERNAL_EDIT
edit_stack_free ();
#endif
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */

View File

@ -990,6 +990,8 @@ done_setup (void)
{ {
size_t i; size_t i;
g_free (clipboard_store_path);
g_free (clipboard_paste_path);
g_free (profile_name); g_free (profile_name);
g_free (global_profile_name); g_free (global_profile_name);
g_free (color_terminal_string); g_free (color_terminal_string);
@ -1008,6 +1010,11 @@ done_setup (void)
done_hotlist (); done_hotlist ();
done_panelize (); done_panelize ();
/* directory_history_free (); */ /* directory_history_free (); */
#ifdef HAVE_CHARSET
g_free (autodetect_codeset);
free_codepages_list ();
#endif
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */