Blob Blame History Raw
From bead5672f65d9a579143de16a7c72e701a346cce Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 31 Mar 2017 15:22:06 -0400
Subject: [PATCH 12/13] chooser: switch to browse selection mode

The chooser is a host browser after all. It makes not sense to
have an unselected item.
---
 chooser/gdm-host-chooser-widget.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/chooser/gdm-host-chooser-widget.c b/chooser/gdm-host-chooser-widget.c
index b8924618..f8aabf3e 100644
--- a/chooser/gdm-host-chooser-widget.c
+++ b/chooser/gdm-host-chooser-widget.c
@@ -124,89 +124,96 @@ find_known_host (GdmHostChooserWidget *widget,
                  GdmAddress           *address)
 {
         GSList         *li;
         GdmChooserHost *host;
 
         for (li = widget->priv->chooser_hosts; li != NULL; li = li->next) {
                 host = li->data;
                 if (gdm_address_equal (gdm_chooser_host_get_address (host), address)) {
                         goto out;
                 }
         }
 
         host = NULL;
  out:
 
         return host;
 }
 
 static void
 browser_add_host (GdmHostChooserWidget *widget,
                   GdmChooserHost       *host)
 {
         char         *hostname;
         char         *name;
         char         *desc;
         char         *label;
         GtkTreeModel *model;
         GtkTreeIter   iter;
         gboolean      res;
 
+        GtkTreeSelection  *selection;
+
         g_assert (host != NULL);
 
         if (! gdm_chooser_host_get_willing (host)) {
                 gtk_widget_set_sensitive (GTK_WIDGET (widget), TRUE);
                 return;
         }
 
         res = gdm_address_get_hostname (gdm_chooser_host_get_address (host), &hostname);
         if (! res) {
                 gdm_address_get_numeric_info (gdm_chooser_host_get_address (host), &hostname, NULL);
         }
 
         name = g_markup_escape_text (hostname, -1);
         desc = g_markup_escape_text (gdm_chooser_host_get_description (host), -1);
         label = g_strdup_printf ("<b>%s</b>\n%s", name, desc);
         g_free (name);
         g_free (desc);
 
         model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget->priv->treeview));
 
         gtk_list_store_append (GTK_LIST_STORE (model), &iter);
         gtk_list_store_set (GTK_LIST_STORE (model),
                             &iter,
                             CHOOSER_LIST_ICON_COLUMN, NULL,
                             CHOOSER_LIST_LABEL_COLUMN, label,
                             CHOOSER_LIST_HOST_COLUMN, host,
                             -1);
         g_free (label);
 
+        selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget->priv->treeview));
+        if (!gtk_tree_selection_get_selected (selection, NULL, NULL)) {
+                gtk_tree_selection_select_iter (selection, &iter);
+        }
+
 }
 
 static gboolean
 decode_packet (GIOChannel           *source,
                GIOCondition          condition,
                GdmHostChooserWidget *widget)
 {
         struct sockaddr_storage clnt_ss;
         GdmAddress             *address;
         int                     ss_len;
         XdmcpHeader             header;
         int                     res;
         static XdmcpBuffer      buf;
         ARRAY8                  auth = {0};
         ARRAY8                  host = {0};
         ARRAY8                  stat = {0};
         char                   *status;
         GdmChooserHost         *chooser_host;
 
         status = NULL;
         address = NULL;
 
         g_debug ("decode_packet: GIOCondition %d", (int)condition);
 
         if ( ! (condition & G_IO_IN)) {
                 return TRUE;
         }
 
         ss_len = (int) sizeof (clnt_ss);
 
@@ -777,61 +784,61 @@ on_row_activated (GtkTreeView          *tree_view,
 {
         g_signal_emit (widget, signals[HOST_ACTIVATED], 0);
 }
 
 static void
 gdm_host_chooser_widget_init (GdmHostChooserWidget *widget)
 {
         GtkWidget         *scrolled;
         GtkTreeSelection  *selection;
         GtkTreeViewColumn *column;
         GtkTreeModel      *model;
 
         widget->priv = GDM_HOST_CHOOSER_WIDGET_GET_PRIVATE (widget);
 
         scrolled = gtk_scrolled_window_new (NULL, NULL);
         gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled),
                                              GTK_SHADOW_IN);
         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
                                         GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
         gtk_box_pack_start (GTK_BOX (widget), scrolled, TRUE, TRUE, 0);
 
         widget->priv->treeview = gtk_tree_view_new ();
         gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (widget->priv->treeview), FALSE);
         g_signal_connect (widget->priv->treeview,
                           "row-activated",
                           G_CALLBACK (on_row_activated),
                           widget);
         gtk_container_add (GTK_CONTAINER (scrolled), widget->priv->treeview);
 
         selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget->priv->treeview));
-        gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+        gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
         g_signal_connect (selection, "changed",
                           G_CALLBACK (on_host_selected),
                           widget);
 
         model = (GtkTreeModel *)gtk_list_store_new (3,
                                                     GDK_TYPE_PIXBUF,
                                                     G_TYPE_STRING,
                                                     G_TYPE_POINTER);
         gtk_tree_view_set_model (GTK_TREE_VIEW (widget->priv->treeview), model);
 
         column = gtk_tree_view_column_new_with_attributes ("Icon",
                                                            gtk_cell_renderer_pixbuf_new (),
                                                            "pixbuf", CHOOSER_LIST_ICON_COLUMN,
                                                            NULL);
         gtk_tree_view_append_column (GTK_TREE_VIEW (widget->priv->treeview), column);
 
         column = gtk_tree_view_column_new_with_attributes ("Hostname",
                                                            gtk_cell_renderer_text_new (),
                                                            "markup", CHOOSER_LIST_LABEL_COLUMN,
                                                            NULL);
         gtk_tree_view_append_column (GTK_TREE_VIEW (widget->priv->treeview), column);
 
         gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
                                               CHOOSER_LIST_LABEL_COLUMN,
                                               GTK_SORT_ASCENDING);
 }
 
 static void
 gdm_host_chooser_widget_finalize (GObject *object)
 {
-- 
2.12.0