Re: Mouse Events and Gtkmm/Gdk



On 8/23/07, Aaron Geier <ageier catalystmicro com> wrote:
>
> Hello,
>
>  I'm slightly confused as to how mouse events work with gdk, gtk, and gtkmm.
>
>  I just wanted to test out some basic functions to test out mouse handling
> and keyboard handling.
>
>
>
> The following is my main window class that I use to start Gtkmm.  There is
> nothing fancy, and there is really no interaction.  Basically I just want to
> press keys and mouse buttons and have information printed to stdout.
>
> Class MyWindow : public Gtk::Window
>
> {
>
>
>
> Public:
>
>             MyWindow();
>
> virtual ~MyWindow();
>
>
>
> virtual bool on_key_release_event(GdkEventKey *event)
>  {
>
>             cerr << event->keyval << endl;
>
> return true;
>
> }
>
>
>
> virtual bool on_button_event(GdkEventButton *event)
>
> {
>
>             cerr << event->type << endl;
>
>             return true;
>
> }
>
>
>
> };
>
>
>
> When I instantiate this class as my main gtk window and run the program, it
> prints out all the keyboard strokes that I touch.  However, when I do any
> mouse button pressing, nothing is printed out to the screen.  Am I using the
> wrong event type for mouse presses, or must I do something special to log
> mouse presses?

Assuming that you actually mean on_button_press_event() instead of
on_button_event(), that should be the correct event (unless you were
trying to catch button releases, which would be
on_button_release_event()).
But this is another one of those things that's not obvious to
newcomers: not all widgets are configured to generate all events by
default.  For some widgets (e.g. a Gtk::Button) whose purpose is to be
clicked, the button press event will obviously be enabled by default.
But for other widgets that are unlikely to need to handle button press
events (e.g. DrawingArea), these events are disabled by default as a
performance optimization.  If you /do/ need to handle these events,
you need to explicitly enable them with either add_events() [1] or
set_events() [2].  Unfortunately, I don't think that there is even any
documentation on what the default event masks are for all of the
different widgets (if somebody knows of such a thing, please let me
know).
The other thing to keep in mind is that there are also some widgets
which can't actually receive *any* events.  See [3] for more
information.
Hope that helps.

[1] http://gtkmm.org/docs/gtkmm-2.4/docs/reference/html/classGtk_1_1Widget.html#1af589cb1d8764be5abf5579ffb69bec
[2] http://gtkmm.org/docs/gtkmm-2.4/docs/reference/html/classGtk_1_1Widget.html#deb38a3d5988a0e31055bbd2edb2e954
[3] http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/ch13.html
-- 
jonner



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]