mousetrap v0.2.0
Loading...
Searching...
No Matches
signal_component.hpp
1//
2// Copyright (c) Clemens Cords (mail@clemens-cords.com), created 3/17/23
3//
4
5#pragma once
6
7#include <cstddef>
8#include <functional>
9#include <mousetrap/gtk_common.hpp>
10#include <mousetrap/signal_emitter.hpp>
11
12namespace mousetrap
13{
14 /// @brief base class of all signal components
16 {
17 SignalComponent() = default;
19 SignalComponent& operator=(SignalComponent&&) = delete;
20 SignalComponent(const SignalComponent&) = delete;
21 SignalComponent& operator=(const SignalComponent&) = delete;
22 };
23
24 #define SPLAT(...) __VA_ARGS__
25
26 #define CTOR_SIGNAL(T, signal_name) \
27 SIGNAL_CLASS_NAME(signal_name)<T>(this)
28
29 #define HAS_SIGNAL(T, signal_name) \
30 public SIGNAL_CLASS_NAME(signal_name)<T>
31
32 #define SIGNAL_INTERNAL_PRIVATE_CLASS_NAME(CamelCase) _HasSignal##CamelCase##Internal
33 #define SIGNAL_INTERNAL_CLASS_NAME(CamelCase) HasSignal##CamelCase##Internal
34 #define SIGNAL_CLASS_NAME(snake_case) has_signal_##snake_case
35
36 #define DECLARE_SIGNAL(CamelCase, snake_case, CAPS_CASE, g_signal_id, return_t) \
37 namespace detail \
38 { \
39 struct SIGNAL_INTERNAL_PRIVATE_CLASS_NAME(CamelCase) \
40 { \
41 GObject parent; \
42 NativeObject instance; \
43 std::function<return_t(void*)> function; \
44 bool is_blocked; \
45 }; \
46 using SIGNAL_INTERNAL_CLASS_NAME(CamelCase) = SIGNAL_INTERNAL_PRIVATE_CLASS_NAME(CamelCase); \
47 SIGNAL_INTERNAL_CLASS_NAME(CamelCase)* has_signal_##snake_case##_internal_new(NativeObject instance); \
48 } \
49 \
50 template <typename T> \
51 class SIGNAL_CLASS_NAME(snake_case) \
52 { \
53 private: \
54 detail::SIGNAL_INTERNAL_CLASS_NAME(CamelCase)* _internal = nullptr; \
55 T* _instance = nullptr; \
56 \
57 static return_t wrapper(void*, detail::SIGNAL_INTERNAL_CLASS_NAME(CamelCase)* internal) \
58 { \
59 auto temp = T((typename detail::InternalMapping<T>::value*) internal->instance); \
60 if (internal->function and not internal->is_blocked) \
61 return internal->function((void*) &temp); \
62 else \
63 return return_t();\
64 } \
65 \
66 void initialize() \
67 { \
68 if (_internal == nullptr) \
69 { \
70 auto* internal_maybe = detail::get_data<detail::SIGNAL_INTERNAL_CLASS_NAME(CamelCase)>(_instance->get_internal(), g_signal_id); \
71 if (internal_maybe == nullptr) \
72 {\
73 _internal = detail::has_signal_##snake_case##_internal_new(_instance->get_internal()); \
74 detail::attach_ref_to(_internal->instance, _internal); \
75 detail::set_data<detail::SIGNAL_INTERNAL_CLASS_NAME(CamelCase)>(_instance->get_internal(), g_signal_id, _internal); \
76 } \
77 else \
78 _internal = internal_maybe; \
79 \
80 g_object_ref(_internal);\
81 } \
82 } \
83 \
84 protected: \
85 SIGNAL_CLASS_NAME(snake_case)(T* instance) \
86 : _instance(instance) \
87 {} \
88 \
89 ~SIGNAL_CLASS_NAME(snake_case)() \
90 { \
91 if (_internal != nullptr)\
92 g_object_unref(_internal); \
93 } \
94 \
95 public: \
96 static inline const char* signal_id = g_signal_id; \
97 \
98 template <typename Function_t, typename Data_t> \
99 void connect_signal_##snake_case(Function_t f, Data_t data) \
100 { \
101 initialize(); \
102 _internal->function = [f, data](void* instance) -> return_t \
103 { \
104 return f(*((T*) instance), data); \
105 }; \
106 \
107 T((typename detail::InternalMapping<T>::value*) _internal->instance).connect_signal(signal_id, wrapper, _internal); \
108 } \
109 \
110 template <typename Function_t> \
111 void connect_signal_##snake_case(Function_t f) \
112 { \
113 initialize(); \
114 _internal->function = [f](void* instance) -> return_t \
115 { \
116 return f(*((T*) instance)); \
117 }; \
118 \
119 T((typename detail::InternalMapping<T>::value*) _internal->instance).connect_signal(signal_id, wrapper, _internal); \
120 } \
121 \
122 void set_signal_##snake_case##_blocked(bool b) \
123 { \
124 initialize(); \
125 _internal->is_blocked = b; \
126 T((typename detail::InternalMapping<T>::value*) _internal->instance).set_signal_blocked(signal_id, b);\
127 } \
128 \
129 bool get_signal_##snake_case##_blocked() const \
130 { \
131 const_cast<SIGNAL_CLASS_NAME(snake_case)*>(this)->initialize(); \
132 return T((typename detail::InternalMapping<T>::value*) _internal->instance).get_signal_blocked(signal_id);\
133 } \
134 \
135 void emit_signal_##snake_case() \
136 { \
137 initialize(); \
138 g_signal_emit_by_name(T((typename detail::InternalMapping<T>::value*) _internal->instance).operator GObject*(), signal_id); \
139 } \
140 \
141 void disconnect_signal_##snake_case() \
142 { \
143 T((typename detail::InternalMapping<T>::value*) _internal->instance).disconnect_signal(signal_id); \
144 } \
145 };
146
147 #define DECLARE_SIGNAL_MANUAL(CamelCase, snake_case, CAPS_CASE, g_signal_id, return_t, arg_list, arg_name_only_list) \
148 namespace detail \
149 { \
150 struct SIGNAL_INTERNAL_PRIVATE_CLASS_NAME(CamelCase) \
151 { \
152 GObject parent; \
153 NativeObject instance; \
154 std::function<return_t(void*, arg_list)> function; \
155 bool is_blocked; \
156 }; \
157 using SIGNAL_INTERNAL_CLASS_NAME(CamelCase) = SIGNAL_INTERNAL_PRIVATE_CLASS_NAME(CamelCase); \
158 SIGNAL_INTERNAL_CLASS_NAME(CamelCase)* has_signal_##snake_case##_internal_new(NativeObject instance); \
159 } \
160 \
161 template <typename T> \
162 class SIGNAL_CLASS_NAME(snake_case) \
163 { \
164 private: \
165 detail::SIGNAL_INTERNAL_CLASS_NAME(CamelCase)* _internal = nullptr; \
166 T* _instance = nullptr; \
167 \
168 static return_t wrapper(void*, arg_list, detail::SIGNAL_INTERNAL_CLASS_NAME(CamelCase)* internal) \
169 { \
170 auto temp = T((typename detail::InternalMapping<T>::value*) internal->instance); \
171 if (internal->function and not internal->is_blocked) \
172 return internal->function((void*) &temp, arg_name_only_list); \
173 else \
174 return return_t(); \
175 } \
176 \
177 void initialize() \
178 { \
179 auto* internal_maybe = detail::get_data<detail::SIGNAL_INTERNAL_CLASS_NAME(CamelCase)>(_instance->get_internal(), g_signal_id); \
180 if (internal_maybe == nullptr) \
181 {\
182 _internal = detail::has_signal_##snake_case##_internal_new(_instance->get_internal()); \
183 detail::attach_ref_to(_internal->instance, _internal); \
184 detail::set_data<detail::SIGNAL_INTERNAL_CLASS_NAME(CamelCase)>(_instance->get_internal(), g_signal_id, _internal); \
185 } \
186 else \
187 _internal = internal_maybe; \
188 \
189 g_object_ref(_internal);\
190 } \
191 \
192 protected: \
193 SIGNAL_CLASS_NAME(snake_case)(T* instance) \
194 : _instance(instance) \
195 {} \
196 \
197 ~SIGNAL_CLASS_NAME(snake_case)() = default; \
198 \
199 public: \
200 static inline const char* signal_id = g_signal_id; \
201 \
202 template <typename Function_t, typename Data_t> \
203 void connect_signal_##snake_case(Function_t f, Data_t data) \
204 { \
205 initialize(); \
206 _internal->function = [f, data](void* instance, arg_list) -> return_t \
207 { \
208 return f(*((T*) instance), arg_name_only_list, data); \
209 }; \
210 \
211 T((typename detail::InternalMapping<T>::value*) _internal->instance).connect_signal(signal_id, wrapper, _internal); \
212 } \
213 \
214 template <typename Function_t> \
215 void connect_signal_##snake_case(Function_t f) \
216 { \
217 initialize(); \
218 _internal->function = [f](void* instance, arg_list) -> return_t \
219 { \
220 return f(*((T*) instance), arg_name_only_list); \
221 }; \
222 \
223 T((typename detail::InternalMapping<T>::value*) _internal->instance).connect_signal(signal_id, wrapper, _internal); \
224 } \
225 \
226 void set_signal_##snake_case##_blocked(bool b) \
227 { \
228 initialize(); \
229 _internal->is_blocked = b; \
230 T((typename detail::InternalMapping<T>::value*) _internal->instance).set_signal_blocked(signal_id, b);\
231 } \
232 \
233 bool get_signal_##snake_case##_blocked() const \
234 { \
235 const_cast<SIGNAL_CLASS_NAME(snake_case)*>(this)->initialize(); \
236 return T((typename detail::InternalMapping<T>::value*) _internal->instance).get_signal_blocked(signal_id);\
237 } \
238 \
239 void emit_signal_##snake_case(arg_list) \
240 { \
241 initialize(); \
242 g_signal_emit_by_name(T((typename detail::InternalMapping<T>::value*) _internal->instance).operator GObject*(), signal_id, arg_name_only_list); \
243 } \
244 \
245 void disconnect_signal_##snake_case() \
246 { \
247 T((typename detail::InternalMapping<T>::value*) _internal->instance).disconnect_signal(signal_id); \
248 } \
249 };
250
251 /// @brief an argument of this type should not be interacted with
252 using UnusedArgument_t = void*;
253
254 DECLARE_SIGNAL(Activate, activate, ACTIVATE, "activate", void);
255 /// @class has_signal_activate
256 /// @brief \signal_activate_brief
257 /// @tparam T instance type
258 ///
259 /// @fn void has_signal_activate::connect_signal_activate(Function_t)
260 /// \signal_connect{(T&) -> void}
261 ///
262 /// @fn void has_signal_activate::connect_signal_activate(Function_t, Data_t)
263 /// \signal_connect_data{(T&, Data_t) -> void}
264 ///
265 /// @fn void has_signal_activate::emit_signal_activate()
266 /// \signal_emit_brief
267 ///
268 /// @var has_signal_activate::signal_id
269 /// \signal_id{activate}
270 ///
271 /// @fn void has_signal_activate::set_signal_activate_blocked(bool)
272 /// \signal_set_blocked
273 ///
274 /// @fn bool has_signal_activate::get_signal_activate_blocked() const
275 /// \signal_get_blocked
276 ///
277 /// @fn void has_signal_activate::disconnect_signal_activate()
278 /// \signal_disconnect
279 ///
280 /// @fn has_signal_activate::has_signal_activate
281 /// \signal_ctor
282
283 DECLARE_SIGNAL(Startup, startup, STARTUP, "startup", void);
284 /// @class has_signal_startup
285 /// @brief \signal_startup_brief
286 /// @tparam T instance type
287 ///
288 /// @fn void has_signal_startup::connect_signal_startup(Function_t)
289 /// \signal_connect{(T&) -> void}
290 ///
291 /// @fn void has_signal_startup::connect_signal_startup(Function_t, Data_t)
292 /// \signal_connect_data{(T&, Data_t) -> void}
293 ///
294 /// @fn void has_signal_startup::emit_signal_startup()
295 /// \signal_emit_brief
296 ///
297 /// @var has_signal_startup::signal_id
298 /// \signal_id{https://docs.gtk.org/gio/signal.Application.startup.html}
299 ///
300 /// @fn void has_signal_startup::set_signal_startup_blocked(bool)
301 /// \signal_set_blocked
302 ///
303 /// @fn bool has_signal_startup::get_signal_startup_blocked() const
304 /// \signal_get_blocked
305 ///
306 /// @fn void has_signal_startup::disconnect_signal_startup()
307 /// \signal_disconnect
308 ///
309 /// @fn has_signal_startup::has_signal_startup
310 /// \signal_ctor
311
312 DECLARE_SIGNAL(Shutdown, shutdown, SHUTDOWN, "shutdown", void);
313 /// @class has_signal_shutdown
314 /// @brief \signal_shutdown_brief
315 /// @tparam T instance type
316 ///
317 /// @fn void has_signal_shutdown::connect_signal_shutdown(Function_t)
318 /// \signal_connect{(T&) -> void}
319 ///
320 /// @fn void has_signal_shutdown::connect_signal_shutdown(Function_t, Data_t)
321 /// \signal_connect_data{(T&, Data_t) -> void}
322 ///
323 /// @fn void has_signal_shutdown::emit_signal_shutdown()
324 /// \signal_emit_brief
325 ///
326 /// @fn void has_signal_shutdown::set_signal_shutdown_blocked(bool)
327 /// \signal_set_blocked
328 ///
329 /// @fn bool has_signal_shutdown::get_signal_shutdown_blocked() const
330 /// \signal_get_blocked
331 ///
332 /// @fn void has_signal_shutdown::disconnect_signal_shutdown()
333 /// \signal_disconnect
334 ///
335 /// @fn has_signal_shutdown::has_signal_shutdown
336 /// \signal_ctor
337
338 DECLARE_SIGNAL(Update, update, UPDATE, "update", void);
339 /// @class has_signal_update
340 /// @brief \signal_update_brief
341 /// @tparam T instance type
342 ///
343 /// @fn void has_signal_update::connect_signal_update(Function_t)
344 /// \signal_connect{(T&) -> void}
345 ///
346 /// @fn void has_signal_update::connect_signal_update(Function_t, Data_t)
347 /// \signal_connect_data{(T&, Data_t) -> void}
348 ///
349 /// @fn void has_signal_update::emit_signal_update()
350 /// \signal_emit_brief
351 ///
352 /// @var has_signal_update::signal_id
353 /// \signal_id{https://docs.gtk.org/gdk4/signal.FrameClock.update.html}
354 ///
355 /// @fn void has_signal_update::set_signal_update_blocked(bool)
356 /// \signal_set_blocked
357 ///
358 /// @fn bool has_signal_update::get_signal_update_blocked() const
359 /// \signal_get_blocked
360 ///
361 /// @fn void has_signal_update::disconnect_signal_update()
362 /// \signal_disconnect
363 ///
364 /// @fn has_signal_update::has_signal_update
365 /// \signal_ctor
366
367 DECLARE_SIGNAL(Paint, paint, PAINT, "paint", void);
368 /// @class has_signal_paint
369 /// @brief \signal_paint_brief
370 /// @tparam T instance type
371 ///
372 /// @fn void has_signal_paint::connect_signal_paint(Function_t)
373 /// \signal_connect{(T&) -> void}
374 ///
375 /// @fn void has_signal_paint::connect_signal_paint(Function_t, Data_t)
376 /// \signal_connect_data{(T&, Data_t) -> void}
377 ///
378 /// @fn void has_signal_paint::emit_signal_paint()
379 /// \signal_emit_brief
380 ///
381 /// @var has_signal_paint::signal_id
382 /// \signal_id{https://docs.gtk.org/gdk4/signal.FrameClock.paint.html}
383 ///
384 /// @fn void has_signal_paint::set_signal_paint_blocked(bool)
385 /// \signal_set_blocked
386 ///
387 /// @fn bool has_signal_paint::get_signal_paint_blocked() const
388 /// \signal_get_blocked
389 ///
390 /// @fn void has_signal_paint::disconnect_signal_paint()
391 /// \signal_disconnect
392 ///
393 /// @fn has_signal_paint::has_signal_paint
394 /// \signal_ctor
395
396 DECLARE_SIGNAL(Realize, realize, REALIZE, "realize", void);
397 /// @class has_signal_realize
398 /// @brief \signal_realize_brief
399 /// @tparam T instance type
400 ///
401 /// @fn void has_signal_realize::connect_signal_realize(Function_t)
402 /// \signal_connect{(T&) -> void}
403 ///
404 /// @fn void has_signal_realize::connect_signal_realize(Function_t, Data_t)
405 /// \signal_connect_data{(T&, Data_t) -> void}
406 ///
407 /// @fn void has_signal_realize::emit_signal_realize()
408 /// \signal_emit_brief
409 ///
410 /// @var has_signal_realize::signal_id
411 /// \signal_id{https://docs.gtk.org/gtk4/signal.Widget.realize.html}
412 ///
413 /// @fn void has_signal_realize::set_signal_realize_blocked(bool)
414 /// \signal_set_blocked
415 ///
416 /// @fn bool has_signal_realize::get_signal_realize_blocked() const
417 /// \signal_get_blocked
418 ///
419 /// @fn void has_signal_realize::disconnect_signal_realize()
420 /// \signal_disconnect
421 ///
422 /// @fn has_signal_realize::has_signal_realize
423 /// \signal_ctor
424
425 DECLARE_SIGNAL(Unrealize, unrealize, UNREALIZE, "unrealize", void);
426 /// @class has_signal_unrealize
427 /// @brief \signal_unrealize_brief
428 /// @tparam T instance type
429 ///
430 /// @fn void has_signal_unrealize::connect_signal_unrealize(Function_t)
431 /// \signal_connect{(T&) -> void}
432 ///
433 /// @fn void has_signal_unrealize::connect_signal_unrealize(Function_t, Data_t)
434 /// \signal_connect_data{(T&, Data_t) -> void}
435 ///
436 /// @fn void has_signal_unrealize::emit_signal_unrealize()
437 /// \signal_emit_brief
438 ///
439 /// @fn void has_signal_unrealize::set_signal_unrealize_blocked(bool)
440 /// \signal_set_blocked
441 ///
442 /// @fn bool has_signal_unrealize::get_signal_unrealize_blocked() const
443 /// \signal_get_blocked
444 ///
445 /// @fn void has_signal_unrealize::disconnect_signal_unrealize()
446 /// \signal_disconnect
447 ///
448 /// @fn has_signal_unrealize::has_signal_unrealize
449 /// \signal_ctor
450
451 DECLARE_SIGNAL(Destroy, destroy, DESTROY, "destroy", void);
452 /// @class has_signal_destroy
453 /// @brief \signal_destroy_brief
454 /// @tparam T instance type
455 ///
456 /// @fn void has_signal_destroy::connect_signal_destroy(Function_t)
457 /// \signal_connect{(T&) -> void}
458 ///
459 /// @fn void has_signal_destroy::connect_signal_destroy(Function_t, Data_t)
460 /// \signal_connect_data{(T&, Data_t) -> void}
461 ///
462 /// @fn void has_signal_destroy::emit_signal_destroy()
463 /// \signal_emit_brief
464 ///
465 /// @fn void has_signal_destroy::set_signal_destroy_blocked(bool)
466 /// \signal_set_blocked
467 ///
468 /// @fn bool has_signal_destroy::get_signal_destroy_blocked() const
469 /// \signal_get_blocked
470 ///
471 /// @fn void has_signal_destroy::disconnect_signal_destroy()
472 /// \signal_disconnect
473 ///
474 /// @fn has_signal_destroy::has_signal_destroy
475 /// \signal_ctor
476
477 DECLARE_SIGNAL(Hide, hide, HIDE, "hide", void);
478 /// @class has_signal_hide
479 /// @brief \signal_hide_brief
480 /// @tparam T instance type
481 ///
482 /// @fn void has_signal_hide::connect_signal_hide(Function_t)
483 /// \signal_connect{(T&) -> void}
484 ///
485 /// @fn void has_signal_hide::connect_signal_hide(Function_t, Data_t)
486 /// \signal_connect_data{(T&, Data_t) -> void}
487 ///
488 /// @fn void has_signal_hide::emit_signal_hide()
489 /// \signal_emit_brief
490 ///
491 /// @var has_signal_hide::signal_id
492 /// \signal_id{https://docs.gtk.org/gtk4/signal.Widget.hide.html}
493 ///
494 /// @fn void has_signal_hide::set_signal_hide_blocked(bool)
495 /// \signal_set_blocked
496 ///
497 /// @fn bool has_signal_hide::get_signal_hide_blocked() const
498 /// \signal_get_blocked
499 ///
500 /// @fn void has_signal_hide::disconnect_signal_hide()
501 /// \signal_disconnect
502 ///
503 /// @fn has_signal_hide::has_signal_hide
504 /// \signal_ctor
505
506 DECLARE_SIGNAL(Show, show, SHOW, "show", void);
507 /// @class has_signal_show
508 /// @brief \signal_show_brief
509 /// @tparam T instance type
510 ///
511 /// @fn void has_signal_show::connect_signal_show(Function_t)
512 /// \signal_connect{(T&) -> void}
513 ///
514 /// @fn void has_signal_show::connect_signal_show(Function_t, Data_t)
515 /// \signal_connect_data{(T&, Data_t) -> void}
516 ///
517 /// @fn void has_signal_show::emit_signal_show()
518 /// \signal_emit_brief
519 ///
520 /// @var has_signal_show::signal_id
521 /// \signal_id{https://docs.gtk.org/gtk4/signal.Widget.show.html}
522 ///
523 /// @fn void has_signal_show::set_signal_show_blocked(bool)
524 /// \signal_set_blocked
525 ///
526 /// @fn bool has_signal_show::get_signal_show_blocked() const
527 /// \signal_get_blocked
528 ///
529 /// @fn void has_signal_show::disconnect_signal_show()
530 /// \signal_disconnect
531 ///
532 /// @fn has_signal_show::has_signal_show
533 /// \signal_ctor
534
535 DECLARE_SIGNAL(Map, map, MAP, "map", void);
536 /// @class has_signal_map
537 /// @brief \signal_map_brief
538 /// @tparam T instance type
539 ///
540 /// @fn void has_signal_map::connect_signal_map(Function_t)
541 /// \signal_connect{(T&) -> void}
542 ///
543 /// @fn void has_signal_map::connect_signal_map(Function_t, Data_t)
544 /// \signal_connect_data{(T&, Data_t) -> void}
545 ///
546 /// @fn void has_signal_map::emit_signal_map()
547 /// \signal_emit_brief
548 ///
549 /// @var has_signal_map::signal_id
550 /// \signal_id{https://docs.gtk.org/gtk4/signal.Widget.map.html}
551 ///
552 /// @fn void has_signal_map::set_signal_map_blocked(bool)
553 /// \signal_set_blocked
554 ///
555 /// @fn bool has_signal_map::get_signal_map_blocked() const
556 /// \signal_get_blocked
557 ///
558 /// @fn void has_signal_map::disconnect_signal_map()
559 /// \signal_disconnect
560 ///
561 /// @fn has_signal_map::has_signal_map
562 /// \signal_ctor
563
564 DECLARE_SIGNAL(Unmap, unmap, UNMAP, "unmap", void);
565 /// @class has_signal_unmap
566 /// @brief \signal_unmap_brief
567 /// @tparam T instance type
568 ///
569 /// @fn void has_signal_unmap::connect_signal_unmap(Function_t)
570 /// \signal_connect{(T&) -> void}
571 ///
572 /// @fn void has_signal_unmap::connect_signal_unmap(Function_t, Data_t)
573 /// \signal_connect_data{(T&, Data_t) -> void}
574 ///
575 /// @fn void has_signal_unmap::emit_signal_unmap()
576 /// \signal_emit_brief
577 ///
578 /// @var has_signal_unmap::signal_id
579 /// \signal_id{https://docs.gtk.org/gtk4/signal.Widget.unmap.html}
580 ///
581 /// @fn void has_signal_unmap::set_signal_unmap_blocked(bool)
582 /// \signal_set_blocked
583 ///
584 /// @fn bool has_signal_unmap::get_signal_unmap_blocked() const
585 /// \signal_get_blocked
586 ///
587 /// @fn void has_signal_unmap::disconnect_signal_unmap()
588 /// \signal_disconnect
589 ///
590 /// @fn has_signal_unmap::has_signal_unmap
591 /// \signal_ctor
592
593 /// @brief Result of mousetrap::has_signal_close_request
594 enum WindowCloseRequestResult : bool
595 {
596 /// @brief Allow the default handler to be invoked, this means that the window will close after the signal handler has exited
597 ALLOW_CLOSE = false,
598
599 /// @brief Prevent the default handler to be invoked, this means the window will stay open after the signal handler function has exited
600 PREVENT_CLOSE = true
601 };
602
603 DECLARE_SIGNAL(CloseRequest, close_request, CLOSE_REQUEST, "close-request", WindowCloseRequestResult);
604 /// @class has_signal_close_request
605 /// @brief \signal_close_request_brief
606 /// @tparam T instance type
607 ///
608 /// @fn void has_signal_close_request::connect_signal_close_request(Function_t)
609 /// \signal_connect{(T&) -> mousetrap::WindowCloseRequestResult}
610 ///
611 /// @fn void has_signal_close_request::connect_signal_close_request(Function_t, Data_t)
612 /// \signal_connect_data{(T&, Data_t) -> mousetrap::WindowCloseRequestResult}
613 ///
614 /// @fn void has_signal_close_request::emit_signal_close_request()
615 /// \signal_emit_brief
616 ///
617 /// @var has_signal_close_request::signal_id
618 /// \signal_id{https://docs.gtk.org/gtk4/signal.Window.close-request.html}
619 ///
620 /// @fn void has_signal_close_request::set_signal_close_request_blocked(bool)
621 /// \signal_set_blocked
622 ///
623 /// @fn bool has_signal_close_request::get_signal_close_request_blocked() const
624 /// \signal_get_blocked
625 ///
626 /// @fn void has_signal_close_request::disconnect_signal_close_request()
627 /// \signal_disconnect
628 ///
629 /// @fn has_signal_close_request::has_signal_close_request
630 /// \signal_ctor
631
632 DECLARE_SIGNAL(ActivateDefaultWidget, activate_default_widget, ACTIVATE_DEFAULT_WIDGET, "activate-default", void);
633 /// @class has_signal_activate_default_widget
634 /// @brief \signal_activate_default_widget_brief
635 /// @tparam T instance type
636 ///
637 /// @fn void has_signal_activate_default_widget::connect_signal_activate_default_widget(Function_t)
638 /// \signal_connect{(T&) -> void}
639 ///
640 /// @fn void has_signal_activate_default_widget::connect_signal_activate_default_widget(Function_t, Data_t)
641 /// \signal_connect_data{(T&, Data_t) -> void}
642 ///
643 /// @fn void has_signal_activate_default_widget::emit_signal_activate_default_widget()
644 /// \signal_emit_brief
645 ///
646 /// @var has_signal_activate_default_widget::signal_id
647 /// \signal_id{https://docs.gtk.org/gtk4/signal.Window.activate-default.html}
648 ///
649 /// @fn void has_signal_activate_default_widget::set_signal_activate_default_widget_blocked(bool)
650 /// \signal_set_blocked
651 ///
652 /// @fn bool has_signal_activate_default_widget::get_signal_activate_default_widget_blocked() const
653 /// \signal_get_blocked
654 ///
655 /// @fn void has_signal_activate_default_widget::disconnect_signal_activate_default_widget()
656 /// \signal_disconnect
657 ///
658 /// @fn has_signal_activate_default_widget::has_signal_activate_default_widget
659 /// \signal_ctor
660
661 DECLARE_SIGNAL(ActivateFocusedWidget, activate_focused_widget, ACTIVATE_FOCUSED_WIDGET, "activate-focus", void);
662 /// @class has_signal_activate_focused_widget
663 /// @brief \signal_activate_focused_widget_brief
664 /// @tparam T instance type
665 ///
666 /// @fn void has_signal_activate_focused_widget::connect_signal_activate_focused_widget(Function_t)
667 /// \signal_connect{(T&) -> void}
668 ///
669 /// @fn void has_signal_activate_focused_widget::connect_signal_activate_focused_widget(Function_t, Data_t)
670 /// \signal_connect_data{(T&, Data_t) -> void}
671 ///
672 /// @fn void has_signal_activate_focused_widget::emit_signal_activate_focused_widget()
673 /// \signal_emit_brief
674 ///
675 /// @var has_signal_activate_focused_widget::signal_id
676 /// \signal_id{https://docs.gtk.org/gtk4/signal.Window.activate-focus.html}
677 ///
678 /// @fn void has_signal_activate_focused_widget::set_signal_activate_focused_widget_blocked(bool)
679 /// \signal_set_blocked
680 ///
681 /// @fn bool has_signal_activate_focused_widget::get_signal_activate_focused_widget_blocked() const
682 /// \signal_get_blocked
683 ///
684 /// @fn void has_signal_activate_focused_widget::disconnect_signal_activate_focused_widget()
685 /// \signal_disconnect
686 ///
687 /// @fn has_signal_activate_focused_widget::has_signal_activate_focused_widget
688 /// \signal_ctor
689
690 DECLARE_SIGNAL(Clicked, clicked, CLICKED, "clicked", void);
691 /// @class has_signal_clicked
692 /// @brief \signal_clicked_brief
693 /// @tparam T instance type
694 ///
695 /// @fn void has_signal_clicked::connect_signal_clicked(Function_t)
696 /// \signal_connect{(T&) -> void}
697 ///
698 /// @fn void has_signal_clicked::connect_signal_clicked(Function_t, Data_t)
699 /// \signal_connect_data{(T&, Data_t) -> void}
700 ///
701 /// @fn void has_signal_clicked::emit_signal_clicked()
702 /// \signal_emit_brief
703 ///
704 /// @var has_signal_clicked::signal_id
705 /// \signal_id{https://docs.gtk.org/gtk4/signal.Button.activate.html}
706 ///
707 /// @fn void has_signal_clicked::set_signal_clicked_blocked(bool)
708 /// \signal_set_blocked
709 ///
710 /// @fn bool has_signal_clicked::get_signal_clicked_blocked() const
711 /// \signal_get_blocked
712 ///
713 /// @fn void has_signal_clicked::disconnect_signal_clicked()
714 /// \signal_disconnect
715 ///
716 /// @fn has_signal_clicked::has_signal_clicked
717 /// \signal_ctor
718
719 DECLARE_SIGNAL(Toggled, toggled, TOGGLED, "toggled", void);
720 /// @class has_signal_toggled
721 /// @brief \signal_toggled_brief
722 /// @tparam T instance type
723 ///
724 /// @fn void has_signal_toggled::connect_signal_toggled(Function_t)
725 /// \signal_connect{(T&) -> void}
726 ///
727 /// @fn void has_signal_toggled::connect_signal_toggled(Function_t, Data_t)
728 /// \signal_connect_data{(T&, Data_t) -> void}
729 ///
730 /// @fn void has_signal_toggled::emit_signal_toggled()
731 /// \signal_emit_brief
732 ///
733 /// @var has_signal_toggled::signal_id
734 /// \signal_id{https://docs.gtk.org/gtk4/signal.ToggleButton.toggled.html}
735 ///
736 /// @fn void has_signal_toggled::set_signal_toggled_blocked(bool)
737 /// \signal_set_blocked
738 ///
739 /// @fn bool has_signal_toggled::get_signal_toggled_blocked() const
740 /// \signal_get_blocked
741 ///
742 /// @fn void has_signal_toggled::disconnect_signal_toggled()
743 /// \signal_disconnect
744 ///
745 /// @fn has_signal_toggled::has_signal_toggled
746 /// \signal_ctor
747
748
749 DECLARE_SIGNAL(TextChanged, text_changed, TEXT_CHANGED, "changed", void);
750 /// @class has_signal_text_changed
751 /// @brief \signal_text_changed_brief
752 /// @tparam T instance type
753 ///
754 /// @fn void has_signal_text_changed::connect_signal_text_changed(Function_t)
755 /// \signal_connect{(T&) -> void}
756 ///
757 /// @fn void has_signal_text_changed::connect_signal_text_changed(Function_t, Data_t)
758 /// \signal_connect_data{(T&, Data_t) -> void}
759 ///
760 /// @fn void has_signal_text_changed::emit_signal_text_changed()
761 /// \signal_emit_brief
762 ///
763 /// @var has_signal_text_changed::signal_id
764 /// \signal_id{https://docs.gtk.org/gtk4/signal.Editable.changed.html}
765 ///
766 /// @fn void has_signal_text_changed::set_signal_text_changed_blocked(bool)
767 /// \signal_set_blocked
768 ///
769 /// @fn bool has_signal_text_changed::get_signal_text_changed_blocked() const
770 /// \signal_get_blocked
771 ///
772 /// @fn void has_signal_text_changed::disconnect_signal_text_changed()
773 /// \signal_disconnect
774 ///
775 /// @fn has_signal_text_changed::has_signal_text_changed
776 /// \signal_ctor
777
778 DECLARE_SIGNAL(Undo, undo, UNDO, "undo", void);
779 /// @class has_signal_undo
780 /// @brief \signal_undo_brief
781 /// @tparam T instance type
782 ///
783 /// @fn void has_signal_undo::connect_signal_undo(Function_t)
784 /// \signal_connect{(T&) -> void}
785 ///
786 /// @fn void has_signal_undo::connect_signal_undo(Function_t, Data_t)
787 /// \signal_connect_data{(T&, Data_t) -> void}
788 ///
789 /// @fn void has_signal_undo::emit_signal_undo()
790 /// \signal_emit_brief
791 ///
792 /// @var has_signal_undo::signal_id
793 /// \signal_id{https://docs.gtk.org/gtk4/signal.TextBuffer.undo.html}
794 ///
795 /// @fn void has_signal_undo::set_signal_undo_blocked(bool)
796 /// \signal_set_blocked
797 ///
798 /// @fn bool has_signal_undo::get_signal_undo_blocked() const
799 /// \signal_get_blocked
800 ///
801 /// @fn void has_signal_undo::disconnect_signal_undo()
802 /// \signal_disconnect
803 ///
804 /// @fn has_signal_undo::has_signal_undo
805 /// \signal_ctor
806
807 DECLARE_SIGNAL(Redo, redo, REDO, "redo", void);
808 /// @class has_signal_redo
809 /// @brief \signal_redo_brief
810 /// @tparam T instance type
811 ///
812 /// @fn void has_signal_redo::connect_signal_redo(Function_t)
813 /// \signal_connect{(T&) -> void}
814 ///
815 /// @fn void has_signal_redo::connect_signal_redo(Function_t, Data_t)
816 /// \signal_connect_data{(T&, Data_t) -> void}
817 ///
818 /// @fn void has_signal_redo::emit_signal_redo()
819 /// \signal_emit_brief
820 ///
821 /// @var has_signal_redo::signal_id
822 /// \signal_id{https://docs.gtk.org/gtk4/signal.TextBuffer.redo.html}
823 ///
824 /// @fn void has_signal_redo::set_signal_redo_blocked(bool)
825 /// \signal_set_blocked
826 ///
827 /// @fn bool has_signal_redo::get_signal_redo_blocked() const
828 /// \signal_get_blocked
829 ///
830 /// @fn void has_signal_redo::disconnect_signal_redo()
831 /// \signal_disconnect
832 ///
833 /// @fn has_signal_redo::has_signal_redo
834 /// \signal_ctor
835
836 DECLARE_SIGNAL_MANUAL(SelectionChanged, selection_changed, SELECTION_CHANGED, "selection-changed", void,
837 SPLAT(int32_t position, int32_t n_items),
838 SPLAT(position, n_items)
839 );
840 /// @class has_signal_selection_changed
841 /// @brief \signal_selection_changed_brief
842 /// @tparam T instance type
843 ///
844 /// @fn void has_signal_selection_changed::connect_signal_selection_changed(Function_t)
845 /// \signal_connect{(T&, int32_t position, int32_t n_items) -> void}
846 ///
847 /// @fn void has_signal_selection_changed::connect_signal_selection_changed(Function_t, Data_t)
848 /// \signal_connect_data{(T&, int32_t position, int32_t n_items, Data_t) -> void}
849 ///
850 /// @fn void has_signal_selection_changed::emit_signal_selection_changed(int32_t position, int32_t n_items)
851 /// \signal_emit_brief
852 /// @param position index of the element that changed
853 /// @param n_items number of items that changed
854 ///
855 /// @var has_signal_selection_changed::signal_id
856 /// \signal_id{https://docs.gtk.org/gtk4/signal.SelectionModel.selection-changed.html}
857 ///
858 /// @fn void has_signal_selection_changed::set_signal_selection_changed_blocked(bool)
859 /// \signal_set_blocked
860 ///
861 /// @fn bool has_signal_selection_changed::get_signal_selection_changed_blocked() const
862 /// \signal_get_blocked
863 ///
864 /// @fn void has_signal_selection_changed::disconnect_signal_selection_changed()
865 /// \signal_disconnect
866 ///
867 /// @fn has_signal_selection_changed::has_signal_selection_changed
868 /// \signal_ctor
869
870 DECLARE_SIGNAL_MANUAL(ActivateItem, activate_item, ACTIVATE_ITEM, "activate", void,
871 SPLAT(guint position),
872 SPLAT(position)
873 );
874 /// @class has_signal_activate_item
875 /// @brief \signal_activate_item_brief
876 /// @tparam T instance type
877 ///
878 /// @fn void has_signal_activate_item::connect_signal_activate_item(Function_t)
879 /// \signal_connect{(T&, uint32_t position) -> void}
880 ///
881 /// @fn void has_signal_activate_item::connect_signal_activate_item(Function_t, Data_t)
882 /// \signal_connect_data{(T&, uint32_t position, Data_t) -> void}
883 ///
884 /// @fn void has_signal_activate_item::emit_signal_activate_item(int32_t position, int32_t n_items)
885 /// \signal_emit_brief
886 /// @param position index of the element that changed
887 /// @param n_items number of items that changed
888 ///
889 /// @var has_signal_activate_item::signal_id
890 /// \signal_id{https://docs.gtk.org/gtk4/signal.SelectionModel.selection-changed.html}
891 ///
892 /// @fn void has_signal_activate_item::set_signal_activate_item_blocked(bool)
893 /// \signal_set_blocked
894 ///
895 /// @fn bool has_signal_activate_item::get_signal_activate_item_blocked() const
896 /// \signal_get_blocked
897 ///
898 /// @fn void has_signal_activate_item::disconnect_signal_activate_item()
899 /// \signal_disconnect
900 ///
901 /// @fn has_signal_activate_item::has_signal_activate_item
902 /// \signal_ctor
903
904 using ModifierState = GdkModifierType;
905 using KeyValue = guint;
906 using KeyCode = guint;
907
908 DECLARE_SIGNAL_MANUAL(KeyPressed, key_pressed, KEY_PRESSED, "key-pressed", bool,
909 SPLAT(KeyValue keyval, KeyCode keycode, ModifierState modifier),
910 SPLAT(keyval, keycode, modifier)
911 );
912 /// @class has_signal_key_pressed
913 /// @brief \signal_key_pressed_brief
914 /// @tparam T instance type
915 ///
916 /// @fn void has_signal_key_pressed::connect_signal_key_pressed(Function_t)
917 /// \signal_connect{(T&, KeyValue key_value, KeyCode key_code, ModifierState modifiers) -> bool}
918 ///
919 /// @fn void has_signal_key_pressed::connect_signal_key_pressed(Function_t, Data_t)
920 /// \signal_connect_data{(T&, KeyValue key_value, KeyCode key_code, ModifierState modifiers, Data_t) -> bool}
921 ///
922 /// @fn void has_signal_key_pressed::emit_signal_key_pressed(KeyValue keyval, KeyCode keycode, ModifierState modifier)
923 /// \signal_emit_brief
924 /// @param keyval key identifier, a complete list of keys can be found at https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gdk/gdkkeysyms.h
925 /// @param keycode os-supplied internal identifier, can usually be ignored. Test against keyval instead
926 /// @param modifier modifier state, can be queried to see whether Alt, Control, Shift, etc. are held down during this key event
927 ///
928 /// @var has_signal_key_pressed::signal_id
929 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerKey.key-pressed.html}
930 ///
931 /// @fn void has_signal_key_pressed::set_signal_key_pressed_blocked(bool)
932 /// \signal_set_blocked
933 ///
934 /// @fn bool has_signal_key_pressed::get_signal_key_pressed_blocked() const
935 /// \signal_get_blocked
936 ///
937 /// @fn void has_signal_key_pressed::disconnect_signal_key_pressed()
938 /// \signal_disconnect
939 ///
940 /// @fn has_signal_key_pressed::has_signal_key_pressed
941 /// \signal_ctor
942
943 DECLARE_SIGNAL_MANUAL(KeyReleased, key_released, KEY_RELEASED, "key-released", void,
944 SPLAT(KeyValue keyval, KeyCode keycode, ModifierState modifier),
945 SPLAT(keyval, keycode, modifier)
946 );
947 /// @class has_signal_key_released
948 /// @brief \signal_key_released_brief
949 /// @tparam T instance type
950 ///
951 /// @fn void has_signal_key_released::connect_signal_key_released(Function_t)
952 /// \signal_connect{(T&, KeyValue key_value, KeyCode key_code, ModifierState modifiers) -> void}
953 ///
954 /// @fn void has_signal_key_released::connect_signal_key_released(Function_t, Data_t)
955 /// \signal_connect_data{(T&, KeyValue key_value, KeyCode key_code, ModifierState modifiers, Data_t) -> void}
956 ///
957 /// @fn void has_signal_key_released::emit_signal_key_released(KeyValue keyval, KeyCode keycode, ModifierState modifier)
958 /// \signal_emit_brief
959 /// @param keyval key identifier, a complete list of keys can be found at https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gdk/gdkkeysyms.h
960 /// @param keycode os-supplied internal identifier, can usually be ignored. Test against keyval instead
961 /// @param modifier modifier state, can be queried to see whether Alt, Control, Shift, etc. are held down during this key event
962 ///
963 /// @var has_signal_key_released::signal_id
964 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerKey.key-released.html}
965 ///
966 /// @fn void has_signal_key_released::set_signal_key_released_blocked(bool)
967 /// \signal_set_blocked
968 ///
969 /// @fn bool has_signal_key_released::get_signal_key_released_blocked() const
970 /// \signal_get_blocked
971 ///
972 /// @fn void has_signal_key_released::disconnect_signal_key_released()
973 /// \signal_disconnect
974 ///
975 /// @fn has_signal_key_released::has_signal_key_released
976 /// \signal_ctor
977
978 /// @see https://docs.gtk.org/gtk4/signal.EventControllerKey.key-pressed.html
979 DECLARE_SIGNAL_MANUAL(ModifiersChanged, modifiers_changed, MODIFIERS_CHANGED, "modifiers", bool,
980 SPLAT(ModifierState modifier),
981 SPLAT(modifier)
982 );
983 /// @class has_signal_modifiers_changed
984 /// @brief \signal_modifiers_changed_brief
985 /// @tparam T instance type
986 ///
987 /// @fn void has_signal_modifiers_changed::connect_signal_modifiers_changed(Function_t)
988 /// \signal_connect{(T&, KeyValue key_value, KeyCode key_code, ModifierState modifier) -> bool}
989 ///
990 /// @fn void has_signal_modifiers_changed::connect_signal_modifiers_changed(Function_t, Data_t)
991 /// \signal_connect_data{(T& KeyValue key_value, KeyCode key_code, ModifierState modifier, Data_t) -> bool}
992 ///
993 /// @fn void has_signal_modifiers_changed::emit_signal_modifiers_changed(KeyValue keyval, KeyCode keycode, ModifierState modifier)
994 /// \signal_emit_brief
995 /// @param keyval key identifier, a complete list of keys can be found at https://gitlab.gnome.org/GNOME/gtk/-/blob/main/gdk/gdkkeysyms.h
996 /// @param keycode os-supplied internal identifier, can usually be ignored. Test against keyval instead
997 /// @param modifier modifier state, can be queried to see whether Alt, Control, Shift, etc. are held down during this key event
998 ///
999 /// @var has_signal_modifiers_changed::signal_id
1000 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerKey.modifiers.html}
1001 ///
1002 /// @fn void has_signal_modifiers_changed::set_signal_modifiers_changed_blocked(bool)
1003 /// \signal_set_blocked
1004 ///
1005 /// @fn bool has_signal_modifiers_changed::get_signal_modifiers_changed_blocked() const
1006 /// \signal_get_blocked
1007 ///
1008 /// @fn void has_signal_modifiers_changed::disconnect_signal_modifiers_changed()
1009 /// \signal_disconnect
1010 ///
1011 /// @fn has_signal_modifiers_changed::has_signal_modifiers_changed
1012 /// \signal_ctor
1013
1014 DECLARE_SIGNAL_MANUAL(MotionEnter, motion_enter, MOTION_ENTER, "enter", void,
1015 SPLAT(double x, double y),
1016 SPLAT(x, y)
1018 /// @class has_signal_motion_enter
1019 /// @brief \signal_motion_enter_brief
1020 /// @tparam T instance type
1021 ///
1022 /// @fn void has_signal_motion_enter::connect_signal_motion_enter(Function_t)
1023 /// \signal_connect{(T&, double x, double y) -> void}
1024 ///
1025 /// @fn void has_signal_motion_enter::connect_signal_motion_enter(Function_t, Data_t)
1026 /// \signal_connect_data{(T&, double x, double y, Data_t) -> void}
1027 ///
1028 /// @fn void has_signal_motion_enter::emit_signal_motion_enter(double x, double y)
1029 /// \signal_emit_brief
1030 /// @param x x-coordinate of the cursor, widget-relative position, in pixels
1031 /// @param y y-coordinate of the cursor, widget-relative position, in pixels
1032 ///
1033 /// @var has_signal_motion_enter::signal_id
1034 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerMotion.enter.html}
1035 ///
1036 /// @fn void has_signal_motion_enter::set_signal_motion_enter_blocked(bool)
1037 /// \signal_set_blocked
1038 ///
1039 /// @fn bool has_signal_motion_enter::get_signal_motion_enter_blocked() const
1040 /// \signal_get_blocked
1041 ///
1042 /// @fn void has_signal_motion_enter::disconnect_signal_motion_enter()
1043 /// \signal_disconnect
1044 ///
1045 /// @fn has_signal_motion_enter::has_signal_motion_enter
1046 /// \signal_ctor
1047
1048 DECLARE_SIGNAL_MANUAL(Motion, motion, MOTION, "motion", void,
1049 SPLAT(double x, double y),
1050 SPLAT(x, y)
1052 /// @class has_signal_motion
1053 /// @brief \signal_motion_brief
1054 /// @tparam T instance type
1055 ///
1056 /// @fn void has_signal_motion::connect_signal_motion(Function_t)
1057 /// \signal_connect{(T&, double x, double y) -> void}
1058 ///
1059 /// @fn void has_signal_motion::connect_signal_motion(Function_t, Data_t)
1060 /// \signal_connect_data{(T&, double x, double y, Data_t) -> void}
1061 ///
1062 /// @fn void has_signal_motion::emit_signal_motion(double x, double y)
1063 /// \signal_emit_brief
1064 /// @param x x-coordinate of the cursor, widget-relative position, in pixels
1065 /// @param y y-coordinate of the cursor, widget-relative position, in pixels
1066 ///
1067 /// @var has_signal_motion::signal_id
1068 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerMotion.motion.html}
1069 ///
1070 /// @fn void has_signal_motion::set_signal_motion_blocked(bool)
1071 /// \signal_set_blocked
1072 ///
1073 /// @fn bool has_signal_motion::get_signal_motion_blocked() const
1074 /// \signal_get_blocked
1075 ///
1076 /// @fn void has_signal_motion::disconnect_signal_motion()
1077 /// \signal_disconnect
1078 ///
1079 /// @fn has_signal_motion::has_signal_motion
1080 /// \signal_ctor
1081
1082 DECLARE_SIGNAL(MotionLeave, motion_leave, MOTION_LEAVE, "leave", void);
1083 /// @class has_signal_motion_leave
1084 /// @brief \signal_motion_leave_brief
1085 /// @tparam T instance type
1086 ///
1087 /// @fn void has_signal_motion_leave::connect_signal_motion_leave(Function_t)
1088 /// \signal_connect{(T&) -> void}
1089 ///
1090 /// @fn void has_signal_motion_leave::connect_signal_motion_leave(Function_t, Data_t)
1091 /// \signal_connect_data{(T&, Data_t) -> void}
1092 ///
1093 /// @fn void has_signal_motion_leave::emit_signal_motion_leave()
1094 /// \signal_emit_brief
1095 ///
1096 /// @var has_signal_motion_leave::signal_id
1097 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerMotion.leave.html}
1098 ///
1099 /// @fn void has_signal_motion_leave::set_signal_motion_leave_blocked(bool)
1100 /// \signal_set_blocked
1101 ///
1102 /// @fn bool has_signal_motion_leave::get_signal_motion_leave_blocked() const
1103 /// \signal_get_blocked
1104 ///
1105 /// @fn void has_signal_motion_leave::disconnect_signal_motion_leave()
1106 /// \signal_disconnect
1107 ///
1108 /// @fn has_signal_motion_leave::has_signal_motion_leave
1109 /// \signal_ctor
1110
1111 DECLARE_SIGNAL_MANUAL(ClickPressed, click_pressed, CLICK_PRESSED, "pressed", void,
1112 SPLAT(int32_t n_press, double x, double y),
1113 SPLAT(n_press, x, y)
1115 /// @class has_signal_click_pressed
1116 /// @brief \signal_click_pressed_brief
1117 /// @tparam T instance type
1118 ///
1119 /// @fn void has_signal_click_pressed::connect_signal_click_pressed(Function_t)
1120 /// \signal_connect{(T&, int32_t n_presses, double x, double y) -> void}
1121 ///
1122 /// @fn void has_signal_click_pressed::connect_signal_click_pressed(Function_t, Data_t)
1123 /// \signal_connect_data{(T&, int32_t n_presses, double x, double y, Data_t) -> void}
1124 ///
1125 /// @fn void has_signal_click_pressed::emit_signal_click_pressed(int32_t n_press, double x, double y)
1126 /// \signal_emit_brief
1127 /// @param n_press number of clicks in this sequence
1128 /// @param x x-coordinate of the cursor, widget-relative position, in pixels
1129 /// @param y y-coordinate of the cursor, widget-relative position, in pixels
1130 ///
1131 /// @var has_signal_click_pressed::signal_id
1132 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureClick.pressed.html}
1133 ///
1134 /// @fn void has_signal_click_pressed::set_signal_click_pressed_blocked(bool)
1135 /// \signal_set_blocked
1136 ///
1137 /// @fn bool has_signal_click_pressed::get_signal_click_pressed_blocked() const
1138 /// \signal_get_blocked
1139 ///
1140 /// @fn void has_signal_click_pressed::disconnect_signal_click_pressed()
1141 /// \signal_disconnect
1142 ///
1143 /// @fn has_signal_click_pressed::has_signal_click_pressed
1144 /// \signal_ctor
1145
1146 DECLARE_SIGNAL_MANUAL(ClickReleased, click_released, CLICK_RELEASED, "released", void,
1147 SPLAT(int32_t n_press, double x, double y),
1148 SPLAT(n_press, x, y)
1150 /// @class has_signal_click_released
1151 /// @brief \signal_click_released_brief
1152 /// @tparam T instance type
1153 ///
1154 /// @fn void has_signal_click_released::connect_signal_click_released(Function_t)
1155 /// \signal_connect{(T&, int32_t n_presses, double x, double y) -> void}
1156 ///
1157 /// @fn void has_signal_click_released::connect_signal_click_released(Function_t, Data_t)
1158 /// \signal_connect_data{(T&, int32_t n_presses, double x, double y, Data_t) -> void}
1159 ///
1160 /// @fn void has_signal_click_released::emit_signal_click_released(int32_t n_press, double x, double y)
1161 /// \signal_emit_brief
1162 /// @param n_press number of clicks in this sequence
1163 /// @param x x-coordinate of the cursor, widget-relative position, in pixels
1164 /// @param y y-coordinate of the cursor, widget-relative position, in pixels
1165 ///
1166 /// @var has_signal_click_released::signal_id
1167 /// \signal_id{ https://docs.gtk.org/gtk4/signal.GestureClick.released.html}
1168 ///
1169 /// @fn void has_signal_click_released::set_signal_click_released_blocked(bool)
1170 /// \signal_set_blocked
1171 ///
1172 /// @fn bool has_signal_click_released::get_signal_click_released_blocked() const
1173 /// \signal_get_blocked
1174 ///
1175 /// @fn void has_signal_click_released::disconnect_signal_click_released()
1176 /// \signal_disconnect
1177 ///
1178 /// @fn has_signal_click_released::has_signal_click_released
1179 /// \signal_ctor
1180
1181 DECLARE_SIGNAL(ClickStopped, click_stopped, CLICK_STOPPED, "stopped", void);
1182 /// @class has_signal_click_stopped
1183 /// @brief \signal_click_stopped_brief
1184 /// @tparam T instance type
1185 ///
1186 /// @fn void has_signal_click_stopped::connect_signal_click_stopped(Function_t)
1187 /// \signal_connect{(T&) -> void}
1188 ///
1189 /// @fn void has_signal_click_stopped::connect_signal_click_stopped(Function_t, Data_t)
1190 /// \signal_connect_data{(T&, Data_t) -> void}
1191 ///
1192 /// @fn void has_signal_click_stopped::emit_signal_click_stopped()
1193 /// \signal_emit_brief
1194 ///
1195 /// @var has_signal_click_stopped::signal_id
1196 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureClick.stopped.html}
1197 ///
1198 /// @fn void has_signal_click_stopped::set_signal_click_stopped_blocked(bool)
1199 /// \signal_set_blocked
1200 ///
1201 /// @fn bool has_signal_click_stopped::get_signal_click_stopped_blocked() const
1202 /// \signal_get_blocked
1203 ///
1204 /// @fn void has_signal_click_stopped::disconnect_signal_click_stopped()
1205 /// \signal_disconnect
1206 ///
1207 /// @fn has_signal_click_stopped::has_signal_click_stopped
1208 /// \signal_ctor
1209
1210 DECLARE_SIGNAL_MANUAL(KineticScrollDecelerate, kinetic_scroll_decelerate, KINETIC_SCROLL_DECELERATE, "decelerate", void,
1211 SPLAT(double x_velocity, double y_velocity),
1212 SPLAT(x_velocity, y_velocity)
1214 /// @class has_signal_kinetic_scroll_decelerate
1215 /// @brief \signal_kinetic_scroll_decelerate_brief
1216 /// @tparam T instance type
1217 ///
1218 /// @fn void has_signal_kinetic_scroll_decelerate::connect_signal_kinetic_scroll_decelerate(Function_t)
1219 /// \signal_connect{(T&, double x_velocity, double y_velocity) -> void}
1220 ///
1221 /// @fn void has_signal_kinetic_scroll_decelerate::connect_signal_kinetic_scroll_decelerate(Function_t, Data_t)
1222 /// \signal_connect_data{(T&, double x_velocity, double y_velocity, Data_t) -> void}
1223 ///
1224 /// @fn void has_signal_kinetic_scroll_decelerate::emit_signal_kinetic_scroll_decelerate(double x_velocity, double y_velocity)
1225 /// \signal_emit_brief
1226 /// @param x_velocity current x-velocity, if postive, scroll left to right, if negative, scrolls right to left
1227 /// @param y_velocity current y-velocity, if positive, scrolls top to bottom, if negative, scrolls bottom to top
1228 ///
1229 /// @var has_signal_kinetic_scroll_decelerate::signal_id
1230 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerScroll.decelerate.html}
1231 ///
1232 /// @fn void has_signal_kinetic_scroll_decelerate::set_signal_kinetic_scroll_decelerate_blocked(bool)
1233 /// \signal_set_blocked
1234 ///
1235 /// @fn bool has_signal_kinetic_scroll_decelerate::get_signal_kinetic_scroll_decelerate_blocked() const
1236 /// \signal_get_blocked
1237 ///
1238 /// @fn void has_signal_kinetic_scroll_decelerate::disconnect_signal_kinetic_scroll_decelerate()
1239 /// \signal_disconnect
1240 ///
1241 /// @fn has_signal_kinetic_scroll_decelerate::has_signal_kinetic_scroll_decelerate
1242 /// \signal_ctor
1243
1244 DECLARE_SIGNAL(ScrollBegin, scroll_begin, SCROLL_BEGIN, "scroll-begin", void);
1245 /// @class has_signal_scroll_begin
1246 /// @brief \signal_scroll_begin_brief
1247 /// @tparam T instance type
1248 ///
1249 /// @fn void has_signal_scroll_begin::connect_signal_scroll_begin(Function_t)
1250 /// \signal_connect{(T&) -> void}
1251 ///
1252 /// @fn void has_signal_scroll_begin::connect_signal_scroll_begin(Function_t, Data_t)
1253 /// \signal_connect_data{(T&, Data_t) -> void}
1254 ///
1255 /// @fn void has_signal_scroll_begin::emit_signal_scroll_begin()
1256 /// \signal_emit_brief
1257 ///
1258 /// @var has_signal_scroll_begin::signal_id
1259 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerScroll.scroll-begin.html}
1260 ///
1261 /// @fn void has_signal_scroll_begin::set_signal_scroll_begin_blocked(bool)
1262 /// \signal_set_blocked
1263 ///
1264 /// @fn bool has_signal_scroll_begin::get_signal_scroll_begin_blocked() const
1265 /// \signal_get_blocked
1266 ///
1267 /// @fn void has_signal_scroll_begin::disconnect_signal_scroll_begin()
1268 /// \signal_disconnect
1269 ///
1270 /// @fn has_signal_scroll_begin::has_signal_scroll_begin
1271 /// \signal_ctor
1272
1273 DECLARE_SIGNAL_MANUAL(Scroll, scroll, SCROLL, "scroll", bool,
1274 SPLAT(double delta_x, double delta_y),
1275 SPLAT(delta_x, delta_y)
1277 /// @class has_signal_scroll
1278 /// @brief \signal_scroll_brief
1279 /// @tparam T instance type
1280 ///
1281 /// @fn void has_signal_scroll::connect_signal_scroll(Function_t)
1282 /// \signal_connect{(T&, double delta_x, double delta_y) -> void}
1283 ///
1284 /// @fn void has_signal_scroll::connect_signal_scroll(Function_t, Data_t)
1285 /// \signal_connect_data{(T&, double delta_x, double delta_y, Data_t) -> void}
1286 ///
1287 /// @fn void has_signal_scroll::emit_signal_scroll(double delta_x, double delta_y)
1288 /// \signal_emit_brief
1289 /// @param delta_x difference of horizontal scroll offsets between this and previous frame. If positive, scroll left to right, if negative, scroll right to left
1290 /// @param delta_y difference of vertical scroll offsets between this and previous frame. If positive, scroll top to bottom, if negative, scroll bottom to top
1291 ///
1292 /// @var has_signal_scroll::signal_id
1293 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerScroll.scroll.html}
1294 ///
1295 /// @fn void has_signal_scroll::set_signal_scroll_blocked(bool)
1296 /// \signal_set_blocked
1297 ///
1298 /// @fn bool has_signal_scroll::get_signal_scroll_blocked() const
1299 /// \signal_get_blocked
1300 ///
1301 /// @fn void has_signal_scroll::disconnect_signal_scroll()
1302 /// \signal_disconnect
1303 ///
1304 /// @fn has_signal_scroll::has_signal_scroll
1305 /// \signal_ctor
1306
1307 DECLARE_SIGNAL(ScrollEnd, scroll_end, SCROLL_END, "scroll-end", void);
1308 /// @class has_signal_scroll_end
1309 /// @brief \signal_scroll_end_brief
1310 /// @tparam T instance type
1311 ///
1312 /// @fn void has_signal_scroll_end::connect_signal_scroll_end(Function_t)
1313 /// \signal_connect{(T&) -> void}
1314 ///
1315 /// @fn void has_signal_scroll_end::connect_signal_scroll_end(Function_t, Data_t)
1316 /// \signal_connect_data{(T&, Data_t) -> void}
1317 ///
1318 /// @fn void has_signal_scroll_end::emit_signal_scroll_end()
1319 /// \signal_emit_brief
1320 ///
1321 /// @var has_signal_scroll_end::signal_id
1322 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerScroll.scroll-begin.html}
1323 ///
1324 /// @fn void has_signal_scroll_end::set_signal_scroll_end_blocked(bool)
1325 /// \signal_set_blocked
1326 ///
1327 /// @fn bool has_signal_scroll_end::get_signal_scroll_end_blocked() const
1328 /// \signal_get_blocked
1329 ///
1330 /// @fn void has_signal_scroll_end::disconnect_signal_scroll_end()
1331 /// \signal_disconnect
1332 ///
1333 /// @fn has_signal_scroll_end::has_signal_scroll_end
1334 /// \signal_ctor
1335
1336 DECLARE_SIGNAL(FocusGained, focus_gained, FOCUS_GAINED, "enter", void);
1337 /// @class has_signal_focus_gained
1338 /// @brief \signal_focus_gained_brief
1339 /// @tparam T instance type
1340 ///
1341 /// @fn void has_signal_focus_gained::connect_signal_focus_gained(Function_t)
1342 /// \signal_connect{(T&) -> void}
1343 ///
1344 /// @fn void has_signal_focus_gained::connect_signal_focus_gained(Function_t, Data_t)
1345 /// \signal_connect_data{(T&, Data_t) -> void}
1346 //
1347 /// @fn void has_signal_focus_gained::emit_signal_focus_gained()
1348 /// \signal_emit_brief
1349 ///
1350 /// @var has_signal_focus_gained::signal_id
1351 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerFocus.enter.html}
1352 ///
1353 /// @fn void has_signal_focus_gained::set_signal_focus_gained_blocked(bool)
1354 /// \signal_set_blocked
1355 ///
1356 /// @fn bool has_signal_focus_gained::get_signal_focus_gained_blocked() const
1357 /// \signal_get_blocked
1358 ///
1359 /// @fn void has_signal_focus_gained::disconnect_signal_focus_gained()
1360 /// \signal_disconnect
1361 ///
1362 /// @fn has_signal_focus_gained::has_signal_focus_gained
1363 /// \signal_ctor
1364
1365 DECLARE_SIGNAL(FocusLost, focus_lost, FOCUS_LOST, "leave", void);
1366 /// @class has_signal_focus_lost
1367 /// @brief \signal_focus_lost_brief
1368 /// @tparam T instance type
1369 ///
1370 /// @fn void has_signal_focus_lost::connect_signal_focus_lost(Function_t)
1371 /// \signal_connect{(T&) -> void}
1372 ///
1373 /// @fn void has_signal_focus_lost::connect_signal_focus_lost(Function_t, Data_t)
1374 /// \signal_connect_data{(T&, Data_t) -> void}
1375 ///
1376 /// @fn void has_signal_focus_lost::emit_signal_focus_lost()
1377 /// \signal_emit_brief
1378 ///
1379 /// @var has_signal_focus_lost::signal_id
1380 /// \signal_id{https://docs.gtk.org/gtk4/signal.EventControllerFocus.leave.html}
1381 ///
1382 /// @fn void has_signal_focus_lost::set_signal_focus_lost_blocked(bool)
1383 /// \signal_set_blocked
1384 ///
1385 /// @fn bool has_signal_focus_lost::get_signal_focus_lost_blocked() const
1386 /// \signal_get_blocked
1387 ///
1388 /// @fn void has_signal_focus_lost::disconnect_signal_focus_lost()
1389 /// \signal_disconnect
1390 ///
1391 /// @fn has_signal_focus_lost::has_signal_focus_lost
1392 /// \signal_ctor
1393
1394 DECLARE_SIGNAL_MANUAL(DragBegin, drag_begin, DRAG_BEGIN, "drag-begin", void,
1395 SPLAT(double start_x, double start_y),
1396 SPLAT(start_x, start_y)
1398 /// @class has_signal_drag_begin
1399 /// @brief \signal_drag_begin_brief
1400 /// @tparam T instance type
1401 ///
1402 /// @fn void has_signal_drag_begin::connect_signal_drag_begin(Function_t)
1403 /// \signal_connect{(T&, double start_x, double start_y) -> void}
1404 ///
1405 /// @fn void has_signal_drag_begin::connect_signal_drag_begin(Function_t, Data_t)
1406 /// \signal_connect_data{(T&, double start_x, double start_y, Data_t) -> void}
1407 ///
1408 /// @fn void has_signal_drag_begin::emit_signal_drag_begin(double start_x, double start_y)
1409 /// \signal_emit_brief
1410 /// @param start_x x-position of the cursor, widget-relative coordinates, in pixels
1411 /// @param start_y y-position of the cursor, widget-relative coordiantes, in pixels
1412 ///
1413 /// @var has_signal_drag_begin::signal_id
1414 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureDrag.drag-begin.html}
1415 ///
1416 /// @fn void has_signal_drag_begin::set_signal_drag_begin_blocked(bool)
1417 /// \signal_set_blocked
1418 ///
1419 /// @fn bool has_signal_drag_begin::get_signal_drag_begin_blocked() const
1420 /// \signal_get_blocked
1421 ///
1422 /// @fn void has_signal_drag_begin::disconnect_signal_drag_begin()
1423 /// \signal_disconnect
1424 ///
1425 /// @fn has_signal_drag_begin::has_signal_drag_begin
1426 /// \signal_ctor
1427
1428 DECLARE_SIGNAL_MANUAL(Drag, drag, DRAG, "drag-update", void,
1429 SPLAT(double offset_x, double offset_y),
1430 SPLAT(offset_x, offset_y)
1432 /// @class has_signal_drag
1433 /// @brief \signal_drag_brief
1434 /// @tparam T instance type
1435 ///
1436 /// @fn void has_signal_drag::connect_signal_drag(Function_t)
1437 /// \signal_connect{(T&, double offset_x, double offset_y) -> void}
1438 ///
1439 /// @fn void has_signal_drag::connect_signal_drag(Function_t, Data_t)
1440 /// \signal_connect_data{(T&, double offset_x, double offset_y, Data_t) -> void}
1441 ///
1442 /// @fn void has_signal_drag::emit_signal_drag(double offset_x, double offset_y)
1443 /// \signal_emit_brief
1444 /// @param offset_x horizontal offset from drag start point, widget-relative coordinates, in pixels
1445 /// @param offset_y vertical offset from drag start point, widget-relative coordinates, in pixels
1446 ///
1447 /// @var has_signal_drag::signal_id
1448 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureDrag.drag-update.html}
1449 ///
1450 /// @fn void has_signal_drag::set_signal_drag_blocked(bool)
1451 /// \signal_set_blocked
1452 ///
1453 /// @fn bool has_signal_drag::get_signal_drag_blocked() const
1454 /// \signal_get_blocked
1455 ///
1456 /// @fn void has_signal_drag::disconnect_signal_drag()
1457 /// \signal_disconnect
1458 ///
1459 /// @fn has_signal_drag::has_signal_drag
1460 /// \signal_ctor
1461
1462 DECLARE_SIGNAL_MANUAL(DragEnd, drag_end, DRAG_END, "drag-end", void,
1463 SPLAT(double offset_x, double offset_y),
1464 SPLAT(offset_x, offset_y)
1466 /// @class has_signal_drag_end
1467 /// @brief \signal_drag_end_brief
1468 /// @tparam T instance type
1469 ///
1470 /// @fn void has_signal_drag_end::connect_signal_drag_end(Function_t)
1471 /// \signal_connect{(T&, double offset_x, double offset_y) -> void}
1472 ///
1473 /// @fn void has_signal_drag_end::connect_signal_drag_end(Function_t, Data_t)
1474 /// \signal_connect_data{(T&, double offset_x, double offset_y, Data_t) -> void}
1475 ///
1476 /// @fn void has_signal_drag_end::emit_signal_drag_end(double offset_x, double offset_y)
1477 /// \signal_emit_brief
1478 /// @param offset_x horizontal offset from drag start point, widget-relative coordinates, in pixels
1479 /// @param offset_y vertical offset from drag start point, widget-relative coordinates, in pixels
1480 ///
1481 /// @var has_signal_drag_end::signal_id
1482 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureDrag.drag-end.html}
1483 ///
1484 /// @fn void has_signal_drag_end::set_signal_drag_end_blocked(bool)
1485 /// \signal_set_blocked
1486 ///
1487 /// @fn bool has_signal_drag_end::get_signal_drag_end_blocked() const
1488 /// \signal_get_blocked
1489 ///
1490 /// @fn void has_signal_drag_end::disconnect_signal_drag_end()
1491 /// \signal_disconnect
1492 ///
1493 /// @fn has_signal_drag_end::has_signal_drag_end
1494 /// \signal_ctor
1495
1496 DECLARE_SIGNAL_MANUAL(ScaleChanged, scale_changed, SCALE_CHANGED, "scale-changed", void,
1497 double scale,
1498 scale
1500 /// @class has_signal_scale_changed
1501 /// @brief \signal_scale_changed_brief
1502 /// @tparam T instance type
1503 ///
1504 /// @fn void has_signal_scale_changed::connect_signal_scale_changed(Function_t)
1505 /// \signal_connect{(T&, double scale) -> void}
1506 ///
1507 /// @fn void has_signal_scale_changed::connect_signal_scale_changed(Function_t, Data_t)
1508 /// \signal_connect_data{(T&, double scale, Data_t) -> void}
1509 ///
1510 /// @fn void has_signal_scale_changed::emit_signal_scale_changed(double scale)
1511 /// \signal_emit_brief
1512 /// @param scale difference of current scale to scale at the start of the gesture
1513 ///
1514 /// @var has_signal_scale_changed::signal_id
1515 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureZoom.scale-changed.html}
1516 ///
1517 /// @fn void has_signal_scale_changed::set_signal_scale_changed_blocked(bool)
1518 /// \signal_set_blocked
1519 ///
1520 /// @fn bool has_signal_scale_changed::get_signal_scale_changed_blocked() const
1521 /// \signal_get_blocked
1522 ///
1523 /// @fn void has_signal_scale_changed::disconnect_signal_scale_changed()
1524 /// \signal_disconnect
1525 ///
1526 /// @fn has_signal_scale_changed::has_signal_scale_changed
1527 /// \signal_ctor
1528
1529 DECLARE_SIGNAL_MANUAL(RotationChanged, rotation_changed, ROTATION_CHANGED, "angle-changed", void,
1530 SPLAT(double angle_absolute_radians, double angle_delta_radians),
1531 SPLAT(angle_absolute_radians, angle_delta_radians)
1533 /// @class has_signal_rotation_changed
1534 /// @brief \signal_rotation_changed_brief
1535 /// @tparam T instance type
1536 ///
1537 /// @fn void has_signal_rotation_changed::connect_signal_rotation_changed(Function_t)
1538 /// \signal_connect{(T&, double angle_absolute_radians, double angle_delta_radians) -> void}
1539 ///
1540 /// @fn void has_signal_rotation_changed::connect_signal_rotation_changed(Function_t, Data_t)
1541 /// \signal_connect_data{(T&, double angle_absolute_radians, double angle_delta_radians, Data_t) -> void}
1542 ///
1543 /// @fn void has_signal_rotation_changed::emit_signal_rotation_changed(double angle_absolute_radians, double angle_delta_radians)
1544 /// \signal_emit_brief
1545 /// @param angle_absolute_radians current angle relative to widget coordinate origin, in radians
1546 /// @param angle_delta_radians difference between the angle this frame and that of the last frame
1547 ///
1548 /// @var has_signal_rotation_changed::signal_id
1549 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureRotate.angle-changed.html}
1550 ///
1551 /// @fn void has_signal_rotation_changed::set_signal_rotation_changed_blocked(bool)
1552 /// \signal_set_blocked
1553 ///
1554 /// @fn bool has_signal_rotation_changed::get_signal_rotation_changed_blocked() const
1555 /// \signal_get_blocked
1556 ///
1557 /// @fn void has_signal_rotation_changed::disconnect_signal_rotation_changed()
1558 /// \signal_disconnect
1559 ///
1560 /// @fn has_signal_rotation_changed::has_signal_rotation_changed
1561 /// \signal_ctor
1562
1563 DECLARE_SIGNAL(PropertiesChanged, properties_changed, PROPERTIES_CHANGED, "changed", void);
1564 /// @class has_signal_properties_changed
1565 /// @brief \signal_properties_changed_brief
1566 /// @tparam T instance type
1567 /// @see mousetrap::has_signal_value_changed
1568 ///
1569 /// @fn void has_signal_properties_changed::connect_signal_properties_changed(Function_t)
1570 /// \signal_connect{(T&) -> void}
1571 ///
1572 /// @fn void has_signal_properties_changed::connect_signal_properties_changed(Function_t, Data_t)
1573 /// \signal_connect_data{(T&, Data_t) -> void}
1574 ///
1575 /// @fn void has_signal_properties_changed::emit_signal_properties_changed()
1576 /// \signal_emit_brief
1577 ///
1578 /// @var has_signal_properties_changed::signal_id
1579 /// \signal_id{https://docs.gtk.org/gtk4/signal.Adjustment.changed.html}
1580 ///
1581 /// @fn void has_signal_properties_changed::set_signal_properties_changed_blocked(bool)
1582 /// \signal_set_blocked
1583 ///
1584 /// @fn bool has_signal_properties_changed::get_signal_properties_changed_blocked() const
1585 /// \signal_get_blocked
1586 ///
1587 /// @fn void has_signal_properties_changed::disconnect_signal_properties_changed()
1588 /// \signal_disconnect
1589 ///
1590 /// @fn has_signal_properties_changed::has_signal_properties_changed
1591 /// \signal_ctor
1592
1593 DECLARE_SIGNAL(ValueChanged, value_changed, VALUE_CHANGED, "value-changed", void);
1594 /// @class has_signal_value_changed
1595 /// @brief \signal_value_changed_brief
1596 /// @tparam T instance type
1597 ///
1598 /// @fn void has_signal_value_changed::connect_signal_value_changed(Function_t)
1599 /// \signal_connect{(T&) -> void}
1600 ///
1601 /// @fn void has_signal_value_changed::connect_signal_value_changed(Function_t, Data_t)
1602 /// \signal_connect_data{(T&, Data_t) -> void}
1603 ///
1604 /// @fn void has_signal_value_changed::emit_signal_value_changed()
1605 /// \signal_emit_brief
1606 ///
1607 /// @var has_signal_value_changed::signal_id
1608 /// \signal_id{https://docs.gtk.org/gtk4/signal.Adjustment.value-changed.html}
1609 ///
1610 /// @fn void has_signal_value_changed::set_signal_value_changed_blocked(bool)
1611 /// \signal_set_blocked
1612 ///
1613 /// @fn bool has_signal_value_changed::get_signal_value_changed_blocked() const
1614 /// \signal_get_blocked
1615 ///
1616 /// @fn void has_signal_value_changed::disconnect_signal_value_changed()
1617 /// \signal_disconnect
1618 ///
1619 /// @fn has_signal_value_changed::has_signal_value_changed
1620 /// \signal_ctor
1621
1622 DECLARE_SIGNAL_MANUAL(Render, render, RENDER, "render", bool, GdkGLContext* context, context);
1623 /// @class has_signal_render
1624 /// @brief \signal_render_brief
1625 /// @tparam T instance type
1626 ///
1627 /// @fn void has_signal_render::connect_signal_render(Function_t)
1628 /// \signal_connect{(T&, GdkGLContext* context) -> bool}
1629 ///
1630 /// @fn void has_signal_render::connect_signal_render(Function_t, Data_t)
1631 /// \signal_connect_data{(T&, GdkGLContext* context, Data_t) -> bool}
1632 ///
1633 /// @fn void has_signal_render::emit_signal_render()
1634 /// \signal_emit_brief
1635 ///
1636 /// @var has_signal_render::signal_id
1637 /// \signal_id{https://docs.gtk.org/gtk4/signal.GLArea.render.html}
1638 ///
1639 /// @fn void has_signal_render::set_signal_render_blocked(bool)
1640 /// \signal_set_blocked
1641 ///
1642 /// @fn bool has_signal_render::get_signal_render_blocked() const
1643 /// \signal_get_blocked
1644 ///
1645 /// @fn void has_signal_render::disconnect_signal_render()
1646 /// \signal_disconnect
1647 ///
1648 /// @fn has_signal_render::has_signal_render
1649 /// \signal_ctor
1650
1651 DECLARE_SIGNAL_MANUAL(Resize, resize, RESIZE, "resize", void,
1652 SPLAT(int32_t width, int32_t height),
1653 SPLAT(width, height)
1655 /// @class has_signal_resize
1656 /// @brief \signal_resize_brief
1657 /// @tparam T instance type
1658 ///
1659 /// @fn void has_signal_resize::connect_signal_resize(Function_t)
1660 /// \signal_connect{(T&, int32_t width, int32_t height) -> void}
1661 ///
1662 /// @fn void has_signal_resize::connect_signal_resize(Function_t, Data_t)
1663 /// \signal_connect_data{(T&, int32_t width, int32_t height, Data_t) -> void}
1664 ///
1665 /// @fn void has_signal_resize::emit_signal_resize(int32_t width, int32_t height)
1666 /// \signal_emit_brief
1667 /// @param width absolute width, in pixels
1668 /// @param height absolute height, in pixels
1669 ///
1670 /// @var has_signal_resize::signal_id
1671 /// \signal_id{https://docs.gtk.org/gtk4/signal.GLArea.resize.html}
1672 ///
1673 /// @fn void has_signal_resize::set_signal_resize_blocked(bool)
1674 /// \signal_set_blocked
1675 ///
1676 /// @fn bool has_signal_resize::get_signal_resize_blocked() const
1677 /// \signal_get_blocked
1678 ///
1679 /// @fn void has_signal_resize::disconnect_signal_resize()
1680 /// \signal_disconnect
1681 ///
1682 /// @fn has_signal_resize::has_signal_resize
1683 /// \signal_ctor
1684
1685 DECLARE_SIGNAL_MANUAL(PageAdded, page_added, PAGE_ADDED, "page-added", void,
1686 SPLAT(UnusedArgument_t _, uint32_t page_index),
1687 SPLAT(_, page_index)
1689 /// @class has_signal_page_added
1690 /// @brief \signal_page_added_brief
1691 /// @tparam T instance type
1692 ///
1693 /// @fn void has_signal_page_added::connect_signal_page_added(Function_t)
1694 /// \signal_connect{(T&, UnusedArgument_t _, uint32_t page_index) -> void}
1695 ///
1696 /// @fn void has_signal_page_added::connect_signal_page_added(Function_t, Data_t)
1697 /// \signal_connect_data{(T&, UnusedArgument_t _, uint32_t page_index, Data_t) -> void}
1698 ///
1699 /// @fn void has_signal_page_added::emit_signal_page_added(UnusedArgument_t _, uint32_t page_index)
1700 /// \signal_emit_brief
1701 /// @param _ pointer to internal widget, can be ignored
1702 /// @param page_index index of the new page
1703 ///
1704 /// @var has_signal_page_added::signal_id
1705 /// \signal_id{https://docs.gtk.org/gtk4/signal.Notebook.page-added.html}
1706 ///
1707 /// @fn void has_signal_page_added::set_signal_page_added_blocked(bool)
1708 /// \signal_set_blocked
1709 ///
1710 /// @fn bool has_signal_page_added::get_signal_page_added_blocked() const
1711 /// \signal_get_blocked
1712 ///
1713 /// @fn void has_signal_page_added::disconnect_signal_page_added()
1714 /// \signal_disconnect
1715 ///
1716 /// @fn has_signal_page_added::has_signal_page_added
1717 /// \signal_ctor
1718
1719 DECLARE_SIGNAL_MANUAL(PageRemoved, page_removed, PAGE_REMOVED, "page-removed", void,
1720 SPLAT(UnusedArgument_t _, uint32_t page_index),
1721 SPLAT(_, page_index)
1723 /// @class has_signal_page_removed
1724 /// @brief \signal_page_removed_brief
1725 /// @tparam T instance type
1726 ///
1727 /// @fn void has_signal_page_removed::connect_signal_page_removed(Function_t)
1728 /// \signal_connect{(T&, UnusedArgument_t _, uint32_t page_index) -> void}
1729 ///
1730 /// @fn void has_signal_page_removed::connect_signal_page_removed(Function_t, Data_t)
1731 /// \signal_connect_data{(T&, UnusedArgument_t _, uint32_t page_index, Data_t) -> void}
1732 ///
1733 /// @fn void has_signal_page_removed::emit_signal_page_removed(UnusedArgument_t _, uint32_t page_index)
1734 /// \signal_emit_brief
1735 /// @param _ pointer to internal widget, can be ignored
1736 /// @param page_index index of the new page
1737 ///
1738 /// @var has_signal_page_removed::signal_id
1739 /// \signal_id{https://docs.gtk.org/gtk4/signal.Notebook.page-removed.html}
1740 ///
1741 /// @fn void has_signal_page_removed::set_signal_page_removed_blocked(bool)
1742 /// \signal_set_blocked
1743 ///
1744 /// @fn bool has_signal_page_removed::get_signal_page_removed_blocked() const
1745 /// \signal_get_blocked
1746 ///
1747 /// @fn void has_signal_page_removed::disconnect_signal_page_removed()
1748 /// \signal_disconnect
1749 ///
1750 /// @fn has_signal_page_removed::has_signal_page_removed
1751 /// \signal_ctor
1752
1753 DECLARE_SIGNAL_MANUAL(PageReordered, page_reordered, PAGE_REORDERED, "page-reordered", void,
1754 SPLAT(UnusedArgument_t _, uint32_t page_index),
1755 SPLAT(_, page_index)
1757 /// @class has_signal_page_reordered
1758 /// @brief \signal_page_reordered_brief
1759 /// @tparam T instance type
1760 ///
1761 /// @fn void has_signal_page_reordered::connect_signal_page_reordered(Function_t)
1762 /// \signal_connect{(T&, UnusedArgument_t _, uint32_t page_index) -> void}
1763 ///
1764 /// @fn void has_signal_page_reordered::connect_signal_page_reordered(Function_t, Data_t)
1765 /// \signal_connect_data{(T&, UnusedArgument_t _, uint32_t page_index, Data_t) -> void}
1766 ///
1767 /// @fn void has_signal_page_reordered::emit_signal_page_reordered(UnusedArgument_t _, uint32_t page_index)
1768 /// \signal_emit_brief
1769 /// @param _ pointer to internal widget, can be ignored
1770 /// @param page_index index of the new page
1771 ///
1772 /// @var has_signal_page_reordered::signal_id
1773 /// \signal_id{https://docs.gtk.org/gtk4/signal.Notebook.page-reordered.html}
1774 ///
1775 /// @fn void has_signal_page_reordered::set_signal_page_reordered_blocked(bool)
1776 /// \signal_set_blocked
1777 ///
1778 /// @fn bool has_signal_page_reordered::get_signal_page_reordered_blocked() const
1779 /// \signal_get_blocked
1780 ///
1781 /// @fn void has_signal_page_reordered::disconnect_signal_page_reordered()
1782 /// \signal_disconnect
1783 ///
1784 /// @fn has_signal_page_reordered::has_signal_page_reordered
1785 /// \signal_ctor
1786
1787 DECLARE_SIGNAL_MANUAL(PageSelectionChanged, page_selection_changed, PAGE_SELECTION_CHANGED, "switch-page", void,
1788 SPLAT(UnusedArgument_t _, uint32_t page_index),
1789 SPLAT(_, page_index)
1791 /// @class has_signal_page_selection_changed
1792 /// @brief \signal_page_selection_changed_brief
1793 /// @tparam T instance type
1794 ///
1795 /// @fn void has_signal_page_selection_changed::connect_signal_page_selection_changed(Function_t)
1796 /// \signal_connect{(T&, UnusedArgument_t _, uint32_t page_index) -> void}
1797 ///
1798 /// @fn void has_signal_page_selection_changed::connect_signal_page_selection_changed(Function_t, Data_t)
1799 /// \signal_connect_data{(T&, UnusedArgument_t _, uint32_t page_index, Data_t) -> void}
1800 ///
1801 /// @fn void has_signal_page_selection_changed::emit_signal_page_selection_changed(GtkWidget* _, uint32_t page_index)
1802 /// \signal_emit_brief
1803 /// @param _ pointer to internal widget, can be ignored
1804 /// @param page_index index of the newly selected page
1805 ///
1806 /// @var has_signal_page_selection_changed::signal_id
1807 /// \signal_id{https://docs.gtk.org/gtk4/signal.Notebook.switch-page.html}
1808 ///
1809 /// @fn void has_signal_page_selection_changed::set_signal_page_selection_changed_blocked(bool)
1810 /// \signal_set_blocked
1811 ///
1812 /// @fn bool has_signal_page_selection_changed::get_signal_page_selection_changed_blocked() const
1813 /// \signal_get_blocked
1814 ///
1815 /// @fn void has_signal_page_selection_changed::disconnect_signal_page_selection_changed()
1816 /// \signal_disconnect
1817 ///
1818 /// @fn has_signal_page_selection_changed::has_signal_page_selection_changed
1819 /// \signal_ctor
1820
1821 DECLARE_SIGNAL(Wrapped, wrapped, WRAPPED, "wrapped", void);
1822 /// @class has_signal_wrapped
1823 /// @brief \signal_wrapped_brief
1824 /// @tparam T instance type
1825 ///
1826 /// @fn void has_signal_wrapped::connect_signal_wrapped(Function_t)
1827 /// \signal_connect{(T&) -> void}
1828 ///
1829 /// @fn void has_signal_wrapped::connect_signal_wrapped(Function_t, Data_t)
1830 /// \signal_connect_data{(T&, Data_t) -> void}
1831 ///
1832 /// @fn void has_signal_wrapped::emit_signal_wrapped()
1833 /// \signal_emit_brief
1834 ///
1835 /// @var has_signal_wrapped::signal_id
1836 /// \signal_id{https://docs.gtk.org/gtk4/signal.SpinButton.wrapped.html}
1837 ///
1838 /// @fn void has_signal_wrapped::set_signal_wrapped_blocked(bool)
1839 /// \signal_set_blocked
1840 ///
1841 /// @fn bool has_signal_wrapped::get_signal_wrapped_blocked() const
1842 /// \signal_get_blocked
1843 ///
1844 /// @fn void has_signal_wrapped::disconnect_signal_wrapped()
1845 /// \signal_disconnect
1846 ///
1847 /// @fn has_signal_wrapped::has_signal_wrapped
1848 /// \signal_ctor
1849
1850 DECLARE_SIGNAL_MANUAL(Pressed, pressed, PRESSED, "pressed", void,
1851 SPLAT(double x, double y),
1852 SPLAT(x, y)
1854 /// @class has_signal_pressed
1855 /// @brief \signal_pressed_brief
1856 /// @tparam T instance type
1857 ///
1858 /// @fn void has_signal_pressed::connect_signal_pressed(Function_t)
1859 /// \signal_connect{(T&, double x, double y) -> void}
1860 ///
1861 /// @fn void has_signal_pressed::connect_signal_pressed(Function_t, Data_t)
1862 /// \signal_connect_data{(T&, double x, double y, Data_t) -> void}
1863 ///
1864 /// @fn void has_signal_pressed::emit_signal_pressed(int32_t n_press, double x, double y)
1865 /// \signal_emit_brief
1866 /// @param x x-coordinate of the cursor, widget-relative position, in pixels
1867 /// @param y y-coordinate of the cursor, widget-relative position, in pixels
1868 ///
1869 /// @var has_signal_pressed::signal_id
1870 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureClick.pressed.html}
1871 ///
1872 /// @fn void has_signal_pressed::set_signal_pressed_blocked(bool)
1873 /// \signal_set_blocked
1874 ///
1875 /// @fn bool has_signal_pressed::get_signal_pressed_blocked() const
1876 /// \signal_get_blocked
1877 ///
1878 /// @fn void has_signal_pressed::disconnect_signal_pressed()
1879 /// \signal_disconnect
1880 ///
1881 /// @fn has_signal_pressed::has_signal_pressed
1882 /// \signal_ctor
1883
1884 DECLARE_SIGNAL(PressCancelled, press_cancelled, PRESS_CANCELLED, "cancelled", void);
1885 /// @class has_signal_press_cancelled
1886 /// @brief \signal_press_cancelled_brief
1887 /// @tparam T instance type
1888 ///
1889 /// @fn void has_signal_press_cancelled::connect_signal_press_cancelled(Function_t)
1890 /// \signal_connect{(T&) -> void}
1891 ///
1892 /// @fn void has_signal_press_cancelled::connect_signal_press_cancelled(Function_t, Data_t)
1893 /// \signal_connect_data{(T&, Data_t) -> void}
1894 ///
1895 /// @fn void has_signal_press_cancelled::emit_signal_press_cancelled()
1896 /// \signal_emit_brief
1897 ///
1898 /// @var has_signal_press_cancelled::signal_id
1899 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureLongPress.cancelled.html}
1900 ///
1901 /// @fn void has_signal_press_cancelled::set_signal_press_cancelled_blocked(bool)
1902 /// \signal_set_blocked
1903 ///
1904 /// @fn bool has_signal_press_cancelled::get_signal_press_cancelled_blocked() const
1905 /// \signal_get_blocked
1906 ///
1907 /// @fn void has_signal_press_cancelled::disconnect_signal_press_cancelled()
1908 /// \signal_disconnect
1909 ///
1910 /// @fn has_signal_press_cancelled::has_signal_press_cancelled
1911 /// \signal_ctor
1912
1913 /// @brief Touch-screen pan direction
1914 enum class PanDirection
1915 {
1916 /// @brief pan right to left
1917 LEFT = GTK_PAN_DIRECTION_LEFT,
1918
1919 /// @brief pan left to right
1920 RIGHT = GTK_PAN_DIRECTION_RIGHT,
1921
1922 /// @brief pan bottom to top
1923 UP = GTK_PAN_DIRECTION_UP,
1924
1925 /// @brief pan top to bottom
1926 DOWN = GTK_PAN_DIRECTION_DOWN
1927 };
1928
1929 DECLARE_SIGNAL_MANUAL(Pan, pan, PAN, "pan", void,
1930 SPLAT(PanDirection direction, double offset),
1931 SPLAT(direction, offset)
1933 /// @class has_signal_pan
1934 /// @brief \signal_pan_brief
1935 /// @tparam T instance type
1936 ///
1937 /// @fn void has_signal_pan::connect_signal_pan(Function_t)
1938 /// \signal_connect{(T&, PanDirection direction, double offset) -> void}
1939 ///
1940 /// @fn void has_signal_pan::connect_signal_pan(Function_t, Data_t)
1941 /// \signal_connect_data{(T&, PanDirection direction, double offset, Data_t) -> void}
1942 ///
1943 /// @fn void has_signal_pan::emit_signal_pan(int32_t n_press, double x, double y)
1944 /// \signal_emit_brief
1945 /// @param direction pan direction
1946 /// @param offset offset from starting position, in pixels
1947 ///
1948 /// @var has_signal_pan::signal_id
1949 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureClick.pan.html}
1950 ///
1951 /// @fn void has_signal_pan::set_signal_pan_blocked(bool)
1952 /// \signal_set_blocked
1953 ///
1954 /// @fn bool has_signal_pan::get_signal_pan_blocked() const
1955 /// \signal_get_blocked
1956 ///
1957 /// @fn void has_signal_pan::disconnect_signal_pan()
1958 /// \signal_disconnect
1959 ///
1960 /// @fn has_signal_pan::has_signal_pan
1961 /// \signal_ctor
1962
1963 DECLARE_SIGNAL_MANUAL(Swipe, swipe, SWIPE, "swipe", void,
1964 SPLAT(double x_velocity, double y_velocity),
1965 SPLAT(x_velocity, y_velocity)
1967 /// @class has_signal_swipe
1968 /// @brief \signal_swipe_brief
1969 /// @tparam T instance type
1970 ///
1971 /// @fn void has_signal_swipe::connect_signal_swipe(Function_t)
1972 /// \signal_connect{(T&, double x_velocity, double y_velocity) -> void}
1973 ///
1974 /// @fn void has_signal_swipe::connect_signal_swipe(Function_t, Data_t)
1975 /// \signal_connect_data{(T&, double x_velocity, double y_velocity, Data_t) -> void}
1976 ///
1977 /// @fn void has_signal_swipe::emit_signal_swipe(int32_t n_press, double x, double y)
1978 /// \signal_emit_brief
1979 /// @param x_velocity speed along the x-axis
1980 /// @param y_velocity speed along the y-axis
1981 ///
1982 /// @var has_signal_swipe::signal_id
1983 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureClick.swipe.html}
1984 ///
1985 /// @fn void has_signal_swipe::set_signal_swipe_blocked(bool)
1986 /// \signal_set_blocked
1987 ///
1988 /// @fn bool has_signal_swipe::get_signal_swipe_blocked() const
1989 /// \signal_get_blocked
1990 ///
1991 /// @fn void has_signal_swipe::disconnect_signal_swipe()
1992 /// \signal_disconnect
1993 ///
1994 /// @fn has_signal_swipe::has_signal_swipe
1995 /// \signal_ctor
1996
1997 DECLARE_SIGNAL_MANUAL(StylusDown, stylus_down, STYLUS_DOWN, "down", void,
1998 SPLAT(double x, double y),
1999 SPLAT(x, y)
2001 /// @class has_signal_stylus_down
2002 /// @brief \signal_stylus_down_brief
2003 /// @tparam T instance type
2004 ///
2005 /// @fn void has_signal_stylus_down::connect_signal_stylus_down(Function_t)
2006 /// \signal_connect{(T&, double x, double y) -> void}
2007 ///
2008 /// @fn void has_signal_stylus_down::connect_signal_stylus_down(Function_t, Data_t)
2009 /// \signal_connect_data{(T&, double x, double y, Data_t) -> void}
2010 ///
2011 /// @fn void has_signal_stylus_down::emit_signal_stylus_down(double x, double y)
2012 /// \signal_emit_brief
2013 /// @param x x-coordinate of the cursor, widget-relative position, in pixels
2014 /// @param y y-coordinate of the cursor, widget-relative position, in pixels
2015 ///
2016 /// @var has_signal_stylus_down::signal_id
2017 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureClick.stylus_down.htmlhttps://docs.gtk.org/gtk4/signal.GestureStylus.down.html}
2018 ///
2019 /// @fn void has_signal_stylus_down::set_signal_stylus_down_blocked(bool)
2020 /// \signal_set_blocked
2021 ///
2022 /// @fn bool has_signal_stylus_down::get_signal_stylus_down_blocked() const
2023 /// \signal_get_blocked
2024 ///
2025 /// @fn void has_signal_stylus_down::disconnect_signal_stylus_down()
2026 /// \signal_disconnect
2027 ///
2028 /// @fn has_signal_stylus_down::has_signal_stylus_down
2029 /// \signal_ctor
2030
2031 DECLARE_SIGNAL_MANUAL(StylusUp, stylus_up, STYLUS_UP, "up", void,
2032 SPLAT(double x, double y),
2033 SPLAT(x, y)
2035 /// @class has_signal_stylus_up
2036 /// @brief \signal_stylus_up_brief
2037 /// @tparam T instance type
2038 ///
2039 /// @fn void has_signal_stylus_up::connect_signal_stylus_up(Function_t)
2040 /// \signal_connect{(T&, double x, double y) -> void}
2041 ///
2042 /// @fn void has_signal_stylus_up::connect_signal_stylus_up(Function_t, Data_t)
2043 /// \signal_connect_data{(T&, double x, double y, Data_t) -> void}
2044 ///
2045 /// @fn void has_signal_stylus_up::emit_signal_stylus_up(double x, double y)
2046 /// \signal_emit_brief
2047 /// @param x x-coordinate of the cursor, widget-relative position, in pixels
2048 /// @param y y-coordinate of the cursor, widget-relative position, in pixels
2049 ///
2050 /// @var has_signal_stylus_up::signal_id
2051 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureClick.stylus_up.htmlhttps://docs.gtk.org/gtk4/signal.GestureStylus.up.html}
2052 ///
2053 /// @fn void has_signal_stylus_up::set_signal_stylus_up_blocked(bool)
2054 /// \signal_set_blocked
2055 ///
2056 /// @fn bool has_signal_stylus_up::get_signal_stylus_up_blocked() const
2057 /// \signal_get_blocked
2058 ///
2059 /// @fn void has_signal_stylus_up::disconnect_signal_stylus_up()
2060 /// \signal_disconnect
2061 ///
2062 /// @fn has_signal_stylus_up::has_signal_stylus_up
2063 /// \signal_ctor
2064
2065 DECLARE_SIGNAL_MANUAL(Proximity, proximity, PROXIMITY, "proximity", void,
2066 SPLAT(double x, double y),
2067 SPLAT(x, y)
2069 /// @class has_signal_proximity
2070 /// @brief \signal_proximity_brief
2071 /// @tparam T instance type
2072 ///
2073 /// @fn void has_signal_proximity::connect_signal_proximity(Function_t)
2074 /// \signal_connect{(T&, double x, double y) -> void}
2075 ///
2076 /// @fn void has_signal_proximity::connect_signal_proximity(Function_t, Data_t)
2077 /// \signal_connect_data{(T&, double x, double y, Data_t) -> void}
2078 ///
2079 /// @fn void has_signal_proximity::emit_signal_proximity(double x, double y)
2080 /// \signal_emit_brief
2081 /// @param x x-coordinate of the cursor, widget-relative position, in pixels
2082 /// @param y y-coordinate of the cursor, widget-relative position, in pixels
2083 ///
2084 /// @var has_signal_proximity::signal_id
2085 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureClick.proximity.htmlhttps://docs.gtk.org/gtk4/signal.GestureStylus.up.html}
2086 ///
2087 /// @fn void has_signal_proximity::set_signal_proximity_blocked(bool)
2088 /// \signal_set_blocked
2089 ///
2090 /// @fn bool has_signal_proximity::get_signal_proximity_blocked() const
2091 /// \signal_get_blocked
2092 ///
2093 /// @fn void has_signal_proximity::disconnect_signal_proximity()
2094 /// \signal_disconnect
2095 ///
2096 /// @fn has_signal_proximity::has_signal_proximity
2097 /// \signal_ctor
2098
2099 /// @brief type of scroll, used by mousetrap::Viewport `scroll_child` signal
2100 enum class ScrollType
2101 {
2102 /// @brief no scrolling
2103 NONE = GTK_SCROLL_NONE,
2104
2105 /// @brief jumped to new location
2106 JUMP = GTK_SCROLL_JUMP,
2107
2108 /// @brief scroll step backwards
2109 STEP_BACKWARD = GTK_SCROLL_STEP_BACKWARD,
2110
2111 /// @brief scroll step forwards
2112 STEP_FORWARD = GTK_SCROLL_STEP_FORWARD,
2113
2114 /// @brief scroll step up
2115 STEP_UP = GTK_SCROLL_STEP_UP,
2116
2117 /// @brief scroll step down
2118 STEP_DOWN = GTK_SCROLL_STEP_DOWN,
2119
2120 /// @brief scroll step left
2121 STEP_LEFT = GTK_SCROLL_STEP_LEFT,
2122
2123 /// @brief scroll step right
2124 STEP_RIGHT = GTK_SCROLL_STEP_RIGHT,
2125
2126 /// @brief page step backwards
2127 PAGE_BACKWARD = GTK_SCROLL_PAGE_BACKWARD,
2128
2129 /// @brief page step forwards
2130 PAGE_FORWARD = GTK_SCROLL_PAGE_FORWARD,
2131
2132 /// @brief page step up
2133 PAGE_UP = GTK_SCROLL_PAGE_UP,
2134
2135 /// @brief page step down
2136 PAGE_DOWN = GTK_SCROLL_PAGE_DOWN,
2137
2138 /// @brief page step left
2139 PAGE_LEFT = GTK_SCROLL_PAGE_LEFT,
2140
2141 /// @brief page step right
2142 PAGE_RIGHT = GTK_SCROLL_PAGE_RIGHT,
2143
2144 /// @brief jump to start
2145 SCROLL_START = GTK_SCROLL_START,
2146
2147 /// @brief jump to end
2148 SCROLL_END = GTK_SCROLL_END
2149 };
2150
2151 DECLARE_SIGNAL_MANUAL(ScrollChild, scroll_child, SCROLL_CHILD, "scroll-child", void,
2152 SPLAT(ScrollType scroll_type, bool is_horizontal),
2153 SPLAT(scroll_type, is_horizontal)
2155 /// @class has_signal_scroll_child
2156 /// @brief \signal_scroll_child_brief
2157 /// @tparam T instance type
2158 ///
2159 /// @fn void has_signal_scroll_child::connect_signal_scroll_child(Function_t)
2160 /// \signal_connect{(T&, ScrollType scroll_type, bool is_horizontal) -> void}
2161 ///
2162 /// @fn void has_signal_scroll_child::connect_signal_scroll_child(Function_t, Data_t)
2163 /// \signal_connect_data{(T&, ScrollType scroll_type, bool is_horizontal, Data_t) -> void}
2164 ///
2165 /// @fn void has_signal_scroll_child::emit_signal_scroll_child(ScrollType scroll_type, bool is_horizontal)
2166 /// \signal_emit_brief
2167 /// @param scroll_type type of scroll action
2168 /// @param is_horizontal whether the scroll action was invoked horizontally or vertically
2169 ///
2170 /// @var has_signal_scroll_child::signal_id
2171 /// \signal_id{https://docs.gtk.org/gtk4/signal.GestureClick.scroll_child.html}
2172 ///
2173 /// @fn void has_signal_scroll_child::set_signal_scroll_child_blocked(bool)
2174 /// \signal_set_blocked
2175 ///
2176 /// @fn bool has_signal_scroll_child::get_signal_scroll_child_blocked() const
2177 /// \signal_get_blocked
2178 ///
2179 /// @fn void has_signal_scroll_child::disconnect_signal_scroll_child()
2180 /// \signal_disconnect
2181 ///
2182 /// @fn has_signal_scroll_child::has_signal_scroll_child
2183 /// \signal_ctor
2184
2185 DECLARE_SIGNAL(Closed, closed, CLOSED, "closed", void);
2186 /// @class has_signal_closed
2187 /// @brief \signal_closed_brief
2188 /// @tparam T instance type
2189 ///
2190 /// @fn void has_signal_closed::connect_signal_closed(Function_t)
2191 /// \signal_connect{(T&) -> void}
2192 ///
2193 /// @fn void has_signal_closed::connect_signal_closed(Function_t, Data_t)
2194 /// \signal_connect_data{(T&, Data_t) -> void}
2195 ///
2196 /// @fn void has_signal_closed::emit_signal_closed()
2197 /// \signal_emit_brief
2198 ///
2199 /// @var has_signal_closed::signal_id
2200 /// \signal_id{https://docs.gtk.org/gtk4/signal.Popover.closedd.html}
2201 ///
2202 /// @fn void has_signal_closed::set_signal_closed_blocked(bool)
2203 /// \signal_set_blocked
2204 ///
2205 /// @fn bool has_signal_closed::get_signal_closed_blocked() const
2206 /// \signal_get_blocked
2207 ///
2208 /// @fn void has_signal_closed::disconnect_signal_closed()
2209 /// \signal_disconnect
2210 ///
2211 /// @fn has_signal_closed::has_signal_closed
2212 /// \signal_ctor
2213
2214 DECLARE_SIGNAL(Play, play, PLAY, "play", void);
2215 /// @class has_signal_play
2216 /// @brief \signal_play_brief
2217 /// @tparam T instance type
2218 ///
2219 /// @fn void has_signal_play::connect_signal_play(Function_t)
2220 /// \signal_connect{(T&) -> void}
2221 ///
2222 /// @fn void has_signal_play::connect_signal_play(Function_t, Data_t)
2223 /// \signal_connect_data{(T&, Data_t) -> void}
2224 ///
2225 /// @fn void has_signal_play::emit_signal_play()
2226 /// \signal_emit_brief
2227 ///
2228 /// @var has_signal_play::signal_id
2229 /// \signal_id{play}
2230 ///
2231 /// @fn void has_signal_play::set_signal_play_blocked(bool)
2232 /// \signal_set_blocked
2233 ///
2234 /// @fn bool has_signal_play::get_signal_play_blocked() const
2235 /// \signal_get_blocked
2236 ///
2237 /// @fn void has_signal_play::disconnect_signal_play()
2238 /// \signal_disconnect
2239 ///
2240 /// @fn has_signal_play::has_signal_play
2241 /// \signal_ctor
2242
2243 DECLARE_SIGNAL(Stop, stop, STOP, "stop", void);
2244 /// @class has_signal_stop
2245 /// @brief \signal_stop_brief
2246 /// @tparam T instance type
2247 ///
2248 /// @fn void has_signal_stop::connect_signal_stop(Function_t)
2249 /// \signal_connect{(T&) -> void}
2250 ///
2251 /// @fn void has_signal_stop::connect_signal_stop(Function_t, Data_t)
2252 /// \signal_connect_data{(T&, Data_t) -> void}
2253 ///
2254 /// @fn void has_signal_stop::emit_signal_stop()
2255 /// \signal_emit_brief
2256 ///
2257 /// @var has_signal_stop::signal_id
2258 /// \signal_id{stop}
2259 ///
2260 /// @fn void has_signal_stop::set_signal_stop_blocked(bool)
2261 /// \signal_set_blocked
2262 ///
2263 /// @fn bool has_signal_stop::get_signal_stop_blocked() const
2264 /// \signal_get_blocked
2265 ///
2266 /// @fn void has_signal_stop::disconnect_signal_stop()
2267 /// \signal_disconnect
2268 ///
2269 /// @fn has_signal_stop::has_signal_stop
2270 /// \signal_ctor
2271
2272 DECLARE_SIGNAL_MANUAL(ItemsChanged, items_changed, ITEMS_CHANGED, "items-changed", void,
2273 SPLAT(int32_t position, int32_t n_removed, int32_t n_added),
2274 SPLAT(position, n_removed, n_added)
2276 /// @class has_signal_items_changed
2277 /// @brief \signal_items_changed_brief
2278 /// @tparam T instance type
2279 ///
2280 /// @fn void has_signal_items_changed::connect_signal_items_changed(Function_t)
2281 /// \signal_connect{(T&, int32_t position, int32_t n_removed, int32_t n_added) -> void}
2282 ///
2283 /// @fn void has_signal_items_changed::connect_signal_items_changed(Function_t, Data_t)
2284 /// \signal_connect_data{(T&, int32_t position, int32_t n_removed, int32_t n_added, Data_t) -> void}
2285 ///
2286 /// @fn void has_signal_items_changed::emit_signal_items_changed(int32_t position, int32_t n_removed, int32_t n_added)
2287 /// \signal_emit_brief
2288 /// @param position position of item that changed
2289 /// @param n_removed number of items removed
2290 /// @param n_added number of items added
2291 ///
2292 /// @var has_signal_items_changed::signal_id
2293 /// \signal_id{https://docs.gtk.org/gio/signal.MenuModel.items-changed.html}
2294 ///
2295 /// @fn void has_signal_items_changed::set_signal_items_changed_blocked(bool)
2296 /// \signal_set_blocked
2297 ///
2298 /// @fn bool has_signal_items_changed::get_signal_items_changed_blocked() const
2299 /// \signal_get_blocked
2300 ///
2301 /// @fn void has_signal_items_changed::disconnect_signal_items_changed()
2302 /// \signal_disconnect
2303 ///
2304 /// @fn has_signal_items_changed::has_signal_items_changed
2305 /// \signal_ctor
2306
2307 DECLARE_SIGNAL_MANUAL(Revealed, revealed, REVEALED, "notify::reveal-child", void, UnusedArgument_t _, _);
2308 /// @class has_signal_revealed
2309 /// @brief \signal_revealed_brief
2310 /// @tparam T instance type
2311 ///
2312 /// @fn void has_signal_revealed::connect_signal_revealed(Function_t)
2313 /// \signal_connect{(T&, UnusedArgument_t) -> void}
2314 ///
2315 /// @fn void has_signal_revealed::connect_signal_revealed(Function_t, Data_t)
2316 /// \signal_connect_data{(T&, UnusedArgument_t, Data_t) -> void}
2317 ///
2318 /// @fn void has_signal_revealed::emit_signal_revealed(UnusedArgument_t)
2319 /// \signal_emit_brief
2320 /// @param _ unused parameter, should be ignored
2321 ///
2322 /// @var has_signal_revealed::signal_id
2323 /// \signal_id{https://docs.gtk.org/gtk4/property.Revealer.reveal-child.html}
2324 ///
2325 /// @fn void has_signal_revealed::set_signal_revealed_blocked(bool)
2326 /// \signal_set_blocked
2327 ///
2328 /// @fn bool has_signal_revealed::get_signal_revealed_blocked() const
2329 /// \signal_get_blocked
2330 ///
2331 /// @fn void has_signal_revealed::disconnect_signal_revealed()
2332 /// \signal_disconnect
2333 ///
2334 /// @fn has_signal_revealed::has_signal_revealed
2335 /// \signal_ctor
2336
2337 DECLARE_SIGNAL_MANUAL(Switched, switched, SWITCHED, "notify::active", void, UnusedArgument_t _, _);
2338 /// @class has_signal_switched
2339 /// @brief \signal_switched_brief
2340 /// @tparam T instance type
2341 ///
2342 /// @fn void has_signal_switched::connect_signal_switched(Function_t)
2343 /// \signal_connect{(T&, UnusedArgument_t) -> void}
2344 ///
2345 /// @fn void has_signal_switched::connect_signal_switched(Function_t, Data_t)
2346 /// \signal_connect_data{(T&, UnusedArgument_t, Data_t) -> void}
2347 ///
2348 /// @fn void has_signal_switched::emit_signal_switched(UnusedArgument_t)
2349 /// \signal_emit_brief
2350 /// @param _ unused parameter, should be ignored
2351 ///
2352 /// @var has_signal_switched::signal_id
2353 /// \signal_id{https://docs.gtk.org/gtk4/property.Revealer.reveal-child.html}
2354 ///
2355 /// @fn void has_signal_switched::set_signal_switched_blocked(bool)
2356 /// \signal_set_blocked
2357 ///
2358 /// @fn bool has_signal_switched::get_signal_switched_blocked() const
2359 /// \signal_get_blocked
2360 ///
2361 /// @fn void has_signal_switched::disconnect_signal_switched()
2362 /// \signal_disconnect
2363 ///
2364 /// @fn has_signal_switched::has_signal_switched
2365 /// \signal_ctor
2366
2367 DECLARE_SIGNAL_MANUAL(Activated, activated, ACTIVATED, "activate", void, UnusedArgument_t _, _);
2368 /// @class has_signal_activated
2369 /// @brief \signal_activated_brief
2370 /// @tparam T instance type
2371 ///
2372 /// @fn void has_signal_activated::connect_signal_activated(Function_t)
2373 /// \signal_connect{(T&, UnusedArgument_t) -> void}
2374 ///
2375 /// @fn void has_signal_activated::connect_signal_activated(Function_t, Data_t)
2376 /// \signal_connect_data{(T&, UnusedArgument_t, Data_t) -> void}
2377 ///
2378 /// @fn void has_signal_activated::emit_signal_activated(UnusedArgument_t)
2379 /// \signal_emit_brief
2380 /// @param _ unused parameter, should be ignored
2381 ///
2382 /// @var has_signal_activated::signal_id
2383 /// \signal_id{https://docs.gtk.org/gio/signal.SimpleAction.activate.html}
2384 ///
2385 /// @fn void has_signal_activated::set_signal_activated_blocked(bool)
2386 /// \signal_set_blocked
2387 ///
2388 /// @fn bool has_signal_activated::get_signal_activated_blocked() const
2389 /// \signal_get_blocked
2390 ///
2391 /// @fn void has_signal_activated::disconnect_signal_activated()
2392 /// \signal_disconnect
2393 ///
2394 /// @fn has_signal_activated::has_signal_activated
2395 /// \signal_ctor
2396
2397 DECLARE_SIGNAL(Dismissed, dismissed, DISMISSED, "dismissed", void);
2398 /// @class has_signal_dismissed
2399 /// @brief \signal_dismissed_brief
2400 /// @tparam T instance type
2401 ///
2402 /// @fn void has_signal_dismissed::connect_signal_dismissed(Function_t)
2403 /// \signal_connect{(T&) -> void}
2404 ///
2405 /// @fn void has_signal_dismissed::connect_signal_dismissed(Function_t, Data_t)
2406 /// \signal_connect_data{(T&, Data_t) -> void}
2407 ///
2408 /// @fn void has_signal_dismissed::emit_signal_dismissed()
2409 /// \signal_emit_brief
2410 ///
2411 /// @var has_signal_dismissed::signal_id
2412 /// \signal_id{dismissed}
2413 ///
2414 /// @fn void has_signal_dismissed::set_signal_dismissed_blocked(bool)
2415 /// \signal_set_blocked
2416 ///
2417 /// @fn bool has_signal_dismissed::get_signal_dismissed_blocked() const
2418 /// \signal_get_blocked
2419 ///
2420 /// @fn void has_signal_dismissed::disconnect_signal_dismissed()
2421 /// \signal_disconnect
2422 ///
2423 /// @fn has_signal_dismissed::has_signal_dismissed
2424 /// \signal_ctor
2425
2426 DECLARE_SIGNAL(ButtonClicked, button_clicked, BUTTON_CLICKED, "button-clicked", void);
2427 /// @class has_signal_dismissed
2428 /// @brief \signal_dismissed_brief
2429 /// @tparam T instance type
2430 ///
2431 /// @fn void has_signal_dismissed::connect_signal_dismissed(Function_t)
2432 /// \signal_connect{(T&) -> void}
2433 ///
2434 /// @fn void has_signal_dismissed::connect_signal_dismissed(Function_t, Data_t)
2435 /// \signal_connect_data{(T&, Data_t) -> void}
2436 ///
2437 /// @fn void has_signal_dismissed::emit_signal_dismissed()
2438 /// \signal_emit_brief
2439 ///
2440 /// @var has_signal_dismissed::signal_id
2441 /// \signal_id{dismissed}
2442 ///
2443 /// @fn void has_signal_dismissed::set_signal_dismissed_blocked(bool)
2444 /// \signal_set_blocked
2445 ///
2446 /// @fn bool has_signal_dismissed::get_signal_dismissed_blocked() const
2447 /// \signal_get_blocked
2448 ///
2449 /// @fn void has_signal_dismissed::disconnect_signal_dismissed()
2450 /// \signal_disconnect
2451 ///
2452 /// @fn has_signal_dismissed::has_signal_dismissed
2453 /// \signal_ctor
2454}
base class of all signal components
Definition: signal_component.hpp:16