static void trw_layer_copy_selected ( GtkWidget *tree_view ) { GtkTreeSelection *selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW(tree_view) ); // NB GTK3 has gtk_tree_view_get_n_columns() but we're GTK2 ATM GList *gl = gtk_tree_view_get_columns ( GTK_TREE_VIEW(tree_view) ); guint count = g_list_length ( gl ); g_list_free ( gl ); copy_data_t cd; cd.has_layer_names = (count > WPT_LIST_COLS-3); cd.str = g_string_new ( NULL ); gtk_tree_selection_selected_foreach ( selection, copy_selection, &cd ); a_clipboard_copy ( VIK_CLIPBOARD_DATA_TEXT, 0, 0, 0, cd.str->str, NULL ); g_string_free ( cd.str, TRUE ); }
/** * a_clipboard_copy_selected: * * Make a copy of selected object and associate ourselves with the clipboard. */ void a_clipboard_copy_selected ( VikLayersPanel *vlp ) { VikLayer *sel = vik_layers_panel_get_selected ( vlp ); GtkTreeIter iter; VikClipboardDataType type; guint16 layer_type = 0; gint subtype = 0; guint8 *data = NULL; guint len; const gchar *name = NULL; if ( ! sel ) return; vik_treeview_get_selected_iter ( sel->vt, &iter ); layer_type = sel->type; if ( vik_treeview_item_get_type ( sel->vt, &iter ) == VIK_TREEVIEW_TYPE_SUBLAYER ) { type = VIK_CLIPBOARD_DATA_SUBLAYER; if ( vik_layer_get_interface(layer_type)->copy_item) { subtype = vik_treeview_item_get_data(sel->vt, &iter); vik_layer_get_interface(layer_type)->copy_item(sel, subtype, vik_treeview_item_get_pointer(sel->vt, &iter), &data, &len ); // This name is used in setting the text representation of the item on the clipboard. name = vik_treeview_item_get_name(sel->vt, &iter); } } else { gint ilen; type = VIK_CLIPBOARD_DATA_LAYER; vik_layer_marshall ( sel, &data, &ilen ); len = ilen; name = vik_layer_get_name ( vik_treeview_item_get_pointer(sel->vt, &iter) ); } if (data) { a_clipboard_copy( type, layer_type, subtype, len, name, data); } }