diff options
Diffstat (limited to 'src/ld-window-main.c')
-rw-r--r-- | src/ld-window-main.c | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/src/ld-window-main.c b/src/ld-window-main.c index 3b907a9..47e231d 100644 --- a/src/ld-window-main.c +++ b/src/ld-window-main.c @@ -96,6 +96,7 @@ struct _LdWindowMainPrivate LdCanvas *canvas; GtkWidget *statusbar; + guint statusbar_symbol_context_id; guint statusbar_menu_context_id; SymbolMenuData symbol_menu; @@ -294,6 +295,8 @@ ld_window_main_init (LdWindowMain *self) priv->statusbar = gtk_statusbar_new (); priv->statusbar_menu_context_id = gtk_statusbar_get_context_id (GTK_STATUSBAR (priv->statusbar), "menu"); + priv->statusbar_symbol_context_id = gtk_statusbar_get_context_id + (GTK_STATUSBAR (priv->statusbar), "symbol"); /* Pack all widgets into the window. */ priv->hbox = gtk_hbox_new (FALSE, 0); @@ -639,6 +642,9 @@ on_category_toggle (GtkToggleButton *toggle_button, gpointer user_data) g_free (data->items); data->items = NULL; + gtk_statusbar_pop (GTK_STATUSBAR (self->priv->statusbar), + self->priv->statusbar_menu_context_id); + gtk_grab_remove (GTK_WIDGET (self->priv->canvas)); } else @@ -763,7 +769,7 @@ on_canvas_motion_notify (GtkWidget *widget, GdkEventMotion *event, { LdWindowMain *self; SymbolMenuData *data; - gint i, x; + gint i, x, at_cursor = -1; self = LD_WINDOW_MAIN (user_data); data = &self->priv->symbol_menu; @@ -771,24 +777,34 @@ on_canvas_motion_notify (GtkWidget *widget, GdkEventMotion *event, if (widget->window != event->window || event->x < 0 || event->y < data->menu_y || event->y >= data->menu_y + data->menu_height) - { - data->active_item = -1; - redraw_symbol_menu (self); - return FALSE; - } + goto on_canvas_motion_notify_end; for (x = i = 0; i < data->n_items; i++) { x += data->items[i].width; if (event->x < x) { - /* TODO: Show the human name of this symbol in status bar. */ - data->active_item = i; - redraw_symbol_menu (self); - return FALSE; + at_cursor = i; + break; + } + } + +on_canvas_motion_notify_end: + if (data->active_item != at_cursor) + { + const gchar *symbol_name; + + gtk_statusbar_pop (GTK_STATUSBAR (self->priv->statusbar), + self->priv->statusbar_menu_context_id); + + if (at_cursor != -1) + { + symbol_name = ld_symbol_get_human_name (data->items[i].symbol); + gtk_statusbar_push (GTK_STATUSBAR (self->priv->statusbar), + self->priv->statusbar_menu_context_id, symbol_name); } } - data->active_item = -1; + data->active_item = at_cursor; redraw_symbol_menu (self); return FALSE; } |