aboutsummaryrefslogtreecommitdiffstats
path: root/sway/ipc-json.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/ipc-json.c')
-rw-r--r--sway/ipc-json.c198
1 files changed, 183 insertions, 15 deletions
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
index 20dcafb1..e9564b04 100644
--- a/sway/ipc-json.c
+++ b/sway/ipc-json.c
@@ -617,6 +617,187 @@ json_object *ipc_json_describe_node_recursive(struct sway_node *node) {
617 return object; 617 return object;
618} 618}
619 619
620static json_object *describe_libinput_device(struct libinput_device *device) {
621 json_object *object = json_object_new_object();
622
623 const char *events = "unknown";
624 switch (libinput_device_config_send_events_get_mode(device)) {
625 case LIBINPUT_CONFIG_SEND_EVENTS_ENABLED:
626 events = "enabled";
627 break;
628 case LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE:
629 events = "disabled_on_external_mouse";
630 break;
631 case LIBINPUT_CONFIG_SEND_EVENTS_DISABLED:
632 events = "disabled";
633 break;
634 }
635 json_object_object_add(object, "send_events",
636 json_object_new_string(events));
637
638 if (libinput_device_config_tap_get_finger_count(device) > 0) {
639 const char *tap = "unknown";
640 switch (libinput_device_config_tap_get_enabled(device)) {
641 case LIBINPUT_CONFIG_TAP_ENABLED:
642 tap = "enabled";
643 break;
644 case LIBINPUT_CONFIG_TAP_DISABLED:
645 tap = "disabled";
646 break;
647 }
648 json_object_object_add(object, "tap", json_object_new_string(tap));
649
650 const char *button_map = "unknown";
651 switch (libinput_device_config_tap_get_button_map(device)) {
652 case LIBINPUT_CONFIG_TAP_MAP_LRM:
653 button_map = "lrm";
654 break;
655 case LIBINPUT_CONFIG_TAP_MAP_LMR:
656 button_map = "lmr";
657 break;
658 }
659 json_object_object_add(object, "tap_button_map",
660 json_object_new_string(button_map));
661
662 const char* drag = "unknown";
663 switch (libinput_device_config_tap_get_drag_enabled(device)) {
664 case LIBINPUT_CONFIG_DRAG_ENABLED:
665 drag = "enabled";
666 break;
667 case LIBINPUT_CONFIG_DRAG_DISABLED:
668 drag = "disabled";
669 break;
670 }
671 json_object_object_add(object, "tap_drag",
672 json_object_new_string(drag));
673
674 const char *drag_lock = "unknown";
675 switch (libinput_device_config_tap_get_drag_lock_enabled(device)) {
676 case LIBINPUT_CONFIG_DRAG_LOCK_ENABLED:
677 drag_lock = "enabled";
678 break;
679 case LIBINPUT_CONFIG_DRAG_LOCK_DISABLED:
680 drag_lock = "disabled";
681 break;
682 }
683 json_object_object_add(object, "tap_drag_lock",
684 json_object_new_string(drag_lock));
685 }
686
687 if (libinput_device_config_accel_is_available(device)) {
688 double accel = libinput_device_config_accel_get_speed(device);
689 json_object_object_add(object, "accel_speed",
690 json_object_new_double(accel));
691
692 const char *accel_profile = "unknown";
693 switch (libinput_device_config_accel_get_profile(device)) {
694 case LIBINPUT_CONFIG_ACCEL_PROFILE_NONE:
695 accel_profile = "none";
696 break;
697 case LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT:
698 accel_profile = "flat";
699 break;
700 case LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE:
701 accel_profile = "adaptive";
702 break;
703 }
704 json_object_object_add(object, "accel_profile",
705 json_object_new_string(accel_profile));
706 }
707
708 if (libinput_device_config_scroll_has_natural_scroll(device)) {
709 const char *natural_scroll = "disabled";
710 if (libinput_device_config_scroll_get_natural_scroll_enabled(device)) {
711 natural_scroll = "enabled";
712 }
713 json_object_object_add(object, "natural_scroll",
714 json_object_new_string(natural_scroll));
715 }
716
717 if (libinput_device_config_left_handed_is_available(device)) {
718 const char *left_handed = "disabled";
719 if (libinput_device_config_left_handed_get(device) != 0) {
720 left_handed = "enabled";
721 }
722 json_object_object_add(object, "left_handed",
723 json_object_new_string(left_handed));
724 }
725
726 uint32_t click_methods = libinput_device_config_click_get_methods(device);
727 if ((click_methods & ~LIBINPUT_CONFIG_CLICK_METHOD_NONE) != 0) {
728 const char *click_method = "unknown";
729 switch (libinput_device_config_click_get_method(device)) {
730 case LIBINPUT_CONFIG_CLICK_METHOD_NONE:
731 click_method = "none";
732 break;
733 case LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS:
734 click_method = "button_areas";
735 break;
736 case LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER:
737 click_method = "clickfinger";
738 break;
739 }
740 json_object_object_add(object, "click_method",
741 json_object_new_string(click_method));
742 }
743
744 if (libinput_device_config_middle_emulation_is_available(device)) {
745 const char *middle_emulation = "unknown";
746 switch (libinput_device_config_middle_emulation_get_enabled(device)) {
747 case LIBINPUT_CONFIG_MIDDLE_EMULATION_ENABLED:
748 middle_emulation = "enabled";
749 break;
750 case LIBINPUT_CONFIG_MIDDLE_EMULATION_DISABLED:
751 middle_emulation = "disabled";
752 break;
753 }
754 json_object_object_add(object, "middle_emulation",
755 json_object_new_string(middle_emulation));
756 }
757
758 uint32_t scroll_methods = libinput_device_config_scroll_get_methods(device);
759 if ((scroll_methods & ~LIBINPUT_CONFIG_SCROLL_NO_SCROLL) != 0) {
760 const char *scroll_method = "unknown";
761 switch (libinput_device_config_scroll_get_method(device)) {
762 case LIBINPUT_CONFIG_SCROLL_NO_SCROLL:
763 scroll_method = "none";
764 break;
765 case LIBINPUT_CONFIG_SCROLL_2FG:
766 scroll_method = "two_finger";
767 break;
768 case LIBINPUT_CONFIG_SCROLL_EDGE:
769 scroll_method = "edge";
770 break;
771 case LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN:
772 scroll_method = "on_button_down";
773 break;
774 }
775 json_object_object_add(object, "scroll_method",
776 json_object_new_string(scroll_method));
777
778 if ((scroll_methods & LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN) != 0) {
779 uint32_t button = libinput_device_config_scroll_get_button(device);
780 json_object_object_add(object, "scroll_button",
781 json_object_new_int(button));
782 }
783 }
784
785 if (libinput_device_config_dwt_is_available(device)) {
786 const char *dwt = "unknown";
787 switch (libinput_device_config_dwt_get_enabled(device)) {
788 case LIBINPUT_CONFIG_DWT_ENABLED:
789 dwt = "enabled";
790 break;
791 case LIBINPUT_CONFIG_DWT_DISABLED:
792 dwt = "disabled";
793 break;
794 }
795 json_object_object_add(object, "dwt", json_object_new_string(dwt));
796 }
797
798 return object;
799}
800
620json_object *ipc_json_describe_input(struct sway_input_device *device) { 801json_object *ipc_json_describe_input(struct sway_input_device *device) {
621 if (!(sway_assert(device, "Device must not be null"))) { 802 if (!(sway_assert(device, "Device must not be null"))) {
622 return NULL; 803 return NULL;
@@ -660,21 +841,8 @@ json_object *ipc_json_describe_input(struct sway_input_device *device) {
660 if (wlr_input_device_is_libinput(device->wlr_device)) { 841 if (wlr_input_device_is_libinput(device->wlr_device)) {
661 struct libinput_device *libinput_dev; 842 struct libinput_device *libinput_dev;
662 libinput_dev = wlr_libinput_get_device_handle(device->wlr_device); 843 libinput_dev = wlr_libinput_get_device_handle(device->wlr_device);
663 844 json_object_object_add(object, "libinput",
664 const char *events = "unknown"; 845 describe_libinput_device(libinput_dev));
665 switch (libinput_device_config_send_events_get_mode(libinput_dev)) {
666 case LIBINPUT_CONFIG_SEND_EVENTS_ENABLED:
667 events = "enabled";
668 break;
669 case LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE:
670 events = "disabled_on_external_mouse";
671 break;
672 case LIBINPUT_CONFIG_SEND_EVENTS_DISABLED:
673 events = "disabled";
674 break;
675 }
676 json_object_object_add(object, "libinput_send_events",
677 json_object_new_string(events));
678 } 846 }
679 847
680 return object; 848 return object;