package oxbow
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
Dynamic window manager for the river Wayland compositor
Install
dune-project
Dependency
Authors
Maintainers
Sources
v0.1.0.tar.gz
md5=a637acaa0e19046cd65fff733874eb97
sha512=76230cbecd7510de7a05b5d1f335915ef7b6c4aa557d8dbfd23591606618d2cfa25082d17b93f2f4b53a118d1cbf6a80e4ad51cf0f099b4921fb83d6df0c9801
doc/src/oxbow.ops/input_rules.ml.html
Source file input_rules.ml
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 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217open! Oxbow_core open! Oxbow_state open! Result.Syntax let ( |>? ) o f = Option.iter f o let apply_touchpad obj dev ~device (settings : Input_rule.Touchpad.t) = settings.tap |>? Emit.set_tap dev ~device; (settings.tap_button_map |>? function | Lrm -> Emit.set_tap_button_map dev ~device Wire.Libinput.Tap_button_map.Lrm | Lmr -> Emit.set_tap_button_map dev ~device Wire.Libinput.Tap_button_map.Lmr); settings.drag |>? Emit.set_drag dev ~device; (settings.drag_lock |>? function | Disabled -> Emit.set_drag_lock dev ~device Wire.Libinput.Drag_lock_state.Disabled | Enabled_timeout -> Emit.set_drag_lock dev ~device Wire.Libinput.Drag_lock_state.Enabled_timeout | Enabled_sticky -> Emit.set_drag_lock dev ~device Wire.Libinput.Drag_lock_state.Enabled_sticky); (settings.three_finger_drag |>? function | Disabled -> Emit.set_three_finger_drag dev ~device Wire.Libinput.Three_finger_drag_state.Disabled | Enabled_3fg -> Emit.set_three_finger_drag dev ~device Wire.Libinput.Three_finger_drag_state.Enabled_3fg | Enabled_4fg -> Emit.set_three_finger_drag dev ~device Wire.Libinput.Three_finger_drag_state.Enabled_4fg); settings.dwt |>? Emit.set_dwt dev ~device; settings.dwtp |>? Emit.set_dwtp dev ~device; (settings.click_method |>? function | None -> Emit.set_click_method dev ~device Wire.Libinput.Click_method.None | Button_areas -> Emit.set_click_method dev ~device Wire.Libinput.Click_method.Button_areas | Clickfinger -> Emit.set_click_method dev ~device Wire.Libinput.Click_method.Clickfinger); (settings.clickfinger_button_map |>? function | Lrm -> Emit.set_clickfinger_button_map dev ~device Wire.Libinput.Clickfinger_button_map.Lrm | Lmr -> Emit.set_clickfinger_button_map dev ~device Wire.Libinput.Clickfinger_button_map.Lmr ); (settings.accel_profile |>? function | None -> Emit.set_accel_profile dev ~device Wire.Libinput.Accel_profile.None | Flat -> Emit.set_accel_profile dev ~device Wire.Libinput.Accel_profile.Flat | Adaptive -> Emit.set_accel_profile dev ~device Wire.Libinput.Accel_profile.Adaptive | Custom -> Emit.set_accel_profile dev ~device Wire.Libinput.Accel_profile.Custom); settings.accel_speed |>? Emit.set_accel_speed dev ~device; settings.natural_scroll |>? Emit.set_natural_scroll dev ~device; settings.left_handed |>? Emit.set_left_handed dev ~device; settings.middle_emulation |>? Emit.set_middle_emulation dev ~device; (settings.scroll_method |>? function | No_scroll -> Emit.set_scroll_method dev ~device Wire.Libinput.Scroll_method.No_scroll | Two_finger -> Emit.set_scroll_method dev ~device Wire.Libinput.Scroll_method.Two_finger | Edge -> Emit.set_scroll_method dev ~device Wire.Libinput.Scroll_method.Edge | On_button_down -> Emit.set_scroll_method dev ~device Wire.Libinput.Scroll_method.On_button_down); (settings.send_events |>? function | Enabled -> Emit.set_send_events dev ~device Wire.Libinput.Send_events_modes.enabled | Disabled -> Emit.set_send_events dev ~device Wire.Libinput.Send_events_modes.disabled | Disabled_on_external_mouse -> Emit.set_send_events dev ~device Wire.Libinput.Send_events_modes.disabled_on_external_mouse); settings.scroll_factor |>? Emit.set_scroll_factor obj ;; let apply_mouse obj dev ~device (settings : Input_rule.Mouse.t) = (settings.accel_profile |>? function | None -> Emit.set_accel_profile dev ~device Wire.Libinput.Accel_profile.None | Flat -> Emit.set_accel_profile dev ~device Wire.Libinput.Accel_profile.Flat | Adaptive -> Emit.set_accel_profile dev ~device Wire.Libinput.Accel_profile.Adaptive | Custom -> Emit.set_accel_profile dev ~device Wire.Libinput.Accel_profile.Custom); settings.accel_speed |>? Emit.set_accel_speed dev ~device; settings.natural_scroll |>? Emit.set_natural_scroll dev ~device; settings.left_handed |>? Emit.set_left_handed dev ~device; settings.middle_emulation |>? Emit.set_middle_emulation dev ~device; (settings.scroll_method |>? function | No_scroll -> Emit.set_scroll_method dev ~device Wire.Libinput.Scroll_method.No_scroll | Two_finger -> Emit.set_scroll_method dev ~device Wire.Libinput.Scroll_method.Two_finger | Edge -> Emit.set_scroll_method dev ~device Wire.Libinput.Scroll_method.Edge | On_button_down -> Emit.set_scroll_method dev ~device Wire.Libinput.Scroll_method.On_button_down); (settings.scroll_button |>? fun pb -> Pointer_button.to_int32 pb |> Emit.set_scroll_button dev ~device); settings.scroll_button_lock |>? Emit.set_scroll_button_lock dev ~device; (settings.send_events |>? function | Enabled -> Emit.set_send_events dev ~device Wire.Libinput.Send_events_modes.enabled | Disabled -> Emit.set_send_events dev ~device Wire.Libinput.Send_events_modes.disabled | Disabled_on_external_mouse -> Emit.set_send_events dev ~device Wire.Libinput.Send_events_modes.disabled_on_external_mouse); settings.scroll_factor |>? Emit.set_scroll_factor obj ;; let apply_rules_to (wm : Wm.t) (device : Input_device.t) = match device.lifecycle, device.libinput, device.role with | (New | Removed), _, _ | _, None, _ -> () | Active, Some dev, Pointer { class_ = Touchpad } -> let settings = List.fold_left (fun acc (rule : Input_rule.t) -> match rule with | Touchpad r when Input_rule.name_matches r ~name:device.name -> Input_rule.Touchpad.merge ~old:acc ~new_:r.settings | _ -> acc) Input_rule.Touchpad.empty wm.config.rules.input in apply_touchpad device.obj dev ~device:device.name settings | Active, Some dev, Pointer { class_ = Mouse } -> let settings = List.fold_left (fun acc (rule : Input_rule.t) -> match rule with | Mouse r when Input_rule.name_matches r ~name:device.name -> Input_rule.Mouse.merge ~old:acc ~new_:r.settings | _ -> acc) Input_rule.Mouse.empty wm.config.rules.input in apply_mouse device.obj dev ~device:device.name settings | Active, _, (Keyboard _ | Touch | Tablet) -> () ;; let apply_rules wm = List.iter (apply_rules_to wm) wm.input_devices let validate_pattern ~case = function | Some s -> Result.map ignore (Pattern.re_compile ~case s) | None -> Ok () ;; let add_touchpad_rule wm ({ settings = old; pattern; case } : Input_rule.(Touchpad.t rule)) ({ settings = new_; _ } : Input_rule.(Touchpad.t rule)) = let+ () = validate_pattern ~case pattern in let merged_rule = Input_rule.Touchpad { pattern; case; settings = Input_rule.Touchpad.merge ~old ~new_ } in Config.replace_input_rule wm merged_rule; apply_rules wm; None ;; let add_mouse_rule wm ({ settings = old; pattern; case } : Input_rule.(Mouse.t rule)) ({ settings = new_; _ } : Input_rule.(Mouse.t rule)) = let+ () = validate_pattern ~case pattern in let merged_rule = Input_rule.Mouse { pattern; case; settings = Input_rule.Mouse.merge ~old ~new_ } in Config.replace_input_rule wm merged_rule; apply_rules wm; None ;; let add (wm : Wm.t) (rule : Input_rule.t) = let rule' = List.find_opt (Input_rule.equal rule) wm.config.rules.input in match rule', rule with | Some (Touchpad old), Touchpad new_ -> add_touchpad_rule wm old new_ | Some (Mouse old), Mouse new_ -> add_mouse_rule wm old new_ | Some (Touchpad _), Mouse _ | Some (Mouse _), Touchpad _ -> Error "mismatched rules returned as equal; please open an issue" | None, (Touchpad { pattern; case; _ } | Mouse { pattern; case; _ }) -> let+ () = validate_pattern ~case pattern in Config.add_input_rule wm rule; apply_rules wm; None ;; let remove wm indices = Config.remove_rules wm `Input indices let validate_rule (rule : Input_rule.t) = match rule with | Touchpad { pattern; case; _ } | Mouse { pattern; case; _ } -> validate_pattern ~case pattern ;; let apply_rule (wm : Wm.t) rule = let+ () = validate_rule rule in List.iter (fun (device : Input_device.t) -> match device.lifecycle, device.libinput, device.role, rule with | (New | Removed), _, _, _ | _, None, _, _ -> () | Active, Some dev, Pointer { class_ = Touchpad }, Touchpad ({ settings; _ } as r) when Input_rule.name_matches r ~name:device.name -> apply_touchpad device.obj dev ~device:device.name settings | Active, Some dev, Pointer { class_ = Mouse }, Mouse ({ settings; _ } as r) when Input_rule.name_matches r ~name:device.name -> apply_mouse device.obj dev ~device:device.name settings | Active, _, (Keyboard _ | Pointer _ | Touch | Tablet), _ -> ()) wm.input_devices; None ;;
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>