[Spice-devel] [spice-gtk PATCH] spicy: Make "CopyToGuest" and "PasteFromGuest" insensitive if spice agent is not connected

Dunrong Huang riegamaths at gmail.com
Mon Sep 24 01:19:25 PDT 2012


Hi, thanks for your reply.

2012/9/24 Hans de Goede <hdegoede at redhat.com>:
> Hi,
>
> Thanks, looks good, so I've added it to git master. Notice though that
> spicy is merely a little spice-gtk test-client, and our prefered
> spice-client
> is remote-viewer (which is part of virt-viewer).
I usually use spicy to test && hack QEMU, virt-viewer is a bit more
big to me, :-),
but I will try it in future work.

Can remote-viewer connect to QEMU which start manually rather than by libvirt?
>
> Regards,
>
> Hans
>
>
>
> On 09/24/2012 09:27 AM, Dunrong Huang wrote:
>>
>> "CopyToGuest" and "CopyToGuest" can not work if spice agent is not
>> connected, e.g. guest does not install or enable spice agent, or spice
>> server does not create vdagent channel.
>>
>> In these cases, make those item insensitive.
>>
>> Signed-off-by: Dunrong Huang <riegamaths at gmail.com>
>> ---
>>   gtk/spicy.c | 38 ++++++++++++++++++++++++++++++++++++++
>>   1 个文件被修改,插入 38 行(+)
>>
>> diff --git a/gtk/spicy.c b/gtk/spicy.c
>> index 142fc03..6390b79 100644
>> --- a/gtk/spicy.c
>> +++ b/gtk/spicy.c
>> @@ -329,6 +329,41 @@ static void update_status(struct spice_connection
>> *conn)
>>       }
>>   }
>>
>> +static const char *spice_edit_properties[] = {
>> +    "CopyToGuest",
>> +    "PasteFromGuest",
>> +};
>> +
>> +static void update_edit_menu_window(SpiceWindow *win)
>> +{
>> +    int i;
>> +    GtkAction *toggle;
>> +
>> +    if (win == NULL) {
>> +        return;
>> +    }
>> +
>> +    /* Make "CopyToGuest" and "PasteFromGuest" insensitive if spice
>> +     * agent is not connected */
>> +    for (i = 0; i < G_N_ELEMENTS(spice_edit_properties); i++) {
>> +        toggle = gtk_action_group_get_action(win->ag,
>> spice_edit_properties[i]);
>> +        if (toggle) {
>> +            gtk_action_set_sensitive(toggle, win->conn->agent_connected);
>> +        }
>> +    }
>> +}
>> +
>> +static void update_edit_menu(struct spice_connection *conn)
>> +{
>> +    int i;
>> +
>> +    for (i = 0; i < SPICE_N_ELEMENTS(conn->wins); i++) {
>> +        if (conn->wins[i]) {
>> +            update_edit_menu_window(conn->wins[i]);
>> +        }
>> +    }
>> +}
>> +
>>   static void menu_cb_connect(GtkAction *action, void *data)
>>   {
>>       struct spice_connection *conn;
>> @@ -1305,6 +1340,8 @@ static SpiceWindow
>> *create_spice_window(spice_connection *conn, SpiceChannel *ch
>>                                         win, 0);
>>       }
>>
>> +    update_edit_menu_window(win);
>> +
>>       toggle = gtk_action_group_get_action(win->ag, "Toolbar");
>>       state = gtk_widget_get_visible(win->toolbar);
>>       gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(toggle), state);
>> @@ -1462,6 +1499,7 @@ static void main_agent_update(SpiceChannel *channel,
>> gpointer data)
>>       g_object_get(channel, "agent-connected", &conn->agent_connected,
>> NULL);
>>       conn->agent_state = conn->agent_connected ? _("yes") : _("no");
>>       update_status(conn);
>> +    update_edit_menu(conn);
>>   }
>>
>>   static void inputs_modifiers(SpiceChannel *channel, gpointer data)
>>
>



-- 
Best Regards,

Dunrong Huang


More information about the Spice-devel mailing list