Electron 1.4.15 でフレームやタイトルバーのないウィンドウを使ったWindows/Mac兼用のデスクトップアプリケーションを作っています。(frame: false)
フレームのないウィンドウをマウスで移動させる場合、一般的には -webkit-app-region: drag を使って行うことになるかと思いますが、Windows ではコンテキストメニューとの併用ができなくなるため自分でマウスの座標を拾って実装することにしました。
移動処理は次のようにしました。
Javascript
1var self = this; 2this.browserWindow = remote.getCurrentWindow(); 3 4window.addEventListener('mousedown', function(e){ 5 if(e.button != 0) return; 6 self.mouseX = e.clientX; 7 self.mouseY = e.clientY; 8 self.dragging = true; 9}); 10 11window.addEventListener('mousemove', function(e){ 12 if(!self.dragging || e.button != 0) return; 13 var x = e.screenX - self.mouseX; 14 var y = e.screenY - self.mouseY; 15 self.browserWindow.setPosition(x, y); 16}); 17 18window.addEventListener('mouseup', function(e){ 19 if(e.button != 0) return; 20 self.dragging = false; 21});
一応移動はできるのですが Mac(OS X 10.11) で実行すると別のアプリケーションのウィンドウがアクティブのときにドラッグ操作を行おうとしても無反応で、一旦クリックしてアクティブな状態にしてからでないとドラッグ操作に反応しません。
常に最前面に表示する状態ならちゃんと反応するので、何らかの方法で browserWindow.focus() することで解消できるのかもしれませんが何か良い方法は無いでしょうか?
あなたの回答
tips
プレビュー