diff --git a/WinJump/Core/VirtualDesktopDefinitions/IVirtualDesktopAPI.cs b/WinJump/Core/VirtualDesktopDefinitions/IVirtualDesktopAPI.cs
index 743adf5..b729cbc 100644
--- a/WinJump/Core/VirtualDesktopDefinitions/IVirtualDesktopAPI.cs
+++ b/WinJump/Core/VirtualDesktopDefinitions/IVirtualDesktopAPI.cs
@@ -20,6 +20,12 @@ public interface IVirtualDesktopAPI : IDisposable {
/// 0-indexed, where '0' is the first desktop
int GetCurrentDesktop();
+ ///
+ /// Returns how many virtual desktops there are.
+ ///
+ /// Virtual desktop count
+ public int GetDesktopCount();
+
///
/// Jumps to the virtual desktop.
///
diff --git a/WinJump/Core/VirtualDesktopDefinitions/Windows10_17763.cs b/WinJump/Core/VirtualDesktopDefinitions/Windows10_17763.cs
index 954aea1..8a6b89d 100644
--- a/WinJump/Core/VirtualDesktopDefinitions/Windows10_17763.cs
+++ b/WinJump/Core/VirtualDesktopDefinitions/Windows10_17763.cs
@@ -17,6 +17,10 @@ public int GetCurrentDesktop() {
return DesktopManager.GetCurrentDesktopNum();
}
+ public int GetDesktopCount() {
+ return DesktopManager.GetDesktopCount();
+ }
+
public void JumpToDesktop(int index) {
DesktopManager.SwitchDesktop(index);
}
@@ -110,6 +114,10 @@ internal static int GetCurrentDesktopNum() {
return GetIndex(vd);
}
+ internal static int GetDesktopCount() {
+ return VirtualDesktopManagerInternal.GetCount();
+ }
+
internal static void MoveCurrentlyFocusedToDesktop(int index) {
int processId;
IntPtr hWnd = GetForegroundWindow();
diff --git a/WinJump/Core/VirtualDesktopDefinitions/Windows11_22000.cs b/WinJump/Core/VirtualDesktopDefinitions/Windows11_22000.cs
index e0e6b51..564cb35 100644
--- a/WinJump/Core/VirtualDesktopDefinitions/Windows11_22000.cs
+++ b/WinJump/Core/VirtualDesktopDefinitions/Windows11_22000.cs
@@ -17,6 +17,10 @@ public int GetCurrentDesktop() {
return DesktopManager.GetCurrentDesktopNum();
}
+ public int GetDesktopCount() {
+ return DesktopManager.GetDesktopCount();
+ }
+
public void JumpToDesktop(int index) {
DesktopManager.SwitchDesktop(index);
}
@@ -110,6 +114,10 @@ internal static int GetCurrentDesktopNum() {
return GetIndex(vd);
}
+ internal static int GetDesktopCount() {
+ return VirtualDesktopManagerInternal.GetCount(IntPtr.Zero);
+ }
+
internal static void MoveCurrentlyFocusedToDesktop(int index) {
int processId;
IntPtr hWnd = GetForegroundWindow();
diff --git a/WinJump/Core/VirtualDesktopDefinitions/Windows11_22621.cs b/WinJump/Core/VirtualDesktopDefinitions/Windows11_22621.cs
index 089b67b..b692c25 100644
--- a/WinJump/Core/VirtualDesktopDefinitions/Windows11_22621.cs
+++ b/WinJump/Core/VirtualDesktopDefinitions/Windows11_22621.cs
@@ -17,6 +17,10 @@ public int GetCurrentDesktop() {
return DesktopManager.GetCurrentDesktopNum();
}
+ public int GetDesktopCount() {
+ return DesktopManager.GetDesktopCount();
+ }
+
public void JumpToDesktop(int index) {
DesktopManager.SwitchDesktop(index);
}
@@ -107,6 +111,10 @@ internal static int GetCurrentDesktopNum() {
return GetIndex(vd);
}
+
+ internal static int GetDesktopCount() {
+ return VirtualDesktopManagerInternal.GetCount(IntPtr.Zero);
+ }
internal static void MoveCurrentlyFocusedToDesktop(int index) {
int processId;
diff --git a/WinJump/Core/VirtualDesktopDefinitions/Windows11_22621_2215.cs b/WinJump/Core/VirtualDesktopDefinitions/Windows11_22621_2215.cs
index 902a298..db8bd5a 100644
--- a/WinJump/Core/VirtualDesktopDefinitions/Windows11_22621_2215.cs
+++ b/WinJump/Core/VirtualDesktopDefinitions/Windows11_22621_2215.cs
@@ -17,6 +17,10 @@ public int GetCurrentDesktop() {
return DesktopManager.GetCurrentDesktopNum();
}
+ public int GetDesktopCount() {
+ return DesktopManager.GetDesktopCount();
+ }
+
public void JumpToDesktop(int index) {
DesktopManager.SwitchDesktop(index);
}
@@ -110,6 +114,10 @@ internal static int GetCurrentDesktopNum() {
return GetIndex(vd);
}
+ internal static int GetDesktopCount() {
+ return VirtualDesktopManagerInternal.GetCount();
+ }
+
internal static void MoveCurrentlyFocusedToDesktop(int index) {
int processId;
IntPtr hWnd = GetForegroundWindow();
diff --git a/WinJump/Core/VirtualDesktopDefinitions/Windows11_22631_3085.cs b/WinJump/Core/VirtualDesktopDefinitions/Windows11_22631_3085.cs
index f81334f..9c6b5e4 100644
--- a/WinJump/Core/VirtualDesktopDefinitions/Windows11_22631_3085.cs
+++ b/WinJump/Core/VirtualDesktopDefinitions/Windows11_22631_3085.cs
@@ -17,6 +17,10 @@ public int GetCurrentDesktop() {
return DesktopManager.GetCurrentDesktopNum();
}
+ public int GetDesktopCount() {
+ return DesktopManager.GetDesktopCount();
+ }
+
public void JumpToDesktop(int index) {
DesktopManager.SwitchDesktop(index);
}
@@ -110,6 +114,10 @@ internal static int GetCurrentDesktopNum() {
return GetIndex(vd);
}
+ internal static int GetDesktopCount() {
+ return VirtualDesktopManagerInternal.GetCount();
+ }
+
internal static void MoveCurrentlyFocusedToDesktop(int index) {
int processId;
IntPtr hWnd = GetForegroundWindow();
diff --git a/WinJump/Core/WinJumpManager.cs b/WinJump/Core/WinJumpManager.cs
index b7e8260..d4dbb86 100644
--- a/WinJump/Core/WinJumpManager.cs
+++ b/WinJump/Core/WinJumpManager.cs
@@ -251,9 +251,24 @@ public void JumpTo(uint index, uint fallback) {
}
public void JumpTo(uint index) {
+
+ var allowJump = true;
WrapCall(() => {
- api.JumpToDesktop((int) index);
- }, true);
+ // If the desktop is the same as the current one or doesn't exist, don't allow the jump
+ if(api.GetCurrentDesktop() == index) {
+ allowJump = false;
+ }
+ else if(index >= api.GetDesktopCount())
+ {
+ allowJump = false;
+ }
+ });
+
+ if(allowJump) {
+ WrapCall(() => {
+ api.JumpToDesktop((int) index);
+ }, true);
+ }
}
public void JumpToNoHack(uint index) {