Commit Graph

981 Commits

Author SHA1 Message Date
Marc-André Lureau
be5ff83dfc spice: add unix-path in .vv file support
This will allow to connect to a Spice server using a unix socket path,
for example:

[virt-viewer]
type=spice
unix-path=/var/run/user/1000/qemu/test/spice.sock

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Christophe Fergeau <cfergeau@redhat.com>
2018-12-21 16:53:35 +04:00
Marc-André Lureau
f06a882b11 display: allow display without associated monitor number
The VTE display will have monitor id -1.

Eventually, having a base "console" class without monitor id could
avoid this allowance.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:37 +04:00
Marc-André Lureau
fd25645c11 app: append VTE consoles to display submenu
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:34 +04:00
Marc-André Lureau
f6448ae6e6 app: set subtitle using VTE name
Currently, subtitle indicate the monitor number, ex: "Fedora (1)".

Custom subtitle use %d to place the monitor number.

Let's make this placeholder more generic to place the name of the
console, ex: "Fedora (Serial)".

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:31 +04:00
Marc-André Lureau
ad64d0a3ac session: skip monitor changes if there is no sized monitors
spice-gtk discards configurations without any sized monitors.

Also shuts extra warnings when shifting the monitors.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:29 +04:00
Marc-André Lureau
1ad52ea8e9 display: ignore display that do not have toplevel window
virt_viewer_display_get_preferred_monitor_geometry() may be called
during application initialization (when the VTE console is being
shown, virt_viewer_session_update_displays_geometry() is called when
the visibility menu item is toggled). But the other displays may not
yet be associated with a window, ignore them.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:26 +04:00
Marc-André Lureau
f23548aa33 window/zoom: deal with VTE display differently
VTE display doesn't use the desktop / window aspect ratio, let's just
call directly the functions handling zoom.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:24 +04:00
Marc-André Lureau
c233917495 Add a VirtViewerDisplayVte display kind
This is not a graphical display, so the application will have to deal
with it with care.

You may argue that we need a large refactoring to introduce a more
generic "console" object, that could be either graphical or textual.
For now, this does work well enough for me.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:22 +04:00
Marc-André Lureau
8cdc91227d window: set sensitivity based on display capability
A following patch is adding a new display (VTE) that won't have the
send_key() or screenshot() callbacks. Activating those menu/actions
would lead to nothing or a crash. I chose to keep the UI consistent
for all display, but disable the menu sensitivity.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:16 +04:00
Marc-André Lureau
ffd1f05c08 window: do not reset sensitivity of menu-send in rebuild
The sensitivy of "menu-send" is getting more complex in the following
patch. Let's have the logic in a single place,
virt_viewer_window_set_menus_sensitive().

rebuild_combo_menu() is called in 2 cases:

1. notify::enable-accel: there is no need to update the sensitivy of
   "menu-send"

2. on construction: default to false since display == NULL. It will be
   later updated when virt_viewer_window_set_menus_sensitive(). The
   default sensitivity is covered by previous .ui patch change.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-21 15:14:12 +04:00
Christophe Fergeau
fe7aad2002 ovirt: Fix initial connection
After commit df42f78d46 "remote-viewer: factor our
remote_viewer_initial_connect()", the initial connection code only gets
run in the !ovirt case. When ovirt is in use, the initial connection
never happens, meaning all we get when using ovirt:// is a blank
virt-viewer window.

This commit fixes that by moving creation of the ovirt session to
remote_viewer_initial_connect, and unconditionnally calling the
remote_viewer_initial_connect rather than only doing it in the !ovirt
case.

