mirror of https://github.com/vector-im/riot-web
Merge pull request #4666 from matrix-org/t3chguy/image-view-focuslock
Apply FocusLock to ImageView to capture Escape handlingpull/21833/head
commit
030cc5cdea
|
@ -15,8 +15,6 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
||||||
|
@ -27,6 +25,7 @@ import AccessibleButton from "./AccessibleButton";
|
||||||
import Modal from "../../../Modal";
|
import Modal from "../../../Modal";
|
||||||
import * as sdk from "../../../index";
|
import * as sdk from "../../../index";
|
||||||
import {Key} from "../../../Keyboard";
|
import {Key} from "../../../Keyboard";
|
||||||
|
import FocusLock from "react-focus-lock";
|
||||||
|
|
||||||
export default class ImageView extends React.Component {
|
export default class ImageView extends React.Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
|
@ -50,16 +49,6 @@ export default class ImageView extends React.Component {
|
||||||
this.state = { rotationDegrees: 0 };
|
this.state = { rotationDegrees: 0 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: keyboard shortcuts for managing dialogs should be done by the modal
|
|
||||||
// dialog base class somehow, surely...
|
|
||||||
componentDidMount() {
|
|
||||||
document.addEventListener("keydown", this.onKeyDown);
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillUnmount() {
|
|
||||||
document.removeEventListener("keydown", this.onKeyDown);
|
|
||||||
}
|
|
||||||
|
|
||||||
onKeyDown = (ev) => {
|
onKeyDown = (ev) => {
|
||||||
if (ev.key === Key.ESCAPE) {
|
if (ev.key === Key.ESCAPE) {
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
|
@ -195,7 +184,14 @@ export default class ImageView extends React.Component {
|
||||||
const effectiveStyle = {transform: `rotate(${rotationDegrees}deg)`, ...style};
|
const effectiveStyle = {transform: `rotate(${rotationDegrees}deg)`, ...style};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mx_ImageView">
|
<FocusLock
|
||||||
|
returnFocus={true}
|
||||||
|
lockProps={{
|
||||||
|
onKeyDown: this.onKeyDown,
|
||||||
|
role: "dialog",
|
||||||
|
}}
|
||||||
|
className="mx_ImageView"
|
||||||
|
>
|
||||||
<div className="mx_ImageView_lhs">
|
<div className="mx_ImageView_lhs">
|
||||||
</div>
|
</div>
|
||||||
<div className="mx_ImageView_content">
|
<div className="mx_ImageView_content">
|
||||||
|
@ -231,7 +227,7 @@ export default class ImageView extends React.Component {
|
||||||
</div>
|
</div>
|
||||||
<div className="mx_ImageView_rhs">
|
<div className="mx_ImageView_rhs">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</FocusLock>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue