You have to remember that being a programmer isn't about learning any specific language; if you pigeon hole yourself into a specific technology, chances are that eventually you will be out of the job or every few years you will become stressed out because you have to learn something new. Remember that the core concepts (OOP, data structures/algos, scripting vs compiled languages, database theory, etc) exist outside of the context of any programming language you want to apply it - just like the concept that 1 + 1 = 2 exists regardless of the fact that you speak English or French. So accept that you will always have to learn something new and approach this with an open mind and it will make your life as a programmer a lot easier.
Also, you might be looking at things in the wrong light. I think its a fair argument that someone with solid C++ experience would be just as strong of a candidate as a programmer with solid C#/Java experience. While you may not be familiar with all of the syntax and common tools/libraries to each environment, having experience with C++ means you've been dealing with memory management a lot more than someone used to a managed environment and so while someone used to programming in a strictly managed environment might not always think about what the garbage collector is doing or how the vtable works in the context of dynamic binding, having experience with pointers, destructors and virtual methods allows you to understand what is going on "under the hood" inside of the managed C# or Java environments.
I guess what I'm trying to say is that while working on open source projects would be a good use of your time, I wouldn't worry too much about not knowing C#/Java with respect to getting a job. By all means, explore and learn as much as you can; but any company willing to pass up a programmer with solid C++ experience simply because they don't have C#/Java experience really isn't managing their technical resources properly and probably isn't a good place for you to be.