~ubuntu-branches/ubuntu/vivid/gtk-vnc/vivid-proposed

« back to all changes in this revision

Viewing changes to examples/gvncviewer.c

  • Committer: Package Import Robot
  • Author(s): Robert Ancell
  • Date: 2013-12-16 11:39:33 UTC
  • mfrom: (1.2.7)
  • Revision ID: package-import@ubuntu.com-20131216113933-rowrryjn82up3yr5
Tags: 0.5.3-0ubuntu1
* New upstream release:
  - Support QEMU LED state extension
  - Time out connection attempt after 10 seconds
  - Abort if out of memory when mmap'ing coroutine stack
  - Stop leaking coroutine stack memory
  - Improve perfornmance of ZRLE encoding by avoiding memmove
  - Only trigger keyboard grab sequence upon key release to
    allow modifiers to go to the remote server
  - Avoid busy loop upon I/O error which follows blocking I/O,
    commonly seen when a server drops the connection
  - Fix handling of --no-undefined flag
  - Don't break implicit pointer grab from mouse clicks
  - Don't drop mouse events that are out of bounds, clamp their
    coordinates instead
  - Show how to block all accelerators in gvncviewer demo program
* debian/control:
  - Use standards-version 3.9.4
* debian/libgvnc-1.0-0.symbols:
  - Updated

Show diffs side-by-side

added added

removed removed

Lines of Context:
108
108
    gboolean set;
109
109
} VncGrabDefs;
110
110
 
 
111
gboolean enable_mnemonics_save;
 
112
GtkAccelGroup *accel_group;
 
113
gboolean accel_enabled = TRUE;
 
114
GValue accel_setting;
 
115
GSList *accel_list;
 
116
 
111
117
static void set_title(VncDisplay *vncdisplay, GtkWidget *window,
112
118
                      gboolean grabbed)
113
119
{
141
147
    return FALSE;
142
148
}
143
149
 
144
 
static void vnc_grab(GtkWidget *vncdisplay, GtkWidget *window)
 
150
 
 
151
static void
 
152
vnc_disable_modifiers(GtkWindow *window)
 
153
{
 
154
    GtkSettings *settings = gtk_settings_get_default();
 
155
    GValue empty;
 
156
    GSList *accels;
 
157
 
 
158
    if (!accel_enabled)
 
159
        return;
 
160
 
 
161
    /* This stops F10 activating menu bar */
 
162
    memset(&empty, 0, sizeof empty);
 
163
    g_value_init(&empty, G_TYPE_STRING);
 
164
    g_object_get_property(G_OBJECT(settings), "gtk-menu-bar-accel", &accel_setting);
 
165
    g_object_set_property(G_OBJECT(settings), "gtk-menu-bar-accel", &empty);
 
166
 
 
167
    /* This stops global accelerators like Ctrl+Q == Quit */
 
168
    for (accels = accel_list ; accels ; accels = accels->next) {
 
169
        if (accel_group == accels->data)
 
170
            continue;
 
171
        gtk_window_remove_accel_group(GTK_WINDOW(window), accels->data);
 
172
    }
 
173
 
 
174
    /* This stops menu bar shortcuts like Alt+F == File */
 
175
    g_object_get(settings,
 
176
                 "gtk-enable-mnemonics", &enable_mnemonics_save,
 
177
                 NULL);
 
178
    g_object_set(settings,
 
179
                 "gtk-enable-mnemonics", FALSE,
 
180
                 NULL);
 
181
 
 
182
    accel_enabled = FALSE;
 
183
}
 
184
 
 
185
 
 
186
static void
 
187
vnc_enable_modifiers(GtkWindow *window)
 
188
{
 
189
    GtkSettings *settings = gtk_settings_get_default();
 
190
    GSList *accels;
 
191
 
 
192
    if (accel_enabled)
 
193
        return;
 
194
 
 
195
    /* This allows F10 activating menu bar */
 
196
    g_object_set_property(G_OBJECT(settings), "gtk-menu-bar-accel", &accel_setting);
 
197
 
 
198
    /* This allows global accelerators like Ctrl+Q == Quit */
 
199
    for (accels = accel_list ; accels ; accels = accels->next) {
 
200
        if (accel_group == accels->data)
 
201
            continue;
 
202
        gtk_window_add_accel_group(GTK_WINDOW(window), accels->data);
 
203
    }
 
204
 
 
205
    /* This allows menu bar shortcuts like Alt+F == File */
 
206
    g_object_set(settings,
 
207
                 "gtk-enable-mnemonics", enable_mnemonics_save,
 
208
                 NULL);
 
209
 
 
210
    accel_enabled = TRUE;
 
211
}
 
