/[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 16 by twoaday, Mon May 9 08:54:21 2005 UTC revision 25 by twoaday, Wed Oct 12 10:04:26 2005 UTC
# Line 39  Line 39 
39  #include "wptKeyEdit.h"  #include "wptKeyEdit.h"
40  #include "wptRegistry.h"  #include "wptRegistry.h"
41    
42    #define KM_SEPARATOR_ID                10000
43  #define WINDOWCLASS_SEPARATOR_CHILD "WINPT_SEP_CHILD"  #define WINDOWCLASS_SEPARATOR_CHILD "WINPT_SEP_CHILD"
44  #define SEPARATOR_HEIGHT            5  //#define KM_SEPARATOR_HEIGHT            5
45    
 int treeview_add_item (HWND tree, HTREEITEM parent, const char * text);  
46    
47  static subclass_s keylist_proc;  static subclass_s keylist_proc;
48  static int km_index = -1;  static int km_index = -1;
 static int km_def_pos = 0;  
49    
50  HIMAGELIST glob_imagelist;  HIMAGELIST glob_imagelist;
51    
# Line 80  struct mybuttons myb[] = { Line 78  struct mybuttons myb[] = {
78  };  };
79    
80    
81    #ifndef VK_F
82    #define VK_F 70
83    #endif
84    #ifndef VK_A
85    #define VK_A 65
86    #endif
87    #ifndef VK_C
88    #define VK_C 67
89    #endif
90    #ifndef VK_P
91    #define VK_P 80
92    #endif
93    
94  static BOOL CALLBACK  static BOOL CALLBACK
95  keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
96  {  {
97      switch (msg)      struct listview_ctrl_s lv;
98      {  
99        switch (msg) {
100      case WM_LBUTTONDBLCLK:      case WM_LBUTTONDBLCLK:
101          send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS );          send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PROPS);
102          break;          break;
103                    
104      case WM_KEYUP:      case WM_KEYUP:
105          int virt_key = (int)wparam;          int virt_key = (int)wparam;
106          if (virt_key == VK_SPACE)          switch (virt_key) {
107          {          case VK_SPACE:
108              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS );              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_PROPS );
109              break;              break;
110          }          
111          if (virt_key == VK_DELETE)          case VK_DELETE:
         {  
112              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_DELETE );              send_cmd_id( keylist_proc.dlg, ID_KEYMISC_DELETE );
113              break;              break;
114          }          
115          if (virt_key == VK_INSERT)          case VK_INSERT:
         {  
116              send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PASTE);              send_cmd_id (keylist_proc.dlg, ID_KEYMISC_PASTE);
117              break;              break;
118    
119            case VK_A:
120                if (GetAsyncKeyState (VK_CONTROL)) {
121                    lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST);
122                    listview_select_all (&lv);
123                }
124                break;
125                
126            case VK_C:
127                if (GetAsyncKeyState (VK_CONTROL)) {
128                    lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST);
129                    km_index = listview_get_curr_pos (&lv);
130                    km_clip_export (keylist_proc.dlg, &lv);
131                }
132                break;
133    
134            case VK_P:
135                if (GetAsyncKeyState (VK_CONTROL)) {
136                    km_index = -1;
137                    km_clip_import (keylist_proc.dlg);
138                }
139                break;
140    
141            case VK_F:
142                if (GetAsyncKeyState (VK_CONTROL)) {
143                    lv.ctrl = GetDlgItem (keylist_proc.dlg, IDC_KEYMISC_KEYLIST);
144                    km_find_key (dlg, &lv);
145                }
146                break;
147          }          }
148          break;          break;
149      }      }
# Line 164  do_center_window (HWND dlg, struct km_in Line 203  do_center_window (HWND dlg, struct km_in
203      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_X" );      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_X" );
204      if( p && !strcmp( p, " " ) ) {      if( p && !strcmp( p, " " ) ) {
205          free_if_alloc( p );              free_if_alloc( p );    
206          center_window( dlg );          center_window( dlg, NULL );
207          return;          return;
208      }      }
209      else if( p )      else if( p )
# Line 173  do_center_window (HWND dlg, struct km_in Line 212  do_center_window (HWND dlg, struct km_in
212      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_Y" );      p = get_reg_entry( HKEY_CURRENT_USER, "Software\\WinPT", "KM_Pos_Y" );
213      if( p && !strcmp( p, " " ) ) {      if( p && !strcmp( p, " " ) ) {
214          free_if_alloc( p );          free_if_alloc( p );
215          center_window( dlg );          center_window( dlg, NULL );
216          return;          return;
217      }      }
218      else if( p )      else if( p )
219          pos_y = atol( p );          pos_y = atol( p );
220    
221      if( !pos_y && !pos_x ) {      if( !pos_y && !pos_x ) {
222          center_window( dlg );          center_window( dlg, NULL );
223          return;          return;
224      }      }
225            
# Line 287  do_create_minpopup (HWND dlg) Line 326  do_create_minpopup (HWND dlg)
326    
327    
328  static void  static void
329  do_check_cache( listview_ctrl_t lv, HWND dlg, HWND sb  )  do_check_cache (listview_ctrl_t lv, HWND dlg, HWND sb)
330  {  {
331      gpgme_keycache_t cache;      gpg_keycache_t cache;
332    
333      if( keycache_get_reload( ) ) {      if( keycache_get_reload( ) ) {
334          keycache_reload( dlg );          keycache_reload( dlg );
# Line 297  do_check_cache( listview_ctrl_t lv, HWND Line 336  do_check_cache( listview_ctrl_t lv, HWND
336          cache = keycache_get_ctx( 1 );          cache = keycache_get_ctx( 1 );
337          if( !cache )          if( !cache )
338              BUG( dlg );              BUG( dlg );
339          keylist_reload( lv, cache, KEYLIST_LIST, GPGME_ATTR_USERID );          keylist_reload( lv, cache, KEYLIST_LIST, KEY_SORT_USERID );
340          km_complete_status_bar (sb, lv, km_def_pos);          km_complete_status_bar (sb, lv);
341      }      }
342  } /* do_check_cache */  } /* do_check_cache */
343    
# Line 428  regist_sep_wnd (HWND dlg, struct km_info Line 467  regist_sep_wnd (HWND dlg, struct km_info
467  #define enable_button(hwnd, cid) \  #define enable_button(hwnd, cid) \
468      SendMessage ((hwnd), TB_ENABLEBUTTON, (cid), MAKELONG (key_selected, 0))      SendMessage ((hwnd), TB_ENABLEBUTTON, (cid), MAKELONG (key_selected, 0))
469    
470    
471  void  void
472  update_ui_items (HWND hwnd, listview_ctrl_t lv)  update_ui_items (HWND hwnd, listview_ctrl_t lv)
473  {  {
# Line 461  update_ui_items (HWND hwnd, listview_ctr Line 501  update_ui_items (HWND hwnd, listview_ctr
501      set_menu_state (hmenu, ID_KEYMISC_REVCERT, key_has_sec ? MF_ENABLED : MF_GRAYED);      set_menu_state (hmenu, ID_KEYMISC_REVCERT, key_has_sec ? MF_ENABLED : MF_GRAYED);
502      set_menu_state (hmenu, ID_KEYMISC_DELETE, key_selected ? MF_ENABLED : MF_GRAYED);      set_menu_state (hmenu, ID_KEYMISC_DELETE, key_selected ? MF_ENABLED : MF_GRAYED);
503      set_menu_state (hmenu, ID_KEYMISC_PROPS, key_selected ? MF_ENABLED : MF_GRAYED);      set_menu_state (hmenu, ID_KEYMISC_PROPS, key_selected ? MF_ENABLED : MF_GRAYED);
504      set_menu_state (hmenu, ID_KEYMISC_SIGN, key_selected && !key_inv ? MF_ENABLED : MF_GRAYED);          set_menu_state (hmenu, ID_KEYMISC_SIGN, key_selected && !key_inv ? MF_ENABLED : MF_GRAYED);
505        set_menu_state (hmenu, ID_KEYMISC_EDITKEY, key_selected? MF_ENABLED : MF_GRAYED);
506        set_menu_state (hmenu, ID_KEYMISC_CHECKSIGS, key_selected? MF_ENABLED : MF_GRAYED);
507  } /* update_ui_items */  } /* update_ui_items */
508    
509    
# Line 495  popup_gpg_readonly (HWND dlg, HMENU hm) Line 537  popup_gpg_readonly (HWND dlg, HMENU hm)
537  static void  static void
538  menu_gpg_readonly (HWND dlg, HMENU hm, int id)  menu_gpg_readonly (HWND dlg, HMENU hm, int id)
539  {  {
540      int key_resids[] =      int key_resids[] = {
     {  
541          ID_KEYMISC_SIGN,          ID_KEYMISC_SIGN,
542          ID_KEYMISC_DELETE,          ID_KEYMISC_DELETE,
543          ID_KEYMISC_REVCERT,          ID_KEYMISC_REVCERT,
# Line 509  menu_gpg_readonly (HWND dlg, HMENU hm, i Line 550  menu_gpg_readonly (HWND dlg, HMENU hm, i
550          ID_KEYMISC_NEWKEY,          ID_KEYMISC_NEWKEY,
551          0,          0,
552      };      };
553      int edit_resids[] =      int edit_resids[] = {
     {  
554          ID_KEYMISC_PASTE,          ID_KEYMISC_PASTE,
555          ID_KEYMISC_OT,          ID_KEYMISC_OT,
556          ID_KEYMISC_EDITKEY,          ID_KEYMISC_EDITKEY,
# Line 522  menu_gpg_readonly (HWND dlg, HMENU hm, i Line 562  menu_gpg_readonly (HWND dlg, HMENU hm, i
562            
563      if (gpg_read_only == 0)      if (gpg_read_only == 0)
564          return;          return;
565      switch (id)      switch (id) {
     {  
566      case 0: return;      case 0: return;
567      case 3: resids = key_resids; break;      case 3: resids = key_resids; break;
568      case 1: resids = edit_resids;break;      case 1: resids = edit_resids;break;
# Line 534  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, int is_secret)
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 + 16];
589        if (!p)
590            BUG (0);
591        sprintf (p, "%s%s.asc", s, is_secret? "_sec" : "");
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    /* Setup status bar for the main window @dlg. */
617    static HWND
618    setup_status_bar (HWND dlg, listview_ctrl_t lv)
619    {      
620        HWND statbar;    
621        RECT r;
622        int partpos[3];
623        int i;
624    
625        GetClientRect (dlg, &r);
626        for (i=1; i <= 3; i++)
627            partpos[i-1] = r.right/3*i;
628        statbar = CreateStatusWindow (WS_CHILD | WS_VISIBLE | CCS_BOTTOM,
629                                      "status bar", dlg, KM_SEPARATOR_ID);
630    
631        ShowWindow (statbar, SW_SHOW);
632        SendMessage (statbar, SB_SETPARTS, (WPARAM)3, (LPARAM)partpos);
633    
634        km_update_default_key_str (statbar);
635        km_complete_status_bar (statbar, lv);
636    
637        return statbar;
638    }
639    
640    
641  BOOL CALLBACK  BOOL CALLBACK
642  keymanager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keymanager_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
643  {  {
# Line 544  keymanager_dlg_proc (HWND dlg, UINT msg, Line 648  keymanager_dlg_proc (HWND dlg, UINT msg,
648      INITCOMMONCONTROLSEX icex;      INITCOMMONCONTROLSEX icex;
649      HWND kl;      HWND kl;
650      HMENU hm;      HMENU hm;
651      gpgme_keycache_t c;      gpg_keycache_t c;
652      gpgme_key_t pk;      gpgme_key_t key;
653      km_group_cb_s gcb;          /*km_group_cb_s gcb; XXX */
654        struct genkey_s genkey;
655      struct winpt_key_s k = {0};      struct winpt_key_s k = {0};
656      struct http_file_s * http;      struct URL_ctx_s *url;
657      refresh_cache_s rcs = {0};      refresh_cache_s rcs = {0};
658      char keyid[48], uid[128], type[32], * q;      char keyid[48], uid[128], type[32], *name;
659      const char *t, * host;      const char *t, * host;
660      u16 port = 0;      u16 port = 0;
661      int idx = 0, i=0, rc;      int idx = 0, i=0, rc;
# Line 594  keymanager_dlg_proc (HWND dlg, UINT msg, Line 699  keymanager_dlg_proc (HWND dlg, UINT msg,
699          set_menu_text( menu, ID_KEYMISC_INFO, _("Info") );          set_menu_text( menu, ID_KEYMISC_INFO, _("Info") );
700          set_menu_text (menu, ID_KEYMISC_HELP, _("Help"));          set_menu_text (menu, ID_KEYMISC_HELP, _("Help"));
701  #endif  #endif
702          SetMenu( dlg, menu );          SetMenu (dlg, menu);
703          if( keyring_check_last_access() )          if( keyring_check_last_access() )
704              keycache_set_reload( 1 );              keycache_set_reload( 1 );
705          if( keycache_get_reload( ) )          if( keycache_get_reload( ) )
# Line 602  keymanager_dlg_proc (HWND dlg, UINT msg, Line 707  keymanager_dlg_proc (HWND dlg, UINT msg,
707          c = keycache_get_ctx( KEYCACHE_PUB );          c = keycache_get_ctx( KEYCACHE_PUB );
708          if( !c )          if( !c )
709              BUG( NULL );              BUG( NULL );
710          kmi->keylist_sortby = GPGME_ATTR_USERID;          kmi->keylist_sortby = KEY_SORT_USERID;
711          Header_SetImageList(ListView_GetHeader(GetDlgItem( dlg, IDC_KEYMISC_KEYLIST )),          Header_SetImageList(ListView_GetHeader(GetDlgItem( dlg, IDC_KEYMISC_KEYLIST )),
712                              glob_imagelist);                              glob_imagelist);
713          kmi->lv = keylist_load( GetDlgItem( dlg, IDC_KEYMISC_KEYLIST ), c,          kmi->lv = keylist_load( GetDlgItem( dlg, IDC_KEYMISC_KEYLIST ), c,
# Line 618  keymanager_dlg_proc (HWND dlg, UINT msg, Line 723  keymanager_dlg_proc (HWND dlg, UINT msg,
723                  BUG( NULL );                  BUG( NULL );
724              }              }
725          }          }
726            #if 0
727          km_groups_new( &gc, GetDlgItem( dlg, IDC_KEYMISC_GROUP ) );          km_groups_new( &gc, GetDlgItem( dlg, IDC_KEYMISC_GROUP ) );
728          km_groups_load( gc );          km_groups_load( gc );
729          SetForegroundWindow( dlg );          #endif
730                    SetClassLong (dlg, GCL_HICON, (LONG)LoadIcon (glob_hinst, (LPCTSTR)IDI_WINPT));
731          kmi->statbar = CreateStatusWindow( WS_CHILD | WS_VISIBLE | CCS_BOTTOM, "status bar", dlg, 100000 );          SetForegroundWindow (dlg);
732          ShowWindow( kmi->statbar, SW_SHOW );  
733          km_update_default_key_str (kmi->statbar, &km_def_pos);          kmi->statbar = setup_status_bar (dlg, kmi->lv);
         km_complete_status_bar( kmi->statbar, kmi->lv, km_def_pos );  
734    
735          SetWindowLong (dlg, GWL_USERDATA, (LONG)kmi);          SetWindowLong (dlg, GWL_USERDATA, (LONG)kmi);
736          kmi->toolbar = load_toolbar (dlg, kmi);          kmi->toolbar = load_toolbar (dlg, kmi);
# Line 639  keymanager_dlg_proc (HWND dlg, UINT msg, Line 744  keymanager_dlg_proc (HWND dlg, UINT msg,
744          if (kmi->lv) {          if (kmi->lv) {
745              keylist_delete (kmi->lv);              keylist_delete (kmi->lv);
746              kmi->lv = NULL;                    kmi->lv = NULL;      
747                        
748             /*
749           if (gc) {           if (gc) {
750              km_groups_release (gc);              km_groups_release (gc);
751              gc = NULL;              gc = NULL;
752          }          }*/
753         imagelist_destroy ();         imagelist_destroy ();
754    
755         char buf[32];         char buf[32];
# Line 763  keymanager_dlg_proc (HWND dlg, UINT msg, Line 869  keymanager_dlg_proc (HWND dlg, UINT msg,
869              break;              break;
870    
871          case NM_RCLICK:          case NM_RCLICK:
872              if (notify->idFrom == IDC_KEYMISC_KEYLIST)              if (notify->idFrom == IDC_KEYMISC_KEYLIST) {
             {  
873                  if (listview_get_curr_pos (kmi->lv) == -1)                  if (listview_get_curr_pos (kmi->lv) == -1)
874                      return TRUE; /* Popup only when a item was selected */                      return TRUE; /* Popup only when a item was selected */
875                  do_check_cache (kmi->lv, dlg, kmi->statbar);                  do_check_cache (kmi->lv, dlg, kmi->statbar);
# Line 778  keymanager_dlg_proc (HWND dlg, UINT msg, Line 883  keymanager_dlg_proc (HWND dlg, UINT msg,
883                  set_menu_text( popup, ID_KEYCTX_RECVFROM, _("Refresh from Keyserver") );                  set_menu_text( popup, ID_KEYCTX_RECVFROM, _("Refresh from Keyserver") );
884              #endif              #endif
885                  idx = listview_get_curr_pos (kmi->lv);                  idx = listview_get_curr_pos (kmi->lv);
886                  if (km_check_for_seckey (kmi->lv, idx, &i) && i == 0)                  if (km_check_for_seckey (kmi->lv, idx, &i))
                 {  
887                      set_menu_state (popup, ID_KEYCTX_SETDEFKEY, MF_ENABLED);                      set_menu_state (popup, ID_KEYCTX_SETDEFKEY, MF_ENABLED);
888                    if (i == 0)
889                      set_menu_state (popup, ID_KEYCTX_MAXTRUST, MF_ENABLED);                      set_menu_state (popup, ID_KEYCTX_MAXTRUST, MF_ENABLED);
890                  }                  if (!km_check_for_seckey (kmi->lv, idx, NULL)) {
                 if( !km_check_for_seckey( kmi->lv, idx, NULL ) ) {  
891                      set_menu_state( popup, ID_KEYCTX_REV, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_REV, MF_DISABLED|MF_GRAYED );
892                      set_menu_state( popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED );
893                      set_menu_state( popup, ID_KEYCTX_ADDUID, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_ADDUID, MF_DISABLED|MF_GRAYED );
# Line 791  keymanager_dlg_proc (HWND dlg, UINT msg, Line 895  keymanager_dlg_proc (HWND dlg, UINT msg,
895                      set_menu_state( popup, ID_KEYCTX_ADDPHOTO, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_ADDPHOTO, MF_DISABLED|MF_GRAYED );
896                      set_menu_state (popup, ID_KEYCTX_SETPREFKS, MF_DISABLED|MF_GRAYED);                      set_menu_state (popup, ID_KEYCTX_SETPREFKS, MF_DISABLED|MF_GRAYED);
897                  }                  }
898                  else if( km_check_for_seckey( kmi->lv, idx, NULL )                  else if( km_check_for_seckey (kmi->lv, idx, NULL)
899                        && km_key_is_v3( kmi->lv, idx ) )                        && km_key_is_v3 (kmi->lv, idx)) {
                 {  
900                      /* PGP 2 keys, version 3 have no no support for photo-id's,                      /* PGP 2 keys, version 3 have no no support for photo-id's,
901                         designated revokers and secondary keys. */                         designated revokers and secondary keys. */
902                      set_menu_state( popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED );                      set_menu_state (popup, ID_KEYCTX_ADDKEY, MF_DISABLED|MF_GRAYED);
903                      set_menu_state( popup, ID_KEYCTX_ADDREV, MF_DISABLED|MF_GRAYED );                      set_menu_state (popup, ID_KEYCTX_ADDREV, MF_DISABLED|MF_GRAYED);
904                      set_menu_state( popup, ID_KEYCTX_ADDPHOTO, MF_DISABLED|MF_GRAYED );                      set_menu_state (popup, ID_KEYCTX_ADDPHOTO, MF_DISABLED|MF_GRAYED);
905                  }                  }
906                  if( km_get_key_status( kmi->lv, idx ) & KM_FLAG_DISABLED )                  if( km_get_key_status( kmi->lv, idx ) & KM_FLAG_DISABLED )
907                      set_menu_state( popup, ID_KEYCTX_DISABLE, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_DISABLE, MF_DISABLED|MF_GRAYED );
# Line 806  keymanager_dlg_proc (HWND dlg, UINT msg, Line 909  keymanager_dlg_proc (HWND dlg, UINT msg,
909                      set_menu_state( popup, ID_KEYCTX_ENABLE, MF_DISABLED|MF_GRAYED );                      set_menu_state( popup, ID_KEYCTX_ENABLE, MF_DISABLED|MF_GRAYED );
910                  if (km_get_key_status (kmi->lv, idx) & KM_FLAG_REVOKED)                  if (km_get_key_status (kmi->lv, idx) & KM_FLAG_REVOKED)
911                      set_menu_state (popup, ID_KEYCTX_SIGN, MF_DISABLED|MF_GRAYED);                      set_menu_state (popup, ID_KEYCTX_SIGN, MF_DISABLED|MF_GRAYED);
912                  if( mapi_init() )                  if (mapi_init())
913                      set_menu_state( popup, ID_KEYCTX_SENDMAIL, MF_DISABLED|MF_GRAYED );                      set_menu_state (popup, ID_KEYCTX_SENDMAIL, MF_DISABLED|MF_GRAYED);
914                    /* Override 'Default Keyserver' with the actual name. */
915                    host = kserver_get_hostname (0, -1, &port);
916                    set_menu_text (popup, ID_KEYCTX_KS_DEFAULT, host);
917                  popup_gpg_readonly (dlg, popup);                  popup_gpg_readonly (dlg, popup);
918                  TrackPopupMenu( popup, TPM_RIGHTALIGN, p.x, p.y, 0, dlg, NULL );                  TrackPopupMenu (popup, TPM_RIGHTALIGN, p.x, p.y, 0, dlg, NULL);
919                  DestroyMenu( popup );                  DestroyMenu (popup);
920                  DestroyMenu( hm );                  DestroyMenu (hm);
921                  return TRUE;                  return TRUE;
922              }              }
923                #if 0 /* XXX */
924              if( notify->idFrom == IDC_KEYMISC_GROUP ) {              if( notify->idFrom == IDC_KEYMISC_GROUP ) {
925                  HWND tree = GetDlgItem( dlg, IDC_KEYMISC_GROUP );                  HWND tree = GetDlgItem( dlg, IDC_KEYMISC_GROUP );
926                  if( TreeView_GetSelection( tree ) ) {                  if( TreeView_GetSelection( tree ) ) {
# Line 830  keymanager_dlg_proc (HWND dlg, UINT msg, Line 937  keymanager_dlg_proc (HWND dlg, UINT msg,
937                      return TRUE;                      return TRUE;
938                  }                  }
939              }              }
940                #endif
941              break;              break;
942    
943          case LVN_COLUMNCLICK:          case LVN_COLUMNCLICK:
# Line 837  keymanager_dlg_proc (HWND dlg, UINT msg, Line 945  keymanager_dlg_proc (HWND dlg, UINT msg,
945                  NMLISTVIEW * p = (LPNMLISTVIEW) lparam;                  NMLISTVIEW * p = (LPNMLISTVIEW) lparam;
946                  int sortby = 0;                  int sortby = 0;
947                  switch (p->iSubItem) {                  switch (p->iSubItem) {
948                  case 0:  sortby = GPGME_ATTR_USERID; break;                  case 0:  sortby = KEY_SORT_USERID; break;
949                  case 1:  sortby = GPGME_ATTR_KEYID; break;                  case 1:  sortby = KEY_SORT_KEYID; break;
950                  case 2:  sortby = GPGME_ATTR_IS_SECRET; break;                  case 2:  sortby = KEY_SORT_IS_SECRET; break;
951                  case 3:  sortby = GPGME_ATTR_LEN; break;                  case 3:  sortby = KEY_SORT_LEN; break;
952                  case 5:  sortby = GPGME_ATTR_VALIDITY; break;                  case 5:  sortby = KEY_SORT_VALIDITY; break;
953                  case 6:  sortby = GPGME_ATTR_OTRUST; break;                  case 6:  sortby = KEY_SORT_OTRUST; break;
954                  case 7:  sortby = GPGME_ATTR_CREATED; break;                  case 7:  sortby = KEY_SORT_CREATED; break;
955                  case 8:  sortby = GPGME_ATTR_ALGO; break;                  case 8:  sortby = KEY_SORT_ALGO; break;
956                  default: return TRUE; //sortby = GPGME_ATTR_USERID; break;                  default: return TRUE; //sortby = KEY_SORT_USERID; break;
957                  }                  }
958    
959                  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 1000  keymanager_dlg_proc (HWND dlg, UINT msg,
1000              return TRUE;              return TRUE;
1001                            
1002          case ID_KEYMISC_MAIL:          case ID_KEYMISC_MAIL:
1003                /* XXX
1004              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_MAIL, GetDesktopWindow (),              DialogBoxParam (glob_hinst, (LPCTSTR)IDD_WINPT_MAIL, GetDesktopWindow (),
1005                              winpt_mail_proc, NULL);                              winpt_mail_proc, NULL);*/
1006              break;              break;
1007                        
1008            case ID_KEYMISC_FIND:
1009                km_find_key (dlg, kmi->lv);
1010                break;
1011    
1012          case ID_KEYMISC_DELETE:          case ID_KEYMISC_DELETE:
1013              if (km_delete_keys (kmi->lv, dlg))              km_delete_keys (kmi->lv, dlg);
                 return FALSE;  
             refresh_keys = 1;  
1014              return TRUE;              return TRUE;
1015                            
1016          case ID_KEYMISC_SIGN:          case ID_KEYMISC_SIGN:        
             gpgme_key_t key;  
   
1017              if ( (idx = listview_get_curr_pos( kmi->lv )) == -1 ) {              if ( (idx = listview_get_curr_pos( kmi->lv )) == -1 ) {
1018                  msg_box( dlg, _("Please select a key."),  _("Key Manager"),                  msg_box( dlg, _("Please select a key."),  _("Key Manager"),
1019                           MB_ERR );                           MB_ERR );
1020                  return FALSE;                  return TRUE;;
1021              }              }
1022              if( !km_check_key_status( kmi->lv, idx ) )              if (km_check_key_status (kmi->lv, idx))
1023                  return FALSE;                  return TRUE;
1024              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid );              key = (gpgme_key_t)listview_get_item2 (kmi->lv, idx);
1025              listview_get_item_text( kmi->lv, idx, 2, type, sizeof type -1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1026              rc = get_pubkey( keyid, &key );              memset (&k, 0, sizeof (k));
1027              if( rc )              k.ctx = key;
1028                  BUG( dlg );              k.keyid = keyid;
1029              if( key )              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIGN, dlg,
1030                  dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYSIGN, dlg,                                keysign_dlg_proc, (LPARAM)&k,
1031                                    keysign_dlg_proc, (LPARAM)key,                                _("Key Signing"), IDS_WINPT_KEYSIGN);
1032                                    _("Key Signing"), IDS_WINPT_KEYSIGN);              if (k.update)
1033                    update_key (kmi->lv, idx, k.keyid, 0);
1034              return TRUE;              return TRUE;
1035                            
1036          case ID_KEYMISC_REVCERT:          case ID_KEYMISC_REVCERT:
1037              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos( kmi->lv );
1038              if( idx == -1 ) {              if( idx == -1 ) {
1039                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1040                  return FALSE;                  return TRUE;
1041              }              }
1042              listview_get_item_text( kmi->lv, idx, 0, uid, sizeof uid -1 );              listview_get_item_text( kmi->lv, idx, 0, uid, sizeof uid -1 );
1043              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );
1044              if ( !km_check_for_seckey( kmi->lv, idx, NULL ) ) {              if ( !km_check_for_seckey( kmi->lv, idx, NULL ) ) {
1045                  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 );
1046                  return FALSE;                  return TRUE;
1047              }              }
1048                            
1049              {              {
# Line 941  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1051  keymanager_dlg_proc (HWND dlg, UINT msg,
1051                  listview_get_item_text( kmi->lv, idx, 5, t, sizeof t -1 );                  listview_get_item_text( kmi->lv, idx, 5, t, sizeof t -1 );
1052                  if( strchr( t, 'R' ) ) {                  if( strchr( t, 'R' ) ) {
1053                      msg_box( dlg, _("Key already revoked!"), _("Key Manager"), MB_INFO );                      msg_box( dlg, _("Key already revoked!"), _("Key Manager"), MB_INFO );
1054                      return FALSE;                      return TRUE;
1055                  }                  }
1056              }              }
1057                            
1058              q = km_quote_uid (uid);              memset (&k, 0, sizeof (k));
1059              k.key_pair = 1;              k.key_pair = 1;
1060              k.keyid = keyid;              k.keyid = keyid;
1061              k.uid = q;              k.is_protected = km_check_if_protected (kmi->lv, idx);
1062              k.is_protected = km_check_if_protected( kmi->lv, idx );              dialog_box_param(glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg,
             dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYREVOKE, dlg,  
1063                               key_revoke_dlg_proc, (LPARAM)&k,                               key_revoke_dlg_proc, (LPARAM)&k,
1064                               _("Key Revocation"), IDS_WINPT_KEYREVOKE );                               _("Key Revocation"), IDS_WINPT_KEYREVOKE);
             free_if_alloc( q );  
1065              return TRUE;              return TRUE;
1066                            
1067          case ID_KEYMISC_TRUSTPATH:          case ID_KEYMISC_TRUSTPATH:
1068              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos( kmi->lv );
1069              if( idx == -1 ) {              if( idx == -1 ) {
1070                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1071                  return FALSE;                  return TRUE;
1072              }              }
1073              listview_get_item_text( kmi->lv, idx, 0, uid, sizeof uid -1 );              listview_get_item_text( kmi->lv, idx, 0, uid, sizeof uid -1 );
1074              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 968  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1076  keymanager_dlg_proc (HWND dlg, UINT msg,
1076                  msg_box( dlg, _("It does not make any sense with a key pair!"), _("Key Manager"), MB_OK );                  msg_box( dlg, _("It does not make any sense with a key pair!"), _("Key Manager"), MB_OK );
1077                  return FALSE;                  return FALSE;
1078              }              }
1079                memset (&k, 0, sizeof (k));
1080              k.keyid = keyid;              k.keyid = keyid;
1081              k.uid = uid;              k.uid = uid;
1082              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYTRUST, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYTRUST, dlg,
# Line 976  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1085  keymanager_dlg_proc (HWND dlg, UINT msg,
1085              return TRUE;              return TRUE;
1086                            
1087          case ID_KEYMISC_CHECKSIGS:          case ID_KEYMISC_CHECKSIGS:
1088              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1089              if( idx == -1 ) {              if( idx == -1 ) {
1090                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1091                  return FALSE;                  return FALSE;
1092              }              }
1093              listview_get_item_text( kmi->lv, idx, 0, uid, sizeof uid-1 );              listview_get_item_text (kmi->lv, idx, 0, uid, DIM (uid)-1);
1094              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1095                memset (&k, 0, sizeof (k));
1096              k.keyid = keyid;              k.keyid = keyid;
1097              k.uid = uid;              k.uid = uid;
1098              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYSIG, dlg,              k.ctx = (gpgme_key_t)listview_get_item2 (kmi->lv, idx);
1099                dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYSIG, dlg,
1100                                keysig_dlg_proc, (LPARAM)&k,                                keysig_dlg_proc, (LPARAM)&k,
1101                                _("Key Signature List" ), IDS_WINPT_KEYSIG );                                _("Key Signature List" ), IDS_WINPT_KEYSIG);
1102              return TRUE;              return TRUE;
1103                            
1104          case ID_KEYMISC_PROPS:          case ID_KEYMISC_PROPS:
# Line 996  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1107  keymanager_dlg_proc (HWND dlg, UINT msg,
1107                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1108                  return FALSE;                  return FALSE;
1109              }              }
1110              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid -1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1111              listview_get_item_text( kmi->lv, idx, 2, type, sizeof type -1 );              listview_get_item_text (kmi->lv, idx, 2, type, DIM (type)-1);
1112                memset (&k, 0, sizeof (k));
1113              k.key_pair = 0;              k.key_pair = 0;
1114              k.keyid = keyid;              k.keyid = keyid;
1115              if( !strcmp( type, "pub/sec" ) || !strcmp( type, "pub/crd" ) )              if( !strcmp( type, "pub/sec" ) || !strcmp( type, "pub/crd" ) )
1116                  k.key_pair = 1;                  k.key_pair = 1;
1117              k.callback.ctl = kmi->lv;              k.callback.ctl = kmi->lv;
1118              k.callback.idx = idx;              k.callback.idx = idx;
1119                k.is_v3 = km_key_is_v3 (kmi->lv, idx);
1120              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYPROPS, dlg,
1121                                keyprops_dlg_proc, (LPARAM)&k,                                keyprops_dlg_proc, (LPARAM)&k,
1122                                _("Key Properties"), IDS_WINPT_KEYPROPS );                                _("Key Properties"), IDS_WINPT_KEYPROPS );
1123              if (k.callback.new_val != 0)              if (k.callback.new_val != 0) {
             {  
1124                  t = get_key_trust_str (k.callback.new_val);                  t = get_key_trust_str (k.callback.new_val);
1125                  listview_add_sub_item (kmi->lv, idx, 6, t);                  listview_add_sub_item (kmi->lv, idx, 6, t);
1126              }              }
# Line 1034  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1146  keymanager_dlg_proc (HWND dlg, UINT msg,
1146                  c = keycache_get_ctx( 1 );                  c = keycache_get_ctx( 1 );
1147                  if( !c )                  if( !c )
1148                      BUG( dlg );                      BUG( dlg );
1149                  keylist_reload( kmi->lv, c, KEYLIST_LIST, GPGME_ATTR_USERID );                  keylist_reload( kmi->lv, c, KEYLIST_LIST, KEY_SORT_USERID );
1150                  refresh_keys = 0;                  refresh_keys = 0;
1151              }              }
1152              return TRUE;              return TRUE;
1153                            
1154          case ID_KEYMISC_REBUILD:          case ID_KEYMISC_REBUILD:
1155              rcs.kr_reload = rcs.kr_update = 1;              name=NULL;
1156              rcs.tr_update = 1;              gpg_rebuild_cache (&name);
1157              DialogBoxParam( glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg,              if (name) {
1158                              keycache_dlg_proc, (LPARAM)&rcs );                  char *p = strchr (name, '\n');
1159              c = keycache_get_ctx( 1 );                  show_msg (dlg, 2000, p? name + (p-name)+1 : name);
1160              if( !c )                  free (name);
1161                  BUG( dlg );              }
             keylist_reload( kmi->lv, c, KEYLIST_LIST, GPGME_ATTR_USERID );  
