/[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 20 by twoaday, Wed Jul 27 11:17:22 2005 UTC revision 23 by twoaday, Fri Sep 30 10:10:16 2005 UTC
# Line 43  Line 43 
43  #define WINDOWCLASS_SEPARATOR_CHILD "WINPT_SEP_CHILD"  #define WINDOWCLASS_SEPARATOR_CHILD "WINPT_SEP_CHILD"
44  #define SEPARATOR_HEIGHT            5  #define SEPARATOR_HEIGHT            5
45    
46  int treeview_add_item (HWND tree, HTREEITEM parent, const char * text);  void km_dump_key (gpgme_key_t key);
47    
48    //int treeview_add_item (HWND tree, HTREEITEM parent, const char * text);
49    
50  static subclass_s keylist_proc;  static subclass_s keylist_proc;
51  static int km_index = -1;  static int km_index = -1;
 static int km_def_pos = 0;  
52    
53  HIMAGELIST glob_imagelist;  HIMAGELIST glob_imagelist;
54    
# Line 80  struct mybuttons myb[] = { Line 81  struct mybuttons myb[] = {
81  };  };
82    
83    
84    #ifndef VK_F
85    #define VK_F 70
86    #endif
87    #ifndef VK_A
88    #define VK_A 65
89    #endif
90    #ifndef VK_C
91    #define VK_C 67
92    #endif
93    #ifndef VK_P
94    #define VK_P 80
95    #endif
96    
97  static BOOL CALLBACK  static BOOL CALLBACK
98  keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
99  {  {
100      switch (msg)      struct listview_ctrl_s lv;
101      {  
102        switch (msg) {
103      case WM_LBUTTONDBLCLK:      case WM_LBUTTONDBLCLK:
104          send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS );          send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PROPS);
105          break;          break;
106                    
107      case WM_KEYUP:      case WM_KEYUP:
108          int virt_key = (int)wparam;          int virt_key = (int)wparam;
109          if (virt_key == VK_SPACE)          switch (virt_key) {
110          {          case VK_SPACE:
111              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS );              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS );
112              break;              break;
113          }          
114          if (virt_key == VK_DELETE)          case VK_DELETE:
         {  
115              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_DELETE );              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_DELETE );
116              break;              break;
117          }          
118          if (virt_key == VK_INSERT)          case VK_INSERT:
         {  
119              send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PASTE);              send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PASTE);
120              break;              break;
121    
122            case VK_A:
123                if (GetAsyncKeyState (VK_CONTROL)) {
124                    lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST);
125                    listview_select_all (&lv);
126                }
127                break;
128                
129            case VK_C:
130                if (GetAsyncKeyState (VK_CONTROL)) {
131                    lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST);
132                    km_index = listview_get_curr_pos (&lv);
133                    km_clip_export (keylist_proc.dlg, &lv);
134                }
135                break;
136    
137            case VK_P:
138                if (GetAsyncKeyState (VK_CONTROL)) {
139                    km_index = -1;
140                    km_clip_import (keylist_proc.dlg);
141                }
142                break;
143    
144            case VK_F:
145                if (GetAsyncKeyState (VK_CONTROL)) {
146                    lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST);
147                    km_find_key (dlg, &lv);
148                }
149                break;
150          }          }
151          break;          break;
152      }      }
# Line 164  do_center_window (HWND dlg, struct km_in Line 206  do_center_window (HWND dlg, struct km_in
206      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_X" );      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_X" );
207      if( p && !strcmp( p, " " ) ) {      if( p && !strcmp( p, " " ) ) {
208          free_if_alloc( p );              free_if_alloc( p );    
209          center_window( dlg );          center_window( dlg, NULL );
210          return;          return;
211      }      }
212      else if( p )      else if( p )
# Line 173  do_center_window (HWND dlg, struct km_in Line 215  do_center_window (HWND dlg, struct km_in
215      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_Y" );      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_Y" );
216      if( p && !strcmp( p, " " ) ) {      if( p && !strcmp( p, " " ) ) {
217          free_if_alloc( p );          free_if_alloc( p );
218          center_window( dlg );          center_window( dlg, NULL );
219          return;          return;
220      }      }
221      else if( p )      else if( p )
222          pos_y = atol( p );          pos_y = atol( p );
223    
224      if( !pos_y && !pos_x ) {      if( !pos_y && !pos_x ) {
225          center_window( dlg );          center_window( dlg, NULL );
226          return;          return;
227      }      }
228            
# Line 297  do_check_cache( listview_ctrl_t lv, HWND Line 339  do_check_cache( listview_ctrl_t lv, HWND
339          cache = keycache_get_ctx( 1 );          cache = keycache_get_ctx( 1 );
340          if( !cache )          if( !cache )
341              BUG( dlg );              BUG( dlg );
342          keylist_reload( lv, cache, KEYLIST_LIST, GPGME_ATTR_USERID );          keylist_reload( lv, cache, KEYLIST_LIST, KEY_SORT_USERID );
343          km_complete_status_bar (sb, lv, km_def_pos);          km_complete_status_bar (sb, lv);
344      }      }
345  } /* do_check_cache */  } /* do_check_cache */
346    
# Line 531  menu_gpg_readonly (HWND dlg, HMENU hm, i Line 573  menu_gpg_readonly (HWND dlg, HMENU hm, i
573  }  }
574    
575    
576    static char*
577    gen_export_filename (const char *keyid)
578    {
579        gpgme_key_t key;
580        const char *s;
581        char *p;
582    
583        if (get_pubkey (keyid, &key))
584            return m_strdup (keyid);
585        s = key->uids->name;
586        if (!s)
587            return m_strdup (keyid);
588        p = new char[strlen (s) + 8];
589        if (!p)
590            BUG (0);
591        sprintf (p, "%s.asc", s);
592        for (size_t i=0; i < strlen (p); i++) {
593            if (p[i] == ' ' || p[i] == ':' || p[i] == '?' || p[i] == '|')
594                p[i] = '_';
595        }
596        return p;
597    }
598    
599    
600    static void
601    update_key (listview_ctrl_t lv, int pos, const char *keyid, int keypair)
602    {
603        gpgme_key_t key;
604    
605        keycache_update (0, keyid);
606        if (keypair)
607            keycache_update (1, keyid);
608    
609        /* because we replaced the key item, we need to update the
610           address of the pointer in the ListView control. */
611        get_pubkey (keyid, &key);
612        keylist_upd_key (lv, pos, key);
613    }
614    
615    
616    
617  BOOL CALLBACK  BOOL CALLBACK
618  keymanager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keymanager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
619  {  {
# Line 542  keymanager_dlg_proc (HWND dlg, UINT msg, Line 625  keymanager_dlg_proc (HWND dlg, UINT msg,
625      HWND kl;      HWND kl;
626      HMENU hm;      HMENU hm;
627      gpgme_keycache_t c;      gpgme_keycache_t c;
628      gpgme_key_t pk;      gpgme_key_t key;
629      km_group_cb_s gcb;      /*km_group_cb_s gcb; XXX */
630      struct genkey_s genkey;      struct genkey_s genkey;
631      struct winpt_key_s k = {0};      struct winpt_key_s k = {0};
632      struct URL_ctx_s *url;      struct URL_ctx_s *url;
633      refresh_cache_s rcs = {0};      refresh_cache_s rcs = {0};
634      char keyid[48], uid[128], type[32], * q;      char keyid[48], uid[128], type[32], * name;
635      const char *t, * host;      const char *t, * host;
636      u16 port = 0;      u16 port = 0;
637      int idx = 0, i=0, rc;      int idx = 0, i=0, rc;
# Line 600  keymanager_dlg_proc (HWND dlg, UINT msg, Line 683  keymanager_dlg_proc (HWND dlg, UINT msg,
683          c = keycache_get_ctx( KEYCACHE_PUB );          c = keycache_get_ctx( KEYCACHE_PUB );
684          if( !c )          if( !c )
685              BUG( NULL );              BUG( NULL );
686          kmi->keylist_sortby = GPGME_ATTR_USERID;          kmi->keylist_sortby = KEY_SORT_USERID;
687          Header_SetImageList(ListView_GetHeader(GetDlgItem( dlg, IDC_KEYMISC_KEYLIST )),          Header_SetImageList(ListView_GetHeader(GetDlgItem( dlg, IDC_KEYMISC_KEYLIST )),
688                              glob_imagelist);                              glob_imagelist);
689          kmi->lv = keylist_load( GetDlgItem( dlg, IDC_KEYMISC_KEYLIST ), c,          kmi->lv = keylist_load( GetDlgItem( dlg, IDC_KEYMISC_KEYLIST ), c,
# Line 616  keymanager_dlg_proc (HWND dlg, UINT msg, Line 699  keymanager_dlg_proc (HWND dlg, UINT msg,
699                  BUG( NULL );                  BUG( NULL );
700              }              }
701          }          }
702            #if 0
703          km_groups_new( &gc, GetDlgItem( dlg, IDC_KEYMISC_GROUP ) );          km_groups_new( &gc, GetDlgItem( dlg, IDC_KEYMISC_GROUP ) );
704          km_groups_load( gc );          km_groups_load( gc );
705            #endif
706          SetForegroundWindow( dlg );          SetForegroundWindow( dlg );
707    
708            int partpos[3];
709            RECT r;
710                    
711          kmi->statbar = CreateStatusWindow( WS_CHILD | WS_VISIBLE | CCS_BOTTOM, "status bar", dlg, 100000 );          GetClientRect (dlg, &r);
712          ShowWindow( kmi->statbar, SW_SHOW );          for (i=1; i <= 3; i++)
713          km_update_default_key_str (kmi->statbar, &km_def_pos);              partpos[i-1] = r.right/3*i;
714          km_complete_status_bar( kmi->statbar, kmi->lv, km_def_pos );          kmi->statbar = CreateStatusWindow (WS_CHILD | WS_VISIBLE | CCS_BOTTOM,
715                                               "status bar", dlg, 100000);
716            ShowWindow (kmi->statbar, SW_SHOW);
717            SendMessage (kmi->statbar, SB_SETPARTS, (WPARAM)3, (LPARAM)partpos);
718                            
719            km_update_default_key_str (kmi->statbar);
720            km_complete_status_bar( kmi->statbar, kmi->lv);
721    
722          SetWindowLong (dlg, GWL_USERDATA, (LONG)kmi);          SetWindowLong (dlg, GWL_USERDATA, (LONG)kmi);
723          kmi->toolbar = load_toolbar (dlg, kmi);          kmi->toolbar = load_toolbar (dlg, kmi);
# Line 637  keymanager_dlg_proc (HWND dlg, UINT msg, Line 731  keymanager_dlg_proc (HWND dlg, UINT msg,
731          if (kmi->lv) {          if (kmi->lv) {
732              keylist_delete (kmi->lv);              keylist_delete (kmi->lv);
733              kmi->lv = NULL;                    kmi->lv = NULL;      
734                        
735             /*
736           if (gc) {           if (gc) {
737              km_groups_release (gc);              km_groups_release (gc);
738              gc = NULL;              gc = NULL;
739          }          }*/
740         imagelist_destroy ();         imagelist_destroy ();
741    
742         char buf[32];         char buf[32];
# Line 761  keymanager_dlg_proc (HWND dlg, UINT msg, Line 856  keymanager_dlg_proc (HWND dlg, UINT msg,
856              break;              break;
857    
858          case NM_RCLICK:          case NM_RCLICK:
859              if (notify->idFrom == IDC_KEYMISC_KEYLIST)              if (notify->idFrom == IDC_KEYMISC_KEYLIST) {
             {  
860                  if (listview_get_curr_pos (kmi->lv) == -1)                  if (listview_get_curr_pos (kmi->lv) == -1)
861                      return TRUE; /* Popup only when a item was selected */                      return TRUE; /* Popup only when a item was selected */
862                  do_check_cache (kmi->lv, dlg, kmi->statbar);                  do_check_cache (kmi->lv, dlg, kmi->statbar);
# Line 776  keymanager_dlg_proc (HWND dlg, UINT msg, Line 870  keymanager_dlg_proc (HWND dlg, UINT msg,
870                  set_menu_text( popup, ID_KEYCTX_RECVFROM, _("Refresh from Keyserver") );                  set_menu_text( popup, ID_KEYCTX_RECVFROM, _("Refresh from Keyserver") );
871              #endif              #endif
872                  idx = listview_get_curr_pos (kmi->lv);                  idx = listview_get_curr_pos (kmi->lv);
873                  if (km_check_for_seckey (kmi->lv, idx, &i) && i == 0) {                  if (km_check_for_seckey (kmi->lv, idx, &i))
874                      set_menu_state (popup, ID_KEYCTX_SETDEFKEY, MF_ENABLED);                      set_menu_state (popup, ID_KEYCTX_SETDEFKEY, MF_ENABLED);
875                    if (i == 0)
876                      set_menu_state (popup, ID_KEYCTX_MAXTRUST, MF_ENABLED);                      set_menu_state (popup, ID_KEYCTX_MAXTRUST, MF_ENABLED);
                 }  
877                  if (!km_check_for_seckey (kmi->lv, idx, NULL)) {                  if (!km_check_for_seckey (kmi->lv, idx, NULL)) {
878                      set_menu_state( popup, ID_KEYCTX_REV, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_REV, MF_DISABLED|MF_GRAYED );
879                      set_menu_state( popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED );
# Line 803  keymanager_dlg_proc (HWND dlg, UINT msg, Line 897  keymanager_dlg_proc (HWND dlg, UINT msg,
897                      set_menu_state( popup, ID_KEYCTX_ENABLE, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_ENABLE, MF_DISABLED|MF_GRAYED );
898                  if (km_get_key_status (kmi->lv, idx) & KM_FLAG_REVOKED)                  if (km_get_key_status (kmi->lv, idx) & KM_FLAG_REVOKED)
899                      set_menu_state (popup, ID_KEYCTX_SIGN, MF_DISABLED|MF_GRAYED);                      set_menu_state (popup, ID_KEYCTX_SIGN, MF_DISABLED|MF_GRAYED);
900                  if( mapi_init() )                  if (mapi_init())
901                      set_menu_state( popup, ID_KEYCTX_SENDMAIL, MF_DISABLED|MF_GRAYED );                      set_menu_state (popup, ID_KEYCTX_SENDMAIL, MF_DISABLED|MF_GRAYED);
902                    /* Override 'Default Keyserver' with the actual name. */
903                    host = kserver_get_hostname (0, -1, &port);
904                    set_menu_text (popup, ID_KEYCTX_KS_DEFAULT, host);
905                  popup_gpg_readonly (dlg, popup);                  popup_gpg_readonly (dlg, popup);
906                  TrackPopupMenu( popup, TPM_RIGHTALIGN, p.x, p.y, 0, dlg, NULL );                  TrackPopupMenu (popup, TPM_RIGHTALIGN, p.x, p.y, 0, dlg, NULL);
907                  DestroyMenu( popup );                  DestroyMenu (popup);
908                  DestroyMenu( hm );                  DestroyMenu (hm);
909                  return TRUE;                  return TRUE;
910              }              }
911                #if 0 /* XXX */
912              if( notify->idFrom == IDC_KEYMISC_GROUP ) {              if( notify->idFrom == IDC_KEYMISC_GROUP ) {
913                  HWND tree = GetDlgItem( dlg, IDC_KEYMISC_GROUP );                  HWND tree = GetDlgItem( dlg, IDC_KEYMISC_GROUP );
914                  if( TreeView_GetSelection( tree ) ) {                  if( TreeView_GetSelection( tree ) ) {
# Line 827  keymanager_dlg_proc (HWND dlg, UINT msg, Line 925  keymanager_dlg_proc (HWND dlg, UINT msg,
925                      return TRUE;                      return TRUE;
926                  }                  }
927              }              }
928                #endif
929              break;              break;
930    
931          case LVN_COLUMNCLICK:          case LVN_COLUMNCLICK:
# Line 834  keymanager_dlg_proc (HWND dlg, UINT msg, Line 933  keymanager_dlg_proc (HWND dlg, UINT msg,
933                  NMLISTVIEW * p = (LPNMLISTVIEW) lparam;                  NMLISTVIEW * p = (LPNMLISTVIEW) lparam;
934                  int sortby = 0;                  int sortby = 0;
935                  switch (p->iSubItem) {                  switch (p->iSubItem) {
936                  case 0:  sortby = GPGME_ATTR_USERID; break;                  case 0:  sortby = KEY_SORT_USERID; break;
937                  case 1:  sortby = GPGME_ATTR_KEYID; break;                  case 1:  sortby = KEY_SORT_KEYID; break;
938                  case 2:  sortby = GPGME_ATTR_IS_SECRET; break;                  case 2:  sortby = KEY_SORT_IS_SECRET; break;
939                  case 3:  sortby = GPGME_ATTR_LEN; break;                  case 3:  sortby = KEY_SORT_LEN; break;
940                  case 5:  sortby = GPGME_ATTR_VALIDITY; break;                  case 5:  sortby = KEY_SORT_VALIDITY; break;
941                  case 6:  sortby = GPGME_ATTR_OTRUST; break;                  case 6:  sortby = KEY_SORT_OTRUST; break;
942                  case 7:  sortby = GPGME_ATTR_CREATED; break;                  case 7:  sortby = KEY_SORT_CREATED; break;
943                  case 8:  sortby = GPGME_ATTR_ALGO; break;                  case 8:  sortby = KEY_SORT_ALGO; break;
944                  default: return TRUE; //sortby = GPGME_ATTR_USERID; break;                  default: return TRUE; //sortby = KEY_SORT_USERID; break;
945                  }                  }
946    
947                  if ((kmi->keylist_sortby & ~KEYLIST_SORT_DESC) == sortby)                  if ((kmi->keylist_sortby & ~KEYLIST_SORT_DESC) == sortby)
# Line 892  keymanager_dlg_proc (HWND dlg, UINT msg, Line 991  keymanager_dlg_proc (HWND dlg, UINT msg,
991              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_MAIL, GetDesktopWindow (),              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_MAIL, GetDesktopWindow (),
992                              winpt_mail_proc, NULL);                              winpt_mail_proc, NULL);
993              break;              break;
994                        
995            case ID_KEYMISC_FIND:
996                km_find_key (dlg, kmi->lv);
997                break;
998    
999          case ID_KEYMISC_DELETE:          case ID_KEYMISC_DELETE:
1000              if (km_delete_keys (kmi->lv, dlg))              if (km_delete_keys (kmi->lv, dlg))
1001                  return FALSE;                  return FALSE;
             refresh_keys = 1;  
1002              return TRUE;              return TRUE;
1003                            
1004          case ID_KEYMISC_SIGN:          case ID_KEYMISC_SIGN:        
             gpgme_key_t key;  
   
1005              if ( (idx = listview_get_curr_pos( kmi->lv )) == -1 ) {              if ( (idx = listview_get_curr_pos( kmi->lv )) == -1 ) {
1006                  msg_box( dlg, _("Please select a key."),  _("Key Manager"),                  msg_box( dlg, _("Please select a key."),  _("Key Manager"),
1007                           MB_ERR );                           MB_ERR );
1008                  return FALSE;                  return FALSE;
1009              }              }
1010              if( !km_check_key_status( kmi->lv, idx ) )              if (km_check_key_status (kmi->lv, idx))
1011                  return FALSE;                  return FALSE;
1012              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid );              key = (gpgme_key_t)listview_get_item2 (kmi->lv, idx);
1013              listview_get_item_text( kmi->lv, idx, 2, type, sizeof type -1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1014              rc = get_pubkey( keyid, &key );              memset (&k, 0, sizeof (k));
1015              if( rc )              k.ctx = key;
1016                  BUG( dlg );              k.keyid = keyid;
1017              if( key )              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIGN, dlg,
1018                  dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYSIGN, dlg,                                keysign_dlg_proc, (LPARAM)&k,
1019                                    keysign_dlg_proc, (LPARAM)key,                                _("Key Signing"), IDS_WINPT_KEYSIGN);
1020                                    _("Key Signing"), IDS_WINPT_KEYSIGN);              if (k.update)
1021                    update_key (kmi->lv, idx, k.keyid, 0);
1022              return TRUE;              return TRUE;
1023                            
1024          case ID_KEYMISC_REVCERT:          case ID_KEYMISC_REVCERT:
# Line 942  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1043  keymanager_dlg_proc (HWND dlg, UINT msg,
1043                  }                  }
1044              }              }
1045                            
1046              q = km_quote_uid (uid);              name = km_quote_uid (uid);
1047              memset (&k, 0, sizeof (k));              memset (&k, 0, sizeof (k));
1048              k.key_pair = 1;              k.key_pair = 1;
1049              k.keyid = keyid;              k.keyid = keyid;
1050              k.uid = q;              k.uid = name;
1051              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.is_protected = km_check_if_protected( kmi->lv, idx );
1052              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg,
1053                               key_revoke_dlg_proc, (LPARAM)&k,                               key_revoke_dlg_proc, (LPARAM)&k,
1054                               _("Key Revocation"), IDS_WINPT_KEYREVOKE );                               _("Key Revocation"), IDS_WINPT_KEYREVOKE );
1055              free_if_alloc( q );              free_if_alloc (name);
1056              return TRUE;              return TRUE;
1057                            
1058          case ID_KEYMISC_TRUSTPATH:          case ID_KEYMISC_TRUSTPATH:
# Line 975  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1076  keymanager_dlg_proc (HWND dlg, UINT msg,
1076              return TRUE;              return TRUE;
1077                            
1078          case ID_KEYMISC_CHECKSIGS:          case ID_KEYMISC_CHECKSIGS:
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 FALSE;
# Line 985  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1086  keymanager_dlg_proc (HWND dlg, UINT msg,
1086              memset (&k, 0, sizeof (k));              memset (&k, 0, sizeof (k));
1087              k.keyid = keyid;              k.keyid = keyid;
1088              k.uid = uid;              k.uid = uid;
1089                k.ctx = (gpgme_key_t)listview_get_item2 (kmi->lv, idx);
1090              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIG, dlg,              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIG, dlg,
1091                                keysig_dlg_proc, (LPARAM)&k,                                keysig_dlg_proc, (LPARAM)&k,
1092                                _("Key Signature List" ), IDS_WINPT_KEYSIG);                                _("Key Signature List" ), IDS_WINPT_KEYSIG);
# Line 996  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1098  keymanager_dlg_proc (HWND dlg, UINT msg,
1098                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1099                  return FALSE;                  return FALSE;
1100              }              }
1101              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid -1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1102              listview_get_item_text( kmi->lv, idx, 2, type, sizeof type -1 );              listview_get_item_text (kmi->lv, idx, 2, type, DIM (type)-1);
1103              memset (&k, 0, sizeof (k));              memset (&k, 0, sizeof (k));
1104              k.key_pair = 0;              k.key_pair = 0;
1105              k.keyid = keyid;              k.keyid = keyid;
# Line 1005  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1107  keymanager_dlg_proc (HWND dlg, UINT msg,
1107                  k.key_pair = 1;                  k.key_pair = 1;
1108              k.callback.ctl = kmi->lv;              k.callback.ctl = kmi->lv;
1109              k.callback.idx = idx;              k.callback.idx = idx;
1110                k.is_v3 = km_key_is_v3 (kmi->lv, idx);
1111              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg,
1112                                keyprops_dlg_proc, (LPARAM)&k,                                keyprops_dlg_proc, (LPARAM)&k,
1113                                _("Key Properties"), IDS_WINPT_KEYPROPS );                                _("Key Properties"), IDS_WINPT_KEYPROPS );
1114              if (k.callback.new_val != 0)              if (k.callback.new_val != 0) {
             {  
1115                  t = get_key_trust_str (k.callback.new_val);                  t = get_key_trust_str (k.callback.new_val);
1116                  listview_add_sub_item (kmi->lv, idx, 6, t);                  listview_add_sub_item (kmi->lv, idx, 6, t);
1117              }              }
# Line 1035  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1137  keymanager_dlg_proc (HWND dlg, UINT msg,
1137                  c = keycache_get_ctx( 1 );                  c = keycache_get_ctx( 1 );
1138                  if( !c )                  if( !c )
1139                      BUG( dlg );                      BUG( dlg );
1140                  keylist_reload( kmi->lv, c, KEYLIST_LIST, GPGME_ATTR_USERID );                  keylist_reload( kmi->lv, c, KEYLIST_LIST, KEY_SORT_USERID );
1141                  refresh_keys = 0;                  refresh_keys = 0;
1142              }              }
1143              return TRUE;              return TRUE;
1144                            
1145          case ID_KEYMISC_REBUILD:          case ID_KEYMISC_REBUILD:
1146              rcs.kr_reload = rcs.kr_update = 1;              rcs.kr_reload = rcs.kr_update = 0;
1147              rcs.tr_update = 1;              rcs.tr_update = 1;
1148              DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg,              DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg,
1149                              keycache_dlg_proc, (LPARAM)&rcs );                              keycache_dlg_proc, (LPARAM)&rcs );
1150              c = keycache_get_ctx( 1 );              c = keycache_get_ctx( 1 );
1151              if( !c )              if( !c )
1152                  BUG( dlg );                  BUG( dlg );
1153              keylist_reload( kmi->lv, c, KEYLIST_LIST, GPGME_ATTR_USERID );              keylist_reload( kmi->lv, c, KEYLIST_LIST, KEY_SORT_USERID );
1154              return TRUE;              return TRUE;
1155                            
1156          case ID_KEYMISC_NEWKEY:          case ID_KEYMISC_NEWKEY:
# Line 1056  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1158  keymanager_dlg_proc (HWND dlg, UINT msg,
1158              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYGEN, dlg,              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYGEN, dlg,
1159                                keygen_dlg_proc, (LPARAM)&genkey, _("Key Generation"),                                keygen_dlg_proc, (LPARAM)&genkey, _("Key Generation"),
1160                                IDS_WINPT_KEYGEN);                                IDS_WINPT_KEYGEN);
1161              if (genkey.newkey)              if (genkey.newkey != NULL)
1162                  keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey);                  keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey);
1163              return TRUE;              return TRUE;
1164    
# Line 1068  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1170  keymanager_dlg_proc (HWND dlg, UINT msg,
1170              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN, dlg,
1171                                card_keygen_dlg_proc, NULL, _("Card Key Generation"),                                card_keygen_dlg_proc, NULL, _("Card Key Generation"),
1172                                IDS_WINPT_CARD_KEYGEN );                                IDS_WINPT_CARD_KEYGEN );
1173                /* XXX: use new code */
1174              if( keycache_get_reload() )              if( keycache_get_reload() )
1175                  send_cmd_id( dlg, ID_KEYMISC_RECACHE );                  send_cmd_id( dlg, ID_KEYMISC_RECACHE );
1176              return TRUE;              return TRUE;
# Line 1077  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1180  keymanager_dlg_proc (HWND dlg, UINT msg,
1180              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYWIZARD, dlg,              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYWIZARD, dlg,
1181                                keygen_wizard_dlg_proc, (LPARAM)&genkey, _("Key Generation Wizard"),                                keygen_wizard_dlg_proc, (LPARAM)&genkey, _("Key Generation Wizard"),
1182                                IDS_WINPT_KEYWIZARD);                                IDS_WINPT_KEYWIZARD);
1183              if (genkey.newkey)              if (genkey.newkey != NULL)
1184                  keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey);                  keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey);
1185              return TRUE;              return TRUE;
1186                            
# Line 1100  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1203  keymanager_dlg_proc (HWND dlg, UINT msg,
1203              return TRUE;              return TRUE;
1204                            
1205          case ID_KEYMISC_IMPORT:          case ID_KEYMISC_IMPORT:
1206              t = get_filename_dlg( dlg, FILE_OPEN, _("Choose Name of the Key File"), NULL, NULL );              t = get_filename_dlg (dlg, FILE_OPEN, _("Choose Name of the Key File"), NULL, NULL);
1207              if( t )              if (t)
1208                  km_file_import( dlg, t );                  km_file_import (dlg, t);
1209              return TRUE;              return TRUE;
1210    
1211          case ID_KEYMISC_IMPORT_HTTP:          case ID_KEYMISC_IMPORT_HTTP:
# Line 1113  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1216  keymanager_dlg_proc (HWND dlg, UINT msg,
1216              break;              break;
1217                            
1218          case ID_KEYMISC_EXPORT:          case ID_KEYMISC_EXPORT:
1219              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1220              if( idx == -1 ) {              if (idx == -1) {
1221                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1222                  return FALSE;                  return FALSE;
1223              }              }
1224              if( listview_count_items( kmi->lv, 1 ) > 1 )              if (listview_count_items (kmi->lv, 1) > 1)
1225                  strcpy( keyid, _("Exported_GPG_Keys.asc") );                  name = m_strdup ("Exported_GPG_Keys.asc");
1226              else {              else {
1227                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );                  listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1228                  strcat( keyid, ".asc" );                  name = gen_export_filename (keyid);
1229              }              }
1230              t = get_filename_dlg( dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, keyid );              t = get_filename_dlg (dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, name);
1231              if( !t || overwrite_file( t ) == 0 )              free_if_alloc (name);
1232                if (t != NULL)
1233                  return FALSE;                  return FALSE;
1234              km_file_export( dlg, kmi->lv, t );              km_file_export (dlg, kmi->lv, t);
1235              return TRUE;              return TRUE;
1236                            
1237          case ID_KEYMISC_EXPORT_PRIVKEY:          case ID_KEYMISC_EXPORT_PRIVKEY:
# Line 1155  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1259  keymanager_dlg_proc (HWND dlg, UINT msg,
1259              if( idx == IDYES ) {              if( idx == IDYES ) {
1260                  idx = listview_get_curr_pos( kmi->lv );                  idx = listview_get_curr_pos( kmi->lv );
1261                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof (keyid)-8 );                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof (keyid)-8 );
1262                  strcat( keyid, ".sec.asc" );                  name = gen_export_filename (keyid);
1263                  t = get_filename_dlg( dlg, 1, _("Choose Name for Key File"), NULL, keyid );                  t = get_filename_dlg (dlg, FILE_SAVE, _("Choose Name for Key File"), NULL, name);
1264                  if( t && !file_exist_check( t ) ) {                  if (t != NULL)          
1265                      idx = log_box( _("Key Manager"), MB_INFO|MB_YESNO,                      km_privkey_export (dlg, kmi->lv, t);
                                    _("File %s already exists.\nOverwrite?"), t );  
                     if( idx == IDNO )  
                         return FALSE;  
                 }  
                 if( t )  
                     km_privkey_export( dlg, kmi->lv, t );  
