Skip to content

Commit feb8397

Browse files
committed
Fallback to default of required components, if wrong set by user
Empty values are still possible, to disable a component. Required components are currently: windowmanager , filemanager , panel and dock. Code refactor: move code to new function append_required_apps_add_component(). Fixes: #324
1 parent a5a8b10 commit feb8397

1 file changed

Lines changed: 56 additions & 30 deletions

File tree

mate-session/main.c

Lines changed: 56 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -227,14 +227,68 @@ static void append_default_apps(GsmManager* manager, const char* default_session
227227

228228
if (app_path != NULL)
229229
{
230-
gsm_manager_add_autostart_app(manager, app_path, NULL);
230+
gsm_manager_add_autostart_app (manager, app_path, NULL);
231231
g_free(app_path);
232232
}
233233
}
234234

235235
g_strfreev (default_apps);
236236
}
237237

238+
static void append_required_apps_add_component (GsmManager* manager, GSettings* settings_required_components, const char* component, gboolean is_recursive_call)
239+
{
240+
char* default_provider;
241+
242+
default_provider = g_settings_get_string (settings_required_components, component);
243+
244+
g_debug ("main: %s looking for component: '%s'", component, default_provider);
245+
246+
if (default_provider != NULL)
247+
{
248+
char* app_path;
249+
250+
app_path = gsm_util_find_desktop_file_for_app_name (default_provider, NULL);
251+
252+
if (app_path != NULL)
253+
{
254+
gsm_manager_add_autostart_app (manager, app_path, component);
255+
}
256+
else
257+
{
258+
g_warning ("Unable to find provider '%s' of required component '%s'", default_provider, component);
259+
260+
if (default_provider[0] != '\0' && !is_recursive_call)
261+
{
262+
// possible reset component to default
263+
264+
const char *default_default_provider;
265+
GVariant *schema_default;
266+
schema_default = g_settings_get_default_value (settings_required_components, component);
267+
268+
if (schema_default != NULL)
269+
{
270+
default_default_provider = g_variant_get_string (schema_default, NULL);
271+
272+
if (default_default_provider[0] != '\0' && strcmp (default_default_provider, default_provider) != 0)
273+
{
274+
g_warning ("Reset required component '%s' to default", component);
275+
g_settings_reset (settings_required_components, component);
276+
277+
append_required_apps_add_component (manager, settings_required_components, component, TRUE);
278+
}
279+
280+
g_variant_unref (schema_default);
281+
}
282+
}
283+
284+
}
285+
286+
g_free (app_path);
287+
}
288+
289+
g_free (default_provider);
290+
}
291+
238292
static void append_required_apps(GsmManager* manager)
239293
{
240294
gchar** required_components;
@@ -257,39 +311,11 @@ static void append_required_apps(GsmManager* manager)
257311
{
258312
for (i = 0; required_components[i]; i++)
259313
{
260-
char* default_provider;
261-
const char* component;
262-
263314
if (IS_STRING_EMPTY((char*) required_components[i]))
264315
{
265316
continue;
266317
}
267-
268-
component = required_components[i];
269-
270-
default_provider = g_settings_get_string (settings_required_components, component);
271-
272-
g_debug ("main: %s looking for component: '%s'", component, default_provider);
273-
274-
if (default_provider != NULL)
275-
{
276-
char* app_path;
277-
278-
app_path = gsm_util_find_desktop_file_for_app_name(default_provider, NULL);
279-
280-
if (app_path != NULL)
281-
{
282-
gsm_manager_add_autostart_app(manager, app_path, component);
283-
}
284-
else
285-
{
286-
g_warning("Unable to find provider '%s' of required component '%s'", default_provider, component);
287-
}
288-
289-
g_free(app_path);
290-
}
291-
292-
g_free(default_provider);
318+
append_required_apps_add_component(manager, settings_required_components, required_components[i], FALSE);
293319
}
294320
}
295321

0 commit comments

Comments
 (0)