Closed ma8ma closed 3 months ago
JDimを多重起動したときは起動中のウインドウをデスクトップ画面の最前面に表示する
背景や動機
GNOMEをはじめとするGTKアプリケーションはプログラムが多重起動しないように一意性の管理が導入されています。 JDimはGTKの機能を使っていませんが独自に多重起動の管理を実装しています。
現状のJDimは一般的なGTKアプリと起動処理に違いがあり他のアプリと同じように扱うことができません。
JDimにはマルチモード(コマンドライン引数 --multiまたは-m)がありメインウインドウを複数表示することができます。 明示的にマルチモードを指定しない場合でも 多重起動したときに確認ダイアログを表示してウインドウを追加するか、または何もしないか選択する仕組みになっています。
--multi
-m
しかし、ダイアログを表示して起動を一時中断するのは不意の出来事なので 自動的にマルチモード(多重起動)にするか、または起動中のウインドウをデスクトップ画面の最前面に表示するほうが自然な動作と感じます。
解決方法
マルチモード(-m)を指定しない場合は多重起動したときに確認ダイアログを表示するのを止めて 一般的なGTKアプリの起動と同じように起動中のウインドウをデスクトップ画面の最前面に表示するように変更します。
現在の挙動はバグではありませんがGNOMEやGTKのやり方に合せたほうが使い勝手が良くなると考えています。
代替案
確認ダイアログに「今後表示しない」オプションを追加してチェックされたら起動処理を変更してウインドウを最前面に表示する 現在の挙動を維持する仕組みがあれば互換性の問題は小さくなります。 しかし、切り替えたらおそらく変更しないオプションを追加して機能やソースコードが複雑になるのは避けたいです。
多重起動したときはwebブラウザのように新しいウインドウを表示する または 多重起動したときは自動的にマルチモードにする ウインドウを複数表示する使い方がイメージしにくいためボツ案にしました。
追加の情報
「ウインドウを最前面に表示する」動作は gtk_window_present() のAPIを使う予定ですが デスクトップ環境によって挙動が異なる可能性があります。
gtk_window_present()
多重起動のオンラインマニュアル https://jdimproved.github.io/JDim/start/#multiple
5chのレス https://mao.5ch.net/test/read.cgi/linux/1640504277/344 https://mao.5ch.net/test/read.cgi/linux/1640504277/412
gtk_window_present()が上手く動作するか分からない状態でしたが、GTKの情報を集めたところ同じような問題にあった方がいました。
どうやらgtk_window_present_with_time()とg_get_monotonic_time()を組み合わせると期待通り動作するようです。
gtk_window_present_with_time()
g_get_monotonic_time()
JDimを多重起動したときは起動中のウインドウをデスクトップ画面の最前面に表示する
背景や動機
GNOMEをはじめとするGTKアプリケーションはプログラムが多重起動しないように一意性の管理が導入されています。 JDimはGTKの機能を使っていませんが独自に多重起動の管理を実装しています。
現状のJDimは一般的なGTKアプリと起動処理に違いがあり他のアプリと同じように扱うことができません。
JDimにはマルチモード(コマンドライン引数
--multi
または-m
)がありメインウインドウを複数表示することができます。 明示的にマルチモードを指定しない場合でも 多重起動したときに確認ダイアログを表示してウインドウを追加するか、または何もしないか選択する仕組みになっています。しかし、ダイアログを表示して起動を一時中断するのは不意の出来事なので 自動的にマルチモード(多重起動)にするか、または起動中のウインドウをデスクトップ画面の最前面に表示するほうが自然な動作と感じます。
解決方法
マルチモード(
-m
)を指定しない場合は多重起動したときに確認ダイアログを表示するのを止めて 一般的なGTKアプリの起動と同じように起動中のウインドウをデスクトップ画面の最前面に表示するように変更します。現在の挙動はバグではありませんがGNOMEやGTKのやり方に合せたほうが使い勝手が良くなると考えています。
代替案
確認ダイアログに「今後表示しない」オプションを追加してチェックされたら起動処理を変更してウインドウを最前面に表示する 現在の挙動を維持する仕組みがあれば互換性の問題は小さくなります。 しかし、切り替えたらおそらく変更しないオプションを追加して機能やソースコードが複雑になるのは避けたいです。
多重起動したときはwebブラウザのように新しいウインドウを表示する または 多重起動したときは自動的にマルチモードにする ウインドウを複数表示する使い方がイメージしにくいためボツ案にしました。
追加の情報
「ウインドウを最前面に表示する」動作は
gtk_window_present()
のAPIを使う予定ですが デスクトップ環境によって挙動が異なる可能性があります。多重起動のオンラインマニュアル https://jdimproved.github.io/JDim/start/#multiple
5chのレス https://mao.5ch.net/test/read.cgi/linux/1640504277/344 https://mao.5ch.net/test/read.cgi/linux/1640504277/412