]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
SetCurrentProcessExplicitAppUserModelID to fix jumplist/removable media bug
authorOwen Dunn <owen@greenend.org.uk>
Mon, 29 Aug 2016 15:55:42 +0000 (16:55 +0100)
committerOwen Dunn <owen@greenend.org.uk>
Mon, 29 Aug 2016 15:55:42 +0000 (16:55 +0100)
The algorithm Windows uses to generate AppUserModelIDs "hangs on" to
removable media (CDs/DVDs) if PuTTY is launched with a CD/DVD in a drive.
Set the AppUserModelID explicitly to avoid using this algorithm.

windows/window.c
windows/winjump.c
windows/winstuff.h

index 115464105d8e9fea88cfc9253a2c05c5b151b5e1..044d3ce3f15efa689f080e6233d8bfc3da67fed3 100644 (file)
@@ -357,6 +357,11 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show)
 
     InitCommonControls();
 
+    /* Set Explicit App User Model Id so that jump lists don't cause
+       PuTTY to hang on to removable media. */
+
+    set_explicit_app_user_model_id();
+
     /* Ensure a Maximize setting in Explorer doesn't maximise the
      * config box. */
     defuse_showwindow();
index e5bca9358ead86ddb74a8c48c7b138afe9842486..85963a32fff23cc319b0ae910cc1d2514b439118 100644 (file)
@@ -714,3 +714,33 @@ void remove_session_from_jumplist(const char * const sessionname)
         clear_jumplist();
     }
 }
+
+/* Set Explicit App User Model Id to fix removable media error with
+   jump lists */
+
+BOOL set_explicit_app_user_model_id()
+{
+  DECL_WINDOWS_FUNCTION(static, HRESULT, SetCurrentProcessExplicitAppUserModelID,
+                        (PCWSTR));
+
+  static HMODULE shell32_module = 0;
+
+    if (!shell32_module)
+    {
+        shell32_module = load_system32_dll("Shell32.dll");
+        GET_WINDOWS_FUNCTION(shell32_module, SetCurrentProcessExplicitAppUserModelID);
+    }
+
+    if (p_SetCurrentProcessExplicitAppUserModelID)
+    {
+        if (p_SetCurrentProcessExplicitAppUserModelID(L"SimonTatham.PuTTY") == S_OK)
+        {
+         return TRUE;
+        }
+        return FALSE;
+    }
+    /* Function doesn't exist, which is ok for Pre-7 systems */
+
+    return TRUE;
+
+}
index c57ce6ea9d73debbb5a1857279f0785e9f68ea6b..b9602243b104ac08e2a9d7944359d12e4d647f3a 100644 (file)
@@ -543,6 +543,7 @@ extern Backend serial_backend;
 void add_session_to_jumplist(const char * const sessionname);
 void remove_session_from_jumplist(const char * const sessionname);
 void clear_jumplist(void);
+BOOL set_explicit_app_user_model_id();
 
 /*
  * Extra functions in winstore.c over and above the interface in