mirror of
https://github.com/greenshot/greenshot
synced 2025-08-22 06:23:24 -07:00
Improve clipboard destination UX
- On clipboard notification click, open the editor - When the editor was opened from a clipboard CaptureMode, prompt to copy to clipboard on close - Add hero image to Windows 10 notifications with the screenshot preview
This commit is contained in:
parent
2b5e45e33e
commit
c1da72cc37
51 changed files with 331 additions and 125 deletions
|
@ -21,6 +21,7 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
|
@ -104,6 +105,38 @@ namespace Greenshot.Base.Core
|
|||
|
||||
public abstract ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails);
|
||||
|
||||
/// <summary>
|
||||
/// If a balloon tip is show for a taken capture, this handles the click on it
|
||||
/// </summary>
|
||||
/// <param name="e">SurfaceMessageEventArgs</param>
|
||||
public virtual void OnExportedNotificationClick(SurfaceMessageEventArgs e)
|
||||
{
|
||||
Log.Info(Designation + " Notification Clicked!");
|
||||
|
||||
var notifyIcon = SimpleServiceProvider.Current.GetInstance<NotifyIcon>();
|
||||
if (notifyIcon.Tag is not SurfaceMessageEventArgs eventArgs)
|
||||
{
|
||||
Log.Warn("OpenCaptureOnClick called without SurfaceMessageEventArgs");
|
||||
return;
|
||||
}
|
||||
|
||||
var surface = eventArgs.Surface;
|
||||
if (surface != null)
|
||||
{
|
||||
switch (eventArgs.MessageType)
|
||||
{
|
||||
case SurfaceMessageTyp.FileSaved:
|
||||
ExplorerHelper.OpenInExplorer(surface.LastSaveFullPath);
|
||||
break;
|
||||
case SurfaceMessageTyp.UploadedUri:
|
||||
Process.Start(surface.UploadUrl);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Log.DebugFormat("Deregistering the BalloonTipClicked");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A small helper method to perform some default destination actions, like inform the surface of the export
|
||||
/// </summary>
|
||||
|
@ -125,7 +158,7 @@ namespace Greenshot.Base.Core
|
|||
}
|
||||
else
|
||||
{
|
||||
surface.SendMessageEvent(this, SurfaceMessageTyp.Info, Language.GetFormattedString("exported_to", exportInformation.DestinationDescription));
|
||||
surface.SendMessageEvent(this, SurfaceMessageTyp.Exported, Language.GetFormattedString("exported_to", exportInformation.DestinationDescription));
|
||||
}
|
||||
|
||||
surface.Modified = false;
|
||||
|
|
|
@ -127,5 +127,11 @@ namespace Greenshot.Base.Interfaces
|
|||
/// <param name="captureDetails"></param>
|
||||
/// <returns>DestinationExportInformation with information, like if the destination has "exported" the capture</returns>
|
||||
ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails);
|
||||
|
||||
/// <summary>
|
||||
/// Executed when the user clicks on the exported notification
|
||||
/// </summary>
|
||||
/// <param name="e">Notification event args. <see cref="ISurface"/> may be disposed.</param>
|
||||
void OnExportedNotificationClick(SurfaceMessageEventArgs e);
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Greenshot.Base.Interfaces
|
||||
{
|
||||
|
@ -35,7 +36,8 @@ namespace Greenshot.Base.Interfaces
|
|||
/// <param name="timeout">TimeSpan</param>
|
||||
/// <param name="onClickAction">Action called if the user clicks the notification</param>
|
||||
/// <param name="onClosedAction">Action</param>
|
||||
void ShowWarningMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null);
|
||||
/// <param name="heroImage">Optional hero image (used only when supported by notification system)</param>
|
||||
void ShowWarningMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null, Image heroImage = null);
|
||||
|
||||
/// <summary>
|
||||
/// This will show an error message to the user
|
||||
|
@ -44,7 +46,8 @@ namespace Greenshot.Base.Interfaces
|
|||
/// <param name="timeout">TimeSpan</param>
|
||||
/// <param name="onClickAction">Action called if the user clicks the notification</param>
|
||||
/// <param name="onClosedAction">Action</param>
|
||||
void ShowErrorMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null);
|
||||
/// <param name="heroImage">Optional hero image (used only when supported by notification system)</param>
|
||||
void ShowErrorMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null, Image heroImage = null);
|
||||
|
||||
/// <summary>
|
||||
/// This will show an info message to the user
|
||||
|
@ -53,6 +56,7 @@ namespace Greenshot.Base.Interfaces
|
|||
/// <param name="timeout">TimeSpan</param>
|
||||
/// <param name="onClickAction">Action called if the user clicks the notification</param>
|
||||
/// <param name="onClosedAction">Action</param>
|
||||
void ShowInfoMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null);
|
||||
/// <param name="heroImage">Optional hero image (used only when supported by notification system)</param>
|
||||
void ShowInfoMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null, Image heroImage = null);
|
||||
}
|
||||
}
|
|
@ -20,13 +20,19 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Drawing;
|
||||
|
||||
namespace Greenshot.Base.Interfaces
|
||||
{
|
||||
public class SurfaceMessageEventArgs : EventArgs
|
||||
public sealed class SurfaceMessageEventArgs : EventArgs, IDisposable
|
||||
{
|
||||
public Image Image { get; set; }
|
||||
public SurfaceMessageTyp MessageType { get; set; }
|
||||
public string Message { get; set; }
|
||||
public ISurface Surface { get; set; }
|
||||
public void Dispose()
|
||||
{
|
||||
Image.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -25,7 +25,7 @@ namespace Greenshot.Base.Interfaces
|
|||
{
|
||||
FileSaved,
|
||||
Error,
|
||||
Info,
|
||||
Exported,
|
||||
UploadedUri
|
||||
}
|
||||
}
|
|
@ -37,6 +37,9 @@ namespace Greenshot.Editor.Configuration
|
|||
editor_clipboardfailed,
|
||||
editor_close_on_save,
|
||||
editor_close_on_save_title,
|
||||
editor_close_on_clipboard,
|
||||
editor_close_on_clipboard_title,
|
||||
editor_copyimagetoclipboard,
|
||||
editor_copytoclipboard,
|
||||
editor_cuttoclipboard,
|
||||
editor_deleteelement,
|
||||
|
|
|
@ -1134,9 +1134,9 @@ namespace Greenshot.Editor.Drawing
|
|||
public void SendMessageEvent(object source, SurfaceMessageTyp messageType, string message)
|
||||
{
|
||||
if (_surfaceMessage == null) return;
|
||||
|
||||
var eventArgs = new SurfaceMessageEventArgs
|
||||
{
|
||||
Image = GetImageForExport(),
|
||||
Message = message,
|
||||
MessageType = messageType,
|
||||
Surface = this
|
||||
|
|
|
@ -935,6 +935,8 @@ namespace Greenshot.Editor.Forms
|
|||
// Make sure the editor is visible
|
||||
WindowDetails.ToForeground(Handle);
|
||||
|
||||
bool saveToClipboard = _surface.CaptureDetails.CaptureMode == CaptureMode.Clipboard;
|
||||
|
||||
MessageBoxButtons buttons = MessageBoxButtons.YesNoCancel;
|
||||
// Dissallow "CANCEL" if the application needs to shutdown
|
||||
if (e.CloseReason == CloseReason.ApplicationExitCall || e.CloseReason == CloseReason.WindowsShutDown || e.CloseReason == CloseReason.TaskManagerClosing)
|
||||
|
@ -942,8 +944,12 @@ namespace Greenshot.Editor.Forms
|
|||
buttons = MessageBoxButtons.YesNo;
|
||||
}
|
||||
|
||||
DialogResult result = MessageBox.Show(Language.GetString(LangKey.editor_close_on_save), Language.GetString(LangKey.editor_close_on_save_title), buttons,
|
||||
DialogResult result = MessageBox.Show(
|
||||
Language.GetString(saveToClipboard ? LangKey.editor_close_on_clipboard : LangKey.editor_close_on_save),
|
||||
Language.GetString(saveToClipboard ? LangKey.editor_close_on_clipboard_title : LangKey.editor_close_on_save_title),
|
||||
buttons,
|
||||
MessageBoxIcon.Question);
|
||||
|
||||
if (result.Equals(DialogResult.Cancel))
|
||||
{
|
||||
e.Cancel = true;
|
||||
|
@ -951,8 +957,17 @@ namespace Greenshot.Editor.Forms
|
|||
}
|
||||
|
||||
if (result.Equals(DialogResult.Yes))
|
||||
{
|
||||
// If the user choose the clipboard as destination, just keep it also on close
|
||||
if (saveToClipboard)
|
||||
{
|
||||
BtnClipboardClick(sender, e);
|
||||
}
|
||||
else
|
||||
{
|
||||
BtnSaveClick(sender, e);
|
||||
}
|
||||
|
||||
// Check if the save was made, if not it was cancelled so we cancel the closing
|
||||
if (_surface.Modified)
|
||||
{
|
||||
|
|
|
@ -20,8 +20,10 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using Windows.Foundation.Collections;
|
||||
using Windows.Foundation.Metadata;
|
||||
using Windows.UI.Notifications;
|
||||
|
@ -41,7 +43,11 @@ namespace Greenshot.Plugin.Win10
|
|||
private static readonly ILog Log = LogManager.GetLogger(typeof(ToastNotificationService));
|
||||
private static readonly CoreConfiguration CoreConfiguration = IniConfig.GetIniSection<CoreConfiguration>();
|
||||
|
||||
private const string _heroImageFilePrefix = "hero-";
|
||||
private readonly string _imageFilePath;
|
||||
private readonly string _localAppData;
|
||||
private readonly ToastNotifierCompat _toastNotifier;
|
||||
private readonly SynchronizationContext _mainSynchronizationContext;
|
||||
|
||||
public ToastNotificationService()
|
||||
{
|
||||
|
@ -62,13 +68,21 @@ namespace Greenshot.Plugin.Win10
|
|||
Log.Info("Toast activated. Args: " + toastArgs.Argument);
|
||||
};
|
||||
|
||||
var localAppData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Greenshot");
|
||||
if (!Directory.Exists(localAppData))
|
||||
_toastNotifier = ToastNotificationManagerCompat.CreateToastNotifier();
|
||||
_mainSynchronizationContext = SynchronizationContext.Current;
|
||||
_localAppData = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Greenshot");
|
||||
if (!Directory.Exists(_localAppData))
|
||||
{
|
||||
Directory.CreateDirectory(localAppData);
|
||||
Directory.CreateDirectory(_localAppData);
|
||||
}
|
||||
|
||||
_imageFilePath = Path.Combine(localAppData, "greenshot.png");
|
||||
// Cleanup old hero images cache
|
||||
foreach (var heroImagePath in Directory.EnumerateFiles(_localAppData, $"{_heroImageFilePrefix}*", SearchOption.TopDirectoryOnly))
|
||||
{
|
||||
File.Delete(heroImagePath);
|
||||
}
|
||||
|
||||
_imageFilePath = Path.Combine(_localAppData, "greenshot.png");
|
||||
|
||||
if (File.Exists(_imageFilePath))
|
||||
{
|
||||
|
@ -86,7 +100,8 @@ namespace Greenshot.Plugin.Win10
|
|||
/// <param name="timeout">TimeSpan until the toast timeouts</param>
|
||||
/// <param name="onClickAction">Action called when clicked</param>
|
||||
/// <param name="onClosedAction">Action called when the toast is closed</param>
|
||||
private void ShowMessage(string message, TimeSpan? timeout = default, Action onClickAction = null, Action onClosedAction = null)
|
||||
/// <param name="heroImage"></param>
|
||||
private void ShowMessage(string message, TimeSpan? timeout = default, Action onClickAction = null, Action onClosedAction = null, Image heroImage = null)
|
||||
{
|
||||
// Do not inform the user if this is disabled
|
||||
if (!CoreConfiguration.ShowTrayNotification)
|
||||
|
@ -114,34 +129,57 @@ namespace Greenshot.Plugin.Win10
|
|||
try
|
||||
{
|
||||
// Generate the toast and send it off
|
||||
new ToastContentBuilder()
|
||||
var toastBuilder = new ToastContentBuilder();
|
||||
var heroImagePath = Path.Combine(_localAppData, $"{_heroImageFilePrefix}{Guid.NewGuid()}.jpeg");
|
||||
var heroImageUri = new Uri(heroImagePath).AbsoluteUri;
|
||||
|
||||
toastBuilder
|
||||
.AddArgument("ToastID", 100)
|
||||
// Inline image
|
||||
.AddText(message)
|
||||
.AddText(message);
|
||||
// Profile (app logo override) image
|
||||
//.AddAppLogoOverride(new Uri($@"file://{_imageFilePath}"), ToastGenericAppLogoCrop.None)
|
||||
.Show(toast =>
|
||||
{
|
||||
// Windows 10 first with 1903: ExpiresOnReboot = true
|
||||
toast.ExpirationTime = timeout.HasValue ? DateTimeOffset.Now.Add(timeout.Value) : (DateTimeOffset?)null;
|
||||
|
||||
void ToastActivatedHandler(ToastNotification toastNotification, object sender)
|
||||
if (heroImage != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
onClickAction?.Invoke();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Warn("Exception while handling the onclick action: ", ex);
|
||||
heroImage = heroImage.GetThumbnailImage(364, 180, () => false, IntPtr.Zero);
|
||||
|
||||
using var fileStream = new FileStream(heroImagePath, FileMode.CreateNew);
|
||||
heroImage.Save(fileStream, ImageFormat.Jpeg);
|
||||
toastBuilder.AddHeroImage(new Uri(heroImageUri, UriKind.Absolute));
|
||||
}
|
||||
|
||||
toastBuilder.Show(toast =>
|
||||
{
|
||||
void DisposeNotification()
|
||||
{
|
||||
if (onClickAction != null)
|
||||
{
|
||||
toast.Activated -= ToastActivatedHandler;
|
||||
}
|
||||
|
||||
if (onClickAction != null)
|
||||
toast.Dismissed -= ToastDismissedHandler;
|
||||
toast.Failed -= ToastOnFailed;
|
||||
|
||||
if (heroImage != null)
|
||||
{
|
||||
toast.Activated += ToastActivatedHandler;
|
||||
File.Delete(heroImagePath);
|
||||
}
|
||||
}
|
||||
|
||||
// Windows 10 first with 1903: ExpiresOnReboot = true
|
||||
toast.ExpirationTime = timeout.HasValue ? DateTimeOffset.Now.Add(timeout.Value) : null;
|
||||
|
||||
void ToastOnFailed(ToastNotification toastNotification, ToastFailedEventArgs args)
|
||||
{
|
||||
DisposeNotification();
|
||||
Log.WarnFormat("Failed to display a toast due to {0}", args.ErrorCode);
|
||||
Log.Debug(toastNotification.Content.GetXml());
|
||||
}
|
||||
|
||||
void ToastActivatedHandler(ToastNotification toastNotification, object sender)
|
||||
{
|
||||
DisposeNotification();
|
||||
InvokeAction(onClickAction);
|
||||
}
|
||||
|
||||
void ToastDismissedHandler(ToastNotification toastNotification, ToastDismissedEventArgs eventArgs)
|
||||
|
@ -152,25 +190,22 @@ namespace Greenshot.Plugin.Win10
|
|||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
onClosedAction?.Invoke();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Warn("Exception while handling the onClosed action: ", ex);
|
||||
DisposeNotification();
|
||||
|
||||
// Windows lets you Dismiss the notification two time, this is really odd
|
||||
// So we need to force the removal of the notification
|
||||
_mainSynchronizationContext.Post(ForceCloseNotification, toastNotification);
|
||||
|
||||
InvokeAction(onClosedAction);
|
||||
}
|
||||
|
||||
toast.Dismissed -= ToastDismissedHandler;
|
||||
// Remove the other handler too
|
||||
toast.Activated -= ToastActivatedHandler;
|
||||
toast.Failed -= ToastOnFailed;
|
||||
if (onClickAction != null)
|
||||
{
|
||||
toast.Activated += ToastActivatedHandler;
|
||||
}
|
||||
|
||||
toast.Dismissed += ToastDismissedHandler;
|
||||
toast.Failed += ToastOnFailed;
|
||||
});
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -178,25 +213,19 @@ namespace Greenshot.Plugin.Win10
|
|||
}
|
||||
}
|
||||
|
||||
private void ToastOnFailed(ToastNotification sender, ToastFailedEventArgs args)
|
||||
public void ShowWarningMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null, Image heroImage = null)
|
||||
{
|
||||
Log.WarnFormat("Failed to display a toast due to {0}", args.ErrorCode);
|
||||
Log.Debug(sender.Content.GetXml());
|
||||
ShowMessage(message, timeout, onClickAction, onClosedAction, heroImage);
|
||||
}
|
||||
|
||||
public void ShowWarningMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null)
|
||||
public void ShowErrorMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null, Image heroImage = null)
|
||||
{
|
||||
ShowMessage(message, timeout, onClickAction, onClosedAction);
|
||||
ShowMessage(message, timeout, onClickAction, onClosedAction, heroImage);
|
||||
}
|
||||
|
||||
public void ShowErrorMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null)
|
||||
public void ShowInfoMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null, Image heroImage = null)
|
||||
{
|
||||
ShowMessage(message, timeout, onClickAction, onClosedAction);
|
||||
}
|
||||
|
||||
public void ShowInfoMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null)
|
||||
{
|
||||
ShowMessage(message, timeout, onClickAction, onClosedAction);
|
||||
ShowMessage(message, timeout, onClickAction, onClosedAction, heroImage);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -214,5 +243,30 @@ namespace Greenshot.Plugin.Win10
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void ForceCloseNotification(object state)
|
||||
{
|
||||
_toastNotifier.Hide((ToastNotification)state);
|
||||
}
|
||||
|
||||
private void InvokeAction(Action action)
|
||||
{
|
||||
if (action != null)
|
||||
{
|
||||
_mainSynchronizationContext.Post(InternalInvokeAction, action);
|
||||
}
|
||||
}
|
||||
|
||||
private void InternalInvokeAction(object state)
|
||||
{
|
||||
try
|
||||
{
|
||||
((Action)state).Invoke();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Warn("Exception while handling the onClosed action: ", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -26,6 +26,9 @@ using Greenshot.Base;
|
|||
using Greenshot.Base.Core;
|
||||
using Greenshot.Base.Interfaces;
|
||||
using Greenshot.Configuration;
|
||||
using Greenshot.Editor.Destinations;
|
||||
using Greenshot.Editor.Drawing;
|
||||
using log4net;
|
||||
|
||||
namespace Greenshot.Destinations
|
||||
{
|
||||
|
@ -34,6 +37,8 @@ namespace Greenshot.Destinations
|
|||
/// </summary>
|
||||
public class ClipboardDestination : AbstractDestination
|
||||
{
|
||||
private static readonly ILog Log = LogManager.GetLogger(typeof(ClipboardDestination));
|
||||
|
||||
public override string Designation => nameof(WellKnownDestinations.Clipboard);
|
||||
|
||||
public override string Description
|
||||
|
@ -73,5 +78,15 @@ namespace Greenshot.Destinations
|
|||
ProcessExport(exportInformation, surface);
|
||||
return exportInformation;
|
||||
}
|
||||
|
||||
public override void OnExportedNotificationClick(SurfaceMessageEventArgs e)
|
||||
{
|
||||
Log.Info(Designation + " Notification Clicked!");
|
||||
|
||||
var surface = new Surface((Image)e.Image.Clone()) { CaptureDetails = new CaptureDetails { CaptureMode = CaptureMode.Clipboard } };
|
||||
|
||||
DestinationHelper.GetDestination(EditorDestination.DESIGNATION)
|
||||
.ExportCapture(true, surface, new CaptureDetails { CaptureMode = CaptureMode.Clipboard });
|
||||
}
|
||||
}
|
||||
}
|
|
@ -611,36 +611,6 @@ namespace Greenshot.Helpers
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If a balloon tip is show for a taken capture, this handles the click on it
|
||||
/// </summary>
|
||||
/// <param name="e">SurfaceMessageEventArgs</param>
|
||||
private void OpenCaptureOnClick(SurfaceMessageEventArgs e)
|
||||
{
|
||||
var notifyIcon = SimpleServiceProvider.Current.GetInstance<NotifyIcon>();
|
||||
if (notifyIcon.Tag is not SurfaceMessageEventArgs eventArgs)
|
||||
{
|
||||
Log.Warn("OpenCaptureOnClick called without SurfaceMessageEventArgs");
|
||||
return;
|
||||
}
|
||||
|
||||
ISurface surface = eventArgs.Surface;
|
||||
if (surface != null)
|
||||
{
|
||||
switch (eventArgs.MessageType)
|
||||
{
|
||||
case SurfaceMessageTyp.FileSaved:
|
||||
ExplorerHelper.OpenInExplorer(surface.LastSaveFullPath);
|
||||
break;
|
||||
case SurfaceMessageTyp.UploadedUri:
|
||||
Process.Start(surface.UploadUrl);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Log.DebugFormat("Deregistering the BalloonTipClicked");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This is the SurfaceMessageEvent receiver
|
||||
/// </summary>
|
||||
|
@ -653,19 +623,26 @@ namespace Greenshot.Helpers
|
|||
return;
|
||||
}
|
||||
|
||||
var destination = (IDestination)sender;
|
||||
var notifyIconClassicMessageHandler = SimpleServiceProvider.Current.GetInstance<INotificationService>();
|
||||
switch (eventArgs.MessageType)
|
||||
{
|
||||
case SurfaceMessageTyp.Error:
|
||||
notifyIconClassicMessageHandler.ShowErrorMessage(eventArgs.Message, TimeSpan.FromHours(1));
|
||||
eventArgs.Dispose();
|
||||
break;
|
||||
case SurfaceMessageTyp.Info:
|
||||
notifyIconClassicMessageHandler.ShowInfoMessage(eventArgs.Message, TimeSpan.FromHours(1), () => { Log.Info("Clicked!"); });
|
||||
break;
|
||||
case SurfaceMessageTyp.FileSaved:
|
||||
case SurfaceMessageTyp.UploadedUri:
|
||||
default:
|
||||
// Show a balloon and register an event handler to open the "capture" for if someone clicks the balloon.
|
||||
notifyIconClassicMessageHandler.ShowInfoMessage(eventArgs.Message, TimeSpan.FromHours(1), () => OpenCaptureOnClick(eventArgs));
|
||||
notifyIconClassicMessageHandler.ShowInfoMessage(
|
||||
eventArgs.Message,
|
||||
TimeSpan.FromHours(1),
|
||||
() =>
|
||||
{
|
||||
destination.OnExportedNotificationClick(eventArgs);
|
||||
eventArgs.Dispose();
|
||||
},
|
||||
eventArgs.Dispose,
|
||||
eventArgs.Image);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
using Greenshot.Base.Core;
|
||||
using Greenshot.Base.IniFile;
|
||||
|
@ -36,10 +38,12 @@ namespace Greenshot.Helpers
|
|||
private static readonly ILog Log = LogManager.GetLogger(typeof(NotifyIconNotificationService));
|
||||
private static readonly CoreConfiguration CoreConfiguration = IniConfig.GetIniSection<CoreConfiguration>();
|
||||
private readonly NotifyIcon _notifyIcon;
|
||||
private readonly SynchronizationContext _mainSynchronizationContext;
|
||||
|
||||
public NotifyIconNotificationService()
|
||||
{
|
||||
_notifyIcon = SimpleServiceProvider.Current.GetInstance<NotifyIcon>();
|
||||
_mainSynchronizationContext = SynchronizationContext.Current;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -49,7 +53,7 @@ namespace Greenshot.Helpers
|
|||
/// <param name="timeout">TimeSpan</param>
|
||||
/// <param name="onClickAction">Action called if the user clicks the notification</param>
|
||||
/// <param name="onClosedAction">Action</param>
|
||||
public void ShowWarningMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null)
|
||||
public void ShowWarningMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null, Image heroImage = null)
|
||||
{
|
||||
ShowMessage(message, timeout, ToolTipIcon.Warning, onClickAction, onClosedAction);
|
||||
}
|
||||
|
@ -61,7 +65,7 @@ namespace Greenshot.Helpers
|
|||
/// <param name="timeout">TimeSpan</param>
|
||||
/// <param name="onClickAction">Action called if the user clicks the notification</param>
|
||||
/// <param name="onClosedAction">Action</param>
|
||||
public void ShowErrorMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null)
|
||||
public void ShowErrorMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null, Image heroImage = null)
|
||||
{
|
||||
ShowMessage(message, timeout, ToolTipIcon.Error, onClickAction, onClosedAction);
|
||||
}
|
||||
|
@ -73,7 +77,7 @@ namespace Greenshot.Helpers
|
|||
/// <param name="timeout">TimeSpan</param>
|
||||
/// <param name="onClickAction">Action called if the user clicks the notification</param>
|
||||
/// <param name="onClosedAction">Action</param>
|
||||
public void ShowInfoMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null)
|
||||
public void ShowInfoMessage(string message, TimeSpan? timeout = null, Action onClickAction = null, Action onClosedAction = null, Image heroImage = null)
|
||||
{
|
||||
ShowMessage(message, timeout, ToolTipIcon.Info, onClickAction, onClosedAction);
|
||||
}
|
||||
|
@ -94,43 +98,54 @@ namespace Greenshot.Helpers
|
|||
return;
|
||||
}
|
||||
|
||||
void BalloonClickedHandler(object s, EventArgs e)
|
||||
void DisposeBalloon()
|
||||
{
|
||||
try
|
||||
_notifyIcon.BalloonTipClosed -= BalloonClosedHandler;
|
||||
if (onClickAction != null)
|
||||
{
|
||||
onClickAction?.Invoke();
|
||||
_notifyIcon.BalloonTipClicked -= BalloonClickedHandler;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Warn("Exception while handling the onclick action: ", ex);
|
||||
}
|
||||
|
||||
_notifyIcon.BalloonTipClicked -= BalloonClickedHandler;
|
||||
void BalloonClickedHandler(object s, EventArgs e)
|
||||
{
|
||||
DisposeBalloon();
|
||||
InvokeAction(onClickAction);
|
||||
}
|
||||
|
||||
void BalloonClosedHandler(object s, EventArgs e)
|
||||
{
|
||||
DisposeBalloon();
|
||||
InvokeAction(onClosedAction);
|
||||
}
|
||||
|
||||
if (onClickAction != null)
|
||||
{
|
||||
_notifyIcon.BalloonTipClicked += BalloonClickedHandler;
|
||||
}
|
||||
_notifyIcon.BalloonTipClosed += BalloonClosedHandler;
|
||||
|
||||
void BalloonClosedHandler(object s, EventArgs e)
|
||||
_notifyIcon.ShowBalloonTip(timeout.HasValue ? (int) timeout.Value.TotalMilliseconds : 5000, @"Greenshot", message, level);
|
||||
}
|
||||
|
||||
private void InvokeAction(Action action)
|
||||
{
|
||||
if (action != null)
|
||||
{
|
||||
_mainSynchronizationContext.Post(InternalInvokeAction, action);
|
||||
}
|
||||
}
|
||||
|
||||
private void InternalInvokeAction(object state)
|
||||
{
|
||||
try
|
||||
{
|
||||
onClosedAction?.Invoke();
|
||||
((Action)state).Invoke();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Warn("Exception while handling the onClosed action: ", ex);
|
||||
}
|
||||
|
||||
_notifyIcon.BalloonTipClosed -= BalloonClosedHandler;
|
||||
// Remove the other handler too
|
||||
_notifyIcon.BalloonTipClicked -= BalloonClickedHandler;
|
||||
}
|
||||
|
||||
_notifyIcon.BalloonTipClosed += BalloonClosedHandler;
|
||||
_notifyIcon.ShowBalloonTip(timeout.HasValue ? (int) timeout.Value.TotalMilliseconds : 5000, @"Greenshot", message, level);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -57,6 +57,8 @@
|
|||
<resource name="editor_close">اغلق</resource>
|
||||
<resource name="editor_close_on_save">هل تريد حفظ اللقطة?</resource>
|
||||
<resource name="editor_close_on_save_title">حفظ الصورة?</resource>
|
||||
<resource name="editor_close_on_clipboard">هل تريد نسخ الصورة إلى الحافظة؟</resource>
|
||||
<resource name="editor_close_on_clipboard_title">نسخ الصورة إلى الحافظة؟</resource>
|
||||
<resource name="editor_confirm">تأكيد</resource>
|
||||
<resource name="editor_copyimagetoclipboard">انسخ الصورة للذاكرة</resource>
|
||||
<resource name="editor_copypathtoclipboard">انسخ المسار الي الذاكرة</resource>
|
||||
|
|
|
@ -87,6 +87,8 @@ Abans de crear un nou informe d'error, us agrairem que comproveu que l'error no
|
|||
<resource name="editor_close">Tanca</resource>
|
||||
<resource name="editor_close_on_save">Voleu desar la captura?</resource>
|
||||
<resource name="editor_close_on_save_title">Voleu desar la imatge?</resource>
|
||||
<resource name="editor_close_on_clipboard">Voleu copiar la imatge al porta-retalls?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Voleu copiar la imatge al porta-retalls?</resource>
|
||||
<resource name="editor_confirm">Confirma</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Copia la imatge al porta-retalls</resource>
|
||||
<resource name="editor_copypathtoclipboard">Copia el camí al porta-retalls</resource>
|
||||
|
|
|
@ -88,6 +88,8 @@ Také bychom velmi ocenili, kdybyste zkontrolovali, zda tato chyba již není ev
|
|||
<resource name="editor_close">Zavřít</resource>
|
||||
<resource name="editor_close_on_save">Chcete uložit snímek?</resource>
|
||||
<resource name="editor_close_on_save_title">Uložit snímek?</resource>
|
||||
<resource name="editor_close_on_clipboard">Chcete obrázek zkopírovat do schránky?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Kopírovat obrázek do schránky?</resource>
|
||||
<resource name="editor_confirm">Potvrdit</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Kopírovat obrázek do schránky</resource>
|
||||
<resource name="editor_copypathtoclipboard">Kopírovat cestu do schránky</resource>
|
||||
|
|
|
@ -502,6 +502,8 @@ tidspunktet, fx 11_58_32 (plus filendelsen angivet i indstillingerne).
|
|||
<resource name="editor_close_on_save_title">
|
||||
Gem billede?
|
||||
</resource>
|
||||
<resource name="editor_close_on_clipboard">Vil du kopiere billedet til udklipsholderen?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Vil du kopiere billedet til udklipsholderen?</resource>
|
||||
<resource name="settings_capture_windows_interactive">
|
||||
Brug interaktiv vinduesklip-tilstand
|
||||
</resource>
|
||||
|
|
|
@ -88,6 +88,8 @@ schnell zu finden. Vielen Dank :)</resource>
|
|||
<resource name="editor_close">Schließen</resource>
|
||||
<resource name="editor_close_on_save">Möchten Sie den Screenshot speichern?</resource>
|
||||
<resource name="editor_close_on_save_title">Bild speichern?</resource>
|
||||
<resource name="editor_close_on_clipboard">Möchten Sie das Bild in die Zwischenablage kopieren?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Bild in die Zwischenablage kopieren?</resource>
|
||||
<resource name="editor_confirm">Bestätigen</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Grafik in die Zwischenablage kopieren</resource>
|
||||
<resource name="editor_copypathtoclipboard">Pfad in Zwischenablage kopieren</resource>
|
||||
|
|
|
@ -83,6 +83,8 @@ Dangschee, wassd scho :)</resource>
|
|||
<resource name="editor_close">Wech!</resource>
|
||||
<resource name="editor_close_on_save">Moggsd dei Gschmarri ned schbeichern?</resource>
|
||||
<resource name="editor_close_on_save_title">Bild schbeichern?</resource>
|
||||
<resource name="editor_close_on_clipboard">Möchten Sie das Bild in die Zwischenablage kopieren?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Bild in die Zwischenablage kopieren?</resource>
|
||||
<resource name="editor_confirm">Fei wärgli!</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Grafig in däi Zwischnblach nei</resource>
|
||||
<resource name="editor_copypathtoclipboard">Bfad in däi Zwischnblach nei</resource>
|
||||
|
|
|
@ -88,6 +88,8 @@
|
|||
<resource name="editor_close">Κλείσιμο</resource>
|
||||
<resource name="editor_close_on_save">Θέλετε να αποθηκεύσετε το στιγμιότυπο οθόνης;</resource>
|
||||
<resource name="editor_close_on_save_title">Αποθήκευση εικόνας;</resource>
|
||||
<resource name="editor_close_on_clipboard">Θέλετε να αντιγράψετε την εικόνα στο πρόχειρο;</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Αντιγραφή εικόνας στο πρόχειρο;</resource>
|
||||
<resource name="editor_confirm">Επιβεβαίωση</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Αντιγραφή εικόνας στο πρόχειρο</resource>
|
||||
<resource name="editor_copypathtoclipboard">Αντιγραφή της θέσης του αρχείου στο πρόχειρο</resource>
|
||||
|
|
|
@ -89,6 +89,8 @@ Also, we would highly appreciate if you checked whether a tracker item already e
|
|||
<resource name="editor_close">Close</resource>
|
||||
<resource name="editor_close_on_save">Do you want to save the screenshot?</resource>
|
||||
<resource name="editor_close_on_save_title">Save image?</resource>
|
||||
<resource name="editor_close_on_clipboard">Do you want to copy the image to the clipboard?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Copy image to clipboard?</resource>
|
||||
<resource name="editor_confirm">Confirm</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Copy image to clipboard</resource>
|
||||
<resource name="editor_copypathtoclipboard">Copy path to clipboard</resource>
|
||||
|
|
|
@ -75,6 +75,8 @@ Antes de crear un nuevo informe de error, te agradeceríamos que comprobaras que
|
|||
<resource name="editor_close">Cerrar</resource>
|
||||
<resource name="editor_close_on_save">¿Guardar la captura?</resource>
|
||||
<resource name="editor_close_on_save_title">¿Guardar imagen?</resource>
|
||||
<resource name="editor_close_on_clipboard">¿Quieres copiar la imagen al portapapeles?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">¿Copiar imagen al portapapeles?</resource>
|
||||
<resource name="editor_confirm">Confirmar</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Copiar imagen al portapapeles</resource>
|
||||
<resource name="editor_copypathtoclipboard">Copiar ruta al portapapeles</resource>
|
||||
|
|
|
@ -87,6 +87,8 @@ Me oleksime väga tänulik, kui te enne kontrolliksite, ega sellest veast pole j
|
|||
<resource name="editor_close">Sulge</resource>
|
||||
<resource name="editor_close_on_save">Kas te tahate salvestada kuvatõmmist?</resource>
|
||||
<resource name="editor_close_on_save_title">Salvestage pilt?</resource>
|
||||
<resource name="editor_close_on_clipboard">Kas soovite pildi lõikelauale kopeerida?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Kas kopeerida pilt lõikelauale?</resource>
|
||||
<resource name="editor_confirm">Kinnitan</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Kopeerige pilt lõikelauale</resource>
|
||||
<resource name="editor_copypathtoclipboard">Kopeerige asukoht lõikelauale</resource>
|
||||
|
|
|
@ -61,6 +61,8 @@ Could not save Greenshot's configuration file. Please check access permissions f
|
|||
<resource name="editor_close">ببند</resource>
|
||||
<resource name="editor_close_on_save">تصویر ذخیره شود؟</resource>
|
||||
<resource name="editor_close_on_save_title">تصویر ذخیره شود؟</resource>
|
||||
<resource name="editor_close_on_clipboard">آیا می خواهید تصویر را در کلیپ بورد کپی کنید؟</resource>
|
||||
<resource name="editor_close_on_clipboard_title">تصویر در کلیپ بورد کپی شود؟</resource>
|
||||
<resource name="editor_confirm">تایید</resource>
|
||||
<resource name="editor_copyimagetoclipboard">ذخیره سازی در حافظه موقت</resource>
|
||||
<resource name="editor_copypathtoclipboard">ذخیره مسیر در حافظه موقت</resource>
|
||||
|
|
|
@ -57,6 +57,8 @@ Olisi myös hyvä jos voisit tarkistaa onko virhe jo raportoitu aikaisemmin (voi
|
|||
<resource name="editor_close">Sulje</resource>
|
||||
<resource name="editor_close_on_save">Tallennetaanko kuva?</resource>
|
||||
<resource name="editor_close_on_save_title">Tallennetaanko?</resource>
|
||||
<resource name="editor_close_on_clipboard">Haluatko kopioida kuvan leikepöydälle?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Kopioidaanko kuva leikepöydälle?</resource>
|
||||
<resource name="editor_confirm">Hyväksy</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Kopioi kuva leikepöydälle</resource>
|
||||
<resource name="editor_copypathtoclipboard">Kopioi tiedostopolku leikepöydälle</resource>
|
||||
|
|
|
@ -87,6 +87,8 @@ De plus, nous apprécierions beaucoup que vous preniez la peine de vérifier si
|
|||
<resource name="editor_close">Fermer</resource>
|
||||
<resource name="editor_close_on_save">Voulez-vous enregistrer la capture d'écran ?</resource>
|
||||
<resource name="editor_close_on_save_title">Enregistrer l'image ?</resource>
|
||||
<resource name="editor_close_on_clipboard">Voulez-vous copier l'image dans le presse-papier ?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Copier l'image dans le presse-papier ?</resource>
|
||||
<resource name="editor_confirm">Confirmer</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Copier l'image vers le presse-papier</resource>
|
||||
<resource name="editor_copypathtoclipboard">Copier le chemin vers le presse-papier</resource>
|
||||
|
|
|
@ -73,6 +73,8 @@ De plus, nous apprécierions beaucoup que vous preniez la peine de vérifier si
|
|||
<resource name="editor_close">Fermer</resource>
|
||||
<resource name="editor_close_on_save">Voulez-vous sauvegarder la capture d'écran ?</resource>
|
||||
<resource name="editor_close_on_save_title">Sauvegarder l'image ?</resource>
|
||||
<resource name="editor_close_on_clipboard">Voulez-vous copier l'image dans le presse-papier ?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Copier l'image dans le presse-papier ?</resource>
|
||||
<resource name="editor_confirm">Confirmer</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Copier l'image vers le presse-papier</resource>
|
||||
<resource name="editor_copypathtoclipboard">Copier le chemin vers le presse-papier</resource>
|
||||
|
|
|
@ -58,6 +58,8 @@ Details about the GNU General Public License:</resource>
|
|||
<resource name="editor_close">סגור</resource>
|
||||
<resource name="editor_close_on_save">? האם ברצונך לשמור את תמונת הלכידה</resource>
|
||||
<resource name="editor_close_on_save_title">? שמור תמונה</resource>
|
||||
<resource name="editor_close_on_clipboard">האם ברצונך להעתיק את התמונה ללוח?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">להעתיק תמונה ללוח?</resource>
|
||||
<resource name="editor_confirm">אישור</resource>
|
||||
<resource name="editor_copyimagetoclipboard">העתקת תמונה אל הלוח</resource>
|
||||
<resource name="editor_copypathtoclipboard">העתק נתיב אל הלוח</resource>
|
||||
|
|
|
@ -58,6 +58,8 @@ Kérjük adjon összefoglaló leírást és csatoljon minden olyan információt
|
|||
<resource name="editor_close">Bezárni</resource>
|
||||
<resource name="editor_close_on_save">Szeretné menteni a képernyőképet?</resource>
|
||||
<resource name="editor_close_on_save_title">Menti a képet?</resource>
|
||||
<resource name="editor_close_on_clipboard">A vágólapra szeretné másolni a képet?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Másolja a képet a vágólapra?</resource>
|
||||
<resource name="editor_confirm">Alkalmaz</resource>
|
||||
<resource name="editor_copyimagetoclipboard">A kép másolása a vágólapra</resource>
|
||||
<resource name="editor_copypathtoclipboard">Másolja a vágólapra</resource>
|
||||
|
|
|
@ -87,6 +87,8 @@ Juga, kami sangat terbantu apabila anda mengecek laporan lain yang sama dengan k
|
|||
<resource name="editor_close">Tutup</resource>
|
||||
<resource name="editor_close_on_save">Apakah anda ingin menyimpan layar yang tertangkap?</resource>
|
||||
<resource name="editor_close_on_save_title">Simpan gambar?</resource>
|
||||
<resource name="editor_close_on_clipboard">Apakah Anda ingin menyalin gambar ke papan klip?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Salin gambar ke papan klip?</resource>
|
||||
<resource name="editor_confirm">Konfirmasi</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Kopi gambar ke papan klip</resource>
|
||||
<resource name="editor_copypathtoclipboard">Kopi jalur ke papan klip</resource>
|
||||
|
|
|
@ -93,6 +93,8 @@ Controlla i permessi di accesso per '{0}'.</resource>
|
|||
<resource name="editor_close">Chiudi</resource>
|
||||
<resource name="editor_close_on_save">Vuoi salvare l'immagine?</resource>
|
||||
<resource name="editor_close_on_save_title">Vuoi salvare l'immagine?</resource>
|
||||
<resource name="editor_close_on_clipboard">Vuoi copiare l'immagine negli appunti?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Vuoi copiare l'immagine negli appunti?</resource>
|
||||
<resource name="editor_confirm">Conferma</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Copia immagine negli Appunti</resource>
|
||||
<resource name="editor_copypathtoclipboard">Copia percorso negli appunti</resource>
|
||||
|
|
|
@ -86,6 +86,8 @@ Greenshot には一切の保障がありません。GNU General Public License
|
|||
<resource name="editor_close">閉じる</resource>
|
||||
<resource name="editor_close_on_save">スクリーンショットを保存しますか?</resource>
|
||||
<resource name="editor_close_on_save_title">画像保存の確認</resource>
|
||||
<resource name="editor_close_on_clipboard">画像をクリップボードにコピーしますか?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">画像をクリップボードにコピーしますか?</resource>
|
||||
<resource name="editor_confirm">チェック</resource>
|
||||
<resource name="editor_copyimagetoclipboard">画像をクリップボードにコピー</resource>
|
||||
<resource name="editor_copypathtoclipboard">パスをクリップボードにコピー</resource>
|
||||
|
|
|
@ -87,6 +87,8 @@ Rnu ɣur-s, nḥemmel aṭas ma yella tesneqdeḍ aneqqis igebren ugur-agi. (Tze
|
|||
<resource name="editor_close">Mdel</resource>
|
||||
<resource name="editor_close_on_save">Tebɣiḍ ad teselkseḍ tuṭṭfa n ugdil?</resource>
|
||||
<resource name="editor_close_on_save_title">Sekles tugna?</resource>
|
||||
<resource name="editor_close_on_clipboard">Nɣel tugna ɣef afus?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Nɣel tugna ɣef afus?</resource>
|
||||
<resource name="editor_confirm">Sentem</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Nɣel tugna ɣef afus</resource>
|
||||
<resource name="editor_copypathtoclipboard">Nɣel abrid ɣef afus</resource>
|
||||
|
|
|
@ -87,6 +87,8 @@ Also, we would highly appreciate if you checked whether a tracker item already e
|
|||
<resource name="editor_close">닫기</resource>
|
||||
<resource name="editor_close_on_save">화면 캡처를 저장할까요?</resource>
|
||||
<resource name="editor_close_on_save_title">이미지를 저장할까요?</resource>
|
||||
<resource name="editor_close_on_clipboard">이미지를 클립보드에 복사하시겠습니까?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">이미지를 클립보드에 복사하시겠습니까?</resource>
|
||||
<resource name="editor_confirm">확인</resource>
|
||||
<resource name="editor_copyimagetoclipboard">이미지를 클립보드로 복사</resource>
|
||||
<resource name="editor_copypathtoclipboard">경로를 클립보드로 복사</resource>
|
||||
|
|
|
@ -56,6 +56,8 @@ Dėkojame už pagalbą :)</resource>
|
|||
<resource name="editor_close">Uždaryti</resource>
|
||||
<resource name="editor_close_on_save">Išsaugoti atidarytą nuotrauką?</resource>
|
||||
<resource name="editor_close_on_save_title">Išsaugoti vaizdą?</resource>
|
||||
<resource name="editor_close_on_clipboard">Ar norite nukopijuoti vaizdą į mainų sritį?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Kopijuoti vaizdą į mainų sritį?</resource>
|
||||
<resource name="editor_confirm">Patvirtinti</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Patalpinti į iškarpinių podelį</resource>
|
||||
<resource name="editor_copypathtoclipboard">Kopijuoti pilną failo vardą</resource>
|
||||
|
|
|
@ -87,6 +87,8 @@ Mēs būtu Tev pateicīgi, ja Tu vispirms pārbaudītu, vai kāds cits jau nav z
|
|||
<resource name="editor_close">Aizvērt</resource>
|
||||
<resource name="editor_close_on_save">Vai gribi saglabāt ekrānattēlu?</resource>
|
||||
<resource name="editor_close_on_save_title">Saglabāt attēlu?</resource>
|
||||
<resource name="editor_close_on_clipboard">Vai vēlaties kopēt attēlu starpliktuvē?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Vai kopēt attēlu starpliktuvē?</resource>
|
||||
<resource name="editor_confirm">Apstiprināt</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Ievit attēlu starpliktuvē</resource>
|
||||
<resource name="editor_copypathtoclipboard">Ievietot ceļu starpliktuvē</resource>
|
||||
|
|
|
@ -88,6 +88,8 @@ Controleer ook even of dit probleem mogelijk al gemeld is! Gebruik de zoekfuncti
|
|||
<resource name="editor_close">Sluiten</resource>
|
||||
<resource name="editor_close_on_save">Wilt u de schermopname opslaan?</resource>
|
||||
<resource name="editor_close_on_save_title">Afbeelding opslaan?</resource>
|
||||
<resource name="editor_close_on_clipboard">Wilt u de afbeelding naar het klembord kopiëren?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Afbeelding naar klembord kopiëren?</resource>
|
||||
<resource name="editor_confirm">Bevestigen</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Afbeelding naar klembord kopiëren</resource>
|
||||
<resource name="editor_copypathtoclipboard">Locatie naar klembord kopiëren</resource>
|
||||
|
|
|
@ -75,6 +75,8 @@ Me sett òg pris på om du ved hjelp av søkefunksjonen på sida kan sjekke om d
|
|||
<resource name="editor_close">Lukk</resource>
|
||||
<resource name="editor_close_on_save">Vil du lagre skjermbildet?</resource>
|
||||
<resource name="editor_close_on_save_title">Vil du lagre bildet?</resource>
|
||||
<resource name="editor_close_on_clipboard">Vil du kopiere bildet til utklippstavlen?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Vil du kopiere bildet til utklippstavlen?</resource>
|
||||
<resource name="editor_confirm">Stadfest</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Kopier bildet til utklyppstavla</resource>
|
||||
<resource name="editor_copypathtoclipboard">Kopier filstigen til utklyppstavla</resource>
|
||||
|
|
|
@ -88,6 +88,8 @@ Będziemy wdzięczni, jeśli najpierw sprawdzisz, czy takie zdarzenie nie zosta
|
|||
<resource name="editor_close">Zamknij</resource>
|
||||
<resource name="editor_close_on_save">Czy chcesz zapisać zrzut ekranu?</resource>
|
||||
<resource name="editor_close_on_save_title">Zapisać obraz?</resource>
|
||||
<resource name="editor_close_on_clipboard">Czy chcesz skopiować obraz do schowka?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Skopiować obraz do schowka?</resource>
|
||||
<resource name="editor_confirm">Zatwierdź</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Kopiuj obraz do schowka</resource>
|
||||
<resource name="editor_copypathtoclipboard">Kopiuj ścieżkę do schowka</resource>
|
||||
|
|
|
@ -84,6 +84,8 @@
|
|||
<resource name="editor_close">Fechar</resource>
|
||||
<resource name="editor_close_on_save">Deseja salvar a imagem capturada?</resource>
|
||||
<resource name="editor_close_on_save_title">Salvar imagem?</resource>
|
||||
<resource name="editor_close_on_clipboard">Deseja copiar a imagem para a área de transferência?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Copiar imagem para a área de transferência?</resource>
|
||||
<resource name="editor_confirm">Confirmar</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Copiar imagem para a Área de transferência</resource>
|
||||
<resource name="editor_copypathtoclipboard">Copiar o caminho da pasta atual do arquivo para a Área de transferência</resource>
|
||||
|
|
|
@ -87,6 +87,8 @@ Também apreciaremos muito se puder verificar se não existe já um relatório d
|
|||
<resource name="editor_close">Fechar</resource>
|
||||
<resource name="editor_close_on_save">Deseja guardar a imagem capturada?</resource>
|
||||
<resource name="editor_close_on_save_title">Guardar imagem?</resource>
|
||||
<resource name="editor_close_on_clipboard">Deseja copiar a imagem para a área de transferência?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Copiar imagem para a área de transferência?</resource>
|
||||
<resource name="editor_confirm">Confirmar</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Copiar imagem para a Área de transferência</resource>
|
||||
<resource name="editor_copypathtoclipboard">Copiar atalho para a Área de transferência</resource>
|
||||
|
|
|
@ -504,6 +504,8 @@ timpul curent, ex. 11_58_32 (plus extensia fișierului definită în setări)
|
|||
<resource name="editor_close_on_save_title">
|
||||
Salvați imaginea?
|
||||
</resource>
|
||||
<resource name="editor_close_on_clipboard">Doriți să copiați imaginea în clipboard?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Copiați imaginea în clipboard?</resource>
|
||||
<resource name="settings_capture_windows_interactive">
|
||||
Folosiți metoda interactivă de captură a ferestrei
|
||||
</resource>
|
||||
|
|
|
@ -88,6 +88,8 @@ Greenshot поставляется БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
|
|||
<resource name="editor_close">Закрыть</resource>
|
||||
<resource name="editor_close_on_save">Сохранить снимок экрана?</resource>
|
||||
<resource name="editor_close_on_save_title">Сохранить изображение?</resource>
|
||||
<resource name="editor_close_on_clipboard">Вы хотите скопировать изображение в буфер обмена?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Скопировать изображение в буфер обмена?</resource>
|
||||
<resource name="editor_confirm">Подтвердить</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Копировать изображение в буфер обмена</resource>
|
||||
<resource name="editor_copypathtoclipboard">Копировать путь в буфер обмена</resource>
|
||||
|
|
|
@ -75,6 +75,8 @@ Tiež by sme velmi ocenili, keby ste najskôr skontrolovali, či už neexistuje
|
|||
<resource name="editor_close">Zavrieť</resource>
|
||||
<resource name="editor_close_on_save">Chcete uložiť snímku?</resource>
|
||||
<resource name="editor_close_on_save_title">Uložiť obrázok?</resource>
|
||||
<resource name="editor_close_on_clipboard">Chcete skopírovať obrázok do schránky?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Kopírovať obrázok do schránky?</resource>
|
||||
<resource name="editor_confirm">Potvrdiť</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Kopírovať obrázok do schránky</resource>
|
||||
<resource name="editor_copypathtoclipboard">Kopírovať cestu do schránky</resource>
|
||||
|
|
|
@ -73,6 +73,8 @@ Pred objavo preverite tudi ali je napaka že prijavlja s strani kakšnega drugeg
|
|||
<resource name="editor_close">Zapri</resource>
|
||||
<resource name="editor_close_on_save">Ali želite shraniti zajem?</resource>
|
||||
<resource name="editor_close_on_save_title">Shranim sliko?</resource>
|
||||
<resource name="editor_close_on_clipboard">Ali želite kopirati sliko v odložišče?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Kopirati sliko v odložišče?</resource>
|
||||
<resource name="editor_confirm">Potrdite</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Kopiraj sliko na odložišče</resource>
|
||||
<resource name="editor_copypathtoclipboard">Kopiraj pot na odložišče</resource>
|
||||
|
|
|
@ -73,6 +73,8 @@
|
|||
<resource name="editor_close">Затвори</resource>
|
||||
<resource name="editor_close_on_save">Желите ли да сачувате снимак екрана?</resource>
|
||||
<resource name="editor_close_on_save_title">Чување слике</resource>
|
||||
<resource name="editor_close_on_clipboard">Да ли желите да копирате слику у међуспремник?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Копирати слику у међуспремник?</resource>
|
||||
<resource name="editor_confirm">Потврди</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Умножи слику</resource>
|
||||
<resource name="editor_copypathtoclipboard">Умножи путању</resource>
|
||||
|
|
|
@ -88,6 +88,8 @@ Innan du skickar uppskattar vi verkligen om du kontrollerar om felet redan blivi
|
|||
<resource name="editor_close">Stäng</resource>
|
||||
<resource name="editor_close_on_save">Vill du spara skärmdumpen?</resource>
|
||||
<resource name="editor_close_on_save_title">Spara bild?</resource>
|
||||
<resource name="editor_close_on_clipboard">Vill du kopiera bilden till urklipp?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Vill du kopiera bilden till urklipp?</resource>
|
||||
<resource name="editor_confirm">Godkänn</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Kopiera bilden till urklipp</resource>
|
||||
<resource name="editor_copypathtoclipboard">Kopiera sökväg till urklipp</resource>
|
||||
|
|
|
@ -73,6 +73,8 @@ Ayrıca bu hata için bir izleyici kaydının açılmış olup olmadığını da
|
|||
<resource name="editor_close">Kapat</resource>
|
||||
<resource name="editor_close_on_save">Ekran görüntüsünü kaydetmek istiyor musunuz?</resource>
|
||||
<resource name="editor_close_on_save_title">Görüntü kaydedilsin mi?</resource>
|
||||
<resource name="editor_close_on_clipboard">Resmi panoya kopyalamak istiyor musunuz?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Resim panoya kopyalansın mı?</resource>
|
||||
<resource name="editor_confirm">Tamam</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Görüntüyü panoya kopyala</resource>
|
||||
<resource name="editor_copypathtoclipboard">Yolu panoya kopyala</resource>
|
||||
|
|
|
@ -87,6 +87,8 @@ Greenshot постачається АБСОЛЮТНО БЕЗ ГАРАНТІЇ.
|
|||
<resource name="editor_close">Закрити</resource>
|
||||
<resource name="editor_close_on_save">Зберегти знімок екрану?</resource>
|
||||
<resource name="editor_close_on_save_title">Зберегти зображення?</resource>
|
||||
<resource name="editor_close_on_clipboard">Бажаєте скопіювати зображення в буфер обміну?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Копіювати зображення в буфер обміну?</resource>
|
||||
<resource name="editor_confirm">Підтвердити</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Копіювати зображення у буфер обміну</resource>
|
||||
<resource name="editor_copypathtoclipboard">Копіювати шлях у буфер обміну</resource>
|
||||
|
|
|
@ -53,6 +53,8 @@
|
|||
<resource name="editor_close">Đóng</resource>
|
||||
<resource name="editor_close_on_save">Lưu ảnh chụp?</resource>
|
||||
<resource name="editor_close_on_save_title">Xác nhận lưu ảnh</resource>
|
||||
<resource name="editor_close_on_clipboard">Bạn có muốn sao chép hình ảnh vào khay nhớ tạm?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">Sao chép hình ảnh vào khay nhớ tạm?</resource>
|
||||
<resource name="editor_confirm">Kiểm tra</resource>
|
||||
<resource name="editor_copyimagetoclipboard">Chép ảnh vào clipboard</resource>
|
||||
<resource name="editor_copypathtoclipboard">Chép đuờng dẫn tới clipboard.</resource>
|
||||
|
|
|
@ -79,6 +79,8 @@
|
|||
<resource name="editor_close">关闭</resource>
|
||||
<resource name="editor_close_on_save">还没有保存到文件,您要保存此图片吗?</resource>
|
||||
<resource name="editor_close_on_save_title">保存图片</resource>
|
||||
<resource name="editor_close_on_clipboard">是否要将图像复制到剪贴板?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">将图像复制到剪贴板?</resource>
|
||||
<resource name="editor_confirm">确定</resource>
|
||||
<resource name="editor_copyimagetoclipboard">复制图片到剪贴板</resource>
|
||||
<resource name="editor_copypathtoclipboard">复制路径到剪贴板</resource>
|
||||
|
|
|
@ -88,6 +88,8 @@ Greenshot 不對這個程式做任何擔保。這個程式是自由軟體,您
|
|||
<resource name="editor_close">關閉</resource>
|
||||
<resource name="editor_close_on_save">您要儲存螢幕擷圖嗎?</resource>
|
||||
<resource name="editor_close_on_save_title">儲存圖片?</resource>
|
||||
<resource name="editor_close_on_clipboard">是否要将图像复制到剪贴板?</resource>
|
||||
<resource name="editor_close_on_clipboard_title">将图像复制到剪贴板?</resource>
|
||||
<resource name="editor_confirm">確認</resource>
|
||||
<resource name="editor_copyimagetoclipboard">複製圖片到剪貼簿</resource>
|
||||
<resource name="editor_copypathtoclipboard">複製路徑到剪貼簿</resource>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue