LINUX.ORG.RU

[gtk+] Подскажите как грамотно обновить GtkIconView


0

0

Доброго времени суток. У меня есть GtkIconView на форме. В него загружаются изображения определенного размера, следующим образом:

mw->img_list - список адресов файлов.

void loading_data(MainWin* mw, const char* file_path)
{
  ...
  // при каждой загрузке модель очищается
  gtk_list_store_clear(mw->model);
  ...
  GtkTreeIter iter;
  int i = 0;
  for (i; i < g_list_length(mw->img_list) - 1; ++i)
  {			  
    char* file = image_list_get_current_file_path(mw->img_list );	
			
    mw->p1 = gdk_pixbuf_new_from_file(file,NULL);
    mw->p1 = scale_pix(mw->p1,64);

    gtk_list_store_append(mw->model, &iter);
    gtk_list_store_set(mw->model, &iter, COL_DISPLAY_NAME, 

    image_list_get_current(mw->img_list), COL_PIXBUF, mw->p1, -1);   
			
    list = g_list_append(list,file);
		  
    if (!mw->img_list->current->next )
	image_list_get_first(mw->img_list);
    else
        image_list_get_next(mw->img_list);
  }
	gtk_icon_view_set_text_column(GTK_ICON_VIEW(mw->view),0);
        gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(mw->view), 1);
        gtk_icon_view_set_selection_mode(GTK_ICON_VIEW(mw->view), GTK_SELECTION_SINGLE);

g_signal_connect(mw->view,"selection-changed",G_CALLBACK(thumbnail_selected),mw);
}

Теперь мне нужно загрузить в другой виджет изображение выделенное в GtkIconView.

void thumbnail_selected(GtkWidget* widget, MainWin* mw)
{
  GList* list1 = gtk_icon_view_get_selected_items(mw->view1); 
  char* b = gtk_tree_path_to_string(list1->data); 
  
  int n = atoi(b);
  char* c = g_list_nth_data(list,n);
	
  loading_data(mw,c);
}

Но так как в начале функции стоит gtk_list_store_clear(mw->model); вылетает сегфолт. Если убрать вызов gtk_list_store_clear то в GtkIconView будут подгружаться каждый раз новые изображения, но старые удалятся не будут. А мне нужно что бы при каждом обновлении GtkIconView удалялись все данные в нем, и вставлялись только новые.

Спасибо.


чего-то не пойму, нафига у тебя там gtk_icon_view_set_text_column() и прочее болтается? что они делают в функции, обновляющей данные в модели?

ananas ★★★★★
()

и еще. валится у тебя потому, что selection-changed отрабатывает всегда, и при выделении, и при снятии выделения. а проверку на пустой list при инициализации char* b ты не делаешь

ananas ★★★★★
()
Ответ на: комментарий от shk

никакой, по-идее. да это и не нужно. просто дергай из обработчика gtk_icon_view_selected_foreach()

ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.