1162              return TRUE;              return TRUE;
1163                            
1164          case ID_KEYMISC_NEWKEY:          case ID_KEYMISC_NEWKEY:
1165              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYGEN, dlg,              memset (&genkey, 0, sizeof (genkey));
1166                                keygen_dlg_proc, NULL, _("Key Generation"),              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYGEN, dlg,
1167                                IDS_WINPT_KEYGEN );                                keygen_dlg_proc, (LPARAM)&genkey, _("Key Generation"),
1168              if( keycache_get_reload( ) )                                IDS_WINPT_KEYGEN);
1169                  send_cmd_id( dlg, ID_KEYMISC_RECACHE );              if (genkey.newkey != NULL)
1170                    keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey);
1171              return TRUE;              return TRUE;
1172    
1173          case ID_KEYMISC_CARDNEW:          case ID_KEYMISC_CARDNEW:
1174              if( !scard_support ) {              if( !scard_support ) {
1175                  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 );
1176                  return FALSE;                  return TRUE;
1177              }              }
1178              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN, dlg,              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_CARD_KEYGEN, dlg,
1179                                card_keygen_dlg_proc, NULL, _("Card Key Generation"),                                card_keygen_dlg_proc, NULL, _("Card Key Generation"),
1180                                IDS_WINPT_CARD_KEYGEN );                                IDS_WINPT_CARD_KEYGEN );
1181                /* XXX: use new code */
1182              if( keycache_get_reload() )              if( keycache_get_reload() )
1183                  send_cmd_id( dlg, ID_KEYMISC_RECACHE );                  send_cmd_id( dlg, ID_KEYMISC_RECACHE );
1184              return TRUE;              return TRUE;
1185    
1186          case ID_KEYMISC_KEYWIZARD:          case ID_KEYMISC_KEYWIZARD:
1187              dialog_box_param( glob_hinst, (LPCSTR)IDD_WINPT_KEYWIZARD, dlg,              memset (&genkey, 0, sizeof (genkey));
1188                                keygen_wizard_dlg_proc, NULL, _("Key Generation Wizard"),              dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_KEYWIZARD, dlg,
1189                                IDS_WINPT_KEYWIZARD );                                keygen_wizard_dlg_proc, (LPARAM)&genkey, _("Key Generation Wizard"),
1190              if( keycache_get_reload() )                                IDS_WINPT_KEYWIZARD);
1191                  send_cmd_id( dlg, ID_KEYMISC_RECACHE );              if (genkey.newkey != NULL)
1192                    keylist_add_key (kmi->lv, KEYLIST_LIST, genkey.newkey);
1193              return TRUE;              return TRUE;
1194                            
1195          case ID_KEYMISC_SENDRECV:          case ID_KEYMISC_SENDRECV:
# Line 1097  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1211  keymanager_dlg_proc (HWND dlg, UINT msg,
1211              return TRUE;              return TRUE;
1212                            
1213          case ID_KEYMISC_IMPORT:          case ID_KEYMISC_IMPORT:
1214              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);
1215              if( t )              if (t)
1216                  km_file_import( dlg, t );                  km_file_import (dlg, t);
1217              return TRUE;              return TRUE;
1218    
1219          case ID_KEYMISC_IMPORT_HTTP:          case ID_KEYMISC_IMPORT_HTTP:
1220              http = (struct http_file_s *)get_http_file_dlg (dlg);              url = (struct URL_ctx_s*)get_http_file_dlg (dlg);
1221              if (http->cancel == 0)              if (url->cancel == 0)
1222                  km_http_import (dlg, http->url);                  km_http_import (dlg, url->url);
1223              delete http;              delete url; url=NULL;
1224              break;              break;
1225                            
1226          case ID_KEYMISC_EXPORT:          case ID_KEYMISC_EXPORT:
1227              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1228              if( idx == -1 ) {              if (idx == -1) {
1229                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1230                  return FALSE;                  return TRUE;
1231              }              }
1232              if( listview_count_items( kmi->lv, 1 ) > 1 )              if (listview_count_items (kmi->lv, 1) > 1)
1233                  strcpy( keyid, _("Exported_GPG_Keys.asc") );                  name = m_strdup ("Exported_GPG_Keys.asc");
1234              else {              else {
1235                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );                  listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1236                  strcat( keyid, ".asc" );                  name = gen_export_filename (keyid, 0);
1237              }              }
1238              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);
1239              if( !t || overwrite_file( t ) == 0 )              free_if_alloc (name);
1240                  return FALSE;              if (t == NULL)
1241              km_file_export( dlg, kmi->lv, t );                  return TRUE;
1242                km_file_export (dlg, kmi->lv, t);
1243              return TRUE;              return TRUE;
1244                            
1245          case ID_KEYMISC_EXPORT_PRIVKEY:          case ID_KEYMISC_EXPORT_PRIVKEY:
1246              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos( kmi->lv );
1247              if( idx == -1 ) {              if( idx == -1 ) {
1248                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );                  msg_box( dlg, _("Please select a key."), _("Key Manager"), MB_ERR );
1249                  return FALSE;                  return TRUE;
1250              }              }
1251              if( !km_check_for_seckey( kmi->lv, idx, NULL ) ) {              if( !km_check_for_seckey( kmi->lv, idx, NULL ) ) {
1252                  msg_box( dlg, _("There is no corresponding secret key for this key."),                  msg_box( dlg, _("There is no corresponding secret key for this key."),
1253                          _("Key Manager"), MB_ERR );                          _("Key Manager"), MB_ERR );
1254                  return FALSE;                  return TRUE;
1255              }              }
1256              if( listview_count_items( kmi->lv, 1 ) > 1 ) {              if( listview_count_items( kmi->lv, 1 ) > 1 ) {
1257                  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 );
1258                  return FALSE;                  return TRUE;
1259              }              }
1260              idx = msg_box( dlg,              idx = msg_box( dlg,
1261                            _("This operation will export your *SECRET* key!\n\n"                            _("This operation will export your *SECRET* key!\n\n"
# Line 1152  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1267  keymanager_dlg_proc (HWND dlg, UINT msg,
1267              if( idx == IDYES ) {              if( idx == IDYES ) {
1268                  idx = listview_get_curr_pos( kmi->lv );                  idx = listview_get_curr_pos( kmi->lv );
1269                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof (keyid)-8 );                  listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof (keyid)-8 );
1270                  strcat( keyid, ".sec.asc" );                  name = gen_export_filename (keyid, 1);
1271                  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);
1272                  if( t && !file_exist_check( t ) ) {                  if (t != NULL)          
1273                      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 );  
1274              }              }
1275              break;              break;
1276    
# Line 1187  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1296  keymanager_dlg_proc (HWND dlg, UINT msg,
1296                  break;                  break;
1297              listview_get_item_text (kmi->lv, idx, 1, keyid, sizeof (keyid)-1);              listview_get_item_text (kmi->lv, idx, 1, keyid, sizeof (keyid)-1);
1298              /* XXX: pub/crd = secret key does not work */              /* XXX: pub/crd = secret key does not work */
1299                memset (&k, 0, sizeof (k));
1300              k.is_protected = km_check_if_protected (kmi->lv, idx);              k.is_protected = km_check_if_protected (kmi->lv, idx);
1301              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1302              k.keyid = keyid;              k.keyid = keyid;
1303                k.is_v3 = km_key_is_v3 (kmi->lv, idx);
1304              k.flags = km_get_key_status (kmi->lv, idx);              k.flags = km_get_key_status (kmi->lv, idx);
1305              dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT, dlg,              dialog_box_param (glob_hinst, (LPCTSTR)IDD_WINPT_KEYEDIT, dlg,
1306                                keyedit_main_dlg_proc, (LPARAM)&k,                                keyedit_main_dlg_proc, (LPARAM)&k,
1307                                _("Key Edit"), IDS_KEYCTX_EDIT);                                _("Key Edit"), IDS_KEYCTX_EDIT);
1308                if (k.update)
1309                    update_key (kmi->lv,  idx, keyid, 1);
1310              break;              break;
1311                            
         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;  
               
