[client] wayland: make it possible to disable fractional scaling

The method used is not guaranteed to work on all Wayland compositors,
so offer a way out. We need to support it anyways in case xdg_output
or wp_viewporter protocols are not available.
This commit is contained in:
Quantum 2021-07-31 22:57:03 -04:00 committed by Geoffrey McRae
parent b3ca872cef
commit 0ad469178a
3 changed files with 11 additions and 2 deletions

View File

@ -31,7 +31,7 @@ static void outputUpdateScale(struct WaylandOutput * node)
{ {
wl_fixed_t original = node->scale; wl_fixed_t original = node->scale;
if (!wlWm.viewporter || !node->logicalWidth || !node->logicalHeight) if (!wlWm.useFractionalScale || !wlWm.viewporter || !node->logicalWidth)
node->scale = wl_fixed_from_int(node->scaleInt); node->scale = wl_fixed_from_int(node->scaleInt);
else else
{ {

View File

@ -37,6 +37,13 @@ static struct Option waylandOptions[] =
.type = OPTION_TYPE_BOOL, .type = OPTION_TYPE_BOOL,
.value.x_bool = true, .value.x_bool = true,
}, },
{
.module = "wayland",
.name = "fractionScale",
.description = "Enable fractional scale",
.type = OPTION_TYPE_BOOL,
.value.x_bool = true,
},
{0} {0}
}; };
@ -67,6 +74,7 @@ static bool waylandInit(const LG_DSInitParams params)
wl_list_init(&wlWm.surfaceOutputs); wl_list_init(&wlWm.surfaceOutputs);
wlWm.warpSupport = option_get_bool("wayland", "warpSupport"); wlWm.warpSupport = option_get_bool("wayland", "warpSupport");
wlWm.useFractionalScale = option_get_bool("wayland", "fractionScale");
wlWm.display = wl_display_connect(NULL); wlWm.display = wl_display_connect(NULL);
wlWm.width = params.w; wlWm.width = params.w;

View File

@ -174,6 +174,7 @@ struct WaylandDSState
struct zxdg_output_manager_v1 * xdgOutputManager; struct zxdg_output_manager_v1 * xdgOutputManager;
struct wl_list outputs; // WaylandOutput::link struct wl_list outputs; // WaylandOutput::link
struct wl_list surfaceOutputs; // SurfaceOutput::link struct wl_list surfaceOutputs; // SurfaceOutput::link
bool useFractionalScale;
struct wl_list poll; // WaylandPoll::link struct wl_list poll; // WaylandPoll::link
struct wl_list pollFree; // WaylandPoll::link struct wl_list pollFree; // WaylandPoll::link