5 Copyright (C) 2009 The Free Software Foundation, Inc.
8 Slava Zanko <slavazanko@gmail.com>, 2009.
10 This file is part of the Midnight Commander.
12 The Midnight Commander is free software; you can redistribute it
13 and/or modify it under the terms of the GNU General Public License as
14 published by the Free Software Foundation; either version 2 of the
15 License, or (at your option) any later version.
17 The Midnight Commander is distributed in the hope that it will be
18 useful, but WITHOUT ANY WARRANTY; without even the implied warranty
19 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
31 #include "../src/global.h"
32 #include "../src/args.h"
36 /*** global variables ****************************************************************************/
38 mc_skin_t mc_skin__default
;
40 /*** file scope macro definitions ****************************************************************/
42 /*** file scope type declarations ****************************************************************/
44 /*** file scope variables ************************************************************************/
46 static gboolean mc_skin_is_init
= FALSE
;
48 /* --------------------------------------------------------------------------------------------- */
49 /*** file scope functions ************************************************************************/
50 /* --------------------------------------------------------------------------------------------- */
53 mc_skin_hash_destroy_key (gpointer data
)
58 /* --------------------------------------------------------------------------------------------- */
61 mc_skin_hash_destroy_value (gpointer data
)
63 mc_skin_color_t
*mc_skin_color
= (mc_skin_color_t
*) data
;
64 g_free (mc_skin_color
->fgcolor
);
65 g_free (mc_skin_color
->bgcolor
);
66 g_free (mc_skin_color
);
69 /* --------------------------------------------------------------------------------------------- */
72 mc_skin_get_default_name (void)
76 /* from command line */
77 if (mc_args__skin
!= NULL
)
78 return g_strdup (mc_args__skin
);
80 /* from envirovement variable */
81 tmp_str
= getenv ("MC_SKIN");
83 return g_strdup (tmp_str
);
85 /* from config. Or 'default' if no present in config */
86 return mc_config_get_string (mc_main_config
, CONFIG_APP_SECTION
, "skin", "default");
89 /* --------------------------------------------------------------------------------------------- */
95 mc_skin__default
.name
= mc_skin_get_default_name ();
96 mc_skin__default
.colors
= g_hash_table_new_full (g_str_hash
, g_str_equal
,
97 mc_skin_hash_destroy_key
,
98 mc_skin_hash_destroy_value
);
101 /* --------------------------------------------------------------------------------------------- */
104 mc_skin_try_to_load_default (void)
107 g_free (mc_skin__default
.name
);
108 mc_skin__default
.name
= g_strdup ("default");
109 if (!mc_skin_ini_file_load (&mc_skin__default
)) {
111 mc_skin_set_hardcoded_skin (&mc_skin__default
);
116 /* --------------------------------------------------------------------------------------------- */
117 /*** public functions ****************************************************************************/
118 /* --------------------------------------------------------------------------------------------- */
121 mc_skin_init (GError
** error
)
124 mc_skin__default
.name
= mc_skin_get_default_name ();
126 mc_skin__default
.colors
= g_hash_table_new_full (g_str_hash
, g_str_equal
,
127 mc_skin_hash_destroy_key
,
128 mc_skin_hash_destroy_value
);
130 gboolean is_good_init
= TRUE
;
132 if (!mc_skin_ini_file_load (&mc_skin__default
)) {
133 *error
= g_error_new (MC_ERROR
, 0,
134 _("Unable to load '%s' skin.\nDefault skin has been loaded"),
135 mc_skin__default
.name
);
137 mc_skin_try_to_load_default ();
138 is_good_init
= FALSE
;
140 mc_skin_colors_old_configure (&mc_skin__default
);
142 if (!mc_skin_ini_file_parse (&mc_skin__default
)) {
144 *error
= g_error_new (MC_ERROR
, 0,
145 _("Unable to parse '%s' skin.\nDefault skin has been loaded"),
146 mc_skin__default
.name
);
148 mc_skin_try_to_load_default ();
149 mc_skin_colors_old_configure (&mc_skin__default
);
150 (void) mc_skin_ini_file_parse (&mc_skin__default
);
151 is_good_init
= FALSE
;
153 mc_skin_is_init
= TRUE
;
157 /* --------------------------------------------------------------------------------------------- */
160 mc_skin_deinit (void)
163 g_free (mc_skin__default
.name
);
164 mc_skin__default
.name
= NULL
;
165 g_hash_table_destroy (mc_skin__default
.colors
);
166 mc_skin__default
.colors
= NULL
;
168 g_free (mc_skin__default
.description
);
169 mc_skin__default
.description
= NULL
;
171 if (mc_skin__default
.config
) {
172 mc_config_deinit (mc_skin__default
.config
);
173 mc_skin__default
.config
= NULL
;
176 mc_skin_is_init
= FALSE
;
179 /* --------------------------------------------------------------------------------------------- */