r174: Win95 registry files (like USER.DAT) can now be partially parsed
[kai/samba.git] / source / lib / registry / tools / gregedit.c
index 4fbb1b27058279aef5aadfe097cf27881e4e2f89..10e5f4546858347f468f2d88d5d66170342a88e4 100644 (file)
@@ -65,19 +65,20 @@ static void gtk_show_werror(WERROR err)
 
 static void expand_key(GtkTreeView *treeview, GtkTreeIter *parent, GtkTreePath *arg2)
 {
-       GtkTreeIter iter, tmpiter;
+       GtkTreeIter firstiter, iter, tmpiter;
        REG_KEY *k, *sub;
        char *name;
        GValue value;
        WERROR error;
        int i;
 
+    gtk_tree_model_iter_children(GTK_TREE_MODEL(store_keys), &firstiter, parent);
+
     /* See if this row has ever had a name gtk_tree_store_set()'ed to it.
        If not, read the directory contents */
-    gtk_tree_model_get(GTK_TREE_MODEL(store_keys), parent,
-                       0, &name, -1);
+    gtk_tree_model_get(GTK_TREE_MODEL(store_keys), &firstiter, 0, &name, -1);
 
-       if(!name) return;
+       if(name) return;
 
        gtk_tree_model_get(GTK_TREE_MODEL(store_keys), parent, 1, &k, -1);
 
@@ -91,8 +92,7 @@ static void expand_key(GtkTreeView *treeview, GtkTreeIter *parent, GtkTreePath *
            node GTK gets confused and won't expand the parent row. */
 
                if(i == 0) {
-                   gtk_tree_model_iter_children(GTK_TREE_MODEL(store_keys), 
-                                     &iter, parent);
+                       iter = firstiter;
                } else {
                        gtk_tree_store_append(store_keys, &iter, parent);
                }
@@ -220,7 +220,7 @@ GtkWidget* create_rpcwin (void)
   return rpcwin;
 }
 
-static void on_open_nt4_activate (GtkMenuItem *menuitem, gpointer user_data)
+static void on_open_file_activate (GtkMenuItem *menuitem, gpointer user_data)
 {
        gint result = gtk_dialog_run(GTK_DIALOG(create_openfilewin()));
        char *filename;
@@ -228,7 +228,7 @@ static void on_open_nt4_activate (GtkMenuItem *menuitem, gpointer user_data)
        switch(result) {
        case GTK_RESPONSE_OK:
                filename = strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(openfilewin)));
-               error = reg_open("nt4", filename, NULL, &registry);
+               error = reg_open(user_data, filename, NULL, &registry);
                if(!W_ERROR_IS_OK(error)) {
                        gtk_show_werror(error);
                        break;
@@ -407,6 +407,7 @@ GtkWidget* create_mainwin (void)
        GtkWidget *menu_file;
        GtkWidget *menu_file_menu;
        GtkWidget *open_nt4;
+       GtkWidget *open_w95;
        GtkWidget *open_gconf;
        GtkWidget *open_remote;
        GtkWidget *separatormenuitem1;
@@ -455,6 +456,10 @@ GtkWidget* create_mainwin (void)
        gtk_widget_show (open_nt4);
        gtk_container_add (GTK_CONTAINER (menu_file_menu), open_nt4);
 
+       open_w95 = gtk_image_menu_item_new_with_mnemonic("_Open Win9x file");
+       gtk_widget_show (open_w95);
+       gtk_container_add (GTK_CONTAINER (menu_file_menu), open_w95);
+
        open_gconf = gtk_image_menu_item_new_with_mnemonic ("_Open GConf");
        gtk_widget_show (open_gconf);
        gtk_container_add (GTK_CONTAINER (menu_file_menu), open_gconf);
@@ -595,8 +600,11 @@ GtkWidget* create_mainwin (void)
   gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (statusbar), FALSE);
 
   g_signal_connect ((gpointer) open_nt4, "activate",
-                    G_CALLBACK (on_open_nt4_activate),
-                    NULL);
+                    G_CALLBACK (on_open_file_activate),
+                    "nt4");
+  g_signal_connect ((gpointer) open_w95, "activate",
+                    G_CALLBACK (on_open_file_activate),
+                    "w95");
   g_signal_connect ((gpointer) open_gconf, "activate",
                     G_CALLBACK (on_open_gconf_activate),
                     NULL);