Use "xset q" as fallback for detecting capslock status if hardware keyboard is missing
This commit is contained in:
@@ -89,6 +89,8 @@ unless (-f $BATTERY_CHARGE_FULL_FILE) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $CAPS_LED_PATH = find_caps_led ();
|
my $CAPS_LED_PATH = find_caps_led ();
|
||||||
|
my $CAPS_LED_SKIPS = 0;
|
||||||
|
my $CAPS_LED_SKIPS_MAX = 180;
|
||||||
|
|
||||||
# opened windows info storage ref
|
# opened windows info storage ref
|
||||||
my $win;
|
my $win;
|
||||||
@@ -285,6 +287,7 @@ sub add_events () {
|
|||||||
cb => sub { # the callback to invoke
|
cb => sub { # the callback to invoke
|
||||||
my $caps_state = 0;
|
my $caps_state = 0;
|
||||||
my $CAPSHANDLE;
|
my $CAPSHANDLE;
|
||||||
|
my $xsetflag = 0;
|
||||||
|
|
||||||
if (defined $CAPS_LED_PATH) {
|
if (defined $CAPS_LED_PATH) {
|
||||||
unless (open $CAPSHANDLE, '<', $CAPS_LED_PATH) {
|
unless (open $CAPSHANDLE, '<', $CAPS_LED_PATH) {
|
||||||
@@ -292,13 +295,39 @@ sub add_events () {
|
|||||||
$caps_state = 2
|
$caps_state = 2
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
# we can use "$ xset q | grep Caps" as fallback, but it is notably more expensive check
|
||||||
|
my $xset = `xset q`;
|
||||||
|
$xsetflag = 1;
|
||||||
|
|
||||||
|
if ($?) {
|
||||||
|
# some kind of error, so we assume that we cannot update caps lock status
|
||||||
$caps_state = 2;
|
$caps_state = 2;
|
||||||
|
} else {
|
||||||
|
$xset =~ /Caps Lock\:\s+(o[n|f]f?)\s+/;
|
||||||
|
|
||||||
|
if ($1 eq 'off') {
|
||||||
|
$caps_state = 0;
|
||||||
|
} elsif ($1 eq 'on') {
|
||||||
|
$caps_state = 1;
|
||||||
|
} else {
|
||||||
|
$caps_state = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($CAPS_LED_SKIPS == $CAPS_LED_SKIPS_MAX) {
|
||||||
|
$CAPS_LED_SKIPS = 0;
|
||||||
|
$CAPS_LED_PATH = find_caps_led ();
|
||||||
|
} else {
|
||||||
|
$CAPS_LED_SKIPS++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($caps_state ne '2') {
|
if ($caps_state ne '2') {
|
||||||
|
unless ($xsetflag) {
|
||||||
$caps_state = readline $CAPSHANDLE;
|
$caps_state = readline $CAPSHANDLE;
|
||||||
close $CAPSHANDLE;
|
close $CAPSHANDLE;
|
||||||
chomp $caps_state;
|
chomp $caps_state;
|
||||||
|
}
|
||||||
|
|
||||||
if (! defined $O->{capslock}->{state}) {
|
if (! defined $O->{capslock}->{state}) {
|
||||||
$O->{capslock}->{border} = $CONF->{capslock}->{background};
|
$O->{capslock}->{border} = $CONF->{capslock}->{background};
|
||||||
|
|||||||
Reference in New Issue
Block a user