Cannot get button press event on drawing area

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Cannot get button press event on drawing area

Gtkmm mailing list
I want to get mouse movement events when a user moves cursor while
holding button 1 but am unable to.
Here, I wrote a small piece of code that illustrates the problem. I've
sent it as an attachment but you can also see it here:
https://pastebin.com/WcZrtBQR.

_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list

main.cpp (2K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Cannot get button press event on drawing area

Gtkmm mailing list

You must set the optional after parameter in connect() to false:

signal_button_press_event().connect(sigc::mem_fun(*this, &DrawingArea::draw_get_mouse), false);

See https://developer.gnome.org/gtkmm-tutorial/stable/sec-xeventsignals.html.en

If you want normal event processing to continue after your draw_get_mouse() method has been executed, it shall return false.
On 2019-02-28 18:12, Радомир Хаџић via gtkmm-list wrote:
I want to get mouse movement events when a user moves cursor while
holding button 1 but am unable to.
Here, I wrote a small piece of code that illustrates the problem. I've
sent it as an attachment but you can also see it here:
https://pastebin.com/WcZrtBQR.


_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
Reply | Threaded
Open this post in threaded view
|

Re: Cannot get button press event on drawing area

Gtkmm mailing list

   get_window()->set_events(Gdk::EventMask::BUTTON_PRESS_MASK);
or
   add_events(Gdk::EventMask::BUTTON_PRESS_MASK);

If you want to receive button press events, then set the button press mask. If you want to receive button motion events, then set a button motion mask.

It's usually better to use Gtk::Widget::add_events() instead of Gdk::Window::set_events() or Gtk::Widget::set_events().

If you don't want other handlers to receive the event, then it's correct to let draw_get_mouse() return true.

On 2019-02-28 20:39, Радомир Хаџић wrote:
I did what you said but it didn't work for me. I changed

signal_button_press_event().connect(sigc::mem_fun(*this,
&DrawingArea::draw_get_mouse));

to

signal_button_press_event().connect(sigc::mem_fun(*this,
&DrawingArea::draw_get_mouse), false);

but nothing changed. I also tried changed return value of
draw_get_mouse to false even though I don't want to propagate that
signal to other handlers.

I'm also sending modified code, which is also available here:
https://pastebin.com/Dr3Av2vJ.



_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
Reply | Threaded
Open this post in threaded view
|

Re: Cannot get button press event on drawing area

Gtkmm mailing list
On 2019-03-01 16:58, Радомир Хаџић wrote:
Also, I did try to change set_events to add_events but again, nothing changed.

2019-03-01 14:27 GMT+01:00, Радомир Хаџић [hidden email]:
Sorry, I meant "BUTTON1_MOTION_MASK," but it doesn't really matter.
Yes, it does matter. Like you say, you have BUTTON1_MOTION_MASK, but you should have BUTTON_PRESS_MASK. Button motion is not the same as button press. First a button is pressed, then the pointer is moved with the button pressed, then the button is released. That's three different kinds of events.

2019-03-01 14:26 GMT+01:00, Радомир Хаџић [hidden email]:
But do I not have

    get_window()->set_events(Gdk::EventMask::BUTTON1_PRESS_MASK);

on line 21?

2019-03-01 11:03 GMT+01:00, Kjell Ahlstedt [hidden email]:
get_window()->set_events(Gdk::EventMask::BUTTON_PRESS_MASK);
or
    add_events(Gdk::EventMask::BUTTON_PRESS_MASK);

If you want to receive button press events, then set the button press
mask. If you want to receive button motion events, then set a button
motion mask.

It's usually better to use Gtk::Widget::add_events() instead of
Gdk::Window::set_events() or Gtk::Widget::set_events().

If you don't want other handlers to receive the event, then it's correct
to let draw_get_mouse() return true.

On 2019-02-28 20:39, Радомир Хаџић wrote:
I did what you said but it didn't work for me. I changed

signal_button_press_event().connect(sigc::mem_fun(*this,
&DrawingArea::draw_get_mouse));

to

signal_button_press_event().connect(sigc::mem_fun(*this,
&DrawingArea::draw_get_mouse), false);

but nothing changed. I also tried changed return value of
draw_get_mouse to false even though I don't want to propagate that
signal to other handlers.

I'm also sending modified code, which is also available here:
https://pastebin.com/Dr3Av2vJ.



          

        

      

_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
Reply | Threaded
Open this post in threaded view
|

Re: Cannot get button press event on drawing area

Gtkmm mailing list
On 2019-03-01 17:28, Kjell Ahlstedt wrote:
On 2019-03-01 16:58, Радомир Хаџић wrote:
Also, I did try to change set_events to add_events but again, nothing changed.

2019-03-01 14:27 GMT+01:00, Радомир Хаџић [hidden email]:
Sorry, I meant "BUTTON1_MOTION_MASK," but it doesn't really matter.
Yes, it does matter. Like you say, you have BUTTON1_MOTION_MASK, but you should have BUTTON_PRESS_MASK. Button motion is not the same as button press. First a button is pressed, then the pointer is moved with the button pressed, then the button is released. That's three different kinds of events.
Alternatively, you can set Gdk::BUTTON1_MOTION_MASK and connect to signal_motion_notify_event(). Or set several mask bits and connect to several event signals. Anyway, you must set a mask bits that correspond to the event signals you connect to.
2019-03-01 14:26 GMT+01:00, Радомир Хаџић [hidden email]:
But do I not have

    get_window()->set_events(Gdk::EventMask::BUTTON1_PRESS_MASK);

on line 21?

2019-03-01 11:03 GMT+01:00, Kjell Ahlstedt [hidden email]:
get_window()->set_events(Gdk::EventMask::BUTTON_PRESS_MASK);
or
    add_events(Gdk::EventMask::BUTTON_PRESS_MASK);

If you want to receive button press events, then set the button press
mask. If you want to receive button motion events, then set a button
motion mask.

It's usually better to use Gtk::Widget::add_events() instead of
Gdk::Window::set_events() or Gtk::Widget::set_events().

If you don't want other handlers to receive the event, then it's correct
to let draw_get_mouse() return true.

On 2019-02-28 20:39, Радомир Хаџић wrote:
I did what you said but it didn't work for me. I changed

signal_button_press_event().connect(sigc::mem_fun(*this,
&DrawingArea::draw_get_mouse));

to

signal_button_press_event().connect(sigc::mem_fun(*this,
&DrawingArea::draw_get_mouse), false);

but nothing changed. I also tried changed return value of
draw_get_mouse to false even though I don't want to propagate that
signal to other handlers.

I'm also sending modified code, which is also available here:
https://pastebin.com/Dr3Av2vJ.



_______________________________________________
gtkmm-list mailing list
[hidden email]
https://mail.gnome.org/mailman/listinfo/gtkmm-list