-
Notifications
You must be signed in to change notification settings - Fork 438
Description
はじめまして。2~3個ほど謎な動作を見つけたので報告させて頂きます。
1.ゲーム画面でTabキーを押すとcanvasからフォーカスが外れて2度と戻らない
CSSをいじるとページ内のリンクを渡り歩けている所は確認出来ますが、
Shift+TabでもTabを押し続けてもcanvasに戻ってくることは出来ないみたいです。
Alt+TabやCtrl+Tab、Win+Tab等で切り替えをする際にうっかりTabキーを先に押してしまうと
その瞬間に戻れなくなります。人によってはフリーズと表現されているのではと思います。
2.Tabキーを押さなくてもフォーカスが外れてしまうことがある
左クリックで普通にプレイしているだけでも唐突にフォーカスが外れて(カーソルがHandになるべき所でもArrowになっちゃう)戻ってこなくなることがあります。
この時は最小化(アイコン化)して元に戻すとフォーカスが戻るのでそれほどプレイングに支障はないのですが、少しだけ気になります。
先行入力気味でクリックしていると、なりやすいような気がしています。
3.スクリーンショットの保存に失敗する
起動してプレイと放置を繰り返して長時間経つと、唐突にエラーが出るようになります。
一度このエラーが出ると、それ以降は何度カメラボタンを押しても同じエラーが出ます。
ステータスバーには
The underlying frame is no longer valid - please check the IsValid property before calling!
と表示されています。
・対応策
見よう見まねで書いてみました。努力の痕跡として見て頂けると嬉しいです。
1.ゲーム画面ではCefSharp.Wpfコントロール内のTabキーを封印する
xaml(CommonやKanColleHost等)の記述でKeyboardNavigation.TabNavigationをいじる方向で最初はやってみたんですけど、どこに書いても効いてる感じがなかったので、ここで肚をくくってCefSharpのソースをぐるぐる巡ってみました。
この辺かなと思ってWpfKeyboardHandlerを継承してみました。
KanColleHost.cs
public class HandleTabPress : WpfKeyboardHandler
{
private readonly ChromiumWebBrowser owner;
public HandleTabPress(ChromiumWebBrowser owner) : base(owner)
{
this.owner = owner;
}
public override void HandleKeyPress(KeyEventArgs e)
{
if (e.Key != Key.Tab || owner.GetMainFrame().Url != Properties.Settings.Default.KanColleUrl.ToString())
{
base.HandleKeyPress(e);
}
}
}
これを if (newBrowser != null) のスコープ内で
newBrowser.WpfKeyboardHandler = new HandleTabPress(newBrowser);
しました。
これでKanColleViewerのUI上でだけTab移動出来て、ブラウザ上では出来ないようになりました。
newってこういう使い方で良いのでしょうか。良いのかな、本当に大丈夫かと迷いつつ書きました。
2.放置
timeoutで強引にfocusさせまくるくらいの事しか思い付かず、それで良いかという判断も出来なかったので、ここはそのままにしました。
3.なんとなくエラーメッセージに従ってみる
多分コレかなーって、様子見中です。
CefBridge.cs
.FirstOrDefault(x => gameFrame.IsValid ? x.Url.Contains("/kcs2/index.php") : false);
少しでもフィードバックとしてお役に立てたら嬉しいです。
それでは失礼いたします。