Linux/mono ide fixes (#3330)
* Update CodeCompletionActions.cs Показ Code Completion Window по Ctrl-Space, если курсор находится сразу после точки (как сделано в Win версии). Текущее поведение - после точки ccw не показывать, только если курсор переместить на несколько символов вправо от точки. * [LIN][IDE] Update TextView.cs - fix GetVisualColumn with empty content На некоторых дистрибутивах Линукс (Убунту в частности) возникает ошибка времени выполнения IDE, Описываю действия - открываю сохраненную на диске программу, запускаю, закрываю, копирую текст программы и вставляю в новую вкладку, не сохраняя, запускаю и закрываю -- в логах пошли ошибки.. но такое не всегда происходит, иногда ошибок нет.. но похоже всё таки, что проявляется, когда есть вкладка с не сохраненным кодом. Причем интересно дефолтный каталог не сохраненной программы зависит от того, из какого каталога загружалась "сохраненная" программа, но не некий "по умолчанию". В результате иследований дошли до функции GetVisualColumn() которая подсчитывает количество столбцов текста в редактируемом документе на основе анализа графического отображения, но в случае если текст отсутствует (Document.Content == ""), на Linux/Mono происходит краш. Предлагаю избегать подсчёта столбцов при отсутствии текста, а сразу возвращать 9 (ноль) * [LIN][IDE] AssemblyResolveScope.cs -- fix OnAssemblyResolve event На некоторых дистрибутивах Linux (Ubuntu 22.04 в частности). При загрузке больших исходников, например GraphABC.pas или GraphABCHelper.pas в IDE на Linux/Mono могут перестать открываться новые вкладки редактора IDE и другие элементы интерфейса IDE. Было обнаружено, что в обработчик OnAssemblyResolve в этом случае приходит значиние поля входной переменной args.RequestingAssembly равное null. Это происходит по какой то причине и не всегда. Но если обрабатывать эту ситуацию, то IDE работает стабильно в этом случае.
This commit is contained in:
parent
9e4b2bcca9
commit
5996f4bbc2
|
|
@ -778,9 +778,10 @@ namespace ICSharpCode.TextEditor
|
||||||
public int GetVisualColumn(int logicalLine, int logicalColumn)
|
public int GetVisualColumn(int logicalLine, int logicalColumn)
|
||||||
{
|
{
|
||||||
int column = 0;
|
int column = 0;
|
||||||
using (Graphics g = textArea.CreateGraphics()) {
|
if (TextArea.Document.TextContent.Length > 0) //fix crush under linux after clear document content - no content = zero columns
|
||||||
CountColumns(ref column, 0, logicalColumn, logicalLine, g);
|
using (Graphics g = textArea.CreateGraphics()) {
|
||||||
}
|
CountColumns(ref column, 0, logicalColumn, logicalLine, g);
|
||||||
|
}
|
||||||
return column;
|
return column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -146,6 +146,8 @@ namespace PascalABCCompiler.NetHelper
|
||||||
|
|
||||||
private Assembly OnAssemblyResolve(object obj, ResolveEventArgs args)
|
private Assembly OnAssemblyResolve(object obj, ResolveEventArgs args)
|
||||||
{
|
{
|
||||||
|
if (args.RequestingAssembly == null) //fix Linux/Mono IDE missworking after loading a huge pas source such as GraphABC.pas or GraphABCHelper.pas
|
||||||
|
return null;
|
||||||
var requestedName = new AssemblyName(args.Name);
|
var requestedName = new AssemblyName(args.Name);
|
||||||
if (_assembliesByName.TryGetValue(requestedName.Name, out var assembly))
|
if (_assembliesByName.TryGetValue(requestedName.Name, out var assembly))
|
||||||
return assembly;
|
return assembly;
|
||||||
|
|
@ -177,4 +179,4 @@ namespace PascalABCCompiler.NetHelper
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue