SVN: vfmg/trunk/vfmg

sparky sparky at pld-linux.org
Fri Jan 19 21:18:53 CET 2007


Author: sparky
Date: Fri Jan 19 21:18:52 2007
New Revision: 8175

Modified:
   vfmg/trunk/vfmg
Log:
- allow promoting submenu with more than one entry


Modified: vfmg/trunk/vfmg
==============================================================================
--- vfmg/trunk/vfmg	(original)
+++ vfmg/trunk/vfmg	Fri Jan 19 21:18:52 2007
@@ -86,7 +86,11 @@
 	'encoding|E=s'		=>	\$opt{encoding},
 	
 	'clear|c!'			=>	\$opt{clear},
-	'promote|p!'		=>	\$opt{promote},
+	'promote|p:+'		=>	\$opt{promote},
+	'no-promote'		=>	sub { $opt{promote} = 0 },
+	'promote-category'	=>	sub { $opt{promote} = abs( $opt{promote}) },
+	'no-promote-category'
+						=>	sub { $opt{promote} = - abs( $opt{promote}) },
 	'strip|s!'			=>	\$opt{strip},
 	'addmenu|m!'		=>	\$opt{addmenu},
 	'only-in|o=s'		=>	\$opt{only_in},
@@ -757,33 +761,32 @@
 } #}}}
 
 if ( $opt{promote} ) { # {{{
+	my $promote_num = abs( $opt{promote} );
 	my @count;
-	for ( my $i = $#menu; $i >= 0; $i-- ) {
+	for ( my $i = $#menu; $i >= 0; $i-- ) { # for each menu:
 		$count[$i] = 0;
-		foreach my $entry ( keys %{$menu[$i]} ) {
+		foreach my $entry ( keys %{$menu[$i]} ) { # for each menu entry:
 			my $mno = $menu[$i]{$entry};
-			if ( $mno < 0 ) {
+			if ( $mno < 0 ) { # application
 				$count[$i]++;
-			} else { # submenu
-				if ( $count[$mno] == 0 ) {
-					delete( $menu[$i]{$entry} );
-				} else {
-					if ( $count[$mno] == 1 ) { #only one entry in submenu
-						foreach my $name ( keys %{$menu[$mno]} ) {
-#							warn "Promoting: $desktop[$name][1] --> $desktop[$entry][1]\n" if $o_verbose;
-							$desktop[$name]{Name} = $desktop[$entry]{Name} 
-								. " / " . $desktop[$name]{Name};
-							if ( $menu[$mno]{$name} == -1 ) { # it's aplication
-								$menu[$i]{$name} = -1;
-							} else {
-								$menu[$i]{$name} = $menu[$mno]{$name};
-								delete( $menu[$mno]{$name} );
-							}
-						}
-						delete( $menu[$i]{$entry} );
+			} elsif ( $count[$mno] == 0 ) { # empty submenu
+				delete $menu[$i]{$entry};
+			} elsif ( $count[$mno] <= $promote_num ) { # small menu
+				foreach my $name ( keys %{$menu[$mno]} ) {
+					$desktop[$name]{Name} = $desktop[$entry]{Name} 
+						. " / " . $desktop[$name]{Name}
+							if $opt{promote} > 0;
+					if ( $menu[$mno]{$name} == -1 ) { # application
+						$menu[$i]{$name} = -1; # add application
+					} else {
+						$menu[$i]{$name} = $menu[$mno]{$name}; # add submenu
+						delete $menu[$mno]{$name}; # remove old submenu
 					}
-					$count[$i]++;
 				}
+				delete $menu[$i]{$entry};
+				$count[$i] += $count[$mno];
+			} else { # big menu
+				$count[$i]++;
 			}
 		}
 	}


More information about the pld-cvs-commit mailing list