Ubuntu 18.04デスクトップとデフォルトの画像ビューアソフトウェアを使用しています。
特定のサイズ(今日では960x960)の画像を開くと、奇妙で本当にイライラするケースがあり、ウィンドウは常にに表示されますsecondary画面の左上にトップバー(ドラッグに使用するもの、名前を覚えていません)がこのように隠れている 私は1組の画面を使用しています。左側がプライマリー、右側がセカンダリーです。サイドバーはセカンダリ画面にあります。
奇妙なのは、400x400 または1920x1200 で結構です。
だから私の質問は、トップバーを失うことなく現在のモニターでそれを開くことは可能ですか?
私たちは問題の原因が何であるかを推測することしかできませんが、私は実際の修正の手がかりはありません。ただし、回避策を使用して、不適切なウィンドウの配置を修正できます。
小さなデーモンのようなプロセスは、 "= negative"配置(xまたはyのいずれか)をモニターに表示し、対応するモニターのx = 80px、y = 80pxの位置に移動します。
これは、新しく作成されたウィンドウのSEコーナーを調べることによって行われます。 SEは、完全に配置されているはずのモニターであると想定されます。次に、ウィンドウのNWコーナーの配置が、トリガー(ウィンドウをより適切な位置に移動)にするか、ウィンドウをそのままにします。これは、モニターSEがオンになっている状態で、左側または上方に配置しないでください。
他のすべての場合では、ウィンドウは完全にそのままになります。ご了承ください:
#!/usr/bin/env python3
import gi
gi.require_version("Gtk", "3.0")
gi.require_version("Wnck", "3.0")
from gi.repository import Gtk, Wnck, Gdk
class WatchOut:
def __init__(self):
self.wnckscr = Wnck.Screen.get_default()
self.gdkdsp = Gdk.Display.get_default()
self.wnckscr.connect("window_opened", self.checkonwin)
Gtk.main()
def actoncreate(self, window):
wingeo = window.get_geometry();
# get window geo, take SE as reference, abs numbers
nw_x = wingeo.xp
nw_y = wingeo.yp
se_x = nw_x + wingeo.widthp
se_y = nw_y + wingeo.heightp
# get scale
defmon = self.gdkdsp.get_primary_monitor()
scale = defmon.get_scale_factor()
# get monitor with window, gdk uses scaled(!)
currmon = self.gdkdsp.get_monitor_at_point(se_x/scale, se_y/scale)
# gdk uses scaled numbers!
mongeo = currmon.get_geometry()
mondata = [n * scale for n in [
mongeo.x, mongeo.y, mongeo.width, mongeo.height
]]
# check if action is needed, calc in abs numbers!
# if winx < monitorx -and/or- winy < monitory, move window
if any([nw_x < mondata[0], nw_y < mondata[1]]):
self.move(
window, mondata[0] + 80, mondata[1] + 80, 700, 700
)
def move(self, win, x, y, w, h):
g = Wnck.WindowGravity.NORTHWEST
flags = Wnck.WindowMoveResizeMask.X | \
Wnck.WindowMoveResizeMask.Y | \
Wnck.WindowMoveResizeMask.WIDTH | \
Wnck.WindowMoveResizeMask.HEIGHT
win.set_geometry(g, flags, x, y, w, h)
def checkonwin(self, scr, newwin):
if newwin.get_window_type () == Wnck.WindowType.NORMAL:
self.actoncreate(newwin)
WatchOut()
watchout.py
として保存します次のコマンドで端末からテスト実行します。
python3 /path/to/watchout.py
あなたの質問を見て、かなり予測可能なはずの不適切な配置でアプリケーションを開くようにしてください。
すべてが正常に機能する場合は、それをスタートアップアプリケーションに追加します。おそらく、プロセスを開始する前に小さな中断を設定して、完了していないデスクトップの読み込みで中断しないようにする必要があります。
2つのモニターが上部に並んでいないときにウィンドウがトリミングされる問題が報告されています。
上部に沿って完全に並んでいることを確認するには、xrandr
を使用します。
$ xrandr | grep " connected" | grep "+0"
HDMI-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 1107mm x 623mm
DP-1-1 connected 3840x2160+1920+0 (normal left inverted right x axis y axis) 1600mm x 900mm
+0
両方のモニターが上に揃っていることを確認します。