diff options
Diffstat (limited to 'sway/ipc-json.c')
-rw-r--r-- | sway/ipc-json.c | 198 |
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 | ||
620 | static 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 | |||
620 | json_object *ipc_json_describe_input(struct sway_input_device *device) { | 801 | json_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; |