[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