diff --git a/OnTopReplica/MainForm.cs b/OnTopReplica/MainForm.cs
index dae4008..a1e6305 100644
--- a/OnTopReplica/MainForm.cs
+++ b/OnTopReplica/MainForm.cs
@@ -29,6 +29,7 @@ namespace OnTopReplica {
_startupOptions = startupOptions;
FullscreenManager = new FullscreenFormManager(this);
+ _quickRegionDrawingHandler = new ThumbnailPanel.RegionDrawnHandler(HandleQuickRegionDrawn);
//WinForms init pass
InitializeComponent();
@@ -163,6 +164,8 @@ namespace OnTopReplica {
}
}
+ private ThumbnailPanel.RegionDrawnHandler _quickRegionDrawingHandler;
+
protected override void WndProc(ref Message m) {
if (_msgPumpManager != null) {
if (_msgPumpManager.PumpMessage(ref m)) {
@@ -181,6 +184,19 @@ namespace OnTopReplica {
}
break;
+ case WM.NCLBUTTONDOWN:
+ if ((ModifierKeys & Keys.Control) == Keys.Control &&
+ ThumbnailPanel.IsShowingThumbnail &&
+ !ThumbnailPanel.DrawMouseRegions) {
+
+ ThumbnailPanel.EnableMouseRegionsDrawingWithMouseDown();
+ ThumbnailPanel.RegionDrawn += _quickRegionDrawingHandler;
+
+ m.Result = IntPtr.Zero;
+ return;
+ }
+ break;
+
case WM.NCLBUTTONDBLCLK:
//Toggle fullscreen mode if double click on caption (whole glass area)
if (m.WParam.ToInt32() == HT.CAPTION) {
@@ -205,6 +221,14 @@ namespace OnTopReplica {
base.WndProc(ref m);
}
+ private void HandleQuickRegionDrawn(object sender, ThumbnailRegion region) {
+ //Reset region drawing state
+ ThumbnailPanel.DrawMouseRegions = false;
+ ThumbnailPanel.RegionDrawn -= _quickRegionDrawingHandler;
+
+ SelectedThumbnailRegion = region;
+ }
+
#endregion
#region Keyboard event handling
diff --git a/OnTopReplica/ThumbnailPanel.cs b/OnTopReplica/ThumbnailPanel.cs
index 0121304..6422176 100644
--- a/OnTopReplica/ThumbnailPanel.cs
+++ b/OnTopReplica/ThumbnailPanel.cs
@@ -74,6 +74,19 @@ namespace OnTopReplica {
}
}
+ ///
+ /// Enables mouse regions drawing, simulating one first click on the panel at the current cursor's position.
+ ///
+ public void EnableMouseRegionsDrawingWithMouseDown() {
+ if (DrawMouseRegions)
+ return;
+
+ var localCursor = this.PointToClient(Cursor.Position);
+
+ DrawMouseRegions = true;
+ OnMouseDown(new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 1, localCursor.X, localCursor.Y, 0));
+ }
+
bool _drawMouseRegions = false;
///
@@ -178,7 +191,7 @@ namespace OnTopReplica {
//Check whether this is a hit-test on "client" surface
if (m.Msg == WM.NCHITTEST && m.Result.ToInt32() == HT.CLIENT) {
//Check whether clicks must be reported
- if(!DrawMouseRegions && !ReportThumbnailClicks /*&& !InputMethods.IsKeyPressed(VirtualKeyState.VK_SHIFT)*/){
+ if(!DrawMouseRegions && !ReportThumbnailClicks){
m.Result = new IntPtr(HT.TRANSPARENT);
}
}