[Goodies-commits] r4126 - xfbib/trunk/src

David Gustafsson tssj at xfce.org
Fri Mar 28 08:28:45 CET 2008


Author: tssj
Date: 2008-03-28 07:28:45 +0000 (Fri, 28 Mar 2008)
New Revision: 4126

Modified:
   xfbib/trunk/src/debug.h
   xfbib/trunk/src/entry_edit_dialog.c
Log:
Initial version of the bibtex completion. The generation of keys need to be improved and updated.


Modified: xfbib/trunk/src/debug.h
===================================================================
--- xfbib/trunk/src/debug.h	2008-03-28 01:48:27 UTC (rev 4125)
+++ xfbib/trunk/src/debug.h	2008-03-28 07:28:45 UTC (rev 4126)
@@ -20,7 +20,7 @@
 
 #if DEBUG
 void dbg_print(const char*, ...);
-#define _DEBUG(msg) (fprintf(stderr,"%s:%d: ", __FILE__, __LINE__), dbg_print msg)
+#define _DEBUG(msg) do{ fprintf(stderr,"%s:%d: ", __FILE__, __LINE__); dbg_print msg; }while(0)
 #else
 #define _DEBUG(msg)
 #endif

Modified: xfbib/trunk/src/entry_edit_dialog.c
===================================================================
--- xfbib/trunk/src/entry_edit_dialog.c	2008-03-28 01:48:27 UTC (rev 4125)
+++ xfbib/trunk/src/entry_edit_dialog.c	2008-03-28 07:28:45 UTC (rev 4126)
@@ -40,7 +40,49 @@
 	"Number", "Organization", "Pages", "Publisher", "School",
 	"Series", "Title", "Type", "URL", "Volume", "Year"};
 
+static char* get_last_name(char *name)
+{
+	int i, size = strlen(name);
+	for(i = size; i != size; i--) {
+		if (name[i] == ' ') {
+			return &name[i + 1];
+		}
+	}
+	return name;
+}		
 
+
+static void generate_keys(GtkListStore *completion_model, GtkTreeModel *author_model)
+{
+	_DEBUG(("generate_keys"));
+	GtkTreeIter iter, comp_iter;
+	gchar *tmp = NULL;
+	/* Clear the old entries */
+	gtk_list_store_clear(completion_model);
+
+	if (gtk_tree_model_get_iter_first(author_model, &iter)) {
+		do {
+			gtk_tree_model_get (author_model, &iter, 0, &tmp, -1);
+			gtk_list_store_append (completion_model, &comp_iter);
+			gtk_list_store_set (completion_model, &comp_iter, 0, get_last_name(tmp), -1);
+			g_free(tmp);
+		} while (gtk_tree_model_iter_next(author_model, &iter));
+	}
+}
+
+
+
+static gboolean cb_focus_in_event (GtkWidget *widget, GdkEventFocus *event, struct edit_entry *edit_entry)
+{
+	_DEBUG(("cb_in_focus_event"));
+
+	generate_keys(GTK_LIST_STORE(gtk_entry_completion_get_model(gtk_entry_get_completion(GTK_ENTRY(widget)))), 
+			gtk_tree_view_get_model(GTK_TREE_VIEW(edit_entry[AUTHOR].entry)));
+	
+	return FALSE;
+}
+
+
 static void set_color_base(GtkWidget *entry, int selected_color)
 {
 	_DEBUG(("set_color"));
@@ -80,8 +122,8 @@
 {
 	_DEBUG(("change_color_view"));
 	GtkTreeIter iter;
-	gboolean empty = gtk_tree_model_get_iter_first(gtk_tree_view_get_model(entry), &iter);
-	if (empty) {
+	gboolean is_empty = gtk_tree_model_get_iter_first(gtk_tree_view_get_model(entry), &iter);
+	if (is_empty == FALSE) {
 		set_color_base(GTK_WIDGET(entry), RED);
 		return 0;
 	} else {
@@ -249,12 +291,27 @@
 {
 	_DEBUG(("create_hbox"));
 	GtkWidget *hbox;
+	GtkEntryCompletion *completion;
+	GtkListStore *store;
 	int i;
 
 	*key_entry = gtk_entry_new();
 	gtk_entry_set_width_chars(GTK_ENTRY (*key_entry), 25);
 	gtk_widget_set_tooltip_text(*key_entry, _("Key used when citing the publication"));
 
+	store = gtk_list_store_new (1, G_TYPE_STRING);
+
+	completion = gtk_entry_completion_new ();
+	gtk_entry_set_completion (GTK_ENTRY (*key_entry), completion);
+	g_object_unref(completion);
+	gtk_entry_completion_set_model (completion, GTK_TREE_MODEL (store));
+	g_object_unref(store);
+	gtk_entry_completion_set_text_column (completion, 0);
+	gtk_entry_completion_set_minimum_key_length(completion, 0);
+
+        g_signal_connect(GTK_WIDGET(*key_entry), "focus-in-event", G_CALLBACK(cb_focus_in_event), edit_entry);
+
+
 	*combobox = gtk_combo_box_new_text();
 	for (i = 0; i < N_TYPES; i++)
 		gtk_combo_box_append_text (GTK_COMBO_BOX (*combobox),label_types[i] );
@@ -516,7 +573,7 @@
 							value = "";
 							do {
 								_DEBUG(("Pasting together Author/Editor"));
-								gtk_tree_model_get (model, &iter, 0, &tmp);
+								gtk_tree_model_get (model, &iter, 0, &tmp, -1);
 								_DEBUG(("Pasting together Author/Editor"));
 								if (strcmp(value, "") == 0) {
 									_DEBUG(("IF"));




More information about the Goodies-commits mailing list