|
1 #!/usr/bin/perl -w |
|
2 |
|
3 use lib `fvwm-perllib dir`; |
|
4 use FVWM::Module; |
|
5 use General::Parse; |
|
6 use Net::DBus; |
|
7 |
|
8 # dbus-send --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.set_layout uint32:1 |
|
9 |
|
10 # Net::DBus |
|
11 my $bus = Net::DBus->session(); |
|
12 # Net::DBus::RemoteService |
|
13 my $service = $bus->get_service("ru.gentoo.KbddService"); |
|
14 # Net::DBus::RemoteObject |
|
15 my $object = $service->get_object("/ru/gentoo/KbddService"); |
|
16 |
|
17 my $module = new FVWM::Module( |
|
18 Name => "FvwmKbdd", |
|
19 Mask => M_STRING, |
|
20 Debug => 1, |
|
21 ); |
|
22 |
|
23 sub kbdd { |
|
24 my ($module, $event) = @_; |
|
25 my ($action, @args) = get_tokens($event->_text); |
|
26 if ($action eq "hello") { |
|
27 $module->send("Echo Hello from Kbdd..."); |
|
28 } elsif ($action eq "hel") { |
|
29 $module->send("Echo xxx..."); |
|
30 } elsif ($action eq "kbdd") { |
|
31 my $no = $args[0]; |
|
32 if ((0 <= $no) && ($no < 4)) { |
|
33 $object->set_layout(Net::DBus::dbus_uint32($no)); |
|
34 } else { |
|
35 $module->send("Echo Error: Kbdd no " . $no . "is not in 1..4 range"); |
|
36 } |
|
37 } elsif ($action eq "stop") { |
|
38 $module->send("Echo Kbdd exit..."); |
|
39 $module->terminate; |
|
40 } else { |
|
41 $module->send("Echo Kbdd unknown action: " . $action); |
|
42 } |
|
43 } |
|
44 |
|
45 $module->addHandler(M_STRING, \&kbdd); |
|
46 |
|
47 $module->send("Echo Kbdd loaded..."); |
|
48 |
|
49 # Terminate itself after 5 sec. |
|
50 # my $scheduler = $module->track('Scheduler'); |
|
51 # $scheduler->schedule(5, sub { $module->terminate; }); |
|
52 |
|
53 $module->event_loop; |
|
54 |