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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26