svn commit: samba r4371 - in branches/SAMBA_4_0/source: gtk/tools lib/registry

jelmer at samba.org jelmer at samba.org
Sun Dec 26 22:41:39 GMT 2004


Author: jelmer
Date: 2004-12-26 22:41:38 +0000 (Sun, 26 Dec 2004)
New Revision: 4371

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=4371

Log:
Add "Create Key", "Delete Key" and "Delete Value" buttons. 
gregedit now can do the same things as regedt32 except for finding 
data and setting values. (and a few segfaults...)

Modified:
   branches/SAMBA_4_0/source/gtk/tools/gregedit.c
   branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb.c


Changeset:
Modified: branches/SAMBA_4_0/source/gtk/tools/gregedit.c
===================================================================
--- branches/SAMBA_4_0/source/gtk/tools/gregedit.c	2004-12-26 21:06:43 UTC (rev 4370)
+++ branches/SAMBA_4_0/source/gtk/tools/gregedit.c	2004-12-26 22:41:38 UTC (rev 4371)
@@ -31,6 +31,7 @@
 GtkTreeStore *store_keys;
 GtkListStore *store_vals;
 GtkWidget *tree_keys;
+GtkWidget *tree_vals;
 GtkWidget *mainwin;
 GtkWidget *mnu_add_key, *mnu_add_value, *mnu_del_key, *mnu_del_value, *mnu_find;
 TALLOC_CTX *mem_ctx; /* FIXME: Split up */
@@ -40,6 +41,7 @@
 static GtkWidget* create_openfilewin (void);
 static GtkWidget* create_savefilewin (void);
 struct registry_context *registry = NULL;
+struct registry_key *current_key = NULL;
 
 static GtkWidget* create_FindDialog (void)
 {
@@ -194,7 +196,7 @@
   return SetValueDialog;
 }
 
-static GtkWidget* create_NewKeyDialog (void)
+static GtkWidget* create_NewKeyDialog (GtkWidget **name_entry)
 {
   GtkWidget *NewKeyDialog;
   GtkWidget *dialog_vbox2;
@@ -225,6 +227,8 @@
   dialog_action_area2 = GTK_DIALOG (NewKeyDialog)->action_area;
   gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
 
+  *name_entry = entry_key_name;
+
   cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel");
   gtk_dialog_add_action_widget (GTK_DIALOG (NewKeyDialog), cancelbutton2, GTK_RESPONSE_CANCEL);
   GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT);
@@ -440,45 +444,96 @@
 }
 
 
-static void on_delete_activate                     (GtkMenuItem     *menuitem,
+static void on_delete_value_activate                     (GtkMenuItem     *menuitem,
 										gpointer         user_data)
 {
-	/* FIXME */
+	WERROR error;
+	GtkTreeIter iter;
+	struct registry_value *value;
+
+	if (!gtk_tree_selection_get_selected (gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_vals)), NULL, &iter)) {
+		return;
+	}
+
+	gtk_tree_model_get(GTK_TREE_MODEL(store_vals), &iter, 1, &value, -1);
+	
+	error = reg_del_value(current_key, value->name);
+
+	if (!W_ERROR_IS_OK(error)) {
+		gtk_show_werror(NULL, error);
+		return;
+	}
 }
 
