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;
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);
// 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);
}
GtkWidget *getWidget() { return myWidget; }
private:
+ static void _selectionChanged(GtkTreeSelection *, gpointer);
+
+ void selectionChanged(GtkTreeSelection *);
+ void kickIt(GtkTreeIter *);
+
static void _renderText(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer self);
static void _renderBool(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer self);
static void _moveUp(GtkButton *, void *);
GtkTreeView *myView;
GtkTreeSelection *mySelection;
+ GtkTreeIter *myLastSelection;
+
LauncherItems& myItems;
};