diff --git a/Pilz.UI.Telerik/Patches/Patches.cs b/Pilz.UI.Telerik/Patches/Patches.cs new file mode 100644 index 0000000..aa29660 --- /dev/null +++ b/Pilz.UI.Telerik/Patches/Patches.cs @@ -0,0 +1,11 @@ +using HarmonyLib; + +namespace Pilz.UI.Telerik.Patches; + +public static class Patches +{ + public static void Initialize(Harmony harmony) + { + harmony.PatchAll(); + } +} diff --git a/Pilz.UI.Telerik/Patches/TelerikUiForWinForms/BaseListViewElement_FixStartEditingViaClick.cs b/Pilz.UI.Telerik/Patches/TelerikUiForWinForms/BaseListViewElement_FixStartEditingViaClick.cs new file mode 100644 index 0000000..7b6bbc4 --- /dev/null +++ b/Pilz.UI.Telerik/Patches/TelerikUiForWinForms/BaseListViewElement_FixStartEditingViaClick.cs @@ -0,0 +1,34 @@ +using HarmonyLib; +using Telerik.WinControls.UI; + +namespace Pilz.UI.Telerik.Patches.TelerikUiForWinForms; + +[HarmonyPatch(typeof(RadPictureBoxElement))] +[HarmonyPatch("PasteImage")] +public class RadPictureBoxElement_PasteImageFixes +{ + private static readonly Dictionary images = []; + + public static void Prefix(object __instance) + { + if (__instance is RadPictureBoxElement pb) + { + // Remember our image + images.Remove(pb); + images.Add(pb, pb.Image); + } + } + + public static void Postfix(object __instance) + { + if (__instance is RadPictureBoxElement pb && images.TryGetValue(pb, out var image) && pb.Image != image) + { + // Remove first to avoid conflicts on error + images.Remove(pb); + + // Call "OnImageLoaded" + var method = typeof(RadPictureBoxElement).GetMethod("OnImageLoaded", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); + method.Invoke(pb, null); + } + } +} diff --git a/Pilz.UI.Telerik/Pilz.UI.Telerik.csproj b/Pilz.UI.Telerik/Pilz.UI.Telerik.csproj index d844a24..6198e5f 100644 --- a/Pilz.UI.Telerik/Pilz.UI.Telerik.csproj +++ b/Pilz.UI.Telerik/Pilz.UI.Telerik.csproj @@ -14,6 +14,9 @@ + + all + all