int main(int argc, char *argv[]) { #ifdef ENABLE_NLS bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); #endif gtk_init(&argc, &argv); /* Create configuration dir ~/.chimara */ gchar *configdir = g_build_filename(g_get_home_dir(), ".chimara", NULL); if(!g_file_test(configdir, G_FILE_TEST_IS_DIR) && g_mkdir(configdir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) g_error("Cannot create configuration directory ~/.chimara"); g_free(configdir); /* Initialize settings file; it can be overridden by a "chimara-config" file in the current directory */ gchar *keyfile; if(g_file_test("chimara-config", G_FILE_TEST_IS_REGULAR)) keyfile = g_strdup("chimara-config"); else keyfile = g_build_filename(g_get_home_dir(), ".chimara", "config", NULL); GSettingsBackend *backend = g_keyfile_settings_backend_new(keyfile, "/org/chimara-if/player/", NULL); prefs_settings = g_settings_new_with_backend("org.chimara-if.player.preferences", backend); state_settings = g_settings_new_with_backend("org.chimara-if.player.state", backend); g_free(keyfile); app = gtk_application_new("org.chimara-if.player", G_APPLICATION_HANDLES_OPEN); g_signal_connect(app, "activate", G_CALLBACK(on_activate), NULL); g_signal_connect(app, "open", G_CALLBACK(on_open), NULL); if( !create_window() ) { error_dialog(NULL, NULL, "Error while building interface."); return 1; } int status = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); chimara_glk_stop(CHIMARA_GLK(glk)); chimara_glk_wait(CHIMARA_GLK(glk)); g_object_unref( G_OBJECT(builder) ); return status; }
TrackerConfig * tracker_config_new (void) { TrackerConfig *config = NULL; /* FIXME: should we unset GSETTINGS_BACKEND env var? */ if (G_UNLIKELY (g_getenv ("TRACKER_USE_CONFIG_FILES"))) { GSettingsBackend *backend; gchar *filename, *basename; gboolean need_to_save; basename = g_strdup_printf ("%s.cfg", g_get_prgname ()); filename = g_build_filename (g_get_user_config_dir (), "tracker", basename, NULL); g_free (basename); need_to_save = g_file_test (filename, G_FILE_TEST_EXISTS) == FALSE; backend = g_keyfile_settings_backend_new (filename, CONFIG_PATH, "General"); g_info ("Using config file '%s'", filename); g_free (filename); config = g_object_new (TRACKER_TYPE_CONFIG, "backend", backend, "schema-id", CONFIG_SCHEMA, "path", CONFIG_PATH, NULL); g_object_unref (backend); if (need_to_save) { g_info (" Config file does not exist, using default values..."); } } else { config = g_object_new (TRACKER_TYPE_CONFIG, "schema-id", CONFIG_SCHEMA, "path", CONFIG_PATH, NULL); } return config; }
int main(int argc, char *argv[]) { GError *error = NULL; #ifdef ENABLE_NLS bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); #endif gdk_threads_init(); gtk_init(&argc, &argv); /* Create configuration dir ~/.chimara */ gchar *configdir = g_build_filename(g_get_home_dir(), ".chimara", NULL); if(!g_file_test(configdir, G_FILE_TEST_IS_DIR) && g_mkdir(configdir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) != 0) g_error(_("Cannot create configuration directory ~/.chimara")); g_free(configdir); /* Initialize settings file; it can be overridden by a "chimara-config" file in the current directory */ gchar *keyfile; if(g_file_test("chimara-config", G_FILE_TEST_IS_REGULAR)) keyfile = g_strdup("chimara-config"); else keyfile = g_build_filename(g_get_home_dir(), ".chimara", "config", NULL); GSettingsBackend *backend = g_keyfile_settings_backend_new(keyfile, "/org/chimara-if/player/", NULL); prefs_settings = g_settings_new_with_backend("org.chimara-if.player.preferences", backend); state_settings = g_settings_new_with_backend("org.chimara-if.player.state", backend); g_free(keyfile); if( !create_window() ) { error_dialog(NULL, NULL, "Error while building interface."); return 1; } gtk_widget_show_all(window); g_object_unref( G_OBJECT(uimanager) ); if(argc == 3) { g_object_set(glk, "graphics-file", argv[2], NULL); } if(argc >= 2) { if( !chimara_if_run_game(CHIMARA_IF(glk), argv[1], &error) ) { error_dialog(GTK_WINDOW(window), error, "Error starting Glk library: "); return 1; } } gdk_threads_enter(); gtk_main(); gdk_threads_leave(); chimara_glk_stop(CHIMARA_GLK(glk)); chimara_glk_wait(CHIMARA_GLK(glk)); g_object_unref( G_OBJECT(builder) ); return 0; }
static void app_startup_handler(GApplication *app, gpointer data) { gmpv_handle *ctx = data; const gchar *vid_area_style = ".gmpv-vid-area{background-color: black}"; GSettingsBackend *config_backend; GtkCssProvider *style_provider; gboolean css_loaded; gboolean use_opengl; gboolean config_migrated; gboolean mpvinput_enable; gboolean csd_enable; gboolean dark_theme_enable; gchar *config_file; gchar *mpvinput; setlocale(LC_NUMERIC, "C"); g_set_application_name(_("GNOME MPV")); gtk_window_set_default_icon_name(ICON_NAME); bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); config_file = get_config_file_path(); config_backend = g_keyfile_settings_backend_new ( config_file, CONFIG_ROOT_PATH, CONFIG_ROOT_GROUP ); use_opengl = get_use_opengl(); ctx->mpv_ctx = mpv_create(); ctx->files = NULL; ctx->opengl_ctx = NULL; ctx->opengl_ready = FALSE; ctx->paused = TRUE; ctx->loaded = FALSE; ctx->new_file = TRUE; ctx->sub_visible = TRUE; ctx->init_load = TRUE; ctx->playlist_move_dest = -1; ctx->log_level_list = NULL; ctx->keybind_list = NULL; ctx->config = g_settings_new_with_backend(APP_ID, config_backend); ctx->app = GTK_APPLICATION(app); ctx->gui = MAIN_WINDOW(main_window_new(ctx->app, use_opengl)); ctx->fs_control = NULL; ctx->playlist_store = PLAYLIST_WIDGET(ctx->gui->playlist)->list_store; config_migrated = migrate_config(ctx); style_provider = gtk_css_provider_new(); css_loaded = gtk_css_provider_load_from_data (style_provider, vid_area_style, -1, NULL); if(!css_loaded) { g_warning ("Failed to apply background color css"); } gtk_style_context_add_provider_for_screen ( gtk_window_get_screen(GTK_WINDOW(ctx->gui)), GTK_STYLE_PROVIDER(style_provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION ); g_object_unref(style_provider); csd_enable = g_settings_get_boolean (ctx->config, "csd-enable"); dark_theme_enable = g_settings_get_boolean (ctx->config, "dark-theme-enable"); mpvinput_enable = g_settings_get_boolean (ctx->config, "mpv-input-config-enable"); mpvinput = g_settings_get_string (ctx->config, "mpv-input-config-file"); if(csd_enable) { gtk_application_set_app_menu (ctx->app, G_MENU_MODEL(build_app_menu())); main_window_enable_csd(ctx->gui); } else { gtk_application_set_app_menu (ctx->app, NULL); gtk_application_set_menubar (ctx->app, G_MENU_MODEL(build_full_menu())); } gtk_widget_show_all(GTK_WIDGET(ctx->gui)); if(csd_enable) { control_box_set_fullscreen_btn_visible (CONTROL_BOX(ctx->gui->control_box), FALSE); } control_box_set_chapter_enabled (CONTROL_BOX(ctx->gui->control_box), FALSE); if(!main_window_get_use_opengl(ctx->gui)) { ctx->vid_area_wid = get_xid(ctx->gui->vid_area); } g_assert( main_window_get_use_opengl(ctx->gui) || ctx->vid_area_wid != -1 ); main_window_load_state(ctx->gui); setup_accelerators(ctx); setup_dnd_targets(ctx); actionctl_map_actions(ctx); connect_signals(ctx); load_keybind(ctx, mpvinput_enable?mpvinput:NULL, FALSE); mpris_init(ctx); media_keys_init(ctx); g_object_set( ctx->gui->settings, "gtk-application-prefer-dark-theme", dark_theme_enable, NULL ); g_timeout_add( SEEK_BAR_UPDATE_INTERVAL, (GSourceFunc)update_seek_bar, ctx ); if(config_migrated) { GtkWidget *dialog = gtk_message_dialog_new ( GTK_WINDOW(ctx->gui), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, _("Your configuration file has been " "moved to the new location at %s."), config_file ); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } g_free(config_file); g_free(mpvinput); }
/* This only supports migrating from v0.5's config file */ gboolean migrate_config(gmpv_handle *ctx) { gchar *config_file = get_config_file_path(); gboolean result = FALSE; if(g_file_test(config_file, G_FILE_TEST_EXISTS)) { const gchar *key_list[] = { "csd-enable", "dark-theme-enable", "mpv-input-config-enable", "mpv-config-enable", "mpv-input-config-file", "mpv-config-file", "mpv-options", NULL }; GSettingsBackend *backend; GSettings *keyfile_settings; GSettings *default_settings; const gchar **iter; backend = g_keyfile_settings_backend_new ( config_file, "/org/gnome-mpv/gnome-mpv/", "main" ); keyfile_settings = g_settings_new_with_backend( CONFIG_ROOT, backend ); default_settings = g_settings_new(CONFIG_ROOT); iter = key_list; while(*iter) { GVariant *value; value = g_settings_get_value(keyfile_settings, *iter); g_settings_set_value(default_settings, *iter, value); iter++; g_variant_unref(value); } g_object_unref(backend); g_object_unref(keyfile_settings); g_object_unref(default_settings); /* Rename the old config file */ gchar *backup_config_file = g_strconcat( config_file, ".bak", NULL ); GFile *src = g_file_new_for_path(config_file); GFile *dest = g_file_new_for_path(backup_config_file); result = g_file_move( src, dest, G_FILE_COPY_NONE, NULL, NULL, NULL, NULL ); g_free(backup_config_file); g_object_unref(src); g_object_unref(dest); } g_free(config_file); return result; }