I've been meaning to get in to Linux GUI programming myself, but there just never seems to be time. At any rate, here's what I know:
The no-bloat way is to use the X libraries directly. Don't do this. X is extremely low level (i.e. it supports things like drawing lines and points, but that's about it), and unless you have a compelling need for it, it's just way too much work.
The bloaty way is to use a GUI toolkit that wraps up Xlib into a nice, usable package. The most popular are Qt (which is used by KDE) and GTK (which is used by GNOME). Qt is object oriented and focused on C++. GTK is C based, but has bindings to just about any language you can think of. Glade is actually a GUI builder for GTK programs. It has binding for C, C++, Perl, Eiffel, and Ada95, if I recall correctly. I've played with it a little, and it seems pretty nice.
From what I've heard, Qt may actually be the better toolkit, but GTK has more community support.