| |
@@ -0,0 +1,106 @@
|
| |
+ From 8f169336e681a4dc5e7f9ded5e5ac46aaa001157 Mon Sep 17 00:00:00 2001
|
| |
+ From: Marek Kasik <mkasik@redhat.com>
|
| |
+ Date: Tue, 8 Oct 2019 18:04:30 +0200
|
| |
+ Subject: [PATCH] printers: Provide a scheme to address parser
|
| |
+
|
| |
+ Add a scheme to the address which we test for correctness
|
| |
+ by g_network_address_parse_uri(). It does not work without it.
|
| |
+ Use "none" scheme if user did not entered one.
|
| |
+ Use port number 0 if user did not specify any.
|
| |
+
|
| |
+ Fixes #679
|
| |
+ ---
|
| |
+ panels/printers/pp-new-printer-dialog.c | 66 +++++++++++++++----------
|
| |
+ 1 file changed, 40 insertions(+), 26 deletions(-)
|
| |
+
|
| |
+ diff --git a/panels/printers/pp-new-printer-dialog.c b/panels/printers/pp-new-printer-dialog.c
|
| |
+ index 651c0d8f3..81a4cc1f6 100644
|
| |
+ --- a/panels/printers/pp-new-printer-dialog.c
|
| |
+ +++ b/panels/printers/pp-new-printer-dialog.c
|
| |
+ @@ -1607,43 +1607,57 @@ search_address (const gchar *text,
|
| |
+
|
| |
+ if (text && text[0] != '\0')
|
| |
+ {
|
| |
+ - g_autoptr(GSocketConnectable) conn;
|
| |
+ + g_autoptr(GSocketConnectable) conn = NULL;
|
| |
+ + g_autofree gchar *test_uri = NULL;
|
| |
+ + g_autofree gchar *test_port = NULL;
|
| |
+ gchar *scheme = NULL;
|
| |
+ gchar *host = NULL;
|
| |
+ gint port;
|
| |
+
|
| |
+ parse_uri (text, &scheme, &host, &port);
|
| |
+
|
| |
+ - conn = g_network_address_parse_uri (host, port, NULL);
|
| |
+ -
|
| |
+ - if (host != NULL && conn != NULL)
|
| |
+ + if (host != NULL)
|
| |
+ {
|
| |
+ - THostSearchData *search_data;
|
| |
+ + if (port >= 0)
|
| |
+ + test_port = g_strdup_printf (":%d", port);
|
| |
+ + else
|
| |
+ + test_port = g_strdup ("");
|
| |
+
|
| |
+ - search_data = g_new (THostSearchData, 1);
|
| |
+ - search_data->host_scheme = scheme;
|
| |
+ - search_data->host_name = host;
|
| |
+ - search_data->host_port = port;
|
| |
+ - search_data->dialog = self;
|
| |
+ + test_uri = g_strdup_printf ("%s://%s%s",
|
| |
+ + scheme != NULL && scheme[0] != '\0' ? scheme : "none",
|
| |
+ + host,
|
| |
+ + test_port);
|
| |
+
|
| |
+ - if (self->host_search_timeout_id != 0)
|
| |
+ + conn = g_network_address_parse_uri (test_uri, 0, NULL);
|
| |
+ + if (conn != NULL)
|
| |
+ {
|
| |
+ - g_source_remove (self->host_search_timeout_id);
|
| |
+ - self->host_search_timeout_id = 0;
|
| |
+ - }
|
| |
+ + THostSearchData *search_data;
|
| |
+
|
| |
+ - if (delay_search)
|
| |
+ - {
|
| |
+ - self->host_search_timeout_id = g_timeout_add_full (G_PRIORITY_DEFAULT,
|
| |
+ - HOST_SEARCH_DELAY,
|
| |
+ - (GSourceFunc) search_for_remote_printers,
|
| |
+ - search_data,
|
| |
+ - (GDestroyNotify) search_for_remote_printers_free);
|
| |
+ - }
|
| |
+ - else
|
| |
+ - {
|
| |
+ - search_for_remote_printers (search_data);
|
| |
+ - search_for_remote_printers_free (search_data);
|
| |
+ + search_data = g_new (THostSearchData, 1);
|
| |
+ + search_data->host_scheme = scheme;
|
| |
+ + search_data->host_name = host;
|
| |
+ + search_data->host_port = port;
|
| |
+ + search_data->dialog = self;
|
| |
+ +
|
| |
+ + if (self->host_search_timeout_id != 0)
|
| |
+ + {
|
| |
+ + g_source_remove (self->host_search_timeout_id);
|
| |
+ + self->host_search_timeout_id = 0;
|
| |
+ + }
|
| |
+ +
|
| |
+ + if (delay_search)
|
| |
+ + {
|
| |
+ + self->host_search_timeout_id = g_timeout_add_full (G_PRIORITY_DEFAULT,
|
| |
+ + HOST_SEARCH_DELAY,
|
| |
+ + (GSourceFunc) search_for_remote_printers,
|
| |
+ + search_data,
|
| |
+ + (GDestroyNotify) search_for_remote_printers_free);
|
| |
+ + }
|
| |
+ + else
|
| |
+ + {
|
| |
+ + search_for_remote_printers (search_data);
|
| |
+ + search_for_remote_printers_free (search_data);
|
| |
+ + }
|
| |
+ }
|
| |
+ }
|
| |
+ }
|
| |
+ --
|
| |
+ 2.21.0
|
| |
+
|
| |
This fix was added after the 3.34.1 release. It is important because it restores the functionality of searching for remote printers.
rhbz#1750394