]> git.tdb.fi Git - ext/subsurface.git/blobdiff - divelist.c
Put the default focus on the dive list at startup
[ext/subsurface.git] / divelist.c
index dd942f7199feaad080f261993ff80ea06a65416e..97a5674bf56311447d7485da9d40c26cec7f2435 100644 (file)
@@ -1,7 +1,7 @@
 /* divelist.c */
-/* this creates the UI for the dive list - 
+/* this creates the UI for the dive list -
  * controlled through the following interfaces:
- * 
+ *
  * void flush_divelist(struct dive *dive)
  * GtkWidget dive_list_create(void)
  * void dive_list_update_dives(void)
@@ -403,6 +403,11 @@ static void fill_dive_list(void)
        }
 
        update_dive_list_units();
+       if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(dive_list.model), &iter)) {
+               GtkTreeSelection *selection;
+               selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(dive_list.tree_view));
+               gtk_tree_selection_select_iter(selection, &iter);
+       }
 }
 
 void dive_list_update_dives(void)
@@ -440,12 +445,21 @@ static GtkTreeViewColumn *divelist_column(struct DiveList *dl, int index, const
                gtk_cell_renderer_set_alignment(GTK_CELL_RENDERER(renderer), 1.0, 0.5);
        }
        gtk_tree_view_column_set_expand(col,expand);
-       if (expand) 
+       if (expand)
                gtk_tree_view_column_set_min_width(col,50);
        gtk_tree_view_append_column(GTK_TREE_VIEW(dl->tree_view), col);
        return col;
 }
 
+/*
+ * This is some crazy crap. The only way to get default focus seems
+ * to be to grab focus as the widget is being shown the first time.
+ */
+static void realize_cb(GtkWidget *tree_view, gpointer userdata)
+{
+       gtk_widget_grab_focus(tree_view);
+}
+
 GtkWidget *dive_list_create(void)
 {
        GtkTreeSelection  *selection;
@@ -481,10 +495,11 @@ GtkWidget *dive_list_create(void)
        fill_dive_list();
 
        g_object_set(G_OBJECT(dive_list.tree_view), "headers-visible", TRUE,
-                                         "search-column", 0,
+                                         "search-column", DIVE_LOCATION,
                                          "rules-hint", TRUE,
                                          NULL);
 
+       g_signal_connect_after(dive_list.tree_view, "realize", G_CALLBACK(realize_cb), NULL);
        g_signal_connect(selection, "changed", G_CALLBACK(selection_cb), dive_list.model);
 
        dive_list.container_widget = gtk_scrolled_window_new(NULL, NULL);