Implemented preferences entry for the homepage

This commit is contained in:
Pierre Pronchery 2009-04-12 23:21:04 +00:00
parent 8feb8ea58f
commit 235869fe9b
3 changed files with 96 additions and 12 deletions

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);