mirror of
https://gitlab.com/virt-viewer/virt-viewer.git
synced 2025-03-12 20:58:17 +03:00
Add a DISABLED display hint
This flag will help to track whether the display has been removed/closed and whether it really has a valid display. Ready in contrast, is used to "hide" temporarily the display (when starting or redrawing the display, to avoid artifacts)
This commit is contained in:
parent
0897382b45
commit
2a085766f1
@ -622,15 +622,17 @@ display_show_hint(VirtViewerDisplay *display,
|
||||
"show-hint", &hint,
|
||||
NULL);
|
||||
|
||||
if (hint == 0) {
|
||||
if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED) {
|
||||
virt_viewer_window_hide(win);
|
||||
} else if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_READY) {
|
||||
virt_viewer_notebook_show_display(nb);
|
||||
virt_viewer_window_show(win);
|
||||
gtk_window_present(virt_viewer_window_get_window(win));
|
||||
} else {
|
||||
if (win != self->priv->main_window &&
|
||||
g_getenv("VIRT_VIEWER_HIDE"))
|
||||
virt_viewer_window_hide(win);
|
||||
virt_viewer_notebook_show_status(nb, _("Waiting for display %d..."), nth + 1);
|
||||
} else {
|
||||
virt_viewer_notebook_show_display(nb);
|
||||
virt_viewer_window_show(win);
|
||||
gtk_window_present(virt_viewer_window_get_window(win));
|
||||
}
|
||||
|
||||
g_object_unref(self);
|
||||
|
@ -74,10 +74,27 @@ virt_viewer_display_spice_class_init(VirtViewerDisplaySpiceClass *klass)
|
||||
g_type_class_add_private(klass, sizeof(VirtViewerDisplaySpicePrivate));
|
||||
}
|
||||
|
||||
static void
|
||||
show_hint_changed(VirtViewerDisplay *self)
|
||||
{
|
||||
SpiceMainChannel *main_channel = virt_viewer_session_spice_get_main_channel(
|
||||
VIRT_VIEWER_SESSION_SPICE(virt_viewer_display_get_session(self)));
|
||||
guint enabled = TRUE;
|
||||
guint nth;
|
||||
|
||||
g_object_get(self, "nth-display", &nth, NULL);
|
||||
if (virt_viewer_display_get_show_hint(self) & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED)
|
||||
enabled = FALSE;
|
||||
|
||||
spice_main_set_display_enabled(main_channel, nth, enabled);
|
||||
}
|
||||
|
||||
static void
|
||||
virt_viewer_display_spice_init(VirtViewerDisplaySpice *self G_GNUC_UNUSED)
|
||||
{
|
||||
self->priv = VIRT_VIEWER_DISPLAY_SPICE_GET_PRIVATE(self);
|
||||
|
||||
g_signal_connect(self, "notify::show-hint", G_CALLBACK(show_hint_changed), NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -166,6 +183,9 @@ virt_viewer_display_spice_size_allocate(VirtViewerDisplaySpice *self,
|
||||
if (virt_viewer_display_get_auto_resize(VIRT_VIEWER_DISPLAY(self)) == FALSE)
|
||||
return;
|
||||
|
||||
if (virt_viewer_display_get_show_hint(VIRT_VIEWER_DISPLAY(self)) & VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED)
|
||||
return;
|
||||
|
||||
if (virt_viewer_display_get_zoom(VIRT_VIEWER_DISPLAY(self))) {
|
||||
zoom = virt_viewer_display_get_zoom_level(VIRT_VIEWER_DISPLAY(self));
|
||||
|
||||
|
@ -553,6 +553,21 @@ void virt_viewer_display_set_show_hint(VirtViewerDisplay *self, guint hint)
|
||||
g_object_notify(G_OBJECT(self), "show-hint");
|
||||
}
|
||||
|
||||
void virt_viewer_display_set_enabled(VirtViewerDisplay *self, gboolean enabled)
|
||||
{
|
||||
guint hint;
|
||||
|
||||
g_return_if_fail(VIRT_VIEWER_IS_DISPLAY(self));
|
||||
|
||||
hint = virt_viewer_display_get_show_hint(self);
|
||||
if (enabled)
|
||||
hint &= ~VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED;
|
||||
else
|
||||
hint |= VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED;
|
||||
|
||||
virt_viewer_display_set_show_hint(self, hint);
|
||||
}
|
||||
|
||||
VirtViewerSession* virt_viewer_display_get_session(VirtViewerDisplay *self)
|
||||
{
|
||||
g_return_val_if_fail(VIRT_VIEWER_IS_DISPLAY(self), NULL);
|
||||
|
@ -57,6 +57,7 @@ typedef struct _VirtViewerDisplayChannel VirtViewerDisplayChannel;
|
||||
|
||||
typedef enum {
|
||||
VIRT_VIEWER_DISPLAY_SHOW_HINT_READY = 1 << 0,
|
||||
VIRT_VIEWER_DISPLAY_SHOW_HINT_DISABLED = 1 << 1,
|
||||
} VirtViewerDisplayShowHintFlags;
|
||||
|
||||
/* perhaps this become an interface, and be pushed in gtkvnc and spice? */
|
||||
@ -116,6 +117,7 @@ gboolean virt_viewer_display_get_auto_resize(VirtViewerDisplay *display);
|
||||
void virt_viewer_display_release_cursor(VirtViewerDisplay *display);
|
||||
|
||||
void virt_viewer_display_close(VirtViewerDisplay *display);
|
||||
void virt_viewer_display_set_enabled(VirtViewerDisplay *display, gboolean enabled);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
@ -1062,6 +1062,9 @@ virt_viewer_window_show(VirtViewerWindow *self)
|
||||
{
|
||||
gtk_widget_show(self->priv->window);
|
||||
|
||||
if (self->priv->display)
|
||||
virt_viewer_display_set_enabled(self->priv->display, TRUE);
|
||||
|
||||
if (self->priv->desktop_resize_pending) {
|
||||
virt_viewer_window_resize(self);
|
||||
self->priv->desktop_resize_pending = FALSE;
|
||||
@ -1072,6 +1075,15 @@ void
|
||||
virt_viewer_window_hide(VirtViewerWindow *self)
|
||||
{
|
||||
gtk_widget_hide(self->priv->window);
|
||||
|
||||
if (self->priv->display) {
|
||||
VirtViewerDisplay *display = self->priv->display;
|
||||
guint nth;
|
||||
|
||||
g_object_get(display, "nth-display", &nth, NULL);
|
||||
if (nth != 0)
|
||||
virt_viewer_display_set_enabled(display, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
x
Reference in New Issue
Block a user