Re: catching mouse click events in a Gtk::TextView



On 11/05/13 04:31, Kjell Ahlstedt wrote:
When you connect to signal_button_press_event() with

   m_textviewPlaylists->signal_button_press_event().connect(
     sigc::mem_fun(*this, &Main_win::on_button_Pressed) );

the second parameter in connect() gets its default value, after == true, 
meaning that your signal handler is called after the default signal 
handler. If the default signal handler returns true, your signal handler 
is not called. You can connect your signal handler before the default 
signal handler with

   m_textviewPlaylists->signal_button_press_event().connect(
     sigc::mem_fun(*this, &Main_win::on_button_Pressed), false );

A section in the gtkmm tutorial describes this peculiarity of X event 
thank you very much that worked
signals:
https://developer.gnome.org/gtkmm-tutorial/stable/sec-xeventsignals.html.en

Kjell

2013-05-10 18:57, Francis (Grizzly) Smit skrev:
On 11/05/13 02:08, Francis (Grizzly) Smit wrote:
hi I have been trying to catch mouseclick events in a Gtk::TextView

I have tried

     m_builder->get_widget("textviewPlaylists", m_textviewPlaylists);
     if(m_textviewPlaylists){
         //m_textviewPlaylists->signal_clicked().connect(
sigc::mem_fun(*this, &Main_win::on_button_Connect) );
         //m_textviewPlaylists->signal_clicked().connect(
sigc::mem_fun(*this, &Main_win::on_button_Connect) );
         m_textviewPlaylists->property_events() =
m_textviewPlaylists->property_events() | Gdk::BUTTON_PRESS_MASK;
         m_textviewPlaylists->signal_button_press_event().connect(
sigc::mem_fun(*this, &Main_win::on_button_Pressed) );
         //Glib::RefPtr<Gtk::TextBuffer> buffer =
m_textviewPlaylists->get_buffer();
         //buffer->signal_button_press_event().connect(
sigc::mem_fun(*this, &Main_win::on_button_Pressed) );
     }

where m_textviewPlaylists is a pointer to my Gtk::TextView object no
luck I have also tried

     m_builder->get_widget("scrolledwindowPlaylists",
m_scrolledwindowPlaylists);
     if(m_scrolledwindowPlaylists){
         m_scrolledwindowPlaylists->property_events() =
Gdk::BUTTON_PRESS_MASK;
         m_scrolledwindowPlaylists->signal_button_press_event().connect(
sigc::mem_fun(*this, &Main_win::on_button_Pressed) );
     }

  where m_scrolledwindowPlaylists is a pointer to a Gtk::ScrolledWindow
containing the said Gtk::TextView no luck with this either.

the event does not fire either way

my handler looks like so


bool Main_win::on_button_Pressed(GdkEventButton* event){
     std::cout << "entering on_button_Pressed" << std::endl;
     if(event->type == GDK_2BUTTON_PRESS){ //double click //
         std::cout << "double click" << std::endl;
         return true;
     }else if(event->type == GDK_BUTTON_PRESS){ // single click //
         std::cout << "single click" << std::endl;
         return true;
     }
     return false;
}


any help with this would be greatly appreciated, thanks in advance.


Oh incase it's relevant I am using anjuta and glade



-- 


  .~.     In my life God comes first.... 
  /V\         but Linux is pretty high after that :-D
 /( )\    Francis (Grizzly) Smit
 ^^-^^    http://www.smit.id.au/



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