Hi, On Wed, Sep 26, 2018 at 07:26:35PM +0400, [email protected] wrote: > From: Marc-André Lureau <[email protected]> > > virt_viewer_app_display_added() now handles VTE displays. They should > be skipped for monitor configuration, and they don't emit "show-hint". > > (a VTE display has a monitor nth == -1, which is now a valid value) > > The associated window will be hidden when virt-viewer is started. > > Signed-off-by: Marc-André Lureau <[email protected]> > --- > src/virt-viewer-app.c | 69 ++++++++++++++++++++++++++++++++----------- > 1 file changed, 52 insertions(+), 17 deletions(-) > > diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c > index 568af47..376fe98 100644 > --- a/src/virt-viewer-app.c > +++ b/src/virt-viewer-app.c > @@ -112,7 +112,7 @@ struct _VirtViewerAppPrivate { > VirtViewerWindow *main_window; > GtkWidget *main_notebook; > GList *windows; > - GHashTable *displays; > + GHashTable *displays; /* !vte */ > GHashTable *initial_display_map; > gchar *clipboard; > GtkWidget *preferences; > @@ -822,9 +822,11 @@ virt_viewer_app_window_new(VirtViewerApp *self, gint nth) > VirtViewerWindow* window; > GtkWindow *w; > > - window = virt_viewer_app_get_nth_window(self, nth); > - if (window) > - return window; > + if (nth >= 0) { > + window = virt_viewer_app_get_nth_window(self, nth); > + if (window) > + return window; > + }
I think it is better to patch virt_viewer_app_get_nth_window() to
return NULL if nth < 0 ...
> window = g_object_new(VIRT_VIEWER_TYPE_WINDOW, "app", self, NULL);
> virt_viewer_window_set_kiosk(window, self->priv->kiosk);
> @@ -848,11 +850,27 @@ virt_viewer_app_window_new(VirtViewerApp *self, gint
> nth)
> return window;
> }
>
> +static void
> +window_weak_notify(gpointer data, GObject *where_was G_GNUC_UNUSED)
> +{
> + VirtViewerDisplay *display = VIRT_VIEWER_DISPLAY(data);
> +
> + g_object_set_data(G_OBJECT(display), "virt-viewer-window", NULL);
> +}
> +
> static VirtViewerWindow *
> ensure_window_for_display(VirtViewerApp *self, VirtViewerDisplay *display)
> {
> - gint nth = virt_viewer_display_get_nth(display);
> - VirtViewerWindow *win = virt_viewer_app_get_nth_window(self, nth);
> + VirtViewerWindow *win = NULL;
> + gint nth = -1;
... and nth should be -1 on VTE and win NULL here, so you just
need to add the if below.
> + if (VIRT_VIEWER_IS_DISPLAY_VTE(display)) {
> + win = g_object_get_data(G_OBJECT(display), "virt-viewer-window");
> + } else {
> + nth = virt_viewer_display_get_nth(display);
> + win = virt_viewer_app_get_nth_window(self, nth);
> + }
> +
> if (win == NULL) {
> GList *l = self->priv->windows;
>
> @@ -874,12 +892,26 @@ ensure_window_for_display(VirtViewerApp *self,
> VirtViewerDisplay *display)
> }
>
> virt_viewer_window_set_display(win, display);
> + if (VIRT_VIEWER_IS_DISPLAY_VTE(display)) {
> + g_object_set_data(G_OBJECT(display), "virt-viewer-window", win);
> + g_object_weak_ref(G_OBJECT(win), window_weak_notify, display);
> + }
> }
> virt_viewer_app_set_window_subtitle(self, win, nth);
>
> return win;
> }
>
> +static VirtViewerWindow *
> +display_show_get_window(VirtViewerApp *self, VirtViewerDisplay *display)
> +{
From the name, it seems like a simple getter but it does a bit
more than that. Perhaps a reference to notebook would improve
eg: display_show_notebook_get_window() but I'm not famous for my
name picking ability.
> + VirtViewerWindow *win = ensure_window_for_display(self, display);
> + VirtViewerNotebook *nb = virt_viewer_window_get_notebook(win);
> +
> + virt_viewer_notebook_show_display(nb);
> + return win;
> +}
> +
> static void
> display_show_hint(VirtViewerDisplay *display,
> GParamSpec *pspec G_GNUC_UNUSED,
> @@ -907,9 +939,7 @@ display_show_hint(VirtViewerDisplay *display,
> virt_viewer_window_hide(win);
> } else {
> if (hint & VIRT_VIEWER_DISPLAY_SHOW_HINT_READY) {
> - win = ensure_window_for_display(self, display);
> - nb = virt_viewer_window_get_notebook(win);
> - virt_viewer_notebook_show_display(nb);
> + win = display_show_get_window(self, display);
> virt_viewer_window_show(win);
> } else {
> if (!self->priv->kiosk && win) {
> @@ -926,19 +956,24 @@ virt_viewer_app_display_added(VirtViewerSession
> *session G_GNUC_UNUSED,
> VirtViewerDisplay *display,
> VirtViewerApp *self)
> {
> - gint nth;
> + if (VIRT_VIEWER_IS_DISPLAY_VTE(display)) {
> + VirtViewerWindow *win = display_show_get_window(self, display);
> + virt_viewer_window_hide(win);
> + virt_viewer_app_update_menu_displays(self);
> + } else {
> + gint nth;
>
> - g_object_get(display, "nth-display", &nth, NULL);
> + g_object_get(display, "nth-display", &nth, NULL);
>
> - g_debug("Insert display %d %p", nth, display);
I'd move the if above below this debug, so we have a 'insert
display -1 %p' log and add a return in the end of the if. Less
changes and more log but feel free to keep as is.
> - g_hash_table_insert(self->priv->displays, GINT_TO_POINTER(nth),
> g_object_ref(display));
> + g_debug("Insert display %d %p", nth, display);
> + g_hash_table_insert(self->priv->displays, GINT_TO_POINTER(nth),
> g_object_ref(display));
>
> - g_signal_connect(display, "notify::show-hint",
> - G_CALLBACK(display_show_hint), NULL);
> - g_object_notify(G_OBJECT(display), "show-hint"); /* call
> display_show_hint */
> + g_signal_connect(display, "notify::show-hint",
> + G_CALLBACK(display_show_hint), NULL);
> + g_object_notify(G_OBJECT(display), "show-hint"); /* call
> display_show_hint */
> + }
> }
>
> -
> static void virt_viewer_app_remove_nth_window(VirtViewerApp *self,
> gint nth)
> {
Just nitpicks,
Acked-by: Victor Toso <[email protected]>
> --
> 2.19.0.271.gfe8321ec05
>
signature.asc
Description: PGP signature
_______________________________________________ virt-tools-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/virt-tools-list
