mmenu; actually handle remembering app when in a pnd subcat virtual folder
authorskeezix <skeezix@flotsam-vm.(none)>
Wed, 9 Nov 2011 20:15:19 +0000 (15:15 -0500)
committerskeezix <skeezix@flotsam-vm.(none)>
Wed, 9 Nov 2011 20:15:19 +0000 (15:15 -0500)
minimenu/mmconf.c
minimenu/mmui.c

index 2535a06..dc75de8 100644 (file)
@@ -698,12 +698,16 @@ unsigned char conf_write ( pnd_conf_handle h, char *fullpath ) {
   // make for big dumps erroneously.. hmm :/
   char *previous_unique_id = pnd_conf_get_as_char ( g_conf, "minimenu.last_known_app_uid" );
   char *lastcat = pnd_conf_get_as_char ( g_conf, "minimenu.last_known_catname" );
   // make for big dumps erroneously.. hmm :/
   char *previous_unique_id = pnd_conf_get_as_char ( g_conf, "minimenu.last_known_app_uid" );
   char *lastcat = pnd_conf_get_as_char ( g_conf, "minimenu.last_known_catname" );
+  char *lastparentcat = pnd_conf_get_as_char ( g_conf, "minimenu.last_known_parentcatname" );
   if ( previous_unique_id ) {
     fprintf ( f, "%s\t%s\n", "minimenu.last_known_app_uid", previous_unique_id );
   }
   if ( lastcat ) {
     fprintf ( f, "%s\t%s\n", "minimenu.last_known_catname", lastcat );
   }
   if ( previous_unique_id ) {
     fprintf ( f, "%s\t%s\n", "minimenu.last_known_app_uid", previous_unique_id );
   }
   if ( lastcat ) {
     fprintf ( f, "%s\t%s\n", "minimenu.last_known_catname", lastcat );
   }
+  if ( lastparentcat ) {
+    fprintf ( f, "%s\t%s\n", "minimenu.last_known_parentcatname", lastparentcat );
+  }
 
   fclose ( f );
 
 
   fclose ( f );
 
index e7e8fe1..052c5e7 100644 (file)
@@ -1827,6 +1827,17 @@ void ui_push_exec ( void ) {
   }
   if ( g_categories [ 0 ] ) {
     pnd_conf_set_char ( g_conf, "minimenu.last_known_catname", g_categories [ ui_category ] -> catname );
   }
   if ( g_categories [ 0 ] ) {
     pnd_conf_set_char ( g_conf, "minimenu.last_known_catname", g_categories [ ui_category ] -> catname );
+
+    // and also the parent cat..
+    if ( g_categories [ ui_category ] -> parent_catname ) {
+      pnd_conf_set_char ( g_conf, "minimenu.last_known_parentcatname", g_categories [ ui_category ] -> parent_catname );
+    } else {
+      char *kv = pnd_box_find_by_key ( g_conf, "minimenu.last_known_parentcatname" );
+      if ( kv ) {
+       pnd_box_delete_node ( g_conf, kv );
+      }
+
+    }
   }
 
   // cache last known cat/app to /tmp, so we can use it again later
   }
 
   // cache last known cat/app to /tmp, so we can use it again later
@@ -2785,6 +2796,23 @@ void ui_post_scan ( void ) {
 
     if ( pnd_conf_get_as_int_d ( g_conf, "minimenu.start_selected", 0 ) && lastcat ) {
       catpick = lastcat;
 
     if ( pnd_conf_get_as_int_d ( g_conf, "minimenu.start_selected", 0 ) && lastcat ) {
       catpick = lastcat;
+
+      // if this is a subcat, we have some doctoring to do :/ the hackishness is really
+      // starting to show..
+      if ( pnd_conf_get_as_char ( g_conf, "minimenu.last_known_parentcatname" ) ) {
+       // in subcat view, we only have one cat
+       ui_category = 0;
+       ui_catshift = 0;
+       // the cat name to search for is Child*Parent
+       char key [ 512 ];
+       sprintf ( key, "%s*%s",
+                 pnd_conf_get_as_char ( g_conf, "minimenu.last_known_catname" )
+                 , pnd_conf_get_as_char ( g_conf, "minimenu.last_known_parentcatname" ) );
+       category_publish ( CFBYNAME, key );
+       // since we forced it by hand, no need to do a cat-scan below
+       catpick = NULL;
+      }
+
     } else if ( dc ) {
       catpick = dc;
     }
     } else if ( dc ) {
       catpick = dc;
     }