/[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 207 by twoaday, Fri Apr 28 10:28:24 2006 UTC revision 217 by twoaday, Mon May 22 14:21:39 2006 UTC
# Line 81  struct km_info_s { Line 81  struct km_info_s {
81      listview_ctrl_t lv;      listview_ctrl_t lv;
82      int             lv_idx;      int             lv_idx;
83      int keylist_sortby;      int keylist_sortby;
84        int magic;
85    
86        unsigned int enable_groups:1;
87  };  };
88    
89  /* Toolbar button structure. */  /* Toolbar button structure. */
# Line 101  struct mybuttons myb[] = { Line 104  struct mybuttons myb[] = {
104    
105  static void km_gui_import (struct km_info_s *kmi, int cmd_id, void *param);  static void km_gui_import (struct km_info_s *kmi, int cmd_id, void *param);
106    
107    
108  /* Subclass the keylist listview control to allow extended commands. */  /* Subclass the keylist listview control to allow extended commands. */
109  static BOOL CALLBACK  static BOOL CALLBACK
110  keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)  keylist_subclass_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
# Line 399  do_resize_window (HWND dlg, struct km_in Line 403  do_resize_window (HWND dlg, struct km_in
403                  kmi->ypos_sep - rclient.top, bRepaint);                  kmi->ypos_sep - rclient.top, bRepaint);
404      rclient.top = kmi->ypos_sep + 5 + 8;      rclient.top = kmi->ypos_sep + 5 + 8;
405    
406  #if 0 /* Disable the code until we support groups again. */      if (kmi->enable_groups != 0) {
407      /* Place the group text and the group box below the separator */          /* Place the group text and the group box below the separator */
408      h = GetDlgItem (dlg, IDC_KEYMISC_GTEXT);          h = GetDlgItem (dlg, IDC_KEYMISC_GTEXT);
409      MoveWindow (h, rclient.left, rclient.top, 100, 14, bRepaint);          MoveWindow (h, rclient.left, rclient.top, 100, 14, bRepaint);
410      rclient.top += 18;          rclient.top += 18;
411    
412      h = GetDlgItem (dlg, IDC_KEYMISC_GROUP);          h = GetDlgItem (dlg, IDC_KEYMISC_GROUP);
413      MoveWindow (h, rclient.left, rclient.top, rclient.right - rclient.left,          MoveWindow (h, rclient.left, rclient.top,
414                  (rclient.bottom < rclient.top) ?                      rclient.right - rclient.left,
415                  0 : rclient.bottom - rclient.top, bRepaint);                      (rclient.bottom < rclient.top) ?
416  #endif                      0 : rclient.bottom - rclient.top, bRepaint);
417        }
418            
419      /* Repaint the whole thing */      /* Repaint the whole thing */
420      InvalidateRect (dlg, NULL, TRUE);      InvalidateRect (dlg, NULL, TRUE);
# Line 683  update_ui_items (HWND hwnd, listview_ctr Line 688  update_ui_items (HWND hwnd, listview_ctr
688      }      }
689    
690      /* Disable all secret-key functions when no secret key is available. */      /* Disable all secret-key functions when no secret key is available. */
691      {      if (!secret_key_available ()) {
692          gpg_keycache_t sec = keycache_get_ctx (0);          enable_button (tb_hwnd, ID_KEYMISC_SIGN, FALSE);
693          if (gpg_keycache_get_size (sec) == 0) {          set_menu_state (hmenu, ID_KEYMISC_SIGN, MF_GRAYED);
             enable_button (tb_hwnd, ID_KEYMISC_SIGN, FALSE);  
             set_menu_state (hmenu, ID_KEYMISC_SIGN, MF_GRAYED);  
         }  
694      }      }
695  }  }
696    
# Line 1060  refresh_keylist (struct km_info_s *kmi) Line 1062  refresh_keylist (struct km_info_s *kmi)
1062                  keylist_upd_key (kmi->lv, pos, ctx, ctx->key);                  keylist_upd_key (kmi->lv, pos, ctx, ctx->key);
1063          }          }
1064      }      }
1065      keylist_sort (kmi->lv, KEY_SORT_USERID);      keylist_sort (kmi->lv, kmi->keylist_sortby);
1066      update_status_bar (kmi->statbar, kmi->lv);      update_status_bar (kmi->statbar, kmi->lv);
1067      keyring_check_last_access ();      keyring_check_last_access ();
1068  }  }
1069    
1070    
1071    /* Reload the key cache. */
1072    static void
1073    keycache_reload (HWND dlg)
1074    {      
1075        refresh_cache_s rcs;
1076    
1077        memset (&rcs, 0, sizeof rcs);
1078        rcs.kr_reload = rcs.kr_update = 1;
1079        rcs.tr_update = 0;
1080        DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, dlg,                                        
1081                        keycache_dlg_proc, (LPARAM)&rcs);
1082    }
1083    
1084    
1085    /* Check if the secret keyring contains at least one
1086       key with ultimate trust.
1087       Return value: 0 on success. */
1088    int
1089    check_ultimate_trusted_key (gpg_keycache_t _sec)
1090    {
1091        struct keycache_s *n;
1092        int nkeys = 0;
1093    
1094        for (n = _sec->item; n; n = n->next) {
1095            if (n->pubpart &&
1096                n->pubpart->key->owner_trust == GPGME_VALIDITY_ULTIMATE)
1097                return 0;
1098            nkeys++;
1099        }
1100    
1101        /* if we do not have any secret keys, it does not make sense
1102           to return an error. */
1103        if (nkeys == 0)
1104            return 0;
1105        return -1;
1106    }
1107    
1108    
1109  static void  static void
1110  reload_keylist (struct km_info_s *kmi)  reload_keylist (struct km_info_s *kmi)
1111  {  {
1112        gpg_keycache_t c;
1113    
1114        c = keycache_get_ctx (1);
1115      keycache_reload (kmi->dlg);      keycache_reload (kmi->dlg);
1116      keylist_reload (kmi->lv, keycache_get_ctx (1),      keylist_reload (kmi->lv, c, KEYLIST_LIST, kmi->keylist_sortby);
                     KEYLIST_LIST, KEY_SORT_USERID);  
1117      update_status_bar (kmi->statbar, kmi->lv);      update_status_bar (kmi->statbar, kmi->lv);
1118      keyring_check_last_access ();      keyring_check_last_access ();
1119  }  }
# Line 1089  reload_keycache (struct km_info_s *kmi) Line 1131  reload_keycache (struct km_info_s *kmi)
1131      DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, kmi->dlg,      DialogBoxParam (glob_hinst, (LPCSTR)IDD_WINPT_KEYCACHE, kmi->dlg,
1132                      keycache_dlg_proc, (LPARAM)&rcs);                      keycache_dlg_proc, (LPARAM)&rcs);
1133      c = keycache_get_ctx (1);      c = keycache_get_ctx (1);
1134      if (!c)      keylist_reload (kmi->lv, c, KEYLIST_LIST, kmi->keylist_sortby);
         BUG (0);  
     keylist_reload (kmi->lv, c, KEYLIST_LIST, KEY_SORT_USERID);  
