// A wrapper around set_tooltip_*() for portability across different gtkmm versions. void app_gtkmm_set_widget_tooltip(Gtk::Widget& widget, const Glib::ustring& tooltip_text, bool use_markup) { // set_tooltip_* is available since 2.12 #ifndef APP_GTKMM_OLD_TOOLTIPS if (use_markup) { widget.set_tooltip_markup(tooltip_text); } else { widget.set_tooltip_text(tooltip_text); } #else // use the old tooltips api Gtk::Widget* toplevel = widget.get_toplevel(); if (toplevel && toplevel->is_toplevel()) { // orphan widgets return themselves, so check toplevelness. GtkTooltips* tooltips = static_cast<GtkTooltips*>(toplevel->get_data("window_tooltips")); if (tooltips) { if (use_markup) { // strip markup Glib::ustring stripped; if (app_pango_strip_markup(tooltip_text, stripped)) { gtk_tooltips_set_tip(tooltips, widget.gobj(), stripped.c_str(), ""); } } else { gtk_tooltips_set_tip(tooltips, widget.gobj(), tooltip_text.c_str(), ""); } } } #endif }
void Dialog::_defocus() { SPDesktop *desktop = SP_ACTIVE_DESKTOP; if (desktop) { Gtk::Widget *canvas = Glib::wrap(GTK_WIDGET(desktop->canvas)); // make sure the canvas window is present before giving it focus Gtk::Window *toplevel_window = dynamic_cast<Gtk::Window *>(canvas->get_toplevel()); if (toplevel_window) toplevel_window->present(); canvas->grab_focus(); } }