From bead5672f65d9a579143de16a7c72e701a346cce Mon Sep 17 00:00:00 2001 From: Ray Strode 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 ("%s\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