There are two cases to be aware of.
Some special keys are called modifier keys and these cause a modifier bit to be set in event->state
so you might check if (event->state & GDK_CONTROL_MASK)
for example.
Only a few common modifiers set a flag in this way. For other keys you will need to track the separate press and release events yourself, which will allow you to determine whether one key is still pressed when another arrives. The widget signals are key-press-event and key-release-event.
There could be other factors causing trouble for you, a good approach is to create a small single-file standalone compilable test case showing the problem. You may figure it out just by making the test case, but if not, a test case will help others help you. (Since they can use it to reproduce the issue.)