From 853149575e6cb46031b3ed06f3d0fa4c42440962 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 22 Dec 2010 13:57:28 +0000 Subject: [PATCH] Switch to GtkTooltip from deprecated GtkTooltips in wxGTK wxToolTip. Don't use deprecated GtkTooltips in wxGTK code any more, use the new GtkTooltip instead. Closes #12034. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66431 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 4 +++ src/gtk/listbox.cpp | 13 ++++++++-- src/gtk/toolbar.cpp | 39 +++++++++++++++++++++++------ src/gtk/tooltip.cpp | 61 ++++++++++++++++++++++++++++++++++----------- src/gtk/window.cpp | 19 +++++--------- 5 files changed, 99 insertions(+), 37 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 02f58a6a30..b30d607c3b 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -450,6 +450,10 @@ All (GUI): - Fixed resizing columns in wxGrid when they were reordered. - Added wxImage::Rotate180() (Jeff Tupper). +GTK: + +- Switch to GtkTooltip from deprecated GtkTooltips (Emilien Kia). + MSW: - Native implementation of wxHyperlinkCtrl and wxProgressDialog under modern diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index fb70b0c0c7..60c03da203 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -848,8 +848,17 @@ int wxListBox::DoListHitTest(const wxPoint& point) const #if wxUSE_TOOLTIPS void wxListBox::GTKApplyToolTip( GtkTooltips *tips, const gchar *tip ) { - // RN: Is this needed anymore? - gtk_tooltips_set_tip( tips, GTK_WIDGET( m_treeview ), tip, NULL ); +#if GTK_CHECK_VERSION(2, 12, 0) + if (!gtk_check_version(2, 12, 0)) + { + gtk_widget_set_tooltip_text(GTK_WIDGET( m_treeview ), tip); + } + else +#endif + { + // RN: Is this needed anymore? + gtk_tooltips_set_tip( tips, GTK_WIDGET( m_treeview ), tip, NULL ); + } } #endif // wxUSE_TOOLTIPS diff --git a/src/gtk/toolbar.cpp b/src/gtk/toolbar.cpp index f8a8cade54..b25f775019 100644 --- a/src/gtk/toolbar.cpp +++ b/src/gtk/toolbar.cpp @@ -351,7 +351,7 @@ void wxToolBar::Init() wxToolBar::~wxToolBar() { - if (m_tooltips) + if (m_tooltips) // always NULL if GTK >= 2.12 { gtk_object_destroy(GTK_OBJECT(m_tooltips)); g_object_unref(m_tooltips); @@ -376,9 +376,12 @@ bool wxToolBar::Create( wxWindow *parent, FixupStyle(); m_toolbar = GTK_TOOLBAR( gtk_toolbar_new() ); - m_tooltips = gtk_tooltips_new(); - g_object_ref(m_tooltips); - gtk_object_sink(GTK_OBJECT(m_tooltips)); + if (gtk_check_version(2, 12, 0)) + { + m_tooltips = gtk_tooltips_new(); + g_object_ref(m_tooltips); + gtk_object_sink(GTK_OBJECT(m_tooltips)); + } GtkSetStyle(); if (style & wxTB_DOCKABLE) @@ -528,8 +531,18 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) } if (!HasFlag(wxTB_NO_TOOLTIPS) && !tool->GetShortHelp().empty()) { - gtk_tool_item_set_tooltip(tool->m_item, - m_tooltips, wxGTK_CONV(tool->GetShortHelp()), ""); +#if GTK_CHECK_VERSION(2, 12, 0) + if (!gtk_check_version(2, 12, 0)) + { + gtk_tool_item_set_tooltip_text(tool->m_item, + wxGTK_CONV(tool->GetShortHelp())); + } + else +#endif + { + gtk_tool_item_set_tooltip(tool->m_item, + m_tooltips, wxGTK_CONV(tool->GetShortHelp()), ""); + } } g_signal_connect(GTK_BIN(tool->m_item)->child, "button_press_event", G_CALLBACK(button_press_event), tool); @@ -695,8 +708,18 @@ void wxToolBar::SetToolShortHelp( int id, const wxString& helpString ) (void)tool->SetShortHelp(helpString); if (tool->m_item) { - gtk_tool_item_set_tooltip(tool->m_item, - m_tooltips, wxGTK_CONV(helpString), ""); +#if GTK_CHECK_VERSION(2, 12, 0) + if (!gtk_check_version(2, 12, 0)) + { + gtk_tool_item_set_tooltip_text(tool->m_item, + wxGTK_CONV(helpString)); + } + else +#endif + { + gtk_tool_item_set_tooltip(tool->m_item, + m_tooltips, wxGTK_CONV(helpString), ""); + } } } } diff --git a/src/gtk/tooltip.cpp b/src/gtk/tooltip.cpp index 801ae68eed..53707efbc7 100644 --- a/src/gtk/tooltip.cpp +++ b/src/gtk/tooltip.cpp @@ -63,21 +63,42 @@ void wxToolTip::GTKApply( wxWindow *win ) /* static */ void wxToolTip::GTKApply(GtkWidget *w, const gchar *tip) { - if ( !gs_tooltips ) - gs_tooltips = gtk_tooltips_new(); +#if GTK_CHECK_VERSION(2, 12, 0) + if (!gtk_check_version(2, 12, 0)) + { + gtk_widget_set_tooltip_text(w, tip); + } + else +#endif + { + if ( !gs_tooltips ) + gs_tooltips = gtk_tooltips_new(); - gtk_tooltips_set_tip(gs_tooltips, w, tip, NULL); + gtk_tooltips_set_tip(gs_tooltips, w, tip, NULL); + } } void wxToolTip::Enable( bool flag ) { - if (!gs_tooltips) - return; - - if (flag) - gtk_tooltips_enable( gs_tooltips ); +#if GTK_CHECK_VERSION(2, 12, 0) + if (!gtk_check_version(2, 12, 0)) + { + GtkSettings* settings = gtk_settings_get_default(); + if(!settings) + return; + gtk_settings_set_long_property(settings, "gtk-enable-tooltips", flag?TRUE:FALSE, NULL); + } else - gtk_tooltips_disable( gs_tooltips ); +#endif + { + if (!gs_tooltips) + return; + + if (flag) + gtk_tooltips_enable( gs_tooltips ); + else + gtk_tooltips_disable( gs_tooltips ); + } } G_BEGIN_DECLS @@ -87,12 +108,24 @@ G_END_DECLS void wxToolTip::SetDelay( long msecs ) { - if (!gs_tooltips) - return; +#if GTK_CHECK_VERSION(2, 12, 0) + if (!gtk_check_version(2, 12, 0)) + { + GtkSettings* settings = gtk_settings_get_default(); + if(!settings) + return; + gtk_settings_set_long_property(settings, "gtk-tooltip-timeout", msecs, NULL); + } + else +#endif + { + if (!gs_tooltips) + return; - // FIXME: This is a deprecated function and might not even have an effect. - // Try to not use it, after which remove the prototype above. - gtk_tooltips_set_delay( gs_tooltips, (int)msecs ); + // FIXME: This is a deprecated function and might not even have an effect. + // Try to not use it, after which remove the prototype above. + gtk_tooltips_set_delay( gs_tooltips, (int)msecs ); + } } void wxToolTip::SetAutoPop( long WXUNUSED(msecs) ) diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 1e4523f340..53c687fa08 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -3782,30 +3782,23 @@ void wxWindowGTK::DoSetToolTip( wxToolTip *tip ) { GtkWidget *w = GetConnectWidget(); wxToolTip::GTKApply(w, NULL); -#if GTK_CHECK_VERSION(2, 12, 0) - // Just applying NULL doesn't work on 2.12.0, so also use - // gtk_widget_set_has_tooltip. It is part of the new GtkTooltip API - // but seems also to work with the old GtkTooltips. - if (gtk_check_version(2, 12, 0) == NULL) - gtk_widget_set_has_tooltip(w, FALSE); -#endif } } void wxWindowGTK::GTKApplyToolTip( GtkTooltips *tips, const gchar *tip ) { GtkWidget *w = GetConnectWidget(); - gtk_tooltips_set_tip(tips, w, tip, NULL); #if GTK_CHECK_VERSION(2, 12, 0) - if ( !tip || tip[0] == '\0' ) + if (!gtk_check_version(2, 12, 0)) { - // Just applying empty tool tip doesn't work on 2.12.0, so also use - // gtk_widget_set_has_tooltip. - if (gtk_check_version(2, 12, 0) == NULL) - gtk_widget_set_has_tooltip(w, FALSE); + gtk_widget_set_tooltip_text (w, tip); } + else #endif + { + gtk_tooltips_set_tip(tips, w, tip, NULL); + } } #endif // wxUSE_TOOLTIPS