From: Tom Yu Date: Mon, 1 Oct 2007 23:14:34 +0000 (+0000) Subject: pull up r19983 from trunk X-Git-Tag: krb5-1.6.3-beta2~35 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=a4c6d36dd624259fb1a919dd79f51d1962a4a9f1;p=krb5.git pull up r19983 from trunk r19983@cathode-dark-space: jaltman | 2007-09-26 23:42:20 -0400 ticket: 5724 Add a "Set default" sub menu to the Network Identity Manager notification icon context menu. The submenu will display a list of identities that the user can select as the default identity. Each identity that is displayed in the sub menu will be colored the same way it is colored in the basic view to provide a hint as to the state of the credentials belonging to the identity. ticket: 5724 version_fixed: 1.6.3 git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-6@20053 dc483132-0cff-0310-8789-dd5450dbe970 --- diff --git a/src/windows/identity/ui/credfuncs.c b/src/windows/identity/ui/credfuncs.c index b90d9a60d..c8b6727b8 100644 --- a/src/windows/identity/ui/credfuncs.c +++ b/src/windows/identity/ui/credfuncs.c @@ -555,6 +555,11 @@ void khm_cred_set_default(void) khui_context_release(&ctx); } +void khm_cred_set_default_identity(khm_handle identity) +{ + kcdb_identity_set_default(identity); +} + void khm_cred_destroy_creds(khm_boolean sync, khm_boolean quiet) { khui_action_context * pctx; diff --git a/src/windows/identity/ui/credfuncs.h b/src/windows/identity/ui/credfuncs.h index 0a4e2531a..9bc289089 100644 --- a/src/windows/identity/ui/credfuncs.h +++ b/src/windows/identity/ui/credfuncs.h @@ -59,6 +59,8 @@ khm_cred_obtain_new_creds_for_ident(khm_handle ident, wchar_t * title); void khm_cred_set_default(void); +void khm_cred_set_default_identity(khm_handle identity); + void khm_cred_change_password(wchar_t * window_title); diff --git a/src/windows/identity/ui/credwnd.c b/src/windows/identity/ui/credwnd.c index 2f36f330e..1148a9b77 100644 --- a/src/windows/identity/ui/credwnd.c +++ b/src/windows/identity/ui/credwnd.c @@ -5714,6 +5714,136 @@ khm_credwnd_proc(HWND hwnd, return DefWindowProc(hwnd,uMsg,wParam,lParam); } +void +khm_measure_identity_menu_item(HWND hwnd, LPMEASUREITEMSTRUCT lpm, khui_action * act) +{ + wchar_t * cap; + HDC hdc; + SIZE sz; + size_t len; + HFONT hf_old; + + sz.cx = MENU_SIZE_ICON_X; + sz.cy = MENU_SIZE_ICON_Y; + + cap = act->caption; +#ifdef DEBUG + assert(cap); +#endif + hdc = GetDC(khm_hwnd_main); +#ifdef DEBUG + assert(hdc); +#endif + + StringCchLength(cap, KHUI_MAXCCH_NAME, &len); + + hf_old = SelectFont(hdc, (HFONT) GetStockObject(DEFAULT_GUI_FONT)); + + GetTextExtentPoint32(hdc, cap, (int) len, &sz); + + SelectFont(hdc, hf_old); + + ReleaseDC(khm_hwnd_main, hdc); + + lpm->itemWidth = sz.cx + sz.cy * 3 / 2 + GetSystemMetrics(SM_CXSMICON); + lpm->itemHeight = sz.cy * 3 / 2; +} + +void +khm_draw_identity_menu_item(HWND hwnd, LPDRAWITEMSTRUCT lpd, khui_action * act) +{ + khui_credwnd_tbl * tbl; + khm_handle ident; + khm_size i; + size_t count = 0; + COLORREF old_clr; + wchar_t * cap; + size_t len; + int margin; + SIZE sz; + HBRUSH hbr; + COLORREF text_clr; + khm_int32 idflags; + khm_int32 expflags; + + tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0); + if (tbl == NULL) + return; + + ident = act->data; + cap = act->caption; +#ifdef DEBUG + assert(ident != NULL); + assert(cap != NULL); +#endif + + for (i=0; i < tbl->n_idents; i++) { + if (kcdb_identity_is_equal(tbl->idents[i].ident, ident)) { + count = tbl->idents[i].credcount; + break; + } + } + + expflags = cw_get_buf_exp_flags(tbl, ident); + + text_clr = tbl->cr_hdr_normal; + + if (lpd->itemState & (ODS_HOTLIGHT | ODS_SELECTED)) { + hbr = GetSysColorBrush(COLOR_HIGHLIGHT); + text_clr = GetSysColor(COLOR_HIGHLIGHTTEXT); + } else if (count == 0) { + hbr = tbl->hb_hdr_bg; + } else if (expflags == CW_EXPSTATE_EXPIRED) { + hbr = tbl->hb_hdr_bg_exp; + } else if (expflags == CW_EXPSTATE_WARN) { + hbr = tbl->hb_hdr_bg_warn; + } else if (expflags == CW_EXPSTATE_CRITICAL) { + hbr = tbl->hb_hdr_bg_crit; + } else { + hbr = tbl->hb_hdr_bg_cred; + } + + FillRect(lpd->hDC, &lpd->rcItem, hbr); + + SetBkMode(lpd->hDC, TRANSPARENT); + + old_clr = SetTextColor(lpd->hDC, text_clr); + + StringCchLength(cap, KHUI_MAXCCH_NAME, &len); + + GetTextExtentPoint32(lpd->hDC, cap, (int) len, &sz); + margin = sz.cy / 4; + + TextOut(lpd->hDC, lpd->rcItem.left + margin * 2 + GetSystemMetrics(SM_CXSMICON), + lpd->rcItem.top + margin, cap, (int) len); + + SetTextColor(lpd->hDC, old_clr); + + kcdb_identity_get_flags(ident, &idflags); + + if (idflags & KCDB_IDENT_FLAG_DEFAULT) { + HICON hic; + + hic = (HICON) LoadImage(khm_hInstance, MAKEINTRESOURCE(IDI_ENABLED), + IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + LR_DEFAULTCOLOR); + if (hic) { + DrawIconEx(lpd->hDC, + lpd->rcItem.left + margin, + lpd->rcItem.top + margin, + hic, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + 0, + hbr, + DI_NORMAL); + DestroyIcon(hic); + } + } +} + void khm_register_credwnd_class(void) { WNDCLASSEX wcx; diff --git a/src/windows/identity/ui/credwnd.h b/src/windows/identity/ui/credwnd.h index 6849f9f02..7f9071014 100644 --- a/src/windows/identity/ui/credwnd.h +++ b/src/windows/identity/ui/credwnd.h @@ -299,4 +299,8 @@ void khm_get_cw_element_font(HDC hdc, wchar_t * name, BOOL use_default, void khm_set_cw_element_font(wchar_t * name, LOGFONT * pfont); +void khm_draw_identity_menu_item(HWND hwnd, LPDRAWITEMSTRUCT lpd, khui_action * act); + +void khm_measure_identity_menu_item(HWND hwnd, LPMEASUREITEMSTRUCT lpm, khui_action * act); + #endif diff --git a/src/windows/identity/ui/images/enabled.ico b/src/windows/identity/ui/images/enabled.ico index 22821a8b7..fc83ad858 100644 Binary files a/src/windows/identity/ui/images/enabled.ico and b/src/windows/identity/ui/images/enabled.ico differ diff --git a/src/windows/identity/ui/lang/en_us/khapp.rc b/src/windows/identity/ui/lang/en_us/khapp.rc index 02fa984c3..4dc9f733b 100644 --- a/src/windows/identity/ui/lang/en_us/khapp.rc +++ b/src/windows/identity/ui/lang/en_us/khapp.rc @@ -714,6 +714,7 @@ BEGIN IDS_WTPOST_PASSWORD " - Changing password" IDS_CTX_PROC_PASSWORD "Changing password for %1!s!" IDS_NC_PWD_FAILED_TITLE "Failed to change password" + IDS_MENU_SETDEF "Set default" IDS_PACTION_NEXT "Next alert" IDS_ERR_TITLE_NO_IDENTPRO "Cannot proceed without identity provider" END @@ -837,10 +838,12 @@ BEGIN IDS_CW_TYPEF "(%s)" IDS_CW_EXPIREF "Expires in %s" IDS_CW_EXPIRED "(Expired)" + IDS_IDACTIONT_SETDEF "Set %s as default identity" END STRINGTABLE BEGIN + IDS_IDACTION_SETDEF "%s" IDS_ACTION_VIEW_ALL_IDS "All identities" END @@ -862,3 +865,4 @@ END + diff --git a/src/windows/identity/ui/mainmenu.c b/src/windows/identity/ui/mainmenu.c index 7ae6e33f1..8645dc7bc 100644 --- a/src/windows/identity/ui/mainmenu.c +++ b/src/windows/identity/ui/mainmenu.c @@ -139,19 +139,27 @@ void add_action_to_menu(HMENU hm, khui_action * act, } else { khui_menu_def * def; - khm_get_action_caption(act->cmd, buf, sizeof(buf)); + if (act->type == KHUI_ACTIONTYPE_IDENTITY) { + mii.fMask = MIIM_FTYPE | MIIM_ID | MIIM_DATA; + mii.fType = MFT_OWNERDRAW; - if(khui_get_cmd_accel_string(act->cmd, accel, - ARRAYLENGTH(accel))) { - StringCbCat(buf, sizeof(buf), L"\t"); - StringCbCat(buf, sizeof(buf), accel); - } + mii.dwTypeData = 0; + mii.dwItemData = 0; + } else { + khm_get_action_caption(act->cmd, buf, sizeof(buf)); - mii.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID; - mii.fType = MFT_STRING; + if(khui_get_cmd_accel_string(act->cmd, accel, + ARRAYLENGTH(accel))) { + StringCbCat(buf, sizeof(buf), L"\t"); + StringCbCat(buf, sizeof(buf), accel); + } - mii.dwTypeData = buf; - mii.cch = (int) wcslen(buf); + mii.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID; + mii.fType = MFT_STRING; + + mii.dwTypeData = buf; + mii.cch = (int) wcslen(buf); + } mii.wID = act->cmd; @@ -391,48 +399,61 @@ LRESULT khm_menu_activate(int menu_id) { } LRESULT khm_menu_measure_item(WPARAM wParam, LPARAM lParam) { - /* all menu icons have a fixed size */ LPMEASUREITEMSTRUCT lpm = (LPMEASUREITEMSTRUCT) lParam; - lpm->itemWidth = MENU_SIZE_ICON_X; - lpm->itemHeight = MENU_SIZE_ICON_Y; + khui_action * act; + + act = khui_find_action(lpm->itemID); + if (act && act->type == KHUI_ACTIONTYPE_IDENTITY) { + khm_measure_identity_menu_item(khm_hwnd_main_cred, lpm, act); + } else { + lpm->itemWidth = MENU_SIZE_ICON_X; + lpm->itemHeight = MENU_SIZE_ICON_Y; + } return TRUE; } LRESULT khm_menu_draw_item(WPARAM wParam, LPARAM lParam) { LPDRAWITEMSTRUCT lpd; khui_action * act; - int resid; - int iidx; - UINT style; lpd = (LPDRAWITEMSTRUCT) lParam; act = khui_find_action(lpd->itemID); - resid = 0; - if((lpd->itemState & ODS_DISABLED) || (lpd->itemState & ODS_GRAYED)) { - resid = act->ib_icon_dis; - } - if(!resid) - resid = act->ib_icon; + if (act && act->type == KHUI_ACTIONTYPE_IDENTITY) { - if(!resid) /* nothing to draw */ - return TRUE; + khm_draw_identity_menu_item(khm_hwnd_main_cred, lpd, act); + + } else { + int resid; + int iidx; + UINT style; + + resid = 0; + if((lpd->itemState & ODS_DISABLED) || (lpd->itemState & ODS_GRAYED)) { + resid = act->ib_icon_dis; + } + if(!resid) + resid = act->ib_icon; + + if(!resid) /* nothing to draw */ + return TRUE; - iidx = khui_get_icon_index(resid); - if(iidx == -1) - return TRUE; + iidx = khui_get_icon_index(resid); + if(iidx == -1) + return TRUE; - style = ILD_TRANSPARENT; - if(lpd->itemState & ODS_HOTLIGHT || lpd->itemState & ODS_SELECTED) { - style |= ILD_SELECTED; - } + style = ILD_TRANSPARENT; + if(lpd->itemState & ODS_HOTLIGHT || lpd->itemState & ODS_SELECTED) { + style |= ILD_SELECTED; + } - khui_ilist_draw(il_icon, - iidx, - lpd->hDC, - lpd->rcItem.left, lpd->rcItem.top, style); + khui_ilist_draw(il_icon, + iidx, + lpd->hDC, + lpd->rcItem.left, lpd->rcItem.top, style); + } return TRUE; } @@ -636,6 +657,7 @@ struct identity_action_map { khm_int32 renew_cmd; khm_int32 destroy_cmd; khm_int32 new_cmd; + khm_int32 setdef_cmd; int refreshcycle; }; @@ -727,6 +749,19 @@ create_identity_cmd_map(khm_handle ident) { khui_action_create(actionname, caption, tooltip, NULL, KHUI_ACTIONTYPE_TRIGGER, NULL); + /* set default */ + GETFORMAT(IDS_IDACTIONT_SETDEF); + EXPFORMAT(tooltip, idname); + + GETFORMAT(IDS_IDACTION_SETDEF); + EXPFORMAT(caption, idname); + + StringCbPrintf(actionname, sizeof(actionname), L"E:%s", idname); + + actmap->setdef_cmd = + khui_action_create(actionname, caption, tooltip, ident, + KHUI_ACTIONTYPE_IDENTITY, NULL); + actmap->refreshcycle = idcmd_refreshcycle; #undef GETFORMAT @@ -749,9 +784,13 @@ purge_identity_cmd_map(void) { khui_action_delete(id_action_map[i].renew_cmd); khui_action_delete(id_action_map[i].destroy_cmd); + khui_action_delete(id_action_map[i].new_cmd); + khui_action_delete(id_action_map[i].setdef_cmd); id_action_map[i].renew_cmd = 0; id_action_map[i].destroy_cmd = 0; + id_action_map[i].new_cmd = 0; + id_action_map[i].setdef_cmd = 0; } } } @@ -798,6 +837,18 @@ khm_get_identity_destroy_action(khm_handle ident) { return 0; } +khm_int32 +khm_get_identity_setdef_action(khm_handle ident) { + struct identity_action_map * map; + + map = get_identity_cmd_map(ident); + + if (map) + return map->setdef_cmd; + else + return 0; +} + khm_int32 khm_get_identity_new_creds_action(khm_handle ident) { struct identity_action_map * map; @@ -814,6 +865,7 @@ void khm_refresh_identity_menus(void) { khui_menu_def * renew_def = NULL; khui_menu_def * dest_def = NULL; + khui_menu_def * setdef_def = NULL; wchar_t * idlist = NULL; wchar_t * idname = NULL; khm_size cb = 0; @@ -823,10 +875,14 @@ khm_refresh_identity_menus(void) { khm_handle csp_cw = NULL; khm_int32 idflags; khm_int32 def_sticky = 0; + khm_int32 all_identities = 0; khm_boolean sticky_done = FALSE; + khm_boolean added_dest = FALSE; + khm_boolean added_setdef = FALSE; if (KHM_SUCCEEDED(khc_open_space(NULL, L"CredWindow", 0, &csp_cw))) { khc_read_int32(csp_cw, L"DefaultSticky", &def_sticky); + khc_read_int32(csp_cw, L"ViewAllIdents", &all_identities); khc_close_space(csp_cw); csp_cw = NULL; } @@ -843,7 +899,7 @@ khm_refresh_identity_menus(void) { idlist = NULL; cb = 0; - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_ACTIVE | KCDB_IDENT_FLAG_EMPTY, + rv = kcdb_identity_enum(KCDB_IDENT_FLAG_ACTIVE, KCDB_IDENT_FLAG_ACTIVE, NULL, &cb, @@ -856,7 +912,7 @@ khm_refresh_identity_menus(void) { assert(idlist); #endif - rv = kcdb_identity_enum(KCDB_IDENT_FLAG_ACTIVE | KCDB_IDENT_FLAG_EMPTY, + rv = kcdb_identity_enum(KCDB_IDENT_FLAG_ACTIVE, KCDB_IDENT_FLAG_ACTIVE, idlist, &cb, @@ -874,23 +930,13 @@ khm_refresh_identity_menus(void) { } while(TRUE); - if (idlist != NULL && n_idents > 0) { - khui_enable_action(KHUI_MENU_RENEW_CRED, TRUE); - khui_enable_action(KHUI_MENU_DESTROY_CRED, TRUE); - khui_enable_action(KHUI_ACTION_RENEW_CRED, TRUE); - khui_enable_action(KHUI_ACTION_DESTROY_CRED, TRUE); - } else { - khui_enable_action(KHUI_MENU_RENEW_CRED, FALSE); - khui_enable_action(KHUI_MENU_DESTROY_CRED, FALSE); - khui_enable_action(KHUI_ACTION_RENEW_CRED, FALSE); - khui_enable_action(KHUI_ACTION_DESTROY_CRED, FALSE); - } - renew_def = khui_find_menu(KHUI_MENU_RENEW_CRED); dest_def = khui_find_menu(KHUI_MENU_DESTROY_CRED); + setdef_def = khui_find_menu(KHUI_MENU_SETDEF); #ifdef DEBUG assert(renew_def); assert(dest_def); + assert(setdef_def); #endif t = khui_menu_get_size(renew_def); @@ -905,6 +951,12 @@ khm_refresh_identity_menus(void) { t--; } + t = khui_menu_get_size(setdef_def); + while(t) { + khui_menu_remove_action(setdef_def, 0); + t--; + } + if (idlist != NULL && n_idents > 1) { khui_menu_insert_action(renew_def, 0, KHUI_ACTION_RENEW_ALL, 0); khui_menu_insert_action(renew_def, 1, KHUI_MENU_SEP, 0); @@ -924,14 +976,6 @@ khm_refresh_identity_menus(void) { continue; } - khui_menu_insert_action(renew_def, 1000, - khm_get_identity_renew_action(identity), - 0); - - khui_menu_insert_action(dest_def, 1000, - khm_get_identity_destroy_action(identity), - 0); - idflags = 0; kcdb_identity_get_flags(identity, &idflags); @@ -939,12 +983,56 @@ khm_refresh_identity_menus(void) { kcdb_identity_set_flags(identity, KCDB_IDENT_FLAG_STICKY, KCDB_IDENT_FLAG_STICKY); + idflags |= KCDB_IDENT_FLAG_STICKY; sticky_done = TRUE; } + + if (!(idflags & KCDB_IDENT_FLAG_EMPTY)) { + khui_menu_insert_action(renew_def, 1000, + khm_get_identity_renew_action(identity), + 0); + + khui_menu_insert_action(dest_def, 1000, + khm_get_identity_destroy_action(identity), + 0); + added_dest = TRUE; + } + + if (all_identities || + !(idflags & KCDB_IDENT_FLAG_EMPTY) || + (idflags & KCDB_IDENT_FLAG_STICKY)) { + + khui_menu_insert_action(setdef_def, 1000, + khm_get_identity_setdef_action(identity), + 0); + added_setdef = TRUE; + } + + kcdb_identity_release(identity); } - if (idlist) + if (idlist) { PFREE(idlist); + idlist = NULL; + } + + if (added_dest) { + khui_enable_action(KHUI_MENU_RENEW_CRED, TRUE); + khui_enable_action(KHUI_MENU_DESTROY_CRED, TRUE); + khui_enable_action(KHUI_ACTION_RENEW_CRED, TRUE); + khui_enable_action(KHUI_ACTION_DESTROY_CRED, TRUE); + } else { + khui_enable_action(KHUI_MENU_RENEW_CRED, FALSE); + khui_enable_action(KHUI_MENU_DESTROY_CRED, FALSE); + khui_enable_action(KHUI_ACTION_RENEW_CRED, FALSE); + khui_enable_action(KHUI_ACTION_DESTROY_CRED, FALSE); + } + + if (added_setdef) { + khui_enable_action(KHUI_MENU_SETDEF, TRUE); + } else { + khui_enable_action(KHUI_MENU_SETDEF, FALSE); + } purge_identity_cmd_map(); @@ -1002,6 +1090,12 @@ khm_check_identity_menu_action(khm_int32 act_id) { NULL); return TRUE; } + + if (id_action_map[i].setdef_cmd == act_id) { + khm_cred_set_default_identity(id_action_map[i].identity); + + return TRUE; + } } } diff --git a/src/windows/identity/ui/resource.h b/src/windows/identity/ui/resource.h index 1a75a3cb5..19cd49de6 100644 --- a/src/windows/identity/ui/resource.h +++ b/src/windows/identity/ui/resource.h @@ -214,6 +214,7 @@ #define IDS_WTPOST_PASSWORD 218 #define IDS_CTX_PROC_PASSWORD 219 #define IDS_NC_PWD_FAILED_TITLE 220 +#define IDS_MENU_SETDEF 221 #define IDS_PACTION_NEXT 222 #define IDS_ERR_TITLE_NO_IDENTPRO 223 #define IDS_ERR_MSG_NO_IDENTPRO 224 @@ -311,6 +312,8 @@ #define IDS_CW_TYPEF 316 #define IDS_CW_EXPIREF 317 #define IDS_CW_EXPIRED 318 +#define IDS_IDACTIONT_SETDEF 319 +#define IDS_IDACTION_SETDEF 320 #define IDS_ACTION_VIEW_ALL_IDS 321 #define IDC_NC_CREDTEXT_LABEL 1009 #define IDC_NC_CREDTEXT 1012 diff --git a/src/windows/identity/uilib/action.c b/src/windows/identity/uilib/action.c index 700c13b72..a47683171 100644 --- a/src/windows/identity/uilib/action.c +++ b/src/windows/identity/uilib/action.c @@ -162,6 +162,8 @@ khui_action_ref khui_menu_ico_ctx_min[] = { MENU_ACTION(KHUI_ACTION_IMPORT), MENU_SUBMENU(KHUI_MENU_DESTROY_CRED), MENU_SEP(), + MENU_SUBMENU(KHUI_MENU_SETDEF), + MENU_SEP(), MENU_ACTION(KHUI_ACTION_PASSWD_ID), MENU_SEP(), MENU_ACTION(KHUI_ACTION_HELP_CTX), @@ -179,6 +181,8 @@ khui_action_ref khui_menu_ico_ctx_normal[] = { MENU_ACTION(KHUI_ACTION_IMPORT), MENU_SUBMENU(KHUI_MENU_DESTROY_CRED), MENU_SEP(), + MENU_SUBMENU(KHUI_MENU_SETDEF), + MENU_SEP(), MENU_ACTION(KHUI_ACTION_PASSWD_ID), MENU_SEP(), MENU_ACTION(KHUI_ACTION_HELP_CTX), @@ -208,6 +212,10 @@ khui_action_ref khui_menu_renew_cred[] = { MENU_END() }; +khui_action_ref khui_menu_setdef[] = { + MENU_END() +}; + khui_action_ref khui_pmenu_tok_sel[] = { MENU_ACTION(KHUI_ACTION_RENEW_CRED), MENU_ACTION(KHUI_ACTION_DESTROY_CRED), @@ -233,6 +241,7 @@ khui_menu_def khui_all_menus[] = { CONSTMENU(KHUI_MENU_COLUMNS, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_columns), CONSTMENU(KHUI_MENU_RENEW_CRED, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_renew_cred), CONSTMENU(KHUI_MENU_DESTROY_CRED, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_destroy_cred), + CONSTMENU(KHUI_MENU_SETDEF, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_menu_setdef), /* toolbars */ CONSTMENU(KHUI_TOOLBAR_STANDARD, KHUI_MENUSTATE_CONSTANT | KHUI_MENUSTATE_SYSTEM, khui_toolbar_standard), @@ -307,7 +316,8 @@ khui_action_create(const wchar_t * name, !caption || FAILED(StringCchLength(caption, KHUI_MAXCCH_SHORT_DESC, &s)) || (tooltip && FAILED(StringCchLength(tooltip, KHUI_MAXCCH_SHORT_DESC, &s))) || - (type != KHUI_ACTIONTYPE_TRIGGER && type != KHUI_ACTIONTYPE_TOGGLE)) { + (type != KHUI_ACTIONTYPE_TRIGGER && type != KHUI_ACTIONTYPE_TOGGLE && + type != KHUI_ACTIONTYPE_IDENTITY)) { return 0; } diff --git a/src/windows/identity/uilib/actions.csv b/src/windows/identity/uilib/actions.csv index f764e92d3..dc6286bf2 100644 --- a/src/windows/identity/uilib/actions.csv +++ b/src/windows/identity/uilib/actions.csv @@ -9,6 +9,7 @@ KHUI_MENU_TOOLBARS,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_TOOLBARS,0,0,0 KHUI_MENU_COLUMNS,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_CHOOSE_COLS,0,IDH_ACTION_CHOOSE_COLS,0 KHUI_MENU_DESTROY_CRED,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_DESTROY_CRED,0,0,0 KHUI_MENU_RENEW_CRED,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_RENEW_CRED,0,0,0 +KHUI_MENU_SETDEF,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_MENU_SETDEF,0,0,0 KHUI_ACTION_PROPERTIES,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_PROPERTIES,IDS_ACTIONT_PROPERTIES,IDH_ACTION_PROPERTIES,0 KHUI_ACTION_EXIT,KHUI_ACTIONTYPE_TRIGGER,,0,0,0,0,0,IDS_ACTION_EXIT,IDS_ACTIONT_EXIT,IDH_ACTION_EXIT,0 KHUI_ACTION_SET_DEF_ID,KHUI_ACTIONTYPE_TRIGGER | KHUI_ACTIONTYPE_TOGGLE,,0,0,0,0,0,IDS_ACTION_SET_DEF_ID,IDS_ACTIONT_SET_DEF_ID,IDH_ACTION_SET_DEF_ID,0 diff --git a/src/windows/identity/uilib/intaction.h b/src/windows/identity/uilib/intaction.h index 2b7aa973a..5753a56de 100644 --- a/src/windows/identity/uilib/intaction.h +++ b/src/windows/identity/uilib/intaction.h @@ -103,6 +103,10 @@ typedef struct tag_khui_action { KHUI_ACTIONSTATE_* */ } khui_action; + +#define KHUI_ACTIONTYPE_IDENTITY 0x00010000 + + /*@}*/ #endif diff --git a/src/windows/identity/uilib/khactiondef.h b/src/windows/identity/uilib/khactiondef.h index c60595360..33d8347eb 100644 --- a/src/windows/identity/uilib/khactiondef.h +++ b/src/windows/identity/uilib/khactiondef.h @@ -144,6 +144,7 @@ Stock menus. #define KHUI_MENU_DESTROY_CRED (KHUI_MENU_BASE + 16) #define KHUI_MENU_RENEW_CRED (KHUI_MENU_BASE + 17) +#define KHUI_MENU_SETDEF (KHUI_MENU_BASE + 18) /*@}*/