【问题标题】:How to make Chrome scale correctly in full screen mode in Xmonad如何在 Xmonad 中使 Chrome 在全屏模式下正确缩放
【发布时间】:2017-03-18 10:49:58
【问题描述】:

当我使用 F11 键进入全屏模式,或单击 Youtube 或 Netflix 中的全屏按钮时,Chrome 似乎会缩放页面以适应屏幕大小,并且页面将被裁剪到其包含的窗口。但是,在使用 mod + space 切换布局后,它会缩放以正确适应包含窗口。

第一次进入全屏模式时,如何使 Chrome 的缩放适应其窗口而不是整个屏幕?

我尝试了XMonad.Hooks.EwmhDesktopsXMonad.Layout.Fullscreen 中的函数,但仍然找不到方法。

我在 Arch 上使用 Google Chrome 57.0.2987.98 和 xmonad 0.13。谢谢!

【问题讨论】:

  • 包含您的配置会很有帮助

标签: google-chrome haskell archlinux xmonad


【解决方案1】:

我的解决方案是使用来自EWMHfullscreenEventHook 的修改版本。

fullscreenEventHook :: Event -> Bool -> X All
fullscreenEventHook (ClientMessageEvent _ _ _ dpy win typ (action:dats)) isChrome = do
  wmstate <- getAtom "_NET_WM_STATE"
  fullsc <- getAtom "_NET_WM_STATE_FULLSCREEN"
  wstate <- fromMaybe [] `fmap` getProp32 wmstate win

  let isFull = fromIntegral fullsc `elem` wstate

      -- Constants for the _NET_WM_STATE protocol:
      remove = 0
      add = 1
      toggle = 2
      ptype = 4 -- The atom property type for changeProperty
      chWstate f = io $ changeProperty32 dpy win wmstate ptype propModeReplace (f wstate)

      uglyChromeHack x = do
        when (not isChrome) x
        when isChrome $ windows W.swapUp >> windows W.swapDown

  when (typ == wmstate && fi fullsc `elem` dats) $ do
    when (action == add || (action == toggle && not isFull)) $ do
      chWstate (fi fullsc:)
      uglyChromeHack $ windows $ W.float win $ W.RationalRect 0 0 1 1
    when (action == remove || (action == toggle && isFull)) $ do
      chWstate $ delete (fi fullsc)
      uglyChromeHack $ windows $ W.sink win

  return $ All True

fullscreenEventHook _ _ = return $ All True


butNotChrome :: Event -> X All
butNotChrome e@(ClientMessageEvent _ _ _ _ win _ _) = do
  isChrome <- runQuery (appName =? "google-chrome") win
  fullscreenEventHook e isChrome
butNotChrome _ = return $ All True

windows W.swapUp &gt;&gt; windows W.swapDown 这个位似乎对 chrome 来说已经够用力了。

【讨论】:

    【解决方案2】:

    这个问题也困扰了我一段时间。我在我的 xmonad 配置文件中尝试了各种组合,但没有运气。但我最近发现了“Vivaldi”,一个基于 Chromium 引擎的浏览器,由 Opera 浏览器的前 CEO 领导。它通过使用“切换 UI”选项(默认情况下为 Ctrl-F11)完全实现您想要的。

    【讨论】:

    • 感谢您的建议。 Vivaldi 中的这个“切换 UI”功能是一个很好的解决方法。我只希望它也能处理 Youtube 或 Vimeo 等网站上的全屏按钮。
    【解决方案3】:

    您需要将以下内容添加到您的配置 (xmonad.hs):

    import XMonad.Hooks.EwmhDesktops
    main = xmonad $ ewmh (yourExistingConfigValueGoesHereExample { handleEventHook =
           handleEventHook def <+> fullscreenEventHook })
    

    更多信息可以在这里找到:http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-EwmhDesktops.html


    这个功能也被绑定到 desktopConfig 中(xmonad 的一种合理的默认设置)。 https://hackage.haskell.org/package/xmonad-contrib-0.13/docs/XMonad-Config-Desktop.html

    【讨论】:

    • 此设置将使 XMonad 的行为与其他桌面环境或操作系统一样,并使 Chrome 适合整个屏幕,这可能是大多数人想要的。但是,我试图让 Chrome 以全屏模式停留在其窗口中,这样我们就可以在同一个屏幕上并排放置 2 个全“屏幕”Youtube 视频。
    • 这有点小技巧,但你可以使用 xbindkeys 和 xdotool 之类的东西将 F12 绑定到 (F11)+(Mod+space),因此基本上可以自动执行手动操作。
    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2021-12-23
    • 2019-10-16
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    相关资源
    最近更新 更多