package oxbow

  1. Overview
  2. Docs
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.wire/emit.ml.html

Source file emit.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
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
let src = Logs.Src.create "oxbow.wire" ~doc:"oxbow wire library"

module Log = (val Logs.src_log src)

let manage_dirty river_wm_v1 =
  River.Window_management.River_window_manager_v1.manage_dirty river_wm_v1
;;

let exit_session river_wm_v1 =
  River.Window_management.River_window_manager_v1.exit_session river_wm_v1
;;

let set_xcursor_theme seat ~name ~size =
  River.Window_management.River_seat_v1.set_xcursor_theme seat ~name ~size
;;

let set_default output = River.Layer_shell.River_layer_shell_output_v1.set_default output

let set_repeat_info device ~rate ~delay =
  River.Input.Management.River_input_device_v1.set_repeat_info device ~rate ~delay
;;

let get_node window =
  River.Window_management.River_window_v1.get_node window
  @@ object
       inherit [_] River.Obj.Window_management.Client.node
     end
;;

let create_xkb_binding river_xkb_v1 ~seat ~keysym ~mods ~on_pressed =
  River.Xkb.Bindings.River_xkb_bindings_v1.get_xkb_binding
    river_xkb_v1
    object
      inherit [_] River.Obj.Xkb.Bindings.Client.binding
      method on_stop_repeat _ = ()
      method on_released _ = ()
      method on_pressed _ = on_pressed ()
    end
    ~seat
    ~keysym
    ~modifiers:mods
;;

let create_pointer_binding seat ~button ~mods ~on_pressed =
  River.Window_management.River_seat_v1.get_pointer_binding
    seat
    object
      inherit [_] River.Obj.Window_management.Client.pointer_binding
      method on_released _ = ()
      method on_pressed _ = on_pressed ()
    end
    ~button
    ~modifiers:mods
;;

let create_xkb_bindings_seat xkb ~seat ~on_modifiers_update =
  River.Xkb.Bindings.River_xkb_bindings_v1.get_seat
    xkb
    object
      inherit [_] River.Obj.Xkb.Bindings.Client.seat
      method on_modifiers_update _ ~old ~new_ = on_modifiers_update ~old ~new_
      method on_ate_unbound_key _ = ()
    end
    ~seat
;;

let destroy_window ~window ~node =
  River.Window_management.River_window_v1.destroy window;
  Wayland.Proxy.delete window;
  River.Window_management.River_node_v1.destroy node
;;

let destroy_output ~output ~layer_shell =
  River.Layer_shell.River_layer_shell_output_v1.destroy layer_shell;
  River.Window_management.River_output_v1.destroy output;
  Wayland.Proxy.delete output
;;

let destroy_xkb_binding binding = River.Xkb.Bindings.River_xkb_binding_v1.destroy binding

let destroy_pointer_binding pointer =
  River.Window_management.River_pointer_binding_v1.destroy pointer
;;

let destroy_seat ~seat ~layer_shell ~xkb_seat =
  River.Layer_shell.River_layer_shell_seat_v1.destroy layer_shell;
  River.Xkb.Bindings.River_xkb_bindings_seat_v1.destroy xkb_seat;
  River.Window_management.River_seat_v1.destroy seat;
  Wayland.Proxy.delete seat
;;

let set_keymap keyboard ~keymap =
  River.Xkb.Config.River_xkb_keyboard_v1.set_keymap keyboard ~keymap
;;

let destroy_xkb_keyboard keyboard =
  River.Xkb.Config.River_xkb_keyboard_v1.destroy keyboard;
  Wayland.Proxy.delete keyboard
;;

let destroy_input_device device =
  River.Input.Management.River_input_device_v1.destroy device;
  Wayland.Proxy.delete device
;;

let libinput_result ~device ~setting =
  Wayland.Proxy.Handler.cast_version
    object
      inherit [_] River.Obj.Input.Config.Client.result
      method on_success = ()

      method on_unsupported =
        Log.warn @@ fun m -> m "%s: libinput %s unsupported" device setting

      method on_invalid = Log.err @@ fun m -> m "%s: libinput %s invalid" device setting
    end
;;

module Libinput_device = River.Input.Config.River_libinput_device_v1

let set_tap dev ~device enabled =
  let state : Wire.Libinput.Tap_state.t = if enabled then Enabled else Disabled in
  ignore @@ Libinput_device.set_tap dev (libinput_result ~device ~setting:"tap") ~state
;;

