diff options
author | myheroyuki <myheroyuki@outlook.com> | 2023-07-11 15:12:47 +0300 |
---|---|---|
committer | myheroyuki <myheroyuki@outlook.com> | 2023-07-11 15:12:47 +0300 |
commit | fec1fb501d0df5e681887aa919ba171411bc7234 (patch) | |
tree | d05e9d648b60ea48835e11986a7a905fbee75d08 | |
parent | e7c527ebec38feb2fd426a0cc0ab75df5399a1cf (diff) |
Remote assistance now works in Remmina in the same way the /assistance flag works in FreeRDP
-rw-r--r-- | plugins/python_wrapper/python_wrapper_remmina.c | 1 | ||||
-rw-r--r-- | plugins/rdp/rdp_plugin.c | 31 | ||||
-rw-r--r-- | src/include/remmina/types.h | 1 | ||||
-rw-r--r-- | src/remmina_file_editor.c | 96 | ||||
-rw-r--r-- | src/remmina_plugin_manager.c | 2 |
5 files changed, 104 insertions, 27 deletions
diff --git a/plugins/python_wrapper/python_wrapper_remmina.c b/plugins/python_wrapper/python_wrapper_remmina.c index 2dbb9d17e..c61ab09b5 100644 --- a/plugins/python_wrapper/python_wrapper_remmina.c +++ b/plugins/python_wrapper/python_wrapper_remmina.c @@ -661,6 +661,7 @@ PyMODINIT_FUNC python_wrapper_module_initialize(void) PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_SERVER", (long)REMMINA_PROTOCOL_SETTING_TYPE_SERVER); PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_PASSWORD", (long)REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD); PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_RESOLUTION", (long)REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION); + PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_ASSISTANCE", (long)REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE); PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_KEYMAP", (long)REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP); PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_TEXT", (long)REMMINA_PROTOCOL_SETTING_TYPE_TEXT); PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_SELECT", (long)REMMINA_PROTOCOL_SETTING_TYPE_SELECT); diff --git a/plugins/rdp/rdp_plugin.c b/plugins/rdp/rdp_plugin.c index 655660e5d..5f938c90e 100644 --- a/plugins/rdp/rdp_plugin.c +++ b/plugins/rdp/rdp_plugin.c @@ -1376,44 +1376,23 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp) freerdp_settings_set_string(rfi->settings, FreeRDP_ConfigPath, datapath); g_free(datapath); - - - - - - if (remmina_plugin_service->file_get_int(remminafile, "assistance_mode", FALSE)){ + if (remmina_plugin_service->file_get_int(remminafile, "assistance_mode", 0)){ rdpAssistanceFile* file = freerdp_assistance_file_new(); if (!file) REMMINA_PLUGIN_DEBUG("Failed to get file"); - status = freerdp_assistance_parse_file(file, "", ""); + status = freerdp_assistance_parse_file(file, + remmina_plugin_service->file_get_string(remminafile, "assistance_file"), + remmina_plugin_service->file_get_string(remminafile, "assistance_pass")); if (status < 0) REMMINA_PLUGIN_DEBUG("Failed to get status");; if (!freerdp_assistance_populate_settings_from_assistance_file(file, rfi->settings)) REMMINA_PLUGIN_DEBUG("Failed to populate"); - - } - - - - - - - - - - - - - - - - #if defined(PROXY_TYPE_IGNORE) if (!remmina_plugin_service->file_get_int(remminafile, "useproxyenv", FALSE) ? TRUE : FALSE) { REMMINA_PLUGIN_DEBUG("Not using system proxy settings"); @@ -2910,6 +2889,7 @@ static const RemminaProtocolSetting remmina_rdp_advanced_settings[] = { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "vc", N_("Static virtual channel"), FALSE, NULL, N_("<channel>[,<options>]") }, { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "rdp2tcp", N_("TCP redirection"), FALSE, NULL, N_("/PATH/TO/rdp2tcp") }, { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "rdp_reconnect_attempts", N_("Reconnect attempts number"), FALSE, NULL, N_("The maximum number of reconnect attempts upon an RDP disconnect (default: 20)") }, + { REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE, "assistance_mode", N_("Attempt to connect in assistnace mode"), TRUE, NULL }, { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "preferipv6", N_("Prefer IPv6 AAAA record over IPv4 A record"), TRUE, NULL, NULL }, { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "shareprinter", N_("Share printers"), TRUE, NULL, NULL }, { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "shareserial", N_("Share serial ports"), TRUE, NULL, NULL }, @@ -2935,7 +2915,6 @@ static const RemminaProtocolSetting remmina_rdp_advanced_settings[] = { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "websockets", N_("Enable Gateway websockets support"), TRUE, NULL, NULL }, #endif { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "no-suppress", N_("Update framebuffer even when not visible"), TRUE, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "assistance_mode", N_("Attempt to connect in assistnace mode"), TRUE, NULL }, { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; diff --git a/src/include/remmina/types.h b/src/include/remmina/types.h index f81af78c2..43d7ec237 100644 --- a/src/include/remmina/types.h +++ b/src/include/remmina/types.h @@ -100,6 +100,7 @@ typedef enum { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION, + REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE, REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP, REMMINA_PROTOCOL_SETTING_TYPE_TEXT, diff --git a/src/remmina_file_editor.c b/src/remmina_file_editor.c index faafb7c80..719b092e2 100644 --- a/src/remmina_file_editor.c +++ b/src/remmina_file_editor.c @@ -111,6 +111,12 @@ struct _RemminaFileEditorPriv { GtkWidget * resolution_custom_combo; GtkWidget * keymap_combo; + GtkWidget * assistance_toggle; + GtkWidget * assistance_file; + GtkWidget * assistance_password; + GtkWidget * assistance_file_label; + GtkWidget * assistance_password_label; + GtkWidget * behavior_autostart_check; GtkWidget * behavior_precommand_entry; GtkWidget * behavior_postcommand_entry; @@ -365,6 +371,27 @@ static void remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled(GtkTog gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe->priv->ssh_tunnel_server_custom_radio)))); } + +static void remmina_file_editor_assistance_enabled_check_on_toggled(GtkToggleButton *togglebutton, + RemminaFileEditor *gfe) +{ + TRACE_CALL(__func__); + RemminaFileEditorPriv *priv = gfe->priv; + gboolean enabled = TRUE; + + if (gfe->priv->assistance_toggle) { + enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe->priv->assistance_toggle)); + if (gfe->priv->assistance_file) + gtk_widget_set_sensitive(GTK_WIDGET(gfe->priv->assistance_file), enabled); + if (gfe->priv->assistance_password) + gtk_widget_set_sensitive(GTK_WIDGET(gfe->priv->assistance_password), enabled); + if (gfe->priv->assistance_file_label) + gtk_widget_set_sensitive(GTK_WIDGET(gfe->priv->assistance_file_label), enabled); + if (gfe->priv->assistance_password_label) + gtk_widget_set_sensitive(GTK_WIDGET(gfe->priv->assistance_password_label), enabled); + } +} + static void remmina_file_editor_ssh_tunnel_enabled_check_on_toggled(GtkToggleButton *togglebutton, RemminaFileEditor *gfe, RemminaProtocolSSHSetting ssh_setting) { @@ -617,6 +644,57 @@ static void remmina_file_editor_create_resolution(RemminaFileEditor *gfe, const g_free(res_str); } + +static void remmina_file_editor_create_assistance(RemminaFileEditor *gfe, const RemminaProtocolSetting *setting, + GtkWidget *grid, gint row) +{ + TRACE_CALL(__func__); + GtkWidget *widget; + int assistance_mode; + + assistance_mode = remmina_file_get_int(gfe->priv->remmina_file, "assistance_mode", 0); + + + widget = gtk_toggle_button_new_with_label(_("Assistance Mode")); + gtk_widget_set_halign(widget, GTK_ALIGN_START); + gtk_widget_show(widget); + gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1); + gtk_toggle_button_set_active(widget, remmina_file_get_int(gfe->priv->remmina_file, "assistance_mode", 0)); + gfe->priv->assistance_toggle = widget; + g_signal_connect(widget, "toggled", G_CALLBACK(remmina_file_editor_assistance_enabled_check_on_toggled), gfe); + + + widget = gtk_label_new("Assistance file"); + gtk_widget_set_halign(widget, GTK_ALIGN_END); + gtk_widget_show(widget); + gtk_grid_attach(GTK_GRID(grid), widget, 0, row+1, 1, 1); + gfe->priv->assistance_file_label = widget; + + widget = gtk_entry_new(); + gtk_widget_set_halign(widget, GTK_ALIGN_START); + gtk_widget_show(widget); + gtk_entry_set_text(GTK_ENTRY(widget), remmina_file_get_string(gfe->priv->remmina_file, "assistance_file")); + gtk_grid_attach(GTK_GRID(grid), widget, 1, row+1, 1, 1); + gfe->priv->assistance_file = widget; + + widget = gtk_label_new("Assistance Password"); + gtk_widget_set_halign(widget, GTK_ALIGN_END); + gtk_widget_show(widget); + gtk_grid_attach(GTK_GRID(grid), widget, 0, row+2, 1, 1); + gfe->priv->assistance_password_label = widget; + + widget = gtk_entry_new(); + gtk_widget_set_halign(widget, GTK_ALIGN_START); + gtk_widget_show(widget); + gtk_entry_set_text(GTK_ENTRY(widget), remmina_file_get_string(gfe->priv->remmina_file, "assistance_pass")); + gtk_grid_attach(GTK_GRID(grid), widget, 1, row+2, 1, 1); + gfe->priv->assistance_password = widget; + + remmina_file_editor_assistance_enabled_check_on_toggled(NULL, gfe); + +} + + static GtkWidget *remmina_file_editor_create_text2(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gint left, gint right, gchar *setting_name) @@ -946,7 +1024,12 @@ static void remmina_file_editor_create_settings(RemminaFileEditor *gfe, GtkWidge case REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION: remmina_file_editor_create_resolution(gfe, settings, grid, grid_row); - grid_row += 1; + grid_row ++; + break; + + case REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE: + remmina_file_editor_create_assistance(gfe, settings, grid, grid_row); + grid_row += 3; break; case REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP: @@ -1679,6 +1762,17 @@ static GError *remmina_file_editor_update(RemminaFileEditor * gfe, remmina_file_set_int(priv->remmina_file, "resolution_height", res_h); } + if (priv->assistance_toggle){ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->assistance_toggle))) { + remmina_file_set_string(priv->remmina_file, "assistance_file", gtk_entry_get_text(priv->assistance_file)); + remmina_file_set_string(priv->remmina_file, "assistance_pass", gtk_entry_get_text(priv->assistance_password)); + remmina_file_set_int(priv->remmina_file, "assistance_mode", 1); + }else{ + remmina_file_set_int(priv->remmina_file, "assistance_mode", 0); + } + + } + if (priv->keymap_combo) remmina_file_set_string(priv->remmina_file, "keymap", remmina_public_combo_get_active_text(GTK_COMBO_BOX(priv->keymap_combo))); diff --git a/src/remmina_plugin_manager.c b/src/remmina_plugin_manager.c index 1b056ea34..6a0f24483 100644 --- a/src/remmina_plugin_manager.c +++ b/src/remmina_plugin_manager.c @@ -460,6 +460,8 @@ const gchar *remmina_plugin_manager_get_canonical_setting_name(const RemminaProt return "password"; if (setting->type == REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION) return "resolution"; + if (setting->type == REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE) + return "assistance_mode"; return "missing_setting_name_into_plugin_RemminaProtocolSetting"; } return setting->name; |