Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/Remmina/Remmina.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/rdp/rdp_event.c50
-rw-r--r--plugins/rdp/rdp_plugin.c223
-rw-r--r--plugins/rdp/rdp_settings.c157
-rw-r--r--plugins/vnc/vnc_plugin.c161
4 files changed, 324 insertions, 267 deletions
diff --git a/plugins/rdp/rdp_event.c b/plugins/rdp/rdp_event.c
index 181abc948..7f5d8fd4b 100644
--- a/plugins/rdp/rdp_event.c
+++ b/plugins/rdp/rdp_event.c
@@ -48,8 +48,8 @@
gboolean remmina_rdp_event_on_map(RemminaProtocolWidget *gp)
{
TRACE_CALL(__func__);
- rfContext* rfi = GET_PLUGIN_DATA(gp);
- rdpGdi* gdi;
+ rfContext *rfi = GET_PLUGIN_DATA(gp);
+ rdpGdi *gdi;
if (rfi == NULL)
return false;
@@ -65,14 +65,15 @@ gboolean remmina_rdp_event_on_map(RemminaProtocolWidget *gp)
gboolean remmina_rdp_event_on_unmap(RemminaProtocolWidget *gp)
{
TRACE_CALL(__func__);
- rfContext* rfi = GET_PLUGIN_DATA(gp);
- rdpGdi* gdi;
+ rfContext *rfi = GET_PLUGIN_DATA(gp);
+ rdpGdi *gdi;
if (rfi == NULL)
return false;
GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(gp));
GdkWindow *window = gtk_widget_get_window(toplevel);
+
if (gdk_window_get_fullscreen_mode(window) == GDK_FULLSCREEN_ON_ALL_MONITORS) {
REMMINA_PLUGIN_DEBUG("Unmap event received, but cannot enable TS_SUPPRESS_OUTPUT_PDU when in fullscreen");
return FALSE;
@@ -203,6 +204,7 @@ static void keypress_list_add(RemminaProtocolWidget *gp, RemminaPluginRdpEvent r
{
TRACE_CALL(__func__);
rfContext *rfi = GET_PLUGIN_DATA(gp);
+
if (!rdp_event.key_event.key_code)
return;
@@ -210,7 +212,6 @@ static void keypress_list_add(RemminaProtocolWidget *gp, RemminaPluginRdpEvent r
remmina_rdp_event_release_key(gp, rdp_event);
else
g_array_append_val(rfi->pressed_keys, rdp_event);
-
}
@@ -393,6 +394,7 @@ static gboolean remmina_rdp_event_delayed_monitor_layout(RemminaProtocolWidget *
gchar *monitorids = NULL;
guint32 maxwidth = 0;
guint32 maxheight = 0;
+
remmina_rdp_monitor_get(rfi, &monitorids, &maxwidth, &maxheight);
REMMINA_PLUGIN_DEBUG("Sending preconfigured monitor layout");
@@ -414,9 +416,9 @@ static gboolean remmina_rdp_event_delayed_monitor_layout(RemminaProtocolWidget *
}
rdp_event.type = REMMINA_RDP_EVENT_TYPE_SEND_MONITOR_LAYOUT;
if (remmina_plugin_service->file_get_int(remminafile, "multimon", FALSE)) {
- const rdpMonitor* base = freerdp_settings_get_pointer(rfi->settings, FreeRDP_MonitorDefArray);
+ const rdpMonitor *base = freerdp_settings_get_pointer(rfi->settings, FreeRDP_MonitorDefArray);
for (gint i = 0; i < freerdp_settings_get_uint32(rfi->settings, FreeRDP_MonitorCount); ++i) {
- const rdpMonitor* current = &base[i];
+ const rdpMonitor *current = &base[i];
REMMINA_PLUGIN_DEBUG("Sending display layout n° %d", i);
rdp_event.monitor_layout.Flags = current->is_primary;
REMMINA_PLUGIN_DEBUG("EVNT MON LAYOUT - Flags: %i", rdp_event.monitor_layout.Flags);
@@ -443,7 +445,6 @@ static gboolean remmina_rdp_event_delayed_monitor_layout(RemminaProtocolWidget *
}
remmina_rdp_event_event_push(gp, &rdp_event);
} else {
-
rdp_event.monitor_layout.width = gpwidth;
rdp_event.monitor_layout.height = gpheight;
rdp_event.monitor_layout.desktopOrientation = desktopOrientation;
@@ -463,6 +464,7 @@ void remmina_rdp_event_send_delayed_monitor_layout(RemminaProtocolWidget *gp)
{
TRACE_CALL(__func__);
rfContext *rfi = GET_PLUGIN_DATA(gp);
+
if (!rfi || !rfi->connected || rfi->is_reconnecting)
return;
if (rfi->delayed_monitor_layout_handler) {
@@ -471,7 +473,6 @@ void remmina_rdp_event_send_delayed_monitor_layout(RemminaProtocolWidget *gp)
}
if (rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_DYNRES)
rfi->delayed_monitor_layout_handler = g_timeout_add(500, (GSourceFunc)remmina_rdp_event_delayed_monitor_layout, gp);
-
}
static gboolean remmina_rdp_event_on_configure(GtkWidget *widget, GdkEventConfigure *event, RemminaProtocolWidget *gp)
@@ -480,6 +481,7 @@ static gboolean remmina_rdp_event_on_configure(GtkWidget *widget, GdkEventConfig
/* Called when gp changes its size or position */
rfContext *rfi = GET_PLUGIN_DATA(gp);
+
if (!rfi || !rfi->connected || rfi->is_reconnecting)
return FALSE;
@@ -822,6 +824,7 @@ gboolean remmina_rdp_event_on_clipboard(GtkClipboard *gtkClipboard, GdkEvent *ev
REMMINA_PLUGIN_DEBUG("owner-change event received");
rfContext *rfi = GET_PLUGIN_DATA(gp);
+
if (rfi)
remmina_rdp_clipboard_abort_transfer(rfi);
@@ -850,9 +853,20 @@ void remmina_rdp_event_init(RemminaProtocolWidget *gp)
GtkClipboard *clipboard;
RemminaFile *remminafile;
+ gboolean disable_smooth_scrolling = FALSE;
+
if (!rfi) return;
remminafile = remmina_plugin_service->protocol_plugin_get_file(gp);
+ /* we get first the global preferences */
+ s = remmina_plugin_service->pref_get_value("rdp_disable_smooth_scrolling");
+ disable_smooth_scrolling = (s && s[0] == '1' ? TRUE : FALSE);
+ g_free(s), s = NULL;
+ /* Otherwise we use the connection profile specific setting */
+ disable_smooth_scrolling = remmina_plugin_service->file_get_int(remminafile, "disable-smooth-scrolling", disable_smooth_scrolling);
+
+ REMMINA_PLUGIN_DEBUG("Disable smooth scrolling is set to %d", disable_smooth_scrolling);
+
rfi->drawing_area = gtk_drawing_area_new();
gtk_widget_show(rfi->drawing_area);
gtk_container_add(GTK_CONTAINER(gp), rfi->drawing_area);
@@ -860,23 +874,26 @@ void remmina_rdp_event_init(RemminaProtocolWidget *gp)
gtk_widget_add_events(rfi->drawing_area, GDK_POINTER_MOTION_MASK
| GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
| GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK
-#if GTK_CHECK_VERSION(3, 4, 0)
- | GDK_SMOOTH_SCROLL_MASK
-#endif
| GDK_SCROLL_MASK | GDK_FOCUS_CHANGE_MASK);
+
+ if (!disable_smooth_scrolling) {
+ REMMINA_PLUGIN_DEBUG("Adding GDK_SMOOTH_SCROLL_MASK");
+ gtk_widget_add_events(rfi->drawing_area, GDK_SMOOTH_SCROLL_MASK);
+ }
+
gtk_widget_set_can_focus(rfi->drawing_area, TRUE);
remmina_plugin_service->protocol_plugin_register_hostkey(gp, rfi->drawing_area);
s = remmina_plugin_service->pref_get_value("rdp_use_client_keymap");
rfi->use_client_keymap = (s && s[0] == '1' ? TRUE : FALSE);
- g_free(s);
+ g_free(s), s = NULL;
/* Read special keymap from profile file, if exists */
remmina_rdp_event_init_keymap(rfi, remmina_plugin_service->pref_get_value("rdp_map_keycode"));
if (rfi->use_client_keymap && rfi->keymap)
- fprintf(stderr, "RDP profile error: you cannot define both rdp_map_hardware_keycode and have 'Use client keuboard mapping' enabled\n");
+ fprintf(stderr, "RDP profile error: you cannot define both rdp_map_hardware_keycode and have 'Use client keyboard mapping' enabled\n");
g_signal_connect(G_OBJECT(rfi->drawing_area), "draw",
G_CALLBACK(remmina_rdp_event_on_draw), gp);
@@ -1097,6 +1114,7 @@ static void remmina_rdp_event_reconnect_progress(RemminaProtocolWidget *gp, Remm
{
TRACE_CALL(__func__);
rfContext *rfi = GET_PLUGIN_DATA(gp);
+
gdk_window_invalidate_rect(gtk_widget_get_window(rfi->drawing_area), NULL, TRUE);
}
@@ -1141,6 +1159,7 @@ static BOOL remmina_rdp_event_set_pointer_position(RemminaProtocolWidget *gp, gi
TRACE_CALL(__func__);
GdkWindow *w, *nw;
gint nx, ny, wx, wy;
+
#if GTK_CHECK_VERSION(3, 20, 0)
GdkSeat *seat;
#else
@@ -1230,6 +1249,7 @@ static void remmina_rdp_ui_event_destroy_cairo_surface(RemminaProtocolWidget *gp
{
TRACE_CALL(__func__);
rfContext *rfi = GET_PLUGIN_DATA(gp);
+
cairo_surface_destroy(rfi->surface);
rfi->surface = NULL;
}
@@ -1369,6 +1389,7 @@ int remmina_rdp_event_queue_ui_sync_retint(RemminaProtocolWidget *gp, RemminaPlu
{
TRACE_CALL(__func__);
int retval;
+
ui->sync = TRUE;
remmina_rdp_event_queue_ui(gp, ui);
retval = ui->retval;
@@ -1380,6 +1401,7 @@ void *remmina_rdp_event_queue_ui_sync_retptr(RemminaProtocolWidget *gp, RemminaP
{
TRACE_CALL(__func__);
void *rp;
+
ui->sync = TRUE;
remmina_rdp_event_queue_ui(gp, ui);
rp = ui->retptr;
diff --git a/plugins/rdp/rdp_plugin.c b/plugins/rdp/rdp_plugin.c
index 08e534111..0c1557d06 100644
--- a/plugins/rdp/rdp_plugin.c
+++ b/plugins/rdp/rdp_plugin.c
@@ -261,9 +261,9 @@ static BOOL rf_process_event_queue(RemminaProtocolWidget *gp)
if (!dcml)
break;
- const rdpMonitor* base = freerdp_settings_get_pointer(rfi->settings, FreeRDP_MonitorDefArray);
+ const rdpMonitor *base = freerdp_settings_get_pointer(rfi->settings, FreeRDP_MonitorDefArray);
for (gint i = 0; i < freerdp_settings_get_uint32(rfi->settings, FreeRDP_MonitorCount); ++i) {
- const rdpMonitor* current = &base[i];
+ const rdpMonitor *current = &base[i];
REMMINA_PLUGIN_DEBUG("Sending display layout for monitor n° %d", i);
dcml[i].Flags = (current->is_primary ? DISPLAY_CONTROL_MONITOR_PRIMARY : 0);
REMMINA_PLUGIN_DEBUG("Monitor %d is primary: %d", i, dcml[i].Flags);
@@ -299,7 +299,7 @@ static BOOL rf_process_event_queue(RemminaProtocolWidget *gp)
dcml->DesktopScaleFactor = event->monitor_layout.desktopScaleFactor;
dcml->DeviceScaleFactor = event->monitor_layout.deviceScaleFactor;
rfi->dispcontext->SendMonitorLayout(rfi->dispcontext, 1, dcml);
- g_free(dcml);\
+ g_free(dcml); \
}
}
break;
@@ -332,6 +332,7 @@ static gboolean remmina_rdp_tunnel_init(RemminaProtocolWidget *gp)
gint port;
rfContext *rfi = GET_PLUGIN_DATA(gp);
+
REMMINA_PLUGIN_DEBUG("Tunnel init");
hostport = remmina_plugin_service->protocol_plugin_start_direct_tunnel(gp, 3389, FALSE);
if (hostport == NULL)
@@ -386,15 +387,15 @@ BOOL rf_auto_reconnect(rfContext *rfi)
/* Only auto reconnect on network disconnects. */
switch (freerdp_error_info(rfi->instance)) {
- case ERRINFO_GRAPHICS_SUBSYSTEM_FAILED:
- /* Disconnected by server hitting a bug or resource limit */
- break;
- case ERRINFO_SUCCESS:
- /* A network disconnect was detected */
- break;
- default:
- rfi->is_reconnecting = FALSE;
- return FALSE;
+ case ERRINFO_GRAPHICS_SUBSYSTEM_FAILED:
+ /* Disconnected by server hitting a bug or resource limit */
+ break;
+ case ERRINFO_SUCCESS:
+ /* A network disconnect was detected */
+ break;
+ default:
+ rfi->is_reconnecting = FALSE;
+ return FALSE;
}
if (!freerdp_settings_get_bool(settings, FreeRDP_AutoReconnectionEnabled)) {
@@ -405,7 +406,7 @@ BOOL rf_auto_reconnect(rfContext *rfi)
/* A network disconnect was detected and we should try to reconnect */
REMMINA_PLUGIN_DEBUG("[%s] network disconnection detected, initiating reconnection attempt",
- freerdp_settings_get_string(rfi->settings, FreeRDP_ServerHostname));
+ freerdp_settings_get_string(rfi->settings, FreeRDP_ServerHostname));
ui = g_new0(RemminaPluginRdpUiObject, 1);
ui->type = REMMINA_RDP_UI_RECONNECT_PROGRESS;
@@ -423,13 +424,13 @@ BOOL rf_auto_reconnect(rfContext *rfi)
/* Quit retrying if max retries has been exceeded */
if (rfi->reconnect_nattempt++ >= rfi->reconnect_maxattempts) {
REMMINA_PLUGIN_DEBUG("[%s] maximum number of reconnection attempts exceeded.",
- freerdp_settings_get_string(rfi->settings, FreeRDP_ServerHostname));
+ freerdp_settings_get_string(rfi->settings, FreeRDP_ServerHostname));
break;
}
/* Attempt the next reconnect */
REMMINA_PLUGIN_DEBUG("[%s] reconnection, attempt #%d of %d",
- freerdp_settings_get_string(rfi->settings, FreeRDP_ServerHostname), rfi->reconnect_nattempt, rfi->reconnect_maxattempts);
+ freerdp_settings_get_string(rfi->settings, FreeRDP_ServerHostname), rfi->reconnect_nattempt, rfi->reconnect_maxattempts);
ui = g_new0(RemminaPluginRdpUiObject, 1);
ui->type = REMMINA_RDP_UI_RECONNECT_PROGRESS;
@@ -440,7 +441,7 @@ BOOL rf_auto_reconnect(rfContext *rfi)
/* Reconnect the SSH tunnel, if needed */
if (!remmina_rdp_tunnel_init(rfi->protocol_widget)) {
REMMINA_PLUGIN_DEBUG("[%s] unable to recreate tunnel with remmina_rdp_tunnel_init.",
- freerdp_settings_get_string(rfi->settings, FreeRDP_ServerHostname));
+ freerdp_settings_get_string(rfi->settings, FreeRDP_ServerHostname));
} else {
if (freerdp_reconnect(rfi->instance)) {
/* Reconnection is successful */
@@ -617,9 +618,9 @@ BOOL rf_keyboard_set_ime_status(rdpContext *context, UINT16 imeId, UINT32 imeSta
static BOOL remmina_rdp_pre_connect(freerdp *instance)
{
TRACE_CALL(__func__);
- rdpChannels* channels;
+ rdpChannels *channels;
rdpSettings *settings;
- rdpContext* context = instance->context;
+ rdpContext *context = instance->context;
settings = instance->settings;
channels = context->channels;
@@ -631,9 +632,9 @@ static BOOL remmina_rdp_pre_connect(freerdp *instance)
PubSub_SubscribeChannelConnected(instance->context->pubSub,
(pChannelConnectedEventHandler)remmina_rdp_OnChannelConnectedEventHandler);
PubSub_SubscribeChannelDisconnected(instance->context->pubSub,
- (pChannelDisconnectedEventHandler)remmina_rdp_OnChannelDisconnectedEventHandler);
+ (pChannelDisconnectedEventHandler)remmina_rdp_OnChannelDisconnectedEventHandler);
- if(!freerdp_client_load_addins(channels, settings))
+ if (!freerdp_client_load_addins(channels, settings))
return FALSE;
return True;
@@ -662,25 +663,25 @@ static BOOL remmina_rdp_post_connect(freerdp *instance)
REMMINA_PLUGIN_DEBUG("bpp: %d", rfi->bpp);
switch (rfi->bpp) {
- case 24:
- REMMINA_PLUGIN_DEBUG("CAIRO_FORMAT_RGB24");
- freerdp_local_color_format = PIXEL_FORMAT_BGRX32;
- rfi->cairo_format = CAIRO_FORMAT_RGB24;
- break;
- case 32:
- /** Do not use alpha as it's not used with the desktop
- * CAIRO_FORMAT_ARGB32
- * See https://gitlab.com/Remmina/Remmina/-/issues/2456
- */
- REMMINA_PLUGIN_DEBUG("CAIRO_FORMAT_RGB24");
- freerdp_local_color_format = PIXEL_FORMAT_BGRA32;
- rfi->cairo_format = CAIRO_FORMAT_RGB24;
- break;
- default:
- REMMINA_PLUGIN_DEBUG("CAIRO_FORMAT_RGB16_565");
- freerdp_local_color_format = PIXEL_FORMAT_RGB16;
- rfi->cairo_format = CAIRO_FORMAT_RGB16_565;
- break;
+ case 24:
+ REMMINA_PLUGIN_DEBUG("CAIRO_FORMAT_RGB24");
+ freerdp_local_color_format = PIXEL_FORMAT_BGRX32;
+ rfi->cairo_format = CAIRO_FORMAT_RGB24;
+ break;
+ case 32:
+ /** Do not use alpha as it's not used with the desktop
+ * CAIRO_FORMAT_ARGB32
+ * See https://gitlab.com/Remmina/Remmina/-/issues/2456
+ */
+ REMMINA_PLUGIN_DEBUG("CAIRO_FORMAT_RGB24");
+ freerdp_local_color_format = PIXEL_FORMAT_BGRA32;
+ rfi->cairo_format = CAIRO_FORMAT_RGB24;
+ break;
+ default:
+ REMMINA_PLUGIN_DEBUG("CAIRO_FORMAT_RGB16_565");
+ freerdp_local_color_format = PIXEL_FORMAT_RGB16;
+ rfi->cairo_format = CAIRO_FORMAT_RGB16_565;
+ break;
}
if (!gdi_init(instance, freerdp_local_color_format)) {
@@ -854,8 +855,8 @@ static BOOL remmina_rdp_gw_authenticate(freerdp *instance, char **username, char
}
static DWORD remmina_rdp_verify_certificate_ex(freerdp *instance, const char *host, UINT16 port,
- const char *common_name, const char *subject,
- const char *issuer, const char *fingerprint, DWORD flags)
+ const char *common_name, const char *subject,
+ const char *issuer, const char *fingerprint, DWORD flags)
{
TRACE_CALL(__func__);
gint status;
@@ -874,11 +875,10 @@ static DWORD remmina_rdp_verify_certificate_ex(freerdp *instance, const char *ho
}
static DWORD
-remmina_rdp_verify_certificate(freerdp *instance, const char *common_name, const char *subject,
- const char *issuer, const char *fingerprint, BOOL host_mismatch) __attribute__ ((unused));
+remmina_rdp_verify_certificate(freerdp *instance, const char *common_name, const char *subject, const char *issuer, const char *fingerprint, BOOL host_mismatch) __attribute__ ((unused));
static DWORD
remmina_rdp_verify_certificate(freerdp *instance, const char *common_name, const char *subject,
- const char *issuer, const char *fingerprint, BOOL host_mismatch)
+ const char *issuer, const char *fingerprint, BOOL host_mismatch)
{
TRACE_CALL(__func__);
gint status;
@@ -897,10 +897,10 @@ remmina_rdp_verify_certificate(freerdp *instance, const char *common_name, const
}
static DWORD remmina_rdp_verify_changed_certificate_ex(freerdp *instance, const char *host, UINT16 port,
- const char *common_name, const char *subject,
- const char *issuer, const char *fingerprint,
- const char *old_subject, const char *old_issuer,
- const char *old_fingerprint, DWORD flags)
+ const char *common_name, const char *subject,
+ const char *issuer, const char *fingerprint,
+ const char *old_subject, const char *old_issuer,
+ const char *old_fingerprint, DWORD flags)
{
TRACE_CALL(__func__);
gint status;
@@ -928,7 +928,7 @@ static void remmina_rdp_post_disconnect(freerdp *instance)
PubSub_UnsubscribeChannelConnected(instance->context->pubSub,
(pChannelConnectedEventHandler)remmina_rdp_OnChannelConnectedEventHandler);
PubSub_UnsubscribeChannelDisconnected(instance->context->pubSub,
- (pChannelDisconnectedEventHandler)remmina_rdp_OnChannelDisconnectedEventHandler);
+ (pChannelDisconnectedEventHandler)remmina_rdp_OnChannelDisconnectedEventHandler);
/* The remaining cleanup will be continued on main thread by complete_cleanup_on_main_thread() */
}
@@ -996,6 +996,7 @@ int remmina_rdp_load_static_channel_addin(rdpChannels *channels, rdpSettings *se
TRACE_CALL(__func__);
PVIRTUALCHANNELENTRY entry = NULL;
PVIRTUALCHANNELENTRYEX entryEx = NULL;
+
entryEx = (PVIRTUALCHANNELENTRYEX)(void *)freerdp_load_channel_addin_entry(
name, NULL, NULL, FREERDP_ADDIN_CHANNEL_STATIC | FREERDP_ADDIN_CHANNEL_ENTRYEX);
@@ -1024,11 +1025,11 @@ gchar *remmina_rdp_find_prdriver(char *smap, char *prn)
size_t sz;
enum { S_WAITPR,
- S_INPRINTER,
- S_WAITCOLON,
- S_WAITDRIVER,
- S_INDRIVER,
- S_WAITSEMICOLON } state = S_WAITPR;
+ S_INPRINTER,
+ S_WAITCOLON,
+ S_WAITDRIVER,
+ S_INDRIVER,
+ S_WAITSEMICOLON } state = S_WAITPR;
matching = 0;
while ((c = *smap++) != 0) {
@@ -1118,6 +1119,7 @@ int remmina_rdp_set_printers(void *user_data, unsigned flags, cups_dest_t *dest)
const gchar *s = remmina_plugin_service->file_get_string(remminafile, "printer_overrides");
RDPDR_PRINTER *printer;
+
printer = (RDPDR_PRINTER *)calloc(1, sizeof(RDPDR_PRINTER));
printer->Type = RDPDR_DTYP_PRINT;
@@ -1270,15 +1272,14 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
remminafile = remmina_plugin_service->protocol_plugin_get_file(gp);
datapath = g_build_path("/",
- remmina_plugin_service->file_get_user_datadir(),
- "RDP",
- NULL);
+ remmina_plugin_service->file_get_user_datadir(),
+ "RDP",
+ NULL);
REMMINA_PLUGIN_DEBUG("RDP data path is %s", datapath);
- if ((datapath != NULL) && (datapath[0] != '\0')) {
+ if ((datapath != NULL) && (datapath[0] != '\0'))
if (access(datapath, W_OK) == 0)
freerdp_settings_set_string(rfi->settings, FreeRDP_ConfigPath, datapath);
- }
g_free(datapath);
#if defined(PROXY_TYPE_IGNORE)
@@ -1296,7 +1297,7 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
if (remmina_plugin_service->file_get_int(remminafile, "ssh_tunnel_enabled", FALSE))
freerdp_settings_set_bool(rfi->settings, FreeRDP_AutoReconnectionEnabled, FALSE);
- freerdp_settings_set_uint32(rfi->settings, FreeRDP_ColorDepth,remmina_plugin_service->file_get_int(remminafile, "colordepth", 99));
+ freerdp_settings_set_uint32(rfi->settings, FreeRDP_ColorDepth, remmina_plugin_service->file_get_int(remminafile, "colordepth", 99));
freerdp_settings_set_bool(rfi->settings, FreeRDP_SoftwareGdi, TRUE);
REMMINA_PLUGIN_DEBUG("gfx_h264_available: %d", gfx_h264_available);
@@ -1345,8 +1346,8 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
}
if (freerdp_settings_get_bool(rfi->settings, FreeRDP_RemoteFxCodec) ||
- freerdp_settings_get_bool(rfi->settings, FreeRDP_NSCodec) ||
- freerdp_settings_get_bool(rfi->settings, FreeRDP_SupportGraphicsPipeline) ) {
+ freerdp_settings_get_bool(rfi->settings, FreeRDP_NSCodec) ||
+ freerdp_settings_get_bool(rfi->settings, FreeRDP_SupportGraphicsPipeline)) {
freerdp_settings_set_bool(rfi->settings, FreeRDP_FastPathOutput, TRUE);
freerdp_settings_set_bool(rfi->settings, FreeRDP_FrameMarkerCommandEnabled, TRUE);
freerdp_settings_set_uint32(rfi->settings, FreeRDP_ColorDepth, 32);
@@ -1360,21 +1361,21 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
h = (h + 3) & ~0x3;
freerdp_settings_set_uint32(rfi->settings, FreeRDP_DesktopWidth, w);
freerdp_settings_set_uint32(rfi->settings, FreeRDP_DesktopHeight, h);
- REMMINA_PLUGIN_DEBUG ("Resolution set by the user: %dx%d", w, h);
+ REMMINA_PLUGIN_DEBUG("Resolution set by the user: %dx%d", w, h);
/* Workaround for FreeRDP issue #5417: in GFX AVC modes we can't go under
* AVC_MIN_DESKTOP_WIDTH x AVC_MIN_DESKTOP_HEIGHT */
if (freerdp_settings_get_bool(rfi->settings, FreeRDP_SupportGraphicsPipeline) &&
- freerdp_settings_get_bool(rfi->settings, FreeRDP_GfxH264)) {
+ freerdp_settings_get_bool(rfi->settings, FreeRDP_GfxH264)) {
if (freerdp_settings_get_uint32(rfi->settings, FreeRDP_DesktopWidth) <
- AVC_MIN_DESKTOP_WIDTH)
+ AVC_MIN_DESKTOP_WIDTH)
freerdp_settings_set_uint32(rfi->settings, FreeRDP_DesktopWidth,
- AVC_MIN_DESKTOP_WIDTH);
+ AVC_MIN_DESKTOP_WIDTH);
if (freerdp_settings_get_uint32(rfi->settings,
- FreeRDP_DesktopHeight) <
- AVC_MIN_DESKTOP_HEIGHT)
+ FreeRDP_DesktopHeight) <
+ AVC_MIN_DESKTOP_HEIGHT)
freerdp_settings_set_uint32(rfi->settings, FreeRDP_DesktopHeight,
- AVC_MIN_DESKTOP_HEIGHT);
+ AVC_MIN_DESKTOP_HEIGHT);
}
/* Workaround for FreeRDP issue #5119. This will make our horizontal resolution
@@ -1390,7 +1391,7 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
w = freerdp_settings_get_uint32(rfi->settings, FreeRDP_DesktopWidth);
h = freerdp_settings_get_uint32(rfi->settings, FreeRDP_DesktopHeight);
- REMMINA_PLUGIN_DEBUG ("Resolution set after workarounds: %dx%d", w, h);
+ REMMINA_PLUGIN_DEBUG("Resolution set after workarounds: %dx%d", w, h);
if (remmina_plugin_service->file_get_string(remminafile, "username"))
@@ -1503,10 +1504,10 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
remmina_plugin_service->file_get_int(remminafile, "gateway_usage", FALSE) ? TSC_PROXY_MODE_DETECT : TSC_PROXY_MODE_DIRECT);
freerdp_settings_set_string(rfi->settings, FreeRDP_GatewayAccessToken,
- remmina_plugin_service->file_get_string(remminafile, "gatewayaccesstoken"));
+ remmina_plugin_service->file_get_string(remminafile, "gatewayaccesstoken"));
freerdp_settings_set_uint32(rfi->settings, FreeRDP_AuthenticationLevel, remmina_plugin_service->file_get_int(
- remminafile, "authentication level", freerdp_settings_get_uint32(rfi->settings, FreeRDP_AuthenticationLevel)));
+ remminafile, "authentication level", freerdp_settings_get_uint32(rfi->settings, FreeRDP_AuthenticationLevel)));
/* Certificate ignore */
freerdp_settings_set_bool(rfi->settings, FreeRDP_IgnoreCertificate, remmina_plugin_service->file_get_int(remminafile, "cert_ignore", 0));
@@ -1529,7 +1530,7 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
if (remmina_plugin_service->file_get_string(remminafile, "loadbalanceinfo")) {
- char* tmp = strdup(remmina_plugin_service->file_get_string(remminafile, "loadbalanceinfo"));
+ char *tmp = strdup(remmina_plugin_service->file_get_string(remminafile, "loadbalanceinfo"));
rfi->settings->LoadBalanceInfo = (BYTE *)tmp;
freerdp_settings_set_uint32(rfi->settings, FreeRDP_LoadBalanceInfoLength, strlen(tmp));
@@ -1846,13 +1847,13 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
if (monitorids_string != NULL && monitorids_string[0] != '\0') {
if (g_strstr_len(monitorids_string, -1, ",") != NULL) {
if (g_strstr_len(monitorids_string, -1, ":") != NULL) {
- rdpMonitor* base = (rdpMonitor *)freerdp_settings_get_pointer(rfi->settings, FreeRDP_MonitorDefArray);
+ rdpMonitor *base = (rdpMonitor *)freerdp_settings_get_pointer(rfi->settings, FreeRDP_MonitorDefArray);
/* We have an ID and an orientation degree */
gchar **temp_items;
gchar **rot_items;
temp_items = g_strsplit(monitorids_string, ",", -1);
for (i = 0; i < g_strv_length(temp_items); i++) {
- rdpMonitor* current = &base[atoi(rot_items[0])];
+ rdpMonitor *current = &base[atoi(rot_items[0])];
rot_items = g_strsplit(temp_items[i], ":", -1);
if (i == 0)
monitorids = g_strdup(rot_items[0]);
@@ -1861,21 +1862,24 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
current->attributes.orientation = atoi(rot_items[1]);
REMMINA_PLUGIN_DEBUG("Monitor n %d orientation: %d", i, current->attributes.orientation);
}
- } else
+ } else {
monitorids = g_strdup(monitorids_string);
- } else
+ }
+ } else {
monitorids = g_strdup(monitorids_string);
- } else
+ }
+ } else {
monitorids = g_strdup(monitorids_string);
+ }
remmina_rdp_monitor_get(rfi, &monitorids, &maxwidth, &maxheight);
if (monitorids != NULL && monitorids[0] != '\0') {
- UINT32* base = (UINT32 *)freerdp_settings_get_pointer(rfi->settings, FreeRDP_MonitorIds);
+ UINT32 *base = (UINT32 *)freerdp_settings_get_pointer(rfi->settings, FreeRDP_MonitorIds);
gchar **items;
items = g_strsplit(monitorids, ",", -1);
freerdp_settings_set_uint32(rfi->settings, FreeRDP_NumMonitorIds, g_strv_length(items));
REMMINA_PLUGIN_DEBUG("NumMonitorIds: %d", freerdp_settings_get_uint32(rfi->settings, FreeRDP_NumMonitorIds));
for (i = 0; i < g_strv_length(items); i++) {
- UINT32* current = &base[i];
+ UINT32 *current = &base[i];
*current = atoi(items[i]);
REMMINA_PLUGIN_DEBUG("Added monitor with ID %" PRIu32, *current);
}
@@ -1975,7 +1979,7 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
freerdp_settings_set_bool(rfi->settings, FreeRDP_DeviceRedirection, TRUE);
freerdp_settings_set_bool(rfi->settings, FreeRDP_SupportMultitransport, TRUE);
freerdp_settings_set_uint32(rfi->settings, FreeRDP_MultitransportFlags,
- (TRANSPORT_TYPE_UDP_FECR | TRANSPORT_TYPE_UDP_FECL | TRANSPORT_TYPE_UDP_PREFERRED));
+ (TRANSPORT_TYPE_UDP_FECR | TRANSPORT_TYPE_UDP_FECL | TRANSPORT_TYPE_UDP_PREFERRED));
} else {
freerdp_settings_set_uint32(rfi->settings, FreeRDP_MultitransportFlags, 0);
}
@@ -1998,7 +2002,7 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
gboolean orphaned;
if (!freerdp_connect(rfi->instance)) {
- orphaned = (GET_PLUGIN_DATA(rfi->protocol_widget) == NULL);
+ orphaned = (GET_PLUGIN_DATA(rfi->protocol_widget) == NULL);
if (!orphaned) {
UINT32 e;
@@ -2006,7 +2010,7 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
switch (e) {
case FREERDP_ERROR_AUTHENTICATION_FAILED:
- case STATUS_LOGON_FAILURE: // wrong return code from FreeRDP introduced at the end of July 2016? (fixed with b86c0ba)
+ case STATUS_LOGON_FAILURE: // wrong return code from FreeRDP introduced at the end of July 2016? (fixed with b86c0ba)
#ifdef FREERDP_ERROR_CONNECT_LOGON_FAILURE
case FREERDP_ERROR_CONNECT_LOGON_FAILURE:
#endif
@@ -2153,7 +2157,7 @@ static void rfi_uninit(rfContext *rfi)
IFCALL(pEntryPoints->GlobalUninit);
free(instance->pClientEntryPoints);
freerdp_context_free(instance); /* context is rfContext* rfi */
- freerdp_free(instance); /* This implicitly frees instance->context and rfi is no longer valid */
+ freerdp_free(instance); /* This implicitly frees instance->context and rfi is no longer valid */
}
}
@@ -2197,6 +2201,7 @@ static gpointer remmina_rdp_main_thread(gpointer data)
CANCEL_ASYNC
gp = (RemminaProtocolWidget *)data;
+
rfi = GET_PLUGIN_DATA(gp);
rfi->attempt_interactive_authentication = FALSE;
@@ -2351,8 +2356,9 @@ static void remmina_rdp_call_feature(RemminaProtocolWidget *gp, const RemminaPro
if (rfi) {
rfi->scale = remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp);
remmina_rdp_event_update_scale(gp);
- } else
+ } else {
REMMINA_PLUGIN_DEBUG("Remmina RDP plugin warning: Null value for rfi by REMMINA_RDP_FEATURE_SCALE");
+ }
break;
case REMMINA_RDP_FEATURE_MULTIMON:
@@ -2365,10 +2371,9 @@ static void remmina_rdp_call_feature(RemminaProtocolWidget *gp, const RemminaPro
freerdp_settings_set_bool(rfi->settings, FreeRDP_Fullscreen, TRUE);
remmina_rdp_event_send_delayed_monitor_layout(gp);
}
-
- }
- else
+ } else {
REMMINA_PLUGIN_DEBUG("Remmina RDP plugin warning: Null value for rfi by REMMINA_RDP_FEATURE_MULTIMON");
+ }
break;
case REMMINA_RDP_FEATURE_DYNRESUPDATE:
@@ -2377,8 +2382,8 @@ static void remmina_rdp_call_feature(RemminaProtocolWidget *gp, const RemminaPro
case REMMINA_RDP_FEATURE_TOOL_REFRESH:
if (rfi)
gtk_widget_queue_draw_area(rfi->drawing_area, 0, 0,
- remmina_plugin_service->protocol_plugin_get_width(gp),
- remmina_plugin_service->protocol_plugin_get_height(gp));
+ remmina_plugin_service->protocol_plugin_get_width(gp),
+ remmina_plugin_service->protocol_plugin_get_height(gp));
else
REMMINA_PLUGIN_DEBUG("Remmina RDP plugin warning: Null value for rfi by REMMINA_RDP_FEATURE_TOOL_REFRESH");
break;
@@ -2397,6 +2402,7 @@ static void remmina_rdp_keystroke(RemminaProtocolWidget *gp, const guint keystro
{
TRACE_CALL(__func__);
rfContext *rfi = GET_PLUGIN_DATA(gp);
+
remmina_plugin_service->protocol_plugin_send_keys_signals(rfi->drawing_area,
keystrokes, keylen, GDK_KEY_PRESS | GDK_KEY_RELEASE);
return;
@@ -2500,16 +2506,16 @@ static gpointer network_list[] =
/* Array of key/value pairs for sound options */
static gpointer sound_list[] =
{
- "off", N_("Off"),
- "local", N_("Local"),
- "remote", N_("Remote"),
+ "off", N_("Off"),
+ "local", N_("Local"),
+ "remote", N_("Remote"),
NULL
};
/* Array of key/value pairs for security */
static gpointer security_list[] =
{
- "", N_("Automatic negotiation"),
+ "", N_("Automatic negotiation"),
"nla", N_("NLA protocol security"),
"tls", N_("TLS protocol security"),
"rdp", N_("RDP protocol security"),
@@ -2595,19 +2601,20 @@ static gchar monitorids_tooltip[] =
*/
static const RemminaProtocolSetting remmina_rdp_basic_settings[] =
{
- { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, "server", NULL, FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("Username"), FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("Password"), FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "domain", N_("Domain"), FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "left-handed", N_("Left-handed mouse support"), FALSE, NULL, N_("Swap left and right mouse buttons for left-handed mouse support") },
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "multimon", N_("Enable multi monitor"), TRUE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "span", N_("Span screen over multiple monitors"), TRUE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "monitorids", N_("List monitor IDs"), FALSE, NULL, monitorids_tooltip },
- { REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION, "resolution", NULL, FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Colour depth"), FALSE, colordepth_list, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "network", N_("Network connection type"), FALSE, network_list, network_tooltip },
- { REMMINA_PROTOCOL_SETTING_TYPE_FOLDER, "sharefolder", N_("Share folder"), FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL }
+ { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, "server", NULL, FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("Username"), FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("Password"), FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "domain", N_("Domain"), FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "left-handed", N_("Left-handed mouse support"), TRUE, NULL, N_("Swap left and right mouse buttons for left-handed mouse support") },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disable-smooth-scrolling", N_("Disable smooth scrolling"), TRUE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "multimon", N_("Enable multi monitor"), TRUE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "span", N_("Span screen over multiple monitors"), TRUE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "monitorids", N_("List monitor IDs"), FALSE, NULL, monitorids_tooltip },
+ { REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION, "resolution", NULL, FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Colour depth"), FALSE, colordepth_list, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "network", N_("Network connection type"), FALSE, network_list, network_tooltip },
+ { REMMINA_PROTOCOL_SETTING_TYPE_FOLDER, "sharefolder", N_("Share folder"), FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL }
};
/* Array of RemminaProtocolSetting for advanced settings.
@@ -2671,7 +2678,7 @@ static const RemminaProtocolSetting remmina_rdp_advanced_settings[] =
{ REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "multitransport", N_("Enable multitransport protocol (UDP)"), TRUE, NULL, N_("Using the UDP protocol may improve performance") },
{ REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "base-cred-for-gw", N_("Use base credentials for gateway too"), TRUE, NULL, NULL },
#if FREERDP_CHECK_VERSION(2, 3, 1)
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "websockets", N_("Enable Gateway websockets support"), TRUE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "websockets", N_("Enable Gateway websockets support"), TRUE, NULL, NULL },
#endif
{ REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL }
};
diff --git a/plugins/rdp/rdp_settings.c b/plugins/rdp/rdp_settings.c
index b2a76e91a..da79ea385 100644
--- a/plugins/rdp/rdp_settings.c
+++ b/plugins/rdp/rdp_settings.c
@@ -51,7 +51,7 @@ static void remmina_rdp_settings_kbd_init(void)
void remmina_rdp_settings_init(void)
{
TRACE_CALL(__func__);
- gchar* value;
+ gchar *value;
value = remmina_plugin_service->pref_get_value("rdp_keyboard_layout");
@@ -77,34 +77,35 @@ guint remmina_rdp_settings_get_keyboard_layout(void)
#define REMMINA_RDPSET_GRID_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), REMMINA_TYPE_PLUGIN_RDPSET_GRID, RemminaPluginRdpsetGridClass))
typedef struct _RemminaPluginRdpsetGrid {
- GtkGrid grid;
-
- GtkWidget* keyboard_layout_label;
- GtkWidget* keyboard_layout_combo;
- GtkListStore* keyboard_layout_store;
-
- GtkWidget* quality_combo;
- GtkListStore* quality_store;
- GtkWidget* wallpaper_check;
- GtkWidget* windowdrag_check;
- GtkWidget* menuanimation_check;
- GtkWidget* theme_check;
- GtkWidget* cursorshadow_check;
- GtkWidget* cursorblinking_check;
- GtkWidget* fontsmoothing_check;
- GtkWidget* composition_check;
- GtkWidget* use_client_keymap_check;
+ GtkGrid grid;
+
+ GtkWidget * keyboard_layout_label;
+ GtkWidget * keyboard_layout_combo;
+ GtkListStore * keyboard_layout_store;
+
+ GtkWidget * quality_combo;
+ GtkListStore * quality_store;
+ GtkWidget * wallpaper_check;
+ GtkWidget * windowdrag_check;
+ GtkWidget * menuanimation_check;
+ GtkWidget * theme_check;
+ GtkWidget * cursorshadow_check;
+ GtkWidget * cursorblinking_check;
+ GtkWidget * fontsmoothing_check;
+ GtkWidget * composition_check;
+ GtkWidget * use_client_keymap_check;
+ GtkWidget * disable_smooth_scrolling_check;
/* FreeRDP /scale-desktop: Scaling of desktop app */
- GtkWidget* desktop_scale_factor_spin;
+ GtkWidget * desktop_scale_factor_spin;
/* FreeRDP /scale-device: Scaling of appstore app */
- GtkListStore* device_scale_factor_store;
- GtkWidget* device_scale_factor_combo;
+ GtkListStore * device_scale_factor_store;
+ GtkWidget * device_scale_factor_combo;
/* FreeRDP /orientation: Orientation of display */
- GtkListStore* desktop_orientation_store;
- GtkWidget* desktop_orientation_combo;
+ GtkListStore * desktop_orientation_store;
+ GtkWidget * desktop_orientation_combo;
- guint quality_values[10];
+ guint quality_values[10];
} RemminaPluginRdpsetGrid;
typedef struct _RemminaPluginRdpsetGridClass {
@@ -115,18 +116,18 @@ GType remmina_rdp_settings_grid_get_type(void) G_GNUC_CONST;
G_DEFINE_TYPE(RemminaPluginRdpsetGrid, remmina_rdp_settings_grid, GTK_TYPE_GRID)
-static void remmina_rdp_settings_grid_class_init(RemminaPluginRdpsetGridClass* klass)
+static void remmina_rdp_settings_grid_class_init(RemminaPluginRdpsetGridClass *klass)
{
TRACE_CALL(__func__);
}
-static void remmina_rdp_settings_grid_destroy(GtkWidget* widget, gpointer data)
+static void remmina_rdp_settings_grid_destroy(GtkWidget *widget, gpointer data)
{
TRACE_CALL(__func__);
- gchar* s;
+ gchar *s;
guint new_layout;
GtkTreeIter iter;
- RemminaPluginRdpsetGrid* grid;
+ RemminaPluginRdpsetGrid *grid;
gint val;
grid = REMMINA_RDPSET_GRID(widget);
@@ -145,7 +146,10 @@ static void remmina_rdp_settings_grid_destroy(GtkWidget* widget, gpointer data)
}
remmina_plugin_service->pref_set_value("rdp_use_client_keymap",
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->use_client_keymap_check)) ? "1" : "0");
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->use_client_keymap_check)) ? "1" : "0");
+
+ remmina_plugin_service->pref_set_value("rdp_disable_smooth_scrolling",
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->disable_smooth_scrolling_check)) ? "1" : "0");
s = g_strdup_printf("%X", grid->quality_values[0]);
remmina_plugin_service->pref_set_value("rdp_quality_0", s);
@@ -163,11 +167,10 @@ static void remmina_rdp_settings_grid_destroy(GtkWidget* widget, gpointer data)
remmina_plugin_service->pref_set_value("rdp_quality_9", s);
g_free(s);
- if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->device_scale_factor_combo), &iter)) {
+ if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->device_scale_factor_combo), &iter))
gtk_tree_model_get(GTK_TREE_MODEL(grid->device_scale_factor_store), &iter, 0, &val, -1);
- } else {
+ else
val = 0;
- }
s = g_strdup_printf("%d", val);
remmina_plugin_service->pref_set_value("rdp_deviceScaleFactor", s);
g_free(s);
@@ -177,24 +180,22 @@ static void remmina_rdp_settings_grid_destroy(GtkWidget* widget, gpointer data)
remmina_plugin_service->pref_set_value("rdp_desktopScaleFactor", s);
g_free(s);
- if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->desktop_orientation_combo), &iter)) {
+ if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->desktop_orientation_combo), &iter))
gtk_tree_model_get(GTK_TREE_MODEL(grid->desktop_orientation_store), &iter, 0, &val, -1);
- } else {
+ else
val = 0;
- }
s = g_strdup_printf("%d", val);
remmina_plugin_service->pref_set_value("rdp_desktopOrientation", s);
g_free(s);
-
}
-static void remmina_rdp_settings_grid_load_layout(RemminaPluginRdpsetGrid* grid)
+static void remmina_rdp_settings_grid_load_layout(RemminaPluginRdpsetGrid *grid)
{
TRACE_CALL(__func__);
gint i;
- gchar* s;
+ gchar *s;
GtkTreeIter iter;
- RDP_KEYBOARD_LAYOUT* layouts;
+ RDP_KEYBOARD_LAYOUT *layouts;
gtk_list_store_append(grid->keyboard_layout_store, &iter);
gtk_list_store_set(grid->keyboard_layout_store, &iter, 0, 0, 1, _("<Auto-detect>"), -1);
@@ -223,7 +224,7 @@ static void remmina_rdp_settings_grid_load_layout(RemminaPluginRdpsetGrid* grid)
freerdp_keyboard_layouts_free(layouts);
}
-static void remmina_rdp_settings_grid_load_devicescalefactor_combo(RemminaPluginRdpsetGrid* grid)
+static void remmina_rdp_settings_grid_load_devicescalefactor_combo(RemminaPluginRdpsetGrid *grid)
{
TRACE_CALL(__func__);
GtkTreeIter iter;
@@ -236,10 +237,9 @@ static void remmina_rdp_settings_grid_load_devicescalefactor_combo(RemminaPlugin
gtk_list_store_set(grid->device_scale_factor_store, &iter, 0, 140, 1, "140%", -1);
gtk_list_store_append(grid->device_scale_factor_store, &iter);
gtk_list_store_set(grid->device_scale_factor_store, &iter, 0, 180, 1, "180%", -1);
-
}
-static void remmina_rdp_settings_grid_load_desktoporientation_combo(RemminaPluginRdpsetGrid* grid)
+static void remmina_rdp_settings_grid_load_desktoporientation_combo(RemminaPluginRdpsetGrid *grid)
{
TRACE_CALL(__func__);
GtkTreeIter iter;
@@ -252,13 +252,12 @@ static void remmina_rdp_settings_grid_load_desktoporientation_combo(RemminaPlugi
gtk_list_store_set(grid->desktop_orientation_store, &iter, 0, 180, 1, "180°", -1);
gtk_list_store_append(grid->desktop_orientation_store, &iter);
gtk_list_store_set(grid->desktop_orientation_store, &iter, 0, 270, 1, "270°", -1);
-
}
-static void remmina_rdp_settings_grid_load_quality(RemminaPluginRdpsetGrid* grid)
+static void remmina_rdp_settings_grid_load_quality(RemminaPluginRdpsetGrid *grid)
{
TRACE_CALL(__func__);
- gchar* value;
+ gchar *value;
GtkTreeIter iter;
gtk_list_store_append(grid->quality_store, &iter);
@@ -297,14 +296,13 @@ static void remmina_rdp_settings_appscale_on_changed(GtkComboBox *widget, Remmin
GtkTreeIter iter;
guint i = 0;
- if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->device_scale_factor_combo), &iter)) {
+ if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->device_scale_factor_combo), &iter))
gtk_tree_model_get(GTK_TREE_MODEL(grid->device_scale_factor_store), &iter, 0, &i, -1);
- }
if (i == 0) {
gtk_widget_set_sensitive(GTK_WIDGET(grid->desktop_scale_factor_spin), FALSE);
gtk_spin_button_set_range(GTK_SPIN_BUTTON(grid->desktop_scale_factor_spin), 0, 0);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(grid->desktop_scale_factor_spin), 0);
- }else {
+ } else {
gtk_widget_set_sensitive(GTK_WIDGET(grid->desktop_scale_factor_spin), TRUE);
gtk_spin_button_set_range(GTK_SPIN_BUTTON(grid->desktop_scale_factor_spin), 100, 500);
// gtk_spin_button_set_value(GTK_SPIN_BUTTON(grid->desktop_scale_factor_spin), i);
@@ -321,7 +319,7 @@ static void remmina_rdp_settings_quality_on_changed(GtkComboBox *widget, Remmina
if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->quality_combo), &iter)) {
gtk_tree_model_get(GTK_TREE_MODEL(grid->quality_store), &iter, 0, &i, -1);
- sensitive = ( i != -1 );
+ sensitive = (i != -1);
if (sensitive)
v = grid->quality_values[i];
@@ -349,7 +347,7 @@ static void remmina_rdp_settings_quality_on_changed(GtkComboBox *widget, Remmina
}
}
-static void remmina_rdp_settings_quality_option_on_toggled(GtkToggleButton* togglebutton, RemminaPluginRdpsetGrid* grid)
+static void remmina_rdp_settings_quality_option_on_toggled(GtkToggleButton *togglebutton, RemminaPluginRdpsetGrid *grid)
{
TRACE_CALL(__func__);
guint v;
@@ -373,7 +371,7 @@ static void remmina_rdp_settings_quality_option_on_toggled(GtkToggleButton* togg
}
}
-static void remmina_rdp_settings_set_combo_active_item(GtkComboBox* combo, int itemval)
+static void remmina_rdp_settings_set_combo_active_item(GtkComboBox *combo, int itemval)
{
GtkTreeIter iter;
int i;
@@ -381,27 +379,24 @@ static void remmina_rdp_settings_set_combo_active_item(GtkComboBox* combo, int i
gboolean valid;
m = gtk_combo_box_get_model(combo);
- if (!m) {
+ if (!m)
return;
- }
valid = gtk_tree_model_get_iter_first(m, &iter);
while (valid) {
gtk_tree_model_get(m, &iter, 0, &i, -1);
- if (i == itemval) {
+ if (i == itemval)
gtk_combo_box_set_active_iter(combo, &iter);
- }
valid = gtk_tree_model_iter_next(m, &iter);
}
-
}
static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid)
{
TRACE_CALL(__func__);
- gchar* s;
- GtkWidget* widget;
- GtkCellRenderer* renderer;
+ gchar *s;
+ GtkWidget *widget;
+ GtkCellRenderer *renderer;
int desktopOrientation, desktopScaleFactor, deviceScaleFactor;
/* Create the grid */
@@ -445,7 +440,7 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid)
s = remmina_plugin_service->pref_get_value("rdp_use_client_keymap");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
- s && s[0] == '1' ? TRUE : FALSE);
+ s && s[0] == '1' ? TRUE : FALSE);
g_free(s);
widget = gtk_label_new(_("Quality settings"));
@@ -463,7 +458,7 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid)
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(widget), renderer, "text", 1);
g_signal_connect(G_OBJECT(widget), "changed",
- G_CALLBACK(remmina_rdp_settings_quality_on_changed), grid);
+ G_CALLBACK(remmina_rdp_settings_quality_on_changed), grid);
grid->quality_combo = widget;
remmina_rdp_settings_grid_load_quality(grid);
@@ -472,56 +467,56 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid)
gtk_widget_show(widget);
gtk_grid_attach(GTK_GRID(grid), widget, 1, 10, 2, 5);
g_signal_connect(G_OBJECT(widget), "toggled",
- G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
+ G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
grid->wallpaper_check = widget;
widget = gtk_check_button_new_with_label(_("Window drag"));
gtk_widget_show(widget);
gtk_grid_attach(GTK_GRID(grid), widget, 3, 10, 3, 5);
g_signal_connect(G_OBJECT(widget), "toggled",
- G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
+ G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
grid->windowdrag_check = widget;
widget = gtk_check_button_new_with_label(_("Menu animation"));
gtk_widget_show(widget);
gtk_grid_attach(GTK_GRID(grid), widget, 1, 13, 2, 6);
g_signal_connect(G_OBJECT(widget), "toggled",
- G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
+ G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
grid->menuanimation_check = widget;
widget = gtk_check_button_new_with_label(_("Theme"));
gtk_widget_show(widget);
gtk_grid_attach(GTK_GRID(grid), widget, 3, 13, 3, 6);
g_signal_connect(G_OBJECT(widget), "toggled",
- G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
+ G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
grid->theme_check = widget;
widget = gtk_check_button_new_with_label(_("Cursor shadow"));
gtk_widget_show(widget);
gtk_grid_attach(GTK_GRID(grid), widget, 1, 16, 2, 7);
g_signal_connect(G_OBJECT(widget), "toggled",
- G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
+ G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
grid->cursorshadow_check = widget;
widget = gtk_check_button_new_with_label(_("Cursor blinking"));
gtk_widget_show(widget);
gtk_grid_attach(GTK_GRID(grid), widget, 3, 16, 3, 7);
g_signal_connect(G_OBJECT(widget), "toggled",
- G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
+ G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
grid->cursorblinking_check = widget;
widget = gtk_check_button_new_with_label(_("Font smoothing"));
gtk_widget_show(widget);
gtk_grid_attach(GTK_GRID(grid), widget, 1, 19, 2, 8);
g_signal_connect(G_OBJECT(widget), "toggled",
- G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
+ G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
grid->fontsmoothing_check = widget;
widget = gtk_check_button_new_with_label(_("Composition"));
gtk_widget_show(widget);
gtk_grid_attach(GTK_GRID(grid), widget, 3, 19, 3, 8);
g_signal_connect(G_OBJECT(widget), "toggled",
- G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
+ G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid);
grid->composition_check = widget;
gtk_combo_box_set_active(GTK_COMBO_BOX(grid->quality_combo), 0);
@@ -570,7 +565,7 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid)
gtk_spin_button_set_value(GTK_SPIN_BUTTON(grid->desktop_scale_factor_spin), (gdouble)desktopScaleFactor);
g_signal_connect(G_OBJECT(widget), "changed",
- G_CALLBACK(remmina_rdp_settings_appscale_on_changed), grid);
+ G_CALLBACK(remmina_rdp_settings_appscale_on_changed), grid);
remmina_rdp_settings_appscale_on_changed(GTK_COMBO_BOX(grid->device_scale_factor_combo), grid);
widget = gtk_label_new(_("Desktop orientation"));
@@ -590,12 +585,27 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid)
remmina_rdp_settings_set_combo_active_item(GTK_COMBO_BOX(grid->desktop_orientation_combo), desktopOrientation);
+ widget = gtk_label_new(_("Input device settings"));
+ gtk_widget_show(widget);
+ gtk_widget_set_halign(GTK_WIDGET(widget), GTK_ALIGN_START);
+ gtk_widget_set_valign(GTK_WIDGET(widget), GTK_ALIGN_CENTER);
+ gtk_grid_attach(GTK_GRID(grid), widget, 0, 30, 1, 1);
+
+ widget = gtk_check_button_new_with_label(_("Disable smooth scrolling"));
+ gtk_widget_show(widget);
+ gtk_grid_attach(GTK_GRID(grid), widget, 1, 30, 1, 1);
+ grid->disable_smooth_scrolling_check = widget;
+
+ s = remmina_plugin_service->pref_get_value("rdp_disable_smooth_scrolling");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget),
+ s && s[0] == '1' ? TRUE : FALSE);
+ g_free(s);
}
-GtkWidget* remmina_rdp_settings_new(void)
+GtkWidget *remmina_rdp_settings_new(void)
{
TRACE_CALL(__func__);
- GtkWidget* widget;
+ GtkWidget *widget;
widget = GTK_WIDGET(g_object_new(REMMINA_TYPE_PLUGIN_RDPSET_GRID, NULL));
gtk_widget_show(widget);
@@ -610,7 +620,7 @@ void remmina_rdp_settings_get_orientation_scale_prefs(int *desktopOrientation, i
/* See https://msdn.microsoft.com/en-us/library/cc240510.aspx */
int orientation, dpsf, desf;
- gchar* s;
+ gchar *s;
*desktopOrientation = *desktopScaleFactor = *deviceScaleFactor = 0;
@@ -635,5 +645,4 @@ void remmina_rdp_settings_get_orientation_scale_prefs(int *desktopOrientation, i
*desktopScaleFactor = dpsf;
*deviceScaleFactor = desf;
-
}
diff --git a/plugins/vnc/vnc_plugin.c b/plugins/vnc/vnc_plugin.c
index 15caaec8a..3dc3973a8 100644
--- a/plugins/vnc/vnc_plugin.c
+++ b/plugins/vnc/vnc_plugin.c
@@ -51,7 +51,7 @@
#define GET_PLUGIN_DATA(gp) (RemminaPluginVncData *)g_object_get_data(G_OBJECT(gp), "plugin-data")
static RemminaPluginService *remmina_plugin_service = NULL;
-#define REMMINA_PLUGIN_DEBUG(fmt, ...) remmina_plugin_service->_remmina_debug(__func__, fmt, ##__VA_ARGS__)
+#define REMMINA_PLUGIN_DEBUG(fmt, ...) remmina_plugin_service->_remmina_debug(__func__, fmt, ## __VA_ARGS__)
static int dot_cursor_x_hot = 2;
static int dot_cursor_y_hot = 2;
@@ -97,6 +97,7 @@ static void onMainThread_cleanup_handler(gpointer data)
{
TRACE_CALL(__func__);
struct onMainThread_cb_data *d = data;
+
d->cancelled = TRUE;
}
@@ -118,14 +119,15 @@ static void onMainThread_schedule_callback_and_wait(struct onMainThread_cb_data
}
/**
- Function check_for_endianness() returns 1, if architecture
- is little endian, 0 in case of big endian.
+ * Function check_for_endianness() returns 1, if architecture
+ * is little endian, 0 in case of big endian.
*/
static gboolean check_for_endianness()
{
- unsigned int x = 1;
- char *c = (char*) &x;
- return (int)*c;
+ unsigned int x = 1;
+ char *c = (char *)&x;
+
+ return (int)*c;
}
static void remmina_plugin_vnc_event_push(RemminaProtocolWidget *gp, gint event_type, gpointer p1, gpointer p2, gpointer p3)
@@ -333,7 +335,7 @@ static void remmina_plugin_vnc_process_vnc_event(RemminaProtocolWidget *gp)
break;
case REMMINA_PLUGIN_VNC_EVENT_POINTER:
SendPointerEvent(cl, event->event_data.pointer.x, event->event_data.pointer.y,
- event->event_data.pointer.button_mask);
+ event->event_data.pointer.button_mask);
break;
case REMMINA_PLUGIN_VNC_EVENT_CUTTEXT:
if (event->event_data.text.text) {
@@ -452,17 +454,17 @@ static void remmina_plugin_vnc_update_colordepth(rfbClient *cl, gint colordepth)
break;
}
- rfbClientLog ("colordepth = %d\n", colordepth);
- rfbClientLog ("format.depth = %d\n", cl->format.depth);
- rfbClientLog ("format.bitsPerPixel = %d\n", cl->format.bitsPerPixel);
- rfbClientLog ("format.blueShift = %d\n", cl->format.blueShift);
- rfbClientLog ("format.redShift = %d\n", cl->format.redShift);
- rfbClientLog ("format.trueColour = %d\n", cl->format.trueColour);
- rfbClientLog ("format.greenShift = %d\n", cl->format.greenShift);
- rfbClientLog ("format.blueMax = %d\n", cl->format.blueMax);
- rfbClientLog ("format.redMax = %d\n", cl->format.redMax);
- rfbClientLog ("format.greenMax = %d\n", cl->format.greenMax);
- rfbClientLog ("format.bigEndian = %d\n", cl->format.bigEndian);
+ rfbClientLog("colordepth = %d\n", colordepth);
+ rfbClientLog("format.depth = %d\n", cl->format.depth);
+ rfbClientLog("format.bitsPerPixel = %d\n", cl->format.bitsPerPixel);
+ rfbClientLog("format.blueShift = %d\n", cl->format.blueShift);
+ rfbClientLog("format.redShift = %d\n", cl->format.redShift);
+ rfbClientLog("format.trueColour = %d\n", cl->format.trueColour);
+ rfbClientLog("format.greenShift = %d\n", cl->format.greenShift);
+ rfbClientLog("format.blueMax = %d\n", cl->format.blueMax);
+ rfbClientLog("format.redMax = %d\n", cl->format.redMax);
+ rfbClientLog("format.greenMax = %d\n", cl->format.greenMax);
+ rfbClientLog("format.bigEndian = %d\n", cl->format.bigEndian);
}
static rfbBool remmina_plugin_vnc_rfb_allocfb(rfbClient *cl)
@@ -518,6 +520,7 @@ static gint remmina_plugin_vnc_bits(gint n)
{
TRACE_CALL(__func__);
gint b = 0;
+
while (n) {
b++;
n >>= 1;
@@ -584,6 +587,7 @@ static void remmina_plugin_vnc_rfb_fill_buffer(rfbClient *cl, guchar *dest, gint
gint rs, gs, bs, rm, gm, bm, rl, gl, bl, rr, gr, br;
gint r;
guint32 *destptr;
+
union {
struct {
guchar a, r, g, b;
@@ -694,7 +698,7 @@ static void remmina_plugin_vnc_rfb_finished(rfbClient *cl)
REMMINA_PLUGIN_DEBUG("FinishedFrameBufferUpdate");
}
-static void remmina_plugin_vnc_rfb_led_state(rfbClient* cl, int value, int pad)
+static void remmina_plugin_vnc_rfb_led_state(rfbClient *cl, int value, int pad)
{
TRACE_CALL(__func__);
REMMINA_PLUGIN_DEBUG("Led state - value: %d, pad: %d", value, pad);
@@ -722,8 +726,9 @@ static gboolean remmina_plugin_vnc_queue_cuttext(RemminaPluginVncCuttextParam *p
text = g_convert_with_fallback(param->text, param->textlen, cur_charset, "ISO-8859-1", "?", &br, &bw, NULL);
gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), text, bw);
g_free(text);
- } else
+ } else {
g_date_time_unref(t);
+ }
}
g_free(param->text);
g_free(param);
@@ -763,12 +768,12 @@ remmina_plugin_vnc_rfb_password(rfbClient *cl)
gboolean save;
disablepasswordstoring = remmina_plugin_service->file_get_int(remminafile, "disablepasswordstoring", FALSE);
ret = remmina_plugin_service->protocol_plugin_init_auth(gp,
- (disablepasswordstoring ? 0 : REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD),
- _("Enter VNC password"),
- NULL,
- remmina_plugin_service->file_get_string(remminafile, "password"),
- NULL,
- NULL);
+ (disablepasswordstoring ? 0 : REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD),
+ _("Enter VNC password"),
+ NULL,
+ remmina_plugin_service->file_get_string(remminafile, "password"),
+ NULL,
+ NULL);
if (ret != GTK_RESPONSE_OK) {
gpdata->connected = FALSE;
return NULL;
@@ -816,12 +821,12 @@ remmina_plugin_vnc_rfb_credential(rfbClient *cl, int credentialType)
disablepasswordstoring = remmina_plugin_service->file_get_int(remminafile, "disablepasswordstoring", FALSE);
ret = remmina_plugin_service->protocol_plugin_init_auth(gp,
- (disablepasswordstoring ? 0 : REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD) | REMMINA_MESSAGE_PANEL_FLAG_USERNAME,
- _("Enter VNC authentication credentials"),
- remmina_plugin_service->file_get_string(remminafile, "username"),
- remmina_plugin_service->file_get_string(remminafile, "password"),
- NULL,
- NULL);
+ (disablepasswordstoring ? 0 : REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD) | REMMINA_MESSAGE_PANEL_FLAG_USERNAME,
+ _("Enter VNC authentication credentials"),
+ remmina_plugin_service->file_get_string(remminafile, "username"),
+ remmina_plugin_service->file_get_string(remminafile, "password"),
+ NULL,
+ NULL);
if (ret == GTK_RESPONSE_OK) {
gboolean save = remmina_plugin_service->protocol_plugin_init_get_savepassword(gp);
cred->userCredential.username = remmina_plugin_service->protocol_plugin_init_get_username(gp);
@@ -942,10 +947,11 @@ static void remmina_plugin_vnc_rfb_output(const char *format, ...)
{
TRACE_CALL(__func__);
va_list args;
+
va_start(args, format);
gchar *f, *p, *ff;
- if(!rfbEnableClientLogging)
+ if (!rfbEnableClientLogging)
return;
/* eliminate the last \n */
f = g_strdup(format);
@@ -963,10 +969,12 @@ static void remmina_plugin_vnc_rfb_output(const char *format, ...)
NULL);
g_snprintf(vnc_error, MAX_ERROR_LENGTH, ff, p);
g_free(ff);
- } else
+ } else {
g_snprintf(vnc_error, MAX_ERROR_LENGTH, _(f), p);
- } else
+ }
+ } else {
g_vsnprintf(vnc_error, MAX_ERROR_LENGTH, _(f), args);
+ }
g_free(f);
va_end(args);
@@ -1245,15 +1253,15 @@ static gboolean remmina_plugin_vnc_main(RemminaProtocolWidget *gp)
if (remmina_plugin_service->file_get_string(remminafile, "proxy")) {
remmina_plugin_service->get_server_port(
- remmina_plugin_service->file_get_string(remminafile, "server"),
- 5900,
- &cl->destHost,
- &cl->destPort);
+ remmina_plugin_service->file_get_string(remminafile, "server"),
+ 5900,
+ &cl->destHost,
+ &cl->destPort);
remmina_plugin_service->get_server_port(
- remmina_plugin_service->file_get_string(remminafile, "proxy"),
- 5900,
- &cl->serverHost,
- &cl->serverPort);
+ remmina_plugin_service->file_get_string(remminafile, "proxy"),
+ 5900,
+ &cl->serverHost,
+ &cl->serverPort);
REMMINA_PLUGIN_DEBUG("cl->serverHost: %s", cl->serverHost);
REMMINA_PLUGIN_DEBUG("cl->serverPort: %d", cl->serverPort);
REMMINA_PLUGIN_DEBUG("cl->destHost: %s", cl->destHost);
@@ -1285,8 +1293,9 @@ static gboolean remmina_plugin_vnc_main(RemminaProtocolWidget *gp)
if (rfbInitClient(cl, NULL, NULL)) {
REMMINA_PLUGIN_DEBUG("Client initialization successfull");
break;
- } else
+ } else {
REMMINA_PLUGIN_DEBUG("Client initialization failed");
+ }
/* If the authentication is not called, it has to be a fatal error and must quit */
if (!gpdata->auth_called) {
@@ -1719,7 +1728,7 @@ static gboolean remmina_plugin_vnc_close_connection_timeout(RemminaProtocolWidge
gpdata->vnc_buffer = NULL;
}
g_ptr_array_free(gpdata->pressed_keys, TRUE);
- g_date_time_unref(gpdata->clipboard_timer);
+ g_date_time_unref(gpdata->clipboard_timer);
remmina_plugin_vnc_event_free_all(gp);
g_queue_free(gpdata->vnc_event_queue);
pthread_mutex_destroy(&gpdata->vnc_event_queue_mutex);
@@ -1815,6 +1824,7 @@ static void remmina_plugin_vnc_keystroke(RemminaProtocolWidget *gp, const guint
{
TRACE_CALL(__func__);
RemminaPluginVncData *gpdata = GET_PLUGIN_DATA(gp);
+
remmina_plugin_service->protocol_plugin_send_keys_signals(gpdata->drawing_area,
keystrokes, keylen, GDK_KEY_PRESS | GDK_KEY_RELEASE);
return;
@@ -1863,6 +1873,12 @@ static void remmina_plugin_vnc_init(RemminaProtocolWidget *gp)
gpdata = g_new0(RemminaPluginVncData, 1);
g_object_set_data_full(G_OBJECT(gp), "plugin-data", gpdata, g_free);
+ gboolean disable_smooth_scrolling = FALSE;
+ RemminaFile *remminafile = remmina_plugin_service->protocol_plugin_get_file(gp);
+
+ disable_smooth_scrolling = remmina_plugin_service->file_get_int(remminafile, "disablesmoothscrolling", FALSE);
+ REMMINA_PLUGIN_DEBUG("Disable smooth scrolling is set to %d", disable_smooth_scrolling);
+
gpdata->drawing_area = gtk_drawing_area_new();
gtk_widget_show(gpdata->drawing_area);
gtk_container_add(GTK_CONTAINER(gp), gpdata->drawing_area);
@@ -1872,12 +1888,14 @@ static void remmina_plugin_vnc_init(RemminaProtocolWidget *gp)
GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK
| GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK
| GDK_KEY_RELEASE_MASK
-#if GTK_CHECK_VERSION(3, 4, 0)
- | GDK_SMOOTH_SCROLL_MASK
-#endif
| GDK_SCROLL_MASK);
gtk_widget_set_can_focus(gpdata->drawing_area, TRUE);
+ if (!disable_smooth_scrolling) {
+ REMMINA_PLUGIN_DEBUG("Adding GDK_SMOOTH_SCROLL_MASK");
+ gtk_widget_add_events(gpdata->drawing_area, GDK_SMOOTH_SCROLL_MASK);
+ }
+
g_signal_connect(G_OBJECT(gpdata->drawing_area), "draw", G_CALLBACK(remmina_plugin_vnc_on_draw), gp);
@@ -1937,14 +1955,14 @@ static gchar repeater_tooltip[] =
*/
static const RemminaProtocolSetting remmina_plugin_vnc_basic_settings[] =
{
- { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, "server", NULL, FALSE, "_rfb._tcp", NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, "server", NULL, FALSE, "_rfb._tcp", NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "proxy", N_("Repeater"), FALSE, NULL, repeater_tooltip },
- { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("Username"), FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Colour depth"), FALSE, colordepth_list, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP, "keymap", NULL, FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL }
+ { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("Username"), FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Colour depth"), FALSE, colordepth_list, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP, "keymap", NULL, FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL }
};
/* Array of RemminaProtocolSetting for basic settings.
@@ -1961,9 +1979,9 @@ static const RemminaProtocolSetting remmina_plugin_vnci_basic_settings[] =
{ REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "listenport", N_("Listen on port"), FALSE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("Username"), FALSE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Colour depth"), FALSE, colordepth_list, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Colour depth"), FALSE, colordepth_list, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP, "keymap", NULL, FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP, "keymap", NULL, FALSE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL }
};
@@ -1978,14 +1996,15 @@ static const RemminaProtocolSetting remmina_plugin_vnci_basic_settings[] =
*/
static const RemminaProtocolSetting remmina_plugin_vnc_advanced_settings[] =
{
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "showcursor", N_("Show remote cursor"), TRUE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "viewonly", N_("View only"), FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableclipboard", N_("Turn off clipboard sync"), TRUE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableencryption", N_("Turn off encryption"), FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableserverinput", N_("Prevent local interaction on the server"), TRUE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableserverbell", N_("Ignore remote bell messages"), FALSE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disablepasswordstoring", N_("Forget passwords after use"), TRUE, NULL, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL }
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "showcursor", N_("Show remote cursor"), TRUE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "viewonly", N_("View only"), FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableclipboard", N_("Turn off clipboard sync"), TRUE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableencryption", N_("Turn off encryption"), FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableserverinput", N_("Prevent local interaction on the server"), TRUE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableserverbell", N_("Ignore remote bell messages"), FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disablepasswordstoring", N_("Forget passwords after use"), TRUE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disablesmoothscrolling", N_("Disable smooth scrolling"), FALSE, NULL, NULL },
+ { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL }
};
/* Array for available features.
@@ -1997,12 +2016,12 @@ static const RemminaProtocolFeature remmina_plugin_vnc_features[] =
{ REMMINA_PROTOCOL_FEATURE_TYPE_PREF, REMMINA_PLUGIN_VNC_FEATURE_PREF_VIEWONLY, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_CHECK), "viewonly",
N_("View only") },
{ REMMINA_PROTOCOL_FEATURE_TYPE_PREF, REMMINA_PLUGIN_VNC_FEATURE_PREF_DISABLESERVERINPUT, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_CHECK), "disableserverinput",N_("Prevent local interaction on the server") },
- { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_VNC_FEATURE_TOOL_REFRESH, N_("Refresh"), NULL, NULL },
- { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_VNC_FEATURE_TOOL_CHAT, N_("Open Chat…"), "face-smile", NULL },
- { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_VNC_FEATURE_TOOL_SENDCTRLALTDEL, N_("Send Ctrl+Alt+Delete"), NULL, NULL },
- { REMMINA_PROTOCOL_FEATURE_TYPE_SCALE, REMMINA_PLUGIN_VNC_FEATURE_SCALE, NULL, NULL, NULL },
- { REMMINA_PROTOCOL_FEATURE_TYPE_UNFOCUS, REMMINA_PLUGIN_VNC_FEATURE_UNFOCUS, NULL, NULL, NULL },
- { REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL }
+ { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_VNC_FEATURE_TOOL_REFRESH, N_("Refresh"), NULL, NULL },
+ { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_VNC_FEATURE_TOOL_CHAT, N_("Open Chat…"), "face-smile", NULL },
+ { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_VNC_FEATURE_TOOL_SENDCTRLALTDEL, N_("Send Ctrl+Alt+Delete"), NULL, NULL },
+ { REMMINA_PROTOCOL_FEATURE_TYPE_SCALE, REMMINA_PLUGIN_VNC_FEATURE_SCALE, NULL, NULL, NULL },
+ { REMMINA_PROTOCOL_FEATURE_TYPE_UNFOCUS, REMMINA_PLUGIN_VNC_FEATURE_UNFOCUS, NULL, NULL, NULL },
+ { REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL }
};
/* Protocol plugin definition and features */