let set_drag dev ~device enabled =
  let state : Wire.Libinput.Drag_state.t = if enabled then Enabled else Disabled in
  ignore @@ Libinput_device.set_drag dev (libinput_result ~device ~setting:"drag") ~state
;;

let set_drag_lock dev ~device state =
  ignore
  @@ Libinput_device.set_drag_lock
       dev
       (libinput_result ~device ~setting:"drag-lock")
       ~state
;;

let set_three_finger_drag dev ~device state =
  ignore
  @@ Libinput_device.set_three_finger_drag
       dev
       (libinput_result ~device ~setting:"three-finger-drag")
       ~state
;;

let set_dwt dev ~device enabled =
  let state : Wire.Libinput.Dwt_state.t = if enabled then Enabled else Disabled in
  ignore @@ Libinput_device.set_dwt dev (libinput_result ~device ~setting:"dwt") ~state
;;

let set_dwtp dev ~device enabled =
  let state : Wire.Libinput.Dwtp_state.t = if enabled then Enabled else Disabled in
  ignore @@ Libinput_device.set_dwtp dev (libinput_result ~device ~setting:"dwtp") ~state
;;

let set_natural_scroll dev ~device enabled =
  let state : Wire.Libinput.Natural_scroll_state.t =
    if enabled then Enabled else Disabled
  in
  ignore
  @@ Libinput_device.set_natural_scroll
       dev
       (libinput_result ~device ~setting:"natural-scroll")
       ~state
;;

let set_left_handed dev ~device enabled =
  let state : Wire.Libinput.Left_handed_state.t = if enabled then Enabled else Disabled in
  ignore
  @@ Libinput_device.set_left_handed
       dev
       (libinput_result ~device ~setting:"left-handed")
       ~state
;;

let set_middle_emulation dev ~device enabled =
  let state : Wire.Libinput.Middle_emulation_state.t =
    if enabled then Enabled else Disabled
  in
  ignore
  @@ Libinput_device.set_middle_emulation
       dev
       (libinput_result ~device ~setting:"middle-emulation")
       ~state
;;

let set_scroll_button_lock dev ~device enabled =
  let state : Wire.Libinput.Scroll_button_lock_state.t =
    if enabled then Enabled else Disabled
  in
  ignore
  @@ Libinput_device.set_scroll_button_lock
       dev
       (libinput_result ~device ~setting:"scroll-button-lock")
       ~state
;;

let set_send_events dev ~device mode =
  ignore
  @@ Libinput_device.set_send_events
       dev
       (libinput_result ~device ~setting:"send-events")
       ~mode
;;

let set_tap_button_map dev ~device button_map =
  ignore
  @@ Libinput_device.set_tap_button_map
       dev
       (libinput_result ~device ~setting:"tap-button-map")
       ~button_map
;;

let set_clickfinger_button_map dev ~device button_map =
  ignore
  @@ Libinput_device.set_clickfinger_button_map
       dev
       (libinput_result ~device ~setting:"clickfinger-button-map")
       ~button_map
;;

let set_click_method dev ~device method_ =
  ignore
  @@ Libinput_device.set_click_method
       dev
       (libinput_result ~device ~setting:"click-method")
       ~method_
;;

let set_scroll_method dev ~device method_ =
  ignore
  @@ Libinput_device.set_scroll_method
       dev
       (libinput_result ~device ~setting:"scroll-method")
       ~method_
;;

let set_accel_profile dev ~device profile =
  ignore
  @@ Libinput_device.set_accel_profile
       dev
       (libinput_result ~device ~setting:"accel-profile")
       ~profile
;;

let set_accel_speed dev ~device speed =
  let speed =
    let b = Bytes.create 8 in
    Bytes.set_int64_ne b 0 (Int64.bits_of_float speed);
    Bytes.to_string b
  in
  ignore
  @@ Libinput_device.set_accel_speed
       dev
       (libinput_result ~device ~setting:"accel-speed")
       ~speed
;;

let set_scroll_button dev ~device button =
  ignore
  @@ Libinput_device.set_scroll_button
       dev
       (libinput_result ~device ~setting:"scroll-button")
       ~button
;;

let set_scroll_factor device factor =
  let factor = Wayland.Fixed.of_bits (Int32.of_float (Float.round (factor *. 256.))) in
  River.Input.Management.River_input_device_v1.set_scroll_factor device ~factor
;;

let destroy_libinput_device device =
  Libinput_device.destroy device;
  Wayland.Proxy.delete device
;;