St: don't attempt to give focus to non reactive actors

Non reactive actors don't expect to be interacted with, and thus
should not get keyboard focus.

https://bugzilla.gnome.org/show_bug.cgi?id=619955
This commit is contained in:
Giovanni Campagna 2012-07-18 12:19:55 +02:00
parent a29507e452
commit 26d3b1929e
5 changed files with 8 additions and 9 deletions

View File

@ -165,7 +165,6 @@ const NetworkSecretDialog = new Lang.Class({
} }
this._okButton.button.reactive = valid; this._okButton.button.reactive = valid;
this._okButton.button.can_focus = valid;
}, },
_onOk: function() { _onOk: function() {

View File

@ -134,7 +134,6 @@ const PopupBaseMenuItem = new Lang.Class({
this.sensitive = sensitive; this.sensitive = sensitive;
this.actor.reactive = sensitive; this.actor.reactive = sensitive;
this.actor.can_focus = sensitive;
if (sensitive) if (sensitive)
this.actor.remove_style_pseudo_class('insensitive'); this.actor.remove_style_pseudo_class('insensitive');
@ -773,12 +772,10 @@ const PopupSwitchMenuItem = new Lang.Class({
this._statusLabel.text = text; this._statusLabel.text = text;
this._statusBin.child = this._statusLabel; this._statusBin.child = this._statusLabel;
this.actor.reactive = false; this.actor.reactive = false;
this.actor.can_focus = false;
this.actor.accessible_role = Atk.Role.MENU_ITEM; this.actor.accessible_role = Atk.Role.MENU_ITEM;
} else { } else {
this._statusBin.child = this._switch.actor; this._statusBin.child = this._switch.actor;
this.actor.reactive = true; this.actor.reactive = true;
this.actor.can_focus = true;
this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM; this.actor.accessible_role = Atk.Role.CHECK_MENU_ITEM;
} }
this.checkAccessibleState(); this.checkAccessibleState();
@ -1891,7 +1888,7 @@ const RemoteMenu = new Lang.Class({
})); }));
} }
item.actor.reactive = item.actor.can_focus = action.enabled; item.actor.reactive = action.enabled;
if (action.enabled) if (action.enabled)
item.actor.remove_style_pseudo_class('insensitive'); item.actor.remove_style_pseudo_class('insensitive');
else else
@ -2027,7 +2024,7 @@ const RemoteMenu = new Lang.Class({
if (action.items.length) { if (action.items.length) {
for (let i = 0; i < action.items.length; i++) { for (let i = 0; i < action.items.length; i++) {
let item = action.items[i]; let item = action.items[i];
item.actor.reactive = item.actor.can_focus = action.enabled; item.actor.reactive = action.enabled;
if (action.enabled) if (action.enabled)
item.actor.remove_style_pseudo_class('insensitive'); item.actor.remove_style_pseudo_class('insensitive');

View File

@ -195,7 +195,8 @@ st_bin_navigate_focus (StWidget *widget,
StBinPrivate *priv = ST_BIN (widget)->priv; StBinPrivate *priv = ST_BIN (widget)->priv;
ClutterActor *bin_actor = CLUTTER_ACTOR (widget); ClutterActor *bin_actor = CLUTTER_ACTOR (widget);
if (st_widget_get_can_focus (widget)) if (clutter_actor_get_reactive (bin_actor) &&
st_widget_get_can_focus (widget))
{ {
if (from && clutter_actor_contains (bin_actor, from)) if (from && clutter_actor_contains (bin_actor, from))
return FALSE; return FALSE;

View File

@ -285,7 +285,8 @@ st_entry_navigate_focus (StWidget *widget,
if (from == priv->entry) if (from == priv->entry)
return FALSE; return FALSE;
else if (st_widget_get_can_focus (widget)) else if (clutter_actor_get_reactive (CLUTTER_ACTOR (widget)) &&
st_widget_get_can_focus (widget))
{ {
clutter_actor_grab_key_focus (priv->entry); clutter_actor_grab_key_focus (priv->entry);
return TRUE; return TRUE;

View File

@ -1880,7 +1880,8 @@ st_widget_real_navigate_focus (StWidget *widget,
while (focus_child && clutter_actor_get_parent (focus_child) != widget_actor) while (focus_child && clutter_actor_get_parent (focus_child) != widget_actor)
focus_child = clutter_actor_get_parent (focus_child); focus_child = clutter_actor_get_parent (focus_child);
if (widget->priv->can_focus) if (clutter_actor_get_reactive (widget_actor) &&
widget->priv->can_focus)
{ {
if (!focus_child) if (!focus_child)
{ {