void ags_xorg_application_context_init(AgsXorgApplicationContext *xorg_application_context) { AgsWindow *window; AgsServer *server; AgsAudioLoop *audio_loop; GObject *soundcard; AgsConfig *config; struct passwd *pw; uid_t uid; gchar *wdir, *config_file; AGS_APPLICATION_CONTEXT(xorg_application_context)->log = (AgsLog *) g_object_new(AGS_TYPE_LOG, "file\0", stderr, NULL); /**/ config = ags_config_new(NULL); AGS_APPLICATION_CONTEXT(xorg_application_context)->config = config; g_object_set(config, "application-context\0", xorg_application_context, NULL); uid = getuid(); pw = getpwuid(uid); wdir = g_strdup_printf("%s/%s\0", pw->pw_dir, AGS_DEFAULT_DIRECTORY); config_file = g_strdup_printf("%s/%s\0", wdir, AGS_DEFAULT_CONFIG); ags_config_load_from_file(config, config_file); g_free(wdir); g_free(config_file); /* AgsSoundcard */ soundcard = ags_devout_new(xorg_application_context); xorg_application_context->soundcard = g_list_prepend(xorg_application_context->soundcard, soundcard); g_object_ref(G_OBJECT(soundcard)); /* AgsWindow */ window = ags_window_new(xorg_application_context); g_object_set(window, "soundcard\0", soundcard, NULL); AGS_XORG_APPLICATION_CONTEXT(xorg_application_context)->window = window; g_object_ref(G_OBJECT(window)); gtk_window_set_default_size((GtkWindow *) window, 500, 500); gtk_paned_set_position((GtkPaned *) window->paned, 300); ags_connectable_connect(AGS_CONNECTABLE(window)); gtk_widget_show_all((GtkWidget *) window); /* AgsServer */ xorg_application_context->server = ags_server_new(xorg_application_context); /* AgsMainLoop */ audio_loop = (AgsThread *) ags_audio_loop_new((GObject *) soundcard, xorg_application_context); g_object_set(xorg_application_context, "main-loop\0", audio_loop, NULL); g_object_ref(audio_loop); ags_connectable_connect(AGS_CONNECTABLE(audio_loop)); /* AgsTaskThread */ AGS_APPLICATION_CONTEXT(xorg_application_context)->task_thread = (AgsThread *) ags_task_thread_new(); ags_thread_add_child(AGS_THREAD(audio_loop), AGS_APPLICATION_CONTEXT(xorg_application_context)->task_thread); /* AgsSoundcardThread */ xorg_application_context->soundcard_thread = (AgsThread *) ags_soundcard_thread_new(soundcard); ags_thread_add_child(AGS_THREAD(audio_loop), xorg_application_context->soundcard_thread); /* AgsExportThread */ xorg_application_context->export_thread = (AgsThread *) ags_export_thread_new(soundcard, NULL); ags_thread_add_child(AGS_THREAD(audio_loop), xorg_application_context->export_thread); /* AgsGuiThread */ xorg_application_context->gui_thread = (AgsThread *) ags_gui_thread_new(); ags_thread_add_child(AGS_THREAD(audio_loop), xorg_application_context->gui_thread); /* AgsThreadPool */ AGS_XORG_APPLICATION_CONTEXT(xorg_application_context)->thread_pool = ags_thread_pool_new(AGS_APPLICATION_CONTEXT(xorg_application_context)->task_thread); }
void ags_test_init(int *argc, char ***argv, gchar *conf_str) { AgsConfig *config; gchar *filename; gboolean single_thread_enabled; gboolean builtin_theme_disabled; guint i; #ifdef AGS_WITH_RT struct sched_param param; struct rlimit rl; #endif struct passwd *pw; gchar *wdir, *config_file; gchar *rc_filename; gchar *base_dir; gchar *str, *data_dir; gchar path[PATH_MAX]; uint32_t size = sizeof(path); uid_t uid; int result; const rlim_t kStackSize = 64L * 1024L * 1024L; // min stack size = 64 Mb base_dir = strdup(SRCDIR); printf("base dir %s\n", base_dir); /* set some environment variables */ sprintf(path, "%s/gsequencer.share/styles", base_dir); data_dir = realpath(path, NULL); str = malloc(PATH_MAX * sizeof(gchar)); sprintf(str, "AGS_RC_FILENAME=%s/ags.rc", data_dir); putenv(str); sprintf(path, "%s/gsequencer.share/images", base_dir); data_dir = realpath(path, NULL); str = malloc(PATH_MAX * sizeof(gchar)); sprintf(str, "AGS_ANIMATION_FILENAME=%s/ags_supermoon-800x450.png", data_dir); putenv(str); sprintf(path, "%s/gsequencer.share/images", base_dir); data_dir = realpath(path, NULL); str = malloc(PATH_MAX * sizeof(gchar)); sprintf(str, "AGS_LOGO_FILENAME=%s/ags.png", data_dir); putenv(str); sprintf(path, "%s", base_dir); data_dir = realpath(path, NULL); str = malloc(PATH_MAX * sizeof(gchar)); sprintf(str, "AGS_LICENSE_FILENAME=%s/COPYING", data_dir); putenv(str); /* gettext */ setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); /* parameters */ single_thread_enabled = FALSE; builtin_theme_disabled = FALSE; // g_log_set_fatal_mask("GLib", // "Gtk" , // // G_LOG_LEVEL_CRITICAL); // G_LOG_LEVEL_WARNING #ifdef AGS_WITH_RT result = getrlimit(RLIMIT_STACK, &rl); /* set stack size 64M */ if(result == 0){ if(rl.rlim_cur < kStackSize){ rl.rlim_cur = kStackSize; result = setrlimit(RLIMIT_STACK, &rl); if(result != 0){ //TODO:JK } } } param.sched_priority = GSEQUENCER_RT_PRIORITY; if(sched_setscheduler(0, SCHED_FIFO, ¶m) == -1) { perror("sched_setscheduler failed"); } #endif //#ifdef AGS_WITH_X11 XInitThreads(); //#endif /* parse command line parameter */ filename = NULL; for(i = 0; i < argc[0]; i++){ if(!strncmp(argv[0][i], "--help", 7)){ printf("GSequencer is an audio sequencer and notation editor\n\n"); printf("Usage:\n\t%s\n\t%s\n\t%s\n\t%s\n\t%s\n\t%s\n\n", "Report bugs to <*****@*****.**>\n", "--filename file open file", "--single-thread run in single thread mode", "--no-builtin-theme disable built-in theme", "--help display this help and exit", "--version output version information and exit"); exit(0); }else if(!strncmp(argv[0][i], "--version", 10)){ printf("GSequencer %s\n\n", AGS_VERSION); printf("%s\n%s\n%s\n\n", "Copyright (C) 2005-2017 Joël Krähemann", "This is free software; see the source for copying conditions. There is NO", "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."); printf("Written by Joël Krähemann\n"); exit(0); }else if(!strncmp(argv[0][i], "--single-thread", 16)){ single_thread_enabled = TRUE; }else if(!strncmp(argv[0][i], "--no-builtin-theme", 19)){ builtin_theme_disabled = TRUE; }else if(!strncmp(argv[0][i], "--filename", 11)){ filename = *argv[i + 1]; i++; } } uid = getuid(); pw = getpwuid(uid); /* parse rc file */ if(!builtin_theme_disabled){ rc_filename = g_strdup_printf("%s/%s/ags.rc", pw->pw_dir, AGS_DEFAULT_DIRECTORY); if(!g_file_test(rc_filename, G_FILE_TEST_IS_REGULAR)){ g_free(rc_filename); #ifdef AGS_RC_FILENAME rc_filename = g_strdup(AGS_RC_FILENAME); #else if((rc_filename = getenv("AGS_RC_FILENAME")) == NULL){ rc_filename = g_strdup_printf("%s%s", DESTDIR, "/gsequencer/styles/ags.rc"); }else{ rc_filename = g_strdup(rc_filename); } #endif } gtk_rc_parse(rc_filename); g_free(rc_filename); } /**/ LIBXML_TEST_VERSION; ags_gui_init(argc, argv); gtk_init(argc, argv); if(!builtin_theme_disabled){ g_object_set(gtk_settings_get_default(), "gtk-theme-name", "Raleigh", NULL); g_signal_handlers_block_matched(gtk_settings_get_default(), G_SIGNAL_MATCH_DETAIL, g_signal_lookup("set-property", GTK_TYPE_SETTINGS), g_quark_from_string("gtk-theme-name"), NULL, NULL, NULL); } #ifdef AGS_WITH_LIBINSTPATCH ipatch_init(); #endif /* setup */ wdir = g_strdup_printf("%s/%s", pw->pw_dir, AGS_DEFAULT_DIRECTORY); config_file = g_strdup_printf("%s/%s", wdir, AGS_DEFAULT_CONFIG); config = ags_config_get_instance(); if(conf_str != NULL){ ags_config_load_from_data(config, conf_str, strlen(conf_str)); }else{ ags_config_load_from_file(config, config_file); } g_free(wdir); g_free(config_file); }