[Spice-devel] [PATCH spice-gtk] spicy: remove connect dialog
Victor Toso
victortoso at redhat.com
Thu Aug 10 06:28:39 UTC 2017
Hi,
On Wed, Aug 09, 2017 at 10:49:51PM +0200, marcandre.lureau at redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau at redhat.com>
>
> The connect dialog isn't working properly when recent entries are for
> spice+unix://. We could improve the recent dialog, but spicy isn't
> meant to be a fully-feature spice client.
Well, it is useful for recent entries ...
> It makes user believe that it is a end-user application. It is not, it
> is only meant to do testing. So if you need to lookup recent
> connections, you can use the shell history instead.
The user should prefer other applications for what they provide,
removing this here to make them use something else is a bit weird.
> Signed-off-by: Marc-André Lureau <marcandre.lureau at redhat.com>
But If no one else complains, I'm fine with it... and patch looks fine.
> ---
> doc/reference/Makefile.am | 1 -
> tools/Makefile.am | 2 -
> tools/spicy-connect.c | 248 ----------------------------------------------
> tools/spicy-connect.h | 26 -----
> tools/spicy.c | 115 +++------------------
> 5 files changed, 15 insertions(+), 377 deletions(-)
> delete mode 100644 tools/spicy-connect.c
> delete mode 100644 tools/spicy-connect.h
>
> diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am
> index 9fda456..cc7abe7 100644
> --- a/doc/reference/Makefile.am
> +++ b/doc/reference/Makefile.am
> @@ -50,7 +50,6 @@ IGNORE_HFILES= \
> spice-uri-priv.h \
> spice-util-priv.h \
> spice-widget-priv.h \
> - spicy-connect.h \
> usb-acl-helper.h \
> usb-device-manager-priv.h \
> usbdk_api.h \
> diff --git a/tools/Makefile.am b/tools/Makefile.am
> index 52523e1..5b7c4de 100644
> --- a/tools/Makefile.am
> +++ b/tools/Makefile.am
> @@ -19,8 +19,6 @@ endif
>
> spicy_SOURCES = \
> spicy.c \
> - spicy-connect.h \
> - spicy-connect.c \
> spice-cmdline.h \
> spice-cmdline.c \
> $(NULL)
> diff --git a/tools/spicy-connect.c b/tools/spicy-connect.c
> deleted file mode 100644
> index 39555a6..0000000
> --- a/tools/spicy-connect.c
> +++ /dev/null
> @@ -1,248 +0,0 @@
> -/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
> -/*
> - Copyright (C) 2010-2015 Red Hat, Inc.
> -
> - This library is free software; you can redistribute it and/or
> - modify it under the terms of the GNU Lesser General Public
> - License as published by the Free Software Foundation; either
> - version 2.1 of the License, or (at your option) any later version.
> -
> - This library is distributed in the hope that it will be useful,
> - but WITHOUT ANY WARRANTY; without even the implied warranty of
> - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> - Lesser General Public License for more details.
> -
> - You should have received a copy of the GNU Lesser General Public
> - License along with this library; if not, see <http://www.gnu.org/licenses/>.
> -*/
> -
> -#include <gtk/gtk.h>
> -#include <gdk/gdkkeysyms.h>
> -#include "spice-common.h"
> -#include "spicy-connect.h"
> -
> -typedef struct
> -{
> - gboolean connecting;
> - GMainLoop *loop;
> - SpiceSession *session;
> -} ConnectionInfo;
> -
> -static struct {
> - const char *text;
> - const char *prop;
> - GtkWidget *entry;
> -} connect_entries[] = {
> - { .text = "Hostname", .prop = "host" },
> - { .text = "Port", .prop = "port" },
> - { .text = "TLS Port", .prop = "tls-port" },
> -};
> -
> -static gboolean can_connect(void)
> -{
> - if ((gtk_entry_get_text_length(GTK_ENTRY(connect_entries[0].entry)) > 0) &&
> - ((gtk_entry_get_text_length(GTK_ENTRY(connect_entries[1].entry)) > 0) ||
> - (gtk_entry_get_text_length(GTK_ENTRY(connect_entries[2].entry)) > 0)))
> - return TRUE;
> -
> - return FALSE;
> -}
> -
> -static void set_connection_info(SpiceSession *session)
> -{
> - const gchar *txt;
> - int i;
> -
> - for (i = 0; i < SPICE_N_ELEMENTS(connect_entries); i++) {
> - txt = gtk_entry_get_text(GTK_ENTRY(connect_entries[i].entry));
> - g_object_set(session, connect_entries[i].prop, txt, NULL);
> - }
> -}
> -
> -static gboolean close_cb(gpointer data)
> -{
> - ConnectionInfo *info = data;
> - info->connecting = FALSE;
> - if (g_main_loop_is_running(info->loop))
> - g_main_loop_quit(info->loop);
> -
> - return TRUE;
> -}
> -
> -static void entry_changed_cb(GtkEditable* entry, gpointer data)
> -{
> - GtkButton *connect_button = data;
> - gtk_widget_set_sensitive(GTK_WIDGET(connect_button), can_connect());
> -}
> -
> -static gboolean entry_focus_in_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
> -{
> - GtkRecentChooser *recent = GTK_RECENT_CHOOSER(data);
> - gtk_recent_chooser_unselect_all(recent);
> - return TRUE;
> -}
> -
> -static gboolean key_pressed_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
> -{
> - gboolean tst;
> - if (event->type == GDK_KEY_PRESS) {
> - switch (event->key.keyval) {
> - case GDK_KEY_Escape:
> - g_signal_emit_by_name(GTK_WIDGET(data), "delete-event", NULL, &tst);
> - return TRUE;
> - default:
> - return FALSE;
> - }
> - }
> -
> - return FALSE;
> -}
> -
> -static void recent_selection_changed_dialog_cb(GtkRecentChooser *chooser, gpointer data)
> -{
> - GtkRecentInfo *info;
> - gchar *txt = NULL;
> - const gchar *uri;
> - SpiceSession *session = data;
> - int i;
> -
> - info = gtk_recent_chooser_get_current_item(chooser);
> - if (info == NULL)
> - return;
> -
> - uri = gtk_recent_info_get_uri(info);
> - g_return_if_fail(uri != NULL);
> -
> - g_object_set(session, "uri", uri, NULL);
> -
> - for (i = 0; i < SPICE_N_ELEMENTS(connect_entries); i++) {
> - g_object_get(session, connect_entries[i].prop, &txt, NULL);
> - gtk_entry_set_text(GTK_ENTRY(connect_entries[i].entry), txt ? txt : "");
> - g_free(txt);
> - }
> -
> - gtk_recent_info_unref(info);
> -}
> -
> -static void connect_cb(gpointer data)
> -{
> - ConnectionInfo *info = data;
> - if (can_connect())
> - {
> - info->connecting = TRUE;
> - set_connection_info(info->session);
> - if (g_main_loop_is_running(info->loop))
> - g_main_loop_quit(info->loop);
> - }
> -}
> -
> -gboolean spicy_connect_dialog(SpiceSession *session)
> -{
> - GtkWidget *connect_button, *cancel_button, *label;
> - GtkBox *main_box, *recent_box, *button_box;
> - GtkWindow *window;
> - GtkGrid *grid;
> - int i;
> -
> - ConnectionInfo info = {
> - FALSE,
> - NULL,
> - session
> - };
> -
> - /* Create the widgets */
> - window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
> - gtk_window_set_title(window, "Connect to SPICE");
> - gtk_window_set_resizable(window, FALSE);
> - gtk_container_set_border_width(GTK_CONTAINER(window), 5);
> -
> - main_box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));
> - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(main_box));
> -
> - grid = GTK_GRID(gtk_grid_new());
> - gtk_box_pack_start(main_box, GTK_WIDGET(grid), FALSE, TRUE, 0);
> - gtk_container_set_border_width(GTK_CONTAINER(grid), 5);
> - gtk_grid_set_row_spacing(grid, 5);
> - gtk_grid_set_column_spacing(grid, 5);
> -
> - for (i = 0; i < SPICE_N_ELEMENTS(connect_entries); i++) {
> - gchar *txt;
> - label = gtk_label_new(connect_entries[i].text);
> - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
> - gtk_grid_attach(grid, label, 0, i, 1, 1);
> - connect_entries[i].entry = GTK_WIDGET(gtk_entry_new());
> - gtk_grid_attach(grid, connect_entries[i].entry, 1, i, 1, 1);
> - g_object_get(session, connect_entries[i].prop, &txt, NULL);
> - SPICE_DEBUG("%s: #%i [%s]: \"%s\"",
> - __FUNCTION__, i, connect_entries[i].prop, txt);
> - if (txt) {
> - gtk_entry_set_text(GTK_ENTRY(connect_entries[i].entry), txt);
> - g_free(txt);
> - }
> - }
> -
> - recent_box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0));
> - gtk_box_pack_start(main_box, GTK_WIDGET(recent_box), TRUE, TRUE, 0);
> - gtk_container_set_border_width(GTK_CONTAINER(recent_box), 5);
> -
> - label = gtk_label_new("Recent connections:");
> - gtk_box_pack_start(recent_box, label, FALSE, TRUE, 0);
> - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
> -
> - button_box = GTK_BOX(gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL));
> - gtk_button_box_set_layout(GTK_BUTTON_BOX(button_box), GTK_BUTTONBOX_END);
> - gtk_box_set_spacing(button_box, 5);
> - gtk_container_set_border_width(GTK_CONTAINER(button_box), 5);
> - connect_button = gtk_button_new_with_label("Connect");
> - cancel_button = gtk_button_new_with_label("Cancel");
> - gtk_box_pack_start(button_box, cancel_button, FALSE, TRUE, 0);
> - gtk_box_pack_start(button_box, connect_button, FALSE, TRUE, 1);
> -
> - gtk_box_pack_start(main_box, GTK_WIDGET(button_box), FALSE, TRUE, 0);
> -
> - gtk_widget_set_sensitive(GTK_WIDGET(connect_button), can_connect());
> -
> - g_signal_connect(window, "key-press-event",
> - G_CALLBACK(key_pressed_cb), window);
> - g_signal_connect_swapped(window, "delete-event",
> - G_CALLBACK(close_cb), &info);
> - g_signal_connect_swapped(connect_button, "clicked",
> - G_CALLBACK(connect_cb), &info);
> - g_signal_connect_swapped(cancel_button, "clicked",
> - G_CALLBACK(close_cb), &info);
> -
> - GtkRecentFilter *rfilter;
> - GtkWidget *recent;
> -
> - recent = GTK_WIDGET(gtk_recent_chooser_widget_new());
> - gtk_recent_chooser_set_show_icons(GTK_RECENT_CHOOSER(recent), FALSE);
> - gtk_box_pack_start(recent_box, recent, TRUE, TRUE, 0);
> -
> - rfilter = gtk_recent_filter_new();
> - gtk_recent_filter_add_mime_type(rfilter, "application/x-spice");
> - gtk_recent_chooser_set_filter(GTK_RECENT_CHOOSER(recent), rfilter);
> - gtk_recent_chooser_set_local_only(GTK_RECENT_CHOOSER(recent), FALSE);
> - g_signal_connect(recent, "selection-changed",
> - G_CALLBACK(recent_selection_changed_dialog_cb), session);
> - g_signal_connect_swapped(recent, "item-activated",
> - G_CALLBACK(connect_cb), &info);
> -
> - for (i = 0; i < SPICE_N_ELEMENTS(connect_entries); i++) {
> - g_signal_connect_swapped(connect_entries[i].entry, "activate",
> - G_CALLBACK(connect_cb), &info);
> - g_signal_connect(connect_entries[i].entry, "changed",
> - G_CALLBACK(entry_changed_cb), connect_button);
> - g_signal_connect(connect_entries[i].entry, "focus-in-event",
> - G_CALLBACK(entry_focus_in_cb), recent);
> - }
> -
> - /* show and wait for response */
> - gtk_widget_show_all(GTK_WIDGET(window));
> -
> - info.loop = g_main_loop_new(NULL, FALSE);
> - g_main_loop_run(info.loop);
> -
> - gtk_widget_destroy(GTK_WIDGET(window));
> -
> - return info.connecting;
> -}
> diff --git a/tools/spicy-connect.h b/tools/spicy-connect.h
> deleted file mode 100644
> index 56b2d80..0000000
> --- a/tools/spicy-connect.h
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
> -/*
> - Copyright (C) 2010-2015 Red Hat, Inc.
> -
> - This library is free software; you can redistribute it and/or
> - modify it under the terms of the GNU Lesser General Public
> - License as published by the Free Software Foundation; either
> - version 2.1 of the License, or (at your option) any later version.
> -
> - This library is distributed in the hope that it will be useful,
> - but WITHOUT ANY WARRANTY; without even the implied warranty of
> - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> - Lesser General Public License for more details.
> -
> - You should have received a copy of the GNU Lesser General Public
> - License along with this library; if not, see <http://www.gnu.org/licenses/>.
> -*/
> -
> -#ifndef SPICY_CONNECT_H
> -#define SPICY_CONNECT_H
> -
> -#include "spice-widget.h"
> -
> -gboolean spicy_connect_dialog(SpiceSession *session);
> -
> -#endif
> diff --git a/tools/spicy.c b/tools/spicy.c
> index 40cd6b3..5e6a620 100644
> --- a/tools/spicy.c
> +++ b/tools/spicy.c
> @@ -36,7 +36,6 @@
> #include "spice-option.h"
> #include "usb-device-widget.h"
>
> -#include "spicy-connect.h"
> #if HAVE_GSTAUDIO || HAVE_GSTVIDEO
> #include <gst/gst.h>
> #endif
> @@ -67,7 +66,6 @@ struct _SpiceWindow {
> gint monitor_id;
> GtkWidget *toplevel, *spice;
> GtkWidget *menubar, *toolbar;
> - GtkWidget *ritem, *rmenu;
> GtkWidget *statusbar, *status, *st[STATE_MAX];
> GtkActionGroup *ag;
> GtkUIManager *ui;
> @@ -252,14 +250,6 @@ static void update_edit_menu(struct spice_connection *conn)
> }
> }
>
> -static void menu_cb_connect(GtkAction *action, void *data)
> -{
> - struct spice_connection *conn;
> -
> - conn = connection_new();
> - connection_connect(conn);
> -}
> -
> static void menu_cb_close(GtkAction *action, void *data)
> {
> SpiceWindow *win = data;
> @@ -692,9 +682,6 @@ static const GtkActionEntry entries[] = {
> {
> .name = "FileMenu",
> .label = "_File",
> - },{
> - .name = "FileRecentMenu",
> - .label = "_Recent",
> },{
> .name = "EditMenu",
> .label = "_Edit",
> @@ -717,13 +704,6 @@ static const GtkActionEntry entries[] = {
> .name = "HelpMenu",
> .label = "_Help",
> },{
> -
> - /* File menu */
> - .name = "Connect",
> - .stock_id = "_Connect",
> - .label = "_Connect ...",
> - .callback = G_CALLBACK(menu_cb_connect),
> - },{
> .name = "Close",
> .stock_id = "window-close",
> .label = "_Close",
> @@ -908,9 +888,6 @@ static char ui_xml[] =
> "<ui>\n"
> " <menubar action='MainMenu'>\n"
> " <menu action='FileMenu'>\n"
> -" <menuitem action='Connect'/>\n"
> -" <menu action='FileRecentMenu'/>\n"
> -" <separator/>\n"
> " <menuitem action='Close'/>\n"
> " </menu>\n"
> " <menu action='EditMenu'>\n"
> @@ -988,23 +965,6 @@ static gboolean is_gtk_session_property(const gchar *property)
> return FALSE;
> }
>
> -static void recent_item_activated_cb(GtkRecentChooser *chooser, gpointer data)
> -{
> - GtkRecentInfo *info;
> - struct spice_connection *conn;
> - const char *uri;
> -
> - info = gtk_recent_chooser_get_current_item(chooser);
> -
> - uri = gtk_recent_info_get_uri(info);
> - g_return_if_fail(uri != NULL);
> -
> - conn = connection_new();
> - g_object_set(conn->session, "uri", uri, NULL);
> - gtk_recent_info_unref(info);
> - connection_connect(conn);
> -}
> -
> static void compression_cb(GtkRadioAction *action G_GNUC_UNUSED,
> GtkRadioAction *current,
> gpointer user_data)
> @@ -1098,22 +1058,6 @@ static SpiceWindow *create_spice_window(spice_connection *conn, SpiceChannel *ch
> win->menubar = gtk_ui_manager_get_widget(win->ui, "/MainMenu");
> win->toolbar = gtk_ui_manager_get_widget(win->ui, "/ToolBar");
>
> - /* recent menu */
> - win->ritem = gtk_ui_manager_get_widget
> - (win->ui, "/MainMenu/FileMenu/FileRecentMenu");
> -
> - GtkRecentFilter *rfilter;
> -
> - win->rmenu = gtk_recent_chooser_menu_new();
> - gtk_recent_chooser_set_show_icons(GTK_RECENT_CHOOSER(win->rmenu), FALSE);
> - rfilter = gtk_recent_filter_new();
> - gtk_recent_filter_add_mime_type(rfilter, "application/x-spice");
> - gtk_recent_chooser_add_filter(GTK_RECENT_CHOOSER(win->rmenu), rfilter);
> - gtk_recent_chooser_set_local_only(GTK_RECENT_CHOOSER(win->rmenu), FALSE);
> - gtk_menu_item_set_submenu(GTK_MENU_ITEM(win->ritem), win->rmenu);
> - g_signal_connect(win->rmenu, "item-activated",
> - G_CALLBACK(recent_item_activated_cb), win);
> -
> /* spice display */
> win->spice = GTK_WIDGET(spice_display_new_with_monitor(conn->session, id, monitor_id));
> seq = spice_grab_sequence_new_from_string("Shift_L+F12");
> @@ -1238,35 +1182,6 @@ static void destroy_spice_window(SpiceWindow *win)
> g_object_unref(win);
> }
>
> -/* ------------------------------------------------------------------ */
> -
> -static void recent_add(SpiceSession *session)
> -{
> - GtkRecentManager *recent;
> - GtkRecentData meta = {
> - .mime_type = (char*)"application/x-spice",
> - .app_name = (char*)"spicy",
> - .app_exec = (char*)"spicy --uri=%u",
> - };
> - char *uri;
> -
> - g_object_get(session, "uri", &uri, NULL);
> - SPICE_DEBUG("%s: %s", __FUNCTION__, uri);
> -
> - recent = gtk_recent_manager_get_default();
> - if (g_str_has_prefix(uri, "spice://"))
> - meta.display_name = uri + 8;
> - else if (g_str_has_prefix(uri, "spice+unix://"))
> - meta.display_name = uri + 13;
> - else
> - g_return_if_reached();
> -
> - if (!gtk_recent_manager_add_full(recent, uri, &meta))
> - g_warning("Recent item couldn't be added successfully");
> -
> - g_free(uri);
> -}
> -
> static void main_channel_event(SpiceChannel *channel, SpiceChannelEvent event,
> gpointer data)
> {
> @@ -1278,7 +1193,6 @@ static void main_channel_event(SpiceChannel *channel, SpiceChannelEvent event,
> switch (event) {
> case SPICE_CHANNEL_OPENED:
> g_message("main channel: opened");
> - recent_add(conn->session);
> break;
> case SPICE_CHANNEL_SWITCHING:
> g_message("main channel: switching host");
> @@ -1300,11 +1214,7 @@ static void main_channel_event(SpiceChannel *channel, SpiceChannelEvent event,
> g_message("channel error: %s", error->message);
> }
>
> - if (spicy_connect_dialog(conn->session)) {
> - connection_connect(conn);
> - } else {
> - connection_disconnect(conn);
> - }
> + connection_disconnect(conn);
> break;
> case SPICE_CHANNEL_ERROR_AUTH:
> g_warning("main channel: auth failure (wrong password?)");
> @@ -1980,6 +1890,7 @@ int main(int argc, char *argv[])
> spice_connection *conn;
> gchar *conf_file, *conf;
> char *host = NULL, *port = NULL, *tls_port = NULL, *unix_path = NULL;
> + int ret = 1;
>
> keyfile = g_key_file_new();
>
> @@ -2013,13 +1924,13 @@ int main(int argc, char *argv[])
> #endif
> if (!g_option_context_parse (context, &argc, &argv, &error)) {
> g_print("option parsing failed: %s\n", error->message);
> - exit(1);
> + goto end;
> }
> - g_option_context_free(context);
>
> if (version) {
> g_print("spicy " PACKAGE_VERSION "\n");
> - exit(0);
> + ret = 0;
> + goto end;
> }
>
> mainloop = g_main_loop_new(NULL, false);
> @@ -2034,12 +1945,12 @@ int main(int argc, char *argv[])
> "port", &port,
> "tls-port", &tls_port,
> NULL);
> - /* If user doesn't provide hostname and port, show the dialog window
> - instead of connecting to server automatically */
> + /* If user doesn't provide hostname and port, exit */
> if ((host == NULL || (port == NULL && tls_port == NULL)) && unix_path == NULL) {
> - if (!spicy_connect_dialog(conn->session)) {
> - exit(0);
> - }
> + char *help = g_option_context_get_help(context, TRUE, NULL);
> + g_print("%s", help);
> + g_free(help);
> + goto end;
> }
> g_free(host);
> g_free(port);
> @@ -2065,5 +1976,9 @@ int main(int argc, char *argv[])
> g_free(spicy_title);
>
> setup_terminal(true);
> - return 0;
> + ret = 0;
> +
> +end:
> + g_option_context_free(context);
> + return ret;
> }
> --
> 2.14.0.1.geff633fa0
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20170810/2a961d5d/attachment.sig>
More information about the Spice-devel
mailing list