1312          case ID_KEYMISC_COPY:          case ID_KEYMISC_COPY:
1313              km_index = listview_get_curr_pos( kmi->lv );              km_index = listview_get_curr_pos (kmi->lv);
1314              km_clip_export( dlg, kmi->lv );              km_clip_export (dlg, kmi->lv);
1315              break;              break;
1316                            
1317          case ID_KEYMISC_SELALL:          case ID_KEYMISC_SELALL:
# Line 1221  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1324  keymanager_dlg_proc (HWND dlg, UINT msg,
1324              break;              break;
1325                            
1326          case ID_KEYCTX_SETPREFKS:          case ID_KEYCTX_SETPREFKS:
1327              /* XXX: todo */              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM(keyid)-1);
1328                memset (&k, 0, sizeof (k));
1329                k.keyid = keyid;
1330                keyedit_set_pref_keyserver (&k, dlg);
1331              break;              break;
1332    
1333          case ID_KEYMISC_REFRESH_KEYS:          case ID_KEYMISC_REFRESH_KEYS:
1334              if (listview_count_items (kmi->lv, 1) == 0)              if (listview_count_items (kmi->lv, 1) == 0) {
             {  
1335                  msg_box (dlg, _("No key was selected, select all by default."), _("Key Manager"), MB_INFO);                  msg_box (dlg, _("No key was selected, select all by default."), _("Key Manager"), MB_INFO);
1336                  listview_select_all (kmi->lv);                  listview_select_all (kmi->lv);
1337              }              }
# Line 1259  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1364  keymanager_dlg_proc (HWND dlg, UINT msg,
1364              break;              break;
1365    
1366          case ID_KEYCTX_SENDMAIL:          case ID_KEYCTX_SENDMAIL:
1367              km_send_to_mail_recipient( kmi->lv, dlg );              km_send_to_mail_recipient (kmi->lv, dlg);
1368              break;              break;
1369    
1370          case ID_KEYCTX_KS_DEFAULT:          case ID_KEYCTX_KS_DEFAULT:
# Line 1268  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1373  keymanager_dlg_proc (HWND dlg, UINT msg,
1373              break;              break;
1374    
1375          case ID_KEYCTX_ADDKEY:          case ID_KEYCTX_ADDKEY:
1376              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1377              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid - 1 );              listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1378              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              memset (&k, 0, sizeof (k));
1379              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1380                k.is_protected = km_check_if_protected (kmi->lv, idx);
1381              k.keyid = keyid;              k.keyid = keyid;
1382              keyedit_add_subkey( &k, dlg, NULL );              keyedit_add_subkey (&k, dlg, NULL);
1383                if (k.update)
1384                    update_key (kmi->lv, idx, keyid, 1);
1385              break;              break;
1386    
1387          case ID_KEYCTX_ADDUID:          case ID_KEYCTX_ADDUID:
1388              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1389              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );              listview_get_item_text( kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1390              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              memset (&k, 0, sizeof (k));
1391              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1392                k.is_protected = km_check_if_protected (kmi->lv, idx);
1393              k.keyid = keyid;              k.keyid = keyid;
1394              keyedit_add_userid( &k, dlg, NULL );              keyedit_add_userid (&k, dlg, NULL);
1395                if (k.update)
1396                    update_key (kmi->lv, idx, keyid, 1);
1397              break;              break;
1398    
1399          case ID_KEYCTX_ADDREV:          case ID_KEYCTX_ADDREV:
1400              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1401              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );                    listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1402                memset (&k, 0, sizeof (k));
1403              k.keyid = keyid;              k.keyid = keyid;
1404              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.is_protected = km_check_if_protected (kmi->lv, idx);
1405              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );
1406              keyedit_add_revoker( &k, dlg );              keyedit_add_revoker (&k, dlg);
1407                if (k.update)
1408                    update_key (kmi->lv, idx, keyid, 1);
1409              break;              break;
1410    
1411          case ID_KEYCTX_ADDPHOTO:          case ID_KEYCTX_ADDPHOTO:
1412              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos (kmi->lv);
1413              listview_get_item_text( kmi->lv, idx, 1, keyid, sizeof keyid-1 );              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1414                memset (&k, 0, sizeof (k));
1415              k.keyid = keyid;              k.keyid = keyid;
1416              k.is_protected = km_check_if_protected( kmi->lv, idx );              k.is_protected = km_check_if_protected (kmi->lv, idx);
1417              k.key_pair = km_check_for_seckey( kmi->lv, idx, NULL );              k.key_pair = km_check_for_seckey (kmi->lv, idx, NULL);
1418              keyedit_add_photo( &k, dlg );              keyedit_add_photo (&k, dlg);
1419                if (k.update)
1420                    update_key (kmi->lv, idx, keyid, 1);
1421              break;              break;
1422    
1423          case ID_KEYCTX_KS_NL:          case ID_KEYCTX_KS_NL:
# Line 1335  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1452  keymanager_dlg_proc (HWND dlg, UINT msg,
1452    
1453          case ID_KEYCTX_FPR_COPY:          case ID_KEYCTX_FPR_COPY:
1454              idx = listview_get_curr_pos( kmi->lv );              idx = listview_get_curr_pos( kmi->lv );
1455              listview_get_item_text( kmi->lv, idx, 1, uid, sizeof uid-1 );              key = (gpgme_key_t) listview_get_item2 (kmi->lv, idx);        
1456              get_pubkey( uid, &pk );              if (key) {
1457              if( pk ) {                  const char * s = get_key_fpr (key);
1458                  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 );  
1459              }              }
1460              break;              break;
1461    
# Line 1375  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1491  keymanager_dlg_proc (HWND dlg, UINT msg,
1491    
1492          case ID_KEYCTX_MAXTRUST:          case ID_KEYCTX_MAXTRUST:
1493              idx = listview_get_curr_pos (kmi->lv);              idx = listview_get_curr_pos (kmi->lv);
1494              km_set_implicit_trust (dlg, kmi->lv, idx);              listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
1495                rc = km_set_implicit_trust (dlg, kmi->lv, idx);
1496                if (!rc)
1497                    update_key (kmi->lv, idx, keyid, 0);
1498              break;              break;
1499    
1500          case ID_KEYCTX_SETDEFKEY:          case ID_KEYCTX_SETDEFKEY:
1501              idx = listview_get_curr_pos (kmi->lv);              idx = listview_get_curr_pos (kmi->lv);
1502              if (km_check_key_status (kmi->lv, idx))              if (!km_check_key_status (kmi->lv, idx)) {
1503              {                  listview_get_item_text (kmi->lv, idx, 1, keyid, DIM (keyid)-1);
                 listview_get_item_text (kmi->lv, idx, 1, keyid, sizeof keyid -1);  
1504                  rc = set_gnupg_default_key (keyid);                  rc = set_gnupg_default_key (keyid);
1505                  if (rc)                  if (rc)
1506                      msg_box( dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR);                      msg_box( dlg, winpt_strerror (rc), _("Key Manager"), MB_ERR);
1507                  km_update_default_key_str (kmi->statbar, &km_def_pos);                  km_update_default_key_str (kmi->statbar);
1508              }              }
1509              break;              break;
1510    
1511            #if 0 /* XXX */
1512            case ID_GROUP_NEW:
1513                memset (&gcb, 0, sizeof (gcb));
1514                gcb.gc = gc;
1515                dialog_box_param (glob_hinst, (LPCSTR)IDD_WINPT_GROUP, glob_hwnd,
1516                                 group_manager_dlg_proc, (LPARAM)&gcb, _("New Group"),
1517                                 IDS_WINPT_GROUP);
1518                if( gcb.use_name )
1519                    treeview_add_item( GetDlgItem(dlg, IDC_KEYMISC_GROUP), NULL, gcb.name );
1520                return TRUE;
1521                            
1522          case ID_GROUP_PASTE:          case ID_GROUP_PASTE:
1523              km_groups_add (gc, kmi->lv, km_index);              km_groups_add (gc, kmi->lv, km_index);
# Line 1397  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1526  keymanager_dlg_proc (HWND dlg, UINT msg,
1526          case ID_GROUP_DELETE:          case ID_GROUP_DELETE:
1527              km_groups_del (gc);              km_groups_del (gc);
1528              break;              break;
1529          }                #endif
1530            }
1531            
1532          break;          break;
1533      }      }
1534            
1535      return FALSE;      return FALSE;
1536  } /* keymanager_dlg_proc */  }
1537    
1538    
1539    

Legend:
Removed from v.16  
changed lines
  Added in v.25

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26