Add new function to check for preview pane master
authorAndre Heinecke <aheinecke@intevation.de>
Thu, 9 Aug 2018 12:11:58 +0000 (14:11 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Thu, 9 Aug 2018 12:11:58 +0000 (14:11 +0200)
* src/oomhelp.cpp, src/oomhelp.h (is_preview_pane_visible): New.
* src//ribbon-callbacks.cpp (get_mail_from_control): Use it.

--
This should hopefully work on all outlook versions.

src/oomhelp.cpp
src/oomhelp.h
src/ribbon-callbacks.cpp

index c6515d2..06fd72d 100644 (file)
@@ -2373,3 +2373,37 @@ log_addins ()
              activeAddins.c_str ());
   return;
 }
+
+bool
+is_preview_pane_visible (LPDISPATCH explorer)
+{
+  if (!explorer)
+    {
+      TRACEPOINT;
+      return false;
+    }
+  VARIANT var;
+  VariantInit (&var);
+  VARIANT argvars[1];
+  DISPPARAMS args;
+  VariantInit (&argvars[0]);
+  argvars[0].vt = VT_INT;
+  argvars[0].intVal = 3;
+  args.cArgs = 1;
+  args.cNamedArgs = 0;
+  args.rgvarg = argvars;
+
+  if (invoke_oom_method_with_parms (explorer, "IsPaneVisible", &var, &args))
+    {
+      log_error ("%s:%s: Failed to check visibilty.",
+                 SRCNAME, __func__);
+      return false;
+    }
+
+  if (var.vt != VT_BOOL)
+    {
+      TRACEPOINT;
+      return false;
+    }
+  return !!var.boolVal;
+}
index 3a94579..ca7c1fd 100644 (file)
@@ -376,4 +376,7 @@ HRESULT gpgol_queryInterface (LPUNKNOWN pObj, REFIID riid, LPVOID FAR *ppvObj);
 HRESULT gpgol_openProperty (LPMAPIPROP obj, ULONG ulPropTag, LPCIID lpiid,
                             ULONG ulInterfaceOptions, ULONG ulFlags,
                             LPUNKNOWN FAR * lppUnk);
+
+/* Check if the preview pane in the explorer is visible */
+bool is_preview_pane_visible (LPDISPATCH explorer);
 #endif /*OOMHELP_H*/
index 3eda852..43ab432 100644 (file)
@@ -387,7 +387,17 @@ get_mail_from_control (LPDISPATCH ctrl, bool *none_selected)
       /* Avoid showing wrong crypto state if we don't have a reading
          pane. In that case the parser will finish for a mail which is gone
          and the crypto state will not get updated. */
-      if (0 /*g_ol_version_major >= 16 */)
+
+      if (!is_preview_pane_visible (context))
+        {
+          *none_selected = true;
+          gpgol_release (mailitem);
+          mailitem = nullptr;
+          log_debug ("%s:%s: Preview pane invisible", SRCNAME, __func__);
+        }
+
+#if 0
+      if (g_ol_version_major >= 16)
         {
           /* Some Versions of Outlook 2016 crashed when accessing the current view
              of the Explorer. This was even reproducible with
@@ -439,6 +449,7 @@ get_mail_from_control (LPDISPATCH ctrl, bool *none_selected)
                 }
             }
         }
+#endif
 
       if (!*none_selected)
         {