https://bugzilla.redhat.com/show_bug.cgi?id=1655537

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
2018-12-06 13:25:15 +01:00
Ben Mathews
564b03e3d6 Set window title to VM name
The attached patch address an issue with virt-view not setting the
titlebar text to be the title of the VM (previously discussed on:
https://www.redhat.com/archives/virt-tools-list/2018-September/msg00064.html).
2018-12-05 17:23:08 +01:00
Jonathon Jongsma
49e219335b Silence coverity warning about dead code
For some reason, coverity was complaining that the definition of
cred_type_to_str was dead code, even though it wasn't. Changing the
storage to static silences the warning. Since that's a benficial change
anyway, let's change it. At the same time, make the pointer constant as
well and move it outside of the loop since it doesn't need to be inside
the loop.

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2018-12-04 11:33:30 -06:00
Jonathon Jongsma
c07cc4f89f Avoid potential memory leak in spice session
If j == -1, the memory allocated for rect will leak. So move the
allocation after the test.

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-12-04 11:33:30 -06:00
Jonathon Jongsma
2e76dbb65c Relax Gtk+ requirement slightly
We previously bumped the gtk+ requirement to 3.18 for the function
gtk_window_fullscreen_on_monitor(). But this function is only necessary
in Wayland. So add some preprocessor version checks to allow it to
compile on older distributions if they don't care about wayland support.

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2018-11-09 10:50:18 -06:00
Qiu Wenbo
e1186e0c92 win32: fix command line encoding on windows platform
On Windows, the arguments we get in GApplication::ocal_command_line
come from g_win32_get_command_line(), and g_option_context_parse_strv()
documentation says:
« On Windows, the strings are expected to be in UTF-8. This is in
contrast to g_option_context_parse() which expects them to be in the
system codepage, which is how they are passed as argv to main(). See
g_win32_get_command_line() for a solution. »

This was causing issues on Windows when running:
remote-viewer -t "你好" spice://<target-host>:5900
2018-10-16 11:39:12 +02:00
Jonathon Jongsma
71419bfa71 Fullscreen displays on wrong monitors in Wayland
In fullscreen mode, we attempt to enable a guest display for each client
monitor and then place a fullscreen window for each display on the
appropriate monitor. Previously, we were using gtk_window_move() to move
the window to the proper monitor, and then calling
gtk_window_fullscreen() to enter fullscreen mode on that monitor.
However, under wayland, gtk_window_move() no longer has any effect for
toplevel windows, so all displays were showing up on top of eachother on
the same client monitor.

Fortunately, Gtk+ 3.18 added a new gtk_window_fullscreen_on_monitor()
API that works on Wayland. In theory this allows us to remove the call
to gtk_window_move() from the code. But to avoid potentially changing
behavior on xorg or older systems, I left the existing logic.

This requires a dependency bump for gtk+ from 3.12 to 3.18. Gtk 3.18 is
provided by the following distributions (or newer):
 - RHEL 7.4
 - Fedora 23
 - Ubuntu 16.04LTS

Resolves: rhbz#1584561

Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
Acked-by: Christophe Fergeau <cfergeau@redhat.com>
2018-10-15 15:34:29 -05:00
Marc-André Lureau
45eeda66a2 display: make klass->close() optional
Spice and VTE display do not need to implement it.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-09-25 22:01:43 +04:00
Marc-André Lureau
029cd8a031 window: move default sensitivity in .ui
Instead of modifying it in object initialization.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-09-25 22:01:36 +04:00
Marc-André Lureau
e934026986 window: use virt_viewer_window_set_menus_sensitive()
virt_viewer_window_set_menus_sensitive() is the common function to set
sensitivity on menu items.

It was lacking "toolbar_send_key", so add it there too.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-09-25 22:01:34 +04:00
Marc-André Lureau
41f889f84d app: simplify toggling visibility
There is a hack to maintain the toggle state to a desired state within
the "toggled" handler.

However it is only necessary for the ask-quit case. In this case, we
want to maintain the item active, which is simpler to handle than the
general case. Simplify the code by folding
virt_viewer_app_window_set_visible() and removing the static
"reentering" hack, only maintaining "active" on the last item.

Note that the hack was needed since there is no way to hook a signal
handler on "clicked" before "toggled" is emitted and handled by Gtk,
to avoid the recursion.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-09-25 22:01:32 +04:00
Marc-André Lureau
b6d3755452 Remove class signal handlers
We don't use class signal handlers, remove the extra pointers.

g_signal_override_class_handler() could be used instead when needed.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2018-09-25 22:01:30 +04:00
Jonathon Jongsma
65ef66e42a Spice: listen for new 'SpiceSession::disconnected' signal
Previously we were emitting the VirtViewerSession::session-disconnected
when we got the Spice::session::channel-destroy signal for the last
channel. However, since the channels are still valid at this point, and
because VirtViewerApp quits the application in response to the
session-disconnected signal, that means that the channels were never
being properly freed. This was particularly problematic for the usbredir
channel, which must disconnect any connected USB devices as part of its
destruction. By using the new SpiceSession::disconnected signal instead,
we can ensure that all channels have been disconnected and properly
destroyed before quitting the application.
2018-09-18 11:14:09 -05:00
Eduardo Lima (Etrunko)
9a28f89739 ovirt-foreign-menu: New function storage_domain_validate()
It may be useful to know why the storage domain has not been listed,
given that there are different reasons for that. To make it easier to
provide more detailed debug messages, we move code from the callback
function to this new one.

Acked-by: Christophe Fergeau <cfergeau@redhat.com>
Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2018-09-12 10:55:38 +02:00
Eduardo Lima (Etrunko)
5ba2f8ff1b build: Update govirt and rest requirements
With these new values, 0.3.3 for libgovirt and 0.8 for librest, we can
remove checks for OVIRT_REST_CALL_ERROR_CANCELLED and correspondent
rest_proxy_auth_cancel().

Distros that already ship these versions, such as Fedora, RHEL 7.4
onwards, and Ubuntu since 17.10.

Acked-by: Christophe Fergeau <cfergeau@redhat.com>
Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2018-09-12 10:52:04 +02:00
Victor Toso
7ffb7f9cf4 app: Always add guest name comment
Even when the user adds comments, we should place the guest's name
unless it is present already.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1623756

Signed-off-by: Victor Toso <victortoso@redhat.com>
Acked-by: Christophe Fergeau <cfergeau@redhat.com>
2018-09-03 07:09:21 +02:00
Christophe Fergeau
71dc30571e ovirt: Filter everything which does not end in .iso
oVirt REST API does not provide a way to know what is a valid ISO image
which can be assigned to a running VM. I've seen floppy disk images
(.vfd) in a domain, which is already filtered. Now I've seen an ISO
domain with .qcow2 files in it, which can't be assigned to a VM either.
This commit filters every file which does not have a .iso extension as
it's unlikely to be possible to use it.

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2018-08-31 15:12:18 +02:00
Christophe Fergeau
1b45241a66 ovirt: Improve handling of g_strv_contains()
The ovirt code uses g_strv_contains() with fallback code in
glib-compat.h when we are using a glib version where it's not available.
However, when we use a glib version where g_strv_contains is available,
we get a compilation warning since we are compiling GLIB_VERSION_MAX_ALLOWED
set to 2.38.

This commit wraps both the compat code and the g_strv_contains() call in
a strv_contains() helper where we can hide the magic needed to avoid
deprecation warnings.

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2018-08-07 17:41:37 +02:00
Christophe Fergeau
feea9ccd73 window: Adjust get_image_format() prototype
This adds an unused parameter, but lets us get rid of this new warning
with gcc 8:

virt-viewer-window.c: In function 'get_image_format':
virt-viewer-window.c:930:33: warning: cast between incompatible function types from 'GHashTable * (*)(void)' {aka 'struct _GHashTable * (*)(void)'} to 'void * (*)(void *)' [-Wcast-function-type]
     g_once(&image_formats_once, (GThreadFunc)init_image_formats, NULL);

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2018-08-07 17:41:37 +02:00
Christophe Fergeau
05c8b75113 app: Remove VirtViewerApp::has-focus
This is no longer needed since 140cb84
'remote-viewer: remove --spice-controller'

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2018-08-06 13:20:04 +02:00
Daniel P. Berrangé
4590b50568 Bump min spice to 0.35 and address deprecation warnings
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2018-07-27 11:50:07 +01:00
Victor Toso
c127a80fc6 remote-viewer-connect: centralize window
Instead of top-left corner.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1508274

Signed-off-by: Victor Toso <victortoso@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2018-06-04 11:54:05 +02:00
Christophe Fergeau
afa5b45df8 win32: Look up translations relative to installation directory
On Windows, we can't use bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR); as
LOCALE_DIR is a compile-time constant, while the location of the
translations will be dependant on where the user installs virt-viewer.
This results in an untranslated virt-viewer UI on Windows. This commit
calls bindtextdomain() with a directory which is relative to the
installation path so that translation are properly found.
This is similar to what spice-gtk is doing:
https://cgit.freedesktop.org/spice/spice-gtk/tree/src/spice-glib-main.c

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
2018-05-02 13:20:13 +02:00
Marc-André Lureau
5d04a426db win32: remove debug-helper.exe
This helper was useful to debug spice controller & activex plugin. Now
that the controller is gone, it is no longer needed.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Victor Toso <victortoso@redhat.com>
2017-11-16 17:04:28 +01:00
Marc-André Lureau
140cb84c25 remote-viewer: remove --spice-controller
spice controller interface is being removed from spice-gtk.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Victor Toso <victortoso@redhat.com>
2017-11-16 17:04:05 +01:00
Marc-André Lureau
ce7fd6eb45 remote-viewer: learn '-' as URI for standard input connection file
Some users want the ability to set connection details without writing
to a file or passing command line arguments.

Learn to read the connection file from standard input for such use
case.

This allows a parent process to set the connection details without
intermediary file.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Victor Toso <victortoso@redhat.com>
2017-11-16 17:04:02 +01:00
Eduardo Lima (Etrunko)
b983b6bf29 remote-viewer: Pass guri to remote_viewer_session_connected
When connecting to a VM via oVirt instance, the original uri can not be
retrieved using virt_viewer_session_get_uri(). Consequently, it was
never saved, even though the connection succeeds and the actual callback
for "session-connected" signal, which saves the URI, is invoked.

To solve this problem, we always pass a copy of the guri as user-data
parameter for the callback, and if the call to
virt_viewer_session_get_uri() returns NULL, the parameter is used
instead.

Resolves: https://bugzilla.redhat.com/1459792

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
Acked-by: Victor Toso <victortoso@redhat.com>
2017-11-14 15:27:07 -02:00
Eduardo Lima (Etrunko)
905d84bd22 foreign-menu: Check if storage domain is active for data center
This last patch of the series is where we actually check if the storage
domain is active in the data center the VM is associated with. It makes
use of g_strv_contains(), which is available only in glib version 2.44.
Compatibility code has been added if building against older versions
than required.

Related: https://bugzilla.redhat.com/show_bug.cgi?id=1427467
         https://bugzilla.redhat.com/show_bug.cgi?id=1428401

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2017-10-06 17:05:58 -03:00
Eduardo Lima (Etrunko)
7459ecb66a ovirt-foreign-menu: Fetch host, cluster and data center information
It is possible that the data center the VM is associated with has more
than one storage domain associated with it as well, when only one is
active while the others are not.

The current ovir-foreign-menu code does not take it into consideration,
thus the ISO dialog may show invalid results with that scenario. We fix
this problem by making use of new functions in libgovirt, adding support
or hosts, clusters and data centers.

Related: https://bugzilla.redhat.com/show_bug.cgi?id=1427467
         https://bugzilla.redhat.com/show_bug.cgi?id=1428401

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2017-10-06 17:05:58 -03:00
Eduardo Lima (Etrunko)
476be6bc58 foreign-menu: Use query for fetching virtual machines
This can save us some bandwidth, as we are searching for the specific
virtual machine instead of retrieving the collection with all VMs, and
then iterating over the results after the transfer finishes.

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2017-10-06 17:05:58 -03:00
Marc-André Lureau
df42f78d46 remote-viewer: factor our remote_viewer_initial_connect()
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2017-10-06 17:05:58 -03:00
Marc-André Lureau
a437f35e96 session: remove virt_viewer_session_new() declaration
The function was removed in commit
05333f0e93.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2017-10-06 17:05:58 -03:00
Guido Günther
223836ee67 Make it clear that only running VMs are listed
this might otherwise be confusing.

Reference: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=873597#25
2017-09-14 10:48:05 -05:00
Daniel P. Berrange
2222f81ac7 Set LC_CTYPE=en_US.UTF-8 when running glib-mkenums
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2017-08-14 13:51:58 +01:00
Jonathon Jongsma
761149ea71 Screenshot: reject unknown image type filenames
If the image format cannot be determined for a screenshot filename,
simply return an error informing the user that this is not a valid image
format.

In the past, if we couldn't determine the file type, we simply saved it
as a PNG, and appended a ".png" file extension to the filename. This has
several problems. First, it can result in some oddly-named files (e.g. a
screenshot named 'Screenshot.pdf.png').

Second, modifying the filename that is returned from the GtkFileChooser
undermines the overwrite-confirmation functionality that is built into
the gtk file chooser. When the user specifies a filename in the file
chooser dialog, the chooser will automatically check whether a file of
that name exists, and if it does, it will display a dialog asking
whether the user wants to overwrite it. But if we then append a ".png"
extension to the filename and save it, we may be overwriting an existing
file without warning. By returning an error for unrecognized file types,
we avoid this problem.

Resolves: rhbz#1455832
2017-07-20 09:06:46 -05:00
Jonathon Jongsma
f1783c3a3f Report errors when saving screenshot
Currently, the user gets no feedback if the screenshot fails (e.g. if
they don't have permission to write in the chosen directory, etc). This
patch adds a simple dialog showing the error message when a screenshot
fails.
2017-07-19 16:46:12 -05:00
Jonathon Jongsma
a51ae4507d Change default screenshot name to "Screenshot.png"
Since the code attempts to append ".png" to filenames without an
extension, it doesn't make much sense to have the default filename be
extensionless.  Including the extension on the default filename makes
things more straightforward.

Related: rhbz#1455832
2017-07-19 16:45:02 -05:00
Victor Toso
58dd08f222 remote-viewer-connect: Keep the 'dialog' window on top
Otherwise, in kiosk mode, it'll be hidden from user.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1459800

Signed-off-by: Victor Toso <victortoso@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2017-06-12 15:37:28 +02:00
Eduardo Lima (Etrunko)
0cd836dd17 remote-viewer: Show authentication dialog again if in kiosk mode and connecting to ovirt
Similar to previous commit 5d9e6d2338, now
dealing with the case of connecting directly to ovirt:// URIs, which was
left behind.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1459808

Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2017-06-08 18:45:53 -03:00
Victor Toso
fb14a8b300 vnc: do not show error on cancel/close of auth dialog
Mainly a kiosk mode issue, similar to the spice fix in 6480e52f62.

This patch saves the cancel/close state of auth dialog from
virt_viewer_auth_collect_credentials() in order to avoid an error
dialog to pop up to user in kiosk mode.

This happens due the fact that we call virt_viewer_app_disconnected()
twice:
- One with "session-cancelled" which is correct and well handled;
- The other with "session-disconnected" which is misleading as there
  was no connection at this time. This will trigger the error dialog
  with "Unable to connect to the graphic server %s".

Related: https://bugzilla.redhat.com/show_bug.cgi?id=1446161

Signed-off-by: Victor Toso <victortoso@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2017-06-07 10:06:35 +02:00