mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/virt-viewer
synced 2025-12-27 14:54:14 +00:00
Add a virt_viewer_app_set_hotkeys() helper function
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
parent
0577c703fb
commit
aecd80ec77
@ -509,46 +509,7 @@ spice_ctrl_notified(SpiceCtrlController *ctrl,
|
|||||||
} else if (g_str_equal(pspec->name, "menu")) {
|
} else if (g_str_equal(pspec->name, "menu")) {
|
||||||
spice_ctrl_menu_updated(self);
|
spice_ctrl_menu_updated(self);
|
||||||
} else if (g_str_equal(pspec->name, "hotkeys")) {
|
} else if (g_str_equal(pspec->name, "hotkeys")) {
|
||||||
gchar **hotkey, **hotkeys = g_strsplit(g_value_get_string(&value), ",", -1);
|
virt_viewer_app_set_hotkeys(app, g_value_get_string(&value));
|
||||||
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);
|
|
||||||
} else {
|
} else {
|
||||||
gchar *content = g_strdup_value_contents(&value);
|
gchar *content = g_strdup_value_contents(&value);
|
||||||
|
|
||||||
|
|||||||
@ -1520,6 +1520,59 @@ virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct)
|
|||||||
self->priv->direct = direct;
|
self->priv->direct = 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
|
void
|
||||||
virt_viewer_app_set_attach(VirtViewerApp *self, gboolean attach)
|
virt_viewer_app_set_attach(VirtViewerApp *self, gboolean attach)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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_start_reconnect_poll(VirtViewerApp *self);
|
||||||
void virt_viewer_app_set_zoom_level(VirtViewerApp *self, gint zoom_level);
|
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_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);
|
void virt_viewer_app_set_attach(VirtViewerApp *self, gboolean attach);
|
||||||
gboolean virt_viewer_app_get_attach(VirtViewerApp *self);
|
gboolean virt_viewer_app_get_attach(VirtViewerApp *self);
|
||||||
gboolean virt_viewer_app_has_session(VirtViewerApp *self);
|
gboolean virt_viewer_app_has_session(VirtViewerApp *self);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user