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