diff -ru a/terminal/terminal-app.c b/terminal/terminal-app.c --- a/terminal/terminal-app.c 2013-01-01 16:09:30.000000000 +0400 +++ b/terminal/terminal-app.c 2013-03-17 21:18:05.254850369 +0400 @@ -285,7 +285,21 @@ return FALSE; } +static void +undo_urgent(TerminalWindow *window, + gchar *name, + TerminalApp *app) +{ + GtkWidget *toplevel; + gboolean enabled; + g_object_get (G_OBJECT(app->preferences), "misc-bell-urgent", &enabled, NULL); + + if (!enabled) return; + + toplevel = gtk_widget_get_toplevel(GTK_WIDGET(window)); + gtk_window_set_urgency_hint(GTK_WINDOW(toplevel), FALSE); +} static void terminal_app_take_window (TerminalApp *app, @@ -305,6 +319,10 @@ G_CALLBACK (terminal_app_new_window), app); g_signal_connect (G_OBJECT (window), "new-window-with-screen", G_CALLBACK (terminal_app_new_window_with_terminal), app); + g_signal_connect (G_OBJECT (window), "focus-in-event", + G_CALLBACK (undo_urgent), app); + g_signal_connect (G_OBJECT (window), "key-release-event", + G_CALLBACK (undo_urgent), app); app->windows = g_slist_prepend (app->windows, window); } diff -ru a/terminal/terminal-preferences.c b/terminal/terminal-preferences.c --- a/terminal/terminal-preferences.c 2013-01-01 16:09:30.000000000 +0400 +++ b/terminal/terminal-preferences.c 2013-03-17 21:12:26.980863541 +0400 @@ -76,6 +76,7 @@ PROP_FONT_NAME, PROP_MISC_ALWAYS_SHOW_TABS, PROP_MISC_BELL, + PROP_MISC_BELL_URGENT, PROP_MISC_BORDERS_DEFAULT, PROP_MISC_CURSOR_BLINKS, PROP_MISC_CURSOR_SHAPE, @@ -653,6 +654,15 @@ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); /** + * TerminalPreferences:misc-bell-urgent + **/ + preferences_props[PROP_MISC_BELL_URGENT] = + g_param_spec_boolean ("misc-bell-urgent", + NULL, + "MiscBellUrgent", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + /** * TerminalPreferences:misc-borders-default: **/ preferences_props[PROP_MISC_BORDERS_DEFAULT] = diff -ru a/terminal/terminal-screen.c b/terminal/terminal-screen.c --- a/terminal/terminal-screen.c 2013-01-01 16:09:30.000000000 +0400 +++ b/terminal/terminal-screen.c 2013-03-17 21:20:31.007844693 +0400 @@ -1000,6 +1000,19 @@ } } +static void +do_urgent(TerminalWidget *widget, + TerminalScreen *screen) +{ + GtkWidget *toplevel; + gboolean enabled; + g_object_get (G_OBJECT (screen->preferences), "misc-bell-urgent", &enabled, NULL); + + if (!enabled) return; + + toplevel = gtk_widget_get_toplevel((GTK_WIDGET(screen))); + gtk_window_set_urgency_hint(GTK_WINDOW(toplevel), TRUE); +} static void @@ -1008,6 +1021,7 @@ gboolean bval; g_object_get (G_OBJECT (screen->preferences), "misc-bell", &bval, NULL); vte_terminal_set_audible_bell (VTE_TERMINAL (screen->terminal), bval); + g_signal_connect(screen->terminal, "beep", G_CALLBACK(do_urgent), screen); }