@@ -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+
238292static 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