finally fixed the listview content bug: now if the item is selected both its name...
authormishas <mikhail.sobolev@gmail.com>
Thu, 22 Mar 2007 11:42:31 +0000 (11:42 +0000)
committermishas <mikhail.sobolev@gmail.com>
Thu, 22 Mar 2007 11:42:31 +0000 (11:42 +0000)
git-svn-id: file:///svnroot/simple-launcher/trunk@107 3ba93dab-e023-0410-b42a-de7732cf370a

sla-list.cc
sla-list.h

index 6a141b8..5ea984f 100644 (file)
@@ -36,7 +36,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 +49,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);
@@ -110,6 +112,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);
 }
index a1d73a6..7f93552 100644 (file)
@@ -33,6 +33,11 @@ public:
   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 *);
@@ -53,6 +58,8 @@ private:
   GtkTreeView *myView;
   GtkTreeSelection *mySelection;
 
+  GtkTreeIter *myLastSelection;
+
   LauncherItems& myItems;
 };