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]++;
                        }
                }
        }
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to