diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2009-07-28 21:00:56 +0100 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2009-07-28 21:00:56 +0100 |
commit | d35abc160a064678303cc9fb6f94682a1ed5bf4a (patch) | |
tree | 3b973cf62a58b4557f9c7bcbb1e522e0ff51ee3e /src | |
parent | 296f91c54951aa2526ec5c8694937c43aec7e103 (diff) | |
download | virt-viewer-d35abc160a064678303cc9fb6f94682a1ed5bf4a.tar.gz virt-viewer-d35abc160a064678303cc9fb6f94682a1ed5bf4a.tar.xz virt-viewer-d35abc160a064678303cc9fb6f94682a1ed5bf4a.zip |
Fix mouse / key grab vs modifier disabling mixup
Diffstat (limited to 'src')
-rw-r--r-- | src/viewer.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/src/viewer.c b/src/viewer.c index 4039e84..96b14a1 100644 --- a/src/viewer.c +++ b/src/viewer.c @@ -363,10 +363,11 @@ static void viewer_set_title(VirtViewer *viewer, gboolean grabbed) gtk_window_set_title(GTK_WINDOW(viewer->window), title); } -static void viewer_ignore_accel(GtkWidget *menu G_GNUC_UNUSED, - VirtViewer *viewer G_GNUC_UNUSED) +static gboolean viewer_ignore_accel(GtkWidget *menu G_GNUC_UNUSED, + VirtViewer *viewer G_GNUC_UNUSED) { /* ignore accelerator */ + return TRUE; } @@ -409,7 +410,7 @@ static void viewer_disable_modifiers(VirtViewer *viewer) static void viewer_enable_modifiers(VirtViewer *viewer) { GtkSettings *settings = gtk_settings_get_default(); - GSList *accels; + GSList *accels; int i; if (!viewer->window) @@ -438,15 +439,23 @@ static void viewer_enable_modifiers(VirtViewer *viewer) -static void viewer_grab(GtkWidget *vnc G_GNUC_UNUSED, VirtViewer *viewer) +static void viewer_mouse_grab(GtkWidget *vnc G_GNUC_UNUSED, VirtViewer *viewer) { viewer_set_title(viewer, TRUE); - viewer_disable_modifiers(viewer); } -static void viewer_ungrab(GtkWidget *vnc G_GNUC_UNUSED, VirtViewer *viewer) +static void viewer_mouse_ungrab(GtkWidget *vnc G_GNUC_UNUSED, VirtViewer *viewer) { viewer_set_title(viewer, FALSE); +} + +static void viewer_key_grab(GtkWidget *vnc G_GNUC_UNUSED, VirtViewer *viewer) +{ + viewer_disable_modifiers(viewer); +} + +static void viewer_key_ungrab(GtkWidget *vnc G_GNUC_UNUSED, VirtViewer *viewer) +{ viewer_enable_modifiers(viewer); } @@ -1108,7 +1117,10 @@ viewer_start (const char *uri, viewer_event_register(); virSetErrorFunc(NULL, viewer_error_func); - viewer->conn = virConnectOpenReadOnly(uri); + /* XXX write a graphical auth function */ + viewer->conn = virConnectOpenAuth(uri, + virConnectAuthPtrDefault, + VIR_CONNECT_RO); if (!viewer->conn) { fprintf(stderr, "unable to connect to libvirt %s\n", uri ? uri : "xen"); @@ -1163,9 +1175,14 @@ viewer_start (const char *uri, g_signal_connect(GTK_OBJECT(viewer->vnc), "vnc-desktop-resize", GTK_SIGNAL_FUNC(viewer_resize_desktop), viewer); g_signal_connect(GTK_OBJECT(viewer->vnc), "vnc-pointer-grab", - GTK_SIGNAL_FUNC(viewer_grab), viewer); + GTK_SIGNAL_FUNC(viewer_mouse_grab), viewer); g_signal_connect(GTK_OBJECT(viewer->vnc), "vnc-pointer-ungrab", - GTK_SIGNAL_FUNC(viewer_ungrab), viewer); + GTK_SIGNAL_FUNC(viewer_mouse_ungrab), viewer); + g_signal_connect(GTK_OBJECT(viewer->vnc), "vnc-keyboard-grab", + GTK_SIGNAL_FUNC(viewer_key_grab), viewer); + g_signal_connect(GTK_OBJECT(viewer->vnc), "vnc-keyboard-ungrab", + GTK_SIGNAL_FUNC(viewer_key_ungrab), viewer); + g_signal_connect(GTK_OBJECT(viewer->vnc), "vnc-auth-credential", GTK_SIGNAL_FUNC(viewer_credential), NULL); |