She is only 4 months old and just a baby! Even 2 hours is a long time to expect her to hold her potty. She is going to go when she needs to go. If you really want to train her then you will need to change a few things that you are doing to become successful.
When you take her outside, you need to only spend just enough time for her to go potty lets just say no longer than 5 minutes. Take her outside and put her on the ground and say "go potty" or whatever other word you want to use. As soon as she does her business you need to give her a treat and praise, pick her up and back into the house. DO NOT wait until you have gone back into the house for her treat. You want her to associate the potty and the treat so you need to give immediate praise and treat. If you are going into the house and getting a treat she will think the treat is for going back into the house and not for potty. Do not allow her to wander around the yard, this is not the time to sniff the bushes, look at the birdies or bark at a falling leaf. It is potty time.
If she goes potty then you can let her have a little freedom, maybe 30 minutes but at some point she needs to be contained. If she
did not make her potty you need to either keep her at your side on her leash, put her into her crate or purchase an xpen to contain her.
You should never use negative actions on your puppy. It is not necessary to rub her nose, smack her with the newspaper, or yell. Positive reinforcement always works best.
You do need to have control over your pup but negative attention is not the answer.
As for your MIL, just ignore her negative behavior and praise and treat the good. She will learn as well.