1135      update_status_bar (kmi->statbar, kmi->lv);      update_status_bar (kmi->statbar, kmi->lv);
1136      SetForegroundWindow (kmi->dlg);      SetForegroundWindow (kmi->dlg);
1137  }  }
# Line 1129  km_gui_import (struct km_info_s *kmi, in Line 1169  km_gui_import (struct km_info_s *kmi, in
1169          reload_keylist (kmi);          reload_keylist (kmi);
1170    
1171      SetForegroundWindow (kmi->dlg);      SetForegroundWindow (kmi->dlg);
     center_window (kmi->dlg, NULL);  
1172  }  }
1173    
1174    
# Line 1185  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1224  keymanager_dlg_proc (HWND dlg, UINT msg,
1224          Header_SetImageList(ListView_GetHeader (kl), glob_imagelist);          Header_SetImageList(ListView_GetHeader (kl), glob_imagelist);
1225          kmi->lv = keylist_load (GetDlgItem (dlg, IDC_KEYMISC_KEYLIST), c,          kmi->lv = keylist_load (GetDlgItem (dlg, IDC_KEYMISC_KEYLIST), c,
1226                                  NULL, KEYLIST_LIST, kmi->keylist_sortby);                                  NULL, KEYLIST_LIST, kmi->keylist_sortby);
1227          if (check_ultimate_trusted_key ()) {          if (check_ultimate_trusted_key (keycache_get_ctx (0))) {
1228              msg_box (dlg, _("No ultimately trusted key found.\n"              msg_box (dlg, _("No ultimately trusted key found.\n"
1229                              "Please set at least one secret key to ultimate trust."),                              "Please set at least one secret key to ultimate trust."),
1230                              _("Key Manager"), MB_WARN);                              _("Key Manager"), MB_WARN);
# Line 1214  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1253  keymanager_dlg_proc (HWND dlg, UINT msg,
1253          keylist_sort (kmi->lv, kmi->keylist_sortby);          keylist_sort (kmi->lv, kmi->keylist_sortby);
1254    
1255          SetDlgItemText (dlg, IDC_KEYMISC_GTEXT, _("Groups"));          SetDlgItemText (dlg, IDC_KEYMISC_GTEXT, _("Groups"));
1256            SetDlgItemText (dlg, ID_GROUP_SHOW, _("&Show"));
1257            SetDlgItemText (dlg, ID_GROUP_NEW, _("&New..."));
1258          SetClassLong (dlg, GCL_HICON, (LONG)LoadIcon (glob_hinst,          SetClassLong (dlg, GCL_HICON, (LONG)LoadIcon (glob_hinst,
1259                        (LPCTSTR)IDI_WINPT));                        (LPCTSTR)IDI_WINPT));
1260          SetForegroundWindow (dlg);          SetForegroundWindow (dlg);
1261          force_foreground_window (dlg, 1000);          kmi->magic = SetTimer (dlg, 1, 1000, NULL);
1262          return TRUE;          return TRUE;
1263    
1264        case WM_TIMER:
1265            KillTimer (dlg, kmi->magic);
1266            SetForegroundWindow (dlg);
1267            break;
1268                    
1269      case WM_DESTROY:      case WM_DESTROY:
1270          save_column_info (kmi);          save_column_info (kmi);
# Line 1235  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1281  keymanager_dlg_proc (HWND dlg, UINT msg,
1281          /* XXX: store window size. */          /* XXX: store window size. */
1282                    
1283          /* Remove runtime information. This should be the last action taken here. */          /* Remove runtime information. This should be the last action taken here. */
1284          delete kmi; kmi = NULL;          delete kmi;
1285            kmi = NULL;
1286          SetWindowLong (dlg, GWL_USERDATA, 0);          SetWindowLong (dlg, GWL_USERDATA, 0);
1287          return FALSE;          return FALSE;
1288    
     case WM_SHOWWINDOW:  
         break;  
   
1289      case WM_MOVE:      case WM_MOVE:
1290          RECT r;          RECT r;
1291          GetWindowRect (dlg, &r);          GetWindowRect (dlg, &r);
# Line 1402  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1446  keymanager_dlg_proc (HWND dlg, UINT msg,
1446                      set_menu_state (popup, ID_KEYCTX_PASTE, MF_DISABLED|MF_GRAYED);                      set_menu_state (popup, ID_KEYCTX_PASTE, MF_DISABLED|MF_GRAYED);
1447                  if (mapi_init ())                  if (mapi_init ())
1448                      set_menu_state (popup, ID_KEYCTX_SENDMAIL, MF_DISABLED|MF_GRAYED);                      set_menu_state (popup, ID_KEYCTX_SENDMAIL, MF_DISABLED|MF_GRAYED);
1449                    if (!secret_key_available ())
1450                        set_menu_state (popup, ID_KEYCTX_SIGN, MF_DISABLED|MF_GRAYED);
1451    
1452                  /* Override 'Default Keyserver' with the actual name. */                  /* Override 'Default Keyserver' with the actual name. */
1453                  host = kserver_get_hostname (0, -1, &port);                  host = kserver_get_hostname (0, -1, &port);
# Line 1577  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1623  keymanager_dlg_proc (HWND dlg, UINT msg,
1623                                _("Key Signature List"), IDS_WINPT_KEYSIG);                                _("Key Signature List"), IDS_WINPT_KEYSIG);
1624              if (k.update)              if (k.update)
1625                  update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 0);                  update_key (kmi->lv, kmi->lv_idx, k.tmp_keyid, 0);
1626                if (updated_keys_avail ())
1627                    refresh_keylist (kmi);
1628              return TRUE;              return TRUE;
1629                            
1630          case ID_KEYMISC_PROPS:                case ID_KEYMISC_PROPS:      
# Line 1792  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1840  keymanager_dlg_proc (HWND dlg, UINT msg,
1840                  listview_select_all (kmi->lv);                  listview_select_all (kmi->lv);
1841              }              }
1842              km_refresh_from_keyserver (kmi->lv, dlg);              km_refresh_from_keyserver (kmi->lv, dlg);
1843                msg_box (dlg, _("Keyserver refresh finished."),
1844                         _("Key Manager"), MB_OK);
1845              break;              break;
1846                                                    
1847          /** Context menu **/          /** Context menu **/
# Line 1872  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1922  keymanager_dlg_proc (HWND dlg, UINT msg,
1922    
1923          case ID_KEYCTX_KEYID_COPY:          case ID_KEYCTX_KEYID_COPY:
1924              key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL);              key = km_get_key_ptr (kmi->lv, kmi->lv_idx, NULL);
1925              set_clip_text (NULL, key->subkeys->keyid+8,              memset (type, 0, sizeof (type));
1926                             strlen (key->subkeys->keyid+8));              type[0] = '0'; type[1] = 'x';
1927                memcpy (type+2, key->subkeys->keyid+8, 8);
1928                set_clip_text (NULL, type, strlen (type));
1929              break;              break;
1930    
1931          case ID_KEYCTX_FPR_COPY:          case ID_KEYCTX_FPR_COPY:
# Line 1942  keymanager_dlg_proc (HWND dlg, UINT msg, Line 1994  keymanager_dlg_proc (HWND dlg, UINT msg,
1994          case ID_GROUP_NEW:          case ID_GROUP_NEW:
1995          case ID_GROUP_PASTE:          case ID_GROUP_PASTE:
1996          case ID_GROUP_DELETE:          case ID_GROUP_DELETE:
1997            case ID_GROUP_SHOW:
1998              /* XXX: Implement group manager. */              /* XXX: Implement group manager. */
1999              return TRUE;              return TRUE;
2000    
2001                /*
2002          case IDCANCEL:          case IDCANCEL:
2003              EndDialog (dlg, TRUE);              EndDialog (dlg, TRUE);
2004              return TRUE;              return TRUE;
2005                */
2006          }          }
2007                    
2008          break;          break;

Legend:
Removed from v.207  
changed lines
  Added in v.217

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26