/[winpt]/trunk/Src/wptKeyManagerDlg.cpp
ViewVC logotype

Diff of /trunk/Src/wptKeyManagerDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 22 by twoaday, Wed Aug 10 11:33:35 2005 UTC revision 30 by twoaday, Sat Oct 22 10:17:59 2005 UTC
# Line 39  Line 39 
39  #include "wptKeyEdit.h"  #include "wptKeyEdit.h"
40  #include "wptRegistry.h"  #include "wptRegistry.h"
41    
42    #define KM_SEPARATOR_ID                10000
43  #define WINDOWCLASS_SEPARATOR_CHILD "WINPT_SEP_CHILD"  #define WINDOWCLASS_SEPARATOR_CHILD "WINPT_SEP_CHILD"
44  #define SEPARATOR_HEIGHT            5  //#define KM_SEPARATOR_HEIGHT            5
   
 void km_dump_key (gpgme_key_t key);  
45    
 //int treeview_add_item (HWND tree, HTREEITEM parent, const char * text);  
46    
47  static subclass_s keylist_proc;  static subclass_s keylist_proc;
48  static int km_index = -1;  static int km_index = -1;
 static int km_def_pos = 0;  
49    
50  HIMAGELIST glob_imagelist;  HIMAGELIST glob_imagelist;
51    
# Line 207  do_center_window (HWND dlg, struct km_in Line 203  do_center_window (HWND dlg, struct km_in
203      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_X" );      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_X" );
204      if( p && !strcmp( p, " " ) ) {      if( p && !strcmp( p, " " ) ) {
205          free_if_alloc( p );              free_if_alloc( p );    
206          center_window( dlg );          center_window( dlg, NULL );
207          return;          return;
208      }      }
209      else if( p )      else if( p )
# Line 216  do_center_window (HWND dlg, struct km_in Line 212  do_center_window (HWND dlg, struct km_in
212      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_Y" );      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_Y" );
213      if( p && !strcmp( p, " " ) ) {      if( p && !strcmp( p, " " ) ) {
214          free_if_alloc( p );          free_if_alloc( p );
215          center_window( dlg );          center_window( dlg, NULL );
216          return;          return;
217      }      }
218      else if( p )      else if( p )
219          pos_y = atol( p );          pos_y = atol( p );
220    
221      if( !pos_y && !pos_x ) {      if( !pos_y && !pos_x ) {
222          center_window( dlg );          center_window( dlg, NULL );
223          return;          return;
224      }      }
225            
# Line 330  do_create_minpopup (HWND dlg) Line 326  do_create_minpopup (HWND dlg)
326    
327    
328  static void  static void
329  do_check_cache( listview_ctrl_t lv, HWND dlg, HWND sb  )  do_check_cache (listview_ctrl_t lv, HWND dlg, HWND sb)
330  {  {
331      gpgme_keycache_t cache;      gpg_keycache_t cache;
332    
333      if( keycache_get_reload( ) ) {      if( keycache_get_reload( ) ) {
334          keycache_reload( dlg );          keycache_reload( dlg );
# Line 340  do_check_cache( listview_ctrl_t lv, HWND Line 336  do_check_cache( listview_ctrl_t lv, HWND
336          cache = keycache_get_ctx( 1 );          cache = keycache_get_ctx( 1 );
337          if( !cache )          if( !cache )
338              BUG( dlg );              BUG( dlg );
339          keylist_reload( lv, cache, KEYLIST_LIST, GPGME_ATTR_USERID );          keylist_reload( lv, cache, KEYLIST_LIST, KEY_SORT_USERID );
340          km_complete_status_bar (sb, lv, km_def_pos);          km_complete_status_bar (sb, lv);
341      }      }
342  } /* do_check_cache */  } /* do_check_cache */
343    
# Line 471  regist_sep_wnd (HWND dlg, struct km_info Line 467  regist_sep_wnd (HWND dlg, struct km_info
467  #define enable_button(hwnd, cid) \  #define enable_button(hwnd, cid) \
468      SendMessage ((hwnd), TB_ENABLEBUTTON, (cid), MAKELONG (key_selected, 0))      SendMessage ((hwnd), TB_ENABLEBUTTON, (cid), MAKELONG (key_selected, 0))
469    
470    
471    /* Interactive modification of the dialog item which depend if an item
472       is selected or not and what kind of item. @lv is the list view with
473       the items. */
474  void  void
475  update_ui_items (HWND hwnd, listview_ctrl_t lv)  update_ui_items (HWND hwnd, listview_ctrl_t lv)
476  {  {
# Line 486  update_ui_items (HWND hwnd, listview_ctr Line 486  update_ui_items (HWND hwnd, listview_ctr
486      key_has_sec = FALSE;      key_has_sec = FALSE;
487      if (key_selected) {      if (key_selected) {
488          i = listview_get_curr_pos (lv);          i = listview_get_curr_pos (lv);
489          key_has_sec = km_check_for_seckey( lv, i, NULL ) ? TRUE : FALSE;                  key_has_sec = km_check_for_seckey (lv, i, NULL) ? TRUE : FALSE;
490          key_inv = km_get_key_status (lv, i) & KM_FLAG_REVOKED;          key_inv = km_get_key_status (lv, i) & KM_FLAG_REVOKED;
491      }      }
492    
493      /* Enable / disable toolbar buttons */      /* Enable / disable toolbar buttons */
494      hwnd_child = GetDlgItem(hwnd, IDR_WINPT_KMTB);      hwnd_child = GetDlgItem (hwnd, IDR_WINPT_KMTB);
495      enable_button (hwnd_child, ID_KEYMISC_DELETE);      enable_button (hwnd_child, ID_KEYMISC_DELETE);
496      enable_button (hwnd_child, ID_KEYMISC_PROPS);      enable_button (hwnd_child, ID_KEYMISC_PROPS);
497      enable_button (hwnd_child, ID_KEYMISC_SIGN);      enable_button (hwnd_child, ID_KEYMISC_SIGN);
# Line 504  update_ui_items (HWND hwnd, listview_ctr Line 504  update_ui_items (HWND hwnd, listview_ctr
504      set_menu_state (hmenu, ID_KEYMISC_REVCERT, key_has_sec ? MF_ENABLED : MF_GRAYED);      set_menu_state (hmenu, ID_KEYMISC_REVCERT, key_has_sec ? MF_ENABLED : MF_GRAYED);
505      set_menu_state (hmenu, ID_KEYMISC_DELETE, key_selected ? MF_ENABLED : MF_GRAYED);      set_menu_state (hmenu, ID_KEYMISC_DELETE, key_selected ? MF_ENABLED : MF_GRAYED);
506      set_menu_state (hmenu, ID_KEYMISC_PROPS, key_selected ? MF_ENABLED : MF_GRAYED);      set_menu_state (hmenu, ID_KEYMISC_PROPS, key_selected ? MF_ENABLED : MF_GRAYED);
507      set_menu_state (hmenu, ID_KEYMISC_SIGN, key_selected && !key_inv ? MF_ENABLED : MF_GRAYED);          set_menu_state (hmenu, ID_KEYMISC_SIGN, key_selected && !key_inv ? MF_ENABLED : MF_GRAYED);
508  } /* update_ui_items */      set_menu_state (hmenu, ID_KEYMISC_EDITKEY, key_selected? MF_ENABLED : MF_GRAYED);
509        set_menu_state (hmenu, ID_KEYMISC_CHECKSIGS, key_selected? MF_ENABLED : MF_GRAYED);
510    }
511    
512    
513    /* The items which are shown when GPG is in read-only mode. */
514  static void  static void
515  popup_gpg_readonly (HWND dlg, HMENU hm)  popup_gpg_readonly (HWND dlg, HMENU hm)
516  {  {
# Line 575  menu_gpg_readonly (HWND dlg, HMENU hm, i Line 578  menu_gpg_readonly (HWND dlg, HMENU hm, i
578    
579    
580  static char*  static char*
581  gen_export_filename (const char *keyid)  gen_export_filename (const char *keyid, int is_secret)
582  {  {
583      gpgme_key_t key;      gpgme_key_t key;
584      const char *s;      const char *s;
# Line 583  gen_export_filename (const char *keyid) Line 586  gen_export_filename (const char *keyid)
586    
587      if (get_pubkey (keyid, &key))      if (get_pubkey (keyid, &key))
588          return m_strdup (keyid);          return m_strdup (keyid);
589      s = gpgme_key_get_string_attr (key, GPGME_ATTR_NAME, NULL, 0);      s = key->uids->name;
590      if (!s)      if (!s)
591          return m_strdup (keyid);          return m_strdup (keyid);
592      p = new char[strlen (s) + 8];      p = new char[strlen (s) + 8 + 16];
593      if (!p)      if (!p)
594          BUG (0);          BUG (0);
595      sprintf (p, "%s.asc", s);      sprintf (p, "%s%s.asc", s, is_secret? "_sec" : "");
596      for (size_t i=0; i < strlen (p); i++) {      for (size_t i=0; i < strlen (p); i++) {
597          if (p[i] == ' ' || p[i] == ':' || p[i] == '?' || p[i] == '|')          if (p[i] == ' ' || p[i] == ':' || p[i] == '?' || p[i] == '|')
598              p[i] = '_';              p[i] = '_';
# Line 614  update_key (listview_ctrl_t lv, int pos, Line 617  update_key (listview_ctrl_t lv, int pos,
617  }  }
618    
619    
620    /* Setup status bar for the main window @dlg. */
621    static HWND
622    setup_status_bar (HWND dlg, listview_ctrl_t lv)
623    {      
624        HWND statbar;    
625        RECT r;
626        int partpos[3];
627        int i;
628    
629        GetClientRect (dlg, &r);
630        for (i=1; i <= 3; i++)
631            partpos[i-1] = r.right/3*i;
632        statbar = CreateStatusWindow (WS_CHILD | WS_VISIBLE | CCS_BOTTOM,
633                                      "status bar", dlg, KM_SEPARATOR_ID);
634    
635        ShowWindow (statbar, SW_SHOW);
636        SendMessage (statbar, SB_SETPARTS, (WPARAM)3, (LPARAM)partpos);
637    
638        km_update_default_key_str (statbar);
639        km_complete_status_bar (statbar, lv);
640    
641        return statbar;
642    }
643    
644    
645  BOOL CALLBACK  BOOL CALLBACK
646  keymanager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keymanager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
# Line 625  keymanager_dlg_proc (HWND dlg, UINT msg, Line 652  keymanager_dlg_proc (HWND dlg, UINT msg,
652      INITCOMMONCONTROLSEX icex;      INITCOMMONCONTROLSEX icex;
653      HWND kl;      HWND kl;
654      HMENU hm;      HMENU hm;
655      gpgme_keycache_t c;      gpg_keycache_t c;
656      gpgme_key_t key;      gpgme_key_t key;
657      /*km_group_cb_s gcb; XXX */      /*km_group_cb_s gcb; XXX */
658      struct genkey_s genkey;      struct genkey_s genkey;
659      struct winpt_key_s k = {0};      struct winpt_key_s k = {0};
660      struct URL_ctx_s *url;      struct URL_ctx_s *url;
661      refresh_cache_s rcs = {0};      refresh_cache_s rcs = {0};
662      char keyid[48], uid[128], type[32], * name;      char keyid[48], uid[128], type[32], *name;
663      const char *t, * host;      const char *t, * host;
664      u16 port = 0;      u16 port = 0;
665      int idx = 0, i=0, rc;      int idx = 0, i=0, rc;
# Line 657  keymanager_dlg_proc (HWND dlg, UINT msg, Line 684  keymanager_dlg_proc (HWND dlg, UINT msg,
684  #endif          #endif        
685          menu = LoadMenu( glob_hinst, (LPCSTR)IDR_WINPT_KEYMISC );          menu = LoadMenu( glob_hinst, (LPCSTR)IDR_WINPT_KEYMISC );
686  #ifndef LANG_DE  #ifndef LANG_DE
687          set_menu_text( menu, ID_KEYMISC_QUIT, _("&Quit") );          set_menu_text (menu, ID_KEYMISC_MAIL, _("Send Mail..."));
688          set_menu_text( menu, ID_KEYMISC_UID, _("User ID") );          set_menu_text (menu, ID_KEYMISC_OT, _("Ownertrust")); /* XXX */
689          set_menu_text( menu, ID_KEYMISC_NEWKEY, _("&Expert") );          set_menu_text (menu, ID_KEYMISC_COPY, _("&Copy\tCtrl+C"));
690          set_menu_text( menu, ID_KEYMISC_KEYWIZARD, _("&Normal") );          set_menu_text (menu, ID_KEYMISC_PASTE, _("&Paste\tCtrl+V"));
691          set_menu_text( menu, ID_KEYMISC_EDIT, _("Edit") );          set_menu_text (menu, ID_KEYMISC_FIND, _("Search...\tCtrl+F"));
692          set_menu_text( menu, ID_KEYMISC_SIGN, _("&Sign") );          set_menu_text (menu, ID_KEYMISC_SELALL, _("Select All\tCtrl+A"));
693          set_menu_text( menu, ID_KEYMISC_DELETE, _("&Delete") );          set_menu_text (menu, ID_KEYMISC_QUIT, _("&Quit"));
694          set_menu_text( menu, ID_KEYMISC_REVCERT, _("&Revoke") );          set_menu_text (menu, ID_KEYMISC_UID, _("User ID"));
695          set_menu_text( menu, ID_KEYMISC_CHECKSIGS, _("&List Signatures") );          set_menu_text (menu, ID_KEYMISC_NEWKEY, _("&Expert"));
696          set_menu_text( menu, ID_KEYMISC_TRUSTPATH, _("List Trust Path") );          set_menu_text (menu, ID_KEYMISC_KEYWIZARD, _("&Normal"));
697          set_menu_text( menu, ID_KEYMISC_PROPS, _("&Properties") );          set_menu_text (menu, ID_KEYMISC_EDIT, _("Edit"));
698          set_menu_text( menu, ID_KEYMISC_GPGOPT, _("Options") );          set_menu_text (menu, ID_KEYMISC_SIGN, _("&Sign"));
699          set_menu_text( menu, ID_KEYMISC_GPGPREFS, _("Preferences") );          set_menu_text (menu, ID_KEYMISC_DELETE, _("&Delete"));
700          set_menu_text( menu, ID_KEYMISC_SENDRECV, _("Keyserver") );          set_menu_text (menu, ID_KEYMISC_REVCERT, _("&Revoke"));
701          set_menu_text( menu, ID_KEYMISC_RECACHE, _("Re&load Key Cache") );          set_menu_text (menu, ID_KEYMISC_CHECKSIGS, _("&List Signatures"));
702          set_menu_text( menu, ID_KEYMISC_REBUILD, _("R&everify Signatures") );          set_menu_text (menu, ID_KEYMISC_TRUSTPATH, _("List Trust Path"));
703          set_menu_text( menu, ID_KEYMISC_INFO, _("Info") );          set_menu_text (menu, ID_KEYMISC_EXPORT, _("&Export..."));
704          set_menu_text (menu, ID_KEYMISC_HELP, _("Help"));          set_menu_text (menu, ID_KEYMISC_IMPORT, _("&Import..."));
705            set_menu_text (menu, ID_KEYMISC_PROPS, _("&Properties"));
706            set_menu_text (menu, ID_KEYMISC_GPGOPT, _("Options"));
707            set_menu_text (menu, ID_KEYMISC_GPGPREFS, _("Preferences"));
708            set_menu_text (menu, ID_KEYMISC_SENDRECV, _("Keyserver") );
709            set_menu_text (menu, ID_KEYMISC_EXPORT_PRIVKEY, _("E&xport Secret Key"));
710            set_menu_text (menu, ID_KEYMISC_RECACHE, _("Re&load Key Cache"));
711            set_menu_text (menu, ID_KEYMISC_REBUILD, _("R&everify Signatures"));
712            set_menu_text (menu, ID_KEYMISC_REFRESH_KEYS, _("Refresh &Keys (Keyserver)"));
713            set_menu_text (menu, ID_KEYMISC_INFO, _("Info") );
714            set_menu_text (menu, ID_KEYMISC_HELP, _("&Help"));
715            
716  #endif  #endif
717          SetMenu( dlg, menu );          SetMenu (dlg, menu);
718          if( keyring_check_last_access() )          if( keyring_check_last_access() )
719              keycache_set_reload( 1 );              keycache_set_reload( 1 );
720          if( keycache_get_reload( ) )          if( keycache_get_reload( ) )
# Line 684  keymanager_dlg_proc (HWND dlg, UINT msg, Line 722  keymanager_dlg_proc (HWND dlg, UINT msg,
722          c = keycache_get_ctx( KEYCACHE_PUB );          c = keycache_get_ctx( KEYCACHE_PUB );
723          if( !c )          if( !c )
724              BUG( NULL );              BUG( NULL );
725          kmi->keylist_sortby = GPGME_ATTR_USERID;          kmi->keylist_sortby = KEY_SORT_USERID;
726          Header_SetImageList(ListView_GetHeader(GetDlgItem( dlg, IDC_KEYMISC_KEYLIST )),          Header_SetImageList(ListView_GetHeader(GetDlgItem( dlg, IDC_KEYMISC_KEYLIST )),
727                              glob_imagelist);                              glob_imagelist);
728          kmi->lv = keylist_load( GetDlgItem( dlg, IDC_KEYMISC_KEYLIST ), c,          kmi->lv = keylist_load( GetDlgItem( dlg, IDC_KEYMISC_KEYLIST ), c,
# Line 704  keymanager_dlg_proc (HWND dlg, UINT msg, Line 742  keymanager_dlg_proc (HWND dlg, UINT msg,
742          km_groups_new( &gc, GetDlgItem( dlg, IDC_KEYMISC_GROUP ) );          km_groups_new( &gc, GetDlgItem( dlg, IDC_KEYMISC_GROUP ) );
743          km_groups_load( gc );          km_groups_load( gc );
744          #endif          #endif
745          SetForegroundWindow( dlg );          SetClassLong (dlg, GCL_HICON, (LONG)LoadIcon (glob_hinst, (LPCTSTR)IDI_WINPT));
746                    SetForegroundWindow (dlg);
747          kmi->statbar = CreateStatusWindow( WS_CHILD | WS_VISIBLE | CCS_BOTTOM, "status bar", dlg, 100000 );  
748          ShowWindow( kmi->statbar, SW_SHOW );          kmi->statbar = setup_status_bar (dlg, kmi->lv);
         km_update_default_key_str (kmi->statbar, &km_def_pos);  
         km_complete_status_bar( kmi->statbar, kmi->lv, km_def_pos );  
749    
750          SetWindowLong (dlg, GWL_USERDATA, (LONG)kmi);          SetWindowLong (dlg, GWL_USERDATA, (LONG)kmi);
751          kmi->toolbar = load_toolbar (dlg, kmi);          kmi->toolbar = load_toolbar (dlg, kmi);
752    
753          do_center_window( dlg, kmi );          do_center_window (dlg, kmi);
754          do_resize_window( dlg, kmi );          do_resize_window (dlg, kmi);
755          update_ui_items (dlg, kmi->lv);          update_ui_items (dlg, kmi->lv);
756          return TRUE;          return TRUE;
757                    
# Line 723  keymanager_dlg_proc (HWND dlg, UINT msg, Line 759  keymanager_dlg_proc (HWND dlg, UINT msg,
759          if (kmi->lv) {          if (kmi->lv) {
760              keylist_delete (kmi->lv);              keylist_delete (kmi->lv);
761              kmi->lv = NULL;                    kmi->lv = NULL;      
762                        
763             /*
764           if (gc) {           if (gc) {
765              km_groups_release (gc);              km_groups_release (gc);
766              gc = NULL;              gc = NULL;
767          }          }*/
768         imagelist_destroy ();         imagelist_destroy ();
769    
770         char buf[32];         char buf[32];
# Line 855  keymanager_dlg_proc (HWND dlg, UINT msg, Line 892  keymanager_dlg_proc (HWND dlg, UINT msg,
892                  hm = LoadMenu (glob_hinst, MAKEINTRESOURCE (IDR_WINPT_KEYMISC_CTX));                  hm = LoadMenu (glob_hinst, MAKEINTRESOURCE (IDR_WINPT_KEYMISC_CTX));
893                  popup = GetSubMenu (hm, 0);                  popup = GetSubMenu (hm, 0);
894              #ifndef LANG_DE              #ifndef LANG_DE
895                  set_menu_text( popup, ID_KEYCTX_UID_COPY, _("Copy User ID to Clipboard") );                  set_menu_text (popup, ID_KEYCTX_UID_COPY, _("Copy User ID to Clipboard"));
896                  set_menu_text( popup, ID_KEYCTX_COPY, _("Copy Key to Clipboard") );                  set_menu_text (popup, ID_KEYCTX_KEYID_COPY, _("Copy Key ID to Clipboard"));
897                  set_menu_text( popup, ID_KEYCTX_PASTE, _("Paste Key from Clipboard") );                              set_menu_text (popup, ID_KEYCTX_FPR_COPY, _("Copy Fingerprint to Clipboard"));
898                  set_menu_text( popup, ID_KEYCTX_RECVFROM, _("Refresh from Keyserver") );                  set_menu_text (popup, ID_KEYCTX_KINFO_COPY, _("Copy Key Info to Clipboard"));
899                    set_menu_text (popup, ID_KEYCTX_COPY, _("Copy Key to Clipboard"));
900                    set_menu_text (popup, ID_KEYCTX_PASTE, _("Paste Key from Clipboard"));
901                    set_menu_text (popup, ID_KEYCTX_RECVFROM, _("Refresh from Keyserver"));
902                    set_menu_text (popup, ID_KEYCTX_MAXTRUST, _("Set Implicit &Trust"));
903                    set_menu_text (popup, ID_KEYCTX_LISTSIGS, _("&List Signatures"));
904                    set_menu_text (popup, ID_KEYCTX_PROPS, _("&Key Properties"));
905                    set_menu_text (popup, ID_KEYCTX_EDIT, _("Key Edit"));
906                    set_menu_text (popup, ID_KEYCTX_DEL, _("&Delete"));
907                    set_menu_text (popup, ID_KEYCTX_REV, _("&Revoke"));
908                    set_menu_text (popup, ID_KEYCTX_SIGN, _("&Sign"));
909                    set_menu_text (popup, ID_KEYCTX_ENABLE, _("&Enable"));
910                    set_menu_text (popup, ID_KEYCTX_DISABLE, _("&Disable"));
911                    set_menu_text (popup, ID_KEYCTX_RECVFROM, _("Re&fresh from Keyserver"));
912                    set_menu_text (popup, ID_KEYCTX_SETPREFKS, _("Set preferred Keyserver URL"));
913                    set_menu_text (popup, ID_KEYCTX_SENDMAIL, _("Send Key to Mail Recipient"));
914                    set_menu_text (popup, ID_KEYCTX_SETDEFKEY, _("Set as Default Key"));
915                    /* change popup texts */
916                    set_menu_text_bypos (popup, 0, _("Key Attributes"));
917                    set_menu_text_bypos (popup, 6, _("Add"));
918                    set_menu_text_bypos (popup, 19, _("Send to Keyserver"));
919              #endif              #endif
920                  idx = listview_get_curr_pos (kmi->lv);                  idx = listview_get_curr_pos (kmi->lv);
921                  if (km_check_for_seckey (kmi->lv, idx, &i))                  if (km_check_for_seckey (kmi->lv, idx, &i))
# Line 873  keymanager_dlg_proc (HWND dlg, UINT msg, Line 930  keymanager_dlg_proc (HWND dlg, UINT msg,
930                      set_menu_state( popup, ID_KEYCTX_ADDPHOTO, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_ADDPHOTO, MF_DISABLED|MF_GRAYED );
931                      set_menu_state (popup, ID_KEYCTX_SETPREFKS, MF_DISABLED|MF_GRAYED);                      set_menu_state (popup, ID_KEYCTX_SETPREFKS, MF_DISABLED|MF_GRAYED);
932                  }                  }
933                  else if( km_check_for_seckey( kmi->lv, idx, NULL )                  else if( km_check_for_seckey (kmi->lv, idx, NULL)
934                        && km_key_is_v3( kmi->lv, idx ) )                        && km_key_is_v3 (kmi->lv, idx)) {
                 {  
935                      /* PGP 2 keys, version 3 have no no support for photo-id's,                      /* PGP 2 keys, version 3 have no no support for photo-id's,
936                         designated revokers and secondary keys. */                         designated revokers and secondary keys. */
937                      set_menu_state (popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED);                      set_menu_state (popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED);
# Line 924  keymanager_dlg_proc (HWND dlg, UINT msg, Line 980  keymanager_dlg_proc (HWND dlg, UINT msg,
980                  NMLISTVIEW * p = (LPNMLISTVIEW) lparam;                  NMLISTVIEW * p = (LPNMLISTVIEW) lparam;
981                  int sortby = 0;                  int sortby = 0;
982                  switch (p->iSubItem) {                  switch (p->iSubItem) {
983                  case 0:  sortby = GPGME_ATTR_USERID; break;                  case 0:  sortby = KEY_SORT_USERID; break;
984                  case 1:  sortby = GPGME_ATTR_KEYID; break;                  case 1:  sortby = KEY_SORT_KEYID; break;
985                  case 2:  sortby = GPGME_ATTR_IS_SECRET; break;                  case 2:  sortby = KEY_SORT_IS_SECRET; break;
986                  case 3:  sortby = GPGME_ATTR_LEN; break;                  case 3:  sortby = KEY_SORT_LEN; break;
987                  case 5:  sortby = GPGME_ATTR_VALIDITY; break;                  case 5:  sortby = KEY_SORT_VALIDITY; break;
988                  case 6:  sortby = GPGME_ATTR_OTRUST; break;                  case 6:  sortby = KEY_SORT_OTRUST; break;
989                  case 7:  sortby = GPGME_ATTR_CREATED; break;                  case 7:  sortby = KEY_SORT_CREATED; break;
990                  case 8:  sortby = GPGME_ATTR_ALGO; break;                  case 8:  sortby = KEY_SORT_ALGO; break;
991                  default: return TRUE; //sortby = GPGME_ATTR_USERID; break;                  default: return TRUE; //sortby = KEY_SORT_USERID; break;
992                  }                  }
993    
994                  if ((kmi->keylist_sortby & ~KEYLIST_SORT_DESC) == sortby)                  if ((kmi->keylist_sortby & ~KEYLIST_SORT_DESC) == sortby)
# Line 967  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1023  keymanager_dlg_proc (HWND dlg, UINT msg,
1023          menu_gpg_readonly (dlg, (HMENU)lparam, LOWORD (wparam));          menu_gpg_readonly (dlg, (HMENU)lparam, LOWORD (wparam));
1024          break;          break;
1025    
1026        case WM_INITMENUPOPUP:
1027            if ((UINT)LOWORD (lparam) == 3) {
1028                HMENU hm = (HMENU)wparam;
1029                set_menu_text_bypos (hm, 0, _("New"));
1030            }
1031            return FALSE;
1032    
1033      case WM_COMMAND:      case WM_COMMAND:
1034          if( gnupg_access_keyring( 1 ) ) {          if( gnupg_access_keyring( 1 ) ) {
1035              msg_box( dlg, _("Could not access public keyring"), _("Key Manager"), MB_ERR );              msg_box( dlg, _("Could not access public keyring"), _("Key Manager"), MB_ERR );
# Line 979  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1042  keymanager_dlg_proc (HWND dlg, UINT msg,
1042              return TRUE;              return TRUE;
1043                            
1044          case ID_KEYMISC_MAIL:          case ID_KEYMISC_MAIL:
1045                /* XXX
1046              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_MAIL, GetDesktopWindow (),              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_MAIL, GetDesktopWindow (),
1047                              winpt_mail_proc, NULL);                              winpt_mail_proc, NULL);*/
1048              break;              break;
1049                    
1050          case ID_KEYMISC_FIND:          case ID_KEYMISC_FIND:
# Line 988  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1052  keymanager_dlg_proc (HWND dlg, UINT msg,
1052              break;              break;
1053    
1054          case ID_KEYMISC_DELETE:          case ID_KEYMISC_DELETE:
1055              if (km_delete_keys (kmi->lv, dlg))              km_delete_keys (kmi->lv, dlg);
                 return FALSE;  
1056              return TRUE;              return TRUE;
1057                            
1058          case ID_KEYMISC_SIGN:                  case ID_KEYMISC_SIGN:        
1059              if ( (idx = listview_get_curr_pos( kmi->lv )) == -1 ) {              if ( (idx = listview_get_curr_pos( kmi->lv )) == -1 ) {
1060                  msg_box( dlg, _("Please select a key."),  _("Key Manager"),                  msg_box( dlg, _("Please select a key."),  _("Key Manager"),
1061                           MB_ERR );                           MB_ERR );
1062                  return FALSE;                  return TRUE;;
1063              }              }
1064              if (km_check_key_status (kmi->lv, idx))              if (km_check_key_status (kmi->lv, idx))
1065                  return FALSE;                  return TRUE;
1066              key = (gpgme_key_t)listview_get_item2 (kmi->lv, idx);              key = (gpgme_key_t)listview_get_item2 (kmi->lv, idx);
1067              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1068              memset (&k, 0, sizeof (k));              memset (&k, 0, sizeof (k));
# Line 1016  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1079  keymanager_dlg_proc (HWND dlg, UINT msg,
1079              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos( kmi->lv );
1080              if( idx == -1 ) {              if( idx == -1 ) {
1081                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1082                  return FALSE;                  return TRUE;
1083              }              }
1084              listview_get_item_text( kmi->lv, idx, 0, uid, sizeof uid -1 );              listview_get_item_text( kmi->lv, idx, 0, uid, sizeof uid -1 );
1085              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );
1086              if ( !km_check_for_seckey( kmi->lv, idx, NULL ) ) {              if ( !km_check_for_seckey( kmi->lv, idx, NULL ) ) {
1087                  msg_box( dlg, _("There is no secret key available!"), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("There is no secret key available!"), _("Key Manager"), MB_ERR );
1088                  return FALSE;                  return TRUE;
1089              }              }
1090                            
1091              {              {
# Line 1030  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1093  keymanager_dlg_proc (HWND dlg, UINT msg,
1093                  listview_get_item_text( kmi->lv, idx, 5, t, sizeof t -1 );                  listview_get_item_text( kmi->lv, idx, 5, t, sizeof t -1 );
1094                  if( strchr( t, 'R' ) ) {                  if( strchr( t, 'R' ) ) {
1095                      msg_box( dlg, _("Key already revoked!"), _("Key Manager"), MB_INFO );                      msg_box( dlg, _("Key already revoked!"), _("Key Manager"), MB_INFO );
1096                      return FALSE;                      return TRUE;
1097                  }                  }
1098              }              }
1099                            
             name = km_quote_uid (uid);  
1100              memset (&k, 0, sizeof (k));              memset (&k, 0, sizeof (k));
1101              k.key_pair = 1;              k.key_pair = 1;
1102              k.keyid = keyid;              k.keyid = keyid;
1103              k.uid = name;              k.is_protected = km_check_if_protected (kmi->lv, idx);
1104              k.is_protected = km_check_if_protected( kmi->lv, idx );              dialog_box_param(glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg,
             dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg,  
1105                               key_revoke_dlg_proc, (LPARAM)&k,                               key_revoke_dlg_proc, (LPARAM)&k,
1106                               _("Key Revocation"), IDS_WINPT_KEYREVOKE );                               _("Key Revocation"), IDS_WINPT_KEYREVOKE);
             free_if_alloc (name);  
1107              return TRUE;              return TRUE;
1108                            
1109          case ID_KEYMISC_TRUSTPATH:          case ID_KEYMISC_TRUSTPATH:
1110              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos( kmi->lv );
1111              if( idx == -1 ) {              if( idx == -1 ) {
1112                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1113                  return FALSE;                  return TRUE;
1114              }              }
1115              listview_get_item_text( kmi->lv, idx, 0, uid, sizeof uid -1 );              listview_get_item_text( kmi->lv, idx, 0, uid, sizeof uid -1 );
1116              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid -1 );              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid -1 );
# Line 1098  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1158  keymanager_dlg_proc (HWND dlg, UINT msg,
1158                  k.key_pair = 1;                  k.key_pair = 1;
1159              k.callback.ctl = kmi->lv;              k.callback.ctl = kmi->lv;
1160              k.callback.idx = idx;              k.callback.idx = idx;
1161                k.is_v3 = km_key_is_v3 (kmi->lv, idx);
1162              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg,
1163                                keyprops_dlg_proc, (LPARAM)&k,                                keyprops_dlg_proc, (LPARAM)&k,
1164                                _("Key Properties"), IDS_WINPT_KEYPROPS );                                _("Key Properties"), IDS_WINPT_KEYPROPS );
# Line 1127  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1188  keymanager_dlg_proc (HWND dlg, UINT msg,
1188                  c = keycache_get_ctx( 1 );                  c = keycache_get_ctx( 1 );
1189                  if( !c )                  if( !c )
1190                      BUG( dlg );                      BUG( dlg );
1191                  keylist_reload( kmi->lv, c, KEYLIST_LIST, GPGME_ATTR_USERID );                  keylist_reload( kmi->lv, c, KEYLIST_LIST, KEY_SORT_USERID );
1192                  refresh_keys = 0;                  refresh_keys = 0;
1193              }              }
1194              return TRUE;              return TRUE;
1195                            
1196          case ID_KEYMISC_REBUILD:          case ID_KEYMISC_REBUILD:
1197              rcs.kr_reload = rcs.kr_update = 0;              name=NULL;
1198              rcs.tr_update = 1;              gpg_rebuild_cache (&name);
1199              DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg,              if (name) {
1200                              keycache_dlg_proc, (LPARAM)&rcs );                  char *p = strchr (name, '\n');
1201              c = keycache_get_ctx( 1 );                  show_msg (dlg, 2000, p? name + (p-name)+1 : name);
1202              if( !c )                  free (name);
1203                  BUG( dlg );              }
             keylist_reload( kmi->lv, c, KEYLIST_LIST, GPGME_ATTR_USERID );  
1204              return TRUE;              return TRUE;
1205                            
1206          case ID_KEYMISC_NEWKEY:          case ID_KEYMISC_NEWKEY:
# Line 1155  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1215  keymanager_dlg_proc (HWND dlg, UINT msg,
1215          case ID_KEYMISC_CARDNEW:          case ID_KEYMISC_CARDNEW:
1216              if( !scard_support ) {              if( !scard_support ) {
1217                  msg_box( dlg, _("Smart Card support is not available."), _("Key Manager"), MB_INFO );                  msg_box( dlg, _("Smart Card support is not available."), _("Key Manager"), MB_INFO );
1218                  return FALSE;                  return TRUE;
1219              }              }
1220              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN, dlg,
1221                                card_keygen_dlg_proc, NULL, _("Card Key Generation"),                                card_keygen_dlg_proc, NULL, _("Card Key Generation"),
# Line 1209  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1269  keymanager_dlg_proc (HWND dlg, UINT msg,
1269              idx = listview_get_curr_pos (kmi->lv);              idx = listview_get_curr_pos (kmi->lv);
1270              if (idx == -1) {              if (idx == -1) {
1271                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1272                  return FALSE;                  return TRUE;
1273              }              }
1274              if (listview_count_items (kmi->lv, 1) > 1)              if (listview_count_items (kmi->lv, 1) > 1)
1275                  name = m_strdup ("Exported_GPG_Keys.asc");                  name = m_strdup ("Exported_GPG_Keys.asc");
1276              else {              else {
1277                  listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);                  listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1278                  name = gen_export_filename (keyid);                  name = gen_export_filename (keyid, 0);
1279              }              }
1280              t = get_filename_dlg (dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, name);              t = get_filename_dlg (dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, name);
1281              free_if_alloc (name);              free_if_alloc (name);
1282              if (!t || overwrite_file (t) == 0)              if (t == NULL)
1283                  return FALSE;                  return TRUE;
1284              km_file_export (dlg, kmi->lv, t);              km_file_export (dlg, kmi->lv, t);
1285              return TRUE;              return TRUE;
1286                            
# Line 1228  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1288  keymanager_dlg_proc (HWND dlg, UINT msg,
1288              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos( kmi->lv );
1289              if( idx == -1 ) {              if( idx == -1 ) {
1290                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1291                  return FALSE;                  return TRUE;
1292              }              }
1293              if( !km_check_for_seckey( kmi->lv, idx, NULL ) ) {              if( !km_check_for_seckey( kmi->lv, idx, NULL ) ) {
1294                  msg_box( dlg, _("There is no corresponding secret key for this key."),                  msg_box( dlg, _("There is no corresponding secret key for this key."),
1295                          _("Key Manager"), MB_ERR );                          _("Key Manager"), MB_ERR );
1296                  return FALSE;                  return TRUE;
1297              }              }
1298              if( listview_count_items( kmi->lv, 1 ) > 1 ) {              if( listview_count_items( kmi->lv, 1 ) > 1 ) {
1299                  msg_box( dlg, _("You can only export one secret key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("You can only export one secret key."), _("Key Manager"), MB_ERR );
1300                  return FALSE;                  return TRUE;
1301              }              }
1302              idx = msg_box( dlg,              idx = msg_box( dlg,
1303                            _("This operation will export your *SECRET* key!\n\n"                            _("This operation will export your *SECRET* key!\n\n"
# Line 1249  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1309  keymanager_dlg_proc (HWND dlg, UINT msg,
1309              if( idx == IDYES ) {              if( idx == IDYES ) {
1310                  idx = listview_get_curr_pos( kmi->lv );                  idx = listview_get_curr_pos( kmi->lv );
1311                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof (keyid)-8 );                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof (keyid)-8 );
1312                  name = gen_export_filename (keyid);                  name = gen_export_filename (keyid, 1);
1313                  t = get_filename_dlg (dlg, 1, _("Choose Name for Key File"), NULL, name);                  t = get_filename_dlg (dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, name);
1314                  if (t && !file_exist_check (t)) {                  if (t != NULL)          
                     idx = log_box (_("Key Manager"), MB_INFO|MB_YESNO,  
                                    _("File %s already exists.\nOverwrite?"), t);  
                     if (idx == IDNO)  
                         return FALSE;  
                 }  
                 if (t)  
1315                      km_privkey_export (dlg, kmi->lv, t);                      km_privkey_export (dlg, kmi->lv, t);
1316              }              }
1317              break;              break;
# Line 1492  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1546  keymanager_dlg_proc (HWND dlg, UINT msg,
1546                  rc = set_gnupg_default_key (keyid);                  rc = set_gnupg_default_key (keyid);
1547                  if (rc)                  if (rc)
1548                      msg_box( dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR);                      msg_box( dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR);
1549                  km_update_default_key_str (kmi->statbar, &km_def_pos);                  km_update_default_key_str (kmi->statbar);
1550              }              }
1551              break;              break;
1552    
# Line 1521  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1575  keymanager_dlg_proc (HWND dlg, UINT msg,
1575      }      }
1576            
1577      return FALSE;      return FALSE;
1578  } /* keymanager_dlg_proc */  }
1579    
1580    
1581    

Legend:
Removed from v.22  
changed lines
  Added in v.30

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26