[GTK3] Move config handling into settings.c
This commit is contained in:
parent
d6a1555290
commit
f3f1bf293a
37
gtk3/main.c
37
gtk3/main.c
@ -5,17 +5,18 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <Core/gb.h>
|
#include <Core/gb.h>
|
||||||
|
|
||||||
|
#include "settings.h"
|
||||||
#include "shader.h"
|
#include "shader.h"
|
||||||
|
|
||||||
#define str(x) #x
|
#define str(x) #x
|
||||||
#define xstr(x) str(x)
|
#define xstr(x) str(x)
|
||||||
|
|
||||||
#define SETTINGS_FILE "sameboy-gtk3-settings.ini"
|
|
||||||
|
|
||||||
typedef struct UserData {
|
typedef struct UserData {
|
||||||
bool fullscreen;
|
bool fullscreen;
|
||||||
GFile *file;
|
GFile *file;
|
||||||
const gchar *bootrom_path;
|
const gchar *bootrom_path;
|
||||||
|
const gchar *config_path;
|
||||||
GB_model_t model;
|
GB_model_t model;
|
||||||
} UserData;
|
} UserData;
|
||||||
|
|
||||||
@ -26,13 +27,11 @@ typedef struct{
|
|||||||
|
|
||||||
static void run(UserData *user_data);
|
static void run(UserData *user_data);
|
||||||
|
|
||||||
static GKeyFile *key_file;
|
|
||||||
static GtkApplication *main_application;
|
static GtkApplication *main_application;
|
||||||
static GtkBuilder *builder;
|
static GtkBuilder *builder;
|
||||||
static GtkApplicationWindow *main_window;
|
static GtkApplicationWindow *main_window;
|
||||||
static GtkGLArea *gl_area;
|
static GtkGLArea *gl_area;
|
||||||
static shader_t shader;
|
static shader_t shader;
|
||||||
static gchar* settings_file_path;
|
|
||||||
|
|
||||||
static GB_gameboy_t gb;
|
static GB_gameboy_t gb;
|
||||||
static uint32_t *image_buffers[3];
|
static uint32_t *image_buffers[3];
|
||||||
@ -46,17 +45,6 @@ static Rect rect;
|
|||||||
|
|
||||||
static bool running = true;
|
static bool running = true;
|
||||||
|
|
||||||
static void save_settings(void) {
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
// Save as a file.
|
|
||||||
if (!g_key_file_save_to_file(key_file, settings_file_path, &error)) {
|
|
||||||
g_warning ("Error saving %s: %s", settings_file_path, error->message);
|
|
||||||
g_error_free(error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned char number_of_buffers(void) {
|
static unsigned char number_of_buffers(void) {
|
||||||
bool should_blend = true;
|
bool should_blend = true;
|
||||||
|
|
||||||
@ -269,7 +257,9 @@ G_MODULE_EXPORT void gl_finish() { }
|
|||||||
|
|
||||||
// This functions gets called immediately after registration of the GApplication
|
// This functions gets called immediately after registration of the GApplication
|
||||||
static void startup(GApplication *app, gpointer user_data_gptr) {
|
static void startup(GApplication *app, gpointer user_data_gptr) {
|
||||||
// UserData *user_data = user_data_gptr;
|
UserData *user_data = user_data_gptr;
|
||||||
|
|
||||||
|
init_settings(user_data->config_path);
|
||||||
|
|
||||||
builder = gtk_builder_new_from_resource(RESOURCE_PREFIX "ui/window.ui");
|
builder = gtk_builder_new_from_resource(RESOURCE_PREFIX "ui/window.ui");
|
||||||
gtk_builder_connect_signals(builder, NULL);
|
gtk_builder_connect_signals(builder, NULL);
|
||||||
@ -295,20 +285,6 @@ static void startup(GApplication *app, gpointer user_data_gptr) {
|
|||||||
g_signal_connect(gl_area, "unrealize", G_CALLBACK(gl_finish), NULL);
|
g_signal_connect(gl_area, "unrealize", G_CALLBACK(gl_finish), NULL);
|
||||||
gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(gl_area));
|
gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(gl_area));
|
||||||
|
|
||||||
GError *error = NULL;
|
|
||||||
settings_file_path = g_build_filename(g_get_user_config_dir(), SETTINGS_FILE, NULL);
|
|
||||||
key_file = g_key_file_new();
|
|
||||||
|
|
||||||
g_print("Trying to load settings from %s\n", settings_file_path);
|
|
||||||
|
|
||||||
if (!g_key_file_load_from_file(key_file, settings_file_path, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &error)) {
|
|
||||||
if (!g_error_matches(error, G_FILE_ERROR, G_FILE_ERROR_NOENT)) {
|
|
||||||
g_warning("Error loading %s: %s", settings_file_path, error->message);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_error_free(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle the whole menubar situation …
|
// Handle the whole menubar situation …
|
||||||
if (show_menubar()) {
|
if (show_menubar()) {
|
||||||
// Show a classic menubar
|
// Show a classic menubar
|
||||||
@ -634,6 +610,7 @@ int main(int argc, char *argv[]) {
|
|||||||
{ "fullscreen", 'f', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, NULL, "Start in fullscreen mode", NULL },
|
{ "fullscreen", 'f', G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, NULL, "Start in fullscreen mode", NULL },
|
||||||
{ "bootrom", 'b', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, &user_data.bootrom_path, "Path to the boot ROM to use", "<file path>" },
|
{ "bootrom", 'b', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, &user_data.bootrom_path, "Path to the boot ROM to use", "<file path>" },
|
||||||
{ "model", 'm', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, NULL, "Override the model type to emulate", "<model type>" },
|
{ "model", 'm', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, NULL, "Override the model type to emulate", "<model type>" },
|
||||||
|
{ "config", 'c', G_OPTION_FLAG_NONE, G_OPTION_ARG_STRING, &user_data.config_path, "Override the path of the configuration file", "<file path>" },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
// Setup our command line information
|
// Setup our command line information
|
||||||
|
39
gtk3/settings.c
Normal file
39
gtk3/settings.c
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include "settings.h"
|
||||||
|
|
||||||
|
void init_settings(const gchar *path) {
|
||||||
|
key_file = g_key_file_new();
|
||||||
|
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
if (path != NULL) {
|
||||||
|
settings_file_path = path;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
settings_file_path = g_build_filename(g_get_user_config_dir(), SETTINGS_FILE, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
load_settings();
|
||||||
|
}
|
||||||
|
|
||||||
|
void load_settings(void) {
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
g_print("Trying to load settings from %s\n", settings_file_path);
|
||||||
|
|
||||||
|
if (!g_key_file_load_from_file(key_file, settings_file_path, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, &error)) {
|
||||||
|
g_warning("Error loading %s: %s", settings_file_path, error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void save_settings(void) {
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
g_print("Trying to save settings to %s\n", settings_file_path);
|
||||||
|
|
||||||
|
if (!g_key_file_save_to_file(key_file, settings_file_path, &error)) {
|
||||||
|
g_warning ("Error saving %s: %s", settings_file_path, error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
16
gtk3/settings.h
Normal file
16
gtk3/settings.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#ifndef settings_h
|
||||||
|
#define settings_h
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <gio/gio.h>
|
||||||
|
|
||||||
|
#define SETTINGS_FILE "sameboy-gtk3-settings.ini"
|
||||||
|
|
||||||
|
GKeyFile *key_file;
|
||||||
|
const gchar* settings_file_path;
|
||||||
|
|
||||||
|
void init_settings(const gchar *path);
|
||||||
|
void load_settings(void);
|
||||||
|
void save_settings(void);
|
||||||
|
|
||||||
|
#endif /* settings_h */
|
Loading…
Reference in New Issue
Block a user