# HG changeset patch # User Luke Schierer # Date 1192816415 0 # Node ID aad0f10eb4dc43a6a5357f84f673ac8a25c7bb61 # Parent 589b517bfe1bdd92e8f7050b37f35dc63af9c08f applied changes from 1bdf4754abed6b49eec400ecf415a9d557bc9834 through 7c1e4d9a3444019b453af4bab1b27b9b3b63cb83 diff -r 589b517bfe1b -r aad0f10eb4dc pidgin/gtkstatusbox.c --- a/pidgin/gtkstatusbox.c Fri Oct 19 17:42:59 2007 +0000 +++ b/pidgin/gtkstatusbox.c Fri Oct 19 17:53:35 2007 +0000 @@ -1395,7 +1395,7 @@ return; } gtk_grab_add (box->popup_window); -// box->popup_in_progress = TRUE; + /*box->popup_in_progress = TRUE;*/ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (box->toggle_button), TRUE); @@ -1407,7 +1407,8 @@ } static void -pidgin_status_box_popdown(PidginStatusBox *box) { +pidgin_status_box_popdown(PidginStatusBox *box) +{ gtk_widget_hide(box->popup_window); box->popup_in_progress = FALSE; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (box->toggle_button), @@ -1415,16 +1416,34 @@ gtk_grab_remove (box->popup_window); } +static gboolean +toggle_key_press_cb(GtkWidget *widget, GdkEventKey *event, PidginStatusBox *box) +{ + switch (event->keyval) { + case GDK_Return: + case GDK_KP_Enter: + case GDK_KP_Space: + case GDK_space: + if (!box->popup_in_progress) { + pidgin_status_box_popup (box); + box->popup_in_progress = TRUE; + } else { + pidgin_status_box_popdown(box); + } + return TRUE; + default: + return TRUE; + } +} -static -gboolean +static gboolean toggled_cb(GtkWidget *widget, GdkEventButton *event, PidginStatusBox *box) { - if (!box->popup_in_progress) - pidgin_status_box_popup (box); - else - pidgin_status_box_popdown(box); -return TRUE; + if (!box->popup_in_progress) + pidgin_status_box_popup (box); + else + pidgin_status_box_popdown(box); + return TRUE; } static void @@ -1775,6 +1794,8 @@ g_signal_connect(G_OBJECT(status_box->toggle_button), "button-release-event", G_CALLBACK(button_released_cb), status_box); #endif + g_signal_connect(G_OBJECT(status_box->toggle_button), "key-press-event", + G_CALLBACK(toggle_key_press_cb), status_box); g_signal_connect(G_OBJECT(status_box->toggle_button), "button-press-event", G_CALLBACK(toggled_cb), status_box); g_signal_connect(G_OBJECT(buffer), "changed", G_CALLBACK(imhtml_changed_cb), status_box);