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);