private void subDirTip_MultipleMenuItemsClicked(object sender, EventArgs e) { // this can run in both desktop and taskbar thread SubDirTipForm sdtf = (SubDirTipForm)sender; IntPtr hwndDialogParent = sdtf == subDirTip ? hwndListView : hwndShellTray; // SubDirTip_QTGRootItem string[] arrGrps = sdtf.ExecutedGroups; if(arrGrps.Length > 0) { Thread thread = new Thread(OpenGroup); thread.SetApartmentState(ApartmentState.STA); thread.IsBackground = true; thread.Start(new object[] {arrGrps, ModifierKeys}); } // folders if(sdtf.ExecutedIDLs.Count > 0) { List<byte[]> lstIDLs = new List<byte[]>(); foreach(byte[] idl in sdtf.ExecutedIDLs) { using(IDLWrapper idlw = new IDLWrapper(idl, false)) { if(idlw.IsLink) { IDLWrapper idlwTarget; if(idlw.TryGetLinkTarget(hwndDialogParent, out idlwTarget)) { if(idlwTarget.IsFolder) { if(idlw.IsFolder) { lstIDLs.Add(idlw.IDL); } else { lstIDLs.Add(idlwTarget.IDL); } } } } else { lstIDLs.Add(idlw.IDL); } } } Keys modKey = ModifierKeys; if(!Config.Bool(Scts.ActivateNewTab)) { if(modKey == Keys.Shift) { modKey = Keys.None; } else if(modKey == Keys.None) { modKey = Keys.Shift; } } if(lstIDLs.Count == 1) { OpenTab(new object[] {null, modKey, lstIDLs[0]}); } else if(lstIDLs.Count > 1) { Thread thread = new Thread(OpenFolders2); thread.SetApartmentState(ApartmentState.STA); thread.IsBackground = true; thread.Start(new object[] {lstIDLs, modKey}); } } }