mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/virt-viewer
synced 2026-01-09 22:25:30 +00:00
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:
parent
8006302fef
commit
85d5658b63
@ -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);
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user