[PATCH remote-viewer 1/1] Remember monitor mapping on close.
Julien ROPE
jrope at redhat.com
Thu Jan 30 16:05:08 UTC 2020
Hi Daniel,
Sorry, I didn't take that into account. I will see if I can do the same with older API.
Regards
Julien
Le 28/01/2020 à 16:48, Daniel P. Berrangé a écrit :
> On Tue, Jan 21, 2020 at 08:48:35AM +0100, Julien Ropé wrote:
>> When the application is stopped, if the windows are in fullscreen, their
>> position on the client will be remembered.
>>
>> This change uses the existing option 'monitor-mapping' in the settings
>> file to save the position and reuse it on next launch.
>>
>> This implements part of the requirement from
>> https://bugzilla.redhat.com/show_bug.cgi?id=1179070
>>
>> Signed-off-by: Julien Ropé <jrope at redhat.com>
>> ---
>> src/virt-viewer-app.c | 114 ++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 114 insertions(+)
>>
>> diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
>> index da8cfa9..f955882 100644
>> --- a/src/virt-viewer-app.c
>> +++ b/src/virt-viewer-app.c
>> @@ -106,6 +106,7 @@ static void virt_viewer_app_set_fullscreen(VirtViewerApp *self, gboolean fullscr
>> static void virt_viewer_app_update_menu_displays(VirtViewerApp *self);
>> static void virt_viewer_update_smartcard_accels(VirtViewerApp *self);
>> static void virt_viewer_app_add_option_entries(VirtViewerApp *self, GOptionContext *context, GOptionGroup *group);
>> +static VirtViewerWindow *virt_viewer_app_get_nth_window(VirtViewerApp *self, gint nth);
>>
>>
>> struct _VirtViewerAppPrivate {
>> @@ -400,6 +401,116 @@ virt_viewer_app_get_monitor_mapping_for_section(VirtViewerApp *self, const gchar
>> return mapping;
>> }
>>
>> +/*
>> + * save the association display/monitor in the config for reuse on next connection
>> + */
>> +static void virt_viewer_app_set_monitor_mapping_for_display(VirtViewerApp *self, VirtViewerDisplay *display)
>> +{
>> + GError *error = NULL;
>> + gsize nmappings = 0;
>> + gchar **mappings = NULL;
>> + gchar **tokens = NULL;
>> +
>> + int i;
>> +
>> + gint virt_viewer_display = virt_viewer_display_get_nth(display);
>> + gint virt_viewer_monitor = virt_viewer_display_get_monitor(display);
>> +
>> + if (virt_viewer_monitor == -1) {
>> + // find which monitor the window is on
>> + GdkDisplay *gdk_dpy = gdk_display_get_default();
>> + VirtViewerWindow *vvWindow = virt_viewer_app_get_nth_window(self, virt_viewer_display) ;
>> + GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(virt_viewer_window_get_window(vvWindow)));
>> + GdkMonitor *pMonitor = gdk_display_get_monitor_at_window(gdk_dpy, window);
> This breaks the build due to using APIs that are newer than our min
> reqiured GTK version:
>
> virt-viewer-app.c: In function 'virt_viewer_app_set_monitor_mapping_for_display':
> virt-viewer-app.c:428:9: warning: 'gdk_display_get_monitor_at_window' is deprecated: Not available before 3.22 [-Wdeprecated-declarations]
> 428 | GdkMonitor *pMonitor = gdk_display_get_monitor_at_window(gdk_dpy, window);
> | ^~~~~~~~~~
> In file included from /usr/include/gtk-3.0/gdk/gdkscreen.h:32,
> from /usr/include/gtk-3.0/gdk/gdkapplaunchcontext.h:31,
> from /usr/include/gtk-3.0/gdk/gdk.h:32,
> from /usr/include/gtk-3.0/gtk/gtk.h:30,
> from virt-viewer-app.c:28:
> /usr/include/gtk-3.0/gdk/gdkdisplay.h:194:14: note: declared here
> 194 | GdkMonitor * gdk_display_get_monitor_at_window (GdkDisplay *display,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>
> We currently request
>
> GTK_REQUIRED="3.12"
> GTK_ENCODED_VERSION="GDK_VERSION_3_12"
>
> based on our CI platforms, Ubuntu 16.04 is the oldest GTK
> at version 3.18.9
>
> So we can bump our min GTK to 3.18, but we can't use
> APIs from 3.22 yet
>
> Once we drop Ubuntu 16.04 - most likely around the April 2020 timefram
> when Ubuntu 20.04 is released, then Debian 9 & CentOS 7 will be the
> oldest at version 3.22.
>
> Regards,
> Daniel
More information about the virt-tools-list
mailing list