Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> --- src/remote-viewer.c | 41 +-------------------------------------- src/virt-viewer-app.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/virt-viewer-app.h | 1 + 3 files changed, 55 insertions(+), 40 deletions(-) diff --git a/src/remote-viewer.c b/src/remote-viewer.c index 559f29a..b296d67 100644 --- a/src/remote-viewer.c +++ b/src/remote-viewer.c @@ -509,46 +509,7 @@ spice_ctrl_notified(SpiceCtrlController *ctrl, } else if (g_str_equal(pspec->name, "menu")) { spice_ctrl_menu_updated(self); } else if (g_str_equal(pspec->name, "hotkeys")) { - gchar **hotkey, **hotkeys = g_strsplit(g_value_get_string(&value), ",", -1); - if (!hotkeys || g_strv_length(hotkeys) == 0) { - g_object_set(app, "enable-accel", FALSE, NULL); - goto end; - } - /* Disable default bindings and replace them with our own */ - gtk_accel_map_change_entry("<virt-viewer>/view/fullscreen", 0, 0, TRUE); - gtk_accel_map_change_entry("<virt-viewer>/view/release-cursor", 0, 0, TRUE); - gtk_accel_map_change_entry("<virt-viewer>/file/smartcard-insert", 0, 0, TRUE); - gtk_accel_map_change_entry("<virt-viewer>/file/smartcard-remove", 0, 0, TRUE); - - for (hotkey = hotkeys; *hotkey != NULL; hotkey++) { - gchar *key = strstr(*hotkey, "="); - if (key == NULL) { - g_warn_if_reached(); - continue; - } - *key = '\0'; - - gchar *accel = spice_hotkey_to_gtk_accelerator(key + 1); - guint accel_key; - GdkModifierType accel_mods; - gtk_accelerator_parse(accel, &accel_key, &accel_mods); - g_free(accel); - - if (g_str_equal(*hotkey, "toggle-fullscreen")) { - gtk_accel_map_change_entry("<virt-viewer>/view/fullscreen", accel_key, accel_mods, TRUE); - } else if (g_str_equal(*hotkey, "release-cursor")) { - gtk_accel_map_change_entry("<virt-viewer>/view/release-cursor", accel_key, accel_mods, TRUE); - } else if (g_str_equal(*hotkey, "smartcard-insert")) { - gtk_accel_map_change_entry("<virt-viewer>/file/smartcard-insert", accel_key, accel_mods, TRUE); - } else if (g_str_equal(*hotkey, "smartcard-remove")) { - gtk_accel_map_change_entry("<virt-viewer>/file/smartcard-remove", accel_key, accel_mods, TRUE); - } else { - g_warning("Unknown hotkey command %s", *hotkey); - } - } - g_strfreev(hotkeys); - - g_object_set(app, "enable-accel", TRUE, NULL); + virt_viewer_app_set_hotkeys(app, g_value_get_string(&value)); } else { gchar *content = g_strdup_value_contents(&value); diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c index 6b3ad6d..cdcba67 100644 --- a/src/virt-viewer-app.c +++ b/src/virt-viewer-app.c @@ -1521,6 +1521,59 @@ virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct) } void +virt_viewer_app_set_hotkeys(VirtViewerApp *self, const gchar *hotkeys_str) +{ + gchar **hotkey, **hotkeys = NULL; + + g_return_if_fail(VIRT_VIEWER_IS_APP(self)); + + if (hotkeys_str) + hotkeys = g_strsplit(hotkeys_str, ",", -1); + + if (!hotkeys || g_strv_length(hotkeys) == 0) { + g_strfreev(hotkeys); + g_object_set(self, "enable-accel", FALSE, NULL); + return; + } + + /* Disable default bindings and replace them with our own */ + gtk_accel_map_change_entry("<virt-viewer>/view/fullscreen", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/view/release-cursor", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/file/smartcard-insert", 0, 0, TRUE); + gtk_accel_map_change_entry("<virt-viewer>/file/smartcard-remove", 0, 0, TRUE); + + for (hotkey = hotkeys; *hotkey != NULL; hotkey++) { + gchar *key = strstr(*hotkey, "="); + if (key == NULL) { + g_warn_if_reached(); + continue; + } + *key = '\0'; + + gchar *accel = spice_hotkey_to_gtk_accelerator(key + 1); + guint accel_key; + GdkModifierType accel_mods; + gtk_accelerator_parse(accel, &accel_key, &accel_mods); + g_free(accel); + + if (g_str_equal(*hotkey, "toggle-fullscreen")) { + gtk_accel_map_change_entry("<virt-viewer>/view/fullscreen", accel_key, accel_mods, TRUE); + } else if (g_str_equal(*hotkey, "release-cursor")) { + gtk_accel_map_change_entry("<virt-viewer>/view/release-cursor", accel_key, accel_mods, TRUE); + } else if (g_str_equal(*hotkey, "smartcard-insert")) { + gtk_accel_map_change_entry("<virt-viewer>/file/smartcard-insert", accel_key, accel_mods, TRUE); + } else if (g_str_equal(*hotkey, "smartcard-remove")) { + gtk_accel_map_change_entry("<virt-viewer>/file/smartcard-remove", accel_key, accel_mods, TRUE); + } else { + g_warning("Unknown hotkey command %s", *hotkey); + } + } + g_strfreev(hotkeys); + + g_object_set(self, "enable-accel", TRUE, NULL); +} + +void virt_viewer_app_set_attach(VirtViewerApp *self, gboolean attach) { g_return_if_fail(VIRT_VIEWER_IS_APP(self)); diff --git a/src/virt-viewer-app.h b/src/virt-viewer-app.h index 2cd3547..663f7a1 100644 --- a/src/virt-viewer-app.h +++ b/src/virt-viewer-app.h @@ -76,6 +76,7 @@ int virt_viewer_app_initial_connect(VirtViewerApp *self); void virt_viewer_app_start_reconnect_poll(VirtViewerApp *self); void virt_viewer_app_set_zoom_level(VirtViewerApp *self, gint zoom_level); void virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct); +void virt_viewer_app_set_hotkeys(VirtViewerApp *self, const gchar *hotkeys); void virt_viewer_app_set_attach(VirtViewerApp *self, gboolean attach); gboolean virt_viewer_app_get_attach(VirtViewerApp *self); gboolean virt_viewer_app_has_session(VirtViewerApp *self); -- 1.8.0.2 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list