Hi, On Wed, Aug 09, 2017 at 10:49:51PM +0200, marcandre.lureau@xxxxxxxxxx wrote: > From: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > > 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@xxxxxxxxxx> 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@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel