mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Merge pull request #3116 from harishkrupo/master
IPC: Send keyboard layout info in IPC_GET_INPUTS
This commit is contained in:
		
						commit
						3b8d4a9212
					
				
					 2 changed files with 31 additions and 2 deletions
				
			
		| 
						 | 
					@ -12,6 +12,7 @@
 | 
				
			||||||
#include "sway/input/seat.h"
 | 
					#include "sway/input/seat.h"
 | 
				
			||||||
#include <wlr/types/wlr_box.h>
 | 
					#include <wlr/types/wlr_box.h>
 | 
				
			||||||
#include <wlr/types/wlr_output.h>
 | 
					#include <wlr/types/wlr_output.h>
 | 
				
			||||||
 | 
					#include <xkbcommon/xkbcommon.h>
 | 
				
			||||||
#include "wlr-layer-shell-unstable-v1-protocol.h"
 | 
					#include "wlr-layer-shell-unstable-v1-protocol.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *ipc_json_layout_description(enum sway_container_layout l) {
 | 
					static const char *ipc_json_layout_description(enum sway_container_layout l) {
 | 
				
			||||||
| 
						 | 
					@ -503,6 +504,27 @@ json_object *ipc_json_describe_input(struct sway_input_device *device) {
 | 
				
			||||||
	json_object_object_add(object, "type",
 | 
						json_object_object_add(object, "type",
 | 
				
			||||||
		json_object_new_string(describe_device_type(device)));
 | 
							json_object_new_string(describe_device_type(device)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (device->wlr_device->type == WLR_INPUT_DEVICE_KEYBOARD) {
 | 
				
			||||||
 | 
							struct wlr_keyboard *keyboard = device->wlr_device->keyboard;
 | 
				
			||||||
 | 
							struct xkb_keymap *keymap = keyboard->keymap;
 | 
				
			||||||
 | 
							struct xkb_state *state = keyboard->xkb_state;
 | 
				
			||||||
 | 
							xkb_layout_index_t num_layouts = xkb_keymap_num_layouts(keymap);
 | 
				
			||||||
 | 
							xkb_layout_index_t layout_idx;
 | 
				
			||||||
 | 
							for (layout_idx = 0; layout_idx < num_layouts; layout_idx++) {
 | 
				
			||||||
 | 
								bool is_active =
 | 
				
			||||||
 | 
									xkb_state_layout_index_is_active(state,
 | 
				
			||||||
 | 
											layout_idx,
 | 
				
			||||||
 | 
											XKB_STATE_LAYOUT_EFFECTIVE);
 | 
				
			||||||
 | 
								if (is_active) {
 | 
				
			||||||
 | 
									const char *layout =
 | 
				
			||||||
 | 
										xkb_keymap_layout_get_name(keymap, layout_idx);
 | 
				
			||||||
 | 
									json_object_object_add(object, "xkb_active_layout_name",
 | 
				
			||||||
 | 
											json_object_new_string(layout));
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return object;
 | 
						return object;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -111,7 +111,7 @@ static const char *pretty_type_name(const char *name) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void pretty_print_input(json_object *i) {
 | 
					static void pretty_print_input(json_object *i) {
 | 
				
			||||||
	json_object *id, *name, *type, *product, *vendor;
 | 
						json_object *id, *name, *type, *product, *vendor, *kbdlayout;
 | 
				
			||||||
	json_object_object_get_ex(i, "identifier", &id);
 | 
						json_object_object_get_ex(i, "identifier", &id);
 | 
				
			||||||
	json_object_object_get_ex(i, "name", &name);
 | 
						json_object_object_get_ex(i, "name", &name);
 | 
				
			||||||
	json_object_object_get_ex(i, "type", &type);
 | 
						json_object_object_get_ex(i, "type", &type);
 | 
				
			||||||
| 
						 | 
					@ -123,7 +123,7 @@ static void pretty_print_input(json_object *i) {
 | 
				
			||||||
		"  Type: %s\n"
 | 
							"  Type: %s\n"
 | 
				
			||||||
		"  Identifier: %s\n"
 | 
							"  Identifier: %s\n"
 | 
				
			||||||
		"  Product ID: %d\n"
 | 
							"  Product ID: %d\n"
 | 
				
			||||||
		"  Vendor ID: %d\n\n";
 | 
							"  Vendor ID: %d\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	printf(fmt, json_object_get_string(name),
 | 
						printf(fmt, json_object_get_string(name),
 | 
				
			||||||
| 
						 | 
					@ -131,6 +131,13 @@ static void pretty_print_input(json_object *i) {
 | 
				
			||||||
		json_object_get_string(id),
 | 
							json_object_get_string(id),
 | 
				
			||||||
		json_object_get_int(product),
 | 
							json_object_get_int(product),
 | 
				
			||||||
		json_object_get_int(vendor));
 | 
							json_object_get_int(vendor));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (json_object_object_get_ex(i, "xkb_active_layout_name", &kbdlayout)) {
 | 
				
			||||||
 | 
							printf("  Active Keyboard Layout: %s\n",
 | 
				
			||||||
 | 
								json_object_get_string(kbdlayout));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void pretty_print_seat(json_object *i) {
 | 
					static void pretty_print_seat(json_object *i) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue