View | Details | Raw Unified | Return to bug 19776
Collapse All | Expand All

(-)logjam-4.5.3/src/jamview.c.save (-1 / +2 lines)
Lines 418-424 tags_select_cb(JamView *view) { Link Here
418
424
419
  tags = tags_dialog(toplevel,
425
  tags = tags_dialog(toplevel,
420
		     JAM_ACCOUNT_LJ(view->account), 
426
		     JAM_ACCOUNT_LJ(view->account), 
421
		     jam_doc_get_usejournal(view->doc));
427
		     jam_doc_get_usejournal(view->doc),
428
		     (gchar *) gtk_entry_get_text(GTK_ENTRY(view->tags)));
422
429
423
  if (tags) {
430
  if (tags) {
424
      gtk_entry_set_text(GTK_ENTRY(view->tags), tags);
431
      gtk_entry_set_text(GTK_ENTRY(view->tags), tags);
(-)logjam-4.5.3/src/tags.c.save (-4 / +70 lines)
Lines 78-85 create_tag_string (GtkTreeModel *model, Link Here
78
  return FALSE;
78
  return FALSE;
79
}
79
}
80
80
81
static void
82
tags_set_fg(GtkTreeViewColumn *column, GtkCellRenderer *cell,
83
	    GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
84
{
85
  GSList *prev = (GSList *) data;
86
  gchar *text;
87
88
  gtk_tree_model_get(model, iter, 1, &text, -1);
89
  if (prev && g_slist_find_custom(prev, text, g_utf8_collate))
90
    g_object_set(G_OBJECT(cell), "foreground", "Red", NULL);
91
  else
92
    g_object_set(G_OBJECT(cell), "foreground", "Black", NULL);
93
  g_free(text);
94
}
95
81
GtkWidget* 
96
GtkWidget* 
82
taglist_create (GSList *l)
97
taglist_create (GSList *l, GSList **head)
83
{
98
{
84
  GtkWidget *treeview;
99
  GtkWidget *treeview;
85
  GtkListStore *store;
100
  GtkListStore *store;
Lines 87-106 taglist_create (GSList *l) Link Here
87
  GtkCellRenderer *renderer;
102
  GtkCellRenderer *renderer;
88
  GtkTreeViewColumn *column;
103
  GtkTreeViewColumn *column;
89
  guint i;
104
  guint i;
105
  GSList *prev = *head, *p;
90
106
91
  /* create model */
107
  /* create model */
92
  store = gtk_list_store_new (2, G_TYPE_BOOLEAN, G_TYPE_STRING);
108
  store = gtk_list_store_new (2, G_TYPE_BOOLEAN, G_TYPE_STRING);
93
  for (i = 0; i < g_slist_length (l); i++)
109
  for (i = 0; i < g_slist_length (l); i++)
94
    {
110
    {
95
      LJTag *t = (LJTag *) g_slist_nth_data (l, i);
111
      LJTag *t = (LJTag *) g_slist_nth_data (l, i);
112
      gboolean check = FALSE;
96
113
114
      if (prev && (p = g_slist_find_custom(prev, t->tag, g_utf8_collate)) != NULL) {
115
        check = TRUE;
116
        prev = g_slist_remove_link(prev, p);
117
        g_free(p->data);
118
        g_slist_free1(p);
119
      }
97
      gtk_list_store_append (store, &iter);
120
      gtk_list_store_append (store, &iter);
98
      gtk_list_store_set (store, &iter,
121
      gtk_list_store_set (store, &iter,
99
			  0, FALSE,
122
			  0, check,
100
			  1, t->tag,
123
			  1, t->tag,
101
			  -1);
124
			  -1);
102
    }
125
    }
103
126
127
  /* rest of the typed tags */
128
  for (p = prev; p; p = g_slist_next(p)) {
129
    gtk_list_store_append(store, &iter);
130
    gtk_list_store_set(store, &iter,
131
      		  0, TRUE,
132
      		  1, p->data,
133
      		  -1);
134
  }
135
104
  /* create treeview */
136
  /* create treeview */
105
  treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
137
  treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
106
  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
138
  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
Lines 120-139 taglist_create (GSList *l) Link Here
120
  column = gtk_tree_view_column_new_with_attributes (_("Tag name"), 
152
  column = gtk_tree_view_column_new_with_attributes (_("Tag name"), 
121
						     renderer, "text", 1,
153
						     renderer, "text", 1,
122
						     NULL);
154
						     NULL);
155
156
  gtk_tree_view_column_set_cell_data_func(column, renderer, tags_set_fg,
157
					  prev, NULL);
158
123
  gtk_tree_view_column_set_sort_column_id (column, 1);
159
  gtk_tree_view_column_set_sort_column_id (column, 1);
124
  gtk_tree_view_append_column (treeview, column);
160
  gtk_tree_view_append_column (treeview, column);
125
 
161
 
162
  /* update head of the prev list */
163
  *head = prev;
126
  g_object_unref (store);
164
  g_object_unref (store);
127
165
128
  return treeview;
166
  return treeview;
129
}
167
}
130
168
169
static GSList *
170
tags_split(gchar *typed) {
171
  GSList *head = NULL;
172
  gchar **result, **p;
173
174
  if (typed == NULL || *typed == '\0')
175
    return NULL;
176
177
  for (p = result = g_strsplit(typed, ",", 0); *p; p++) {
178
    gchar *token = g_strstrip(*p);
179
    if (*token)
180
      head = g_slist_prepend(head, g_utf8_strdown(token, -1));
181
  }
182
  g_strfreev(result);
183
  return head;
184
}
185
131
gchar* 
186
gchar* 
132
tags_dialog (GtkWidget *win, JamAccountLJ *acc, gchar *journal)
187
tags_dialog (GtkWidget *win, JamAccountLJ *acc, gchar *journal, gchar *typed)
133
{
188
{
134
  GtkWidget *dlg, *sw, *tv;
189
  GtkWidget *dlg, *sw, *tv;
135
  GSList *list = NULL;
190
  GSList *list = NULL;
136
  gchar *taglist = NULL;
191
  gchar *taglist = NULL;
192
  GSList *prev;
137
193
138
  if (acc == NULL) return NULL;
194
  if (acc == NULL) return NULL;
139
195
Lines 156-162 tags_dialog (GtkWidget *win, JamAccountL Link Here
156
				  GTK_POLICY_AUTOMATIC);
212
				  GTK_POLICY_AUTOMATIC);
157
  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), sw, TRUE, TRUE, 0);
213
  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), sw, TRUE, TRUE, 0);
158
214
159
  tv = taglist_create (list);
215
  prev = tags_split(typed);
216
  tv = taglist_create (list, &prev);
160
  gtk_container_add (GTK_CONTAINER (sw), tv);
217
  gtk_container_add (GTK_CONTAINER (sw), tv);
161
218
162
  gtk_window_resize(dlg, 60, 210);
219
  gtk_window_resize(dlg, 60, 210);
Lines 177-181 tags_dialog (GtkWidget *win, JamAccountL Link Here
177
234
178
  gtk_widget_destroy (dlg);
235
  gtk_widget_destroy (dlg);
179
  
236
  
237
  /* free rest of prev list */
238
  if (prev) {
239
    GSList *p;
240
    for (p = prev; p; p = g_slist_next(p)) {
241
      g_free(p->data);
242
    }
243
    g_slist_free(prev);
244
  }
245
180
  return taglist;
246
  return taglist;
181
}
247
}
(-)logjam-4.5.3/src/tags.h.save (-1 / +1 lines)
Lines 1-6 Link Here
1
#ifndef _TAGS_H_
1
#ifndef _TAGS_H_
2
#define _TAGS_H_
2
#define _TAGS_H_
3
3
4
gchar* tags_dialog (GtkWidget *win, JamAccountLJ *acc, gchar *journal);
4
gchar* tags_dialog (GtkWidget *win, JamAccountLJ *acc, gchar *journal, gchar *typed);
5
5
6
#endif /* _TAGS_H_ */
6
#endif /* _TAGS_H_ */

Return to bug 19776