こんにちは。
Curlアプリをデュアルディスプレイにて利用したときの挙動について質問です。
「画面2」に設定した方の画面で右クリックしたのですが
「画面1」に設定した方に右クリックのコンテキストメニューが表示されてしまいます。
デュアルディスプレイに対応していない、ということでしょうか。
または、何か設定漏れでしょうか。
お分かりの方いらっしゃいますか?
下記のような簡単なコードだと、各View内を右クリックした際は
それぞれのディスプレイのView上に表示されるようですが、
問題のアプリはどんな感じのコードでしょうか?
Code:
{curl 8.0 applet}
{curl-file-attributes character-encoding = "utf8"}
{import Display from CURL.GRAPHICS.DISPLAY}
{import * from CURL.GUI.BASE}
{define-proc {create-view no:int, d:Display}:View
def v = {View
{RectangleGraphic
width=50mm, height=20mm,
{context-popup
menu-pane =
{MenuPane
{MenuAction
label="Display" & no
}
}
}
},
visibility = "normal",
{on WindowClose do
{exit}
}
}
{v.set-window-position d.x, d.y}
{return v}
}
{View
{Frame
{CommandButton
label = "Create Views",
{on Action at v:Visual do
let no:int = 0
{for d in {Display.get-displays} do
{inc no}
{create-view no, d}
}
}
}
},
visibility = "normal",
{on WindowClose do
{exit}
}
}
dyoshidaさま
ありがとうございます!
該当アプリがどういう作りになっているか、は確認中です・・。
が、添付してくださった現象と同じだと思います。
ところが、該当アプリも、添付してくださったソースも、うまくいくときといかないときがあります。
画面1でViewを作って画面2へ移動させ、右クリックしても、ちゃんと画面2のマウス位置でコンテキストメニューが表示されます。
”まれに”画面2で右クリックすると画面1にコンテキストメニューが表示される。という状況です。
ブラウザのキャッシュ等を削除しても状況変わらず問題ないときがほとんどです。
何が原因なのかつかめず。
そちらの環境では、添付してくださったソースで
毎回Viewを作成した方の画面にコンテキストメニューが表示されますか?
何度か確認していると
アプレット起動中に画面構成(2画面拡張したり、画面1を両ディスプレイに表示したり)すると
この現象が起きるようです。
そして、一度発生するとアプレットの再起動が必要のようです。
「起動時の画面構成だと正しく動く」わけではなくて、「起動中に一度でも画面構成を変更すると、アウト」
と判断しました。
認識あってますでしょうか?
こちらは2ディスプレイの環境で5回くらい試行したかぎりでは、コンテキストメニューは右クリックしたウィンドウの
ディスプレイ側(マウスカーソルのそば)に表示されていました。
アプレット起動後にPCのディスプレイ構成設定を変更しても、変更前の値で動作するというのはありそうですね。
公開されているオープンコントロールのコードを見ても座標計算を行っているところにたどり着けませんでしたが
Curlがディスプレイの構成をアプレットの起動時に生成されるどこかのクラスオブジェクトで管理しており、
生成時(または初回情報取得時)にOSから取得した情報を保持しているならokmさんが判断されたような
動作になるような気がします。
dyoshidaさま
ご丁寧にご確認いただきありがとうございます。
>Curlがディスプレイの構成をアプレットの起動時に生成されるどこかのクラスオブジェクトで管理しており、>生成時(または初回情報取得時)にOSから取得した情報を保持しているなら
力技で実践してみただけですのできちんと調査してはいませんが、そんな雰囲気を感じております。
ご指摘いただいたViewの動きから色々と推測することができました。
ありがとうございます!
Curlの中の人、実際のところどうなのか、公開できるならばここにコメントいただけると幸いです・・。