1266              }              }
1267              break;              break;
1268    
# Line 1199  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1297  keymanager_dlg_proc (HWND dlg, UINT msg,
1297              dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT, dlg,              dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT, dlg,
1298                                keyedit_main_dlg_proc, (LPARAM)&k,                                keyedit_main_dlg_proc, (LPARAM)&k,
1299                                _("Key Edit"), IDS_KEYCTX_EDIT);                                _("Key Edit"), IDS_KEYCTX_EDIT);
1300                if (k.update)
1301                    update_key (kmi->lv,  idx, keyid, 1);
1302              break;              break;
1303                            
         case ID_GROUP_NEW:  
             memset (&gcb, 0, sizeof (gcb));  
             gcb.gc = gc;  
             dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_GROUP, glob_hwnd,  
                              group_manager_dlg_proc, (LPARAM)&gcb, _("New Group"),  
                              IDS_WINPT_GROUP);  
             if( gcb.use_name )  
                 treeview_add_item( GetDlgItem(dlg, IDC_KEYMISC_GROUP), NULL, gcb.name );  
             return TRUE;  
               
1304          case ID_KEYMISC_COPY:          case ID_KEYMISC_COPY:
1305              km_index = listview_get_curr_pos( kmi->lv );              km_index = listview_get_curr_pos (kmi->lv);
1306              km_clip_export( dlg, kmi->lv );              km_clip_export (dlg, kmi->lv);
1307              break;              break;
1308                            
1309          case ID_KEYMISC_SELALL:          case ID_KEYMISC_SELALL:
# Line 1266  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1356  keymanager_dlg_proc (HWND dlg, UINT msg,
1356              break;              break;
1357    
1358          case ID_KEYCTX_SENDMAIL:          case ID_KEYCTX_SENDMAIL:
1359              km_send_to_mail_recipient( kmi->lv, dlg );              km_send_to_mail_recipient (kmi->lv, dlg);
1360              break;              break;
1361    
1362          case ID_KEYCTX_KS_DEFAULT:          case ID_KEYCTX_KS_DEFAULT:
# Line 1275  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1365  keymanager_dlg_proc (HWND dlg, UINT msg,
1365              break;              break;
1366    
1367          case ID_KEYCTX_ADDKEY:          case ID_KEYCTX_ADDKEY:
1368              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1369              listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1);              listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1370              memset (&k, 0, sizeof (k));              memset (&k, 0, sizeof (k));
1371              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1372              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.is_protected = km_check_if_protected (kmi->lv, idx);
1373              k.keyid = keyid;              k.keyid = keyid;
1374              keyedit_add_subkey( &k, dlg, NULL );              keyedit_add_subkey (&k, dlg, NULL);
1375                if (k.update)
1376                    update_key (kmi->lv, idx, keyid, 1);
1377              break;              break;
1378    
1379          case ID_KEYCTX_ADDUID:          case ID_KEYCTX_ADDUID:
1380              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1381              listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1);              listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1382              memset (&k, 0, sizeof (k));              memset (&k, 0, sizeof (k));
1383              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1384              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.is_protected = km_check_if_protected (kmi->lv, idx);
1385              k.keyid = keyid;              k.keyid = keyid;
1386              keyedit_add_userid( &k, dlg, NULL );              keyedit_add_userid (&k, dlg, NULL);
1387                if (k.update)
1388                    update_key (kmi->lv, idx, keyid, 1);
1389              break;              break;
1390    
1391          case ID_KEYCTX_ADDREV:          case ID_KEYCTX_ADDREV:
# Line 1299  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1393  keymanager_dlg_proc (HWND dlg, UINT msg,
1393              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1394              memset (&k, 0, sizeof (k));              memset (&k, 0, sizeof (k));
1395              k.keyid = keyid;              k.keyid = keyid;
1396              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.is_protected = km_check_if_protected (kmi->lv, idx);
1397              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );
1398              keyedit_add_revoker( &k, dlg );              keyedit_add_revoker (&k, dlg);
1399                if (k.update)
1400                    update_key (kmi->lv, idx, keyid, 1);
1401              break;              break;
1402    
1403          case ID_KEYCTX_ADDPHOTO:          case ID_KEYCTX_ADDPHOTO:
# Line 1312  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1408  keymanager_dlg_proc (HWND dlg, UINT msg,
1408              k.is_protected = km_check_if_protected (kmi->lv, idx);              k.is_protected = km_check_if_protected (kmi->lv, idx);
1409              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1410              keyedit_add_photo (&k, dlg);              keyedit_add_photo (&k, dlg);
1411                if (k.update)
1412                    update_key (kmi->lv, idx, keyid, 1);
1413              break;              break;
1414    
1415          case ID_KEYCTX_KS_NL:          case ID_KEYCTX_KS_NL:
# Line 1346  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1444  keymanager_dlg_proc (HWND dlg, UINT msg,
1444    
1445          case ID_KEYCTX_FPR_COPY:          case ID_KEYCTX_FPR_COPY:
1446              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos( kmi->lv );
1447              listview_get_item_text( kmi->lv, idx, 1, uid, sizeof uid-1 );              key = (gpgme_key_t) listview_get_item2 (kmi->lv, idx);        
1448              get_pubkey( uid, &pk );              if (key) {
1449              if( pk ) {                  const char * s = get_key_fpr (key);
1450                  const char * s = get_key_fpr( pk );                  set_clip_text (NULL, s? s : "", s? strlen (s): 0);
                 set_clip_text( NULL, s? s : "", s? strlen( s ): 0 );  
1451              }              }
1452              break;              break;
1453    
# Line 1386  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1483  keymanager_dlg_proc (HWND dlg, UINT msg,
1483    
1484          case ID_KEYCTX_MAXTRUST:          case ID_KEYCTX_MAXTRUST:
1485              idx = listview_get_curr_pos (kmi->lv);              idx = listview_get_curr_pos (kmi->lv);
1486              km_set_implicit_trust (dlg, kmi->lv, idx);              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1487                rc = km_set_implicit_trust (dlg, kmi->lv, idx);
1488                if (!rc)
1489                    update_key (kmi->lv, idx, keyid, 0);
1490              break;              break;
1491    
1492          case ID_KEYCTX_SETDEFKEY:          case ID_KEYCTX_SETDEFKEY:
1493              idx = listview_get_curr_pos (kmi->lv);              idx = listview_get_curr_pos (kmi->lv);
1494              if (km_check_key_status (kmi->lv, idx))              if (!km_check_key_status (kmi->lv, idx)) {
1495              {                  listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
                 listview_get_item_text (kmi->lv, idx, 1, keyid, sizeof keyid -1);  
1496                  rc = set_gnupg_default_key (keyid);                  rc = set_gnupg_default_key (keyid);
1497                  if (rc)                  if (rc)
1498                      msg_box( dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR);                      msg_box( dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR);
1499                  km_update_default_key_str (kmi->statbar, &km_def_pos);                  km_update_default_key_str (kmi->statbar);
1500              }              }
1501              break;              break;
1502    
1503            #if 0 /* XXX */
1504            case ID_GROUP_NEW:
1505                memset (&gcb, 0, sizeof (gcb));
1506                gcb.gc = gc;
1507                dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_GROUP, glob_hwnd,
1508                                 group_manager_dlg_proc, (LPARAM)&gcb, _("New Group"),
1509                                 IDS_WINPT_GROUP);
1510                if( gcb.use_name )
1511                    treeview_add_item( GetDlgItem(dlg, IDC_KEYMISC_GROUP), NULL, gcb.name );
1512                return TRUE;
1513                            
1514          case ID_GROUP_PASTE:          case ID_GROUP_PASTE:
1515              km_groups_add (gc, kmi->lv, km_index);              km_groups_add (gc, kmi->lv, km_index);
# Line 1408  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1518  keymanager_dlg_proc (HWND dlg, UINT msg,
1518          case ID_GROUP_DELETE:          case ID_GROUP_DELETE:
1519              km_groups_del (gc);              km_groups_del (gc);
1520              break;              break;
1521          }                #endif
1522            }
1523            
1524          break;          break;
1525      }      }
1526            

Legend:
Removed from v.20  
changed lines
  Added in v.23

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26