All controls are now done via the OOM model.
authorWerner Koch <wk@gnupg.org>
Thu, 29 Oct 2009 18:49:32 +0000 (18:49 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 29 Oct 2009 18:49:32 +0000 (18:49 +0000)
Sign and encrypt buttons have no action yet.
Some other functions are not yet functional.
All 16px icons are integrated.
Prepared for other sized icons.

32 files changed:
po/de.po
po/sv.po
src/ChangeLog
src/Makefile.am
src/cmdbarcontrols.cpp
src/decrypt-16.bmp [moved from src/decrypt.bmp with 100% similarity]
src/decrypt-16m.bmp [moved from src/decrypt-mask.bmp with 100% similarity]
src/decrypt-verify-16.bmp [moved from src/decrypt-verify.bmp with 100% similarity]
src/decrypt-verify-16m.bmp [moved from src/decrypt-verify-mask.bmp with 100% similarity]
src/dialogs.h
src/dialogs.rc
src/encrypt-16.bmp [new file with mode: 0644]
src/encrypt.bmp [deleted file]
src/explorers.cpp
src/explorers.h
src/ext-commands.cpp
src/ext-commands.h
src/inspectors.cpp
src/inspectors.h
src/key-manager-16.bmp [moved from src/key-manager.bmp with 100% similarity]
src/key-manager-16m.bmp [moved from src/key-manager-mask.bmp with 100% similarity]
src/key-manager-32.bmp [new file with mode: 0644]
src/key-manager-32m.bmp [new file with mode: 0644]
src/oomhelp.cpp
src/oomhelp.h
src/revert.cpp
src/revert.h
src/sign-16.bmp [moved from src/sign.bmp with 100% similarity]
src/sign-16m.bmp [moved from src/sign-mask.bmp with 100% similarity]
src/util.h
src/verify-16.bmp [moved from src/verify.bmp with 100% similarity]
src/verify-16m.bmp [moved from src/verify-mask.bmp with 100% similarity]

index 08f738c..8504401 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GpgOL 1.0.0\n"
 "Report-Msgid-Bugs-To: bug-gpgol@g10code.com\n"
-"POT-Creation-Date: 2009-10-26 17:53+0100\n"
+"POT-Creation-Date: 2009-10-29 18:27+0100\n"
 "PO-Revision-Date: 2009-06-18 19:18+0200\n"
 "Last-Translator: Werner Koch <wk@gnupg.org>\n"
 "Language-Team: de\n"
@@ -56,8 +56,8 @@ msgstr ""
 "Die GnuPG Benutzeroberfläche \"Kleopatra\" konnte nicht gefunden oder "
 "rechtzeitig gestartet werden.  Sie sollten es noch einmal versuchen."
 
-#: src/engine.c:395 src/engine.c:405 src/ext-commands.cpp:821
-#: src/ext-commands.cpp:826 src/main.c:688 src/main.c:694 src/message.cpp:321
+#: src/engine.c:395 src/engine.c:405 src/main.c:689 src/main.c:695
+#: src/message.cpp:321
 msgid "GpgOL"
 msgstr "GpgOL"
 
@@ -215,95 +215,12 @@ msgstr "*** Anfang Notation (Signatur von: "
 msgid "*** End Notation ***\n"
 msgstr "*** Ende Notation ***\n"
 
-#: src/ext-commands.cpp:550
-msgid "GpgOL Decrypt/Verify"
-msgstr "GpgOL Enschlüsseln/Prüfen"
-
-#: src/ext-commands.cpp:564
-msgid ""
-"This is a signed and encrypted message.\n"
-"Click for more information. "
-msgstr ""
-"Dies ist eine signierte und verschlüsselte Nachricht.\n"
-"Klicken Sie hier um weitere Informationen zu erhalten. "
-
-#: src/ext-commands.cpp:567
-msgid ""
-"This is an encrypted message.\n"
-"Click for more information. "
-msgstr ""
-"Dies ist eine verschlüsselte Nachricht.\n"
-"Klicken Sie hier um weitere Informationen zu erhalten. "
-
-#: src/ext-commands.cpp:569
-msgid ""
-"This is a signed message.\n"
-"Click for more information. "
-msgstr ""
-"Dies ist eine signierte Nachricht.\n"
-"Klicken Sie hier um weitere Informationen zu erhalten. "
-
-#: src/ext-commands.cpp:584
-msgid "&encrypt message with GnuPG"
-msgstr "Nachricht verschlüsseln"
-
-#: src/ext-commands.cpp:585
-msgid "&sign message with GnuPG"
-msgstr "Nachricht signieren"
-
-#: src/ext-commands.cpp:637
-msgid "Remove GpgOL flags from this folder"
-msgstr "GpgOL Eigenschaften aus diesem Ordner entfernen"
-
-#: src/ext-commands.cpp:811
-msgid ""
-"You are about to start the process of reversing messages created by GpgOL to "
-"prepare deinstalling of GpgOL. Running this command will put GpgOL into a "
-"disabled state so that messages are not anymore processed by GpgOL.\n"
-"\n"
-"You should convert all folders one after the other with this command, close "
-"Outlook and then deinstall GpgOL.\n"
-"\n"
-"Note that if you start Outlook again with GpgOL still being installed, GpgOL "
-"will again process messages."
-msgstr ""
-"Sie sind dabei, eine Deinstallation von GpgOL vorzubereiten.  Hierzu wird "
-"GpgOL ausgechaltet, so das Nachrichten nicht mehr durch GpgOL angezeigt "
-"werden.\n"
-"\n"
-"Sie sollten nacheinander dieses Kommandos für alle Ordner aufrufen, danach "
-"Outlook schliessen und GpgOL deinstallieren.\n"
-"\n"
-"Bitte beachten Sie, daß nach einem erneuten Start von Outlook - mit "
-"weiterhin installiertem GpgOL - Nachrichten wieder wie gewohnt von GpgOL "
-"angezeigt werden."
-
-#: src/ext-commands.cpp:825
-msgid "Do you want to revert this folder?"
-msgstr "Möchten Sie diesen Ordner von GpgOL befreien?"
-
-#: src/ext-commands.cpp:976
-msgid "Select this option to encrypt the message."
-msgstr "Wählen Sie diese Option zum Verschlüsseln der Nachricht."
-
-#: src/ext-commands.cpp:983
-msgid "Select this option to sign the message."
-msgstr "Wählen Sie diese Option zum Signieren der Nachricht."
-
-#: src/ext-commands.cpp:1043
-msgid "Encrypt message with GnuPG"
-msgstr "Nachricht verschlüsseln"
-
-#: src/ext-commands.cpp:1053
-msgid "Sign message with GnuPG"
-msgstr "Nachricht signieren"
-
-#: src/main.c:687
+#: src/main.c:688
 #, c-format
 msgid "Note: Using compatibility flags: %s"
 msgstr "Notiz: Diese Kompatibilitätsflags werden verwendet: %s"
 
-#: src/main.c:693
+#: src/main.c:694
 #, c-format
 msgid ""
 "Note: Writing debug logs to\n"
@@ -715,6 +632,77 @@ msgstr "PGP/MIME Prüfungsresultat"
 msgid "S/MIME Verification Result"
 msgstr "S/MIME Prüfungsresultat"
 
+#~ msgid "GpgOL Decrypt/Verify"
+#~ msgstr "GpgOL Enschlüsseln/Prüfen"
+
+#~ msgid ""
+#~ "This is a signed and encrypted message.\n"
+#~ "Click for more information. "
+#~ msgstr ""
+#~ "Dies ist eine signierte und verschlüsselte Nachricht.\n"
+#~ "Klicken Sie hier um weitere Informationen zu erhalten. "
+
+#~ msgid ""
+#~ "This is an encrypted message.\n"
+#~ "Click for more information. "
+#~ msgstr ""
+#~ "Dies ist eine verschlüsselte Nachricht.\n"
+#~ "Klicken Sie hier um weitere Informationen zu erhalten. "
+
+#~ msgid ""
+#~ "This is a signed message.\n"
+#~ "Click for more information. "
+#~ msgstr ""
+#~ "Dies ist eine signierte Nachricht.\n"
+#~ "Klicken Sie hier um weitere Informationen zu erhalten. "
+
+#~ msgid "&encrypt message with GnuPG"
+#~ msgstr "Nachricht verschlüsseln"
+
+#~ msgid "&sign message with GnuPG"
+#~ msgstr "Nachricht signieren"
+
+#~ msgid "Remove GpgOL flags from this folder"
+#~ msgstr "GpgOL Eigenschaften aus diesem Ordner entfernen"
+
+#~ msgid ""
+#~ "You are about to start the process of reversing messages created by GpgOL "
+#~ "to prepare deinstalling of GpgOL. Running this command will put GpgOL "
+#~ "into a disabled state so that messages are not anymore processed by "
+#~ "GpgOL.\n"
+#~ "\n"
+#~ "You should convert all folders one after the other with this command, "
+#~ "close Outlook and then deinstall GpgOL.\n"
+#~ "\n"
+#~ "Note that if you start Outlook again with GpgOL still being installed, "
+#~ "GpgOL will again process messages."
+#~ msgstr ""
+#~ "Sie sind dabei, eine Deinstallation von GpgOL vorzubereiten.  Hierzu wird "
+#~ "GpgOL ausgeschaltet, so das Nachrichten nicht mehr durch GpgOL angezeigt "
+#~ "werden.\n"
+#~ "\n"
+#~ "Sie sollten nacheinander dieses Kommandos für alle Ordner aufrufen, "
+#~ "danach Outlook schliessen und GpgOL deinstallieren.\n"
+#~ "\n"
+#~ "Bitte beachten Sie, daß nach einem erneuten Start von Outlook - mit "
+#~ "weiterhin installiertem GpgOL - Nachrichten wieder wie gewohnt von GpgOL "
+#~ "angezeigt werden."
+
+#~ msgid "Do you want to revert this folder?"
+#~ msgstr "Möchten Sie diesen Ordner von GpgOL befreien?"
+
+#~ msgid "Select this option to encrypt the message."
+#~ msgstr "Wählen Sie diese Option zum Verschlüsseln der Nachricht."
+
+#~ msgid "Select this option to sign the message."
+#~ msgstr "Wählen Sie diese Option zum Signieren der Nachricht."
+
+#~ msgid "Encrypt message with GnuPG"
+#~ msgstr "Nachricht verschlüsseln"
+
+#~ msgid "Sign message with GnuPG"
+#~ msgstr "Nachricht signieren"
+
 #~ msgid "GnuPG Certificate &Manager"
 #~ msgstr "GnuPG Zertifikats&verwaltung"
 
index 0e739fa..8b6ec2c 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GPGol\n"
 "Report-Msgid-Bugs-To: bug-gpgol@g10code.com\n"
-"POT-Creation-Date: 2009-10-26 17:53+0100\n"
+"POT-Creation-Date: 2009-10-29 18:27+0100\n"
 "PO-Revision-Date: 2006-12-12 23:52+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -54,8 +54,8 @@ msgid ""
 "You may want to try again."
 msgstr ""
 
-#: src/engine.c:395 src/engine.c:405 src/ext-commands.cpp:821
-#: src/ext-commands.cpp:826 src/main.c:688 src/main.c:694 src/message.cpp:321
+#: src/engine.c:395 src/engine.c:405 src/main.c:689 src/main.c:695
+#: src/message.cpp:321
 msgid "GpgOL"
 msgstr ""
 
@@ -205,83 +205,12 @@ msgstr "*** Notation start (signatur av: "
 msgid "*** End Notation ***\n"
 msgstr "*** Notation slut ***\n"
 
-#: src/ext-commands.cpp:550
-msgid "GpgOL Decrypt/Verify"
-msgstr ""
-
-#: src/ext-commands.cpp:564
-msgid ""
-"This is a signed and encrypted message.\n"
-"Click for more information. "
-msgstr ""
-
-#: src/ext-commands.cpp:567
-msgid ""
-"This is an encrypted message.\n"
-"Click for more information. "
-msgstr ""
-
-#: src/ext-commands.cpp:569
-msgid ""
-"This is a signed message.\n"
-"Click for more information. "
-msgstr ""
-
-#: src/ext-commands.cpp:584
-#, fuzzy
-msgid "&encrypt message with GnuPG"
-msgstr "Signera meddelandet med GPG"
-
-#: src/ext-commands.cpp:585
-#, fuzzy
-msgid "&sign message with GnuPG"
-msgstr "Signera meddelandet med GPG"
-
-#: src/ext-commands.cpp:637
-msgid "Remove GpgOL flags from this folder"
-msgstr ""
-
-#: src/ext-commands.cpp:811
-msgid ""
-"You are about to start the process of reversing messages created by GpgOL to "
-"prepare deinstalling of GpgOL. Running this command will put GpgOL into a "
-"disabled state so that messages are not anymore processed by GpgOL.\n"
-"\n"
-"You should convert all folders one after the other with this command, close "
-"Outlook and then deinstall GpgOL.\n"
-"\n"
-"Note that if you start Outlook again with GpgOL still being installed, GpgOL "
-"will again process messages."
-msgstr ""
-
-#: src/ext-commands.cpp:825
-msgid "Do you want to revert this folder?"
-msgstr ""
-
-#: src/ext-commands.cpp:976
-msgid "Select this option to encrypt the message."
-msgstr "Välj det här alternativet för att kryptera meddelandet."
-
-#: src/ext-commands.cpp:983
-msgid "Select this option to sign the message."
-msgstr "Välj det här alternativet för att signera meddelandet."
-
-#: src/ext-commands.cpp:1043
-#, fuzzy
-msgid "Encrypt message with GnuPG"
-msgstr "Signera meddelandet med GPG"
-
-#: src/ext-commands.cpp:1053
-#, fuzzy
-msgid "Sign message with GnuPG"
-msgstr "Signera meddelandet med GPG"
-
-#: src/main.c:687
+#: src/main.c:688
 #, c-format
 msgid "Note: Using compatibility flags: %s"
 msgstr ""
 
-#: src/main.c:693
+#: src/main.c:694
 #, c-format
 msgid ""
 "Note: Writing debug logs to\n"
@@ -636,6 +565,28 @@ msgid "S/MIME Verification Result"
 msgstr "Resultat från validering"
 
 #, fuzzy
+#~ msgid "&encrypt message with GnuPG"
+#~ msgstr "Signera meddelandet med GPG"
+
+#, fuzzy
+#~ msgid "&sign message with GnuPG"
+#~ msgstr "Signera meddelandet med GPG"
+
+#~ msgid "Select this option to encrypt the message."
+#~ msgstr "Välj det här alternativet för att kryptera meddelandet."
+
+#~ msgid "Select this option to sign the message."
+#~ msgstr "Välj det här alternativet för att signera meddelandet."
+
+#, fuzzy
+#~ msgid "Encrypt message with GnuPG"
+#~ msgstr "Signera meddelandet med GPG"
+
+#, fuzzy
+#~ msgid "Sign message with GnuPG"
+#~ msgstr "Signera meddelandet med GPG"
+
+#, fuzzy
 #~ msgid "GnuPG Certificate &Manager"
 #~ msgstr "GPG-nyckel&hanterare"
 
index 67c8d78..c050737 100644 (file)
@@ -1,3 +1,9 @@
+2009-10-29  Werner Koch  <wk@g10code.com>
+
+       * ext-commands.cpp: Remove m_nCmdDebugN, m_nCmdRevertFolder,
+       m_nCmdSign, m_nCmdEncrypt and all related code.  Now handled in
+       inspectors.cpp.
+
 2009-10-28  Werner Koch  <wk@g10code.com>
 
        * ext-commands.cpp: Remove m_nCmdCryptoState and all related code;
index 3e36f68..098b91e 100644 (file)
@@ -15,15 +15,16 @@ unused_sources = item-events.cpp
 
 bin_PROGRAMS = gpgol 
 #treeview
-EXTRA_DIST = versioninfo.rc.in mapi32.def $(unused_sources) Outlook.gpl \
-            logo.bmp encrypt.bmp  \
-             proto-auto.bmp proto-pgpmime.bmp proto-smime.bmp \
-             cryptostate.bmp \
-             key-manager.bmp key-manager-mask.bmp \
-             decrypt.bmp decrypt-mask.bmp \
-            verify.bmp  verify-mask.bmp \
-             decrypt-verify.bmp decrypt-verify-mask.bmp \
-            sign.bmp sign-mask.bmp
+EXTRA_DIST = \
+       versioninfo.rc.in mapi32.def $(unused_sources) Outlook.gpl \
+       encrypt-16.bmp encrypt-16m.bmp \
+       sign-16.bmp sign-16m.bmp \
+       key-manager-16.bmp key-manager-16m.bmp \
+       key-manager-32.bmp key-manager-32m.bmp \
+       decrypt-16.bmp decrypt-16m.bmp \
+       verify-16.bmp  verify-16m.bmp \
+       decrypt-verify-16.bmp decrypt-verify-16m.bmp \
+       logo.bmp
 
 EXEEXT = .dll
 
index d710791..b6afa91 100644 (file)
@@ -28,6 +28,7 @@
 #include "oomhelp.h"
 #include "cmdbarcontrols.h"
 #include "inspectors.h"
+#include "explorers.h"
 #include "engine.h"
 
 #include "eventsink.h"
@@ -37,6 +38,7 @@
    Click event.  */
 BEGIN_EVENT_SINK(GpgolCommandBarButtonEvents, IOOMCommandBarButtonEvents)
   STDMETHOD (Click) (THIS_ LPDISPATCH, PBOOL);
+EVENT_SINK_DEFAULT_CTOR(GpgolCommandBarButtonEvents)
 EVENT_SINK_DEFAULT_DTOR(GpgolCommandBarButtonEvents)
 EVENT_SINK_INVOKE(GpgolCommandBarButtonEvents)
 {
@@ -69,34 +71,32 @@ END_EVENT_SINK(GpgolCommandBarButtonEvents, IID_IOOMCommandBarButtonEvents)
 
 
 
-static int
-tagcmp (const char *a, const char *b)
-{
-  return strncmp (a, b, strlen (b));
-}
-
-
 /* This is the event sink for a button click.  */
 STDMETHODIMP
 GpgolCommandBarButtonEvents::Click (LPDISPATCH button, PBOOL cancel_default)
 {
   char *tag;
+  int instid;
 
   (void)cancel_default;
-  log_debug ("%s:%s: Called", SRCNAME, __func__);
 
+  tag = get_oom_string (button, "Tag");
+  instid = get_oom_int (button, "InstanceId");
   {
     char *tmp = get_object_name (button);
-    log_debug ("%s:%s: button is %p (%s)", 
-               SRCNAME, __func__, button, tmp? tmp:"(null)");
+    log_debug ("%s:%s: button is %p (%s) tag is (%s) instid %d", 
+               SRCNAME, __func__, button, 
+               tmp? tmp:"(null)",
+               tag? tag:"(null)", instid);
     xfree (tmp);
   }
 
-  tag = get_oom_string (button, "Tag");
-  log_debug ("%s:%s: button's tag is (%s)", 
-             SRCNAME, __func__, tag? tag:"(null)");
   if (!tag)
     ;
+  else if (!tagcmp (tag, "GpgOL_Inspector"))
+    {
+      proc_inspector_button_click (button, tag, instid);
+    }
   else if (!tagcmp (tag, "GpgOL_Start_Key_Manager"))
     {
       /* FIXME: We don't have the current window handle.  */
@@ -104,25 +104,9 @@ GpgolCommandBarButtonEvents::Click (LPDISPATCH button, PBOOL cancel_default)
          MessageBox (NULL, _("Could not start certificate manager"),
                      _("GpgOL"), MB_ICONERROR|MB_OK);
     }
-  else if (!tagcmp (tag, "GpgOL_Inspector_Crypto_Info"))
+  else if (!tagcmp (tag, "GpgOL_Revert_Folder"))
     {
-      /* FIXME: We should invoke the decrypt/verify again. */
-      update_inspector_crypto_info (button);
-#if 0 /* This is the code we used to use.  */
-      log_debug ("%s:%s: command CryptoState called\n", SRCNAME, __func__);
-      hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
-      if (SUCCEEDED (hr))
-        {
-          if (message_incoming_handler (message, hwnd, true))
-            message_display_handler (eecb, hwnd);
-       }
-      else
-        log_debug_w32 (hr, "%s:%s: command CryptoState failed", 
-                       SRCNAME, __func__);
-      ul_release (message, __func__, __LINE__);
-      ul_release (mdb, __func__, __LINE__);
-#endif
-
+      run_explorer_revert_folder (button);
     }
 
   xfree (tag);
similarity index 100%
rename from src/decrypt.bmp
rename to src/decrypt-16.bmp
similarity index 100%
rename from src/decrypt-mask.bmp
rename to src/decrypt-16m.bmp
index bc218d4..a950c44 100644 (file)
@@ -7,27 +7,61 @@
 #define DIALOGS_H
 
 
-/* Ids used for bitmaps. 
-   Note: FOO_MASK must have a value of FOO + 1. */
-#define IDB_ENCRYPT                     3004
-#define IDB_SIGN                        3006
-#define IDB_SIGN_MASK                   3007
-#define IDB_ADD_KEYS                    3008
-#define IDB_KEY_MANAGER                 3010
-#define IDB_KEY_MANAGER_MASK            3011
-#define IDB_BANNER                      3012  /* The g10 Code logo.  */
-#define IDB_BANNER_HI                   3014  /* Not used.  */
-#define IDB_CRYPTO_STATE                3016  
-#define IDB_PROTO_AUTO                  3018  /* Not used.  */
-#define IDB_PROTO_PGPMIME               3020  /* Not used.  */
-#define IDB_PROTO_SMIME                 3022  /* Not used.  */
-#define IDB_PROTO_SMIME_MASK            3023  /* Not used.  */
-#define IDB_DECRYPT                     3024
-#define IDB_DECRYPT_MASK                3025
-#define IDB_VERIFY                      3026
-#define IDB_VERIFY_MASK                 3027
-#define IDB_DECRYPT_VERIFY              3028
-#define IDB_DECRYPT_VERIFY_MASK         3029
+/* Ids used for bitmaps.  There is some magic in the identifiers: In
+   the code we only use values like 3000, the icon code then uses the
+   current system pixel size to the Id and tries to load this one.
+   The mask is always the next id.  */
+#define IDB_ENCRYPT                     3000
+#define IDB_ENCRYPT_16                  3016
+#define IDB_ENCRYPT_16M                 3017
+#define IDB_ENCRYPT_32                  3032
+#define IDB_ENCRYPT_32M                 3033
+#define IDB_ENCRYPT_64                  3064
+#define IDB_ENCRYPT_64M                 3065
+
+#define IDB_SIGN                        3100
+#define IDB_SIGN_16                     3116
+#define IDB_SIGN_16M                    3117
+#define IDB_SIGN_32                     3132
+#define IDB_SIGN_32M                    3133
+#define IDB_SIGN_64                     3164
+#define IDB_SIGN_64M                    3165
+
+#define IDB_KEY_MANAGER                 3200
+#define IDB_KEY_MANAGER_16              3216
+#define IDB_KEY_MANAGER_16M             3217
+#define IDB_KEY_MANAGER_32              3232
+#define IDB_KEY_MANAGER_32M             3233
+#define IDB_KEY_MANAGER_64              3264
+#define IDB_KEY_MANAGER_64M             3265
+
+#define IDB_DECRYPT                     3300
+#define IDB_DECRYPT_16                  3316
+#define IDB_DECRYPT_16M                 3317
+#define IDB_DECRYPT_32                  3332
+#define IDB_DECRYPT_32M                 3333
+#define IDB_DECRYPT_64                  3364
+#define IDB_DECRYPT_64M                 3365
+
+#define IDB_VERIFY                      3400
+#define IDB_VERIFY_16                   3416
+#define IDB_VERIFY_16M                  3417
+#define IDB_VERIFY_32                   3432
+#define IDB_VERIFY_32M                  3433
+#define IDB_VERIFY_64                   3464
+#define IDB_VERIFY_64M                  3465
+
+#define IDB_DECRYPT_VERIFY              3500
+#define IDB_DECRYPT_VERIFY_16           3516
+#define IDB_DECRYPT_VERIFY_16M          3517
+#define IDB_DECRYPT_VERIFY_32           3532
+#define IDB_DECRYPT_VERIFY_32M          3533
+#define IDB_DECRYPT_VERIFY_64           3564
+#define IDB_DECRYPT_VERIFY_64M          3565
+
+
+/* Special */
+#define IDB_BANNER                      3900  /* The g10 Code logo.  */
 
 
 /* Ids used for the main config dialog.  */
index b283337..cb8f625 100644 (file)
 
 #include "afxres.h"
 
-/* To create these bitmaps, you need to use an Outlook specific
-   palette.  A palette file for The Gimp is included as
-   Outlook.gpl.  */
 
-/*IDB_DECRYPT             BITMAP  DISCARDABLE     "decrypt.bmp"*/
-IDB_ENCRYPT             BITMAP  DISCARDABLE     "encrypt.bmp"
+IDB_ENCRYPT_16            BITMAP  DISCARDABLE  "encrypt-16.bmp"
+IDB_ENCRYPT_16M           BITMAP  DISCARDABLE  "encrypt-16m.bmp"      
+//IDB_ENCRYPT_32            BITMAP  DISCARDABLE        
+//IDB_ENCRYPT_32M           BITMAP  DISCARDABLE        
+//IDB_ENCRYPT_64            BITMAP  DISCARDABLE        
+//IDB_ENCRYPT_64M           BITMAP  DISCARDABLE        
+
+IDB_SIGN_16               BITMAP  DISCARDABLE  "sign-16.bmp"
+IDB_SIGN_16M              BITMAP  DISCARDABLE  "sign-16m.bmp"      
+//IDB_SIGN_32               BITMAP  DISCARDABLE        
+//IDB_SIGN_32M              BITMAP  DISCARDABLE        
+//IDB_SIGN_64               BITMAP  DISCARDABLE        
+//IDB_SIGN_64M              BITMAP  DISCARDABLE        
+
+IDB_KEY_MANAGER_16        BITMAP  DISCARDABLE  "key-manager-16.bmp"
+IDB_KEY_MANAGER_16M       BITMAP  DISCARDABLE  "key-manager-16m.bmp"     
+IDB_KEY_MANAGER_32        BITMAP  DISCARDABLE  "key-manager-32.bmp"      
+IDB_KEY_MANAGER_32M       BITMAP  DISCARDABLE  "key-manager-32m.bmp"      
+//IDB_KEY_MANAGER_64        BITMAP  DISCARDABLE        
+//IDB_KEY_MANAGER_64M       BITMAP  DISCARDABLE        
+
+IDB_DECRYPT_16            BITMAP  DISCARDABLE  "decrypt-16.bmp"     
+IDB_DECRYPT_16M           BITMAP  DISCARDABLE  "decrypt-16m.bmp"     
+//IDB_DECRYPT_32            BITMAP  DISCARDABLE        
+//IDB_DECRYPT_32M           BITMAP  DISCARDABLE        
+//IDB_DECRYPT_64            BITMAP  DISCARDABLE        
+//IDB_DECRYPT_64M           BITMAP  DISCARDABLE        
+
+IDB_VERIFY_16             BITMAP  DISCARDABLE  "verify-16.bmp"          
+IDB_VERIFY_16M            BITMAP  DISCARDABLE  "verify-16m.bmp"     
+//IDB_VERIFY_32             BITMAP  DISCARDABLE        
+//IDB_VERIFY_32M            BITMAP  DISCARDABLE        
+//IDB_VERIFY_64             BITMAP  DISCARDABLE        
+//IDB_VERIFY_64M            BITMAP  DISCARDABLE        
+
+IDB_DECRYPT_VERIFY_16     BITMAP  DISCARDABLE  "decrypt-verify-16.bmp" 
+IDB_DECRYPT_VERIFY_16M    BITMAP  DISCARDABLE  "decrypt-verify-16m.bmp"
+//IDB_DECRYPT_VERIFY_32     BITMAP  DISCARDABLE        
+//IDB_DECRYPT_VERIFY_32M    BITMAP  DISCARDABLE        
+//IDB_DECRYPT_VERIFY_64     BITMAP  DISCARDABLE        
+//IDB_DECRYPT_VERIFY_64M    BITMAP  DISCARDABLE        
+
+
+
+
 IDB_BANNER              BITMAP  DISCARDABLE     "logo.bmp"
-IDB_CRYPTO_STATE        BITMAP  DISCARDABLE     "cryptostate.bmp"
-IDB_PROTO_AUTO          BITMAP  DISCARDABLE     "proto-auto.bmp"
-IDB_PROTO_PGPMIME       BITMAP  DISCARDABLE     "proto-pgpmime.bmp"
-IDB_PROTO_SMIME         BITMAP  DISCARDABLE     "proto-smime.bmp"
-IDB_PROTO_SMIME_MASK    BITMAP  DISCARDABLE     "proto-smime-mask.bmp"
-
-IDB_KEY_MANAGER         BITMAP  DISCARDABLE     "key-manager.bmp"
-IDB_KEY_MANAGER_MASK    BITMAP  DISCARDABLE     "key-manager-mask.bmp"
-IDB_DECRYPT             BITMAP  DISCARDABLE     "decrypt.bmp"
-IDB_DECRYPT_MASK        BITMAP  DISCARDABLE     "decrypt-mask.bmp"
-IDB_VERIFY              BITMAP  DISCARDABLE     "verify.bmp"
-IDB_VERIFY_MASK         BITMAP  DISCARDABLE     "verify-mask.bmp"
-IDB_DECRYPT_VERIFY      BITMAP  DISCARDABLE     "decrypt-verify.bmp"
-IDB_DECRYPT_VERIFY_MASK BITMAP  DISCARDABLE     "decrypt-verify-mask.bmp"
-IDB_SIGN                BITMAP  DISCARDABLE     "sign.bmp"
-IDB_SIGN_MASK           BITMAP  DISCARDABLE     "sign-mask.bmp"
 
 
 
diff --git a/src/encrypt-16.bmp b/src/encrypt-16.bmp
new file mode 100644 (file)
index 0000000..400df01
Binary files /dev/null and b/src/encrypt-16.bmp differ
diff --git a/src/encrypt.bmp b/src/encrypt.bmp
deleted file mode 100644 (file)
index 7ba39be..0000000
Binary files a/src/encrypt.bmp and /dev/null differ
index 5e686e4..d1f7081 100644 (file)
 #include "explorers.h"
 #include "dialogs.h"  /* IDB_xxx */
 #include "cmdbarcontrols.h"
+#include "revert.h"
 
 #include "eventsink.h"
 
 BEGIN_EVENT_SINK(GpgolExplorersEvents, IOOMExplorersEvents)
   STDMETHOD (NewExplorer) (THIS_ LPOOMEXPLORER);
+EVENT_SINK_DEFAULT_CTOR(GpgolExplorersEvents)
 EVENT_SINK_DEFAULT_DTOR(GpgolExplorersEvents)
 EVENT_SINK_INVOKE(GpgolExplorersEvents)
 {
@@ -77,7 +79,7 @@ GpgolExplorersEvents::NewExplorer (LPOOMEXPLORER explorer)
 void
 add_explorer_controls (LPOOMEXPLORER explorer)
 {
-  LPDISPATCH pObj, pDisp, pTmp;
+  LPDISPATCH controls, button, obj;
 
   log_debug ("%s:%s: Enter", SRCNAME, __func__);
 
@@ -86,18 +88,18 @@ add_explorer_controls (LPOOMEXPLORER explorer)
      called from a second thread.  */
 
   /* Check that our controls do not already exist.  */
-  pObj = get_oom_object (explorer, "CommandBars");
-  if (!pObj)
+  obj = get_oom_object (explorer, "CommandBars");
+  if (!obj)
     {
       log_debug ("%s:%s: CommandBars not found", SRCNAME, __func__);
       return;
     }
-  pDisp = get_oom_control_bytag (pObj, "GpgOL_Start_Key_Manager");
-  pObj->Release ();
-  pObj = NULL;
-  if (pDisp)
+  button = get_oom_control_bytag (obj, "GpgOL_Start_Key_Manager");
+  obj->Release ();
+  obj = NULL;
+  if (button)
     {
-      pDisp->Release ();
+      button->Release ();
       log_debug ("%s:%s: Leave (Controls are already added)",
                  SRCNAME, __func__);
       return;
@@ -108,57 +110,115 @@ add_explorer_controls (LPOOMEXPLORER explorer)
      Outlooked crashed.  Quite likely my error but I was not able to
      find the problem.  */
 
-  /* Create the Start-Key-Manager menu entry.  */
-  pDisp = get_oom_object (explorer,
-                          "CommandBars.FindControl(,30007).get_Controls");
-  if (!pDisp)
+  /* Create the Start-Key-Manager menu entries.  */
+  controls = get_oom_object (explorer,
+                             "CommandBars.FindControl(,30007).get_Controls");
+  if (!controls)
     log_debug ("%s:%s: Menu Popup Extras not found\n", SRCNAME, __func__);
   else
     {
-      pTmp = add_oom_button (pDisp);
-      pDisp->Release ();
-      pDisp = pTmp;
-      if (pDisp)
+      button = add_oom_button (controls);
+      if (button)
         {
-          put_oom_string (pDisp, "Tag", "GpgOL_Start_Key_Manager");
-          put_oom_int (pDisp, "Style", msoButtonIconAndCaption );
-          put_oom_string (pDisp, "Caption", _("GnuPG Certificate &Manager"));
-          put_oom_string (pDisp, "TooltipText",
-                          _("Open the certificate manager"));
-          put_oom_icon (pDisp, IDB_KEY_MANAGER, 16);
+          put_oom_string (button, "Tag", "GpgOL_Start_Key_Manager");
+          put_oom_bool (button, "BeginGroup", true);
+          put_oom_int (button, "Style", msoButtonIconAndCaption );
+          put_oom_string (button, "Caption", _("GnuPG Certificate &Manager"));
+          put_oom_icon (button, IDB_KEY_MANAGER, 16);
+          
+          install_GpgolCommandBarButtonEvents_sink (button);
+          /* Fixme:  Save the returned object for an Unadvice.  */
+          button->Release ();
+        }
+
+      button = add_oom_button (controls);
+      if (button)
+        {
+          put_oom_string (button, "Tag", "GpgOL_Revert_Folder");
+          put_oom_int (button, "Style", msoButtonCaption );
+          put_oom_string (button, "Caption",
+                          _("Remove GpgOL flags from this folder"));
           
-          install_GpgolCommandBarButtonEvents_sink (pDisp);
-          pDisp->Release ();
+          install_GpgolCommandBarButtonEvents_sink (button);
+          /* Fixme:  Save the returned object for an Unadvice.  */
+          button->Release ();
         }
+
+      controls->Release ();
+      controls = NULL;
     }
 
   /* Create the Start-Key-Manager toolbar icon.  Not ethat we need to
      use a different tag name here.  If we won't do that event sink
      would be called twice.  */
-  pDisp = get_oom_object (explorer,
+  controls = get_oom_object (explorer,
                           "CommandBars.Item(Standard).get_Controls");
-  if (!pDisp)
+  if (!controls)
     log_debug ("%s:%s: CommandBar \"Standard\" not found\n",
                SRCNAME, __func__);
   else
     {
-      pTmp = add_oom_button (pDisp);
-      pDisp->Release ();
-      pDisp = pTmp;
-      if (pDisp)
+      button = add_oom_button (controls);
+      if (button)
         {
-          put_oom_string (pDisp, "Tag", "GpgOL_Start_Key_Manager@t");
-          put_oom_int (pDisp, "Style", msoButtonIcon );
-          put_oom_string (pDisp, "TooltipText",
+          put_oom_string (button, "Tag", "GpgOL_Start_Key_Manager@t");
+          put_oom_int (button, "Style", msoButtonIcon );
+          put_oom_string (button, "TooltipText",
                           _("Open the certificate manager"));
-          put_oom_icon (pDisp, IDB_KEY_MANAGER, 16);
+          put_oom_icon (button, IDB_KEY_MANAGER, 16);
           
-          install_GpgolCommandBarButtonEvents_sink (pDisp);
+          install_GpgolCommandBarButtonEvents_sink (button);
           /* Fixme:  store the event sink object somewhere.  */
-          pDisp->Release ();
+          button->Release ();
         }
+      controls->Release ();
     }
   
   log_debug ("%s:%s: Leave", SRCNAME, __func__);
 }
 
+
+
+void
+run_explorer_revert_folder (LPDISPATCH button)
+{
+  LPDISPATCH obj;
+
+  log_debug ("%s:%s: Enter", SRCNAME, __func__);
+
+  /* Notify the user that the general GpgOl function will be disabled
+     when calling this function.  */
+  if ( opt.disable_gpgol
+       || (MessageBox 
+           (NULL/* FIXME: need the hwnd */,
+            _("You are about to start the process of reversing messages "
+              "created by GpgOL to prepare deinstalling of GpgOL. "
+              "Running this command will put GpgOL into a disabled state "
+              "so that messages are not anymore processed by GpgOL.\n"
+              "\n"
+              "You should convert all folders one after the other with "
+              "this command, close Outlook and then deinstall GpgOL.\n"
+              "\n"
+              "Note that if you start Outlook again with GpgOL still "
+              "being installed, GpgOL will again process messages."),
+            _("GpgOL"), MB_ICONWARNING|MB_OKCANCEL) == IDOK))
+    {
+      if ( MessageBox 
+           (NULL /* Fixme: need hwnd */,
+            _("Do you want to revert this folder?"),
+            _("GpgOL"), MB_ICONQUESTION|MB_YESNO) == IDYES )
+        {
+          if (!opt.disable_gpgol)
+            opt.disable_gpgol = 1;
+
+          obj = get_oom_object (button, 
+                                "get_Parent.get_Parent.get_Parent.get_Parent"
+                                ".get_CurrentFolder");
+          if (obj)
+            {
+              gpgol_folder_revert (obj);
+              obj->Release ();
+            }
+        }
+    }
+}
index 7554d15..6e82882 100644 (file)
@@ -86,6 +86,8 @@ LPDISPATCH install_GpgolExplorersEvents_sink (LPDISPATCH obj);
 
 void add_explorer_controls (LPOOMEXPLORER explorer);
 
+void run_explorer_revert_folder (LPDISPATCH button);
+
 
 
 #endif /*EXPLORERS_H*/
index befdf60..4de6c28 100644 (file)
@@ -38,8 +38,8 @@
 #include "ol-ext-callback.h"
 #include "message.h"
 #include "engine.h"
-#include "ext-commands.h"
 #include "revert.h"
+#include "ext-commands.h"
 #include "explorers.h"
 
 #define TRACEPOINT() do { log_debug ("%s:%s:%d: tracepoint\n", \
@@ -99,17 +99,7 @@ GpgolExtCommands::GpgolExtCommands (GpgolExt* pParentInterface)
   m_pExchExt = pParentInterface; 
   m_lRef = 0; 
   m_lContext = 0; 
-  m_nCmdProtoAuto = 0;
-  m_nCmdProtoPgpmime = 0;
-  m_nCmdProtoSmime = 0;
-  m_nCmdEncrypt = 0;  
-  m_nCmdSign = 0; 
-  m_nCmdRevertFolder = 0;
-  m_nCmdDebug0 = 0;
-  m_nCmdDebug1 = 0;
-  m_nCmdDebug2 = 0;
-  m_nCmdDebug3 = 0;
-  m_toolbar_info = NULL; 
+    m_toolbar_info = NULL; 
   m_hWnd = NULL; 
 
   if (!bitmaps_initialized)
@@ -426,30 +416,9 @@ GpgolExtCommands::InstallCommands (
   /* Now install menu and toolbar items.  */
   if (m_lContext == EECONTEXT_READNOTEMESSAGE)
     {
-      add_menu (eecb, pnCommandIDBase,
-        "@", NULL,
-        (opt.enable_debug && !opt.disable_gpgol)?
-                "GpgOL Debug-1 (open_inspector)":"", &m_nCmdDebug1,
-        (opt.enable_debug && !opt.disable_gpgol)? 
-                "GpgOL Debug-2 (change msg class)":"", &m_nCmdDebug2,
-        opt.enable_debug? "GpgOL Debug-3 (revert message class)":"",
-                &m_nCmdDebug3,
-        NULL);
-
     }
   else if (m_lContext == EECONTEXT_SENDNOTEMESSAGE && !opt.disable_gpgol) 
     {
-      add_menu (eecb, pnCommandIDBase,
-        "@", NULL,
-        _("&encrypt message with GnuPG"), &m_nCmdEncrypt,
-        _("&sign message with GnuPG"), &m_nCmdSign,
-        NULL );
-
-        add_toolbar (pTBEArray, nTBECnt,
-                     "Encrypt", IDB_ENCRYPT, m_nCmdEncrypt,
-                     "Sign",    IDB_SIGN,    m_nCmdSign,
-                     NULL, 0, 0);
-      
       m_pExchExt->m_protoSelection = opt.default_protocol;
 
       if (draft_info && draft_info[0] == 'E')
@@ -468,15 +437,9 @@ GpgolExtCommands::InstallCommands (
 
       if (force_encrypt)
         m_pExchExt->m_gpgEncrypt = true;
-      check_menu (eecb, m_nCmdEncrypt, m_pExchExt->m_gpgEncrypt);
-      check_menu (eecb, m_nCmdSign, m_pExchExt->m_gpgSign);
     }
   else if (m_lContext == EECONTEXT_VIEWER) 
     {
-      add_menu (eecb, pnCommandIDBase, 
-        "@", NULL,
-        _("Remove GpgOL flags from this folder"), &m_nCmdRevertFolder,
-        NULL);
 
     }
 
@@ -575,109 +538,6 @@ GpgolExtCommands::DoCommand (LPEXCHEXTCALLBACK eecb, UINT nCommandID)
         log_debug ("%s:%s: command Forward called\n", SRCNAME, __func__);
       return S_FALSE; /* Pass it on.  */
     }
-  else if (nCommandID == m_nCmdEncrypt
-           && m_lContext == EECONTEXT_SENDNOTEMESSAGE) 
-    {
-      log_debug ("%s:%s: command Encrypt called\n", SRCNAME, __func__);
-      m_pExchExt->m_gpgEncrypt = !m_pExchExt->m_gpgEncrypt;
-      check_menu (eecb, m_nCmdEncrypt, m_pExchExt->m_gpgEncrypt);
-    }
-  else if (nCommandID == m_nCmdSign
-           && m_lContext == EECONTEXT_SENDNOTEMESSAGE) 
-    {
-      log_debug ("%s:%s: command Sign called\n", SRCNAME, __func__);
-      m_pExchExt->m_gpgSign = !m_pExchExt->m_gpgSign;
-      check_menu (eecb, m_nCmdSign, m_pExchExt->m_gpgSign);
-    }
-  else if (nCommandID == m_nCmdRevertFolder
-           && m_lContext == EECONTEXT_VIEWER)
-    {
-      log_debug ("%s:%s: command ReverFoldert called\n", SRCNAME, __func__);
-      /* Notify the user that the general GpgOl fucntionaly will be
-         disabled when calling this function the first time.  */
-      if ( opt.disable_gpgol
-           || (MessageBox 
-               (hwnd,
-                _("You are about to start the process of reversing messages "
-                  "created by GpgOL to prepare deinstalling of GpgOL. "
-                  "Running this command will put GpgOL into a disabled state "
-                  "so that messages are not anymore processed by GpgOL.\n"
-                  "\n"
-                  "You should convert all folders one after the other with "
-                  "this command, close Outlook and then deinstall GpgOL.\n"
-                  "\n"
-                  "Note that if you start Outlook again with GpgOL still "
-                  "being installed, GpgOL will again process messages."),
-                _("GpgOL"), MB_ICONWARNING|MB_OKCANCEL) == IDOK))
-        {
-          if ( MessageBox 
-               (hwnd,
-                _("Do you want to revert this folder?"),
-                _("GpgOL"), MB_ICONQUESTION|MB_YESNO) == IDYES )
-            {
-              if (!opt.disable_gpgol)
-                opt.disable_gpgol = 1;
-          
-              gpgol_folder_revert (eecb);
-            }
-        }
-    }
-  else if (opt.enable_debug && nCommandID == m_nCmdDebug0
-           && m_lContext == EECONTEXT_READNOTEMESSAGE)
-    {
-      log_debug ("%s:%s: command Debug0 (showInfo) called\n",
-                 SRCNAME, __func__);
-      hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
-      if (SUCCEEDED (hr))
-        {
-          message_show_info (message, hwnd);
-       }
-      ul_release (message, __func__, __LINE__);
-      ul_release (mdb, __func__, __LINE__);
-    }
-  else if (opt.enable_debug && nCommandID == m_nCmdDebug1
-           && m_lContext == EECONTEXT_READNOTEMESSAGE)
-    {
-      log_debug ("%s:%s: command Debug1 (open inspector) called\n",
-                 SRCNAME, __func__);
-      hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
-      if (SUCCEEDED (hr))
-        {
-          open_inspector (eecb, message);
-       }
-      ul_release (message, __func__, __LINE__);
-      ul_release (mdb, __func__, __LINE__);
-    }
-  else if (opt.enable_debug && nCommandID == m_nCmdDebug2
-           && m_lContext == EECONTEXT_READNOTEMESSAGE)
-    {
-      log_debug ("%s:%s: command Debug2 (change message class) called\n", 
-                 SRCNAME, __func__);
-      hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
-      if (SUCCEEDED (hr))
-        {
-          /* We sync here. */
-          mapi_change_message_class (message, 1);
-       }
-      ul_release (message, __func__, __LINE__);
-      ul_release (mdb, __func__, __LINE__);
-    }
-  else if (opt.enable_debug && nCommandID == m_nCmdDebug3
-           && m_lContext == EECONTEXT_READNOTEMESSAGE)
-    {
-      log_debug ("%s:%s: command Debug3 (revert_message_class) called\n", 
-                 SRCNAME, __func__);
-      hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
-      if (SUCCEEDED (hr))
-        {
-          int rc = gpgol_message_revert (message, 1, 
-                                         KEEP_OPEN_READWRITE|FORCE_SAVE);
-          log_debug ("%s:%s: gpgol_message_revert returns %d\n", 
-                     SRCNAME, __func__, rc);
-       }
-      ul_release (message, __func__, __LINE__);
-      ul_release (mdb, __func__, __LINE__);
-    }
   else if (nCommandID == EECMDID_SaveMessage
            && m_lContext == EECONTEXT_SENDNOTEMESSAGE) 
     {
@@ -738,24 +598,7 @@ GpgolExtCommands::Help (LPEXCHEXTCALLBACK eecb, UINT nCommandID)
 
   show_event_object (eecb, __func__);
 
-  if (nCommandID == m_nCmdEncrypt 
-           && m_lContext == EECONTEXT_SENDNOTEMESSAGE) 
-    {
-      MessageBox (m_hWnd,
-                  _("Select this option to encrypt the message."),
-                  "GpgOL", MB_OK);     
-    } 
-  else if (nCommandID == m_nCmdSign
-           && m_lContext == EECONTEXT_SENDNOTEMESSAGE) 
-    {
-      MessageBox (m_hWnd,
-                  _("Select this option to sign the message."),
-                  "GpgOL", MB_OK);     
-    }
-  else
-    return S_FALSE;
-
-  return S_OK;
+  return S_FALSE;
 }
 
 
@@ -772,30 +615,7 @@ GpgolExtCommands::QueryHelpText(UINT nCommandID, ULONG lFlags,
                                 LPTSTR pszText,  UINT nCharCnt)    
 {
 
-  if (nCommandID == m_nCmdEncrypt
-           && m_lContext == EECONTEXT_SENDNOTEMESSAGE) 
-    {
-      if (lFlags == EECQHT_STATUS)
-        lstrcpyn (pszText, ".", nCharCnt);
-      if (lFlags == EECQHT_TOOLTIP)
-        lstrcpyn (pszText,
-                  _("Encrypt message with GnuPG"),
-                  nCharCnt);
-    }
-  else if (nCommandID == m_nCmdSign
-           && m_lContext == EECONTEXT_SENDNOTEMESSAGE) 
-    {
-      if (lFlags == EECQHT_STATUS)
-        lstrcpyn (pszText, ".", nCharCnt);
-      if (lFlags == EECQHT_TOOLTIP)
-        lstrcpyn (pszText,
-                  _("Sign message with GnuPG"),
-                  nCharCnt);
-    }
-  else 
-    return S_FALSE;
-
-  return S_OK;
+  return S_FALSE;
 }
 
 
@@ -849,19 +669,6 @@ GpgolExtCommands::QueryButtonInfo (ULONG toolbarid, UINT buttonid,
     n = description_size;
   lstrcpyn (description, tb_info->desc, n);
 
-  if (tb_info->cmd_id == m_nCmdEncrypt)
-    {
-      pTBB->fsStyle |= TBSTYLE_CHECK;
-      if (m_pExchExt->m_gpgEncrypt)
-        pTBB->fsState |= TBSTATE_CHECKED;
-    }
-  else if (tb_info->cmd_id == m_nCmdSign)
-    {
-      pTBB->fsStyle |= TBSTYLE_CHECK;
-      if (m_pExchExt->m_gpgSign)
-        pTBB->fsState |= TBSTATE_CHECKED;
-    }
-
   return S_OK;
 }
 
index bce887f..903c103 100644 (file)
@@ -40,17 +40,6 @@ private:
   ULONG m_lRef;
   ULONG m_lContext;
   
-  UINT  m_nCmdProtoAuto;
-  UINT  m_nCmdProtoPgpmime;
-  UINT  m_nCmdProtoSmime;
-  UINT  m_nCmdEncrypt;
-  UINT  m_nCmdSign;
-  UINT  m_nCmdRevertFolder;
-  UINT  m_nCmdDebug0;
-  UINT  m_nCmdDebug1;
-  UINT  m_nCmdDebug2;
-  UINT  m_nCmdDebug3;
-
   /* A list of all active toolbar items.  */
   toolbar_info_t m_toolbar_info;
   
index 4309c19..ed80acc 100644 (file)
@@ -37,6 +37,7 @@
 /* Event sink for an Inspectors collection object.  */
 BEGIN_EVENT_SINK(GpgolInspectorsEvents, IOOMInspectorsEvents)
   STDMETHOD (NewInspector) (THIS_ LPOOMINSPECTOR);
+EVENT_SINK_DEFAULT_CTOR(GpgolInspectorsEvents)
 EVENT_SINK_DEFAULT_DTOR(GpgolInspectorsEvents)
 EVENT_SINK_INVOKE(GpgolInspectorsEvents)
 {
@@ -67,6 +68,11 @@ BEGIN_EVENT_SINK(GpgolInspectorEvents, IOOMInspectorEvents)
   STDMETHOD_ (void, Activate) (THIS_);
   STDMETHOD_ (void, Close) (THIS_);
   STDMETHOD_ (void, Deactivate) (THIS_);
+  bool m_first_activate_seen;
+EVENT_SINK_CTOR(GpgolInspectorEvents)
+{
+  m_first_activate_seen = false;
+}
 EVENT_SINK_DEFAULT_DTOR(GpgolInspectorEvents)
 EVENT_SINK_INVOKE(GpgolInspectorEvents)
 {
@@ -95,6 +101,18 @@ END_EVENT_SINK(GpgolInspectorEvents, IID_IOOMInspectorEvents)
 
 
 \f
+/* A linked list as a simple collection of button.  */
+struct button_list_s
+{
+  struct button_list_s *next;
+  LPDISPATCH sink;
+  LPDISPATCH button;
+  int instid;
+  char tag[1];         /* Variable length string.  */
+};
+typedef struct button_list_s *button_list_t;
+
+
 /* To avoid messing around with the OOM (adding extra objects as user
    properties and such), we keep our own information structure about
    inspectors. */
@@ -110,8 +128,8 @@ struct inspector_info_s
      locate the inspector object.  */
   LPOOMINSPECTOREVENTS eventsink;
 
-  /* The event sink object for the crypto info button.  */
-  LPDISPATCH crypto_info_sink;
+  /* A list of all the buttons.  */
+  button_list_t buttons;
 
 };
 typedef struct inspector_info_s *inspector_info_t;
@@ -120,6 +138,11 @@ typedef struct inspector_info_s *inspector_info_t;
 static inspector_info_t all_inspectors;
 static HANDLE all_inspectors_lock;
 
+
+static void update_crypto_info (LPDISPATCH button);
+
+
+\f
 /* Initialize this module.  Returns 0 on success.  Called once by dllinit.  */
 int
 initialize_inspectors (void)
@@ -164,6 +187,34 @@ unlock_all_inspectors (void)
 }
 
 
+/* Add SINK and BUTTON to the list at LISTADDR.  The list takes
+   ownership of SINK and BUTTON, thus the caller may not use OBJ or
+   OBJ2 after this call.  If TAG is given it is stored as well.  */
+static void
+move_to_button_list (button_list_t *listaddr, 
+                     LPDISPATCH sink, LPDISPATCH button, const char *tag)
+{
+  button_list_t item;
+  int instid;
+
+  if (!tag)
+    tag = "";
+
+  instid = button? get_oom_int (button, "InstanceId"): 0;
+
+  // log_debug ("%s:%s: sink=%p btn=%p tag=(%s) instid=%d",
+  //            SRCNAME, __func__, sink, button, tag, instid);
+
+  item = (button_list_t)xcalloc (1, sizeof *item + strlen (tag));
+  item->sink = sink;
+  item->button = button;
+  item->instid = instid;
+  strcpy (item->tag, tag);
+  item->next = *listaddr;
+  *listaddr = item;
+}
+
+
 /* Register the inspector object INSPECTOR along with its event SINK.  */
 static void
 register_inspector (LPOOMINSPECTOR inspector, LPOOMINSPECTOREVENTS sink)
@@ -190,6 +241,7 @@ static void
 deregister_inspector (LPOOMINSPECTOREVENTS sink)
 {
   inspector_info_t r, rprev;
+  button_list_t ol, ol2;
 
   if (!sink)
     return;
@@ -215,8 +267,17 @@ deregister_inspector (LPOOMINSPECTOREVENTS sink)
   r->eventsink = NULL;
   if (r->inspector)
     r->inspector->Release ();
-  if (r->crypto_info_sink)
-    r->crypto_info_sink->Release ();
+
+  for (ol = r->buttons; ol; ol = ol2)
+    {
+      ol2 = ol->next;
+      if (ol->sink)
+        ol->sink->Release ();
+      if (ol->button)
+        ol->button->Release ();
+      xfree (ol);
+    }
+
   xfree (r);
 }
 
@@ -242,6 +303,42 @@ get_inspector_info (LPOOMINSPECTOR inspector)
 }
 
 
+/* Search through all objects and find the inspector which has a
+   button with the instanceId INSTID.  The find the button with TAG in
+   that inspector and return it.  Caller must release the returned
+   button.  Returns NULL if not found.  */
+static LPDISPATCH
+get_button_by_instid_and_tag (int instid, const char *tag)
+{
+  LPDISPATCH result = NULL;
+  inspector_info_t iinfo;
+  button_list_t ol;
+
+  // log_debug ("%s:%s: inst=%d tag=(%s)",SRCNAME, __func__, instid, tag);
+
+  lock_all_inspectors ();
+
+  for (iinfo = all_inspectors; iinfo; iinfo = iinfo->next)
+    for (ol = iinfo->buttons; ol; ol = ol->next)
+      if (ol->instid == instid)
+        {
+          /* Found the inspector.  Now look for the tag.  */
+          for (ol = iinfo->buttons; ol; ol = ol->next)
+            if (ol->tag && !strcmp (ol->tag, tag))
+              {
+                result = ol->button;
+                if (result)
+                  result->AddRef ();
+                break;
+              }
+          break;
+        }
+
+  unlock_all_inspectors ();
+  return result;
+}
+
+
 
 /* The method called by outlook for each new inspector.  Note that
    Outlook sometimes reuses Inspectro objects thus this event is not
@@ -261,7 +358,6 @@ GpgolInspectorsEvents::NewInspector (LPOOMINSPECTOR inspector)
     {
       register_inspector (inspector, (LPOOMINSPECTOREVENTS)obj);
       obj->Release ();
-      add_inspector_controls (inspector);
     }
   inspector->Release ();
   return S_OK;
@@ -284,6 +380,7 @@ STDMETHODIMP_(void)
 GpgolInspectorEvents::Activate (void)
 {
   LPDISPATCH obj, button;
+  LPOOMINSPECTOR inspector;
 
   log_debug ("%s:%s: Called", SRCNAME, __func__);
 
@@ -296,7 +393,18 @@ GpgolInspectorEvents::Activate (void)
       log_error ("%s:%s: Object not set", SRCNAME, __func__);
       return;
     }
+  inspector = (LPOOMINSPECTOR)m_object;
 
+  /* If this is the first activate for the inspector, we add the
+     controls.  We do it only now to be sure that everything has been
+     initialized.  Doing that in GpgolInspectorsEvents::NewInspector
+     is not suggested due to claims from some mailing lists.  */ 
+  if (!m_first_activate_seen)
+    {
+      m_first_activate_seen = true;
+      add_inspector_controls (inspector);
+    }
+  
   /* Update the crypt info.  */
   obj = get_oom_object (m_object, "CommandBars");
   if (!obj)
@@ -307,7 +415,7 @@ GpgolInspectorEvents::Activate (void)
       obj->Release ();
       if (button)
         {
-          update_inspector_crypto_info (button);
+          update_crypto_info (button);
           button->Release ();
         }
     }
@@ -323,14 +431,37 @@ GpgolInspectorEvents::Deactivate (void)
 }
 
 
+/* Check whether we are in composer or read mode.  */
+static bool
+is_inspector_in_composer_mode (LPDISPATCH inspector)
+{
+  LPDISPATCH obj;
+  bool in_composer;
+  
+  obj = get_oom_object (inspector, "get_CurrentItem");
+  if (obj)
+    {
+      /* We are in composer mode if the "Sent" property is false and
+         the class is 43.  */
+      in_composer = (!get_oom_bool (obj, "Sent") 
+                     && get_oom_int (obj, "Class") == 43);
+      obj->Release ();
+    }
+  else
+    in_composer = false;
+  return in_composer;
+}
 
 
-
+/* Add all the controls.  */
 void
 add_inspector_controls (LPOOMINSPECTOR inspector)
 {
-  LPDISPATCH pObj, pDisp, pTmp;
+  LPDISPATCH obj, controls, button;
   inspector_info_t inspinfo;
+  button_list_t buttonlist = NULL;
+  const char *tag;
+  int in_composer;
 
   log_debug ("%s:%s: Enter", SRCNAME, __func__);
 
@@ -341,75 +472,206 @@ add_inspector_controls (LPOOMINSPECTOR inspector)
      to keep a lock per inspector. */
 
   /* Check that our controls do not already exist.  */
-  pObj = get_oom_object (inspector, "CommandBars");
-  if (!pObj)
+  obj = get_oom_object (inspector, "CommandBars");
+  if (!obj)
     {
-      log_debug ("%s:%s: CommandBars not found", SRCNAME, __func__);
+      log_error ("%s:%s: CommandBars not found", SRCNAME, __func__);
       return;
     }
-  pDisp = get_oom_control_bytag (pObj, "GpgOL_Inspector_Crypto_Info");
-  pObj->Release ();
-  pObj = NULL;
-  if (pDisp)
+  button= get_oom_control_bytag (obj, "GpgOL_Inspector_Crypto_Info");
+  obj->Release ();
+  if (button)
     {
-      pDisp->Release ();
+      button->Release ();
       log_debug ("%s:%s: Leave (Controls are already added)",
                  SRCNAME, __func__);
       return;
     }
 
-  /* Create our controls.  */
-  pDisp = get_oom_object (inspector,
-                          "CommandBars.Item(Standard).get_Controls");
-  if (!pDisp)
-    log_debug ("%s:%s: CommandBar \"Standard\" not found\n",
-               SRCNAME, __func__);
-  else
+  /* Check whether we are in composer or read mode.  */
+  in_composer = is_inspector_in_composer_mode (inspector);
+
+  /* Add buttons to the Format menu but only in composer mode.  */
+  if (in_composer)
     {
-      pTmp = add_oom_button (pDisp);
-      pDisp->Release ();
-      pDisp = pTmp;
-      if (pDisp)
+      controls = get_oom_object 
+        (inspector, "CommandBars.FindControl(,30006).get_Controls");
+      if (!controls)
+        log_debug ("%s:%s: Menu Popup Format not found\n", SRCNAME, __func__);
+      else
         {
-          put_oom_string (pDisp, "Tag", "GpgOL_Inspector_Crypto_Info");
-          put_oom_int (pDisp, "Style", msoButtonIcon );
-          put_oom_string (pDisp, "TooltipText",
-                          _("Indicates the crypto status of the message"));
-          put_oom_icon (pDisp, IDB_SIGN, 16);
-          
-          pObj = install_GpgolCommandBarButtonEvents_sink (pDisp);
-          pDisp->Release ();
-          inspinfo = get_inspector_info (inspector);
-          if (inspinfo)
+          button = opt.disable_gpgol? NULL : add_oom_button (controls);
+          if (button)
             {
-              inspinfo->crypto_info_sink = pObj;
-              unlock_all_inspectors ();
+              put_oom_string (button, "Tag", (tag = "GpgOL_Inspector_Encrypt"));
+              put_oom_bool (button, "BeginGroup", true);
+              put_oom_int (button, "Style", msoButtonIconAndCaption );
+              put_oom_string (button, "Caption",
+                              _("&encrypt message with GnuPG"));
+              put_oom_icon (button, IDB_ENCRYPT, 16);
+              
+              obj = install_GpgolCommandBarButtonEvents_sink (button);
+              move_to_button_list (&buttonlist, obj, button, tag);
             }
-          else
+          
+          button = opt.disable_gpgol? NULL : add_oom_button (controls);
+          if (button)
             {
-              log_error ("%s:%s: inspector not registered", SRCNAME, __func__);
-              pObj->Release (); /* Get rid of the sink.  */
+              put_oom_string (button, "Tag", (tag = "GpgOL_Inspector_Sign"));
+              put_oom_int (button, "Style", msoButtonIconAndCaption );
+              put_oom_string (button, "Caption", _("&sign message with GnuPG"));
+              put_oom_icon (button, IDB_SIGN, 16);
+              
+              obj = install_GpgolCommandBarButtonEvents_sink (button);
+              move_to_button_list (&buttonlist, obj, button, tag);
             }
+          
+          controls->Release ();
+        }
+    }
+  
+
+  /* Add buttons to the Extra menu.  */
+  controls = get_oom_object (inspector,
+                             "CommandBars.FindControl(,30007).get_Controls");
+  if (!controls)
+    log_debug ("%s:%s: Menu Popup Extras not found\n", SRCNAME, __func__);
+  else
+    {
+      button = in_composer? NULL : add_oom_button (controls);
+      if (button)
+        {
+          put_oom_string (button, "Tag", (tag = "GpgOL_Inspector_Verify"));
+          put_oom_int (button, "Style", msoButtonIconAndCaption );
+          put_oom_string (button, "Caption", _("GpgOL Decrypt/Verify"));
+          put_oom_icon (button, IDB_DECRYPT_VERIFY, 16);
+          
+          obj = install_GpgolCommandBarButtonEvents_sink (button);
+          move_to_button_list (&buttonlist, obj, button, tag);
+        }
+
+      button = opt.enable_debug? add_oom_button (controls) : NULL;
+      if (button)
+        {
+          put_oom_string (button, "Tag", (tag = "GpgOL_Inspector_Debug-0"));
+          put_oom_int (button, "Style", msoButtonCaption );
+          put_oom_string (button, "Caption",
+                          "GpgOL Debug-0 (display crypto info)");
+          
+          obj = install_GpgolCommandBarButtonEvents_sink (button);
+          move_to_button_list (&buttonlist, obj, button, tag);
+        }
+
+      button = opt.enable_debug? add_oom_button (controls) : NULL;
+      if (button)
+        {
+          put_oom_string (button, "Tag", (tag = "GpgOL_Inspector_Debug-1"));
+          put_oom_int (button, "Style", msoButtonCaption );
+          put_oom_string (button, "Caption",
+                          "GpgOL Debug-1 (open_inspector)");
+          
+          obj = install_GpgolCommandBarButtonEvents_sink (button);
+          move_to_button_list (&buttonlist, obj, button, tag);
         }
+
+      button = opt.enable_debug? add_oom_button (controls) : NULL;
+      if (button)
+        {
+          put_oom_string (button, "Tag", (tag = "GpgOL_Inspector_Debug-2"));
+          put_oom_int (button, "Style", msoButtonCaption );
+          put_oom_string (button, "Caption",
+                          "GpgOL Debug-2 (change message class)");
+          
+          obj = install_GpgolCommandBarButtonEvents_sink (button);
+          move_to_button_list (&buttonlist, obj, button, tag);
+        }
+
+      controls->Release ();
     }
 
-  /* FIXME: Menuswe need to add: */
-        // (opt.disable_gpgol || not_a_gpgol_message)?
-        //         "" : _("GpgOL Decrypt/Verify"), &m_nCmdCryptoState,
-        // opt.enable_debug? "GpgOL Debug-0 (display crypto info)":"", 
-        //         &m_nCmdDebug0,
 
+  /* Create the toolbar buttons.  */
+  controls = get_oom_object (inspector,
+                             "CommandBars.Item(Standard).get_Controls");
+  if (!controls)
+    log_error ("%s:%s: CommandBar \"Standard\" not found\n",
+               SRCNAME, __func__);
+  else
+    {
+      button = (opt.disable_gpgol || !in_composer
+                ? NULL : add_oom_button (controls));
+      if (button)
+        {
+          put_oom_string (button, "Tag", (tag = "GpgOL_Inspector_Encrypt@t"));
+          put_oom_int (button, "Style", msoButtonIcon );
+          put_oom_string (button, "Caption", _("Encrypt message with GnuPG"));
+          put_oom_icon (button, IDB_ENCRYPT, 16);
+          put_oom_int (button, "State", msoButtonMixed );
+          
+          obj = install_GpgolCommandBarButtonEvents_sink (button);
+          move_to_button_list (&buttonlist, obj, button, tag);
+        }
+
+      button = (opt.disable_gpgol || !in_composer
+                ? NULL : add_oom_button (controls));
+      if (button)
+        {
+          put_oom_string (button, "Tag", (tag = "GpgOL_Inspector_Sign@t"));
+          put_oom_int (button, "Style", msoButtonIcon);
+          put_oom_string (button, "Caption", _("Sign message with GnuPG"));
+          put_oom_icon (button, IDB_SIGN, 16);
+          put_oom_int (button, "State", msoButtonDown);
+          
+          obj = install_GpgolCommandBarButtonEvents_sink (button);
+          move_to_button_list (&buttonlist, obj, button, tag);
+        }
 
+      button = in_composer? NULL : add_oom_button (controls);
+      if (button)
+        {
+          put_oom_string (button, "Tag", (tag = "GpgOL_Inspector_Crypto_Info"));
+          put_oom_int (button, "Style", msoButtonIcon);
+          
+          obj = install_GpgolCommandBarButtonEvents_sink (button);
+          move_to_button_list (&buttonlist, obj, button, tag);
+        }
+
+      controls->Release ();
+    }
+
+
+  /* Save the buttonlist.  */
+  inspinfo = get_inspector_info (inspector);
+  if (inspinfo)
+    {
+      inspinfo->buttons = buttonlist;
+      unlock_all_inspectors ();
+    }
+  else
+    {
+      button_list_t ol, ol2;
+
+      log_error ("%s:%s: inspector not registered", SRCNAME, __func__);
+      for (ol = buttonlist; ol; ol = ol2)
+        {
+          ol2 = ol->next;
+          if (ol->sink)
+            ol->sink->Release ();
+          if (ol->button)
+            ol->button->Release ();
+          xfree (ol);
+        }
+    }
     
   log_debug ("%s:%s: Leave", SRCNAME, __func__);
 }
 
 
 /* Update the crypto info icon.  */
-void
-update_inspector_crypto_info (LPDISPATCH button)
+static void
+update_crypto_info (LPDISPATCH button)
 {
-  LPDISPATCH obj;
+  LPDISPATCH inspector;
   char *msgcls = NULL;;
   const char *s;
   int in_composer = 0;
@@ -422,13 +684,13 @@ update_inspector_crypto_info (LPDISPATCH button)
      versions via mapi_get_message_type and mapi_test_sig_status
      in UserProperties and use them instead of a direct lookup of
      the messageClass.  */
-  obj = get_oom_object (button, "get_Parent.get_Parent.get_CurrentItem");
-  if (obj)
+
+  inspector = get_oom_object (button, "get_Parent.get_Parent.get_CurrentItem");
+  if (inspector)
     {
-      msgcls = get_oom_string (obj, "MessageClass");
-      /* If "Sent" is false we are in composer mode  */
-      in_composer = !get_oom_bool (obj, "Sent");
-      obj->Release ();
+      msgcls = get_oom_string (inspector, "MessageClass");
+      in_composer = is_inspector_in_composer_mode (inspector);
+      inspector->Release ();
     }
   if (msgcls)
     {
@@ -494,3 +756,131 @@ update_inspector_crypto_info (LPDISPATCH button)
     }
 }
 
+
+/* Toggle a button and return the new state.  */
+static int
+toggle_button (LPDISPATCH button, const char *tag, int instid)
+{
+  int state = get_oom_int (button, "State");
+  char tag2[256];
+  LPDISPATCH button2;
+
+  log_debug ("%s:%s: button `%s' state is %d", SRCNAME, tag, __func__, state);
+  state = (state == msoButtonUp)? msoButtonDown : msoButtonUp;
+  put_oom_int (button, "State", state);
+
+  /* Toggle the other button.  */
+  mem2str (tag2, tag, sizeof tag2 - 2);
+  if (*tag2 && tag2[1] && !strcmp (tag2+strlen(tag2)-2, "@t"))
+    tag2[strlen(tag2)-2] = 0; /* Remove the "@t".  */
+  else
+    strcat (tag2, "@t");      /* Append a "@t".  */
+
+  button2 = get_button_by_instid_and_tag (instid, tag2);
+  if (!button2)
+    log_debug ("%s:%s: button `%s' not found", SRCNAME, __func__, tag2);
+  else
+    {
+      put_oom_int (button2, "State", state);
+      button2->Release ();
+    }
+  return state;
+}
+
+
+/* Called for a click on an inspector button.  BUTTON is the button
+   object and TAG is the tag value (which is guaranteed not to be
+   NULL).  INSTID is the instance ID of the button. */
+void
+proc_inspector_button_click (LPDISPATCH button, const char *tag, int instid)
+{
+  if (!tagcmp (tag, "GpgOL_Inspector_Encrypt"))
+    {  
+      toggle_button (button, tag, instid);
+    }
+  else if (!tagcmp (tag, "GpgOL_Inspector_Sign"))
+    {  
+      toggle_button (button, tag, instid);
+    }
+  else if (!tagcmp (tag, "GpgOL_Inspector_Verify"))
+    {
+      /* FIXME: We need to invoke decrypt/verify again. */
+    }
+  else if (!tagcmp (tag, "GpgOL_Inspector_Crypto_Info"))
+    {
+      /* FIXME: We should invoke the decrypt/verify again. */
+      update_crypto_info (button);
+#if 0 /* This is the code we used to use.  */
+      log_debug ("%s:%s: command CryptoState called\n", SRCNAME, __func__);
+      hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
+      if (SUCCEEDED (hr))
+        {
+          if (message_incoming_handler (message, hwnd, true))
+            message_display_handler (eecb, hwnd);
+       }
+      else
+        log_debug_w32 (hr, "%s:%s: command CryptoState failed", 
+                       SRCNAME, __func__);
+      ul_release (message, __func__, __LINE__);
+      ul_release (mdb, __func__, __LINE__);
+#endif
+    }
+  else if (!tagcmp (tag, "GpgOL_Inspector_Debug-0"))
+    {
+      /* Show crypto info.  */
+      log_debug ("%s:%s: command Debug0 (showInfo) called\n",
+                 SRCNAME, __func__);
+      // hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
+      // if (SUCCEEDED (hr))
+      //   {
+      //     message_show_info (message, hwnd);
+      //   }
+      // ul_release (message, __func__, __LINE__);
+      // ul_release (mdb, __func__, __LINE__);
+    }
+  else if (!tagcmp (tag, "GpgOL_Inspector_Debug-1"))
+    {
+      /* Open inspector.  */
+      log_debug ("%s:%s: command Debug1 (open inspector) called\n",
+                 SRCNAME, __func__);
+      // hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
+      // if (SUCCEEDED (hr))
+      //   {
+      //     open_inspector (eecb, message);
+      //   }
+      // ul_release (message, __func__, __LINE__);
+      // ul_release (mdb, __func__, __LINE__);
+    }
+  else if (!tagcmp (tag, "GpgOL_Inspector_Debug-2"))
+    {
+      /* Change message class.  */
+      log_debug ("%s:%s: command Debug2 (change message class) called", 
+                 SRCNAME, __func__);
+      // hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
+      // if (SUCCEEDED (hr))
+      //   {
+      //     /* We sync here. */
+      //     mapi_change_message_class (message, 1);
+      //   }
+      // ul_release (message, __func__, __LINE__);
+      // ul_release (mdb, __func__, __LINE__);
+    }
+  else if (!tagcmp (tag, "GpgOL_Inspector_Debug-3"))
+    {
+      log_debug ("%s:%s: command Debug3 (revert_message_class) called", 
+                 SRCNAME, __func__);
+      // hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&message);
+      // if (SUCCEEDED (hr))
+      //   {
+      //     int rc = gpgol_message_revert (message, 1, 
+      //                                    KEEP_OPEN_READWRITE|FORCE_SAVE);
+      //     log_debug ("%s:%s: gpgol_message_revert returns %d\n", 
+      //                SRCNAME, __func__, rc);
+      //   }
+      // ul_release (message, __func__, __LINE__);
+      // ul_release (mdb, __func__, __LINE__);
+    }
+
+
+
+}
index 3436a7d..4bdf40c 100644 (file)
@@ -124,7 +124,8 @@ LPDISPATCH install_GpgolInspectorEvents_sink (LPDISPATCH object);
 
 void add_inspector_controls (LPOOMINSPECTOR inspector);
 
-void update_inspector_crypto_info (LPDISPATCH button);
+void proc_inspector_button_click (LPDISPATCH button,
+                                  const char *tag, int instid);
 
 
 
similarity index 100%
rename from src/key-manager.bmp
rename to src/key-manager-16.bmp
diff --git a/src/key-manager-32.bmp b/src/key-manager-32.bmp
new file mode 100644 (file)
index 0000000..39f3ab5
Binary files /dev/null and b/src/key-manager-32.bmp differ
diff --git a/src/key-manager-32m.bmp b/src/key-manager-32m.bmp
new file mode 100644 (file)
index 0000000..b413659
Binary files /dev/null and b/src/key-manager-32m.bmp differ
index d8eaaa1..1bde1d2 100644 (file)
@@ -340,14 +340,19 @@ put_picture_or_mask (LPDISPATCH pDisp, int resource, int size, int is_mask)
 }
 
 
-/* Update the icon of PDISP using the bitmap with RESOURCE ID and a
-   mask of (RESOURCE_ID+1).  SIZE specifies the size of the bitmap.
-   Return 0 on success.  */
+/* Update the icon of PDISP using the bitmap with RESOURCE ID.  The
+   function adds the system pixel size to the resource id to compute
+   the actual icon size.  The resource id of the mask is the N+1.  */
 int
 put_oom_icon (LPDISPATCH pDisp, int resource_id, int size)
 {
   int rc;
-  
+
+  /* Fixme: For now we assume a system pixel size of 16.  What we
+     actually should do is to get the current value and then find the
+     best matching icon.  */
+  resource_id += 16;
+
   rc = put_picture_or_mask (pDisp, resource_id, size, 0);
   if (!rc)
     rc = put_picture_or_mask (pDisp, resource_id+1, size, 1);
@@ -502,6 +507,40 @@ get_oom_bool (LPDISPATCH pDisp, const char *name)
 }
 
 
+/* Get the integer property NAME of the object PDISP.  Returns 0 if
+   not found or if it is not an integer property.  */
+int
+get_oom_int (LPDISPATCH pDisp, const char *name)
+{
+  HRESULT hr;      
+  int result = 0;
+  DISPID dispid;
+  
+  dispid = lookup_oom_dispid (pDisp, name);
+  if (dispid != DISPID_UNKNOWN)
+    {
+      DISPPARAMS dispparams = {NULL, NULL, 0, 0};
+      VARIANT rVariant;
+
+      VariantInit (&rVariant);
+      hr = pDisp->Invoke (dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
+                          DISPATCH_PROPERTYGET, &dispparams,
+                          &rVariant, NULL, NULL);
+      if (hr != S_OK)
+        log_debug ("%s:%s: Property '%s' not found: %#lx",
+                   SRCNAME, __func__, name, hr);
+      else if (rVariant.vt != VT_INT && rVariant.vt != VT_I4)
+        log_debug ("%s:%s: Property `%s' is not an integer (vt=%d)",
+                   SRCNAME, __func__, name, rVariant.vt);
+      else
+        result = rVariant.intVal;
+      VariantClear (&rVariant);
+    }
+
+  return result;
+}
+
+
 /* Get the string property NAME of the object PDISP.  Returns NULL if
    not found or if it is not a string property.  */
 char *
index 7dec2a2..9b82bac 100644 (file)
@@ -41,6 +41,12 @@ enum
     msoButtonIconAndWrapCaptionBelow = 15 
   };
 
+enum
+  {
+    msoButtonDown = -1,
+    msoButtonUp = 0,
+    msoButtonMixed = 2
+  };
 
 
 DEFINE_GUID(GUID_NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
@@ -90,6 +96,9 @@ int put_oom_string (LPDISPATCH pDisp, const char *name, const char *string);
 /* Get the boolean property NAME of the object PDISP.  */
 int get_oom_bool (LPDISPATCH pDisp, const char *name);
 
+/* Get the integer property NAME of the object PDISP.  */
+int get_oom_int (LPDISPATCH pDisp, const char *name);
+
 /* Get the string property NAME of the object PDISP.  */
 char *get_oom_string (LPDISPATCH pDisp, const char *name);
 
index a488e86..59c6c43 100644 (file)
@@ -236,12 +236,12 @@ gpgol_message_revert (LPMESSAGE message, LONG do_save, ULONG save_flags)
 }
 
 
-/* Revert all messages in the curent folder.  */
+/* Revert all messages in the MAPIFOLDEROBJ.  */
 EXTERN_C LONG __stdcall
-gpgol_folder_revert (LPEXCHEXTCALLBACK eecb)
+gpgol_folder_revert (LPDISPATCH mapifolderobj)
 {
+#if 0
   HRESULT hr;
-  LPMDB mdb = NULL;
   LPMAPIFOLDER folder = NULL;
   LONG proptype;
   LPMAPITABLE contents;
@@ -251,7 +251,7 @@ gpgol_folder_revert (LPEXCHEXTCALLBACK eecb)
   LPMESSAGE message;
   
 
-  log_debug ("%s:%s: gpgol_folder_revert enter\n", SRCNAME, __func__);
+  log_debug ("%s:%s: Enter", SRCNAME, __func__);
   
   hr = eecb->GetObject (&mdb, (LPMAPIPROP *)&folder);
   if (FAILED (hr) )
@@ -353,5 +353,6 @@ gpgol_folder_revert (LPEXCHEXTCALLBACK eecb)
   contents->Release ();
   ul_release (folder, __func__, __LINE__);
   ul_release (mdb, __func__, __LINE__);
+#endif
   return 0;
 }
index 047f33c..abec778 100644 (file)
@@ -24,7 +24,7 @@ EXTERN_C LONG __stdcall gpgol_message_revert (LPMESSAGE message,
                                               LONG do_save,
                                               ULONG save_flags);
 
-EXTERN_C LONG __stdcall gpgol_folder_revert (LPEXCHEXTCALLBACK eecb);
+EXTERN_C LONG __stdcall gpgol_folder_revert (LPDISPATCH mapifolderobj);
 
 
 #endif /*REVERT_H*/
similarity index 100%
rename from src/sign.bmp
rename to src/sign-16.bmp
similarity index 100%
rename from src/sign-mask.bmp
rename to src/sign-16m.bmp
index 3fc1497..f50b9d7 100644 (file)
@@ -136,6 +136,13 @@ trailing_ws_p (const char *line)
   return 1;
 }
 
+/* An strcmp variant with the compare ending at the end of B.  */
+static inline int
+tagcmp (const char *a, const char *b)
+{
+  return strncmp (a, b, strlen (b));
+}
+
 
 /*****  Missing functions.  ****/
 
similarity index 100%
rename from src/verify.bmp
rename to src/verify-16.bmp
similarity index 100%
rename from src/verify-mask.bmp
rename to src/verify-16m.bmp