212
 
 
213
 
 
214
static void vnc_key_grab(GtkWidget *vncdisplay G_GNUC_UNUSED, GtkWidget *window)
 
215
{
 
216
    vnc_disable_modifiers(GTK_WINDOW(window));
 
217
}
 
218
 
 
219
static void vnc_key_ungrab(GtkWidget *vncdisplay G_GNUC_UNUSED, GtkWidget *window)
 
220
{
 
221
    vnc_enable_modifiers(GTK_WINDOW(window));
 
222
}
 
223
 
 
224
static void vnc_mouse_grab(GtkWidget *vncdisplay, GtkWidget *window)
145
225
{
146
226
    set_title(VNC_DISPLAY(vncdisplay), window, TRUE);
147
227
}
148
228
 
149
 
static void vnc_ungrab(GtkWidget *vncdisplay, GtkWidget *window)
 
229
static void vnc_mouse_ungrab(GtkWidget *vncdisplay, GtkWidget *window)
150
230
{
151
231
    set_title(VNC_DISPLAY(vncdisplay), window, FALSE);
152
232
}
588
668
    GtkWidget *scaling;
589
669
    GtkWidget *showgrabkeydlg;
590
670
    const char *help_msg = "Run 'gvncviewer --help' to see a full list of available command line options";
 
671
    GSList *accels;
591
672
 
592
673
    name = g_strdup_printf("- Simple VNC Client on Gtk-VNC %s",
593
674
                           vnc_util_get_version_string());
689
770
    gtk_container_add(GTK_CONTAINER(window), layout);
690
771
    gtk_widget_realize(vnc);
691
772
 
 
773
    g_value_init(&accel_setting, G_TYPE_STRING);
 
774
 
 
775
    accels = gtk_accel_groups_from_object(G_OBJECT(window));
 
776
 
 
777
    for ( ; accels ; accels = accels->next) {
 
778
        accel_list = g_slist_append(accel_list, accels->data);
 
779
        g_object_ref(G_OBJECT(accels->data));
 
780
    }
 
781
 
692
782
#ifdef HAVE_GIOUNIX
693
783
    if (strchr(args[0], '/')) {
694
784
        GSocketAddress *addr = g_unix_socket_address_new_with_type
724
814
#endif
725
815
    vnc_display_set_keyboard_grab(VNC_DISPLAY(vnc), TRUE);
726
816
    vnc_display_set_pointer_grab(VNC_DISPLAY(vnc), TRUE);
 
817
    vnc_display_set_pointer_local(VNC_DISPLAY(vnc), TRUE);
727
818
 
728
819
    if (!gtk_widget_is_composited(window)) {
729
820
        vnc_display_set_scaling(VNC_DISPLAY(vnc), TRUE);
747
838
                     G_CALLBACK(vnc_desktop_resize), NULL);
748
839
 
749
840
    g_signal_connect(vnc, "vnc-pointer-grab",
750
 
                     G_CALLBACK(vnc_grab), window);
 
841
                     G_CALLBACK(vnc_mouse_grab), window);
751
842
    g_signal_connect(vnc, "vnc-pointer-ungrab",
752
 
                     G_CALLBACK(vnc_ungrab), window);
 
843
                     G_CALLBACK(vnc_mouse_ungrab), window);
 
844
 
 
845
    g_signal_connect(vnc, "vnc-keyboard-grab",
 
846
                     G_CALLBACK(vnc_key_grab), window);
 
847
    g_signal_connect(vnc, "vnc-keyboard-ungrab",
 
848
                     G_CALLBACK(vnc_key_ungrab), window);
 
849
 
753
850
 
754
851
    g_signal_connect(window, "key-press-event",
755
852
                     G_CALLBACK(vnc_screenshot), vnc);