Add VirtViewerSession::session-display-updated

Rebuild menu when agent is connected. Only when the agent is running
may a display be enabled/disabled.
This commit is contained in:
Marc-André Lureau 2012-07-17 19:26:46 +02:00
parent 8006302fef
commit 85d5658b63
4 changed files with 34 additions and 4 deletions

View File

@ -685,6 +685,13 @@ virt_viewer_app_display_removed(VirtViewerSession *session G_GNUC_UNUSED,
virt_viewer_app_remove_nth_window(self, nth);
}
static void
virt_viewer_app_display_updated(VirtViewerSession *session G_GNUC_UNUSED,
VirtViewerApp *self)
{
virt_viewer_app_update_menu_displays(self);
}
int
virt_viewer_app_create_session(VirtViewerApp *self, const gchar *type)
{
@ -735,6 +742,8 @@ virt_viewer_app_create_session(VirtViewerApp *self, const gchar *type)
G_CALLBACK(virt_viewer_app_display_added), self);
g_signal_connect(priv->session, "session-display-removed",
G_CALLBACK(virt_viewer_app_display_removed), self);
g_signal_connect(priv->session, "session-display-updated",
G_CALLBACK(virt_viewer_app_display_updated), self);
g_signal_connect(priv->session, "session-cut-text",
G_CALLBACK(virt_viewer_app_server_cut_text), self);

View File

@ -406,12 +406,21 @@ virt_viewer_session_spice_usb_device_selection(VirtViewerSession *session,
}
static void
agent_connected_changed(SpiceChannel *cmain,
agent_connected_changed(SpiceChannel *cmain G_GNUC_UNUSED,
GParamSpec *pspec G_GNUC_UNUSED,
VirtViewerSessionSpice *self)
{
// this will force refresh of application menu
g_signal_emit_by_name(self, "session-display-updated");
}
static void
agent_connected_fullscreen_auto_conf(SpiceChannel *cmain,
GParamSpec *pspec G_GNUC_UNUSED,
VirtViewerSessionSpice *self)
{
if (virt_viewer_session_spice_fullscreen_auto_conf(self))
g_signal_handlers_disconnect_by_func(cmain, agent_connected_changed, self);
g_signal_handlers_disconnect_by_func(cmain, agent_connected_fullscreen_auto_conf, self);
}
static void
@ -512,8 +521,9 @@ virt_viewer_session_spice_channel_new(SpiceSession *s,
G_CALLBACK(virt_viewer_session_spice_main_channel_event), self);
self->priv->main_channel = SPICE_MAIN_CHANNEL(channel);
g_signal_connect(channel, "notify::agent-connected", G_CALLBACK(agent_connected_changed), self);
agent_connected_changed(channel, NULL, self);
g_signal_connect(channel, "notify::agent-connected", G_CALLBACK(agent_connected_changed), self);
g_signal_connect(channel, "notify::agent-connected", G_CALLBACK(agent_connected_fullscreen_auto_conf), self);
agent_connected_fullscreen_auto_conf(channel, NULL, self);
g_signal_emit_by_name(session, "session-connected");
}

View File

@ -233,6 +233,16 @@ virt_viewer_session_class_init(VirtViewerSessionClass *class)
1,
VIRT_VIEWER_TYPE_DISPLAY);
g_signal_new("session-display-updated",
G_OBJECT_CLASS_TYPE(object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_HOOKS,
G_STRUCT_OFFSET(VirtViewerSessionClass, session_display_updated),
NULL,
NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
g_signal_new("session-cut-text",
G_OBJECT_CLASS_TYPE(object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_HOOKS,

View File

@ -88,6 +88,7 @@ struct _VirtViewerSessionClass {
VirtViewerDisplay *display);
void (*session_display_removed)(VirtViewerSession *session,
VirtViewerDisplay *display);
void (*session_display_updated)(VirtViewerSession *session);
void (*session_cut_text)(VirtViewerSession *session, const gchar *str);
void (*session_bell)(VirtViewerSession *session);