Diff of /trunk/src/gconf.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 129 by harbaum, Tue Sep 29 14:30:16 2009 UTC revision 220 by harbaum, Sat Nov 28 14:20:28 2009 UTC
# Line 67  static store_t store[] = { Line 67  static store_t store[] = {
67    { "compass_locked",   STORE_BOOL,   OFFSET(compass_locked) },    { "compass_locked",   STORE_BOOL,   OFFSET(compass_locked) },
68    { "latitude",         STORE_FLOAT,  OFFSET(home.lat) },    { "latitude",         STORE_FLOAT,  OFFSET(home.lat) },
69    { "longitude",        STORE_FLOAT,  OFFSET(home.lon) },    { "longitude",        STORE_FLOAT,  OFFSET(home.lon) },
   { "manual_goto_lat",  STORE_FLOAT,  OFFSET(manual_goto.lat) },  
   { "manual_goto_lon",  STORE_FLOAT,  OFFSET(manual_goto.lon) },  
70    { "gps_lat",          STORE_FLOAT,  OFFSET(gps.lat) },    { "gps_lat",          STORE_FLOAT,  OFFSET(gps.lat) },
71    { "gps_lon",          STORE_FLOAT,  OFFSET(gps.lon) },    { "gps_lon",          STORE_FLOAT,  OFFSET(gps.lon) },
72    { "search_in",        STORE_INT,    OFFSET(search) },    { "search_in",        STORE_INT,    OFFSET(search) },
# Line 79  static store_t store[] = { Line 77  static store_t store[] = {
77    { "compass_damping",  STORE_INT,    OFFSET(compass_damping) },    { "compass_damping",  STORE_INT,    OFFSET(compass_damping) },
78    { "cachelist_hide_found", STORE_BOOL, OFFSET(cachelist_hide_found) },    { "cachelist_hide_found", STORE_BOOL, OFFSET(cachelist_hide_found) },
79    { "cachelist_update", STORE_BOOL,   OFFSET(cachelist_update) },    { "cachelist_update", STORE_BOOL,   OFFSET(cachelist_update) },
80      { "disable_gcvote",   STORE_BOOL,   OFFSET(disable_gcvote) },
81      { "username",         STORE_STRING, OFFSET(username) },
82  #ifdef USE_MAEMO  #ifdef USE_MAEMO
83    { "mmpoi_dontlaunch", STORE_BOOL,   OFFSET(mmpoi_dontlaunch) },    { "mmpoi_dontlaunch", STORE_BOOL,   OFFSET(mmpoi_dontlaunch) },
84    { "cachelist_dss",    STORE_BOOL,   OFFSET(cachelist_disable_screensaver) },    { "cachelist_dss",    STORE_BOOL,   OFFSET(cachelist_disable_screensaver) },
# Line 90  static store_t store[] = { Line 90  static store_t store[] = {
90    { "map_zoom",         STORE_INT,    OFFSET(map.zoom) },    { "map_zoom",         STORE_INT,    OFFSET(map.zoom) },
91    { "map_source",       STORE_INT,    OFFSET(map.source) },    { "map_source",       STORE_INT,    OFFSET(map.source) },
92  #endif  #endif
93    
94      { "geotoad/password", STORE_STRING, OFFSET(gt.password) },
95      { "geotoad/filename", STORE_STRING, OFFSET(gt.filename) },
96      { "geotoad/distance", STORE_FLOAT,  OFFSET(gt.distance) },
97      { "geotoad/lat",      STORE_FLOAT,  OFFSET(gt.lat) },
98      { "geotoad/lon",      STORE_FLOAT,  OFFSET(gt.lon) },
99      { "geotoad/flags",    STORE_INT,    OFFSET(gt.flags) },
100    
101    { NULL, -1, -1 }    { NULL, -1, -1 }
102  };  };
103    
# Line 111  static char *get_basename(char *name) { Line 119  static char *get_basename(char *name) {
119  }  }
120    
121  void gconf_remove_closed_name(appdata_t *appdata, char *filename) {  void gconf_remove_closed_name(appdata_t *appdata, char *filename) {
122      if(!filename || !strlen(filename)) return;
123    
124    char *key = g_strdup_printf(GCONF_KEY_CLOSED, get_basename(filename));    char *key = g_strdup_printf(GCONF_KEY_CLOSED, get_basename(filename));
125    gconf_client_unset(appdata->gconf_client, key, NULL);    gconf_client_unset(appdata->gconf_client, key, NULL);
126    g_free(key);    g_free(key);
127  }  }
128    
129  void gconf_save_closed_name(appdata_t *appdata, char *filename, char *name) {  void gconf_save_closed_name(appdata_t *appdata, char *filename, char *name) {
130      if(!filename || !strlen(filename)) return;
131    
132    char *key = g_strdup_printf(GCONF_KEY_CLOSED, get_basename(filename));    char *key = g_strdup_printf(GCONF_KEY_CLOSED, get_basename(filename));
133    gconf_client_set_string(appdata->gconf_client, key, name, NULL);    gconf_client_set_string(appdata->gconf_client, key, name, NULL);
134    g_free(key);    g_free(key);
135  }  }
136    
137  char *gconf_restore_closed_name(appdata_t *appdata, char *filename) {  char *gconf_restore_closed_name(appdata_t *appdata, char *filename) {
138      if(!filename || !strlen(filename)) return NULL;
139    
140    char *key = g_strdup_printf(GCONF_KEY_CLOSED, get_basename(filename));    char *key = g_strdup_printf(GCONF_KEY_CLOSED, get_basename(filename));
141    char *ret = gconf_client_get_string(appdata->gconf_client, key, NULL);    char *ret = gconf_client_get_string(appdata->gconf_client, key, NULL);
142    g_free(key);    g_free(key);
# Line 132  char *gconf_restore_closed_name(appdata_ Line 146  char *gconf_restore_closed_name(appdata_
146  void gconf_save_state(appdata_t *appdata) {  void gconf_save_state(appdata_t *appdata) {
147    int entries = 0;    int entries = 0;
148    
149      /* free proxy settings */
150      if(appdata->proxy) {
151        proxy_t *proxy = appdata->proxy;
152    
153        if(proxy->authentication_password) g_free(proxy->authentication_password);
154        if(proxy->authentication_user)     g_free(proxy->authentication_user);
155        if(proxy->host)                    g_free(proxy->host);
156        if(proxy->ignore_hosts)            g_free(proxy->ignore_hosts);
157    
158        g_free(proxy);
159        appdata->proxy = NULL;
160      }
161    
162    gpx_t *gpx = appdata->gpx;    gpx_t *gpx = appdata->gpx;
163    while(gpx) {    while(gpx) {
164      char str[128];      char str[128];
# Line 170  void gconf_save_state(appdata_t *appdata Line 197  void gconf_save_state(appdata_t *appdata
197        if((char*)(*ptr)) {        if((char*)(*ptr)) {
198          gconf_client_set_string(appdata->gconf_client, key, (char*)(*ptr), NULL);          gconf_client_set_string(appdata->gconf_client, key, (char*)(*ptr), NULL);
199        }        }
200          g_free((char*)(*ptr));
201          *ptr = NULL;
202        break;        break;
203    
204      case STORE_BOOL:      case STORE_BOOL:
# Line 204  void gconf_load_state(appdata_t *appdata Line 233  void gconf_load_state(appdata_t *appdata
233    
234    /* default positions are invalid */    /* default positions are invalid */
235    appdata->home.lat = appdata->home.lon = NAN;    appdata->home.lat = appdata->home.lon = NAN;
   appdata->manual_goto.lat = appdata->manual_goto.lon = NAN;  
236    appdata->gps.lat = appdata->gps.lon = NAN;    appdata->gps.lat = appdata->gps.lon = NAN;
237      appdata->geomath.lat = appdata->geomath.lon = NAN;
238    
239      appdata->gt.lat = appdata->gt.lon = NAN;
240      appdata->gt.distance = 1.0;  // in km/mil
241    
242      /* ------------- get proxy settings -------------------- */
243      if(gconf_client_get_bool(appdata->gconf_client,
244                               PROXY_KEY "use_http_proxy", NULL)) {
245        proxy_t *proxy = appdata->proxy = g_new0(proxy_t, 1);
246    
247        /* get basic settings */
248        proxy->host = gconf_client_get_string(appdata->gconf_client,
249                                              PROXY_KEY "host", NULL);
250        proxy->port = gconf_client_get_int(appdata->gconf_client,
251                                           PROXY_KEY "port", NULL);
252        proxy->ignore_hosts =
253          gconf_client_get_string(appdata->gconf_client,
254                                  PROXY_KEY "ignore_hosts", NULL);
255    
256        /* check for authentication */
257        proxy->use_authentication =
258          gconf_client_get_bool(appdata->gconf_client,
259                                PROXY_KEY "use_authentication", NULL);
260    
261        if(proxy->use_authentication) {
262          proxy->authentication_user =
263            gconf_client_get_string(appdata->gconf_client,
264                                    PROXY_KEY "authentication_user", NULL);
265          proxy->authentication_password =
266            gconf_client_get_string(appdata->gconf_client,
267                                    PROXY_KEY "authentication_password", NULL);
268        }
269      }
270    
271      /* restore everything listed in the store table */
272      store_t *st = store;
273      while(st->key) {
274        void **ptr = ((void*)appdata) + st->offset;
275        char *key = g_strdup_printf(GCONF_PATH "%s", st->key);
276    
277        /* check if key is present */
278        GConfValue *value = gconf_client_get(appdata->gconf_client, key, NULL);
279        if(value) {
280          gconf_value_free(value);
281    
282          switch(st->type) {
283          case STORE_STRING: {
284            char **str = (char**)ptr;
285            *str = gconf_client_get_string(appdata->gconf_client, key, NULL);
286          } break;
287    
288          case STORE_BOOL:
289            *((int*)ptr) = gconf_client_get_bool(appdata->gconf_client, key, NULL);
290            break;
291    
292          case STORE_INT:
293            *((int*)ptr) = gconf_client_get_int(appdata->gconf_client, key, NULL);
294            break;
295    
296          case STORE_FLOAT:
297            *((float*)ptr) = gconf_client_get_float(appdata->gconf_client, key, NULL);
298            break;
299    
300          default:
301            printf("Unsupported type %d\n", st->type);
302            break;
303          }
304        }
305        g_free(key);
306        st++;
307      }
308    
309    int i, entries = gconf_client_get_int(appdata->gconf_client,    int i, entries = gconf_client_get_int(appdata->gconf_client,
310                                   GCONF_KEY_CNT, NULL);                                   GCONF_KEY_CNT, NULL);
# Line 228  void gconf_load_state(appdata_t *appdata Line 327  void gconf_load_state(appdata_t *appdata
327          (*gpx)->closed = TRUE;          (*gpx)->closed = TRUE;
328        } else {        } else {
329          if(g_file_test(fname, G_FILE_TEST_IS_DIR))          if(g_file_test(fname, G_FILE_TEST_IS_DIR))
330            *gpx = gpx_parse_dir(dialog, fname);            *gpx = gpx_parse_dir(dialog, fname, appdata->username);
331          else          else
332            *gpx = gpx_parse(dialog, fname);            *gpx = gpx_parse(dialog, fname, appdata->username);
333    
334          if(!*gpx) {          if(!*gpx) {
335            /* restoring the gpx file failed, mark it as unusable, but save */            /* restoring the gpx file failed, mark it as unusable, but save */
# Line 275  void gconf_load_state(appdata_t *appdata Line 374  void gconf_load_state(appdata_t *appdata
374      }      }
375    }    }
376    
   /* restore everything listed in the store table */  
   store_t *st = store;  
   while(st->key) {  
     void **ptr = ((void*)appdata) + st->offset;  
     char *key = g_strdup_printf(GCONF_PATH "%s", st->key);  
   
     /* check if key is present */  
     GConfValue *value = gconf_client_get(appdata->gconf_client, key, NULL);  
     if(value) {  
       gconf_value_free(value);  
   
       switch(st->type) {  
       case STORE_STRING: {  
         char **str = (char**)ptr;  
         *str = gconf_client_get_string(appdata->gconf_client, key, NULL);  
       } break;  
   
       case STORE_BOOL:  
         *((int*)ptr) = gconf_client_get_bool(appdata->gconf_client, key, NULL);  
         break;  
   
       case STORE_INT:  
         *((int*)ptr) = gconf_client_get_int(appdata->gconf_client, key, NULL);  
         break;  
   
       case STORE_FLOAT:  
         *((float*)ptr) = gconf_client_get_float(appdata->gconf_client, key, NULL);  
         break;  
   
       default:  
         printf("Unsupported type %d\n", st->type);  
         break;  
       }  
     }  
     g_free(key);  
     st++;  
   }  
   
377    /* ----- set all kinds of defaults ------- */    /* ----- set all kinds of defaults ------- */
378    
379    if(!appdata->compass_damping) appdata->compass_damping = 1;    if(!appdata->compass_damping) appdata->compass_damping = 1;
# Line 429  void gconf_load_state(appdata_t *appdata Line 490  void gconf_load_state(appdata_t *appdata
490      char *name = g_strdup(ICONPATH "welcome.gpx");      char *name = g_strdup(ICONPATH "welcome.gpx");
491      dialog = gpx_busy_dialog_new(GTK_WIDGET(appdata->window));      dialog = gpx_busy_dialog_new(GTK_WIDGET(appdata->window));
492      printf("No GPX file loaded, trying to load demo\n");      printf("No GPX file loaded, trying to load demo\n");
493      appdata->gpx = gpx_parse(dialog, name);      appdata->gpx = gpx_parse(dialog, name, appdata->username);
494      gpx_busy_dialog_destroy(dialog);      gpx_busy_dialog_destroy(dialog);
495      g_free(name);      g_free(name);
496    }    }

Legend:
Removed from v.129  
changed lines
  Added in v.220