From 235869fe9b6cdd0451486b138dd6c17a492c1d7a Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 12 Apr 2009 23:21:04 +0000 Subject: [PATCH] Implemented preferences entry for the homepage --- src/callbacks.c | 9 ++--- src/surfer.c | 93 ++++++++++++++++++++++++++++++++++++++++++++----- src/surfer.h | 6 ++++ 3 files changed, 96 insertions(+), 12 deletions(-) diff --git a/src/callbacks.c b/src/callbacks.c index 77b3135..693940a 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -157,7 +157,7 @@ void on_edit_preferences(GtkWidget * widget, gpointer data) static void _preferences_set(Surfer * surfer) { - /* FIXME implement */ + gtk_entry_set_text(GTK_ENTRY(surfer->pr_homepage), surfer->homepage); } static gboolean _preferences_on_closex(GtkWidget * widget, GdkEvent * event, @@ -182,7 +182,9 @@ static void _preferences_on_ok(GtkWidget * widget, gpointer data) Surfer * surfer = data; gtk_widget_hide(surfer->pr_window); - /* FIXME implement */ + free(surfer->homepage); + surfer->homepage = strdup(gtk_entry_get_text(GTK_ENTRY( + surfer->pr_homepage))); surfer_config_save(surfer); } @@ -518,8 +520,7 @@ void on_home(GtkWidget * widget, gpointer data) { Surfer * surfer = data; - /* FIXME query this from the preferences */ - surfer_open(surfer, SURFER_DEFAULT_HOME); + surfer_go_home(surfer); } diff --git a/src/surfer.c b/src/surfer.c index 98b4d8c..6df164e 100644 --- a/src/surfer.c +++ b/src/surfer.c @@ -26,6 +26,7 @@ /* Surfer */ +/* private */ /* types */ #ifndef FOR_EMBEDDED struct _menu @@ -115,6 +116,15 @@ static struct _menubar _menubar[] = unsigned int surfer_cnt = 0; +/* prototypes */ +static char * _config_get_filename(void); +static int _config_load_string(Config * config, char const * variable, + char ** value); +static int _config_save_string(Config * config, char const * variable, + char const * value); + + +/* public */ /* functions */ /* surfer_new */ #ifndef FOR_EMBEDDED @@ -132,14 +142,13 @@ Surfer * surfer_new(char const * url) if((surfer = malloc(sizeof(*surfer))) == NULL) return NULL; - surfer->config = config_new(); surfer->url = NULL; - if(surfer->config == NULL + surfer->homepage = NULL; + if((surfer->config = config_new()) == NULL + || surfer_config_load(surfer) != 0 || (url != NULL && (surfer->url = strdup(url)) == NULL)) { - if(surfer->config != NULL) - config_delete(surfer->config); - free(surfer); + surfer_delete(surfer); return NULL; } /* widgets */ @@ -339,6 +348,7 @@ void surfer_delete(Surfer * surfer) { config_delete(surfer->config); free(surfer->url); + free(surfer->homepage); free(surfer); surfer_cnt--; } @@ -434,7 +444,13 @@ void surfer_set_title(Surfer * surfer, char const * title) /* surfer_config_load */ int surfer_config_load(Surfer * surfer) { - /* FIXME implement */ + char * filename; + + if((filename = _config_get_filename()) == NULL) + return 1; + config_load(surfer->config, filename); /* XXX ignore errors */ + free(filename); + _config_load_string(surfer->config, "homepage", &surfer->homepage); return 0; } @@ -442,8 +458,17 @@ int surfer_config_load(Surfer * surfer) /* surfer_config_save */ int surfer_config_save(Surfer * surfer) { - /* FIXME implement */ - return 0; + int ret = 0; + char * filename; + + if((filename = _config_get_filename()) == NULL) + return 1; + ret |= _config_save_string(surfer->config, "homepage", + surfer->homepage); + if(ret == 0) + ret |= config_save(surfer->config, filename); + free(filename); + return ret; } @@ -506,6 +531,17 @@ gboolean surfer_go_forward(Surfer * surfer) } +/* surfer_go_home */ +void surfer_go_home(Surfer * surfer) +{ + char const * homepage; + + if((homepage = config_get(surfer->config, "", "homepage")) == NULL) + homepage = SURFER_DEFAULT_HOME; + surfer_open(surfer, homepage); +} + + /* surfer_open */ void surfer_open(Surfer * surfer, char const * url) { @@ -611,3 +647,44 @@ void surfer_zoom_reset(Surfer * surfer) { ghtml_zoom_reset(surfer->view); } + + +/* private */ +/* functions */ +static char * _config_get_filename(void) +{ + char const * homedir; + size_t len; + char * filename; + + if((homedir = getenv("HOME")) == NULL) + homedir = g_get_home_dir(); + len = strlen(homedir) + 1 + sizeof(SURFER_CONFIG_FILE); + if((filename = malloc(len)) == NULL) + return NULL; + snprintf(filename, len, "%s/%s", homedir, SURFER_CONFIG_FILE); + return filename; +} + + +static int _config_load_string(Config * config, char const * variable, + char ** value) +{ + char const * str; + char * p; + + if((str = config_get(config, "", variable)) == NULL) + return 0; + if((p = strdup(str)) == NULL) + return 1; + free(*value); + *value = p; + return 0; +} + + +static int _config_save_string(Config * config, char const * variable, + char const * value) +{ + return config_set(config, "", variable, value); +} diff --git a/src/surfer.h b/src/surfer.h index 4835eff..2496f19 100644 --- a/src/surfer.h +++ b/src/surfer.h @@ -24,6 +24,8 @@ /* Surfer */ /* constants */ +# define SURFER_CONFIG_FILE ".surferrc" + # define SURFER_DEFAULT_MINIMUM_FONT_SIZE 8.0 # define SURFER_DEFAULT_FONT_SIZE 12.0 # define SURFER_DEFAULT_FIXED_FONT_SIZE 12.0 @@ -45,6 +47,9 @@ typedef struct _Surfer Config * config; char * url; + /* preferences */ + char * homepage; + /* widgets */ /* main window */ GtkWidget * window; @@ -100,6 +105,7 @@ void surfer_open_dialog(Surfer * surfer); gboolean surfer_go_back(Surfer * surfer); gboolean surfer_go_forward(Surfer * surfer); +void surfer_go_home(Surfer * surfer); void surfer_refresh(Surfer * surfer); void surfer_reload(Surfer * surfer);