]> git.draconx.ca Git - mpdhacks.git/blobdiff - mpdmenu.pl
mpdmenu: Pass top menu name into submenu generation.
[mpdhacks.git] / mpdmenu.pl
index 8e597e7f9c704c3b585ecd29043aace22fe61b35..a12eb4c39350e6948ed8fd75fd37058d0aef854c 100755 (executable)
@@ -38,9 +38,9 @@ my $port  = $ENV{MPD_PORT} // "6600";
 my $sock;
 
 my ($albumid, $trackid);
-my %artistids;
-my $menu;
+my ($topmenu, $menu);
 my $mode = "top";
+my %artistids;
 
 # Quotes the argument so that it is presented as a single argument to MPD
 # at the protocol level.  This also works OK for most FVWM arguments.
@@ -112,7 +112,7 @@ sub fvwm_label_escape {
 sub make_submenu {
        my $name = shift;
        $name =~ s/-/_/g;
-       unshift @_, ("exec", $SELF, "--menu=$name");
+       unshift @_, ("exec", $SELF, "--topmenu=$topmenu", "--menu=$name");
 
         fvwm_cmd("DestroyFunc", "Make$name");
         fvwm_cmd("AddToFunc", "Make$name");
@@ -120,14 +120,14 @@ sub make_submenu {
 
         fvwm_cmd("DestroyMenu", $name);
         fvwm_cmd("AddToMenu", $name, "DynamicPopupAction", "Make$name");
-        fvwm_cmd("AddToFunc", "KillMenuMPD", "I", "DestroyMenu", $name);
+        fvwm_cmd("AddToFunc", "Kill$topmenu", "I", "DestroyMenu", $name);
 
         fvwm_cmd("DestroyFunc", "Make$name");
         fvwm_cmd("AddToFunc", "Make$name");
         fvwm_cmd("+", "I", "DestroyMenu", $name);
         fvwm_cmd("+", "I", "-PipeRead",
                 join(' ', map { fvwm_shell_literal } @_));
-        fvwm_cmd("AddToFunc", "KillMenuMPD", "I", "DestroyFunc", "Make$name");
+        fvwm_cmd("AddToFunc", "Kill$topmenu", "I", "DestroyFunc", "Make$name");
 
        return ("Popup", $name);
 }
@@ -514,8 +514,16 @@ GetOptions(
 
        'V|version'   => sub { print_version(); exit },
        'H|help'      => sub { print_help(); exit },
+
+       'topmenu=s'   => \$topmenu, # top menu name (for submenu generation)
 ) or do { print_usage; exit 1 };
 
+unless (defined $menu) {
+       $topmenu //= "MenuMPD";
+       $menu = $topmenu . ($mode ne "top" ? $mode : "");
+}
+$topmenu //= $menu;
+
 # Connect to MPD.
 $sock = new IO::Socket::INET6(
        PeerAddr => $host,
@@ -658,7 +666,8 @@ if ($mode eq "top") {
                my $entry = $matches->{$mbid};
                my $thumb = shift @thumbs;
 
-               my @submenu = make_submenu("$menu-$mbid", "--album-id=$mbid");
+               my @submenu = make_submenu("$topmenu-$mbid",
+                                          "--album-id=$mbid");
                fvwm_cmd("AddToMenu", $menu,
                         $thumb . fvwm_label_escape($entry->{Album}),
                         @submenu);