mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-01 02:53:24 +00:00
Don't close config file when changing preferences
On Linux and MacOS the subsurface_close_conf() doesn't really close the config file (it flushes writes on MacOS), but on Windows it does actually close the registry hkey. Which is bad, if you change the settings multiple times - we assume that the config file is open the whole time. So add a "subsurface_flush_conf()" function, and call *that* when changing configuration parameters. And call the close function only at the very end. Alternatively, maybe we should just open the config file separately every time. I don't much care, maybe somebody else does. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
2d1a316d84
commit
725e4582d9
7 changed files with 28 additions and 3 deletions
|
@ -38,6 +38,7 @@ typedef enum {
|
||||||
extern void subsurface_open_conf(void);
|
extern void subsurface_open_conf(void);
|
||||||
extern void subsurface_set_conf(char *name, pref_type_t type, const void *value);
|
extern void subsurface_set_conf(char *name, pref_type_t type, const void *value);
|
||||||
extern const void *subsurface_get_conf(char *name, pref_type_t type);
|
extern const void *subsurface_get_conf(char *name, pref_type_t type);
|
||||||
|
extern void subsurface_flush_conf(void);
|
||||||
extern void subsurface_close_conf(void);
|
extern void subsurface_close_conf(void);
|
||||||
|
|
||||||
extern const char *subsurface_USB_name(void);
|
extern const char *subsurface_USB_name(void);
|
||||||
|
|
1
dive.h
1
dive.h
|
@ -317,6 +317,7 @@ extern void add_event(struct dive *dive, int time, int type, int flags, int valu
|
||||||
extern void init_ui(int *argcp, char ***argvp);
|
extern void init_ui(int *argcp, char ***argvp);
|
||||||
|
|
||||||
extern void run_ui(void);
|
extern void run_ui(void);
|
||||||
|
extern void exit_ui(void);
|
||||||
|
|
||||||
extern void report_error(GError* error);
|
extern void report_error(GError* error);
|
||||||
|
|
||||||
|
|
|
@ -423,7 +423,9 @@ static void preferences_dialog(GtkWidget *w, gpointer data)
|
||||||
subsurface_set_conf("SAC", PREF_BOOL, BOOL_TO_PTR(visible_cols.sac));
|
subsurface_set_conf("SAC", PREF_BOOL, BOOL_TO_PTR(visible_cols.sac));
|
||||||
subsurface_set_conf("OTU", PREF_BOOL, BOOL_TO_PTR(visible_cols.otu));
|
subsurface_set_conf("OTU", PREF_BOOL, BOOL_TO_PTR(visible_cols.otu));
|
||||||
subsurface_set_conf("divelist_font", PREF_STRING, divelist_font);
|
subsurface_set_conf("divelist_font", PREF_STRING, divelist_font);
|
||||||
subsurface_close_conf();
|
|
||||||
|
/* Flush the changes out to the system */
|
||||||
|
subsurface_flush_conf();
|
||||||
}
|
}
|
||||||
gtk_widget_destroy(dialog);
|
gtk_widget_destroy(dialog);
|
||||||
}
|
}
|
||||||
|
@ -769,6 +771,11 @@ void run_ui(void)
|
||||||
gtk_main();
|
gtk_main();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void exit_ui(void)
|
||||||
|
{
|
||||||
|
subsurface_close_conf();
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
cairo_rectangle_int_t rect;
|
cairo_rectangle_int_t rect;
|
||||||
const char *text;
|
const char *text;
|
||||||
|
|
5
linux.c
5
linux.c
|
@ -43,6 +43,11 @@ const void *subsurface_get_conf(char *name, pref_type_t type)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void subsurface_flush_conf(void)
|
||||||
|
{
|
||||||
|
/* this is a no-op */
|
||||||
|
}
|
||||||
|
|
||||||
void subsurface_close_conf(void)
|
void subsurface_close_conf(void)
|
||||||
{
|
{
|
||||||
/* this is a no-op */
|
/* this is a no-op */
|
||||||
|
|
7
macos.c
7
macos.c
|
@ -59,13 +59,18 @@ const void *subsurface_get_conf(char *name, pref_type_t type)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void subsurface_close_conf(void)
|
void subsurface_flush_conf(void)
|
||||||
{
|
{
|
||||||
int ok = CFPreferencesAppSynchronize(SUBSURFACE_PREFERENCES);
|
int ok = CFPreferencesAppSynchronize(SUBSURFACE_PREFERENCES);
|
||||||
if (!ok)
|
if (!ok)
|
||||||
fprintf(stderr,"Could not save preferences\n");
|
fprintf(stderr,"Could not save preferences\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void subsurface_close_conf(void)
|
||||||
|
{
|
||||||
|
/* Nothing */
|
||||||
|
}
|
||||||
|
|
||||||
const char *subsurface_USB_name()
|
const char *subsurface_USB_name()
|
||||||
{
|
{
|
||||||
return "/dev/tty.SLAB_USBtoUART";
|
return "/dev/tty.SLAB_USBtoUART";
|
||||||
|
|
1
main.c
1
main.c
|
@ -239,5 +239,6 @@ int main(int argc, char **argv)
|
||||||
report_dives(imported);
|
report_dives(imported);
|
||||||
|
|
||||||
run_ui();
|
run_ui();
|
||||||
|
exit_ui();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,10 +73,15 @@ const void *subsurface_get_conf(char *name, pref_type_t type)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void subsurface_close_conf(void)
|
void subsurface_flush_conf(void)
|
||||||
{
|
{
|
||||||
|
/* I wonder if we should even do this - it's apparently very expensive */
|
||||||
if (RegFlushKey(hkey) != ERROR_SUCCESS)
|
if (RegFlushKey(hkey) != ERROR_SUCCESS)
|
||||||
printf("RegFlushKey failed \n");
|
printf("RegFlushKey failed \n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void subsurface_close_conf(void)
|
||||||
|
{
|
||||||
RegCloseKey(hkey);
|
RegCloseKey(hkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue