#endif
#include "viking.h"
+#include "settings.h"
#include <string.h>
vik_layer_rename ( VIK_LAYER(vlp->toplayer), _("Top Layer"));
g_signal_connect_swapped ( G_OBJECT(vlp->toplayer), "update", G_CALLBACK(vik_layers_panel_emit_update), vlp );
- vik_treeview_add_layer ( vlp->vt, NULL, &(vlp->toplayer_iter), VIK_LAYER(vlp->toplayer)->name, NULL, TRUE, vlp->toplayer, VIK_LAYER_AGGREGATE, VIK_LAYER_AGGREGATE );
+ vik_treeview_add_layer ( vlp->vt, NULL, &(vlp->toplayer_iter), VIK_LAYER(vlp->toplayer)->name, NULL, TRUE, vlp->toplayer, VIK_LAYER_AGGREGATE, VIK_LAYER_AGGREGATE, 0 );
vik_layer_realize ( VIK_LAYER(vlp->toplayer), vlp->vt, &(vlp->toplayer_iter) );
g_signal_connect_swapped ( vlp->vt, "popup_menu", G_CALLBACK(menu_popup_cb), vlp);
void vik_layers_panel_emit_update ( VikLayersPanel *vlp )
{
+ GThread *thread = vik_window_get_thread (VIK_WINDOW(VIK_GTK_WINDOW_FROM_WIDGET(vlp)));
+ if ( !thread )
+ // Do nothing
+ return;
+
// Only ever draw when there is time to do so
- if ( g_thread_self() != vik_window_get_thread (VIK_WINDOW(VIK_GTK_WINDOW_FROM_WIDGET(vlp))) )
+ if ( g_thread_self() != thread )
// Drawing requested from another (background) thread, so handle via the gdk thread method
gdk_threads_add_idle ( (GSourceFunc) idle_draw_panel, vlp );
else
layers_popup ( vlp, NULL, 0 );
}
+#define VIK_SETTINGS_LAYERS_TRW_CREATE_DEFAULT "layers_create_trw_auto_default"
/**
* vik_layers_panel_new_layer:
* @type: type of the new layer
{
VikLayer *l;
g_assert ( vlp->vvp );
- l = vik_layer_create ( type, vlp->vvp, VIK_GTK_WINDOW_FROM_WIDGET(vlp), TRUE );
+ gboolean ask_user = FALSE;
+ if ( type == VIK_LAYER_TRW )
+ a_settings_get_boolean ( VIK_SETTINGS_LAYERS_TRW_CREATE_DEFAULT, &ask_user );
+ ask_user = !ask_user;
+ l = vik_layer_create ( type, vlp->vvp, ask_user );
if ( l )
{
vik_layers_panel_add_layer ( vlp, l );
a_clipboard_copy_selected ( vlp );
if (IS_VIK_AGGREGATE_LAYER(parent)) {
- if ( vik_aggregate_layer_delete ( parent, &iter ) )
- vik_layers_panel_emit_update ( vlp );
+
+ g_signal_emit ( G_OBJECT(vlp), layers_panel_signals[VLP_DELETE_LAYER_SIGNAL], 0 );
+
+ if ( vik_aggregate_layer_delete ( parent, &iter ) )
+ vik_layers_panel_emit_update ( vlp );
}
}
else