midori/src/conf.c
Ori Bernstein e3561c71ad Don't remember the window position but the size only.
It is often useful to have multiple browser windows opening at once,
and having them open on top of each other is counterproductive.
Most window managers, on the other hand, have code to decide where
to place a window so that it is accessible by the user.
2007-12-27 01:03:04 +01:00

169 lines
7.7 KiB
C

/*
Copyright (C) 2007 Christian Dywan <christian@twotoasts.de>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
See the file COPYING for the full license text.
*/
#include "conf.h"
#include "sokoke.h"
#include <glib.h>
#include <stdio.h>
#include <string.h>
CConfig* config_new(void)
{
return g_new0(CConfig, 1);
}
void config_free(CConfig* config)
{
g_free(config->homepage);
g_free(config->locationSearch);
g_free(config->panelPageholder);
g_datalist_clear(&config->protocols_commands);
g_ptr_array_free(config->protocols_names, TRUE);
g_free(config);
}
gboolean config_from_file(CConfig* config, const gchar* filename, GError** error)
{
GKeyFile* keyFile = g_key_file_new();
g_key_file_load_from_file(keyFile, filename, G_KEY_FILE_KEEP_COMMENTS, error);
/*g_key_file_load_from_data_dirs(keyFile, sFilename, NULL
, G_KEY_FILE_KEEP_COMMENTS, error);*/
#define GET_INT(var, key, default) \
var = sokoke_key_file_get_integer_default( \
keyFile, "browser", key, default, NULL)
#define GET_STR(var, key, default) \
var = sokoke_key_file_get_string_default( \
keyFile, "browser", key, default, NULL)
GET_INT(config->startup, "Startup", CONFIG_STARTUP_HOMEPAGE);
GET_STR(config->homepage, "Homepage", "http://www.google.com");
GET_STR(config->locationSearch, "LocationSearch", "http://www.google.com/search?q=%s");
GET_INT(config->toolbarNavigation, "ToolbarNavigation", TRUE);
GET_INT(config->toolbarBookmarks, "ToolbarBookmarks", FALSE);
GET_INT(config->toolbarStatus, "ToolbarStatus", TRUE);
//GET_INT(config->toolbarDownloads, "ToolbarDownloads", FALSE);
GET_INT(config->toolbarStyle, "ToolbarStyle", CONFIG_TOOLBAR_DEFAULT);
GET_INT(config->toolbarSmall, "ToolbarSmall", FALSE);
GET_INT(config->toolbarWebSearch, "ToolbarWebSearch", TRUE);
GET_INT(config->toolbarNewTab, "ToolbarNewTab", TRUE);
GET_INT(config->toolbarClosedTabs, "ToolbarClosedTabs", TRUE);
GET_INT(config->panelShow, "PanelShow", FALSE);
GET_INT(config->panelActive, "PanelActive", 0);
GET_STR(config->panelPageholder, "PanelPageholder", "http://www.google.com");
GET_INT(config->tabSize, "TabSize", 10);
GET_INT(config->tabClose, "TabClose", TRUE);
GET_INT(config->newPages, "NewPages", CONFIG_NEWPAGES_TAB_NEW);
GET_INT(config->openTabsInTheBackground, "OpenTabsInTheBackground", FALSE);
GET_INT(config->openPopupsInTabs, "OpenPopupsInTabs", FALSE);
#undef GET_INT
#undef GET_STR
#define GET_INT(var, key, default) \
var = sokoke_key_file_get_integer_default( \
keyFile, "content", key, default, NULL)
#define GET_STR(var, key, default) \
var = sokoke_key_file_get_string_default( \
keyFile, "content", key, default, NULL)
GET_INT(config->loadImagesAutomatically, "LoadImagesAutomatically", TRUE);
GET_INT(config->shrinkImagesToFit, "ShrinkImagesTooFit", TRUE);
GET_INT(config->resizableTextAreas, "ResizableTextAreas", FALSE);
GET_INT(config->enableJavaScript, "EnableJavaScript", TRUE);
GET_INT(config->enablePlugins, "EnablePlugins", TRUE);
#undef GET_INT
#undef GET_STR
#define GET_INT(var, key, default) \
var = sokoke_key_file_get_integer_default( \
keyFile, "session", key, default, NULL)
#define GET_STR(var, key, default) \
var = sokoke_key_file_get_string_default( \
keyFile, "session", key, default, NULL)
GET_INT(config->rememberWinSize, "RememberWinSize", TRUE);
GET_INT(config->winWidth, "WinWidth", 0);
GET_INT(config->winHeight, "WinHeight", 0);
GET_INT(config->winPanelPos, "WinPanelPos", 0);
GET_INT(config->searchEngine, "SearchEngine", 0);
#undef GET_INT
#undef GET_STR
config->protocols_names = g_ptr_array_new();
g_datalist_init(&config->protocols_commands);
gchar** protocols;
if((protocols = g_key_file_get_keys(keyFile, "protocols", NULL, NULL)))
{
guint i;
for(i = 0; protocols[i] != NULL; i++)
{
gchar* sCommand = g_key_file_get_string(keyFile, "protocols"
, protocols[i], NULL);
g_ptr_array_add(config->protocols_names, (gpointer)protocols[i]);
g_datalist_set_data_full(&config->protocols_commands
, protocols[i], sCommand, g_free);
}
g_free(protocols);
}
g_key_file_free(keyFile);
return !(error && *error);
}
gboolean config_to_file(CConfig* config, const gchar* filename, GError** error)
{
GKeyFile* keyFile = g_key_file_new();
g_key_file_set_integer(keyFile, "browser", "Startup", config->startup);
g_key_file_set_string (keyFile, "browser", "Homepage", config->homepage);
g_key_file_set_string (keyFile, "browser", "LocationSearch", config->locationSearch);
g_key_file_set_integer(keyFile, "browser", "ToolbarNavigation", config->toolbarNavigation);
g_key_file_set_integer(keyFile, "browser", "ToolbarBookmarks", config->toolbarBookmarks);
//g_key_file_set_integer(keyFile, "browser", "ToolbarDownloads", config->toolbarDownloads);
g_key_file_set_integer(keyFile, "browser", "ToolbarStatus", config->toolbarStatus);
g_key_file_set_integer(keyFile, "browser", "ToolbarStyle", config->toolbarStyle);
g_key_file_set_integer(keyFile, "browser", "ToolbarSmall", config->toolbarSmall);
g_key_file_set_integer(keyFile, "browser", "ToolbarWebSearch", config->toolbarWebSearch);
g_key_file_set_integer(keyFile, "browser", "ToolbarNewTab", config->toolbarNewTab);
g_key_file_set_integer(keyFile, "browser", "ToolbarClosedTabs", config->toolbarClosedTabs);
g_key_file_set_integer(keyFile, "browser", "PanelShow", config->panelShow);
g_key_file_set_integer(keyFile, "browser", "PanelActive", config->panelActive);
g_key_file_set_string (keyFile, "browser", "PanelPageholder", config->panelPageholder);
g_key_file_set_integer(keyFile, "browser", "TabSize", config->tabSize);
g_key_file_set_integer(keyFile, "browser", "TabClose", config->tabClose);
g_key_file_set_integer(keyFile, "browser", "NewPages", config->newPages);
g_key_file_set_integer(keyFile, "browser", "OpenTabsInTheBackground", config->openTabsInTheBackground);
g_key_file_set_integer(keyFile, "browser", "OpenPopupsInTabs", config->openPopupsInTabs);
g_key_file_set_integer(keyFile, "content", "LoadImagesAutomatically", config->loadImagesAutomatically);
g_key_file_set_integer(keyFile, "content", "ShrinkImagesToFit", config->shrinkImagesToFit);
g_key_file_set_integer(keyFile, "content", "ResizableTextAreas", config->resizableTextAreas);
g_key_file_set_integer(keyFile, "content", "EnableJavaScript", config->enableJavaScript);
g_key_file_set_integer(keyFile, "content", "EnablePlugins", config->enablePlugins);
g_key_file_set_integer(keyFile, "session", "RememberWinSize", config->rememberWinSize);
g_key_file_set_integer(keyFile, "session", "WinWidth", config->winWidth);
g_key_file_set_integer(keyFile, "session", "WinHeight", config->winHeight);
g_key_file_set_integer(keyFile, "session", "WinPanelPos", config->winPanelPos);
g_key_file_set_integer(keyFile, "session", "SearchEngine", config->searchEngine);
guint i;
for(i = 0; i < config->protocols_names->len; i++)
{
gchar* protocol = (gchar*)g_ptr_array_index(config->protocols_names, i);
gchar* command = g_datalist_get_data(&config->protocols_commands, protocol);
g_key_file_set_string(keyFile, "protocols", protocol, command);
g_free(protocol);
}
gboolean saved = sokoke_key_file_save_to_file(keyFile, filename, error);
g_key_file_free(keyFile);
return saved;
}