diff options
author | Iain Holmes <ih@csd.abdn.ac.uk> | 2000-02-21 00:17:08 +0800 |
---|---|---|
committer | iholmes <iholmes@localhost> | 2000-02-21 00:17:08 +0800 |
commit | 113c276df87402803382f26ee6eb1994e2e9f4ff (patch) | |
tree | 0457fbb0d3cfdfe2b32a647b47680c08262d2bd1 /widgets/e-text/e-text.c | |
parent | 410ce5daf579edd0b8fd4d2bd7bdd8cd61a89ad8 (diff) | |
download | gsoc2013-evolution-113c276df87402803382f26ee6eb1994e2e9f4ff.tar.gz gsoc2013-evolution-113c276df87402803382f26ee6eb1994e2e9f4ff.tar.zst gsoc2013-evolution-113c276df87402803382f26ee6eb1994e2e9f4ff.zip |
Show the text of the item, in a tooltip style. (e_text_event): Add a
2000-02-20 Iain Holmes <ih@csd.abdn.ac.uk>
* widgets/e-text/e-text.[ch] (_do_tooltip): Show the text of the item,
in a tooltip style.
(e_text_event): Add a timeout on the Enter and remove it on the Leave
events.
* e-text-test.c: New file to test e-text items.
svn path=/trunk/; revision=1866
Diffstat (limited to 'widgets/e-text/e-text.c')
-rw-r--r-- | widgets/e-text/e-text.c | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/widgets/e-text/e-text.c b/widgets/e-text/e-text.c index 8dde3bbaed..2e3e7c158a 100644 --- a/widgets/e-text/e-text.c +++ b/widgets/e-text/e-text.c @@ -332,7 +332,7 @@ e_text_destroy (GtkObject *object) EText *text; g_return_if_fail (object != NULL); - g_return_if_fail (GNOME_IS_CANVAS_TEXT (object)); + g_return_if_fail (E_IS_TEXT (object)); text = E_TEXT (object); @@ -1823,6 +1823,48 @@ _blink_scroll_timeout (gpointer data) return TRUE; } +static gboolean +_do_tooltip (gpointer data) +{ + EText *text = E_TEXT (data); + struct line *lines; + GtkWidget *label, *vbox; + gint x, y, pointer_x, pointer_y, scr_w, scr_h, tip_w, tip_h; + int i; + + lines = text->lines; + + scr_w = gdk_screen_width (); + scr_h = gdk_screen_height (); + gdk_window_get_pointer (NULL, &pointer_x, &pointer_y, NULL); + + text->tooltip_window = gtk_window_new (GTK_WINDOW_POPUP); + vbox = gtk_vbox_new (TRUE, 0); + for (i = 0; i < text->num_lines; i++) { + gchar *linetext; + + linetext = g_strndup (lines->text, lines->length); + label = gtk_label_new (linetext); + g_free (linetext); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); + lines++; + } + + gtk_widget_show_all (vbox); + gtk_container_add (GTK_CONTAINER (text->tooltip_window), vbox); + gtk_widget_realize (text->tooltip_window); + tip_w = text->tooltip_window->allocation.width; + tip_h = text->tooltip_window->allocation.height; + + /* Stay on screen */ + x = pointer_x + tip_w <= scr_w ? pointer_x : scr_w - tip_w; + y = pointer_y + tip_h + 1 <= scr_h ? pointer_y + 1: pointer_y - tip_h; + gtk_widget_popup (text->tooltip_window, x, y); + + return FALSE; +} + static gint e_text_event (GnomeCanvasItem *item, GdkEvent *event) { @@ -1951,6 +1993,7 @@ e_text_event (GnomeCanvasItem *item, GdkEvent *event) } break; case GDK_ENTER_NOTIFY: + text->tooltip_timeout = gtk_timeout_add (3000, _do_tooltip, text); text->pointer_in = TRUE; if (text->editing) { if ( text->default_cursor_shown ) { @@ -1960,6 +2003,12 @@ e_text_event (GnomeCanvasItem *item, GdkEvent *event) } break; case GDK_LEAVE_NOTIFY: + gtk_timeout_remove (text->tooltip_timeout); + if (text->tooltip_window) { + gtk_widget_destroy (text->tooltip_window); + text->tooltip_window = NULL; + } + text->pointer_in = FALSE; if (text->editing) { if ( ! text->default_cursor_shown ) { |