スポンサーリンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 処理コードを追加しつつ | トップページ | あと少しなんだが »

他の方法も探しつつ

今は、Mirror-DTC for Ubuntu Ver1.4.1の開発中で、今回の開発では、Windows版に続いてトランスポーターを追加する予定なので、ここ数日は、その関連開発を行っている。今日は、転送対象ウインドウを隠すもっと良い方法が他にないかを探したりしていた。

Windows版トランスポーターでは、転送対象ウインドウを隠す方法として、ウインドウを透明化してしまう、という方法と、デスクトップ外に移動してしまう、という2つの方法を用いている。

何故、2つの方法を使っているのか、というと、デスクトップ外に移動する方法は、一見、万能なのだが、そうすると、例えば、ブラウザ上でYouTubeの動画なんかを再生していると、その再生画面が停止してしまう、という問題が発生したりするからだ。

つまり、表示領域外にあるウインドウでは、例え、ウインドウ自体の描画をキャプチャーしたとしても、OSの仕様的に、そのウインドウに対する描画が制限される場合があるため、基本的には、そういった制限がより少ないと考えられた、ウインドウを透明化する方法を使用する事にした訳だ。

しかし、そのためには、ウインドウの属性を変更する必要があるので、そういう行為を許可しないウインドウも存在したし、Edgeなんかのマイクロソフト製のアプリでは、属性変更すると、デスクトップ操作自体に弊害が及ぶ様な事象も発生した。

なので、作者的には、殆ど使うことがない、アプリ系のウインドウについては、弊害が少なそうなウインドウを移動する方法を使い、そうでない、昔ながらのWin32APIをつかうソフトのウインドウについては、透明化する事で、ウインドウを隠す格好にした訳だ。

で、Ubuntu版の場合、今の所の調査では、Ubuntu16.04LTS環境では、ウインドウはデスクトップ外にも移動可能なので、Windows版と同様に、ウインドウを隠す場合には、デスクトップ外に移動してしまおうかと考えている。

問題は、Ubuntu18.04LTS環境で、この環境では、普通にウインドウを移動する関数を使ってウインドウを移動しても、多分、ウインドウマネージャーがそれを許可せず、デスクトップに見える範囲に移動先を変更してしまう感じになっている訳だ。

このため、Ubuntu18.04LTS環境では、ウインドウを移動する方法では隠せないので、別の方法として、デスクトップを移動させてしまう方法を使おうか、と、考えている。

で、それ自体が可能な事は、既に検証できているので、このまま、その方針に従ってコーディングを進めても良いかもしれないのだが、デスクトップを移動する、という方法は、Windows版と比べると、少し問題となる場合もある訳だ。

具体的には、ユーザーは、そのデスクトップに移動できるので、そのデスクトップに移動されてしまうと、隠している筈のウインドウが普通に操作できてしまう。

と、言うことで、今日は、Ubuntu18.04LTS環境でウインドウを隠す方法として、他に何か良い方法はないかなあ、と、探してみていた訳だ。

しかし、今の所、見つからないので、Ubuntu18.04LTS環境では、やはり、デスクトップを移動させる方法を使う事になるのかもしれない。

ちなみに、ウインドウを隠したいなら、普通に、最小化してしまえば良いだろう、という声も聴こえてきそうなのだが、最小化した場合、ウインドウの描画は行われなくなる。

なので、ウインドウを隠すことではなく、ウインドウの描画内容を別PCのモニターに転送する事を目的とするトランスポーターでは、そういう方法は使えない訳だ。

同様に、X-Windowでは、マップをやめてしまえば、非表示状態になるのだが、この場合には、ウインドウのキャプチャーも出来なくなるので、やはり、そういう方法も使えない。

で、Ubuntu環境で使われているウインドウマネージャーに司令を送れば、指定ウインドウを透明化する事は可能だ。

つまり、Windows版と同様に、ウインドウを透明化する事で、見えなくする事は可能なのだが、Ubuntu環境の場合、完全に透明化しても、マウス/キーボードイベントは取得されてしまう訳だ。

なので、単に透明化するだけでは不十分で、マウスイベントなんかについても透過させる必要があるのだが、これについても、クライアント領域については、設定は可能だ。

具体的には、XSelectInput関数でマウスイベントを取らない様に設定すれば、マウスイベントも透過するので、良い感じになるのだが、残念ながら、この関数で指定しても、ウインドウマネージャー管轄になる? タイトルバーについては、透過扱いにはならない感じな訳だ。

と、言うことで、タイトルバーを消してしまえれば、何とかなるかもしれないのだが、今日の時点では、まだ、上記の問題が残っているので、ウインドウの透明化によりウインドウを隠す方法は使えない状況だ。

しかしまあ、もう少し調査すれば、何とかなるかもしれないので、多分、明日も、そんな感じの調査をしている筈だ。

 

« 処理コードを追加しつつ | トップページ | あと少しなんだが »

2019年8月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google