aboutsummaryrefslogtreecommitdiff
path: root/niri-config/src/debug.rs
blob: d69dd2bf2d69dc1701ed6cc0482bc040989d2996 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
use std::path::PathBuf;

use crate::utils::{Flag, MergeWith};

#[derive(Debug, Default, PartialEq)]
pub struct Debug {
    pub preview_render: Option<PreviewRender>,
    pub dbus_interfaces_in_non_session_instances: bool,
    pub wait_for_frame_completion_before_queueing: bool,
    pub enable_overlay_planes: bool,
    pub disable_cursor_plane: bool,
    pub disable_direct_scanout: bool,
    pub keep_max_bpc_unchanged: bool,
    pub restrict_primary_scanout_to_matching_format: bool,
    pub render_drm_device: Option<PathBuf>,
    pub ignored_drm_devices: Vec<PathBuf>,
    pub force_pipewire_invalid_modifier: bool,
    pub emulate_zero_presentation_time: bool,
    pub disable_resize_throttling: bool,
    pub disable_transactions: bool,
    pub keep_laptop_panel_on_when_lid_is_closed: bool,
    pub disable_monitor_names: bool,
    pub strict_new_window_focus_policy: bool,
    pub honor_xdg_activation_with_invalid_serial: bool,
    pub deactivate_unfocused_windows: bool,
    pub skip_cursor_only_updates_during_vrr: bool,
}

#[derive(knuffel::Decode, Debug, Default, PartialEq)]
pub struct DebugPart {
    #[knuffel(child, unwrap(argument))]
    pub preview_render: Option<PreviewRender>,
    #[knuffel(child)]
    pub dbus_interfaces_in_non_session_instances: Option<Flag>,
    #[knuffel(child)]
    pub wait_for_frame_completion_before_queueing: Option<Flag>,
    #[knuffel(child)]
    pub enable_overlay_planes: Option<Flag>,
    #[knuffel(child)]
    pub disable_cursor_plane: Option<Flag>,
    #[knuffel(child)]
    pub disable_direct_scanout: Option<Flag>,
    #[knuffel(child)]
    pub keep_max_bpc_unchanged: Option<Flag>,
    #[knuffel(child)]
    pub restrict_primary_scanout_to_matching_format: Option<Flag>,
    #[knuffel(child, unwrap(argument))]
    pub render_drm_device: Option<PathBuf>,
    #[knuffel(children(name = "ignore-drm-device"), unwrap(argument))]
    pub ignored_drm_devices: Vec<PathBuf>,
    #[knuffel(child)]
    pub force_pipewire_invalid_modifier: Option<Flag>,
    #[knuffel(child)]
    pub emulate_zero_presentation_time: Option<Flag>,
    #[knuffel(child)]
    pub disable_resize_throttling: Option<Flag>,
    #[knuffel(child)]
    pub disable_transactions: Option<Flag>,
    #[knuffel(child)]
    pub keep_laptop_panel_on_when_lid_is_closed: Option<Flag>,
    #[knuffel(child)]
    pub disable_monitor_names: Option<Flag>,
    #[knuffel(child)]
    pub strict_new_window_focus_policy: Option<Flag>,
    #[knuffel(child)]
    pub honor_xdg_activation_with_invalid_serial: Option<Flag>,
    #[knuffel(child)]
    pub deactivate_unfocused_windows: Option<Flag>,
    #[knuffel(child)]
    pub skip_cursor_only_updates_during_vrr: Option<Flag>,
}

impl MergeWith<DebugPart> for Debug {
    fn merge_with(&mut self, part: &DebugPart) {
        merge!(
            (self, part),
            dbus_interfaces_in_non_session_instances,
            wait_for_frame_completion_before_queueing,
            enable_overlay_planes,
            disable_cursor_plane,
            disable_direct_scanout,
            keep_max_bpc_unchanged,
            restrict_primary_scanout_to_matching_format,
            force_pipewire_invalid_modifier,
            emulate_zero_presentation_time,
            disable_resize_throttling,
            disable_transactions,
            keep_laptop_panel_on_when_lid_is_closed,
            disable_monitor_names,
            strict_new_window_focus_policy,
            honor_xdg_activation_with_invalid_serial,
            deactivate_unfocused_windows,
            skip_cursor_only_updates_during_vrr,
        );

        merge_clone_opt!((self, part), preview_render, render_drm_device);

        self.ignored_drm_devices
            .extend(part.ignored_drm_devices.iter().cloned());
    }
}

#[derive(knuffel::DecodeScalar, Debug, Clone, Copy, PartialEq, Eq)]
pub enum PreviewRender {
    Screencast,
    ScreenCapture,
}