*/
void vik_window_statusbar_update ( VikWindow *vw, const gchar* message, vik_statusbar_type_t vs_type )
{
+ GThread *thread = vik_window_get_thread ( vw );
+ if ( !thread )
+ // Do nothing
+ return;
+
statusbar_idle_data *sid = g_malloc ( sizeof (statusbar_idle_data) );
sid->vs = vw->viking_vs;
sid->vs_type = vs_type;
sid->message = g_strdup ( message );
- if ( g_thread_self() == vik_window_get_thread ( vw ) ) {
+ if ( g_thread_self() == thread ) {
g_idle_add ( (GSourceFunc) statusbar_idle_update, sid );
}
else {
vik_statusbar_set_message ( vw->viking_vs, VIK_STATUSBAR_INFO, _("Trying to determine location...") );
- a_background_thread ( GTK_WINDOW(vw),
+ a_background_thread ( BACKGROUND_POOL_REMOTE,
+ GTK_WINDOW(vw),
_("Determining location"),
(vik_thr_func) determine_location_thread,
vw,
GtkWidget *aw = gtk_menu_get_active ( GTK_MENU (menushell) );
gint active = GPOINTER_TO_INT(g_object_get_data ( G_OBJECT (aw), "position" ));
- gdouble zoom_request = pow (2, active-2 );
+ gdouble zoom_request = pow (2, active-5 );
// But has it really changed?
gdouble current_zoom = vik_viewport_get_zoom ( vw->viking_vvp );
static GtkWidget *create_zoom_menu_all_levels ( gdouble mpp )
{
GtkWidget *menu = gtk_menu_new ();
- char *itemLabels[] = { "0.25", "0.5", "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", "1024", "2048", "4096", "8192", "16384", "32768" };
+ char *itemLabels[] = { "0.031", "0.063", "0.125", "0.25", "0.5", "1", "2", "4", "8", "16", "32", "64", "128", "256", "512", "1024", "2048", "4096", "8192", "16384", "32768" };
int i;
for (i = 0 ; i < G_N_ELEMENTS(itemLabels) ; i++)
g_object_set_data (G_OBJECT (item), "position", GINT_TO_POINTER(i));
}
- gint active = 2 + round ( log (mpp) / log (2) );
+ gint active = 5 + round ( log (mpp) / log (2) );
// Ensure value derived from mpp is in bounds of the menu
if ( active >= G_N_ELEMENTS(itemLabels) )
active = G_N_ELEMENTS(itemLabels) - 1;
return need_redraw;
}
+/**
+ * May return NULL if the window no longer exists
+ */
GThread *vik_window_get_thread ( VikWindow *vw )
{
- return vw->thread;
+ if ( vw )
+ return vw->thread;
+ return NULL;
}