From 6f0bf4194b5521d7409f8159c98db92770cae996 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Fri, 16 May 2025 06:48:12 +0200 Subject: [PATCH] add Harmony patches for Telerik UI --- Pilz.UI.Telerik/Patches/Patches.cs | 11 ++++++ ...ListViewElement_FixStartEditingViaClick.cs | 34 +++++++++++++++++++ Pilz.UI.Telerik/Pilz.UI.Telerik.csproj | 3 ++ 3 files changed, 48 insertions(+) create mode 100644 Pilz.UI.Telerik/Patches/Patches.cs create mode 100644 Pilz.UI.Telerik/Patches/TelerikUiForWinForms/BaseListViewElement_FixStartEditingViaClick.cs 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