Package: gvncviewer
Version: 0.3.8-3
Severity: normal

Attaching patch that creates menu item that turns grab on and off.
--- ../examples/gvncviewer0.c	2009-08-08 02:02:00.000000000 +0200
+++ ../examples/gvncviewer.c	2009-08-08 02:22:17.000000000 +0200
@@ -40,6 +40,8 @@
   { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, 0 }
 };
 
+static int allow_grab = TRUE;
+
 
 static GtkWidget *vnc;
 
@@ -168,6 +170,23 @@
 		vnc_display_set_scaling(VNC_DISPLAY(vncdisplay), FALSE);
 }
 
+static void set_grab(GtkWidget * vncdisplay)
+{
+	vnc_display_set_keyboard_grab(VNC_DISPLAY(vncdisplay), allow_grab);
+	vnc_display_set_pointer_grab(VNC_DISPLAY(vncdisplay), allow_grab);
+}
+
+
+static void do_allow_grab(GtkWidget *menu, GtkWidget *vncdisplay)
+{
+	if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu)))
+          allow_grab = TRUE;
+	else
+          allow_grab = FALSE;
+
+        set_grab(vncdisplay);
+}
+
 static void vnc_credential(GtkWidget *vncdisplay, GValueArray *credList)
 {
 	GtkWidget *dialog = NULL;
@@ -310,6 +329,7 @@
 	GtkWidget *cab;
 	GtkWidget *fullscreen;
 	GtkWidget *scaling;
+	GtkWidget *grab;
 	const char *help_msg = "Run 'gvncviewer --help' to see a full list of available command line options";
 
 	/* Setup command line options */
@@ -372,6 +392,10 @@
 
 	gtk_menu_item_set_submenu(GTK_MENU_ITEM(view), submenu);
 
+        grab = gtk_check_menu_item_new_with_mnemonic("Allow Input _Grab");
+        gtk_menu_bar_append(GTK_MENU_BAR(menubar), grab);
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(grab), allow_grab);
+
 #if WITH_LIBVIEW
 	ViewAutoDrawer_SetActive(VIEW_AUTODRAWER(layout), FALSE);
 	ViewOvBox_SetOver(VIEW_OV_BOX(layout), menubar);
@@ -395,8 +419,7 @@
         if(! *hostname) 
           snprintf(hostname, sizeof(hostname), "%s", "127.0.0.1");
 	vnc_display_open_host(VNC_DISPLAY(vnc), hostname, port);
-	vnc_display_set_keyboard_grab(VNC_DISPLAY(vnc), TRUE);
-	vnc_display_set_pointer_grab(VNC_DISPLAY(vnc), TRUE);
+        set_grab(vnc);
 
 	if (!gtk_widget_is_composited(window)) {
 		vnc_display_set_scaling(VNC_DISPLAY(vnc), TRUE);
@@ -439,6 +462,8 @@
 			   GTK_SIGNAL_FUNC(do_fullscreen), window);
 	gtk_signal_connect(GTK_OBJECT(scaling), "toggled",
 			   GTK_SIGNAL_FUNC(do_scaling), vnc);
+	gtk_signal_connect(GTK_OBJECT(grab), "toggled",
+			   GTK_SIGNAL_FUNC(do_allow_grab), vnc);
 #if WITH_LIBVIEW
 	gtk_signal_connect(GTK_OBJECT(window), "window-state-event",
 			   GTK_SIGNAL_FUNC(window_state_event), layout);

Reply via email to