#include <gtkmm/button.h> #include <gtkmm/celleditable.h> #include <gtkmm/editable.h> #include <gtkmm/entry.h> #include <gtkmm/eventbox.h> class PopupEntry : public Gtk::EventBox, public Gtk::CellEditable { public: explicit PopupEntry(const Glib::ustring& path); virtual ~PopupEntry(); Glib::ustring get_path() const; void set_text(const Glib::ustring& text); Glib::ustring get_text() const; void select_region(int start_pos, int end_pos); bool get_editing_canceled() const; static int get_button_width(); SigC::Signal0<void>& signal_arrow_clicked(); protected: virtual bool on_key_press_event(GdkEventKey* event); virtual void start_editing_vfunc(GdkEvent* event); private: typedef PopupEntry Self; void on_entry_activate(); bool on_entry_key_press_event(GdkEventKey* event); Glib::ustring path_; Gtk::Button* button_; Gtk::Entry* entry_; bool editing_canceled_; SigC::Signal0<void> signal_arrow_clicked_; };