diff --git a/ShareX.HelpersLib/Helpers/ShortcutHelpers.cs b/ShareX.HelpersLib/Helpers/ShortcutHelpers.cs index fdf4bcce4..7d4377b9d 100644 --- a/ShareX.HelpersLib/Helpers/ShortcutHelpers.cs +++ b/ShareX.HelpersLib/Helpers/ShortcutHelpers.cs @@ -27,6 +27,7 @@ using Shell32; using System; using System.IO; +using System.Reflection; using File = System.IO.File; using Folder = Shell32.Folder; @@ -114,8 +115,9 @@ private static string GetShortcutTargetPath(string shortcutPath) try { - Shell shell = new ShellClass(); - Folder folder = shell.NameSpace(directory); + Type t = Type.GetTypeFromProgID("Shell.Application"); + object shell = Activator.CreateInstance(t); + Folder folder = (Folder)t.InvokeMember("NameSpace", BindingFlags.InvokeMethod, null, shell, new object[] { directory }); FolderItem folderItem = folder.ParseName(filename); if (folderItem != null) diff --git a/ShareX.HelpersLib/ShareX.HelpersLib.csproj b/ShareX.HelpersLib/ShareX.HelpersLib.csproj index 654478cb3..c71871a05 100644 --- a/ShareX.HelpersLib/ShareX.HelpersLib.csproj +++ b/ShareX.HelpersLib/ShareX.HelpersLib.csproj @@ -85,7 +85,7 @@ - ..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll diff --git a/ShareX.HelpersLib/packages.config b/ShareX.HelpersLib/packages.config index 3d1d4fc14..db032324b 100644 --- a/ShareX.HelpersLib/packages.config +++ b/ShareX.HelpersLib/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/ShareX.ImageEffectsLib/ShareX.ImageEffectsLib.csproj b/ShareX.ImageEffectsLib/ShareX.ImageEffectsLib.csproj index d669e325d..cc2e738c7 100644 --- a/ShareX.ImageEffectsLib/ShareX.ImageEffectsLib.csproj +++ b/ShareX.ImageEffectsLib/ShareX.ImageEffectsLib.csproj @@ -93,7 +93,7 @@ - ..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll diff --git a/ShareX.ImageEffectsLib/packages.config b/ShareX.ImageEffectsLib/packages.config index 3d1d4fc14..db032324b 100644 --- a/ShareX.ImageEffectsLib/packages.config +++ b/ShareX.ImageEffectsLib/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/ShareX.IndexerLib/ShareX.IndexerLib.csproj b/ShareX.IndexerLib/ShareX.IndexerLib.csproj index e06f2a7f5..5d7a7d256 100644 --- a/ShareX.IndexerLib/ShareX.IndexerLib.csproj +++ b/ShareX.IndexerLib/ShareX.IndexerLib.csproj @@ -66,7 +66,7 @@ - ..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll diff --git a/ShareX.IndexerLib/packages.config b/ShareX.IndexerLib/packages.config index 3d1d4fc14..db032324b 100644 --- a/ShareX.IndexerLib/packages.config +++ b/ShareX.IndexerLib/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/ShareX.NativeMessagingHost/ShareX.NativeMessagingHost.csproj b/ShareX.NativeMessagingHost/ShareX.NativeMessagingHost.csproj index 626044ba5..809aab2ac 100644 --- a/ShareX.NativeMessagingHost/ShareX.NativeMessagingHost.csproj +++ b/ShareX.NativeMessagingHost/ShareX.NativeMessagingHost.csproj @@ -41,7 +41,7 @@ - ..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll diff --git a/ShareX.NativeMessagingHost/packages.config b/ShareX.NativeMessagingHost/packages.config index 3d1d4fc14..db032324b 100644 --- a/ShareX.NativeMessagingHost/packages.config +++ b/ShareX.NativeMessagingHost/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/ShareX.ScreenCaptureLib/RegionHelpers/ButtonObject.cs b/ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorButton.cs similarity index 97% rename from ShareX.ScreenCaptureLib/RegionHelpers/ButtonObject.cs rename to ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorButton.cs index a9333ed77..dc5f62c48 100644 --- a/ShareX.ScreenCaptureLib/RegionHelpers/ButtonObject.cs +++ b/ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorButton.cs @@ -29,7 +29,7 @@ namespace ShareX.ScreenCaptureLib { - internal class ButtonObject : DrawableObject + internal class ImageEditorButton : ImageEditorControl { public string Text { get; set; } public Color ButtonColor { get; set; } diff --git a/ShareX.ScreenCaptureLib/RegionHelpers/DrawableObject.cs b/ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorControl.cs similarity index 98% rename from ShareX.ScreenCaptureLib/RegionHelpers/DrawableObject.cs rename to ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorControl.cs index a9a1deae6..b53d94bed 100644 --- a/ShareX.ScreenCaptureLib/RegionHelpers/DrawableObject.cs +++ b/ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorControl.cs @@ -29,7 +29,7 @@ namespace ShareX.ScreenCaptureLib { - internal abstract class DrawableObject + internal abstract class ImageEditorControl { public event MouseEventHandler MouseDown, MouseUp; public event Action MouseEnter, MouseLeave; diff --git a/ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorScrollBar.cs b/ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorScrollBar.cs index f01725a5b..e25c4b872 100644 --- a/ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorScrollBar.cs +++ b/ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorScrollBar.cs @@ -31,7 +31,7 @@ namespace ShareX.ScreenCaptureLib { - internal class ImageEditorScrollbar : DrawableObject + internal class ImageEditorScrollbar : ImageEditorControl { public Orientation Orientation { get; set; } public int Thickness { get; set; } = 15; diff --git a/ShareX.ScreenCaptureLib/RegionHelpers/ResizeNode.cs b/ShareX.ScreenCaptureLib/RegionHelpers/ResizeNode.cs index 6e39e1423..ba60f4c8b 100644 --- a/ShareX.ScreenCaptureLib/RegionHelpers/ResizeNode.cs +++ b/ShareX.ScreenCaptureLib/RegionHelpers/ResizeNode.cs @@ -28,7 +28,7 @@ namespace ShareX.ScreenCaptureLib { - internal class ResizeNode : DrawableObject + internal class ResizeNode : ImageEditorControl { public const int DefaultSize = 13; diff --git a/ShareX.ScreenCaptureLib/Shapes/Drawing/ImageFileDrawingShape.cs b/ShareX.ScreenCaptureLib/Shapes/Drawing/ImageFileDrawingShape.cs index 818788e51..c2d409a51 100644 --- a/ShareX.ScreenCaptureLib/Shapes/Drawing/ImageFileDrawingShape.cs +++ b/ShareX.ScreenCaptureLib/Shapes/Drawing/ImageFileDrawingShape.cs @@ -35,7 +35,7 @@ public override void OnCreating() Point pos = InputManager.ClientMousePosition; Rectangle = new Rectangle(pos.X, pos.Y, 1, 1); - if (Manager.IsCornerMoving && LoadImageFile(AnnotationOptions.LastImageFilePath, true)) + if (Manager.IsCtrlModifier && LoadImageFile(AnnotationOptions.LastImageFilePath, true)) { OnCreated(); Manager.IsMoving = true; diff --git a/ShareX.ScreenCaptureLib/Shapes/Drawing/StickerDrawingShape.cs b/ShareX.ScreenCaptureLib/Shapes/Drawing/StickerDrawingShape.cs index 3a8b1ba90..e89d70317 100644 --- a/ShareX.ScreenCaptureLib/Shapes/Drawing/StickerDrawingShape.cs +++ b/ShareX.ScreenCaptureLib/Shapes/Drawing/StickerDrawingShape.cs @@ -51,7 +51,7 @@ public override void OnCreating() Point pos = InputManager.ClientMousePosition; Rectangle = new Rectangle(pos.X, pos.Y, 1, 1); - if (Manager.IsCornerMoving && LoadSticker(AnnotationOptions.LastStickerPath, AnnotationOptions.StickerSize)) + if (Manager.IsCtrlModifier && LoadSticker(AnnotationOptions.LastStickerPath, AnnotationOptions.StickerSize)) { OnCreated(); Manager.IsMoving = true; diff --git a/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs b/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs index e3dbc29c0..7f8d80098 100644 --- a/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs +++ b/ShareX.ScreenCaptureLib/Shapes/ShapeManager.cs @@ -158,6 +158,7 @@ private set public bool IsPanning { get; set; } public bool IsResizing { get; set; } // Is holding Ctrl? + public bool IsCtrlModifier { get; private set; } public bool IsCornerMoving { get; private set; } // Is holding Shift? public bool IsProportionalResizing { get; private set; } @@ -178,7 +179,7 @@ private set public AnnotationOptions AnnotationOptions => Options.AnnotationOptions; - internal List DrawableObjects { get; private set; } + internal List DrawableObjects { get; private set; } internal ResizeNode[] ResizeNodes { get; private set; } private bool nodesVisible; @@ -229,7 +230,7 @@ public ShapeManager(RegionCaptureForm form) Form = form; Options = form.Options; - DrawableObjects = new List(); + DrawableObjects = new List(); ResizeNodes = new ResizeNode[9]; for (int i = 0; i < ResizeNodes.Length; i++) @@ -282,7 +283,7 @@ private void form_Shown(object sender, EventArgs e) private void form_LostFocus(object sender, EventArgs e) { - IsCornerMoving = IsProportionalResizing = IsSnapResizing = false; + ResetModifiers(); } private void form_MouseDown(object sender, MouseEventArgs e) @@ -410,7 +411,17 @@ private void form_KeyDown(object sender, KeyEventArgs e) switch (e.KeyCode) { case Keys.ControlKey: - IsCornerMoving = true; + if (!IsCtrlModifier && !IsCornerMoving) + { + if (IsCreating || IsResizing) + { + IsCornerMoving = true; + } + else + { + IsCtrlModifier = true; + } + } break; case Keys.ShiftKey: IsProportionalResizing = true; @@ -638,6 +649,7 @@ private void form_KeyUp(object sender, KeyEventArgs e) switch (e.KeyCode) { case Keys.ControlKey: + IsCtrlModifier = false; IsCornerMoving = false; break; case Keys.ShiftKey: @@ -856,7 +868,7 @@ private void EndPanning() internal void UpdateObjects() { - DrawableObject[] objects = DrawableObjects.OrderByDescending(x => x.Order).ToArray(); + ImageEditorControl[] objects = DrawableObjects.OrderByDescending(x => x.Order).ToArray(); Point position = InputManager.ClientMousePosition; @@ -864,7 +876,7 @@ internal void UpdateObjects() { for (int i = 0; i < objects.Length; i++) { - DrawableObject obj = objects[i]; + ImageEditorControl obj = objects[i]; if (obj.Visible) { @@ -895,7 +907,7 @@ internal void UpdateObjects() { if (InputManager.IsMouseReleased(MouseButtons.Left)) { - foreach (DrawableObject obj in objects) + foreach (ImageEditorControl obj in objects) { if (obj.IsDragging) { @@ -908,7 +920,7 @@ internal void UpdateObjects() internal void DrawObjects(Graphics g) { - foreach (DrawableObject obj in DrawableObjects) + foreach (ImageEditorControl obj in DrawableObjects) { if (obj.Visible) { @@ -1262,6 +1274,11 @@ private void DeleteAllShapes() DeselectCurrentShape(); } + private void ResetModifiers() + { + IsCtrlModifier = IsCornerMoving = IsProportionalResizing = IsSnapResizing = false; + } + private void ClearTools() { foreach (BaseTool tool in ToolShapes) @@ -1278,13 +1295,16 @@ public BaseShape GetIntersectShape() public BaseShape GetIntersectShape(Point position) { - for (int i = Shapes.Count - 1; i >= 0; i--) + if (!IsCtrlModifier) { - BaseShape shape = Shapes[i]; - - if (shape.ShapeType == CurrentTool && shape.Intersects(position)) + for (int i = Shapes.Count - 1; i >= 0; i--) { - return shape; + BaseShape shape = Shapes[i]; + + if (shape.ShapeType == CurrentTool && shape.Intersects(position)) + { + return shape; + } } } diff --git a/ShareX.ScreenCaptureLib/Shapes/Tool/CropTool.cs b/ShareX.ScreenCaptureLib/Shapes/Tool/CropTool.cs index 3c4d226e0..a00b95aa8 100644 --- a/ShareX.ScreenCaptureLib/Shapes/Tool/CropTool.cs +++ b/ShareX.ScreenCaptureLib/Shapes/Tool/CropTool.cs @@ -35,7 +35,7 @@ public class CropTool : BaseTool public override bool LimitRectangleToInsideCanvas { get; } = true; - private ButtonObject confirmButton, cancelButton; + private ImageEditorButton confirmButton, cancelButton; private Size buttonSize = new Size(80, 40); private int buttonOffset = 15; @@ -75,7 +75,7 @@ public override void OnDraw(Graphics g) public override void OnCreated() { - confirmButton = new ButtonObject() + confirmButton = new ImageEditorButton() { Text = "\u2714", ButtonColor = Color.ForestGreen, @@ -87,7 +87,7 @@ public override void OnCreated() confirmButton.MouseLeave += () => Manager.Form.SetDefaultCursor(); Manager.DrawableObjects.Add(confirmButton); - cancelButton = new ButtonObject() + cancelButton = new ImageEditorButton() { Text = "\u2716", ButtonColor = Color.FromArgb(227, 45, 45), diff --git a/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj b/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj index e44d7f68c..4c93f7b56 100644 --- a/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj +++ b/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj @@ -125,7 +125,7 @@ StickerPackForm.cs - + @@ -203,7 +203,7 @@ Resources.resx - + Form diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs index c33978bfa..3ce4d8d41 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs @@ -1793,8 +1793,6 @@ private void InitializeComponent() // cbFirebaseIsShort // resources.ApplyResources(this.cbFirebaseIsShort, "cbFirebaseIsShort"); - this.cbFirebaseIsShort.Checked = true; - this.cbFirebaseIsShort.CheckState = System.Windows.Forms.CheckState.Checked; this.cbFirebaseIsShort.Name = "cbFirebaseIsShort"; this.cbFirebaseIsShort.UseVisualStyleBackColor = true; this.cbFirebaseIsShort.CheckedChanged += new System.EventHandler(this.cbFirebaseIsShort_CheckedChanged); diff --git a/ShareX.UploadersLib/ShareX.UploadersLib.csproj b/ShareX.UploadersLib/ShareX.UploadersLib.csproj index 388730de2..d5f2b8a53 100644 --- a/ShareX.UploadersLib/ShareX.UploadersLib.csproj +++ b/ShareX.UploadersLib/ShareX.UploadersLib.csproj @@ -98,14 +98,14 @@ false - - ..\packages\FluentFTP.19.1.2\lib\net45\FluentFTP.dll + + ..\packages\FluentFTP.19.1.3\lib\net45\FluentFTP.dll - - ..\packages\MegaApiClient.1.6.3-master-409\lib\net46\MegaApiClient.dll + + ..\packages\MegaApiClient.1.6.3\lib\net46\MegaApiClient.dll - ..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll ..\packages\SSH.NET.2016.1.0\lib\net40\Renci.SshNet.dll @@ -115,6 +115,7 @@ + diff --git a/ShareX.UploadersLib/URLShorteners/FirebaseDynamicLinksURLShortener.cs b/ShareX.UploadersLib/URLShorteners/FirebaseDynamicLinksURLShortener.cs index 86442749b..c92abde9b 100644 --- a/ShareX.UploadersLib/URLShorteners/FirebaseDynamicLinksURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/FirebaseDynamicLinksURLShortener.cs @@ -1,11 +1,9 @@ /* https://github.com/matthewburnett */ using Newtonsoft.Json; -using ShareX.HelpersLib; using ShareX.UploadersLib.Properties; using System.Collections.Generic; using System.Drawing; -using System.Web; using System.Windows.Forms; namespace ShareX.UploadersLib.URLShorteners @@ -16,7 +14,7 @@ public class FirebaseDynamicLinksURLShortenerService : URLShortenerService public override Icon ServiceIcon => Resources.Firebase; - public override bool CheckConfig(UploadersConfig config) + public override bool CheckConfig(UploadersConfig config) { return !string.IsNullOrEmpty(config.FirebaseWebAPIKey) && !string.IsNullOrEmpty(config.FirebaseDynamicLinkDomain); } @@ -34,23 +32,29 @@ public override URLShortener CreateShortener(UploadersConfig config, TaskReferen public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpFirebaseDynamicLinks; } + public class FirebaseRequest + { + public DynamicLinkInfo dynamicLinkInfo { get; set; } + public Suffix suffix { get; set; } + } + + public class DynamicLinkInfo + { + public string dynamicLinkDomain { get; set; } + public string link { get; set; } + } + + public class Suffix + { + public string option { get; set; } + } + public class FirebaseResponse { public string shortLink { get; set; } public string previewLink { get; set; } } - public class FirebaseRequest - { - public string longDynamicLink { get; set; } - public FirebaseRequestSuffix suffix { get; set; } - } - - public class FirebaseRequestSuffix - { - public string option { get; set; } - } - public sealed class FirebaseDynamicLinksURLShortener : URLShortener { public string WebAPIKey { get; set; } @@ -61,9 +65,16 @@ public override UploadResult ShortenURL(string url) { UploadResult result = new UploadResult { URL = url }; - string RequestUrl = "https://firebasedynamiclinks.googleapis.com/v1/shortLinks"; - string longDynamicLink = URLHelpers.ForcePrefix(DynamicLinkDomain + ".app.goo.gl/?link=" + HttpUtility.UrlEncode(url)); - string option; + FirebaseRequest request = new FirebaseRequest + { + dynamicLinkInfo = new DynamicLinkInfo + { + dynamicLinkDomain = DynamicLinkDomain + ".app.goo.gl", + link = url + } + }; + + string requesturl = "https://firebasedynamiclinks.googleapis.com/v1/shortLinks"; Dictionary args = new Dictionary { @@ -72,24 +83,15 @@ public override UploadResult ShortenURL(string url) if (IsShort) { - option = "SHORT"; - } - else - { - option = "UNGUESSABLE"; - } - - FirebaseRequest request = new FirebaseRequest - { - longDynamicLink = longDynamicLink, - suffix = new FirebaseRequestSuffix + request.suffix = new Suffix { - option = option - } - }; + option = "SHORT" + }; + } - string json = JsonConvert.SerializeObject(request); - result.Response = SendRequest(HttpMethod.POST, RequestUrl, json, ContentTypeJSON, args); + string requestjson = JsonConvert.SerializeObject(request); + + result.Response = SendRequest(HttpMethod.POST, requesturl, requestjson, ContentTypeJSON, args); result.ShortenedURL = JsonConvert.DeserializeObject(result.Response).shortLink; return result; diff --git a/ShareX.UploadersLib/UploadersConfig.cs b/ShareX.UploadersLib/UploadersConfig.cs index 6b400a173..088b09c9e 100644 --- a/ShareX.UploadersLib/UploadersConfig.cs +++ b/ShareX.UploadersLib/UploadersConfig.cs @@ -441,7 +441,7 @@ public class UploadersConfig : SettingsBase public string FirebaseWebAPIKey = ""; public string FirebaseDynamicLinkDomain = ""; - public bool FirebaseIsShort = true; + public bool FirebaseIsShort = false; #endregion Firebase Dynamic Links diff --git a/ShareX.UploadersLib/packages.config b/ShareX.UploadersLib/packages.config index c25ab95f5..6baab03c6 100644 --- a/ShareX.UploadersLib/packages.config +++ b/ShareX.UploadersLib/packages.config @@ -1,7 +1,7 @@  - - - + + + \ No newline at end of file diff --git a/ShareX/ShareX.csproj b/ShareX/ShareX.csproj index 2f8ffdb56..cc8983585 100644 --- a/ShareX/ShareX.csproj +++ b/ShareX/ShareX.csproj @@ -98,7 +98,7 @@ - ..\packages\Newtonsoft.Json.11.0.1\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll diff --git a/ShareX/packages.config b/ShareX/packages.config index cbc11e28c..acb5c80d5 100644 --- a/ShareX/packages.config +++ b/ShareX/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file