+static void on_delete_key_activate                     (GtkMenuItem     *menuitem,
+										gpointer         user_data)
+{
+	WERROR error;
+	GtkTreeIter iter, parentiter;
+	struct registry_key *parent_key;
+
+	if (!gtk_tree_selection_get_selected (gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_keys)), NULL, &iter)) {
+		return;
+	}
+
+	if (!gtk_tree_model_iter_parent(GTK_TREE_MODEL(store_keys), &parentiter, &iter)) {
+		return;
+	}
+	
+	gtk_tree_model_get(GTK_TREE_MODEL(store_keys), &parentiter, 1, &parent_key, -1);
+	
+	error = reg_key_del(parent_key, current_key->name);
+
+	if (!W_ERROR_IS_OK(error)) {
+		gtk_show_werror(NULL, error);
+		return;
+	}
+}
+
 static void on_add_key_activate                     (GtkMenuItem     *menuitem,
 										gpointer         user_data)
 {
-        GtkDialog *addwin = GTK_DIALOG(create_NewKeyDialog());
-        gtk_dialog_run(addwin);
-	/* FIXME */
-        gtk_widget_destroy(GTK_WIDGET(addwin));
+	GtkWidget *entry;
+    GtkDialog *addwin = GTK_DIALOG(create_NewKeyDialog(&entry));
+    gint result = gtk_dialog_run(addwin);
+
+	if (result == GTK_RESPONSE_OK)
+	{
+		struct registry_key *newkey;
+		WERROR error = reg_key_add_name(mem_ctx, current_key, gtk_entry_get_text(GTK_ENTRY(entry)), 0, NULL, &newkey);
+
+		if (!W_ERROR_IS_OK(error)) {
+			gtk_show_werror(NULL, error);
+		}
+	}
+
+    gtk_widget_destroy(GTK_WIDGET(addwin));
 }
 
 static void on_add_value_activate                     (GtkMenuItem     *menuitem,
 										gpointer         user_data)
 {
-        GtkDialog *addwin = GTK_DIALOG(create_SetValueDialog());
-        gtk_dialog_run(addwin);
+    GtkDialog *addwin = GTK_DIALOG(create_SetValueDialog());
+    gint result = gtk_dialog_run(addwin);
 	/* FIXME */
-        gtk_widget_destroy(GTK_WIDGET(addwin));
+    gtk_widget_destroy(GTK_WIDGET(addwin));
 }
 
 static void on_find_activate                     (GtkMenuItem     *menuitem,
 										gpointer         user_data)
 {
-        GtkDialog *findwin = GTK_DIALOG(create_FindDialog());
-        gtk_dialog_run(findwin);
+    GtkDialog *findwin = GTK_DIALOG(create_FindDialog());
+    gint result = gtk_dialog_run(findwin);
 	/* FIXME */
-        gtk_widget_destroy(GTK_WIDGET(findwin));
+    gtk_widget_destroy(GTK_WIDGET(findwin));
 }
 
 static void on_about_activate                      (GtkMenuItem     *menuitem,
 										gpointer         user_data)
 {
-        GtkDialog *aboutwin = GTK_DIALOG(create_gtk_samba_about_dialog("gregedit"));
-        gtk_dialog_run(aboutwin);
-        gtk_widget_destroy(GTK_WIDGET(aboutwin));
+    GtkDialog *aboutwin = GTK_DIALOG(create_gtk_samba_about_dialog("gregedit"));
+    gtk_dialog_run(aboutwin);
+    gtk_widget_destroy(GTK_WIDGET(aboutwin));
 }
 
 gboolean on_key_activate(GtkTreeSelection *selection,
@@ -499,13 +554,18 @@
 	gtk_widget_set_sensitive(mnu_del_value, !path_currently_selected);
 	gtk_widget_set_sensitive(mnu_find, !path_currently_selected);
 
-	if(path_currently_selected) { return TRUE; }
+	if(path_currently_selected) { 
+		current_key = NULL; 
+		return TRUE; 
+	}
 
 	gtk_tree_model_get_iter(GTK_TREE_MODEL(store_keys), &parent, path);
 	gtk_tree_model_get(GTK_TREE_MODEL(store_keys), &parent, 1, &k, -1);
 
-	g_assert(k);
+	current_key = k;
 
+	if (!k) return FALSE;
+
 	gtk_list_store_clear(store_vals);
 
 	for(i = 0; W_ERROR_IS_OK(error = reg_key_get_value_by_index(mem_ctx, k, i, &val)); i++) {
@@ -554,7 +614,6 @@
 	GtkWidget *hbox1;
 	GtkWidget *scrolledwindow1;
 	GtkWidget *scrolledwindow2;
-	GtkWidget *tree_vals;
 	GtkWidget *statusbar;
 	GtkAccelGroup *accel_group;
 
@@ -763,8 +822,11 @@
 					  G_CALLBACK (on_find_activate),
 					  NULL);
 	g_signal_connect ((gpointer) mnu_del_key, "activate",
-					  G_CALLBACK (on_delete_activate),
+					  G_CALLBACK (on_delete_key_activate),
 					  NULL);
+	g_signal_connect ((gpointer) mnu_del_value, "activate",
+					  G_CALLBACK (on_delete_value_activate),
+					  NULL);
 	g_signal_connect ((gpointer) about, "activate",
 					  G_CALLBACK (on_about_activate),
 					  NULL);

Modified: branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb.c
===================================================================
--- branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb.c	2004-12-26 21:06:43 UTC (rev 4370)
+++ branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb.c	2004-12-26 22:41:38 UTC (rev 4371)
@@ -237,12 +237,13 @@
 	if (!hive->location) return WERR_INVALID_PARAM;
 	wrap = ldb_wrap_connect(hive, hive->location, 0, NULL);
 
+	if(!wrap) {
+		DEBUG(1, ("ldb_open_hive: unable to connect\n"));
+		return WERR_FOOBAR;
+	}
+
 	c = wrap->ldb;
 
-	if(!c) {
-		DEBUG(1, ("ldb_open_hive: %s\n", ldb_errstring(hive->backend_data)));
-		return WERR_FOOBAR;
-	}
 	ldb_set_debug_stderr(c);
 	hive->backend_data = c;
 



More information about the samba-cvs mailing list