113 lines
4.2 KiB
Diff
113 lines
4.2 KiB
Diff
--- a/src/virt-viewer-app.c
|
|
+++ b/src/virt-viewer-app.c
|
|
@@ -134,6 +134,7 @@
|
|
gboolean authretry;
|
|
gboolean started;
|
|
gboolean fullscreen;
|
|
+ gboolean hide_toolbar;
|
|
gboolean attach;
|
|
gboolean shared;
|
|
gboolean quitting;
|
|
@@ -951,6 +952,13 @@
|
|
{
|
|
gchar *subtitle = NULL;
|
|
const gchar *title = virt_viewer_app_get_title(app);
|
|
+
|
|
+ /* Hidden fullscreen windows use the requested title as stable identity. */
|
|
+ if (title != NULL && virt_viewer_app_get_hide_toolbar(app) &&
|
|
+ virt_viewer_app_get_fullscreen(app)) {
|
|
+ g_object_set(window, "subtitle", title, NULL);
|
|
+ return;
|
|
+ }
|
|
|
|
if (title != NULL) {
|
|
VirtViewerDisplay *display = virt_viewer_window_get_display(window);
|
|
@@ -2134,6 +2142,7 @@
|
|
static gboolean opt_verbose = FALSE;
|
|
static gboolean opt_debug = FALSE;
|
|
static gboolean opt_fullscreen = FALSE;
|
|
+static gboolean opt_hide_toolbar = FALSE;
|
|
static gboolean opt_kiosk = FALSE;
|
|
static gboolean opt_kiosk_quit = FALSE;
|
|
static gchar *opt_cursor = NULL;
|
|
@@ -2437,6 +2446,7 @@
|
|
{ "smartcard-remove", "app.smartcard-remove", {"<Shift>F9", NULL, NULL} },
|
|
{ "secure-attention", "win.secure-attention", {"<Ctrl><Alt>End", NULL, NULL} },
|
|
{ "usb-device-reset", "win.usb-device-reset", {"<Ctrl><Shift>r", NULL, NULL} },
|
|
+ { "usb-device-select", "win.usb-device-select", {NULL, NULL, NULL} },
|
|
};
|
|
|
|
static gchar **hotkey_names;
|
|
@@ -2484,6 +2494,7 @@
|
|
priv->resource = virt_viewer_get_resource();
|
|
|
|
virt_viewer_app_set_debug(opt_debug);
|
|
+ priv->hide_toolbar = opt_hide_toolbar;
|
|
virt_viewer_app_set_fullscreen(self, opt_fullscreen);
|
|
|
|
virt_viewer_app_set_keymap(self, opt_keymap);
|
|
@@ -3098,6 +3109,14 @@
|
|
}
|
|
|
|
gboolean
|
|
+virt_viewer_app_get_hide_toolbar(VirtViewerApp *self)
|
|
+{
|
|
+ VirtViewerAppPrivate *priv = virt_viewer_app_get_instance_private(self);
|
|
+
|
|
+ return priv->hide_toolbar;
|
|
+}
|
|
+
|
|
+gboolean
|
|
virt_viewer_app_get_fullscreen(VirtViewerApp *self)
|
|
{
|
|
g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), FALSE);
|
|
@@ -3557,6 +3576,8 @@
|
|
N_("Zoom level of window, in percentage"), "ZOOM" },
|
|
{ "full-screen", 'f', 0, G_OPTION_ARG_NONE, &opt_fullscreen,
|
|
N_("Open in full screen mode (adjusts guest resolution to fit the client)"), NULL },
|
|
+ { "hide-toolbar", '\0', 0, G_OPTION_ARG_NONE, &opt_hide_toolbar,
|
|
+ N_("Hide the toolbar in full screen mode"), NULL },
|
|
{ "hotkeys", 'H', 0, G_OPTION_ARG_STRING, &opt_hotkeys,
|
|
N_("Customise hotkeys"), NULL },
|
|
{ "auto-resize", '\0', 0, G_OPTION_ARG_STRING, &opt_resize,
|
|
--- a/src/virt-viewer-app.h
|
|
+++ b/src/virt-viewer-app.h
|
|
@@ -100,6 +100,7 @@
|
|
GList* virt_viewer_app_get_windows(VirtViewerApp *self);
|
|
VirtViewerSession* virt_viewer_app_get_session(VirtViewerApp *self);
|
|
gboolean virt_viewer_app_get_fullscreen(VirtViewerApp *app);
|
|
+gboolean virt_viewer_app_get_hide_toolbar(VirtViewerApp *app);
|
|
void virt_viewer_app_clear_hotkeys(VirtViewerApp *app);
|
|
GList* virt_viewer_app_get_initial_displays(VirtViewerApp* self);
|
|
gint virt_viewer_app_get_initial_monitor_for_display(VirtViewerApp* self, gint display);
|
|
--- a/src/virt-viewer-window.c
|
|
+++ b/src/virt-viewer-window.c
|
|
@@ -740,9 +740,10 @@
|
|
return;
|
|
}
|
|
|
|
- if (!self->kiosk) {
|
|
- virt_viewer_timed_revealer_force_reveal(self->revealer, TRUE);
|
|
- }
|
|
+ gboolean hide_toolbar = virt_viewer_app_get_hide_toolbar(self->app);
|
|
+ gtk_widget_set_visible(GTK_WIDGET(self->revealer), !hide_toolbar);
|
|
+ virt_viewer_timed_revealer_force_reveal(self->revealer,
|
|
+ !self->kiosk && !hide_toolbar);
|
|
|
|
if (self->display) {
|
|
virt_viewer_display_set_monitor(self->display, monitor);
|
|
@@ -1354,6 +1355,13 @@
|
|
title = g_strdup(g_get_application_name());
|
|
}
|
|
|
|
+ /* Keep exact workspace identity across pointer/keyboard grab changes. */
|
|
+ if (self->app && virt_viewer_app_get_hide_toolbar(self->app) &&
|
|
+ virt_viewer_app_get_fullscreen(self->app) && self->subtitle) {
|
|
+ g_free(title);
|
|
+ title = g_strdup(self->subtitle);
|
|
+ }
|
|
+
|
|
gtk_window_set_title(GTK_WINDOW(self->window), title);
|
|
if (self->subtitle) {
|
|
gtk_header_bar_set_title(GTK_HEADER_BAR(header), self->subtitle);
|