X-Git-Url: http://git.maemo.org/git/?p=simple-launcher;a=blobdiff_plain;f=sla-list.cc;h=7104b8ef6ec698e3c23f799d3b7c2c2a626067e6;hp=5d96edc24d9311dc5f5b7617f259bc2a16eaaf4e;hb=0095049cda673a0f8adbd93399813eedd8930a44;hpb=bc652ae02e15ca14fc25e9406ed7786b004b7a2e diff --git a/sla-list.cc b/sla-list.cc index 5d96edc..7104b8e 100644 --- a/sla-list.cc +++ b/sla-list.cc @@ -27,6 +27,12 @@ #include "sla-list.h" +enum { + SLA_STORE_COLUMN_ICON = 0, + SLA_STORE_COLUMN_INDEX, + SLA_STORE_COLUMN_LAST +}; + static GtkWidget *gtk_button_new_stock_image_only(const gchar *stock_id) { GtkWidget *button = gtk_button_new(); GtkWidget *image = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_BUTTON); @@ -36,7 +42,7 @@ static GtkWidget *gtk_button_new_stock_image_only(const gchar *stock_id) { return button; } -SLAList::SLAList(int icon_size, LauncherItems& items): myWidget(NULL), myStore(NULL), myView(NULL), mySelection(NULL), myItems(items) { +SLAList::SLAList(int icon_size, LauncherItems& items): myWidget(NULL), myStore(NULL), myView(NULL), mySelection(NULL), myLastSelection(NULL), myItems(items) { GtkTreeViewColumn *column; GtkCellRenderer *renderer; @@ -49,6 +55,8 @@ SLAList::SLAList(int icon_size, LauncherItems& items): myWidget(NULL), myStore(N mySelection = gtk_tree_view_get_selection(myView); gtk_tree_selection_set_mode(mySelection, GTK_SELECTION_SINGLE); + g_signal_connect(G_OBJECT(mySelection), "changed", G_CALLBACK(_selectionChanged), this); + renderer = gtk_cell_renderer_pixbuf_new(); g_object_set(renderer, "yalign", 0.0, NULL); gtk_cell_renderer_set_fixed_size(renderer, icon_size+4, -1); @@ -59,10 +67,10 @@ SLAList::SLAList(int icon_size, LauncherItems& items): myWidget(NULL), myStore(N renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "yalign", 0.0, NULL); column = gtk_tree_view_column_new(); - gtk_tree_view_column_pack_start(column, renderer, TRUE); - gtk_tree_view_column_set_cell_data_func(column, renderer, _renderText, this, NULL); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_expand(column, TRUE); + gtk_tree_view_column_pack_start(column, renderer, TRUE); + gtk_tree_view_column_set_cell_data_func(column, renderer, _renderText, this, NULL); gtk_tree_view_insert_column(myView, column, -1); @@ -102,7 +110,11 @@ SLAList::SLAList(int icon_size, LauncherItems& items): myWidget(NULL), myStore(N GtkTreeIter iter; gtk_list_store_append(myStore, &iter); - gtk_list_store_set(myStore, &iter, 0, item->getIcon(icon_size), 1, it-myItems.myNames.begin(), -1); + { + GdkPixbuf *icon = item->getIcon(icon_size); + gtk_list_store_set(myStore, &iter, SLA_STORE_COLUMN_ICON, icon, SLA_STORE_COLUMN_INDEX, it-myItems.myNames.begin(), -1); + g_object_unref(G_OBJECT(icon)); + } } } @@ -110,6 +122,35 @@ SLAList::~SLAList() { // FIXME: do something! :) } +void SLAList::_selectionChanged(GtkTreeSelection *selection, void *self) { + ((SLAList *)self)->selectionChanged(selection); +} + +void SLAList::selectionChanged(GtkTreeSelection *) { + if (myLastSelection != NULL) { + kickIt(myLastSelection); + gtk_tree_iter_free(myLastSelection); + myLastSelection = NULL; + } + + GtkTreeIter iter; + GtkTreeModel *dummy; + + if (gtk_tree_selection_get_selected(mySelection, &dummy, &iter)) { + kickIt(&iter); + myLastSelection = gtk_tree_iter_copy(&iter); + } +} + +void SLAList::kickIt(GtkTreeIter *iter) { + GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(myStore), iter); + + if (path != NULL) { + g_signal_emit_by_name(myStore, "row-changed", path, iter); + gtk_tree_path_free(path); + } +} + void SLAList::_renderText(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer self) { ((SLAList *)self)->renderText(column, cell, model, iter); } @@ -133,7 +174,7 @@ void SLAList::_moveDown(GtkButton *button, void *self) { void SLAList::renderText(GtkTreeViewColumn *, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter) { int index; - gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, 1, &index, -1); + gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, SLA_STORE_COLUMN_INDEX, &index, -1); LauncherItem *item = myItems[index]; @@ -149,7 +190,7 @@ void SLAList::renderText(GtkTreeViewColumn *, GtkCellRenderer *cell, GtkTreeMode void SLAList::renderBool(GtkTreeViewColumn *, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter) { int index; - gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, 1, &index, -1); + gtk_tree_model_get(GTK_TREE_MODEL(myStore), iter, SLA_STORE_COLUMN_INDEX, &index, -1); g_object_set(cell, "active", myItems[index]->isEnabled(), NULL); } @@ -160,7 +201,7 @@ void SLAList::toggleBool(GtkCellRendererToggle *renderer, const gchar *spath) { if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(myStore), &iter, spath)) { int index; - gtk_tree_model_get(GTK_TREE_MODEL(myStore), &iter, 1, &index, -1); + gtk_tree_model_get(GTK_TREE_MODEL(myStore), &iter, SLA_STORE_COLUMN_INDEX, &index, -1); myItems[index]->toggle(); } } @@ -207,13 +248,13 @@ void SLAList::moveDown(GtkButton *) { void SLAList::swap(GtkTreeIter& a, GtkTreeIter& b) { int i1, i2; - gtk_tree_model_get(GTK_TREE_MODEL(myStore), &a, 1, &i1, -1); - gtk_tree_model_get(GTK_TREE_MODEL(myStore), &b, 1, &i2, -1); + gtk_tree_model_get(GTK_TREE_MODEL(myStore), &a, SLA_STORE_COLUMN_INDEX, &i1, -1); + gtk_tree_model_get(GTK_TREE_MODEL(myStore), &b, SLA_STORE_COLUMN_INDEX, &i2, -1); myItems.swap(i1, i2); - gtk_list_store_set(myStore, &a, 1, i2, -1); - gtk_list_store_set(myStore, &b, 1, i1, -1); + gtk_list_store_set(myStore, &a, SLA_STORE_COLUMN_INDEX, i2, -1); + gtk_list_store_set(myStore, &b, SLA_STORE_COLUMN_INDEX, i1, -1); gtk_list_store_swap(myStore, &a, &b); }