void cf_key_file_load (void) { GError *err = NULL; const gchar *search_path [2] = {g_get_user_config_dir (), CF_DATA_DIR}; cf_key_file = g_key_file_new (); g_key_file_load_from_dirs (cf_key_file, CF_CONFIG_FILE_NAME, search_path, NULL, G_KEY_FILE_KEEP_COMMENTS, &err); if (err != NULL) { cf_show_error (&err); gtk_main_quit (); } }
static void utils_conf_load(void) { if(conf_global) return; conf_global=g_key_file_new(); conf_user=g_key_file_new(); // Load system wide configuration g_key_file_load_from_dirs(conf_global,"sphone/sphone.conf",g_get_system_config_dirs(),NULL,G_KEY_FILE_NONE,NULL); // load local configuration gchar *localpath=g_build_filename(g_get_user_config_dir(),"sphone","sphone.conf",NULL); g_key_file_load_from_file(conf_user,localpath,G_KEY_FILE_NONE,NULL); g_free(localpath); }
static void load_settings() { const char* session_name = g_getenv("DESKTOP_SESSION"); /* load settings from current session config files */ if(!session_name) session_name = "LXDE"; char* rel_path = g_strconcat("lxsession/", session_name, "/desktop.conf", NULL); char* user_config_file = g_build_filename(g_get_user_config_dir(), rel_path, NULL); GKeyFile* kf = g_key_file_new(); if(!g_key_file_load_from_file(kf, user_config_file, G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS, NULL)) { g_key_file_load_from_dirs(kf, rel_path, (const char**)g_get_system_config_dirs(), NULL, G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS, NULL); } g_free(rel_path); int val; val = g_key_file_get_integer(kf, "Mouse", "AccFactor", NULL); if( val > 0) old_accel = accel = val; val = g_key_file_get_integer(kf, "Mouse", "AccThreshold", NULL); if( val > 0) old_threshold = threshold = val; old_left_handed = left_handed = g_key_file_get_boolean(kf, "Mouse", "LeftHanded", NULL); val = g_key_file_get_integer(kf, "Keyboard", "Delay", NULL); if(val > 0) old_delay = delay = val; val = g_key_file_get_integer(kf, "Keyboard", "Interval", NULL); if(val > 0) old_interval = interval = val; if( g_key_file_has_key(kf, "Keyboard", "Beep", NULL ) ) old_beep = beep = g_key_file_get_boolean(kf, "Keyboard", "Beep", NULL); g_key_file_free(kf); g_free(user_config_file); old_dclick = dclick = get_dclick_time (); }
/** * egg_desktop_file_new_from_dirs: * @desktop_file_path: relative path to a Freedesktop-style Desktop file * @search_dirs: NULL-terminated array of directories to search * @error: error pointer * * Looks for @desktop_file_path in the paths returned from * g_get_user_data_dir() and g_get_system_data_dirs(), and creates * a new #EggDesktopFile from it. * * Return value: the new #EggDesktopFile, or %NULL on error. **/ EggDesktopFile* egg_desktop_file_new_from_dirs(const char* desktop_file_path, const char** search_dirs, GError** error) { EggDesktopFile* desktop_file; GKeyFile* key_file; char* full_path; key_file = g_key_file_new(); if (!g_key_file_load_from_dirs(key_file, desktop_file_path, search_dirs, &full_path, 0, error)) { g_key_file_free(key_file); return NULL; } desktop_file = egg_desktop_file_new_from_key_file(key_file, full_path, error); g_free(full_path); return desktop_file; }
inline static void loadconf() { const gchar* const *config_dirs = g_get_system_config_dirs(); GPtrArray *ptr_paths = g_ptr_array_new(); g_ptr_array_add(ptr_paths, g_build_filename(g_get_user_config_dir(), APPNAME, "/", NULL)); for(; *config_dirs; config_dirs++) g_ptr_array_add(ptr_paths, g_build_filename(*config_dirs, APPNAME, "/", NULL)); gchar** paths = (gchar**)g_ptr_array_free(ptr_paths, FALSE); GError* error = NULL; GKeyFile* key_file = g_key_file_new(); gchar* fullpath = NULL; gboolean can_be_loaded = g_key_file_load_from_dirs(key_file, "config", (const gchar**)paths, &fullpath, G_KEY_FILE_NONE, &error); if (!can_be_loaded) { warn("%s\n", error->message); g_error_free(error); } else { assign_boolean(key_file, &conf.onecolumn, "onecolumn" ); assign_boolean(key_file, &conf.checkbox, "checkbox" ); assign_boolean(key_file, &conf.numbers, "numbers" ); assign_boolean(key_file, &conf.underline, "underline" ); assign_boolean(key_file, &conf.color, "color" ); assign_boolean(key_file, &conf.radiobox, "radiobox" ); assign_boolean(key_file, &conf.initial, "initial" ); assign_boolean(key_file, &conf.whitelines, "whitelines"); assign_boolean(key_file, &conf.fullattr, "fullattr" ); assign_string (key_file, &conf.foreground, "foreground"); assign_string (key_file, &conf.background, "background"); } g_key_file_free(key_file); g_strfreev(paths); g_free(fullpath); }
int main(int argc, char** argv) { GtkBuilder* builder; char* str = NULL; GKeyFile* kf = g_key_file_new(); const char* session_name = g_getenv("DESKTOP_SESSION"); /* load settings from current session config files */ if(!session_name) session_name = "LXDE"; char* rel_path = g_strconcat("lxsession/", session_name, "/desktop.conf", NULL); char* user_config_file = g_build_filename(g_get_user_config_dir(), rel_path, NULL); #ifdef ENABLE_NLS bindtextdomain ( GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR ); bind_textdomain_codeset ( GETTEXT_PACKAGE, "UTF-8" ); textdomain ( GETTEXT_PACKAGE ); #endif gtk_init(&argc, &argv); gtk_icon_theme_prepend_search_path(gtk_icon_theme_get_default(), PACKAGE_DATA_DIR); /* build the UI */ builder = gtk_builder_new(); gtk_builder_add_from_file( builder, PACKAGE_DATA_DIR "/lxinput.ui", NULL ); dlg = (GtkWidget*)gtk_builder_get_object( builder, "dlg" ); gtk_dialog_set_alternative_button_order( (GtkDialog*)dlg, GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1 ); mouse_accel = (GtkRange*)gtk_builder_get_object(builder,"mouse_accel"); mouse_threshold = (GtkRange*)gtk_builder_get_object(builder,"mouse_threshold"); mouse_left_handed = (GtkToggleButton*)gtk_builder_get_object(builder,"left_handed"); mouse_dclick = (GtkRange*)gtk_builder_get_object(builder, "mouse_dclick"); kb_delay = (GtkRange*)gtk_builder_get_object(builder,"kb_delay"); kb_interval = (GtkRange*)gtk_builder_get_object(builder,"kb_interval"); kb_beep = (GtkToggleButton*)gtk_builder_get_object(builder,"beep"); kb_layout = (GtkButton*)gtk_builder_get_object(builder,"keyboard_layout"); const gchar *program = detect_keymap_program(); if (program == NULL) { /* Hide the button if there is no program to set keymap */ kb_layout_label = (GtkLabel*)gtk_builder_get_object(builder,"keyboard_layout_label"); gtk_widget_set_visible(GTK_WIDGET(kb_layout_label), FALSE); gtk_widget_set_visible(GTK_WIDGET(kb_layout), FALSE); } else { gtk_button_set_label(kb_layout, _("Keyboard Layout...")); } g_object_unref( builder ); /* read the config flie */ load_settings(); /* init the UI */ gtk_range_set_value(mouse_accel, (gdouble)accel / 10.0); gtk_range_set_value(mouse_threshold, threshold); gtk_range_set_value(mouse_dclick, dclick); gtk_toggle_button_set_active(mouse_left_handed, left_handed); gtk_range_set_value(kb_delay, delay); gtk_range_set_value(kb_interval, interval); gtk_toggle_button_set_active(kb_beep, beep); set_range_stops(mouse_accel, 10); g_signal_connect(mouse_accel, "value-changed", G_CALLBACK(on_mouse_accel_changed), NULL); set_range_stops(mouse_threshold, 10); g_signal_connect(mouse_threshold, "value-changed", G_CALLBACK(on_mouse_threshold_changed), NULL); g_signal_connect(mouse_left_handed, "toggled", G_CALLBACK(on_left_handed_toggle), NULL); g_signal_connect(mouse_dclick, "value-changed", G_CALLBACK(on_mouse_dclick_changed), NULL); set_range_stops(kb_delay, 10); g_signal_connect(kb_delay, "value-changed", G_CALLBACK(on_kb_range_changed), &delay); set_range_stops(kb_interval, 10); g_signal_connect(kb_interval, "value-changed", G_CALLBACK(on_kb_range_changed), &interval); g_signal_connect(kb_beep, "toggled", G_CALLBACK(on_kb_beep_toggle), NULL); g_signal_connect(kb_layout, "clicked", G_CALLBACK(on_kb_layout_clicked), NULL); if( gtk_dialog_run( (GtkDialog*)dlg ) == GTK_RESPONSE_OK ) { gsize len; if(!g_key_file_load_from_file(kf, user_config_file, G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS, NULL)) { /* the user config file doesn't exist, create its parent dir */ len = strlen(user_config_file) - strlen("/desktop.conf"); user_config_file[len] = '\0'; g_debug("user_config_file = %s", user_config_file); g_mkdir_with_parents(user_config_file, 0700); user_config_file[len] = '/'; g_key_file_load_from_dirs(kf, rel_path, (const char**)g_get_system_config_dirs(), NULL, G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS, NULL); } g_free(rel_path); g_key_file_set_integer(kf, "Mouse", "AccFactor", accel); g_key_file_set_integer(kf, "Mouse", "AccThreshold", threshold); g_key_file_set_integer(kf, "Mouse", "LeftHanded", !!left_handed); g_key_file_set_integer(kf, "Keyboard", "Delay", delay); g_key_file_set_integer(kf, "Keyboard", "Interval", interval); g_key_file_set_integer(kf, "Keyboard", "Beep", !!beep); str = g_key_file_to_data(kf, &len, NULL); g_file_set_contents(user_config_file, str, len, NULL); g_free(str); /* ask the settigns daemon to reload */ /* FIXME: is this needed? */ /* g_spawn_command_line_sync("lxde-settings-daemon reload", NULL, NULL, NULL, NULL); */ /* also save settings into autostart file for non-lxsession sessions */ g_free(user_config_file); rel_path = g_build_filename(g_get_user_config_dir(), "autostart", NULL); user_config_file = g_build_filename(rel_path, "LXinput-setup.desktop", NULL); if (g_mkdir_with_parents(rel_path, 0755) == 0) { str = g_strdup_printf("[Desktop Entry]\n" "Type=Application\n" "Name=%s\n" "Comment=%s\n" "NoDisplay=true\n" "Exec=sh -c 'xset m %d/10 %d r rate %d %d b %s'\n" "NotShowIn=GNOME;KDE;XFCE;\n", _("LXInput autostart"), _("Setup keyboard and mouse using settings done in LXInput"), /* FIXME: how to setup left-handed mouse? */ accel, threshold, delay, interval, beep ? "on" : "off"); g_file_set_contents(user_config_file, str, -1, NULL); g_free(str); } } else { /* restore to original settings */ /* keyboard */ delay = old_delay; interval = old_interval; beep = old_beep; XkbSetAutoRepeatRate(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), XkbUseCoreKbd, delay, interval); /* FIXME: beep? */ /* mouse */ accel = old_accel; threshold = old_threshold; left_handed = old_left_handed; XChangePointerControl(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), True, True, accel, 10, threshold); set_left_handed_mouse(); set_dclick_time (old_dclick); } gtk_widget_destroy( dlg ); g_free( file ); g_key_file_free( kf ); g_free(user_config_file); return 0; }
char * gsm_util_find_desktop_file_for_app_name (const char *name, char **autostart_dirs) { char *app_path; char **app_dirs; GKeyFile *key_file; char *desktop_file; int i; app_path = NULL; app_dirs = gsm_util_get_app_dirs (); key_file = g_key_file_new (); desktop_file = g_strdup_printf ("%s.desktop", name); g_debug ("GsmUtil: Looking for file '%s'", desktop_file); for (i = 0; app_dirs[i] != NULL; i++) { g_debug ("GsmUtil: Looking in '%s'", app_dirs[i]); } g_key_file_load_from_dirs (key_file, desktop_file, (const char **) app_dirs, &app_path, G_KEY_FILE_NONE, NULL); if (app_path != NULL) { g_debug ("GsmUtil: found in XDG app dirs: '%s'", app_path); } if (app_path == NULL && autostart_dirs != NULL) { g_key_file_load_from_dirs (key_file, desktop_file, (const char **) autostart_dirs, &app_path, G_KEY_FILE_NONE, NULL); if (app_path != NULL) { g_debug ("GsmUtil: found in autostart dirs: '%s'", app_path); } } /* look for mate vender prefix */ if (app_path == NULL) { g_free (desktop_file); desktop_file = g_strdup_printf ("mate-%s.desktop", name); g_key_file_load_from_dirs (key_file, desktop_file, (const char **) app_dirs, &app_path, G_KEY_FILE_NONE, NULL); if (app_path != NULL) { g_debug ("GsmUtil: found in XDG app dirs: '%s'", app_path); } } if (app_path == NULL && autostart_dirs != NULL) { g_key_file_load_from_dirs (key_file, desktop_file, (const char **) autostart_dirs, &app_path, G_KEY_FILE_NONE, NULL); if (app_path != NULL) { g_debug ("GsmUtil: found in autostart dirs: '%s'", app_path); } } g_free (desktop_file); g_key_file_free (key_file); g_strfreev (app_dirs); return app_path; }