Diff of /trunk/src/main.c

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

revision 249 by harbaum, Thu Jan 21 21:18:33 2010 UTC revision 294 by harbaum, Wed Aug 18 18:24:19 2010 UTC
# Line 123  void errorf(const char *fmt, ...) { Line 123  void errorf(const char *fmt, ...) {
123    free(buf);    free(buf);
124  }  }
125    
126    /* ------------ app specific gps helper functions, not part -------------- */
127    /* ---------------------  of the generic gps.[ch] ------------------------ */
128    
129    void gps_change_state(appdata_t *appdata) {
130      gps_enable(appdata->gps_state, appdata->use_gps);
131    }
132    
133    pos_t *gps_get_pos(appdata_t *appdata) {
134      static pos_t pos;
135    
136      if(appdata->gps.set & FIX_LATLON_SET) {
137        pos.lat = appdata->gps.fix.latitude;
138        pos.lon = appdata->gps.fix.longitude;
139        return &pos;
140      }
141    
142      return NULL;
143    }
144    
145    float gps_get_heading(appdata_t *appdata) {
146      if(appdata->gps.set & FIX_TRACK_SET)
147        return appdata->gps.fix.track;
148    
149      return NAN;
150    }
151    
152    gint gps_get_satnum(appdata_t *appdata) {
153      printf("set = %x/%x (snum = %d)\n",
154             appdata->gps.set, FIX_SATELLITE_SET,
155             appdata->gps.fix.sat_num);
156    
157      if(appdata->gps.set & FIX_SATELLITE_SET)
158        return appdata->gps.fix.sat_num;
159    
160      return 0;
161    }
162    
163    gps_sat_t *gps_get_sats(appdata_t *appdata) {
164      if(appdata->gps.set & FIX_SATELLITE_SET)
165        return appdata->gps.fix.sat_data;
166    
167      return NULL;
168    }
169    
170    float gps_get_eph(appdata_t *appdata) {
171      if(appdata->gps.set & FIX_HERR_SET)
172        return appdata->gps.fix.eph;
173    
174      return NAN;
175    }
176    
177    static void
178    main_gps_cb(gps_mask_t set, struct gps_t *fix, void *data) {
179      appdata_t *appdata = (appdata_t*)data;
180    
181      appdata->gps.set = set;
182      memcpy(&appdata->gps.fix, fix, sizeof(struct gps_t));
183    }
184    
185  gpx_t *choose_file(appdata_t *appdata, gboolean whole_dir) {  gpx_t *choose_file(appdata_t *appdata, gboolean whole_dir) {
186    GtkWidget *dialog;    GtkWidget *dialog;
187    gpx_t *gpx = NULL;    gpx_t *gpx = NULL;
# Line 445  static gboolean on_cachelist_focus_out(G Line 504  static gboolean on_cachelist_focus_out(G
504    return FALSE;    return FALSE;
505  }  }
506    
507    gboolean on_main_focus_change(GtkWidget *widget, GdkEventFocus *event,
508                                    gpointer user_data) {
509      appdata_t *appdata = (appdata_t*)user_data;
510      g_assert(appdata->gps_state);
511    
512      printf("main/cachelist focus-%s event\n", event->in?"in":"out");
513    
514      /* disconnect from gps if map looses focus */
515      /* this is to save energy if maep runs in background */
516    
517      if(event->in) {
518        /* request all GPS information required for map display */
519        gps_register_callback(appdata->gps_state,
520              LATLON_CHANGED | TRACK_CHANGED | HERR_CHANGED | SATELLITE_CHANGED,
521              main_gps_cb, appdata);
522      } else
523        gps_unregister_callback(appdata->gps_state, main_gps_cb);
524    
525      return FALSE;
526    }
527    
528  static GtkWidget *cachelist_create(appdata_t *appdata, gpx_t *gpx,  static GtkWidget *cachelist_create(appdata_t *appdata, gpx_t *gpx,
529                                     cache_t *sel_cache) {                                     cache_t *sel_cache) {
530    GtkCellRenderer *renderer;    GtkCellRenderer *renderer;
# Line 711  void cachelist_dialog(appdata_t *appdata Line 791  void cachelist_dialog(appdata_t *appdata
791    hildon_window_set_app_menu(HILDON_WINDOW(window),    hildon_window_set_app_menu(HILDON_WINDOW(window),
792                               menu_create(appdata, MENU_CACHELIST));                               menu_create(appdata, MENU_CACHELIST));
793    
794      /* make sure window can control gps */
795      g_signal_connect(G_OBJECT(window), "focus-in-event",
796                       G_CALLBACK(on_main_focus_change), appdata);
797    
798      g_signal_connect(G_OBJECT(window), "focus-out-event",
799                       G_CALLBACK(on_main_focus_change), appdata);
800    
801    g_signal_connect(G_OBJECT(window), "destroy",    g_signal_connect(G_OBJECT(window), "destroy",
802                     G_CALLBACK(on_cachelist_destroy), appdata);                     G_CALLBACK(on_cachelist_destroy), appdata);
803    
# Line 2070  void cleanup(appdata_t *appdata) { Line 2157  void cleanup(appdata_t *appdata) {
2157    
2158    gnome_vfs_shutdown();    gnome_vfs_shutdown();
2159    icons_free();    icons_free();
2160    gps_release(appdata);  
2161      gps_release(appdata->gps_state);
2162      appdata->gps_state = NULL;
2163    
2164    if(appdata->search_results) {    if(appdata->search_results) {
2165      printf("freeing pending search\n");      printf("freeing pending search\n");
# Line 2371  void main_after_settings_redraw(appdata_ Line 2460  void main_after_settings_redraw(appdata_
2460    }    }
2461  }  }
2462    
2463    #if (MAEMO_VERSION_MAJOR == 5) && !defined(__i386__)
2464    /* get access to zoom buttons */
2465    static void
2466    on_window_realize(GtkWidget *widget, gpointer data) {
2467      if (widget->window) {
2468        unsigned char value = 1;
2469        Atom hildon_zoom_key_atom =
2470          gdk_x11_get_xatom_by_name("_HILDON_ZOOM_KEY_ATOM"),
2471          integer_atom = gdk_x11_get_xatom_by_name("INTEGER");
2472        Display *dpy =
2473          GDK_DISPLAY_XDISPLAY(gdk_drawable_get_display(widget->window));
2474        Window w = GDK_WINDOW_XID(widget->window);
2475    
2476        XChangeProperty(dpy, w, hildon_zoom_key_atom,
2477                        integer_atom, 8, PropModeReplace, &value, 1);
2478      }
2479    }
2480    #endif
2481    
2482  int main(int argc, char *argv[]) {  int main(int argc, char *argv[]) {
2483    appdata_t appdata;    appdata_t appdata;
2484    
# Line 2459  int main(int argc, char *argv[]) { Line 2567  int main(int argc, char *argv[]) {
2567    
2568  #if MAEMO_VERSION_MAJOR == 5  #if MAEMO_VERSION_MAJOR == 5
2569    gtk_window_set_title(GTK_WINDOW(appdata.window), "GPXView");    gtk_window_set_title(GTK_WINDOW(appdata.window), "GPXView");
2570    #if !defined(__i386__)
2571      g_signal_connect(G_OBJECT(appdata.window), "realize",
2572                       G_CALLBACK(on_window_realize), NULL);
2573    #endif
2574  #endif  #endif
2575    
2576    g_signal_connect(G_OBJECT(appdata.window), "destroy",    g_signal_connect(G_OBJECT(appdata.window), "destroy",
# Line 2507  int main(int argc, char *argv[]) { Line 2619  int main(int argc, char *argv[]) {
2619    appdata.gconf_client = gconf_client_get_default();    appdata.gconf_client = gconf_client_get_default();
2620    gconf_load_state(&appdata);    gconf_load_state(&appdata);
2621    
2622    gps_init(&appdata);    appdata.gps_state = gps_init();
2623      gps_change_state(&appdata);
2624    
2625      gps_register_callback(appdata.gps_state,
2626              LATLON_CHANGED | TRACK_CHANGED | HERR_CHANGED | SATELLITE_CHANGED,
2627              main_gps_cb, &appdata);
2628    
2629      /* make sure window can control gps */
2630      g_signal_connect(G_OBJECT(appdata.window), "focus-in-event",
2631                       G_CALLBACK(on_main_focus_change), &appdata);
2632    
2633      g_signal_connect(G_OBJECT(appdata.window), "focus-out-event",
2634                       G_CALLBACK(on_main_focus_change), &appdata);
2635    
2636    
2637    appdata.cur_view = gpxlist_create_view_and_model(&appdata, NULL);    appdata.cur_view = gpxlist_create_view_and_model(&appdata, NULL);
2638  #ifndef USE_STACKABLE_WINDOW  #ifndef USE_STACKABLE_WINDOW

Legend:
Removed from v.249  
changed lines
  Added in v.294