/jds/bin/diff -uprN gnome-settings-daemon-2.25.3.old/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c gnome-settings-daemon-2.25.3/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c --- gnome-settings-daemon-2.25.3.old/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c 2009-01-13 15:26:10.510762000 +0000 +++ gnome-settings-daemon-2.25.3/plugins/a11y-keyboard/gsd-a11y-keyboard-plugin.c 2009-01-13 15:27:08.195002000 +0000 @@ -77,8 +77,12 @@ impl_activate (GnomeSettingsPlugin *plug error = NULL; res = gsd_a11y_keyboard_manager_start (GSD_A11Y_KEYBOARD_PLUGIN (plugin)->priv->manager, &error); if (! res) { + if (error != NULL) { g_warning ("Unable to start a11y_keyboard manager: %s", error->message); g_error_free (error); + } else { + g_warning ("Unable to start a11y_keyboard manager."); + } } } /jds/bin/diff -uprN gnome-settings-daemon-2.25.3.old/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c gnome-settings-daemon-2.25.3/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c --- gnome-settings-daemon-2.25.3.old/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c 2009-01-13 15:26:10.509436000 +0000 +++ gnome-settings-daemon-2.25.3/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c 2009-01-13 15:33:22.384687000 +0000 @@ -655,7 +655,8 @@ ax_slowkeys_warning_post (GsdA11yKeyboar static gboolean ax_stickykeys_warning_post_bubble (GsdA11yKeyboardManager *manager, - gboolean enabled) + gboolean enabled, + gboolean key_pressed) { #ifdef HAVE_LIBNOTIFY gboolean res; @@ -666,11 +667,17 @@ ax_stickykeys_warning_post_bubble (GsdA1 title = enabled ? _("Do you want to activate Sticky Keys?") : _("Do you want to deactivate Sticky Keys?"); - message = enabled ? - _("You just pressed the Shift key 5 times in a row. This is the shortcut " - "for the Sticky Keys feature, which affects the way your keyboard works.") : - _("You just pressed two keys at once, or pressed the Shift key 5 times in a row. " - "This turns off the Sticky Keys feature, which affects the way your keyboard works."); + + if (enabled) { + message = _("You just pressed the Shift key 5 times in a row. This is the shortcut " + "for the Sticky Keys feature, which affects the way your keyboard works."); + } else if (key_pressed) { + message = _("You just pressed two keys at once, or pressed the Shift key 5 times in a row. " + "This turns off the Sticky Keys feature, which affects the way your keyboard works."); + } else { + message = _("Sticky Keys have not been used for a while. This inactivity turns off " + "the Sticky Keys feature, which affects the way your keyboard works."); + } if (manager->priv->status_icon == NULL || ! gtk_status_icon_is_embedded (manager->priv->status_icon)) { return FALSE; @@ -731,7 +738,8 @@ ax_stickykeys_warning_post_bubble (GsdA1 static void ax_stickykeys_warning_post_dialog (GsdA11yKeyboardManager *manager, - gboolean enabled) + gboolean enabled, + gboolean key_pressed) { const char *title; const char *message; @@ -739,11 +747,17 @@ ax_stickykeys_warning_post_dialog (GsdA1 title = enabled ? _("Do you want to activate Sticky Keys?") : _("Do you want to deactivate Sticky Keys?"); - message = enabled ? - _("You just pressed the Shift key 5 times in a row. This is the shortcut " - "for the Sticky Keys feature, which affects the way your keyboard works.") : - _("You just pressed two keys at once, or pressed the Shift key 5 times in a row. " - "This turns off the Sticky Keys feature, which affects the way your keyboard works."); + + if (enabled) { + message = _("You just pressed the Shift key 5 times in a row. This is the shortcut " + "for the Sticky Keys feature, which affects the way your keyboard works."); + } else if (key_pressed) { + message = _("You just pressed two keys at once, or pressed the Shift key 5 times in a row. " + "This turns off the Sticky Keys feature, which affects the way your keyboard works."); + } else { + message = _("Sticky Keys have not been used for a while. This inactivity turns off " + "the Sticky Keys feature, which affects the way your keyboard works."); + } if (manager->priv->stickykeys_alert != NULL) { gtk_widget_show (manager->priv->stickykeys_alert); @@ -788,19 +802,21 @@ ax_stickykeys_warning_post_dialog (GsdA1 static void ax_stickykeys_warning_post (GsdA11yKeyboardManager *manager, - gboolean enabled) + gboolean enabled, + gboolean key_pressed) { manager->priv->stickykeys_shortcut_val = enabled; /* alway try to show something */ - if (! ax_stickykeys_warning_post_bubble (manager, enabled)) { - ax_stickykeys_warning_post_dialog (manager, enabled); + if (! ax_stickykeys_warning_post_bubble (manager, enabled, key_pressed)) { + ax_stickykeys_warning_post_dialog (manager, enabled, key_pressed); } } static void -set_gconf_from_server (GsdA11yKeyboardManager *manager) +set_gconf_from_server (GsdA11yKeyboardManager *manager, + gboolean key_pressed) { GConfClient *client; GConfChangeSet *cs; @@ -927,7 +943,7 @@ set_gconf_from_server (GsdA11yKeyboardMa desc->ctrls->enabled_ctrls & XkbSlowKeysMask); } else { ax_stickykeys_warning_post (manager, - desc->ctrls->enabled_ctrls & XkbStickyKeysMask); + desc->ctrls->enabled_ctrls & XkbStickyKeysMask, key_pressed); } } } @@ -952,11 +968,12 @@ cb_xkb_event_filter (GdkXEvent { XEvent *xev = (XEvent *) xevent; XkbEvent *xkbEv = (XkbEvent *) xevent; + static gboolean key_pressed = FALSE; if (xev->xany.type == (manager->priv->xkbEventBase + XkbEventCode) && xkbEv->any.xkb_type == XkbControlsNotify) { d ("XKB state changed"); - set_gconf_from_server (manager); + set_gconf_from_server (manager, key_pressed); } else if (xev->xany.type == (manager->priv->xkbEventBase + XkbEventCode) && xkbEv->any.xkb_type == XkbAccessXNotify) { if (xkbEv->accessx.detail == XkbAXN_AXKWarning) { @@ -967,6 +984,9 @@ cb_xkb_event_filter (GdkXEvent * set_gconf_from_server(). */ } + } else if (xev->xany.type == (manager->priv->xkbEventBase + XkbEventCode) && + xkbEv->any.xkb_type == XkbStateNotify) { + key_pressed = TRUE; } return GDK_FILTER_CONTINUE; @@ -1017,7 +1037,7 @@ start_a11y_keyboard_idle_cb (GsdA11yKeyb */ manager->priv->original_xkb_desc = get_xkb_desc_rec (manager); - event_mask = XkbControlsNotifyMask; + event_mask = XkbControlsNotifyMask | XkbStateNotifyMask; #ifdef DEBUG_ACCESSIBILITY event_mask |= XkbAccessXNotifyMask; /* make default when AXN_AXKWarning works */ #endif