Changeset a5bbf0a72a201aae5e5de00f6a99c64591c0dd80

Show
Ignore:
Timestamp:
01/04/09 21:49:36 (4 years ago)
Author:
Armin Burgmeier <armin@…>
Parents:
a9b75ca3a13948c179138e53520bf0e2a5a092f9
Children:
582a477ada10ccfcd67c43b50b81318dcdfffd12
git-committer:
Armin Burgmeier <armin@arbur.net> / 2009-01-04T21:49:36Z+0100
Message:

Show tooltip when hovering text

2009-01-04 Armin Burgmeier <armin@…>

  • code/core/docwindow.hpp:
  • code/core/docwindow.cpp: Show a tooltip when hovering over text, saying what user wrote the hovered text.
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • ChangeLog

    ra9b75ca ra5bbf0a  
     12009-01-04  Armin Burgmeier  <armin@arbur.net> 
     2 
     3        * code/core/docwindow.hpp: 
     4        * code/core/docwindow.cpp: Show a tooltip when hovering over text, 
     5        saying what user wrote the hovered text. 
     6 
    172009-01-04  Armin Burgmeier  <armin@arbur.net> 
    28 
  • code/core/docwindow.cpp

    r4625e17 ra5bbf0a  
    151151        g_signal_connect(G_OBJECT(table), "tag-added", 
    152152                         G_CALLBACK(on_tag_added), this); 
     153 
     154        gtk_widget_set_has_tooltip(GTK_WIDGET(m_view), TRUE); 
     155        g_signal_connect(m_view, "query-tooltip", 
     156                         G_CALLBACK(on_query_tooltip_static), this); 
    153157 
    154158        gtk_text_view_set_buffer(GTK_TEXT_VIEW(m_view), 
     
    525529        } 
    526530} 
     531 
     532bool 
     533Gobby::DocWindow::on_query_tooltip(int x, int y, bool keyboard_mode, 
     534                                   const Glib::RefPtr<Gtk::Tooltip>& tooltip) 
     535{ 
     536        if(keyboard_mode) return false; 
     537 
     538        int buffer_x, buffer_y; 
     539        gtk_text_view_window_to_buffer_coords( 
     540                GTK_TEXT_VIEW(m_view), 
     541                GTK_TEXT_WINDOW_WIDGET, x, y, &buffer_x, &buffer_y); 
     542 
     543        // Pointer is in line number display 
     544        if(buffer_x < 0) return false; 
     545 
     546        // Get the character at the mouse position 
     547        GtkTextIter iter; 
     548        int trailing; 
     549        gtk_text_view_get_iter_at_position( 
     550                GTK_TEXT_VIEW(m_view), &iter, &trailing, buffer_x, buffer_y); 
     551 
     552        // Don't show a tooltip if the character is a newline character */ 
     553        //if(gtk_text_iter_is_end(&iter)) return false; 
     554        if(gtk_text_iter_ends_line(&iter)) return false; 
     555 
     556        // Don't show a tooltip if we are past the end of the line 
     557        GdkRectangle newline_location; 
     558        GtkTextIter line_end = iter; 
     559        gtk_text_iter_forward_to_line_end(&line_end); 
     560        gtk_text_view_get_iter_location( 
     561                GTK_TEXT_VIEW(m_view), &line_end, &newline_location); 
     562 
     563        if(buffer_x >= newline_location.x && 
     564           buffer_y >= newline_location.y) 
     565        { 
     566                return false; 
     567        } 
     568 
     569        InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( 
     570                inf_session_get_buffer(INF_SESSION(m_session))); 
     571 
     572        InfTextUser* author = inf_text_gtk_buffer_get_author(buffer, &iter); 
     573        if(author != NULL) 
     574        { 
     575                tooltip->set_markup(Glib::ustring::compose( 
     576                        _("Text written by <b>%1</b>"), 
     577                        Glib::Markup::escape_text( 
     578                                inf_user_get_name(INF_USER(author))))); 
     579        } 
     580        else 
     581        { 
     582                tooltip->set_text(_("Unowned text")); 
     583        } 
     584 
     585        return true; 
     586} 
  • code/core/docwindow.hpp

    r4d4ee96 ra5bbf0a  
    110110        void on_pref_userlist_width_changed(); 
    111111 
     112        bool on_query_tooltip(int x, int y, bool keyboard_mode, 
     113                              const Glib::RefPtr<Gtk::Tooltip>& tooltip); 
     114 
     115        static gboolean on_query_tooltip_static(GtkWidget* widget, int x, 
     116                                                int y, gboolean keyboard_mode, 
     117                                                GtkTooltip* tooltip, 
     118                                                gpointer user_data) 
     119        { 
     120                return static_cast<DocWindow*>(user_data)->on_query_tooltip( 
     121                        x, y, keyboard_mode, Glib::wrap(tooltip, true)); 
     122        } 
     123 
    112124        InfTextSession* m_session; 
    113125        Glib::ustring m_title;