diff options
author | Antenore Gatta <antenore@simbiosi.org> | 2017-10-26 00:30:44 +0300 |
---|---|---|
committer | Antenore Gatta <antenore@simbiosi.org> | 2017-10-26 00:30:44 +0300 |
commit | 01453a37434d97e450116025488c7960e7c3959f (patch) | |
tree | 4546922af8667905a6a40885898d16f023ac5802 /remmina-plugins | |
parent | bf34393e25761fa17fbe7a28e6037aae9ab7eab0 (diff) |
Code beautyfied
Diffstat (limited to 'remmina-plugins')
26 files changed, 2195 insertions, 2805 deletions
diff --git a/remmina-plugins/common/remmina_plugin.h b/remmina-plugins/common/remmina_plugin.h index 1b323bc98..e4148dcde 100644 --- a/remmina-plugins/common/remmina_plugin.h +++ b/remmina-plugins/common/remmina_plugin.h @@ -71,8 +71,8 @@ typedef void (*PThreadCleanupFunc)(void*); #define IDLE_ADD gdk_threads_add_idle #define TIMEOUT_ADD gdk_threads_add_timeout -#define CANCEL_ASYNC pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);pthread_testcancel(); -#define CANCEL_DEFER pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,NULL); +#define CANCEL_ASYNC pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); pthread_testcancel(); +#define CANCEL_DEFER pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL); #define THREADS_ENTER _Pragma("GCC error \"THREADS_ENTER has been deprecated in Remmina 1.2\"") #define THREADS_LEAVE _Pragma("GCC error \"THREADS_LEAVE has been deprecated in Remmina 1.2\"") @@ -81,21 +81,21 @@ typedef void (*PThreadCleanupFunc)(void*); #define X_UNIX_SOCKET "/tmp/.X11-unix/X%d" #define INCLUDE_GET_AVAILABLE_XDISPLAY static gint \ -remmina_get_available_xdisplay (void) \ -{ \ - gint i; \ - gint display = 0; \ - gchar fn[200]; \ - for (i = 1; i < MAX_X_DISPLAY_NUMBER; i++) \ + remmina_get_available_xdisplay(void) \ { \ - g_snprintf (fn, sizeof (fn), X_UNIX_SOCKET, i); \ - if (!g_file_test (fn, G_FILE_TEST_EXISTS)) \ + gint i; \ + gint display = 0; \ + gchar fn[200]; \ + for (i = 1; i < MAX_X_DISPLAY_NUMBER; i++) \ { \ - display = i; \ - break; \ + g_snprintf(fn, sizeof(fn), X_UNIX_SOCKET, i); \ + if (!g_file_test(fn, G_FILE_TEST_EXISTS)) \ + { \ + display = i; \ + break; \ + } \ } \ - } \ - return display; \ -} + return display; \ + } diff --git a/remmina-plugins/nx/nx_plugin.c b/remmina-plugins/nx/nx_plugin.c index 67d21d165..9b31b8c51 100644 --- a/remmina-plugins/nx/nx_plugin.c +++ b/remmina-plugins/nx/nx_plugin.c @@ -82,10 +82,10 @@ static gboolean onMainThread_cb(struct onMainThread_cb_data *d) { TRACE_CALL("__func__"); if ( !d->cancelled ) { - switch( d->func ) { - case FUNC_GTK_SOCKET_ADD_ID: - gtk_socket_add_id( d->sk, d->w ); - break; + switch ( d->func ) { + case FUNC_GTK_SOCKET_ADD_ID: + gtk_socket_add_id( d->sk, d->w ); + break; } pthread_mutex_unlock( &d->mu ); } else { @@ -111,7 +111,7 @@ static void onMainThread_schedule_callback_and_wait( struct onMainThread_cb_data pthread_cleanup_push( onMainThread_cleanup_handler, d ); pthread_mutex_init( &d->mu, NULL ); pthread_mutex_lock( &d->mu ); - gdk_threads_add_idle( (GSourceFunc)onMainThread_cb, (gpointer) d ); + gdk_threads_add_idle( (GSourceFunc)onMainThread_cb, (gpointer)d ); pthread_mutex_lock( &d->mu ); @@ -147,16 +147,13 @@ static gboolean remmina_plugin_nx_try_window_id(Window window_id) gboolean found = FALSE; pthread_mutex_lock(&remmina_nx_init_mutex); - for (i = 0; i < remmina_nx_window_id_array->len; i++) - { - if (g_array_index(remmina_nx_window_id_array, Window, i) == window_id) - { + for (i = 0; i < remmina_nx_window_id_array->len; i++) { + if (g_array_index(remmina_nx_window_id_array, Window, i) == window_id) { found = TRUE; break; } } - if (!found) - { + if (!found) { g_array_append_val(remmina_nx_window_id_array, window_id); } pthread_mutex_unlock(&remmina_nx_init_mutex); @@ -171,16 +168,13 @@ static void remmina_plugin_nx_remove_window_id(Window window_id) gboolean found = FALSE; pthread_mutex_lock(&remmina_nx_init_mutex); - for (i = 0; i < remmina_nx_window_id_array->len; i++) - { - if (g_array_index(remmina_nx_window_id_array, Window, i) == window_id) - { + for (i = 0; i < remmina_nx_window_id_array->len; i++) { + if (g_array_index(remmina_nx_window_id_array, Window, i) == window_id) { found = TRUE; break; } } - if (found) - { + if (found) { g_array_remove_index_fast(remmina_nx_window_id_array, i); } pthread_mutex_unlock(&remmina_nx_init_mutex); @@ -201,7 +195,7 @@ static void remmina_plugin_nx_on_plug_removed(GtkSocket *socket, RemminaProtocol gboolean remmina_plugin_nx_ssh_auth_callback(gchar **passphrase, gpointer userdata) { TRACE_CALL("__func__"); - RemminaProtocolWidget *gp = (RemminaProtocolWidget*) userdata; + RemminaProtocolWidget *gp = (RemminaProtocolWidget*)userdata; gint ret; /* SSH passwords must not be saved */ @@ -217,7 +211,7 @@ gboolean remmina_plugin_nx_ssh_auth_callback(gchar **passphrase, gpointer userda static void remmina_plugin_nx_on_proxy_exit(GPid pid, gint status, gpointer data) { TRACE_CALL("__func__"); - RemminaProtocolWidget *gp = (RemminaProtocolWidget*) data; + RemminaProtocolWidget *gp = (RemminaProtocolWidget*)data; remmina_plugin_nx_service->protocol_plugin_close_connection(gp); } @@ -259,7 +253,7 @@ static gboolean remmina_plugin_nx_monitor_create_notify(RemminaProtocolWidget *g CANCEL_DEFER - gpdata = GET_PLUGIN_DATA(gp); + gpdata = GET_PLUGIN_DATA(gp); atom = XInternAtom(gpdata->display, "WM_COMMAND", True); if (atom == None) return FALSE; @@ -267,11 +261,9 @@ static gboolean remmina_plugin_nx_monitor_create_notify(RemminaProtocolWidget *g ts.tv_sec = 0; ts.tv_nsec = 200000000; - while (1) - { + while (1) { pthread_testcancel(); - while (!XPending(gpdata->display)) - { + while (!XPending(gpdata->display)) { nanosleep(&ts, NULL); continue; } @@ -280,10 +272,9 @@ static gboolean remmina_plugin_nx_monitor_create_notify(RemminaProtocolWidget *g continue; w = xev.xcreatewindow.window; if (XGetWindowProperty(gpdata->display, w, atom, 0, 255, False, AnyPropertyType, &type, &format, &nitems, &rest, - &data) != Success) + &data) != Success) continue; - if (data && strstr((char *) data, cmd) && remmina_plugin_nx_try_window_id(w)) - { + if (data && strstr((char*)data, cmd) && remmina_plugin_nx_try_window_id(w)) { gpdata->window_id = w; XFree(data); break; @@ -309,10 +300,9 @@ static gint remmina_plugin_nx_wait_signal(RemminaPluginNxData *gpdata) FD_ZERO(&set); FD_SET(gpdata->event_pipe[0], &set); select(gpdata->event_pipe[0] + 1, &set, NULL, NULL, NULL); - if (read(gpdata->event_pipe[0], &dummy, 1)) - { + if (read(gpdata->event_pipe[0], &dummy, 1)) { } - return (gint) dummy; + return (gint)dummy; } static gboolean remmina_plugin_nx_start_session(RemminaProtocolWidget *gp) @@ -337,21 +327,19 @@ static gboolean remmina_plugin_nx_start_session(RemminaProtocolWidget *gp) /* Connect */ remmina_nx_session_set_encryption(nx, - remmina_plugin_nx_service->file_get_int(remminafile, "disableencryption", FALSE) ? 0 : 1); + remmina_plugin_nx_service->file_get_int(remminafile, "disableencryption", FALSE) ? 0 : 1); remmina_nx_session_set_localport(nx, remmina_plugin_nx_service->pref_get_sshtunnel_port()); remmina_nx_session_set_log_callback(nx, remmina_plugin_nx_service->log_printf); s2 = remmina_plugin_nx_service->protocol_plugin_start_direct_tunnel(gp, 22, FALSE); - if (s2 == NULL) - { + if (s2 == NULL) { return FALSE; } remmina_plugin_nx_service->get_server_port(s2, 22, &s1, &port); g_free(s2); if (!remmina_nx_session_open(nx, s1, port, remmina_plugin_nx_service->file_get_string(remminafile, "nx_privatekey"), - remmina_plugin_nx_ssh_auth_callback, gp)) - { + remmina_plugin_nx_ssh_auth_callback, gp)) { g_free(s1); return FALSE; } @@ -362,12 +350,9 @@ static gboolean remmina_plugin_nx_start_session(RemminaProtocolWidget *gp) s1 = g_strdup(remmina_plugin_nx_service->file_get_string(remminafile, "username")); s2 = g_strdup(remmina_plugin_nx_service->file_get_string(remminafile, "password")); - if (s1 && s2) - { + if (s1 && s2) { ret = remmina_nx_session_login(nx, s1, s2); - } - else - { + }else { g_free(s1); g_free(s2); @@ -391,76 +376,57 @@ static gboolean remmina_plugin_nx_start_session(RemminaProtocolWidget *gp) /* Prepare the session type and application */ cs = remmina_plugin_nx_service->file_get_string(remminafile, "exec"); - if (!cs || g_strcmp0(cs, "GNOME") == 0) - { + if (!cs || g_strcmp0(cs, "GNOME") == 0) { type = "unix-gnome"; app = NULL; + }else + if (g_strcmp0(cs, "KDE") == 0) { + type = "unix-kde"; + app = NULL; + }else + if (g_strcmp0(cs, "Xfce") == 0) { + /* NX does not know Xfce. So we simply launch the Xfce startup program. */ + type = "unix-application"; + app = "startxfce4"; + }else + if (g_strcmp0(cs, "Shadow") == 0) { + type = "shadow"; + app = NULL; + }else { + type = "unix-application"; + app = cs; } - else - if (g_strcmp0(cs, "KDE") == 0) - { - type = "unix-kde"; - app = NULL; - } - else - if (g_strcmp0(cs, "Xfce") == 0) - { - /* NX does not know Xfce. So we simply launch the Xfce startup program. */ - type = "unix-application"; - app = "startxfce4"; - } - else - if (g_strcmp0(cs, "Shadow") == 0) - { - type = "shadow"; - app = NULL; - } - else - { - type = "unix-application"; - app = cs; - } /* List sessions */ gpdata->attach_session = (g_strcmp0(type, "shadow") == 0); - while (1) - { + while (1) { remmina_nx_session_add_parameter(nx, "type", type); - if (!gpdata->attach_session) - { + if (!gpdata->attach_session) { remmina_nx_session_add_parameter(nx, "user", - remmina_plugin_nx_service->file_get_string(remminafile, "username")); + remmina_plugin_nx_service->file_get_string(remminafile, "username")); remmina_nx_session_add_parameter(nx, "status", "suspended,running"); } - if (!remmina_nx_session_list(nx)) - { + if (!remmina_nx_session_list(nx)) { return FALSE; } is_empty_list = !remmina_nx_session_iter_first(nx, &gpdata->iter); - if (is_empty_list && !gpdata->manager_started && !gpdata->attach_session) - { + if (is_empty_list && !gpdata->manager_started && !gpdata->attach_session) { event_type = REMMINA_NX_EVENT_START; - } - else - { + }else { remmina_nx_session_manager_start(gp); event_type = remmina_plugin_nx_wait_signal(gpdata); - if (event_type == REMMINA_NX_EVENT_CANCEL) - { + if (event_type == REMMINA_NX_EVENT_CANCEL) { return FALSE; } - if (event_type == REMMINA_NX_EVENT_TERMINATE) - { - if (!is_empty_list) - { + if (event_type == REMMINA_NX_EVENT_TERMINATE) { + if (!is_empty_list) { s1 = remmina_nx_session_iter_get(nx, &gpdata->iter, REMMINA_NX_SESSION_COLUMN_ID); remmina_nx_session_add_parameter(nx, "sessionid", s1); g_free(s1); - if (!remmina_nx_session_terminate(nx)) - { + if (!remmina_nx_session_terminate(nx)) { remmina_nx_session_manager_start(gp); remmina_plugin_nx_wait_signal(gpdata); } @@ -477,58 +443,57 @@ static gboolean remmina_plugin_nx_start_session(RemminaProtocolWidget *gp) i = remmina_plugin_nx_service->file_get_int(remminafile, "quality", 0); remmina_nx_session_add_parameter(nx, "link", i > 2 ? "lan" : i == 2 ? "adsl" : i == 1 ? "isdn" : "modem"); remmina_nx_session_add_parameter(nx, "geometry", "%ix%i", - remmina_plugin_nx_service->get_profile_remote_width(gp), - remmina_plugin_nx_service->get_profile_remote_height(gp)); + remmina_plugin_nx_service->get_profile_remote_width(gp), + remmina_plugin_nx_service->get_profile_remote_height(gp)); remmina_nx_session_add_parameter(nx, "keyboard", remmina_kbtype); remmina_nx_session_add_parameter(nx, "client", "linux"); remmina_nx_session_add_parameter(nx, "media", "0"); remmina_nx_session_add_parameter(nx, "clipboard", - remmina_plugin_nx_service->file_get_int(remminafile, "disableclipboard", FALSE) ? "none" : "both"); + remmina_plugin_nx_service->file_get_int(remminafile, "disableclipboard", FALSE) ? "none" : "both"); - switch (event_type) - { + switch (event_type) { - case REMMINA_NX_EVENT_START: - if (app) - remmina_nx_session_add_parameter(nx, "application", app); + case REMMINA_NX_EVENT_START: + if (app) + remmina_nx_session_add_parameter(nx, "application", app); - remmina_nx_session_add_parameter(nx, "session", - remmina_plugin_nx_service->file_get_string(remminafile, "name")); - remmina_nx_session_add_parameter(nx, "screeninfo", "%ix%ix24+render", - remmina_plugin_nx_service->file_get_int(remminafile, "resolution_width", 0), - remmina_plugin_nx_service->file_get_int(remminafile, "resolution_height", 0)); + remmina_nx_session_add_parameter(nx, "session", + remmina_plugin_nx_service->file_get_string(remminafile, "name")); + remmina_nx_session_add_parameter(nx, "screeninfo", "%ix%ix24+render", + remmina_plugin_nx_service->file_get_int(remminafile, "resolution_width", 0), + remmina_plugin_nx_service->file_get_int(remminafile, "resolution_height", 0)); - if (!remmina_nx_session_start(nx)) - return FALSE; - break; - - case REMMINA_NX_EVENT_ATTACH: - s1 = remmina_nx_session_iter_get(nx, &gpdata->iter, REMMINA_NX_SESSION_COLUMN_ID); - remmina_nx_session_add_parameter(nx, "id", s1); - g_free(s1); + if (!remmina_nx_session_start(nx)) + return FALSE; + break; - s1 = remmina_nx_session_iter_get(nx, &gpdata->iter, REMMINA_NX_SESSION_COLUMN_DISPLAY); - remmina_nx_session_add_parameter(nx, "display", s1); - g_free(s1); + case REMMINA_NX_EVENT_ATTACH: + s1 = remmina_nx_session_iter_get(nx, &gpdata->iter, REMMINA_NX_SESSION_COLUMN_ID); + remmina_nx_session_add_parameter(nx, "id", s1); + g_free(s1); - if (!remmina_nx_session_attach(nx)) - return FALSE; - break; + s1 = remmina_nx_session_iter_get(nx, &gpdata->iter, REMMINA_NX_SESSION_COLUMN_DISPLAY); + remmina_nx_session_add_parameter(nx, "display", s1); + g_free(s1); - case REMMINA_NX_EVENT_RESTORE: - s1 = remmina_nx_session_iter_get(nx, &gpdata->iter, REMMINA_NX_SESSION_COLUMN_ID); - remmina_nx_session_add_parameter(nx, "id", s1); - g_free(s1); + if (!remmina_nx_session_attach(nx)) + return FALSE; + break; - remmina_nx_session_add_parameter(nx, "session", - remmina_plugin_nx_service->file_get_string(remminafile, "name")); + case REMMINA_NX_EVENT_RESTORE: + s1 = remmina_nx_session_iter_get(nx, &gpdata->iter, REMMINA_NX_SESSION_COLUMN_ID); + remmina_nx_session_add_parameter(nx, "id", s1); + g_free(s1); - if (!remmina_nx_session_restore(nx)) - return FALSE; - break; + remmina_nx_session_add_parameter(nx, "session", + remmina_plugin_nx_service->file_get_string(remminafile, "name")); - default: + if (!remmina_nx_session_restore(nx)) return FALSE; + break; + + default: + return FALSE; } if (!remmina_nx_session_tunnel_open(nx)) @@ -561,11 +526,9 @@ static gboolean remmina_plugin_nx_main(RemminaProtocolWidget *gp) gpdata->nx = remmina_nx_session_new(); ret = remmina_plugin_nx_start_session(gp); - if (!ret) - { + if (!ret) { err = remmina_nx_session_get_error(gpdata->nx); - if (err) - { + if (err) { remmina_plugin_nx_service->protocol_plugin_set_error(gp, "%s", err); } } @@ -580,9 +543,8 @@ static gpointer remmina_plugin_nx_main_thread(gpointer data) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); CANCEL_ASYNC - if (!remmina_plugin_nx_main((RemminaProtocolWidget*) data)) - { - IDLE_ADD((GSourceFunc) remmina_plugin_nx_service->protocol_plugin_close_connection, data); + if (!remmina_plugin_nx_main((RemminaProtocolWidget*)data)) { + IDLE_ADD((GSourceFunc)remmina_plugin_nx_service->protocol_plugin_close_connection, data); } return NULL; } @@ -603,14 +565,11 @@ static void remmina_plugin_nx_init(RemminaProtocolWidget *gp) g_signal_connect(G_OBJECT(gpdata->socket), "plug-removed", G_CALLBACK(remmina_plugin_nx_on_plug_removed), gp); gtk_container_add(GTK_CONTAINER(gp), gpdata->socket); - if (pipe(gpdata->event_pipe)) - { + if (pipe(gpdata->event_pipe)) { g_print("Error creating pipes.\n"); gpdata->event_pipe[0] = -1; gpdata->event_pipe[1] = -1; - } - else - { + }else { flags = fcntl(gpdata->event_pipe[0], F_GETFL, 0); fcntl(gpdata->event_pipe[0], F_SETFL, flags | O_NONBLOCK); } @@ -624,9 +583,8 @@ static gboolean remmina_plugin_nx_open_connection(RemminaProtocolWidget *gp) const gchar *resolution; gint width, height; - if (!remmina_plugin_nx_service->gtksocket_available()) - { - remmina_plugin_nx_service->protocol_plugin_set_error (gp, + if (!remmina_plugin_nx_service->gtksocket_available()) { + remmina_plugin_nx_service->protocol_plugin_set_error(gp, _("Protocol %s is unavailable because GtkSocket only works under Xorg"), remmina_plugin_nx.name); return FALSE; @@ -635,13 +593,10 @@ static gboolean remmina_plugin_nx_open_connection(RemminaProtocolWidget *gp) remminafile = remmina_plugin_nx_service->protocol_plugin_get_file(gp); resolution = remmina_plugin_nx_service->file_get_string(remminafile, "resolution"); - if (!resolution || !strchr(resolution, 'x')) - { + if (!resolution || !strchr(resolution, 'x')) { remmina_plugin_nx_service->protocol_plugin_set_expand(gp, TRUE); gtk_widget_set_size_request(GTK_WIDGET(gp), 640, 480); - } - else - { + }else { width = remmina_plugin_nx_service->file_get_int(remminafile, "resolution_width", 640); height = remmina_plugin_nx_service->file_get_int(remminafile, "resolution_height", 480); remmina_plugin_nx_service->protocol_plugin_set_width(gp, width); @@ -650,15 +605,12 @@ static gboolean remmina_plugin_nx_open_connection(RemminaProtocolWidget *gp) } gpdata->socket_id = gtk_socket_get_id(GTK_SOCKET(gpdata->socket)); - if (pthread_create(&gpdata->thread, NULL, remmina_plugin_nx_main_thread, gp)) - { + if (pthread_create(&gpdata->thread, NULL, remmina_plugin_nx_main_thread, gp)) { remmina_plugin_nx_service->protocol_plugin_set_error(gp, - "Failed to initialize pthread. Falling back to non-thread mode..."); + "Failed to initialize pthread. Falling back to non-thread mode..."); gpdata->thread = 0; return FALSE; - } - else - { + }else { return TRUE; } } @@ -668,31 +620,26 @@ static gboolean remmina_plugin_nx_close_connection(RemminaProtocolWidget *gp) TRACE_CALL("__func__"); RemminaPluginNxData *gpdata = GET_PLUGIN_DATA(gp); - if (gpdata->thread) - { + if (gpdata->thread) { pthread_cancel(gpdata->thread); if (gpdata->thread) pthread_join(gpdata->thread, NULL); } - if (gpdata->session_manager_start_handler) - { + if (gpdata->session_manager_start_handler) { g_source_remove(gpdata->session_manager_start_handler); gpdata->session_manager_start_handler = 0; } - if (gpdata->window_id) - { + if (gpdata->window_id) { remmina_plugin_nx_remove_window_id(gpdata->window_id); } - if (gpdata->nx) - { + if (gpdata->nx) { remmina_nx_session_free(gpdata->nx); gpdata->nx = NULL; } - if (gpdata->display) - { + if (gpdata->display) { XSetErrorHandler(gpdata->orig_handler); XCloseDisplay(gpdata->display); gpdata->display = NULL; @@ -725,13 +672,12 @@ static gboolean remmina_plugin_nx_query_feature(RemminaProtocolWidget *gp, const static void remmina_plugin_nx_call_feature(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature) { TRACE_CALL("__func__"); - switch (feature->id) - { - case REMMINA_PLUGIN_NX_FEATURE_TOOL_SENDCTRLALTDEL: - remmina_plugin_nx_send_ctrlaltdel(gp); - break; - default: - break; + switch (feature->id) { + case REMMINA_PLUGIN_NX_FEATURE_TOOL_SENDCTRLALTDEL: + remmina_plugin_nx_send_ctrlaltdel(gp); + break; + default: + break; } } @@ -756,14 +702,14 @@ static gpointer quality_list[] = */ static const RemminaProtocolSetting remmina_plugin_nx_basic_settings[] = { - { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, "server", NULL, FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_FILE, "nx_privatekey", N_("Identity file"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("User name"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION, "resolution", NULL, FALSE, GINT_TO_POINTER(1), NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_COMBO, "exec", N_("Startup program"), FALSE, "GNOME,KDE,Xfce,Shadow", 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_FILE, "nx_privatekey", N_("Identity file"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("User name"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION, "resolution", NULL, FALSE, GINT_TO_POINTER(1), NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_COMBO, "exec", N_("Startup program"), FALSE, "GNOME,KDE,Xfce,Shadow", NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; /* Array of RemminaProtocolSetting for advanced settings. @@ -777,11 +723,11 @@ static const RemminaProtocolSetting remmina_plugin_nx_basic_settings[] = */ static const RemminaProtocolSetting remmina_plugin_nx_advanced_settings[] = { - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableclipboard", N_("Disable clipboard sync"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableencryption", N_("Disable encryption"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "showcursor", N_("Use local cursor"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableclipboard", N_("Disable clipboard sync"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableencryption", N_("Disable encryption"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "showcursor", N_("Use local cursor"), FALSE, NULL, NULL }, { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disablepasswordstoring", N_("Disable password storing"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; /* Array for available features. @@ -789,30 +735,30 @@ static const RemminaProtocolSetting remmina_plugin_nx_advanced_settings[] = static const RemminaProtocolFeature remmina_plugin_nx_features[] = { { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_NX_FEATURE_TOOL_SENDCTRLALTDEL, N_("Send Ctrl+Alt+Delete"), NULL, NULL }, - { REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL } + { REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL } }; /* Protocol plugin definition and features */ static RemminaProtocolPlugin remmina_plugin_nx = { - REMMINA_PLUGIN_TYPE_PROTOCOL, // Type - "NX", // Name - N_("NX - NX Technology"), // Description - GETTEXT_PACKAGE, // Translation domain - VERSION, // Version number - "remmina-nx", // Icon for normal connection - "remmina-nx", // Icon for SSH connection - remmina_plugin_nx_basic_settings, // Array for basic settings - remmina_plugin_nx_advanced_settings, // Array for advanced settings - REMMINA_PROTOCOL_SSH_SETTING_TUNNEL, // SSH settings type - remmina_plugin_nx_features, // Array for available features - remmina_plugin_nx_init, // Plugin initialization - remmina_plugin_nx_open_connection, // Plugin open connection - remmina_plugin_nx_close_connection, // Plugin close connection - remmina_plugin_nx_query_feature, // Query for available features - remmina_plugin_nx_call_feature, // Call a feature - NULL, // Send a keystroke - NULL // Screenshot + REMMINA_PLUGIN_TYPE_PROTOCOL, // Type + "NX", // Name + N_("NX - NX Technology"), // Description + GETTEXT_PACKAGE, // Translation domain + VERSION, // Version number + "remmina-nx", // Icon for normal connection + "remmina-nx", // Icon for SSH connection + remmina_plugin_nx_basic_settings, // Array for basic settings + remmina_plugin_nx_advanced_settings, // Array for advanced settings + REMMINA_PROTOCOL_SSH_SETTING_TUNNEL, // SSH settings type + remmina_plugin_nx_features, // Array for available features + remmina_plugin_nx_init, // Plugin initialization + remmina_plugin_nx_open_connection, // Plugin open connection + remmina_plugin_nx_close_connection, // Plugin close connection + remmina_plugin_nx_query_feature, // Query for available features + remmina_plugin_nx_call_feature, // Call a feature + NULL, // Send a keystroke + NULL // Screenshot }; G_MODULE_EXPORT gboolean @@ -828,10 +774,8 @@ remmina_plugin_entry(RemminaPluginService *service) bindtextdomain(GETTEXT_PACKAGE, REMMINA_RUNTIME_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); - if ((dpy = XkbOpenDisplay(NULL, NULL, NULL, NULL, NULL, NULL)) != NULL) - { - if (XkbRF_GetNamesProp(dpy, NULL, &vd)) - { + if ((dpy = XkbOpenDisplay(NULL, NULL, NULL, NULL, NULL, NULL)) != NULL) { + if (XkbRF_GetNamesProp(dpy, NULL, &vd)) { remmina_kbtype = g_strdup_printf("%s/%s", vd.model, vd.layout); if (vd.layout) XFree(vd.layout); @@ -849,8 +793,7 @@ remmina_plugin_entry(RemminaPluginService *service) XCloseDisplay(dpy); } - if (!service->register_plugin((RemminaPlugin *) &remmina_plugin_nx)) - { + if (!service->register_plugin((RemminaPlugin*)&remmina_plugin_nx)) { return FALSE; } diff --git a/remmina-plugins/nx/nx_plugin.h b/remmina-plugins/nx/nx_plugin.h index 1ff79a834..9a9e60223 100644 --- a/remmina-plugins/nx/nx_plugin.h +++ b/remmina-plugins/nx/nx_plugin.h @@ -36,14 +36,13 @@ #pragma once -#define GET_PLUGIN_DATA(gp) (RemminaPluginNxData*) g_object_get_data(G_OBJECT(gp), "plugin-data"); +#define GET_PLUGIN_DATA(gp) (RemminaPluginNxData*)g_object_get_data(G_OBJECT(gp), "plugin-data"); G_BEGIN_DECLS #include "nx_session.h" -typedef enum -{ +typedef enum { REMMINA_NX_EVENT_CANCEL, REMMINA_NX_EVENT_START, REMMINA_NX_EVENT_RESTORE, @@ -51,8 +50,7 @@ typedef enum REMMINA_NX_EVENT_TERMINATE } RemminaNXEventType; -typedef struct _RemminaPluginNxData -{ +typedef struct _RemminaPluginNxData { GtkWidget *socket; gint socket_id; diff --git a/remmina-plugins/nx/nx_session.c b/remmina-plugins/nx/nx_session.c index f2a9ad539..9688ab14d 100644 --- a/remmina-plugins/nx/nx_session.c +++ b/remmina-plugins/nx/nx_session.c @@ -76,17 +76,17 @@ static gboolean remmina_get_keytype(const gchar *private_key_file, gint *keytype /*****/ static const gchar nx_default_private_key[] = "-----BEGIN DSA PRIVATE KEY-----\n" - "MIIBuwIBAAKBgQCXv9AzQXjxvXWC1qu3CdEqskX9YomTfyG865gb4D02ZwWuRU/9\n" - "C3I9/bEWLdaWgJYXIcFJsMCIkmWjjeSZyTmeoypI1iLifTHUxn3b7WNWi8AzKcVF\n" - "aBsBGiljsop9NiD1mEpA0G+nHHrhvTXz7pUvYrsrXcdMyM6rxqn77nbbnwIVALCi\n" - "xFdHZADw5KAVZI7r6QatEkqLAoGBAI4L1TQGFkq5xQ/nIIciW8setAAIyrcWdK/z\n" - "5/ZPeELdq70KDJxoLf81NL/8uIc4PoNyTRJjtT3R4f8Az1TsZWeh2+ReCEJxDWgG\n" - "fbk2YhRqoQTtXPFsI4qvzBWct42WonWqyyb1bPBHk+JmXFscJu5yFQ+JUVNsENpY\n" - "+Gkz3HqTAoGANlgcCuA4wrC+3Cic9CFkqiwO/Rn1vk8dvGuEQqFJ6f6LVfPfRTfa\n" - "QU7TGVLk2CzY4dasrwxJ1f6FsT8DHTNGnxELPKRuLstGrFY/PR7KeafeFZDf+fJ3\n" - "mbX5nxrld3wi5titTnX+8s4IKv29HJguPvOK/SI7cjzA+SqNfD7qEo8CFDIm1xRf\n" - "8xAPsSKs6yZ6j1FNklfu\n" - "-----END DSA PRIVATE KEY-----\n"; + "MIIBuwIBAAKBgQCXv9AzQXjxvXWC1qu3CdEqskX9YomTfyG865gb4D02ZwWuRU/9\n" + "C3I9/bEWLdaWgJYXIcFJsMCIkmWjjeSZyTmeoypI1iLifTHUxn3b7WNWi8AzKcVF\n" + "aBsBGiljsop9NiD1mEpA0G+nHHrhvTXz7pUvYrsrXcdMyM6rxqn77nbbnwIVALCi\n" + "xFdHZADw5KAVZI7r6QatEkqLAoGBAI4L1TQGFkq5xQ/nIIciW8setAAIyrcWdK/z\n" + "5/ZPeELdq70KDJxoLf81NL/8uIc4PoNyTRJjtT3R4f8Az1TsZWeh2+ReCEJxDWgG\n" + "fbk2YhRqoQTtXPFsI4qvzBWct42WonWqyyb1bPBHk+JmXFscJu5yFQ+JUVNsENpY\n" + "+Gkz3HqTAoGANlgcCuA4wrC+3Cic9CFkqiwO/Rn1vk8dvGuEQqFJ6f6LVfPfRTfa\n" + "QU7TGVLk2CzY4dasrwxJ1f6FsT8DHTNGnxELPKRuLstGrFY/PR7KeafeFZDf+fJ3\n" + "mbX5nxrld3wi5titTnX+8s4IKv29HJguPvOK/SI7cjzA+SqNfD7qEo8CFDIm1xRf\n" + "8xAPsSKs6yZ6j1FNklfu\n" + "-----END DSA PRIVATE KEY-----\n"; static const gchar nx_hello_server_msg[] = "hello nxserver - version "; @@ -208,9 +208,9 @@ static void remmina_nx_session_set_application_error(RemminaNXSession *nx, const va_list args; if (nx->error) g_free(nx->error); - va_start (args, fmt); - nx->error = g_strdup_vprintf (fmt, args); - va_end (args); + va_start(args, fmt); + nx->error = g_strdup_vprintf(fmt, args); + va_end(args); } gboolean remmina_nx_session_has_error(RemminaNXSession *nx) @@ -283,7 +283,7 @@ static gboolean remmina_nx_session_get_response(RemminaNXSession *nx) return FALSE; G_GNUC_BEGIN_IGNORE_DEPRECATIONS - buffer = buffer_new(); + buffer = buffer_new(); len = channel_read_buffer(nx->channel, buffer, len, is_stderr); G_GNUC_END_IGNORE_DEPRECATIONS if (len <= 0) { @@ -292,7 +292,7 @@ static gboolean remmina_nx_session_get_response(RemminaNXSession *nx) } if (len > 0) { G_GNUC_BEGIN_IGNORE_DEPRECATIONS - g_string_append_len(nx->response, (const gchar*) buffer_get(buffer), len); + g_string_append_len(nx->response, (const gchar*)buffer_get(buffer), len); G_GNUC_END_IGNORE_DEPRECATIONS } @@ -310,7 +310,7 @@ static void remmina_nx_session_parse_session_list_line(RemminaNXSession *nx, con gint i; GtkTreeIter iter; - p1 = (char*) line; + p1 = (char*)line; while (*p1 == ' ') p1++; if (*p1 == '\0') @@ -318,7 +318,7 @@ static void remmina_nx_session_parse_session_list_line(RemminaNXSession *nx, con gtk_list_store_append(nx->session_list, &iter); - p1 = (char*) line; + p1 = (char*)line; for (i = 0; i < 7; i++) { p2 = strchr(p1, ' '); if (!p2) @@ -523,18 +523,18 @@ static void remmina_nx_session_send_command(RemminaNXSession *nx, const gchar *c va_list args; gchar *cmd; - va_start (args, cmdfmt); - cmd = g_strdup_vprintf (cmdfmt, args); - ssh_channel_write (nx->channel, cmd, strlen (cmd)); + va_start(args, cmdfmt); + cmd = g_strdup_vprintf(cmdfmt, args); + ssh_channel_write(nx->channel, cmd, strlen(cmd)); g_free(cmd); - ssh_set_fd_towrite (nx->session); - ssh_channel_write (nx->channel, "\n", 1); + ssh_set_fd_towrite(nx->session); + ssh_channel_write(nx->channel, "\n", 1); va_end(args); } gboolean remmina_nx_session_open(RemminaNXSession *nx, const gchar *server, guint port, const gchar *private_key_file, - RemminaNXPassphraseCallback passphrase_func, gpointer userdata) + RemminaNXPassphraseCallback passphrase_func, gpointer userdata) { TRACE_CALL("__func__"); gint ret; @@ -644,9 +644,9 @@ void remmina_nx_session_add_parameter(RemminaNXSession *nx, const gchar *name, c va_list args; gchar *value; - va_start (args, valuefmt); - value = g_strdup_vprintf (valuefmt, args); - g_hash_table_insert(nx->session_parameters, g_strdup (name), value); + va_start(args, valuefmt); + value = g_strdup_vprintf(valuefmt, args); + g_hash_table_insert(nx->session_parameters, g_strdup(name), value); va_end(args); } @@ -659,7 +659,7 @@ static gboolean remmina_nx_session_send_session_command(RemminaNXSession *nx, co cmd = g_string_new(cmd_type); g_hash_table_iter_init(&iter, nx->session_parameters); - while (g_hash_table_iter_next(&iter, (gpointer*) &key, (gpointer*) &value)) { + while (g_hash_table_iter_next(&iter, (gpointer*)&key, (gpointer*)&value)) { g_string_append_printf(cmd, " --%s=\"%s\"", key, value); } @@ -678,7 +678,7 @@ gboolean remmina_nx_session_list(RemminaNXSession *nx) if (nx->session_list == NULL) { nx->session_list = gtk_list_store_new(REMMINA_NX_SESSION_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, - G_TYPE_STRING, G_TYPE_STRING); + G_TYPE_STRING, G_TYPE_STRING); } else { gtk_list_store_clear(nx->session_list); } @@ -780,7 +780,7 @@ gboolean remmina_nx_session_terminate(RemminaNXSession *nx) static gpointer remmina_nx_session_tunnel_main_thread(gpointer data) { TRACE_CALL("__func__"); - RemminaNXSession *nx = (RemminaNXSession*) data; + RemminaNXSession *nx = (RemminaNXSession*)data; gchar *ptr; ssize_t len = 0, lenw = 0; fd_set set; @@ -834,7 +834,7 @@ static gpointer remmina_nx_session_tunnel_main_thread(gpointer data) for (ptr = buffer, lenw = 0; len > 0; len -= lenw, ptr += lenw) { ssh_set_fd_towrite(nx->session); G_GNUC_BEGIN_IGNORE_DEPRECATIONS - lenw = channel_write(channels[0], (char*) ptr, len); + lenw = channel_write(channels[0], (char*)ptr, len); G_GNUC_END_IGNORE_DEPRECATIONS if (lenw <= 0) { nx->running = FALSE; @@ -861,10 +861,10 @@ static gpointer remmina_nx_session_tunnel_main_thread(gpointer data) /* Clean up the stderr buffer in case FreeNX send something there */ G_GNUC_BEGIN_IGNORE_DEPRECATIONS len = channel_read_nonblocking(channels_out[0], buffer, sizeof(buffer), 1); - if (len == SSH_ERROR || len == SSH_EOF) { - nx->running = FALSE; - break; - } + if (len == SSH_ERROR || len == SSH_EOF) { + nx->running = FALSE; + break; + } G_GNUC_END_IGNORE_DEPRECATIONS } } @@ -923,7 +923,7 @@ gboolean remmina_nx_session_tunnel_open(RemminaNXSession *nx) sin.sin_port = htons(port); sin.sin_addr.s_addr = inet_addr("127.0.0.1"); - if (bind(sock, (struct sockaddr *) &sin, sizeof(sin))) { + if (bind(sock, (struct sockaddr *)&sin, sizeof(sin))) { remmina_nx_session_set_application_error(nx, "Failed to bind on local port."); close(sock); return FALSE; @@ -952,12 +952,12 @@ remmina_nx_session_get_proxy_option(RemminaNXSession *nx) TRACE_CALL("__func__"); if (nx->encryption) { return g_strdup_printf("nx,session=%s,cookie=%s,id=%s,shmem=1,shpix=1,connect=127.0.0.1:%i", - (gchar*) g_hash_table_lookup(nx->session_parameters, "session"), nx->proxy_cookie, - nx->session_id, (nx->localport ? nx->localport : nx->session_display)); + (gchar*)g_hash_table_lookup(nx->session_parameters, "session"), nx->proxy_cookie, + nx->session_id, (nx->localport ? nx->localport : nx->session_display)); } else { return g_strdup_printf("nx,session=%s,cookie=%s,id=%s,shmem=1,shpix=1,connect=%s:%i", - (gchar*) g_hash_table_lookup(nx->session_parameters, "session"), nx->proxy_cookie, - nx->session_id, nx->server, nx->session_display); + (gchar*)g_hash_table_lookup(nx->session_parameters, "session"), nx->proxy_cookie, + nx->session_id, nx->server, nx->session_display); } } @@ -995,7 +995,7 @@ gboolean remmina_nx_session_invoke_proxy(RemminaNXSession *nx, gint display, GCh argv[argc++] = NULL; ret = g_spawn_async(NULL, argv, envp, G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &nx->proxy_pid, - &error); + &error); g_strfreev(envp); for (i = 0; i < argc; i++) g_free(argv[i]); diff --git a/remmina-plugins/nx/nx_session.h b/remmina-plugins/nx/nx_session.h index bf48e14e3..0d9d3b9e5 100644 --- a/remmina-plugins/nx/nx_session.h +++ b/remmina-plugins/nx/nx_session.h @@ -37,8 +37,7 @@ G_BEGIN_DECLS -enum -{ +enum { REMMINA_NX_SESSION_COLUMN_DISPLAY, REMMINA_NX_SESSION_COLUMN_TYPE, REMMINA_NX_SESSION_COLUMN_ID, @@ -69,7 +68,7 @@ void remmina_nx_session_set_localport(RemminaNXSession *nx, gint localport); void remmina_nx_session_set_log_callback(RemminaNXSession *nx, RemminaNXLogCallback log_callback); gboolean remmina_nx_session_open(RemminaNXSession *nx, const gchar *server, guint port, const gchar *private_key_file, - RemminaNXPassphraseCallback passphrase_func, gpointer userdata); + RemminaNXPassphraseCallback passphrase_func, gpointer userdata); gboolean remmina_nx_session_login(RemminaNXSession *nx, const gchar *username, const gchar *password); diff --git a/remmina-plugins/nx/nx_session_manager.c b/remmina-plugins/nx/nx_session_manager.c index 20ac95883..5d07b16bd 100644 --- a/remmina-plugins/nx/nx_session_manager.c +++ b/remmina-plugins/nx/nx_session_manager.c @@ -44,28 +44,24 @@ static void remmina_nx_session_manager_set_sensitive(RemminaProtocolWidget *gp, TRACE_CALL("__func__"); RemminaPluginNxData *gpdata = GET_PLUGIN_DATA(gp); - if (gpdata->attach_session) - { + if (gpdata->attach_session) { gtk_dialog_set_response_sensitive(GTK_DIALOG(gpdata->manager_dialog), REMMINA_NX_EVENT_TERMINATE, sensitive); gtk_dialog_set_response_sensitive(GTK_DIALOG(gpdata->manager_dialog), REMMINA_NX_EVENT_ATTACH, sensitive); - } - else - { + }else { gtk_dialog_set_response_sensitive(GTK_DIALOG(gpdata->manager_dialog), REMMINA_NX_EVENT_TERMINATE, sensitive); gtk_dialog_set_response_sensitive(GTK_DIALOG(gpdata->manager_dialog), REMMINA_NX_EVENT_RESTORE, sensitive); } } static gboolean remmina_nx_session_manager_selection_func(GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, - gboolean path_currently_selected, gpointer user_data) + gboolean path_currently_selected, gpointer user_data) { TRACE_CALL("__func__"); - RemminaProtocolWidget *gp = (RemminaProtocolWidget*) user_data; + RemminaProtocolWidget *gp = (RemminaProtocolWidget*)user_data; RemminaPluginNxData *gpdata = GET_PLUGIN_DATA(gp); gpdata->manager_selected = FALSE; - if (path_currently_selected) - { + if (path_currently_selected) { remmina_nx_session_manager_set_sensitive(gp, FALSE); return TRUE; } @@ -80,10 +76,9 @@ static gboolean remmina_nx_session_manager_selection_func(GtkTreeSelection *sele static void remmina_nx_session_manager_send_signal(RemminaPluginNxData *gpdata, gint event_type) { TRACE_CALL("__func__"); - guchar dummy = (guchar) event_type; + guchar dummy = (guchar)event_type; /* Signal the NX thread to resume execution */ - if (write(gpdata->event_pipe[1], &dummy, 1)) - { + if (write(gpdata->event_pipe[1], &dummy, 1)) { } } @@ -94,25 +89,19 @@ static void remmina_nx_session_manager_on_response(GtkWidget *dialog, gint respo gint event_type; remmina_nx_session_manager_set_sensitive(gp, FALSE); - if (response_id <= 0) - { + if (response_id <= 0) { event_type = REMMINA_NX_EVENT_CANCEL; - } - else - { + }else { event_type = response_id; } - if (response_id == REMMINA_NX_EVENT_TERMINATE && gpdata->manager_selected) - { + if (response_id == REMMINA_NX_EVENT_TERMINATE && gpdata->manager_selected) { remmina_nx_session_iter_set(gpdata->nx, &gpdata->iter, REMMINA_NX_SESSION_COLUMN_STATUS, _("Terminating")); } - if (response_id != REMMINA_NX_EVENT_TERMINATE) - { + if (response_id != REMMINA_NX_EVENT_TERMINATE) { gtk_widget_destroy(dialog); gpdata->manager_dialog = NULL; } - if (response_id != REMMINA_NX_EVENT_TERMINATE && response_id != REMMINA_NX_EVENT_CANCEL) - { + if (response_id != REMMINA_NX_EVENT_TERMINATE && response_id != REMMINA_NX_EVENT_CANCEL) { remmina_plugin_nx_service->protocol_plugin_init_show(gp); } remmina_nx_session_manager_send_signal(gpdata, event_type); @@ -127,9 +116,8 @@ void remmina_nx_session_manager_on_row_activated(GtkTreeView *tree, GtkTreePath remmina_plugin_nx_service->log_printf("[NX] Default response_id %d\n", gpdata->default_response); - if (gpdata->default_response >= 0) - { - gtk_dialog_response(GTK_DIALOG(gpdata->manager_dialog), gpdata->default_response); + if (gpdata->default_response >= 0) { + gtk_dialog_response(GTK_DIALOG(gpdata->manager_dialog), gpdata->default_response); } } @@ -148,22 +136,18 @@ static gboolean remmina_nx_session_manager_main(RemminaProtocolWidget *gp) remminafile = remmina_plugin_nx_service->protocol_plugin_get_file(gp); gpdata->default_response = -1; - if (!gpdata->manager_started) - { + if (!gpdata->manager_started) { remmina_plugin_nx_service->protocol_plugin_init_hide(gp); dialog = gtk_dialog_new(); s = g_strdup_printf(_("NX Sessions on %s"), remmina_plugin_nx_service->file_get_string(remminafile, "server")); gtk_window_set_title(GTK_WINDOW(dialog), s); g_free(s); - if (gpdata->attach_session) - { + if (gpdata->attach_session) { gtk_dialog_add_button(GTK_DIALOG(dialog), _("Attach"), REMMINA_NX_EVENT_ATTACH); /* Set default response id for attach */ gpdata->default_response = REMMINA_NX_EVENT_ATTACH; - } - else - { + }else { gtk_dialog_add_button(GTK_DIALOG(dialog), _("Restore"), REMMINA_NX_EVENT_RESTORE); gtk_dialog_add_button(GTK_DIALOG(dialog), _("Start"), REMMINA_NX_EVENT_START); /* Set default response id for restore */ @@ -197,53 +181,51 @@ static gboolean remmina_nx_session_manager_main(RemminaProtocolWidget *gp) renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Type"), renderer, "text", REMMINA_NX_SESSION_COLUMN_TYPE, - NULL); + NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_sort_column_id(column, REMMINA_NX_SESSION_COLUMN_TYPE); gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Display"), renderer, "text", - REMMINA_NX_SESSION_COLUMN_DISPLAY, NULL); + REMMINA_NX_SESSION_COLUMN_DISPLAY, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_sort_column_id(column, REMMINA_NX_SESSION_COLUMN_DISPLAY); gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Status"), renderer, "text", - REMMINA_NX_SESSION_COLUMN_STATUS, NULL); + REMMINA_NX_SESSION_COLUMN_STATUS, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_sort_column_id(column, REMMINA_NX_SESSION_COLUMN_STATUS); gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "text", REMMINA_NX_SESSION_COLUMN_NAME, - NULL); + NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_sort_column_id(column, REMMINA_NX_SESSION_COLUMN_NAME); gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)), - remmina_nx_session_manager_selection_func, gp, NULL); + remmina_nx_session_manager_selection_func, gp, NULL); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(remmina_nx_session_manager_on_response), gp); gpdata->manager_started = TRUE; } gpdata->manager_selected = FALSE; - if (gpdata->manager_dialog) - { + if (gpdata->manager_dialog) { remmina_nx_session_manager_set_sensitive(gp, FALSE); gtk_widget_show(gpdata->manager_dialog); } - if (remmina_nx_session_has_error(gpdata->nx)) - { + if (remmina_nx_session_has_error(gpdata->nx)) { dialog = gtk_message_dialog_new((gpdata->manager_dialog ? GTK_WINDOW(gpdata->manager_dialog) : NULL), - GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", - remmina_nx_session_get_error (gpdata->nx)); - remmina_nx_session_clear_error (gpdata->nx); - gtk_dialog_run (GTK_DIALOG(dialog)); - gtk_widget_destroy (dialog); - remmina_nx_session_manager_send_signal (gpdata, 0); + GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", + remmina_nx_session_get_error(gpdata->nx)); + remmina_nx_session_clear_error(gpdata->nx); + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + remmina_nx_session_manager_send_signal(gpdata, 0); } gpdata->session_manager_start_handler = 0; @@ -255,9 +237,8 @@ void remmina_nx_session_manager_start(RemminaProtocolWidget *gp) TRACE_CALL("__func__"); RemminaPluginNxData *gpdata = GET_PLUGIN_DATA(gp); - if (gpdata->session_manager_start_handler == 0) - { - gpdata->session_manager_start_handler = IDLE_ADD((GSourceFunc) remmina_nx_session_manager_main, gp); + if (gpdata->session_manager_start_handler == 0) { + gpdata->session_manager_start_handler = IDLE_ADD((GSourceFunc)remmina_nx_session_manager_main, gp); } } diff --git a/remmina-plugins/rdp/rdp_channels.c b/remmina-plugins/rdp/rdp_channels.c index f012433ca..a07920f0b 100644 --- a/remmina-plugins/rdp/rdp_channels.c +++ b/remmina-plugins/rdp/rdp_channels.c @@ -43,44 +43,31 @@ void remmina_rdp_OnChannelConnectedEventHandler(rdpContext* context, ChannelConnectedEventArgs* e) { - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; - if (g_strcmp0(e->name, RDPEI_DVC_CHANNEL_NAME) == 0) - { + if (g_strcmp0(e->name, RDPEI_DVC_CHANNEL_NAME) == 0) { g_print("Unimplemented: channel %s connected but we can't use it\n", e->name); // xfc->rdpei = (RdpeiClientContext*) e->pInterface; - } - else if (g_strcmp0(e->name, TSMF_DVC_CHANNEL_NAME) == 0) - { + }else if (g_strcmp0(e->name, TSMF_DVC_CHANNEL_NAME) == 0) { g_print("Unimplemented: channel %s connected but we can't use it\n", e->name); // xf_tsmf_init(xfc, (TsmfClientContext*) e->pInterface); - } - else if (g_strcmp0(e->name, RDPGFX_DVC_CHANNEL_NAME) == 0) - { + }else if (g_strcmp0(e->name, RDPGFX_DVC_CHANNEL_NAME) == 0) { g_print("Unimplemented: channel %s connected but we can't use it\n", e->name); /* - if (settings->SoftwareGdi) - gdi_graphics_pipeline_init(context->gdi, (RdpgfxClientContext*) e->pInterface); - else - xf_graphics_pipeline_init(xfc, (RdpgfxClientContext*) e->pInterface); - */ - } - else if (g_strcmp0(e->name, RAIL_SVC_CHANNEL_NAME) == 0) - { + if (settings->SoftwareGdi) + gdi_graphics_pipeline_init(context->gdi, (RdpgfxClientContext*) e->pInterface); + else + xf_graphics_pipeline_init(xfc, (RdpgfxClientContext*) e->pInterface); + */ + }else if (g_strcmp0(e->name, RAIL_SVC_CHANNEL_NAME) == 0) { g_print("Unimplemented: channel %s connected but we can't use it\n", e->name); // xf_rail_init(xfc, (RailClientContext*) e->pInterface); - } - else if (g_strcmp0(e->name, CLIPRDR_SVC_CHANNEL_NAME) == 0) - { - remmina_rdp_cliprdr_init( rfi, (CliprdrClientContext*) e->pInterface); - } - else if (g_strcmp0(e->name, ENCOMSP_SVC_CHANNEL_NAME) == 0) - { + }else if (g_strcmp0(e->name, CLIPRDR_SVC_CHANNEL_NAME) == 0) { + remmina_rdp_cliprdr_init( rfi, (CliprdrClientContext*)e->pInterface); + }else if (g_strcmp0(e->name, ENCOMSP_SVC_CHANNEL_NAME) == 0) { g_print("Unimplemented: channel %s connected but we can't use it\n", e->name); // xf_encomsp_init(xfc, (EncomspClientContext*) e->pInterface); - } - else if (g_strcmp0(e->name, DISP_DVC_CHANNEL_NAME) == 0) - { + }else if (g_strcmp0(e->name, DISP_DVC_CHANNEL_NAME) == 0) { // "disp" channel connected, save its context pointer rfi->dispcontext = (DispClientContext*)e->pInterface; // Notify remmina_connection_window to unlock dynres capability diff --git a/remmina-plugins/rdp/rdp_cliprdr.c b/remmina-plugins/rdp/rdp_cliprdr.c index 71f2674ca..7f6cc41c2 100644 --- a/remmina-plugins/rdp/rdp_cliprdr.c +++ b/remmina-plugins/rdp/rdp_cliprdr.c @@ -51,28 +51,22 @@ UINT32 remmina_rdp_cliprdr_get_format_from_gdkatom(GdkAtom atom) UINT32 rc; gchar* name = gdk_atom_name(atom); rc = 0; - if (g_strcmp0("UTF8_STRING", name) == 0 || g_strcmp0("text/plain;charset=utf-8", name) == 0) - { + if (g_strcmp0("UTF8_STRING", name) == 0 || g_strcmp0("text/plain;charset=utf-8", name) == 0) { rc = CF_UNICODETEXT; } - if (g_strcmp0("TEXT", name) == 0 || g_strcmp0("text/plain", name) == 0) - { + if (g_strcmp0("TEXT", name) == 0 || g_strcmp0("text/plain", name) == 0) { rc = CF_TEXT; } - if (g_strcmp0("text/html", name) == 0) - { + if (g_strcmp0("text/html", name) == 0) { rc = CB_FORMAT_HTML; } - if (g_strcmp0("image/png", name) == 0) - { + if (g_strcmp0("image/png", name) == 0) { rc = CB_FORMAT_PNG; } - if (g_strcmp0("image/jpeg", name) == 0) - { + if (g_strcmp0("image/jpeg", name) == 0) { rc = CB_FORMAT_JPEG; } - if (g_strcmp0("image/bmp", name) == 0) - { + if (g_strcmp0("image/bmp", name) == 0) { rc = CF_DIB; } g_free(name); @@ -84,14 +78,12 @@ void remmina_rdp_cliprdr_get_target_types(UINT32** formats, UINT16* size, GdkAto TRACE_CALL("__func__"); int i; *size = 1; - *formats = (UINT32*) malloc(sizeof(UINT32) * (count+1)); + *formats = (UINT32*)malloc(sizeof(UINT32) * (count + 1)); *formats[0] = 0; - for (i = 0; i < count; i++) - { + for (i = 0; i < count; i++) { UINT32 format = remmina_rdp_cliprdr_get_format_from_gdkatom(types[i]); - if (format != 0) - { + if (format != 0) { (*formats)[*size] = format; (*size)++; } @@ -111,21 +103,17 @@ static UINT8* lf2crlf(UINT8* data, int* size) int out_size; out_size = (*size) * 2 + 1; - outbuf = (UINT8*) malloc(out_size); + outbuf = (UINT8*)malloc(out_size); out = outbuf; in = data; in_end = data + (*size); - while (in < in_end) - { + while (in < in_end) { c = *in++; - if (c == '\n') - { + if (c == '\n') { *out++ = '\r'; *out++ = '\n'; - } - else - { + }else { *out++ = c; } } @@ -148,8 +136,7 @@ static void crlf2lf(UINT8* data, size_t* size) in = data; in_end = data + (*size); - while (in < in_end) - { + while (in < in_end) { c = *in++; if (c != '\r') *out++ = c; @@ -202,7 +189,7 @@ static void remmina_rdp_cliprdr_send_client_capabilities(rfClipboard* clipboard) CLIPRDR_GENERAL_CAPABILITY_SET generalCapabilitySet; capabilities.cCapabilitiesSets = 1; - capabilities.capabilitySets = (CLIPRDR_CAPABILITY_SET*) &(generalCapabilitySet); + capabilities.capabilitySets = (CLIPRDR_CAPABILITY_SET*)&(generalCapabilitySet); generalCapabilitySet.capabilitySetType = CB_CAPSTYPE_GENERAL; generalCapabilitySet.capabilitySetLength = 12; @@ -252,43 +239,29 @@ static UINT remmina_rdp_cliprdr_server_format_list(CliprdrClientContext* context clipboard = (rfClipboard*)context->custom; gp = clipboard->rfi->protocol_widget; - GtkTargetList* list = gtk_target_list_new (NULL, 0); + GtkTargetList* list = gtk_target_list_new(NULL, 0); - for (i = 0; i < formatList->numFormats; i++) - { + for (i = 0; i < formatList->numFormats; i++) { format = &formatList->formats[i]; - if (format->formatId == CF_UNICODETEXT) - { + if (format->formatId == CF_UNICODETEXT) { GdkAtom atom = gdk_atom_intern("UTF8_STRING", TRUE); gtk_target_list_add(list, atom, 0, CF_UNICODETEXT); - } - else if (format->formatId == CF_TEXT) - { + }else if (format->formatId == CF_TEXT) { GdkAtom atom = gdk_atom_intern("TEXT", TRUE); gtk_target_list_add(list, atom, 0, CF_TEXT); - } - else if (format->formatId == CF_DIB) - { + }else if (format->formatId == CF_DIB) { GdkAtom atom = gdk_atom_intern("image/bmp", TRUE); gtk_target_list_add(list, atom, 0, CF_DIB); - } - else if (format->formatId == CF_DIBV5) - { + }else if (format->formatId == CF_DIBV5) { GdkAtom atom = gdk_atom_intern("image/bmp", TRUE); gtk_target_list_add(list, atom, 0, CF_DIBV5); - } - else if (format->formatId == CB_FORMAT_JPEG) - { + }else if (format->formatId == CB_FORMAT_JPEG) { GdkAtom atom = gdk_atom_intern("image/jpeg", TRUE); gtk_target_list_add(list, atom, 0, CB_FORMAT_JPEG); - } - else if (format->formatId == CB_FORMAT_PNG) - { + }else if (format->formatId == CB_FORMAT_PNG) { GdkAtom atom = gdk_atom_intern("image/png", TRUE); gtk_target_list_add(list, atom, 0, CB_FORMAT_PNG); - } - else if (format->formatId == CB_FORMAT_HTML) - { + }else if (format->formatId == CB_FORMAT_HTML) { GdkAtom atom = gdk_atom_intern("text/html", TRUE); gtk_target_list_add(list, atom, 0, CB_FORMAT_HTML); } @@ -367,92 +340,88 @@ static UINT remmina_rdp_cliprdr_server_format_data_response(CliprdrClientContext // by freerdp and freed after returning from this callback function. // So we must make a copy if we need to preserve it - if (size > 0) - { - switch (rfi->clipboard.format) + if (size > 0) { + switch (rfi->clipboard.format) { + case CF_UNICODETEXT: { - case CF_UNICODETEXT: - { - size = ConvertFromUnicode(CP_UTF8, 0, (WCHAR*)data, size / 2, (CHAR**)&output, 0, NULL, NULL); + size = ConvertFromUnicode(CP_UTF8, 0, (WCHAR*)data, size / 2, (CHAR**)&output, 0, NULL, NULL); + crlf2lf(output, &size); + break; + } + + case CF_TEXT: + case CB_FORMAT_HTML: + { + output = (gpointer)calloc(1, size + 1); + if (output) { + memcpy(output, data, size); crlf2lf(output, &size); - break; } + break; + } - case CF_TEXT: - case CB_FORMAT_HTML: - { - output = (gpointer)calloc(1, size + 1); - if (output) { - memcpy(output, data, size); - crlf2lf(output, &size); - } - break; + case CF_DIBV5: + case CF_DIB: + { + wStream* s; + UINT32 offset; + GError *perr; + BITMAPINFOHEADER* pbi; + BITMAPV5HEADER* pbi5; + + pbi = (BITMAPINFOHEADER*)data; + + // offset calculation inspired by http://downloads.poolelan.com/MSDN/MSDNLibrary6/Disk1/Samples/VC/OS/WindowsXP/GetImage/BitmapUtil.cpp + offset = 14 + pbi->biSize; + if (pbi->biClrUsed != 0) + offset += sizeof(RGBQUAD) * pbi->biClrUsed; + else if (pbi->biBitCount <= 8) + offset += sizeof(RGBQUAD) * (1 << pbi->biBitCount); + if (pbi->biSize == sizeof(BITMAPINFOHEADER)) { + if (pbi->biCompression == 3) // BI_BITFIELDS is 3 + offset += 12; + } else if (pbi->biSize >= sizeof(BITMAPV5HEADER)) { + pbi5 = (BITMAPV5HEADER*)pbi; + if (pbi5->bV5ProfileData <= offset) + offset += pbi5->bV5ProfileSize; } - - case CF_DIBV5: - case CF_DIB: - { - wStream* s; - UINT32 offset; - GError *perr; - BITMAPINFOHEADER* pbi; - BITMAPV5HEADER* pbi5; - - pbi = (BITMAPINFOHEADER*)data; - - // offset calculation inspired by http://downloads.poolelan.com/MSDN/MSDNLibrary6/Disk1/Samples/VC/OS/WindowsXP/GetImage/BitmapUtil.cpp - offset = 14 + pbi->biSize; - if (pbi->biClrUsed != 0) - offset += sizeof(RGBQUAD) * pbi->biClrUsed; - else if (pbi->biBitCount <= 8) - offset += sizeof(RGBQUAD) * (1 << pbi->biBitCount); - if (pbi->biSize == sizeof(BITMAPINFOHEADER)) { - if (pbi->biCompression == 3) // BI_BITFIELDS is 3 - offset += 12; - } else if (pbi->biSize >= sizeof(BITMAPV5HEADER)) { - pbi5 = (BITMAPV5HEADER*)pbi; - if (pbi5->bV5ProfileData <= offset) - offset += pbi5->bV5ProfileSize; - } - s = Stream_New(NULL, 14 + size); - Stream_Write_UINT8(s, 'B'); - Stream_Write_UINT8(s, 'M'); - Stream_Write_UINT32(s, 14 + size); - Stream_Write_UINT32(s, 0); - Stream_Write_UINT32(s, offset); - Stream_Write(s, data, size); - - data = Stream_Buffer(s); - size = Stream_Length(s); - - pixbuf = gdk_pixbuf_loader_new(); - perr = NULL; - if ( !gdk_pixbuf_loader_write(pixbuf, data, size, &perr) ) { - remmina_plugin_service->log_printf("[RDP] rdp_cliprdr: gdk_pixbuf_loader_write() returned error %s\n", perr->message); - } - else - { - if ( !gdk_pixbuf_loader_close(pixbuf, &perr) ) { - remmina_plugin_service->log_printf("[RDP] rdp_cliprdr: gdk_pixbuf_loader_close() returned error %s\n", perr->message); - perr = NULL; - } - Stream_Free(s, TRUE); - output = g_object_ref(gdk_pixbuf_loader_get_pixbuf(pixbuf)); + s = Stream_New(NULL, 14 + size); + Stream_Write_UINT8(s, 'B'); + Stream_Write_UINT8(s, 'M'); + Stream_Write_UINT32(s, 14 + size); + Stream_Write_UINT32(s, 0); + Stream_Write_UINT32(s, offset); + Stream_Write(s, data, size); + + data = Stream_Buffer(s); + size = Stream_Length(s); + + pixbuf = gdk_pixbuf_loader_new(); + perr = NULL; + if ( !gdk_pixbuf_loader_write(pixbuf, data, size, &perr) ) { + remmina_plugin_service->log_printf("[RDP] rdp_cliprdr: gdk_pixbuf_loader_write() returned error %s\n", perr->message); + }else { + if ( !gdk_pixbuf_loader_close(pixbuf, &perr) ) { + remmina_plugin_service->log_printf("[RDP] rdp_cliprdr: gdk_pixbuf_loader_close() returned error %s\n", perr->message); + perr = NULL; } - g_object_unref(pixbuf); - break; - } - - case CB_FORMAT_PNG: - case CB_FORMAT_JPEG: - { - pixbuf = gdk_pixbuf_loader_new(); - gdk_pixbuf_loader_write(pixbuf, data, size, NULL); + Stream_Free(s, TRUE); output = g_object_ref(gdk_pixbuf_loader_get_pixbuf(pixbuf)); - gdk_pixbuf_loader_close(pixbuf, NULL); - g_object_unref(pixbuf); - break; } + g_object_unref(pixbuf); + break; + } + + case CB_FORMAT_PNG: + case CB_FORMAT_JPEG: + { + pixbuf = gdk_pixbuf_loader_new(); + gdk_pixbuf_loader_write(pixbuf, data, size, NULL); + output = g_object_ref(gdk_pixbuf_loader_get_pixbuf(pixbuf)); + gdk_pixbuf_loader_close(pixbuf, NULL); + g_object_unref(pixbuf); + break; + } } } @@ -460,9 +429,7 @@ static UINT remmina_rdp_cliprdr_server_format_data_response(CliprdrClientContext pthread_cond_signal(&clipboard->transfer_clip_cond); if ( clipboard->srv_clip_data_wait == SCDW_BUSY_WAIT ) { clipboard->srv_data = output; - } - else - { + }else { // Clipboard data arrived from server when we are not busywaiting. // Just put it on the local clipboard @@ -526,19 +493,15 @@ void remmina_rdp_cliprdr_request_data(GtkClipboard *gtkClipboard, GtkSelectionDa gettimeofday(&tv, NULL); to.tv_sec = tv.tv_sec + CLIPBOARD_TRANSFER_WAIT_TIME; to.tv_nsec = tv.tv_usec * 1000; - rc = pthread_cond_timedwait(&clipboard->transfer_clip_cond,&clipboard->transfer_clip_mutex, &to); + rc = pthread_cond_timedwait(&clipboard->transfer_clip_cond, &clipboard->transfer_clip_mutex, &to); if ( rc == 0 ) { /* Data has arrived without timeout */ - if (clipboard->srv_data != NULL) - { - if (info == CB_FORMAT_PNG || info == CF_DIB || info == CF_DIBV5 || info == CB_FORMAT_JPEG) - { + if (clipboard->srv_data != NULL) { + if (info == CB_FORMAT_PNG || info == CF_DIB || info == CF_DIBV5 || info == CB_FORMAT_JPEG) { gtk_selection_data_set_pixbuf(selection_data, clipboard->srv_data); g_object_unref(clipboard->srv_data); - } - else - { + }else { gtk_selection_data_set_text(selection_data, clipboard->srv_data, -1); free(clipboard->srv_data); } @@ -549,9 +512,8 @@ void remmina_rdp_cliprdr_request_data(GtkClipboard *gtkClipboard, GtkSelectionDa if ( rc == ETIMEDOUT ) { remmina_plugin_service->log_printf("[RDP] Clipboard data has not been transferred from the server in %d seconds. Try to paste later.\n", CLIPBOARD_TRANSFER_WAIT_TIME); - } - else { - remmina_plugin_service->log_printf("[RDP] internal error: pthread_cond_timedwait() returned %d\n",rc); + }else { + remmina_plugin_service->log_printf("[RDP] internal error: pthread_cond_timedwait() returned %d\n", rc); clipboard->srv_clip_data_wait = SCDW_NONE; } } @@ -595,12 +557,12 @@ CLIPRDR_FORMAT_LIST *remmina_rdp_cliprdr_get_client_format_list(RemminaProtocolW if (result && loccount > 0) { formats = (CLIPRDR_FORMAT*)malloc(loccount * sizeof(CLIPRDR_FORMAT)); srvcount = 0; - for(i = 0 ; i < loccount ; i++) { + for (i = 0; i < loccount; i++) { formatId = remmina_rdp_cliprdr_get_format_from_gdkatom(targets[i]); if ( formatId != 0 ) { formats[srvcount].formatId = formatId; formats[srvcount].formatName = NULL; - srvcount ++; + srvcount++; } } if (srvcount > 0) { @@ -625,13 +587,13 @@ CLIPRDR_FORMAT_LIST *remmina_rdp_cliprdr_get_client_format_list(RemminaProtocolW retp->pFormatList.msgFlags = CB_RESPONSE_OK; - return (CLIPRDR_FORMAT_LIST *)retp; + return (CLIPRDR_FORMAT_LIST*)retp; } static void remmina_rdp_cliprdr_mt_get_format_list(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) { TRACE_CALL("__func__"); - ui->retptr = (void *)remmina_rdp_cliprdr_get_client_format_list(gp); + ui->retptr = (void*)remmina_rdp_cliprdr_get_client_format_list(gp); } @@ -650,83 +612,79 @@ void remmina_rdp_cliprdr_get_clipboard_data(RemminaProtocolWidget* gp, RemminaPl clipboard = ui->clipboard.clipboard; gtkClipboard = gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD); - if (gtkClipboard) - { - switch (ui->clipboard.format) + if (gtkClipboard) { + switch (ui->clipboard.format) { + case CF_TEXT: + case CF_UNICODETEXT: + case CB_FORMAT_HTML: { - case CF_TEXT: - case CF_UNICODETEXT: - case CB_FORMAT_HTML: - { - inbuf = (UINT8*)gtk_clipboard_wait_for_text(gtkClipboard); - break; - } + inbuf = (UINT8*)gtk_clipboard_wait_for_text(gtkClipboard); + break; + } - case CB_FORMAT_PNG: - case CB_FORMAT_JPEG: - case CF_DIB: - case CF_DIBV5: - { - image = gtk_clipboard_wait_for_image(gtkClipboard); - break; - } + case CB_FORMAT_PNG: + case CB_FORMAT_JPEG: + case CF_DIB: + case CF_DIBV5: + { + image = gtk_clipboard_wait_for_image(gtkClipboard); + break; + } } } /* No data received, send nothing */ - if (inbuf != NULL || image != NULL) - { - switch (ui->clipboard.format) + if (inbuf != NULL || image != NULL) { + switch (ui->clipboard.format) { + case CF_TEXT: + case CB_FORMAT_HTML: { - case CF_TEXT: - case CB_FORMAT_HTML: - { - size = strlen((char*)inbuf); - outbuf = lf2crlf(inbuf, &size); - break; - } - case CF_UNICODETEXT: - { - size = strlen((char*)inbuf); - inbuf = lf2crlf(inbuf, &size); - size = (ConvertToUnicode(CP_UTF8, 0, (CHAR*)inbuf, -1, (WCHAR**)&outbuf, 0) ) * sizeof(WCHAR); - g_free(inbuf); - break; - } - case CB_FORMAT_PNG: - { - gchar* data; - gsize buffersize; - gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "png", NULL, NULL); - outbuf = (UINT8*) malloc(buffersize); - memcpy(outbuf, data, buffersize); - size = buffersize; - g_object_unref(image); - break; - } - case CB_FORMAT_JPEG: - { - gchar* data; - gsize buffersize; - gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "jpeg", NULL, NULL); - outbuf = (UINT8*) malloc(buffersize); - memcpy(outbuf, data, buffersize); - size = buffersize; - g_object_unref(image); - break; - } - case CF_DIB: - case CF_DIBV5: - { - gchar* data; - gsize buffersize; - gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "bmp", NULL, NULL); - size = buffersize - 14; - outbuf = (UINT8*) malloc(size); - memcpy(outbuf, data + 14, size); - g_object_unref(image); - break; - } + size = strlen((char*)inbuf); + outbuf = lf2crlf(inbuf, &size); + break; + } + case CF_UNICODETEXT: + { + size = strlen((char*)inbuf); + inbuf = lf2crlf(inbuf, &size); + size = (ConvertToUnicode(CP_UTF8, 0, (CHAR*)inbuf, -1, (WCHAR**)&outbuf, 0) ) * sizeof(WCHAR); + g_free(inbuf); + break; + } + case CB_FORMAT_PNG: + { + gchar* data; + gsize buffersize; + gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "png", NULL, NULL); + outbuf = (UINT8*)malloc(buffersize); + memcpy(outbuf, data, buffersize); + size = buffersize; + g_object_unref(image); + break; + } + case CB_FORMAT_JPEG: + { + gchar* data; + gsize buffersize; + gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "jpeg", NULL, NULL); + outbuf = (UINT8*)malloc(buffersize); + memcpy(outbuf, data, buffersize); + size = buffersize; + g_object_unref(image); + break; + } + case CF_DIB: + case CF_DIBV5: + { + gchar* data; + gsize buffersize; + gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "bmp", NULL, NULL); + size = buffersize - 14; + outbuf = (UINT8*)malloc(size); + memcpy(outbuf, data + 14, size); + g_object_unref(image); + break; + } } } @@ -756,8 +714,7 @@ void remmina_rdp_cliprdr_set_clipboard_content(RemminaProtocolWidget* gp, Remmin if (ui->clipboard.format == CB_FORMAT_PNG || ui->clipboard.format == CF_DIB || ui->clipboard.format == CF_DIBV5 || ui->clipboard.format == CB_FORMAT_JPEG) { gtk_clipboard_set_image( gtkClipboard, ui->clipboard.data ); g_object_unref(ui->clipboard.data); - } - else { + }else { gtk_clipboard_set_text( gtkClipboard, ui->clipboard.data, -1 ); free(ui->clipboard.data); } @@ -776,11 +733,10 @@ void remmina_rdp_cliprdr_set_clipboard_data(RemminaProtocolWidget* gp, RemminaPl clipboard = ui->clipboard.clipboard; targets = gtk_target_table_new_from_list(ui->clipboard.targetlist, &n_targets); gtkClipboard = gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD); - if (gtkClipboard && targets) - { + if (gtkClipboard && targets) { gtk_clipboard_set_with_owner(gtkClipboard, targets, n_targets, - (GtkClipboardGetFunc) remmina_rdp_cliprdr_request_data, - (GtkClipboardClearFunc) remmina_rdp_cliprdr_empty_clipboard, G_OBJECT(gp)); + (GtkClipboardGetFunc)remmina_rdp_cliprdr_request_data, + (GtkClipboardClearFunc)remmina_rdp_cliprdr_empty_clipboard, G_OBJECT(gp)); gtk_target_table_free(targets, n_targets); } } @@ -803,28 +759,27 @@ static void remmina_rdp_cliprdr_detach_owner(RemminaProtocolWidget* gp, RemminaP void remmina_rdp_event_process_clipboard(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) { TRACE_CALL("__func__"); - switch (ui->clipboard.type) - { + switch (ui->clipboard.type) { - case REMMINA_RDP_UI_CLIPBOARD_FORMATLIST: - remmina_rdp_cliprdr_mt_get_format_list(gp, ui); - break; + case REMMINA_RDP_UI_CLIPBOARD_FORMATLIST: + remmina_rdp_cliprdr_mt_get_format_list(gp, ui); + break; - case REMMINA_RDP_UI_CLIPBOARD_GET_DATA: - remmina_rdp_cliprdr_get_clipboard_data(gp, ui); - break; + case REMMINA_RDP_UI_CLIPBOARD_GET_DATA: + remmina_rdp_cliprdr_get_clipboard_data(gp, ui); + break; - case REMMINA_RDP_UI_CLIPBOARD_SET_DATA: - remmina_rdp_cliprdr_set_clipboard_data(gp, ui); - break; + case REMMINA_RDP_UI_CLIPBOARD_SET_DATA: + remmina_rdp_cliprdr_set_clipboard_data(gp, ui); + break; - case REMMINA_RDP_UI_CLIPBOARD_SET_CONTENT: - remmina_rdp_cliprdr_set_clipboard_content(gp, ui); - break; + case REMMINA_RDP_UI_CLIPBOARD_SET_CONTENT: + remmina_rdp_cliprdr_set_clipboard_content(gp, ui); + break; - case REMMINA_RDP_UI_CLIPBOARD_DETACH_OWNER: - remmina_rdp_cliprdr_detach_owner(gp, ui); - break; + case REMMINA_RDP_UI_CLIPBOARD_DETACH_OWNER: + remmina_rdp_cliprdr_detach_owner(gp, ui); + break; } } @@ -853,7 +808,7 @@ void remmina_rdp_cliprdr_init(rfContext* rfi, CliprdrClientContext* cliprdr) clipboard->context = cliprdr; pthread_mutex_init(&clipboard->transfer_clip_mutex, NULL); - pthread_cond_init(&clipboard->transfer_clip_cond,NULL); + pthread_cond_init(&clipboard->transfer_clip_cond, NULL); clipboard->srv_clip_data_wait = SCDW_NONE; cliprdr->MonitorReady = remmina_rdp_cliprdr_monitor_ready; diff --git a/remmina-plugins/rdp/rdp_event.c b/remmina-plugins/rdp/rdp_event.c index 9cd8c243d..d44ed4296 100644 --- a/remmina-plugins/rdp/rdp_event.c +++ b/remmina-plugins/rdp/rdp_event.c @@ -73,16 +73,13 @@ static void remmina_rdp_event_on_focus_in(GtkWidget* widget, GdkEventKey* event, #endif gdk_window_get_device_position(gdk_get_default_root_window(), keyboard, NULL, NULL, &state); - if (state & GDK_LOCK_MASK) - { + if (state & GDK_LOCK_MASK) { toggle_keys_state |= KBD_SYNC_CAPS_LOCK; } - if (state & GDK_MOD2_MASK) - { + if (state & GDK_MOD2_MASK) { toggle_keys_state |= KBD_SYNC_NUM_LOCK; } - if (state & GDK_MOD5_MASK) - { + if (state & GDK_MOD5_MASK) { toggle_keys_state |= KBD_SYNC_SCROLL_LOCK; } @@ -101,13 +98,11 @@ void remmina_rdp_event_event_push(RemminaProtocolWidget* gp, const RemminaPlugin if (!rfi || !rfi->connected || rfi->is_reconnecting) return; - if (rfi->event_queue) - { + if (rfi->event_queue) { event = g_memdup(e, sizeof(RemminaPluginRdpEvent)); g_async_queue_push(rfi->event_queue, event); - if (write(rfi->event_pipe[1], "\0", 1)) - { + if (write(rfi->event_pipe[1], "\0", 1)) { } } } @@ -120,12 +115,11 @@ static void remmina_rdp_event_release_all_keys(RemminaProtocolWidget* gp) int i; /* Send all release key events for previously pressed keys */ - for (i = 0; i < rfi->pressed_keys->len; i++) - { + for (i = 0; i < rfi->pressed_keys->len; i++) { rdp_event = g_array_index(rfi->pressed_keys, RemminaPluginRdpEvent, i); if ((rdp_event.type == REMMINA_RDP_EVENT_TYPE_SCANCODE || - rdp_event.type == REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE) && - rdp_event.key_event.up == False) { + rdp_event.type == REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE) && + rdp_event.key_event.up == False) { rdp_event.key_event.up = True; remmina_rdp_event_event_push(gp, &rdp_event); } @@ -144,17 +138,15 @@ static void remmina_rdp_event_release_key(RemminaProtocolWidget* gp, RemminaPlug rdp_event_2.type = REMMINA_RDP_EVENT_TYPE_SCANCODE; if ((rdp_event.type == REMMINA_RDP_EVENT_TYPE_SCANCODE || - rdp_event.type == REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE) && - rdp_event.key_event.up ) { + rdp_event.type == REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE) && + rdp_event.key_event.up ) { /* Unregister the keycode only */ - for (i = 0; i < rfi->pressed_keys->len; i++) - { + for (i = 0; i < rfi->pressed_keys->len; i++) { rdp_event_2 = g_array_index(rfi->pressed_keys, RemminaPluginRdpEvent, i); if (rdp_event_2.key_event.key_code == rdp_event.key_event.key_code && - rdp_event_2.key_event.unicode_code == rdp_event.key_event.unicode_code && - rdp_event_2.key_event.extended == rdp_event.key_event.extended) - { + rdp_event_2.key_event.unicode_code == rdp_event.key_event.unicode_code && + rdp_event_2.key_event.extended == rdp_event.key_event.extended) { g_array_remove_index_fast(rfi->pressed_keys, i); break; } @@ -194,8 +186,7 @@ static void remmina_rdp_event_scale_area(RemminaProtocolWidget* gp, gint* x, gin if ((width == 0) || (height == 0)) return; - if ((rfi->scale_width == width) && (rfi->scale_height == height)) - { + if ((rfi->scale_width == width) && (rfi->scale_height == height)) { /* Same size, just copy the pixels */ *x = MIN(MAX(0, *x), width - 1); *y = MIN(MAX(0, *y), height - 1); @@ -207,10 +198,10 @@ static void remmina_rdp_event_scale_area(RemminaProtocolWidget* gp, gint* x, gin /* We have to extend the scaled region one scaled pixel, to avoid gaps */ sx = MIN(MAX(0, (*x) * rfi->scale_width / width - - rfi->scale_width / width - 2), rfi->scale_width - 1); + - rfi->scale_width / width - 2), rfi->scale_width - 1); sy = MIN(MAX(0, (*y) * rfi->scale_height / height - - rfi->scale_height / height - 2), rfi->scale_height - 1); + - rfi->scale_height / height - 2), rfi->scale_height - 1); sw = MIN(rfi->scale_width - sx, (*w) * rfi->scale_width / width + rfi->scale_width / width + 4); @@ -267,22 +258,18 @@ static void remmina_rdp_event_update_scale_factor(RemminaProtocolWidget* gp) gpwidth = a.width; gpheight = a.height; - if (rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED) - { - if ((gpwidth > 1) && (gpheight > 1)) - { + if (rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED) { + if ((gpwidth > 1) && (gpheight > 1)) { rdwidth = remmina_plugin_service->protocol_plugin_get_width(gp); rdheight = remmina_plugin_service->protocol_plugin_get_height(gp); rfi->scale_width = gpwidth; rfi->scale_height = gpheight; - rfi->scale_x = (gdouble) rfi->scale_width / (gdouble) rdwidth; - rfi->scale_y = (gdouble) rfi->scale_height / (gdouble) rdheight; + rfi->scale_x = (gdouble)rfi->scale_width / (gdouble)rdwidth; + rfi->scale_y = (gdouble)rfi->scale_height / (gdouble)rdheight; } - } - else - { + }else { rfi->scale_width = 0; rfi->scale_height = 0; rfi->scale_x = 0; @@ -303,12 +290,11 @@ static gboolean remmina_rdp_event_on_draw(GtkWidget* widget, cairo_t* context, R return FALSE; - if (rfi->is_reconnecting) - { + if (rfi->is_reconnecting) { /* freerdp is reconnecting, just show a message to the user */ width = gtk_widget_get_allocated_width(widget); - height = gtk_widget_get_allocated_height (widget); + height = gtk_widget_get_allocated_height(widget); /* Draw text */ msg = g_strdup_printf(_("Reconnection in progress. Attempt %d of %d..."), @@ -322,9 +308,7 @@ static gboolean remmina_rdp_event_on_draw(GtkWidget* widget, cairo_t* context, R cairo_show_text(context, msg); g_free(msg); - } - else - { + }else { /* Standard drawing: we copy the surface from RDP */ if (!rfi->surface) @@ -338,7 +322,7 @@ static gboolean remmina_rdp_event_on_draw(GtkWidget* widget, cairo_t* context, R cairo_set_source_surface(context, rfi->surface, 0, 0); - cairo_set_operator(context, CAIRO_OPERATOR_SOURCE); // Ignore alpha channel from FreeRDP + cairo_set_operator(context, CAIRO_OPERATOR_SOURCE); // Ignore alpha channel from FreeRDP cairo_paint(context); } @@ -373,9 +357,9 @@ static gboolean remmina_rdp_event_delayed_monitor_layout(RemminaProtocolWidget* remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); if ((gpwidth != prevwidth || gpheight != prevheight) && - gpwidth >= 200 && gpwidth < 8192 && - gpheight >= 200 && gpheight < 8192 - ) { + gpwidth >= 200 && gpwidth < 8192 && + gpheight >= 200 && gpheight < 8192 + ) { rdp_event.type = REMMINA_RDP_EVENT_TYPE_SEND_MONITOR_LAYOUT; rdp_event.monitor_layout.width = gpwidth; rdp_event.monitor_layout.height = gpheight; @@ -402,7 +386,7 @@ void remmina_rdp_event_send_delayed_monitor_layout(RemminaProtocolWidget* gp) rfi->delayed_monitor_layout_handler = 0; } 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); + rfi->delayed_monitor_layout_handler = g_timeout_add(500, (GSourceFunc)remmina_rdp_event_delayed_monitor_layout, gp); } } @@ -439,15 +423,12 @@ static void remmina_rdp_event_translate_pos(RemminaProtocolWidget* gp, int ix, i if (!rfi || !rfi->connected || rfi->is_reconnecting) return; - if ((rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED) && (rfi->scale_width >= 1) && (rfi->scale_height >= 1)) - { - *ox = (UINT16) (ix * remmina_plugin_service->protocol_plugin_get_width(gp) / rfi->scale_width); - *oy = (UINT16) (iy * remmina_plugin_service->protocol_plugin_get_height(gp) / rfi->scale_height); - } - else - { - *ox = (UINT16) ix; - *oy = (UINT16) iy; + if ((rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED) && (rfi->scale_width >= 1) && (rfi->scale_height >= 1)) { + *ox = (UINT16)(ix * remmina_plugin_service->protocol_plugin_get_width(gp) / rfi->scale_width); + *oy = (UINT16)(iy * remmina_plugin_service->protocol_plugin_get_height(gp) / rfi->scale_height); + }else { + *ox = (UINT16)ix; + *oy = (UINT16)iy; } } @@ -464,13 +445,10 @@ static void remmina_rdp_event_reverse_translate_pos_reverse(RemminaProtocolWidge if (!rfi || !rfi->connected || rfi->is_reconnecting) return; - if ((rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED) && (rfi->scale_width >= 1) && (rfi->scale_height >= 1)) - { + if ((rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED) && (rfi->scale_width >= 1) && (rfi->scale_height >= 1)) { *ox = (ix * rfi->scale_width) / remmina_plugin_service->protocol_plugin_get_width(gp); *oy = (iy * rfi->scale_height) / remmina_plugin_service->protocol_plugin_get_height(gp); - } - else - { + }else { *ox = ix; *oy = iy; } @@ -504,33 +482,31 @@ static gboolean remmina_rdp_event_on_button(GtkWidget* widget, GdkEventButton* e flag = 0; - switch (event->button) - { - case 1: - flag |= PTR_FLAGS_BUTTON1; - break; - case 2: - flag |= PTR_FLAGS_BUTTON3; - break; - case 3: - flag |= PTR_FLAGS_BUTTON2; - break; - case 8: /* back */ - case 97: /* Xming */ - extended = TRUE; - flag |= PTR_XFLAGS_BUTTON1; - break; - case 9: /* forward */ - case 112: /* Xming */ - extended = TRUE; - flag |= PTR_XFLAGS_BUTTON2; - break; - default: - return FALSE; + switch (event->button) { + case 1: + flag |= PTR_FLAGS_BUTTON1; + break; + case 2: + flag |= PTR_FLAGS_BUTTON3; + break; + case 3: + flag |= PTR_FLAGS_BUTTON2; + break; + case 8: /* back */ + case 97: /* Xming */ + extended = TRUE; + flag |= PTR_XFLAGS_BUTTON1; + break; + case 9: /* forward */ + case 112: /* Xming */ + extended = TRUE; + flag |= PTR_XFLAGS_BUTTON2; + break; + default: + return FALSE; } - if (event->type == GDK_BUTTON_PRESS) - { + if (event->type == GDK_BUTTON_PRESS) { if (extended) flag |= PTR_XFLAGS_DOWN; else @@ -540,8 +516,7 @@ static gboolean remmina_rdp_event_on_button(GtkWidget* widget, GdkEventButton* e rdp_event.type = REMMINA_RDP_EVENT_TYPE_MOUSE; remmina_rdp_event_translate_pos(gp, event->x, event->y, &rdp_event.mouse_event.x, &rdp_event.mouse_event.y); - if (flag != 0) - { + if (flag != 0) { rdp_event.mouse_event.flags = flag; rdp_event.mouse_event.extended = extended; remmina_rdp_event_event_push(gp, &rdp_event); @@ -559,29 +534,28 @@ static gboolean remmina_rdp_event_on_scroll(GtkWidget* widget, GdkEventScroll* e flag = 0; rdp_event.type = REMMINA_RDP_EVENT_TYPE_MOUSE; - switch (event->direction) - { - case GDK_SCROLL_UP: - flag = PTR_FLAGS_WHEEL | 0x0078; - break; + switch (event->direction) { + case GDK_SCROLL_UP: + flag = PTR_FLAGS_WHEEL | 0x0078; + break; - case GDK_SCROLL_DOWN: - flag = PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x0088; - break; + case GDK_SCROLL_DOWN: + flag = PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x0088; + break; #ifdef GDK_SCROLL_SMOOTH - case GDK_SCROLL_SMOOTH: - if (event->delta_y < 0) - flag = PTR_FLAGS_WHEEL | 0x0078; - if (event->delta_y > 0) - flag = PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x0088; - if (!flag) - return FALSE; - break; + case GDK_SCROLL_SMOOTH: + if (event->delta_y < 0) + flag = PTR_FLAGS_WHEEL | 0x0078; + if (event->delta_y > 0) + flag = PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x0088; + if (!flag) + return FALSE; + break; #endif - default: - return FALSE; + default: + return FALSE; } rdp_event.mouse_event.flags = flag; @@ -608,7 +582,7 @@ static gboolean remmina_rdp_event_on_key(GtkWidget* widget, GdkEventKey* event, /* GTK inspector key is propagated up. Disabled by default. * enable it by defining ENABLE_GTK_INSPECTOR_KEY */ if ( ( event->state & GDK_CONTROL_MASK ) != 0 && ( event->keyval == GDK_KEY_I || event->keyval == GDK_KEY_D ) ) { - return FALSE; + return FALSE; } #endif @@ -616,31 +590,50 @@ static gboolean remmina_rdp_event_on_key(GtkWidget* widget, GdkEventKey* event, rdp_event.key_event.up = (event->type == GDK_KEY_PRESS ? False : True); rdp_event.key_event.extended = False; - switch (event->keyval) - { - case GDK_KEY_Pause: - /* - * See https://msdn.microsoft.com/en-us/library/cc240584.aspx - * 2.2.8.1.1.3.1.1.1 Keyboard Event (TS_KEYBOARD_EVENT) - * for pause key management + switch (event->keyval) { + case GDK_KEY_Pause: + /* + * See https://msdn.microsoft.com/en-us/library/cc240584.aspx + * 2.2.8.1.1.3.1.1.1 Keyboard Event (TS_KEYBOARD_EVENT) + * for pause key management + */ + rdp_event.key_event.key_code = 0x1D; + rdp_event.key_event.up = False; + remmina_rdp_event_event_push(gp, &rdp_event); + rdp_event.key_event.key_code = 0x45; + rdp_event.key_event.up = False; + remmina_rdp_event_event_push(gp, &rdp_event); + rdp_event.key_event.key_code = 0x1D; + rdp_event.key_event.up = True; + remmina_rdp_event_event_push(gp, &rdp_event); + rdp_event.key_event.key_code = 0x45; + rdp_event.key_event.up = True; + remmina_rdp_event_event_push(gp, &rdp_event); + break; + + default: + if (!rfi->use_client_keymap) { + scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(event->hardware_keycode); + rdp_event.key_event.key_code = scancode & 0xFF; + rdp_event.key_event.extended = scancode & 0x100; + if (rdp_event.key_event.key_code) { + remmina_rdp_event_event_push(gp, &rdp_event); + keypress_list_add(gp, rdp_event); + } + }else { + display = gtk_widget_get_display(widget); + unicode_keyval = gdk_keyval_to_unicode(event->keyval); + /* Decide when whe should send a keycode or a unicode character. + * - All non char keys (shift, alt, win) should be sent as keycode + * - All special keys (F1-F10, numeric pad, home/end/arrows/pgup/pgdn/ins/del) keycode + * - All key pressed while CTRL or ALT or WIN is down are not decoded by gdk_keyval_to_unicode(), so send it as keycode + * - All keycodes not translatable to unicode chars, as keycode + * - The rest as unicode char */ - rdp_event.key_event.key_code = 0x1D; - rdp_event.key_event.up = False; - remmina_rdp_event_event_push(gp, &rdp_event); - rdp_event.key_event.key_code = 0x45; - rdp_event.key_event.up = False; - remmina_rdp_event_event_push(gp, &rdp_event); - rdp_event.key_event.key_code = 0x1D; - rdp_event.key_event.up = True; - remmina_rdp_event_event_push(gp, &rdp_event); - rdp_event.key_event.key_code = 0x45; - rdp_event.key_event.up = True; - remmina_rdp_event_event_push(gp, &rdp_event); - break; - - default: - if (!rfi->use_client_keymap) - { + if (event->keyval >= 0xfe00 || // arrows, shift, alt, Fn, num keypad... + unicode_keyval == 0 || // impossible to translate + (event->state & (GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SUPER_MASK)) != 0 // a modifier not recognized by gdk_keyval_to_unicode() + ) { scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(event->hardware_keycode); rdp_event.key_event.key_code = scancode & 0xFF; rdp_event.key_event.extended = scancode & 0x100; @@ -648,38 +641,15 @@ static gboolean remmina_rdp_event_on_key(GtkWidget* widget, GdkEventKey* event, remmina_rdp_event_event_push(gp, &rdp_event); keypress_list_add(gp, rdp_event); } + } else { + rdp_event.type = REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE; + rdp_event.key_event.unicode_code = unicode_keyval; + rdp_event.key_event.extended = False; + remmina_rdp_event_event_push(gp, &rdp_event); + keypress_list_add(gp, rdp_event); } - else - { - display = gtk_widget_get_display(widget); - unicode_keyval = gdk_keyval_to_unicode(event->keyval); - /* Decide when whe should send a keycode or a unicode character. - * - All non char keys (shift, alt, win) should be sent as keycode - * - All special keys (F1-F10, numeric pad, home/end/arrows/pgup/pgdn/ins/del) keycode - * - All key pressed while CTRL or ALT or WIN is down are not decoded by gdk_keyval_to_unicode(), so send it as keycode - * - All keycodes not translatable to unicode chars, as keycode - * - The rest as unicode char - */ - if (event->keyval >= 0xfe00 || // arrows, shift, alt, Fn, num keypad... - unicode_keyval == 0 || // impossible to translate - (event->state & (GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SUPER_MASK)) != 0 // a modifier not recognized by gdk_keyval_to_unicode() - ) { - scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(event->hardware_keycode); - rdp_event.key_event.key_code = scancode & 0xFF; - rdp_event.key_event.extended = scancode & 0x100; - if (rdp_event.key_event.key_code) { - remmina_rdp_event_event_push(gp, &rdp_event); - keypress_list_add(gp, rdp_event); - } - } else { - rdp_event.type = REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE; - rdp_event.key_event.unicode_code = unicode_keyval; - rdp_event.key_event.extended = False; - remmina_rdp_event_event_push(gp, &rdp_event); - keypress_list_add(gp, rdp_event); - } - } - break; + } + break; } return TRUE; @@ -750,31 +720,26 @@ void remmina_rdp_event_init(RemminaProtocolWidget* gp) G_CALLBACK(remmina_rdp_event_on_focus_in), gp); RemminaFile* remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); - if (!remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE)) - { + if (!remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE)) { clipboard = gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD); rfi->clipboard.clipboard_handler = g_signal_connect(clipboard, "owner-change", G_CALLBACK(remmina_rdp_event_on_clipboard), gp); } - rfi->pressed_keys = g_array_new(FALSE, TRUE, sizeof (RemminaPluginRdpEvent)); + rfi->pressed_keys = g_array_new(FALSE, TRUE, sizeof(RemminaPluginRdpEvent)); rfi->event_queue = g_async_queue_new_full(g_free); rfi->ui_queue = g_async_queue_new(); pthread_mutex_init(&rfi->ui_queue_mutex, NULL); - if (pipe(rfi->event_pipe)) - { + if (pipe(rfi->event_pipe)) { g_print("Error creating pipes.\n"); rfi->event_pipe[0] = -1; rfi->event_pipe[1] = -1; rfi->event_handle = NULL; - } - else - { + }else { flags = fcntl(rfi->event_pipe[0], F_GETFL, 0); fcntl(rfi->event_pipe[0], F_SETFL, flags | O_NONBLOCK); rfi->event_handle = CreateFileDescriptorEvent(NULL, FALSE, FALSE, rfi->event_pipe[0], WINPR_FD_READ); - if (!rfi->event_handle) - { + if (!rfi->event_handle) { g_print("CreateFileDescriptorEvent() failed\n"); } } @@ -792,18 +757,17 @@ void remmina_rdp_event_free_event(RemminaProtocolWidget* gp, RemminaPluginRdpUiO TRACE_CALL("__func__"); rfContext* rfi = GET_PLUGIN_DATA(gp); - switch (obj->type) - { - case REMMINA_RDP_UI_RFX: - rfx_message_free(rfi->rfx_context, obj->rfx.message); - break; + switch (obj->type) { + case REMMINA_RDP_UI_RFX: + rfx_message_free(rfi->rfx_context, obj->rfx.message); + break; - case REMMINA_RDP_UI_NOCODEC: - free(obj->nocodec.bitmap); - break; + case REMMINA_RDP_UI_NOCODEC: + free(obj->nocodec.bitmap); + break; - default: - break; + default: + break; } g_free(obj); @@ -819,27 +783,22 @@ void remmina_rdp_event_uninit(RemminaProtocolWidget* gp) if (!rfi) return; /* unregister the clipboard monitor */ - if (rfi->clipboard.clipboard_handler) - { + if (rfi->clipboard.clipboard_handler) { g_signal_handler_disconnect(G_OBJECT(gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD)), rfi->clipboard.clipboard_handler); rfi->clipboard.clipboard_handler = 0; } - if (rfi->delayed_monitor_layout_handler) - { + if (rfi->delayed_monitor_layout_handler) { g_source_remove(rfi->delayed_monitor_layout_handler); rfi->delayed_monitor_layout_handler = 0; } - if (rfi->ui_handler) - { + if (rfi->ui_handler) { g_source_remove(rfi->ui_handler); rfi->ui_handler = 0; } - while ((ui =(RemminaPluginRdpUiObject*) g_async_queue_try_pop(rfi->ui_queue)) != NULL) - { + while ((ui = (RemminaPluginRdpUiObject*)g_async_queue_try_pop(rfi->ui_queue)) != NULL) { remmina_rdp_event_free_event(gp, ui); } - if (rfi->surface) - { + if (rfi->surface) { cairo_surface_destroy(rfi->surface); rfi->surface = NULL; } @@ -853,8 +812,7 @@ void remmina_rdp_event_uninit(RemminaProtocolWidget* gp) rfi->ui_queue = NULL; pthread_mutex_destroy(&rfi->ui_queue_mutex); - if (rfi->event_handle) - { + if (rfi->event_handle) { CloseHandle(rfi->event_handle); rfi->event_handle = NULL; } @@ -866,12 +824,13 @@ void remmina_rdp_event_uninit(RemminaProtocolWidget* gp) static void remmina_rdp_event_create_cairo_surface(rfContext* rfi) { int stride; + if (rfi->surface) { cairo_surface_destroy(rfi->surface); rfi->surface = NULL; } stride = cairo_format_stride_for_width(rfi->cairo_format, rfi->width); - rfi->surface = cairo_image_surface_create_for_data((unsigned char*) rfi->primary_buffer, rfi->cairo_format, rfi->width, rfi->height, stride); + rfi->surface = cairo_image_surface_create_for_data((unsigned char*)rfi->primary_buffer, rfi->cairo_format, rfi->width, rfi->height, stride); } void remmina_rdp_event_update_scale(RemminaProtocolWidget* gp) @@ -891,7 +850,7 @@ void remmina_rdp_event_update_scale(RemminaProtocolWidget* gp) /* See if we also must rellocate rfi->surface with different width and height, * this usually happens after a DesktopResize RDP event*/ if ( rfi->surface && (width != cairo_image_surface_get_width(rfi->surface) || - height != cairo_image_surface_get_height(rfi->surface) )) { + height != cairo_image_surface_get_height(rfi->surface) )) { /* Destroys and recreate rfi->surface with new width and height, * calls gdi_resize and save new gdi->primary buffer pointer */ if (rfi->surface) { @@ -900,7 +859,7 @@ void remmina_rdp_event_update_scale(RemminaProtocolWidget* gp) } rfi->width = width; rfi->height = height; - gdi = ((rdpContext *)rfi)->gdi; + gdi = ((rdpContext*)rfi)->gdi; gdi_resize(gdi, width, height); rfi->primary_buffer = gdi->primary_buffer; remmina_rdp_event_create_cairo_surface(rfi); @@ -908,13 +867,10 @@ void remmina_rdp_event_update_scale(RemminaProtocolWidget* gp) remmina_rdp_event_update_scale_factor(gp); - if (rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED || rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_DYNRES) - { + if (rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_SCALED || rfi->scale == REMMINA_PROTOCOL_WIDGET_SCALE_MODE_DYNRES) { /* In scaled mode and autores mode, drawing_area will get its dimensions from its parent */ gtk_widget_set_size_request(rfi->drawing_area, -1, -1 ); - } - else - { + }else { /* In non scaled mode, the plugins forces dimensions of drawing area */ gtk_widget_set_size_request(rfi->drawing_area, width, height); } @@ -952,12 +908,11 @@ static BOOL remmina_rdp_event_create_cursor(RemminaProtocolWidget* gp, RemminaPl UINT8* data = malloc(pointer->width * pointer->height * 4); if (freerdp_image_copy_from_pointer_data( - (BYTE*) data, PIXEL_FORMAT_BGRA32, - pointer->width * 4, 0, 0, pointer->width, pointer->height, - pointer->xorMaskData, pointer->lengthXorMask, - pointer->andMaskData, pointer->lengthAndMask, - pointer->xorBpp, &(ui->cursor.context->gdi->palette)) < 0) - { + (BYTE*)data, PIXEL_FORMAT_BGRA32, + pointer->width * 4, 0, 0, pointer->width, pointer->height, + pointer->xorMaskData, pointer->lengthXorMask, + pointer->andMaskData, pointer->lengthAndMask, + pointer->xorBpp, &(ui->cursor.context->gdi->palette)) < 0) { free(data); return FALSE; } @@ -1021,36 +976,35 @@ static void remmina_rdp_event_cursor(RemminaProtocolWidget* gp, RemminaPluginRdp TRACE_CALL("__func__"); rfContext* rfi = GET_PLUGIN_DATA(gp); - switch (ui->cursor.type) - { - case REMMINA_RDP_POINTER_NEW: - ui->retval = remmina_rdp_event_create_cursor(gp, ui) ? 1 : 0; - break; - - case REMMINA_RDP_POINTER_FREE: - remmina_rdp_event_free_cursor(gp, ui); - break; - - case REMMINA_RDP_POINTER_SET: - gdk_window_set_cursor(gtk_widget_get_window(rfi->drawing_area), ui->cursor.pointer->cursor); - ui->retval = 1; - break; - - case REMMINA_RDP_POINTER_SETPOS: - ui->retval = remmina_rdp_event_set_pointer_position(gp, ui->pos.x, ui->pos.y) ? 1 : 0; - break; - - case REMMINA_RDP_POINTER_NULL: - gdk_window_set_cursor(gtk_widget_get_window(rfi->drawing_area), - gdk_cursor_new_for_display(gdk_display_get_default(), - GDK_BLANK_CURSOR)); - ui->retval = 1; - break; - - case REMMINA_RDP_POINTER_DEFAULT: - gdk_window_set_cursor(gtk_widget_get_window(rfi->drawing_area), NULL); - ui->retval = 1; - break; + switch (ui->cursor.type) { + case REMMINA_RDP_POINTER_NEW: + ui->retval = remmina_rdp_event_create_cursor(gp, ui) ? 1 : 0; + break; + + case REMMINA_RDP_POINTER_FREE: + remmina_rdp_event_free_cursor(gp, ui); + break; + + case REMMINA_RDP_POINTER_SET: + gdk_window_set_cursor(gtk_widget_get_window(rfi->drawing_area), ui->cursor.pointer->cursor); + ui->retval = 1; + break; + + case REMMINA_RDP_POINTER_SETPOS: + ui->retval = remmina_rdp_event_set_pointer_position(gp, ui->pos.x, ui->pos.y) ? 1 : 0; + break; + + case REMMINA_RDP_POINTER_NULL: + gdk_window_set_cursor(gtk_widget_get_window(rfi->drawing_area), + gdk_cursor_new_for_display(gdk_display_get_default(), + GDK_BLANK_CURSOR)); + ui->retval = 1; + break; + + case REMMINA_RDP_POINTER_DEFAULT: + gdk_window_set_cursor(gtk_widget_get_window(rfi->drawing_area), NULL); + ui->retval = 1; + break; } } @@ -1069,45 +1023,43 @@ void remmina_rdp_event_unfocus(RemminaProtocolWidget* gp) static void remmina_rdp_event_process_event(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) { TRACE_CALL("__func__"); - switch (ui->event.type) - { - case REMMINA_RDP_UI_EVENT_UPDATE_SCALE: - remmina_rdp_ui_event_update_scale(gp, ui); - break; + switch (ui->event.type) { + case REMMINA_RDP_UI_EVENT_UPDATE_SCALE: + remmina_rdp_ui_event_update_scale(gp, ui); + break; } } static void remmina_rdp_event_process_ui_event(RemminaProtocolWidget* gp, RemminaPluginRdpUiObject* ui) { TRACE_CALL("__func__"); - switch (ui->type) - { - case REMMINA_RDP_UI_UPDATE_REGION: - remmina_rdp_event_update_region(gp, ui); - break; - - case REMMINA_RDP_UI_CONNECTED: - remmina_rdp_event_connected(gp, ui); - break; - - case REMMINA_RDP_UI_RECONNECT_PROGRESS: - remmina_rdp_event_reconnect_progress(gp, ui); - break; - - case REMMINA_RDP_UI_CURSOR: - remmina_rdp_event_cursor(gp, ui); - break; - - case REMMINA_RDP_UI_CLIPBOARD: - remmina_rdp_event_process_clipboard(gp, ui); - break; - - case REMMINA_RDP_UI_EVENT: - remmina_rdp_event_process_event(gp,ui); - break; - - default: - break; + switch (ui->type) { + case REMMINA_RDP_UI_UPDATE_REGION: + remmina_rdp_event_update_region(gp, ui); + break; + + case REMMINA_RDP_UI_CONNECTED: + remmina_rdp_event_connected(gp, ui); + break; + + case REMMINA_RDP_UI_RECONNECT_PROGRESS: + remmina_rdp_event_reconnect_progress(gp, ui); + break; + + case REMMINA_RDP_UI_CURSOR: + remmina_rdp_event_cursor(gp, ui); + break; + + case REMMINA_RDP_UI_CLIPBOARD: + remmina_rdp_event_process_clipboard(gp, ui); + break; + + case REMMINA_RDP_UI_EVENT: + remmina_rdp_event_process_event(gp, ui); + break; + + default: + break; } } @@ -1119,12 +1071,10 @@ static gboolean remmina_rdp_event_process_ui_queue(RemminaProtocolWidget* gp) RemminaPluginRdpUiObject* ui; pthread_mutex_lock(&rfi->ui_queue_mutex); - ui = (RemminaPluginRdpUiObject*) g_async_queue_try_pop(rfi->ui_queue); - if (ui) - { + ui = (RemminaPluginRdpUiObject*)g_async_queue_try_pop(rfi->ui_queue); + if (ui) { pthread_mutex_lock(&ui->sync_wait_mutex); - if (!rfi->thread_cancelled) - { + if (!rfi->thread_cancelled) { remmina_rdp_event_process_ui_event(gp, ui); } // Should we signal the caller thread to unlock ? @@ -1139,9 +1089,7 @@ static gboolean remmina_rdp_event_process_ui_queue(RemminaProtocolWidget* gp) pthread_mutex_unlock(&rfi->ui_queue_mutex); return TRUE; - } - else - { + }else { rfi->ui_handler = 0; pthread_mutex_unlock(&rfi->ui_queue_mutex); return FALSE; @@ -1159,7 +1107,7 @@ static void remmina_rdp_event_queue_ui(RemminaProtocolWidget* gp, RemminaPluginR return; } - if(remmina_plugin_service->is_main_thread()) { + if (remmina_plugin_service->is_main_thread()) { remmina_rdp_event_process_ui_event(gp, ui); return; } @@ -1172,7 +1120,7 @@ static void remmina_rdp_event_queue_ui(RemminaProtocolWidget* gp, RemminaPluginR ui->complete = FALSE; if (ui_sync_save) { - pthread_mutex_init(&ui->sync_wait_mutex,NULL); + pthread_mutex_init(&ui->sync_wait_mutex, NULL); pthread_cond_init(&ui->sync_wait_cond, NULL); } @@ -1181,14 +1129,14 @@ static void remmina_rdp_event_queue_ui(RemminaProtocolWidget* gp, RemminaPluginR g_async_queue_push(rfi->ui_queue, ui); if (!rfi->ui_handler) { - rfi->ui_handler = IDLE_ADD((GSourceFunc) remmina_rdp_event_process_ui_queue, gp); + rfi->ui_handler = IDLE_ADD((GSourceFunc)remmina_rdp_event_process_ui_queue, gp); } if (ui_sync_save) { /* Wait for main thread function completion before returning */ pthread_mutex_lock(&ui->sync_wait_mutex); pthread_mutex_unlock(&rfi->ui_queue_mutex); - while(!ui->complete) { + while (!ui->complete) { pthread_cond_wait(&ui->sync_wait_cond, &ui->sync_wait_mutex); } pthread_cond_destroy(&ui->sync_wait_cond); diff --git a/remmina-plugins/rdp/rdp_file.c b/remmina-plugins/rdp/rdp_file.c index ed9122586..6f81cc642 100644 --- a/remmina-plugins/rdp/rdp_file.c +++ b/remmina-plugins/rdp/rdp_file.c @@ -62,97 +62,56 @@ gboolean remmina_rdp_file_import_test(const gchar* from_file) static void remmina_rdp_file_import_field(RemminaFile* remminafile, const gchar* key, const gchar* value) { TRACE_CALL("__func__"); - if (g_strcmp0(key, "desktopwidth") == 0) - { + if (g_strcmp0(key, "desktopwidth") == 0) { remmina_plugin_service->file_set_string(remminafile, "resolution_width", value); - } - else if (g_strcmp0(key, "desktopheight") == 0) - { + }else if (g_strcmp0(key, "desktopheight") == 0) { remmina_plugin_service->file_set_string(remminafile, "resolution_height", value); - } - else if (g_strcmp0(key, "session bpp") == 0) - { + }else if (g_strcmp0(key, "session bpp") == 0) { remmina_plugin_service->file_set_string(remminafile, "colordepth", value); - } - else if (g_strcmp0(key, "keyboardhook") == 0) - { - remmina_plugin_service->file_set_int(remminafile, "keyboard_grab", (atoi (value) == 1)); - } - else if (g_strcmp0(key, "full address") == 0) - { + }else if (g_strcmp0(key, "keyboardhook") == 0) { + remmina_plugin_service->file_set_int(remminafile, "keyboard_grab", (atoi(value) == 1)); + }else if (g_strcmp0(key, "full address") == 0) { remmina_plugin_service->file_set_string(remminafile, "server", value); - } - else if (g_strcmp0(key, "audiomode") == 0) - { - switch (atoi(value)) - { - case 0: - remmina_plugin_service->file_set_string(remminafile, "sound", "local"); - break; - case 1: - remmina_plugin_service->file_set_string(remminafile, "sound", "remote"); - break; + }else if (g_strcmp0(key, "audiomode") == 0) { + switch (atoi(value)) { + case 0: + remmina_plugin_service->file_set_string(remminafile, "sound", "local"); + break; + case 1: + remmina_plugin_service->file_set_string(remminafile, "sound", "remote"); + break; } - } - else if (g_strcmp0(key, "microphone") == 0) - { - remmina_plugin_service->file_set_int(remminafile, "microphone", (atoi (value) == 1)); - } - else if (g_strcmp0(key, "redirectprinters") == 0) - { - remmina_plugin_service->file_set_int(remminafile, "shareprinter", (atoi (value) == 1)); - } - else if (g_strcmp0(key, "redirectsmartcard") == 0) - { - remmina_plugin_service->file_set_int(remminafile, "sharesmartcard", (atoi (value) == 1)); - } - else if (g_strcmp0(key, "redirectclipboard") == 0) - { - remmina_plugin_service->file_set_int(remminafile, "disableclipboard", (atoi (value) != 1)); - } - else if (g_strcmp0(key, "alternate shell") == 0) - { + }else if (g_strcmp0(key, "microphone") == 0) { + remmina_plugin_service->file_set_int(remminafile, "microphone", (atoi(value) == 1)); + } else if (g_strcmp0(key, "redirectprinters") == 0) { + remmina_plugin_service->file_set_int(remminafile, "shareprinter", (atoi(value) == 1)); + }else if (g_strcmp0(key, "redirectsmartcard") == 0) { + remmina_plugin_service->file_set_int(remminafile, "sharesmartcard", (atoi(value) == 1)); + }else if (g_strcmp0(key, "redirectclipboard") == 0) { + remmina_plugin_service->file_set_int(remminafile, "disableclipboard", (atoi(value) != 1)); + }else if (g_strcmp0(key, "alternate shell") == 0) { remmina_plugin_service->file_set_string(remminafile, "exec", value); - } - else if (g_strcmp0(key, "shell working directory") == 0) - { + }else if (g_strcmp0(key, "shell working directory") == 0) { remmina_plugin_service->file_set_string(remminafile, "execpath", value); - } - else if (g_strcmp0(key, "loadbalanceinfo") == 0) - { + }else if (g_strcmp0(key, "loadbalanceinfo") == 0) { remmina_plugin_service->file_set_string(remminafile, "loadbalanceinfo", value); - } - else if (g_strcmp0(key, "gatewayhostname") == 0) - { + }else if (g_strcmp0(key, "gatewayhostname") == 0) { remmina_plugin_service->file_set_string(remminafile, "gateway_server", value); - } - else if (g_strcmp0(key, "gatewayusagemethod") == 0) - { + }else if (g_strcmp0(key, "gatewayusagemethod") == 0) { remmina_plugin_service->file_set_string(remminafile, "gatewayusagemethod", value); - } - else if (g_strcmp0(key, "gatewaycredentialssource") == 0) - { + }else if (g_strcmp0(key, "gatewaycredentialssource") == 0) { remmina_plugin_service->file_set_string(remminafile, "gatewaycredentialssource", value); - } - else if (g_strcmp0(key, "gatewayprofileusagemethod") == 0) - { + }else if (g_strcmp0(key, "gatewayprofileusagemethod") == 0) { remmina_plugin_service->file_set_string(remminafile, "gatewayprofileusagemethod", value); } /* tsclient fields, import only */ - else if (g_strcmp0(key, "client hostname") == 0) - { + else if (g_strcmp0(key, "client hostname") == 0) { remmina_plugin_service->file_set_string(remminafile, "clientname", value); - } - else if (g_strcmp0(key, "domain") == 0) - { + }else if (g_strcmp0(key, "domain") == 0) { remmina_plugin_service->file_set_string(remminafile, "domain", value); - } - else if (g_strcmp0(key, "username") == 0) - { + }else if (g_strcmp0(key, "username") == 0) { remmina_plugin_service->file_set_string(remminafile, "username", value); - } - else if (g_strcmp0(key, "password") == 0) - { + }else if (g_strcmp0(key, "password") == 0) { remmina_plugin_service->file_set_string(remminafile, "password", value); } } @@ -168,60 +127,48 @@ static RemminaFile* remmina_rdp_file_import_channel(GIOChannel* channel) RemminaFile* remminafile; guchar magic[2] = { 0 }; - if (g_io_channel_set_encoding(channel, NULL, &error) != G_IO_STATUS_NORMAL) - { + if (g_io_channel_set_encoding(channel, NULL, &error) != G_IO_STATUS_NORMAL) { g_print("g_io_channel_set_encoding: %s\n", error->message); return NULL; } /* Try to detect the UTF-16 encoding */ - if (g_io_channel_read_chars(channel, (gchar*) magic, 2, &bytes_read, &error) != G_IO_STATUS_NORMAL) - { + if (g_io_channel_read_chars(channel, (gchar*)magic, 2, &bytes_read, &error) != G_IO_STATUS_NORMAL) { g_print("g_io_channel_read_chars: %s\n", error->message); return NULL; } - if (magic[0] == 0xFF && magic[1] == 0xFE) - { + if (magic[0] == 0xFF && magic[1] == 0xFE) { enc = "UTF-16LE"; - } - else if (magic[0] == 0xFE && magic[1] == 0xFF) - { + }else if (magic[0] == 0xFE && magic[1] == 0xFF) { enc = "UTF-16BE"; - } - else - { + }else { enc = "UTF-8"; - if (g_io_channel_seek_position(channel, 0, G_SEEK_SET, &error) != G_IO_STATUS_NORMAL) - { + if (g_io_channel_seek_position(channel, 0, G_SEEK_SET, &error) != G_IO_STATUS_NORMAL) { g_print("g_io_channel_seek: failed\n"); return NULL; } } - if (g_io_channel_set_encoding(channel, enc, &error) != G_IO_STATUS_NORMAL) - { + if (g_io_channel_set_encoding(channel, enc, &error) != G_IO_STATUS_NORMAL) { g_print("g_io_channel_set_encoding: %s\n", error->message); return NULL; } remminafile = remmina_plugin_service->file_new(); - while (g_io_channel_read_line(channel, &line, NULL, &bytes_read, &error) == G_IO_STATUS_NORMAL) - { + while (g_io_channel_read_line(channel, &line, NULL, &bytes_read, &error) == G_IO_STATUS_NORMAL) { if (line == NULL) break; line[bytes_read] = '\0'; p = strchr(line, ':'); - if (p) - { + if (p) { *p++ = '\0'; - p = strchr (p, ':'); + p = strchr(p, ':'); - if (p) - { + if (p) { p++; remmina_rdp_file_import_field(remminafile, line, p); } @@ -246,8 +193,7 @@ RemminaFile* remmina_rdp_file_import(const gchar* from_file) channel = g_io_channel_new_file(from_file, "r", &error); - if (channel == NULL) - { + if (channel == NULL) { g_print("Failed to import %s: %s\n", from_file, error->message); return NULL; } @@ -276,12 +222,10 @@ gboolean remmina_rdp_file_export_channel(RemminaFile* remminafile, FILE* fp) fprintf(fp, "screen mode id:i:2\r\n"); cs = remmina_plugin_service->file_get_string(remminafile, "resolution"); - if (cs) - { + if (cs) { s = g_strdup(cs); p = strchr(s, 'x'); - if (p) - { + if (p) { *p++ = '\0'; fprintf(fp, "desktopwidth:i:%s\r\n", s); fprintf(fp, "desktopheight:i:%s\r\n", p); @@ -344,21 +288,17 @@ gboolean remmina_rdp_file_export(RemminaFile* remminafile, const gchar* to_file) gchar* p; gboolean ret; - p = strrchr (to_file, '.'); + p = strrchr(to_file, '.'); - if (p && (g_strcmp0(p + 1, "rdp") == 0 || g_strcmp0(p + 1, "RDP") == 0)) - { + if (p && (g_strcmp0(p + 1, "rdp") == 0 || g_strcmp0(p + 1, "RDP") == 0)) { p = g_strdup(to_file); - } - else - { + }else { p = g_strdup_printf("%s.rdp", to_file); } fp = g_fopen(p, "w+"); - if (fp == NULL) - { + if (fp == NULL) { g_print("Failed to export %s\n", p); g_free(p); return FALSE; diff --git a/remmina-plugins/rdp/rdp_graphics.c b/remmina-plugins/rdp/rdp_graphics.c index d6015162a..bd7701b1a 100644 --- a/remmina-plugins/rdp/rdp_graphics.c +++ b/remmina-plugins/rdp/rdp_graphics.c @@ -56,29 +56,25 @@ BOOL rf_Bitmap_New(rdpContext* context, rdpBitmap* bitmap) UINT8* data; Pixmap pixmap; XImage* image; - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; XSetFunction(rfi->display, rfi->gc, GXcopy); pixmap = XCreatePixmap(rfi->display, rfi->drawable, bitmap->width, bitmap->height, rfi->depth); - if (bitmap->data != NULL) - { + if (bitmap->data != NULL) { data = freerdp_image_convert(bitmap->data, NULL, - bitmap->width, bitmap->height, rfi->srcBpp, rfi->bpp, rfi->clrconv); + bitmap->width, bitmap->height, rfi->srcBpp, rfi->bpp, rfi->clrconv); - if (bitmap->ephemeral != TRUE) - { + if (bitmap->ephemeral != TRUE) { image = XCreateImage(rfi->display, rfi->visual, rfi->depth, - ZPixmap, 0, (char*) data, bitmap->width, bitmap->height, rfi->scanline_pad, 0); + ZPixmap, 0, (char*)data, bitmap->width, bitmap->height, rfi->scanline_pad, 0); XPutImage(rfi->display, pixmap, rfi->gc, image, 0, 0, 0, 0, bitmap->width, bitmap->height); XFree(image); if (data != bitmap->data) && (data != NULL) free(data); - } - else - { + }else { if (data != bitmap->data) && (data != NULL) free(bitmap->data); @@ -86,7 +82,7 @@ BOOL rf_Bitmap_New(rdpContext* context, rdpBitmap* bitmap) } } - ((rfBitmap*) bitmap)->pixmap = pixmap; + ((rfBitmap*)bitmap)->pixmap = pixmap; #endif return TRUE; } @@ -95,12 +91,12 @@ void rf_Bitmap_Free(rdpContext* context, rdpBitmap* bitmap) { TRACE_CALL("__func__"); #ifdef RF_BITMAP - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; printf("rf_Bitmap_Free\n"); - if (((rfBitmap*) bitmap)->pixmap != 0) - XFreePixmap(rfi->display, ((rfBitmap*) bitmap)->pixmap); + if (((rfBitmap*)bitmap)->pixmap != 0) + XFreePixmap(rfi->display, ((rfBitmap*)bitmap)->pixmap); #endif } @@ -110,7 +106,7 @@ BOOL rf_Bitmap_Paint(rdpContext* context, rdpBitmap* bitmap) #ifdef RF_BITMAP XImage* image; int width, height; - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; printf("rf_Bitmap_Paint\n"); @@ -120,10 +116,10 @@ BOOL rf_Bitmap_Paint(rdpContext* context, rdpBitmap* bitmap) XSetFunction(rfi->display, rfi->gc, GXcopy); image = XCreateImage(rfi->display, rfi->visual, rfi->depth, - ZPixmap, 0, (char*) bitmap->data, bitmap->width, bitmap->height, rfi->scanline_pad, 0); + ZPixmap, 0, (char*)bitmap->data, bitmap->width, bitmap->height, rfi->scanline_pad, 0); XPutImage(rfi->display, rfi->primary, rfi->gc, - image, 0, 0, bitmap->left, bitmap->top, width, height); + image, 0, 0, bitmap->left, bitmap->top, width, height); XFree(image); @@ -136,7 +132,7 @@ BOOL rf_Bitmap_Paint(rdpContext* context, rdpBitmap* bitmap) } BOOL rf_Bitmap_Decompress(rdpContext* context, rdpBitmap* bitmap, - const BYTE* data, UINT32 width, UINT32 height, UINT32 bpp, UINT32 length, BOOL compressed, UINT32 codec_id) + const BYTE* data, UINT32 width, UINT32 height, UINT32 bpp, UINT32 length, BOOL compressed, UINT32 codec_id) { TRACE_CALL("__func__"); #ifdef RF_BITMAP @@ -147,23 +143,19 @@ BOOL rf_Bitmap_Decompress(rdpContext* context, rdpBitmap* bitmap, size = width * height * (bpp + 7) / 8; if (bitmap->data == NULL) - bitmap->data = (UINT8*) xmalloc(size); + bitmap->data = (UINT8*)xmalloc(size); else - bitmap->data = (UINT8*) xrealloc(bitmap->data, size); + bitmap->data = (UINT8*)xrealloc(bitmap->data, size); - if (compressed) - { + if (compressed) { BOOL status; status = bitmap_decompress(data, bitmap->data, width, height, length, bpp, bpp); - if (status != TRUE) - { + if (status != TRUE) { printf("Bitmap Decompression Failed\n"); } - } - else - { + }else { freerdp_image_flip(data, bitmap->data, width, height, bpp); } @@ -178,12 +170,12 @@ BOOL rf_Bitmap_SetSurface(rdpContext* context, rdpBitmap* bitmap, BOOL primary) { TRACE_CALL("__func__"); #ifdef RF_BITMAP - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; if (primary) rfi->drawing = rfi->primary; else - rfi->drawing = ((rfBitmap*) bitmap)->pixmap; + rfi->drawing = ((rfBitmap*)bitmap)->pixmap; #endif return TRUE; } @@ -194,14 +186,13 @@ BOOL rf_Pointer_New(rdpContext* context, rdpPointer* pointer) { TRACE_CALL("__func__"); RemminaPluginRdpUiObject* ui; - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; - if ((pointer->andMaskData != 0) && (pointer->xorMaskData != 0)) - { + if ((pointer->andMaskData != 0) && (pointer->xorMaskData != 0)) { ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_CURSOR; ui->cursor.context = context; - ui->cursor.pointer = (rfPointer*) pointer; + ui->cursor.pointer = (rfPointer*)pointer; ui->cursor.type = REMMINA_RDP_POINTER_NEW; return remmina_rdp_event_queue_ui_sync_retint(rfi->protocol_widget, ui) ? TRUE : FALSE; } @@ -212,18 +203,18 @@ void rf_Pointer_Free(rdpContext* context, rdpPointer* pointer) { TRACE_CALL("__func__"); RemminaPluginRdpUiObject* ui; - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; #if GTK_VERSION == 2 - if (((rfPointer*) pointer)->cursor != NULL) + if (((rfPointer*)pointer)->cursor != NULL) #else - if (G_IS_OBJECT(((rfPointer*) pointer)->cursor)) + if (G_IS_OBJECT(((rfPointer*)pointer)->cursor)) #endif { ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_CURSOR; ui->cursor.context = context; - ui->cursor.pointer = (rfPointer*) pointer; + ui->cursor.pointer = (rfPointer*)pointer; ui->cursor.type = REMMINA_RDP_POINTER_FREE; remmina_rdp_event_queue_ui_sync_retint(rfi->protocol_widget, ui); } @@ -233,11 +224,11 @@ BOOL rf_Pointer_Set(rdpContext* context, const rdpPointer* pointer) { TRACE_CALL("__func__"); RemminaPluginRdpUiObject* ui; - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_CURSOR; - ui->cursor.pointer = (rfPointer*) pointer; + ui->cursor.pointer = (rfPointer*)pointer; ui->cursor.type = REMMINA_RDP_POINTER_SET; return remmina_rdp_event_queue_ui_sync_retint(rfi->protocol_widget, ui) ? TRUE : FALSE; @@ -248,7 +239,7 @@ BOOL rf_Pointer_SetNull(rdpContext* context) { TRACE_CALL("__func__"); RemminaPluginRdpUiObject* ui; - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_CURSOR; @@ -261,7 +252,7 @@ BOOL rf_Pointer_SetDefault(rdpContext* context) { TRACE_CALL("__func__"); RemminaPluginRdpUiObject* ui; - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_CURSOR; @@ -274,7 +265,7 @@ BOOL rf_Pointer_SetPosition(rdpContext* context, UINT32 x, UINT32 y) { TRACE_CALL("__func__"); RemminaPluginRdpUiObject* ui; - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; ui = g_new0(RemminaPluginRdpUiObject, 1); ui->type = REMMINA_RDP_UI_CURSOR; ui->cursor.type = REMMINA_RDP_POINTER_SETPOS; @@ -295,15 +286,15 @@ BOOL rf_Glyph_New(rdpContext* context, const rdpGlyph* glyph) rfContext* rfi; rfGlyph* rf_glyph; - rf_glyph = (rfGlyph*) glyph; - rfi = (rfContext*) context; + rf_glyph = (rfGlyph*)glyph; + rfi = (rfContext*)context; scanline = (glyph->cx + 7) / 8; rf_glyph->pixmap = XCreatePixmap(rfi->display, rfi->drawing, glyph->cx, glyph->cy, 1); image = XCreateImage(rfi->display, rfi->visual, 1, - ZPixmap, 0, (char*) glyph->aj, glyph->cx, glyph->cy, 8, scanline); + ZPixmap, 0, (char*)glyph->aj, glyph->cx, glyph->cy, 8, scanline); image->byte_order = MSBFirst; image->bitmap_bit_order = MSBFirst; @@ -319,23 +310,23 @@ void rf_Glyph_Free(rdpContext* context, rdpGlyph* glyph) { TRACE_CALL("__func__"); #ifdef RF_GLYPH - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; - if (((rfGlyph*) glyph)->pixmap != 0) - XFreePixmap(rfi->display, ((rfGlyph*) glyph)->pixmap); + if (((rfGlyph*)glyph)->pixmap != 0) + XFreePixmap(rfi->display, ((rfGlyph*)glyph)->pixmap); #endif } static BOOL rf_Glyph_Draw(rdpContext* context, const rdpGlyph* glyph, UINT32 x, - UINT32 y, UINT32 w, UINT32 h, UINT32 sx, UINT32 sy, - BOOL fOpRedundant) + UINT32 y, UINT32 w, UINT32 h, UINT32 sx, UINT32 sy, + BOOL fOpRedundant) { TRACE_CALL("__func__"); #ifdef RF_GLYPH rfGlyph* rf_glyph; - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; - rf_glyph = (rfGlyph*) glyph; + rf_glyph = (rfGlyph*)glyph; XSetStipple(rfi->display, rfi->gc, rf_glyph->pixmap); XSetTSOrigin(rfi->display, rfi->gc, x, y); @@ -346,20 +337,20 @@ static BOOL rf_Glyph_Draw(rdpContext* context, const rdpGlyph* glyph, UINT32 x, } static BOOL rf_Glyph_BeginDraw(rdpContext* context, UINT32 x, UINT32 y, - UINT32 width, UINT32 height, UINT32 bgcolor, - UINT32 fgcolor, BOOL fOpRedundant) + UINT32 width, UINT32 height, UINT32 bgcolor, + UINT32 fgcolor, BOOL fOpRedundant) { TRACE_CALL("__func__"); #ifdef RF_GLYPH - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; - bgcolor = (rfi->clrconv->invert)? - freerdp_color_convert_var_bgr(bgcolor, rfi->srcBpp, 32, rfi->clrconv): - freerdp_color_convert_var_rgb(bgcolor, rfi->srcBpp, 32, rfi->clrconv); + bgcolor = (rfi->clrconv->invert) ? + freerdp_color_convert_var_bgr(bgcolor, rfi->srcBpp, 32, rfi->clrconv) : + freerdp_color_convert_var_rgb(bgcolor, rfi->srcBpp, 32, rfi->clrconv); - fgcolor = (rfi->clrconv->invert)? - freerdp_color_convert_var_bgr(fgcolor, rfi->srcBpp, 32, rfi->clrconv): - freerdp_color_convert_var_rgb(fgcolor, rfi->srcBpp, 32, rfi->clrconv); + fgcolor = (rfi->clrconv->invert) ? + freerdp_color_convert_var_bgr(fgcolor, rfi->srcBpp, 32, rfi->clrconv) : + freerdp_color_convert_var_rgb(fgcolor, rfi->srcBpp, 32, rfi->clrconv); XSetFunction(rfi->display, rfi->gc, GXcopy); XSetFillStyle(rfi->display, rfi->gc, FillSolid); @@ -374,15 +365,14 @@ static BOOL rf_Glyph_BeginDraw(rdpContext* context, UINT32 x, UINT32 y, } static BOOL rf_Glyph_EndDraw(rdpContext* context, UINT32 x, UINT32 y, - UINT32 width, UINT32 height, - UINT32 bgcolor, UINT32 fgcolor) + UINT32 width, UINT32 height, + UINT32 bgcolor, UINT32 fgcolor) { TRACE_CALL("__func__"); #ifdef RF_GLYPH - rfContext* rfi = (rfContext*) context; + rfContext* rfi = (rfContext*)context; - if (rfi->drawing == rfi->primary) - { + if (rfi->drawing == rfi->primary) { //XCopyArea(rfi->display, rfi->primary, rfi->drawable, rfi->gc, x, y, width, height, x, y); //gdi_InvalidateRegion(rfi->hdc, x, y, width, height); } @@ -399,7 +389,7 @@ void rf_register_graphics(rdpGraphics* graphics) rdpPointer* pointer; rdpGlyph* glyph; - bitmap = (rdpBitmap*) malloc(sizeof(rdpBitmap)); + bitmap = (rdpBitmap*)malloc(sizeof(rdpBitmap)); ZeroMemory(bitmap, sizeof(rdpBitmap)); bitmap->size = sizeof(rfBitmap); @@ -412,7 +402,7 @@ void rf_register_graphics(rdpGraphics* graphics) graphics_register_bitmap(graphics, bitmap); free(bitmap); - pointer = (rdpPointer*) malloc(sizeof(rdpPointer)); + pointer = (rdpPointer*)malloc(sizeof(rdpPointer)); ZeroMemory(pointer, sizeof(rdpPointer)); pointer->size = sizeof(rfPointer); @@ -428,7 +418,7 @@ void rf_register_graphics(rdpGraphics* graphics) free(pointer); - glyph = (rdpGlyph*) malloc(sizeof(rdpGlyph)); + glyph = (rdpGlyph*)malloc(sizeof(rdpGlyph)); ZeroMemory(glyph, sizeof(rdpGlyph)); glyph->size = sizeof(rfGlyph); diff --git a/remmina-plugins/rdp/rdp_plugin.c b/remmina-plugins/rdp/rdp_plugin.c index 9f20fe413..6cf7807b2 100644 --- a/remmina-plugins/rdp/rdp_plugin.c +++ b/remmina-plugins/rdp/rdp_plugin.c @@ -58,13 +58,13 @@ #define REMMINA_RDP_FEATURE_SCALE 2 #define REMMINA_RDP_FEATURE_UNFOCUS 3 #define REMMINA_RDP_FEATURE_TOOL_SENDCTRLALTDEL 4 -#define REMMINA_RDP_FEATURE_DYNRESUPDATE 5 +#define REMMINA_RDP_FEATURE_DYNRESUPDATE 5 /* Some string settings of freerdp are preallocated buffers of N bytes */ -#define FREERDP_CLIENTHOSTNAME_LEN 32 +#define FREERDP_CLIENTHOSTNAME_LEN 32 RemminaPluginService* remmina_plugin_service = NULL; -static char remmina_rdp_plugin_default_drive_name[]="RemminaDisk"; +static char remmina_rdp_plugin_default_drive_name[] = "RemminaDisk"; static BOOL rf_process_event_queue(RemminaProtocolWidget* gp) { @@ -80,63 +80,61 @@ static BOOL rf_process_event_queue(RemminaProtocolWidget* gp) input = rfi->instance->input; - while ((event =(RemminaPluginRdpEvent*) g_async_queue_try_pop(rfi->event_queue)) != NULL) - { - switch (event->type) - { - case REMMINA_RDP_EVENT_TYPE_SCANCODE: - flags = event->key_event.extended ? KBD_FLAGS_EXTENDED : 0; - flags |= event->key_event.up ? KBD_FLAGS_RELEASE : KBD_FLAGS_DOWN; - input->KeyboardEvent(input, flags, event->key_event.key_code); - break; + while ((event = (RemminaPluginRdpEvent*)g_async_queue_try_pop(rfi->event_queue)) != NULL) { + switch (event->type) { + case REMMINA_RDP_EVENT_TYPE_SCANCODE: + flags = event->key_event.extended ? KBD_FLAGS_EXTENDED : 0; + flags |= event->key_event.up ? KBD_FLAGS_RELEASE : KBD_FLAGS_DOWN; + input->KeyboardEvent(input, flags, event->key_event.key_code); + break; - case REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE: - /* - * TS_UNICODE_KEYBOARD_EVENT RDP message, see https://msdn.microsoft.com/en-us/library/cc240585.aspx - */ - flags = event->key_event.up ? KBD_FLAGS_RELEASE : KBD_FLAGS_DOWN; - input->UnicodeKeyboardEvent(input, flags, event->key_event.unicode_code); - break; + case REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE: + /* + * TS_UNICODE_KEYBOARD_EVENT RDP message, see https://msdn.microsoft.com/en-us/library/cc240585.aspx + */ + flags = event->key_event.up ? KBD_FLAGS_RELEASE : KBD_FLAGS_DOWN; + input->UnicodeKeyboardEvent(input, flags, event->key_event.unicode_code); + break; - case REMMINA_RDP_EVENT_TYPE_MOUSE: - if (event->mouse_event.extended) - input->ExtendedMouseEvent(input, event->mouse_event.flags, - event->mouse_event.x, event->mouse_event.y); - else - input->MouseEvent(input, event->mouse_event.flags, - event->mouse_event.x, event->mouse_event.y); - break; + case REMMINA_RDP_EVENT_TYPE_MOUSE: + if (event->mouse_event.extended) + input->ExtendedMouseEvent(input, event->mouse_event.flags, + event->mouse_event.x, event->mouse_event.y); + else + input->MouseEvent(input, event->mouse_event.flags, + event->mouse_event.x, event->mouse_event.y); + break; - case REMMINA_RDP_EVENT_TYPE_CLIPBOARD_SEND_CLIENT_FORMAT_LIST: - rfi->clipboard.context->ClientFormatList(rfi->clipboard.context, event->clipboard_formatlist.pFormatList); - free(event->clipboard_formatlist.pFormatList); - break; + case REMMINA_RDP_EVENT_TYPE_CLIPBOARD_SEND_CLIENT_FORMAT_LIST: + rfi->clipboard.context->ClientFormatList(rfi->clipboard.context, event->clipboard_formatlist.pFormatList); + free(event->clipboard_formatlist.pFormatList); + break; - case REMMINA_RDP_EVENT_TYPE_CLIPBOARD_SEND_CLIENT_FORMAT_DATA_RESPONSE: - rfi->clipboard.context->ClientFormatDataResponse(rfi->clipboard.context, event->clipboard_formatdataresponse.pFormatDataResponse); - if (event->clipboard_formatdataresponse.pFormatDataResponse->requestedFormatData) - free(event->clipboard_formatdataresponse.pFormatDataResponse->requestedFormatData); - free(event->clipboard_formatdataresponse.pFormatDataResponse); - break; + case REMMINA_RDP_EVENT_TYPE_CLIPBOARD_SEND_CLIENT_FORMAT_DATA_RESPONSE: + rfi->clipboard.context->ClientFormatDataResponse(rfi->clipboard.context, event->clipboard_formatdataresponse.pFormatDataResponse); + if (event->clipboard_formatdataresponse.pFormatDataResponse->requestedFormatData) + free(event->clipboard_formatdataresponse.pFormatDataResponse->requestedFormatData); + free(event->clipboard_formatdataresponse.pFormatDataResponse); + break; - case REMMINA_RDP_EVENT_TYPE_CLIPBOARD_SEND_CLIENT_FORMAT_DATA_REQUEST: - rfi->clipboard.context->ClientFormatDataRequest(rfi->clipboard.context, event->clipboard_formatdatarequest.pFormatDataRequest); - free(event->clipboard_formatdatarequest.pFormatDataRequest); - break; + case REMMINA_RDP_EVENT_TYPE_CLIPBOARD_SEND_CLIENT_FORMAT_DATA_REQUEST: + rfi->clipboard.context->ClientFormatDataRequest(rfi->clipboard.context, event->clipboard_formatdatarequest.pFormatDataRequest); + free(event->clipboard_formatdatarequest.pFormatDataRequest); + break; - case REMMINA_RDP_EVENT_TYPE_SEND_MONITOR_LAYOUT: - dcml = g_malloc0(sizeof(DISPLAY_CONTROL_MONITOR_LAYOUT)); - if (dcml) { - dcml->Flags = DISPLAY_CONTROL_MONITOR_PRIMARY; - dcml->Width = event->monitor_layout.width; - dcml->Height = event->monitor_layout.height; - dcml->Orientation = event->monitor_layout.desktopOrientation; - dcml->DesktopScaleFactor = event->monitor_layout.desktopScaleFactor; - dcml->DeviceScaleFactor = event->monitor_layout.deviceScaleFactor; - rfi->dispcontext->SendMonitorLayout(rfi->dispcontext, 1, dcml); - g_free(dcml); - } - break; + case REMMINA_RDP_EVENT_TYPE_SEND_MONITOR_LAYOUT: + dcml = g_malloc0(sizeof(DISPLAY_CONTROL_MONITOR_LAYOUT)); + if (dcml) { + dcml->Flags = DISPLAY_CONTROL_MONITOR_PRIMARY; + dcml->Width = event->monitor_layout.width; + dcml->Height = event->monitor_layout.height; + dcml->Orientation = event->monitor_layout.desktopOrientation; + dcml->DesktopScaleFactor = event->monitor_layout.desktopScaleFactor; + dcml->DeviceScaleFactor = event->monitor_layout.deviceScaleFactor; + rfi->dispcontext->SendMonitorLayout(rfi->dispcontext, 1, dcml); + g_free(dcml); + } + break; } g_free(event); @@ -191,12 +189,9 @@ static gboolean remmina_rdp_tunnel_init(RemminaProtocolWidget* gp) rfi->settings->ServerHostname = strdup(host); - if (cert_port == 3389) - { + if (cert_port == 3389) { rfi->settings->CertificateName = strdup(cert_host); - } - else - { + }else { s = g_strdup_printf("%s:%d", cert_host, cert_port); rfi->settings->CertificateName = strdup(s); g_free(s); @@ -229,8 +224,7 @@ BOOL rf_auto_reconnect(rfContext* rfi) return FALSE; } - if (!settings->AutoReconnectionEnabled) - { + if (!settings->AutoReconnectionEnabled) { /* No auto-reconnect - just quit */ rfi->is_reconnecting = FALSE; return FALSE; @@ -252,11 +246,9 @@ BOOL rf_auto_reconnect(rfContext* rfi) usleep(500000); /* Perform an auto-reconnect. */ - while (TRUE) - { + while (TRUE) { /* Quit retrying if max retries has been exceeded */ - if (rfi->reconnect_nattempt++ >= rfi->reconnect_maxattempts) - { + if (rfi->reconnect_nattempt++ >= rfi->reconnect_maxattempts) { remmina_plugin_service->log_printf("[RDP][%s] maximum number of reconnection attempts exceeded.\n", rfi->settings->ServerHostname); break; @@ -277,8 +269,7 @@ BOOL rf_auto_reconnect(rfContext* rfi) remmina_plugin_service->log_printf("[RDP][%s] unable to recreate tunnel with remmina_rdp_tunnel_init.\n", rfi->settings->ServerHostname); } else { - if (freerdp_reconnect(rfi->instance)) - { + if (freerdp_reconnect(rfi->instance)) { /* Reconnection is successful */ remmina_plugin_service->log_printf("[RDP][%s] reconnection successful.\n", rfi->settings->ServerHostname); @@ -316,7 +307,7 @@ BOOL rf_end_paint(rdpContext* context) RemminaPluginRdpUiObject* ui; gdi = context->gdi; - rfi = (rfContext*) context; + rfi = (rfContext*)context; gp = rfi->protocol_widget; if (gdi->primary->hdc->hwnd->invalid->null) @@ -346,7 +337,7 @@ static BOOL rf_desktop_resize(rdpContext* context) RemminaProtocolWidget* gp; RemminaPluginRdpUiObject* ui; - rfi = (rfContext*) context; + rfi = (rfContext*)context; gp = rfi->protocol_widget; remmina_plugin_service->protocol_plugin_set_width(gp, rfi->settings->DesktopWidth); @@ -371,7 +362,7 @@ static BOOL remmina_rdp_pre_connect(freerdp* instance) ALIGN64 rdpSettings* settings; RemminaProtocolWidget* gp; - rfi = (rfContext*) instance->context; + rfi = (rfContext*)instance->context; settings = instance->settings; gp = rfi->protocol_widget; @@ -408,8 +399,7 @@ static BOOL remmina_rdp_pre_connect(freerdp* instance) settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = False; settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = False; - if (settings->RemoteFxCodec == True) - { + if (settings->RemoteFxCodec == True) { settings->FrameAcknowledge = False; settings->LargePointerFlag = True; settings->PerformanceFlags = PERF_FLAG_NONE; @@ -437,19 +427,17 @@ static UINT32 rf_get_local_color_format(rfContext* rfi, BOOL aligned) if (rfi->bpp == 32) DstFormat = (!invert) ? PIXEL_FORMAT_RGBA32 : PIXEL_FORMAT_BGRA32; - else if (rfi->bpp == 24) - { + else if (rfi->bpp == 24) { if (aligned) DstFormat = (!invert) ? PIXEL_FORMAT_RGBX32 : PIXEL_FORMAT_BGRX32; else DstFormat = (!invert) ? PIXEL_FORMAT_RGB24 : PIXEL_FORMAT_BGR24; - } - else if (rfi->bpp == 16) - DstFormat = (!invert) ? PIXEL_FORMAT_RGB16 : PIXEL_FORMAT_BGR16; + }else if (rfi->bpp == 16) + DstFormat = (!invert) ? PIXEL_FORMAT_RGB16 : PIXEL_FORMAT_BGR16; else if (rfi->bpp == 15) - DstFormat = (!invert) ? PIXEL_FORMAT_RGB16 : PIXEL_FORMAT_BGR16; + DstFormat = (!invert) ? PIXEL_FORMAT_RGB16 : PIXEL_FORMAT_BGR16; else - DstFormat = (!invert) ? PIXEL_FORMAT_RGBX32 : PIXEL_FORMAT_BGRX32; + DstFormat = (!invert) ? PIXEL_FORMAT_RGBX32 : PIXEL_FORMAT_BGRX32; return DstFormat; } @@ -464,7 +452,7 @@ static BOOL remmina_rdp_post_connect(freerdp* instance) rdpGdi* gdi; int hdcBytesPerPixel, hdcBitsPerPixel; - rfi = (rfContext*) instance->context; + rfi = (rfContext*)instance->context; gp = rfi->protocol_widget; rfi->width = rfi->settings->DesktopWidth; @@ -476,20 +464,15 @@ static BOOL remmina_rdp_post_connect(freerdp* instance) rf_register_graphics(instance->context->graphics); - if (rfi->bpp == 32) - { + if (rfi->bpp == 32) { hdcBytesPerPixel = 4; hdcBitsPerPixel = 32; rfi->cairo_format = CAIRO_FORMAT_ARGB32; - } - else if (rfi->bpp == 24) - { + }else if (rfi->bpp == 24) { hdcBytesPerPixel = 4; hdcBitsPerPixel = 32; rfi->cairo_format = CAIRO_FORMAT_RGB24; - } - else - { + }else { hdcBytesPerPixel = 2; hdcBitsPerPixel = 16; rfi->cairo_format = CAIRO_FORMAT_RGB16_565; @@ -500,18 +483,18 @@ static BOOL remmina_rdp_post_connect(freerdp* instance) rfi->primary_buffer = gdi->primary_buffer; /* rfi->hdc = gdi_GetDC(); - rfi->hdc->bitsPerPixel = hdcBitsPerPixel; - rfi->hdc->bytesPerPixel = hdcBytesPerPixel; + rfi->hdc->bitsPerPixel = hdcBitsPerPixel; + rfi->hdc->bytesPerPixel = hdcBytesPerPixel; - rfi->hdc->hwnd = (HGDI_WND) malloc(sizeof(GDI_WND)); - rfi->hdc->hwnd->invalid = gdi_CreateRectRgn(0, 0, 0, 0); - rfi->hdc->hwnd->invalid->null = 1; + rfi->hdc->hwnd = (HGDI_WND) malloc(sizeof(GDI_WND)); + rfi->hdc->hwnd->invalid = gdi_CreateRectRgn(0, 0, 0, 0); + rfi->hdc->hwnd->invalid->null = 1; - rfi->hdc->hwnd->count = 32; - rfi->hdc->hwnd->cinvalid = (HGDI_RGN) malloc(sizeof(GDI_RGN) * rfi->hdc->hwnd->count); - rfi->hdc->hwnd->ninvalid = 0; - * -*/ + rfi->hdc->hwnd->count = 32; + rfi->hdc->hwnd->cinvalid = (HGDI_RGN) malloc(sizeof(GDI_RGN) * rfi->hdc->hwnd->count); + rfi->hdc->hwnd->ninvalid = 0; + * + */ pointer_cache_register_callbacks(instance->update); @@ -540,14 +523,13 @@ static BOOL remmina_rdp_authenticate(freerdp* instance, char** username, char** gboolean disablepasswordstoring; RemminaFile* remminafile; - rfi = (rfContext*) instance->context; + rfi = (rfContext*)instance->context; gp = rfi->protocol_widget; remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); disablepasswordstoring = remmina_plugin_service->file_get_int(remminafile, "disablepasswordstoring", FALSE); ret = remmina_plugin_service->protocol_plugin_init_authuserpwd(gp, TRUE, !disablepasswordstoring); - if (ret == GTK_RESPONSE_OK) - { + if (ret == GTK_RESPONSE_OK) { s_username = remmina_plugin_service->protocol_plugin_init_get_username(gp); if (s_username) rfi->settings->Username = strdup(s_username); @@ -558,8 +540,7 @@ static BOOL remmina_rdp_authenticate(freerdp* instance, char** username, char** if (s_domain) rfi->settings->Domain = strdup(s_domain); save = remmina_plugin_service->protocol_plugin_init_get_savepassword(gp); - if (save) - { + if (save) { // User has requested to save credentials. We put all the new cretentials // into remminafile->settings. They will be saved later, on successful connection, by // remmina_connection_window.c @@ -575,9 +556,7 @@ static BOOL remmina_rdp_authenticate(freerdp* instance, char** username, char** if ( s_domain ) g_free( s_domain ); return True; - } - else - { + }else { rfi->user_cancelled = TRUE; return False; } @@ -586,14 +565,14 @@ static BOOL remmina_rdp_authenticate(freerdp* instance, char** username, char** } 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; rfContext* rfi; RemminaProtocolWidget* gp; - rfi = (rfContext*) instance->context; + rfi = (rfContext*)instance->context; gp = rfi->protocol_widget; status = remmina_plugin_service->protocol_plugin_init_certificate(gp, subject, issuer, fingerprint); @@ -604,15 +583,15 @@ static DWORD remmina_rdp_verify_certificate(freerdp* instance, const char *commo return 1; } static DWORD remmina_rdp_verify_changed_certificate(freerdp* instance, - const char* common_name, const char* subject, const char* issuer, - const char* new_fingerprint, const char* old_subject, const char* old_issuer, const char* old_fingerprint) + const char* common_name, const char* subject, const char* issuer, + const char* new_fingerprint, const char* old_subject, const char* old_issuer, const char* old_fingerprint) { TRACE_CALL("__func__"); gint status; rfContext* rfi; RemminaProtocolWidget* gp; - rfi = (rfContext*) instance->context; + rfi = (rfContext*)instance->context; gp = rfi->protocol_widget; status = remmina_plugin_service->protocol_plugin_changed_certificate(gp, subject, issuer, new_fingerprint, old_fingerprint); @@ -632,41 +611,34 @@ static void remmina_rdp_main_loop(RemminaProtocolWidget* gp) gchar buf[100]; rfContext* rfi = GET_PLUGIN_DATA(gp); - while (!freerdp_shall_disconnect(rfi->instance)) - { + while (!freerdp_shall_disconnect(rfi->instance)) { nCount = freerdp_get_event_handles(rfi->instance->context, &handles[0], 64); - if (rfi->event_handle) - { + if (rfi->event_handle) { handles[nCount++] = rfi->event_handle; } - if (nCount == 0) - { + if (nCount == 0) { fprintf(stderr, "freerdp_get_event_handles failed\n"); break; } status = WaitForMultipleObjects(nCount, handles, FALSE, 100); - if (status == WAIT_FAILED) - { + if (status == WAIT_FAILED) { fprintf(stderr, "WaitForMultipleObjects failed with %lu\n", (unsigned long)status); break; } if (rfi->event_handle && WaitForSingleObject(rfi->event_handle, 0) == WAIT_OBJECT_0) { - if (!rf_process_event_queue(gp)) - { + if (!rf_process_event_queue(gp)) { fprintf(stderr, "Failed to process local kb/mouse event queue\n"); break; } - if (read(rfi->event_pipe[0], buf, sizeof (buf))) - { + if (read(rfi->event_pipe[0], buf, sizeof(buf))) { } } - if (!freerdp_check_event_handles(rfi->instance->context)) - { + if (!freerdp_check_event_handles(rfi->instance->context)) { if (rf_auto_reconnect(rfi)) { /* Reset the possible reason/error which made us doing many reconnection reattempts and continue */ remmina_plugin_service->protocol_plugin_set_error(gp, NULL); @@ -684,10 +656,8 @@ int remmina_rdp_load_static_channel_addin(rdpChannels* channels, rdpSettings* se void* entry; entry = freerdp_load_channel_addin_entry(name, NULL, NULL, FREERDP_ADDIN_CHANNEL_STATIC); - if (entry) - { - if (freerdp_channels_client_load(channels, settings, entry, data) == 0) - { + if (entry) { + if (freerdp_channels_client_load(channels, settings, entry, data) == 0) { fprintf(stderr, "loading channel %s\n", name); return 0; } @@ -740,8 +710,7 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) rfi->settings->ColorDepth = remmina_plugin_service->file_get_int(remminafile, "colordepth", 0); - if (rfi->settings->ColorDepth == 0) - { + if (rfi->settings->ColorDepth == 0) { rfi->settings->RemoteFxCodec = True; rfi->settings->ColorDepth = 32; } @@ -766,16 +735,14 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) s = remmina_plugin_service->file_get_string(remminafile, "password"); - if (s) - { + if (s) { rfi->settings->Password = strdup(s); rfi->settings->AutoLogonEnabled = 1; } /* Remote Desktop Gateway server address */ rfi->settings->GatewayEnabled = FALSE; s = remmina_plugin_service->file_get_string(remminafile, "gateway_server"); - if (s) - { + if (s) { remmina_plugin_service->get_server_port(s, 443, &gateway_host, &gateway_port); rfi->settings->GatewayHostname = gateway_host; rfi->settings->GatewayPort = gateway_port; @@ -783,28 +750,24 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) rfi->settings->GatewayUseSameCredentials = TRUE; } /* Remote Desktop Gateway domain */ - if (remmina_plugin_service->file_get_string(remminafile, "gateway_domain")) - { + if (remmina_plugin_service->file_get_string(remminafile, "gateway_domain")) { rfi->settings->GatewayDomain = strdup(remmina_plugin_service->file_get_string(remminafile, "gateway_domain")); rfi->settings->GatewayUseSameCredentials = FALSE; } /* Remote Desktop Gateway username */ - if (remmina_plugin_service->file_get_string(remminafile, "gateway_username")) - { + if (remmina_plugin_service->file_get_string(remminafile, "gateway_username")) { rfi->settings->GatewayUsername = strdup(remmina_plugin_service->file_get_string(remminafile, "gateway_username")); rfi->settings->GatewayUseSameCredentials = FALSE; } /* Remote Desktop Gateway password */ s = remmina_plugin_service->file_get_string(remminafile, "gateway_password"); - if(s) - { + if (s) { rfi->settings->GatewayPassword = strdup(s); rfi->settings->GatewayUseSameCredentials = FALSE; } /* If no different credentials were provided for the Remote Desktop Gateway * use the same authentication credentials for the host */ - if (rfi->settings->GatewayEnabled && rfi->settings->GatewayUseSameCredentials) - { + if (rfi->settings->GatewayEnabled && rfi->settings->GatewayUseSameCredentials) { g_free(rfi->settings->GatewayDomain); rfi->settings->GatewayDomain = g_strdup(rfi->settings->Domain); g_free(rfi->settings->GatewayUsername); @@ -815,34 +778,28 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) /* Remote Desktop Gateway usage */ if (rfi->settings->GatewayEnabled) freerdp_set_gateway_usage_method(rfi->settings, - remmina_plugin_service->file_get_int(remminafile, "gateway_usage", FALSE) ? TSC_PROXY_MODE_DETECT : TSC_PROXY_MODE_DIRECT); + remmina_plugin_service->file_get_int(remminafile, "gateway_usage", FALSE) ? TSC_PROXY_MODE_DETECT : TSC_PROXY_MODE_DIRECT); /* Certificate ignore */ rfi->settings->IgnoreCertificate = remmina_plugin_service->file_get_int(remminafile, "cert_ignore", 0); /* ClientHostname is internally preallocated to 32 bytes by libfreerdp */ - if ((cs=remmina_plugin_service->file_get_string(remminafile, "clientname"))) - { - strncpy(rfi->settings->ClientHostname, cs, FREERDP_CLIENTHOSTNAME_LEN-1); + if ((cs = remmina_plugin_service->file_get_string(remminafile, "clientname"))) { + strncpy(rfi->settings->ClientHostname, cs, FREERDP_CLIENTHOSTNAME_LEN - 1); + }else { + strncpy(rfi->settings->ClientHostname, g_get_host_name(), FREERDP_CLIENTHOSTNAME_LEN - 1); } - else - { - strncpy(rfi->settings->ClientHostname, g_get_host_name(), FREERDP_CLIENTHOSTNAME_LEN-1); - } - rfi->settings->ClientHostname[FREERDP_CLIENTHOSTNAME_LEN-1]=0; + rfi->settings->ClientHostname[FREERDP_CLIENTHOSTNAME_LEN - 1] = 0; - if (remmina_plugin_service->file_get_string(remminafile, "loadbalanceinfo")) - { - rfi->settings->LoadBalanceInfo = (BYTE*) strdup(remmina_plugin_service->file_get_string(remminafile, "loadbalanceinfo")); - rfi->settings->LoadBalanceInfoLength = (UINT32) strlen((char *) rfi->settings->LoadBalanceInfo); + if (remmina_plugin_service->file_get_string(remminafile, "loadbalanceinfo")) { + rfi->settings->LoadBalanceInfo = (BYTE*)strdup(remmina_plugin_service->file_get_string(remminafile, "loadbalanceinfo")); + rfi->settings->LoadBalanceInfoLength = (UINT32)strlen((char*)rfi->settings->LoadBalanceInfo); } - if (remmina_plugin_service->file_get_string(remminafile, "exec")) - { + if (remmina_plugin_service->file_get_string(remminafile, "exec")) { rfi->settings->AlternateShell = strdup(remmina_plugin_service->file_get_string(remminafile, "exec")); } - if (remmina_plugin_service->file_get_string(remminafile, "execpath")) - { + if (remmina_plugin_service->file_get_string(remminafile, "execpath")) { rfi->settings->ShellWorkingDirectory = strdup(remmina_plugin_service->file_get_string(remminafile, "execpath")); } @@ -850,30 +807,26 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) value = remmina_plugin_service->pref_get_value(sm); g_free(sm); - if (value && value[0]) - { + if (value && value[0]) { rfi->settings->PerformanceFlags = strtoul(value, NULL, 16); - } - else - { - switch (remmina_plugin_service->file_get_int(remminafile, "quality", DEFAULT_QUALITY_0)) - { - case 9: - rfi->settings->PerformanceFlags = DEFAULT_QUALITY_9; - break; + }else { + switch (remmina_plugin_service->file_get_int(remminafile, "quality", DEFAULT_QUALITY_0)) { + case 9: + rfi->settings->PerformanceFlags = DEFAULT_QUALITY_9; + break; - case 2: - rfi->settings->PerformanceFlags = DEFAULT_QUALITY_2; - break; + case 2: + rfi->settings->PerformanceFlags = DEFAULT_QUALITY_2; + break; - case 1: - rfi->settings->PerformanceFlags = DEFAULT_QUALITY_1; - break; + case 1: + rfi->settings->PerformanceFlags = DEFAULT_QUALITY_1; + break; - case 0: - default: - rfi->settings->PerformanceFlags = DEFAULT_QUALITY_0; - break; + case 0: + default: + rfi->settings->PerformanceFlags = DEFAULT_QUALITY_0; + break; } } g_free(value); @@ -881,13 +834,12 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) /* PerformanceFlags bitmask need also to be splitted into BOOL variables * like rfi->settings->DisableWallpaper, rfi->settings->AllowFontSmoothing... * or freerdp_get_param_bool() function will return the wrong value - */ + */ freerdp_performance_flags_split(rfi->settings); rfi->settings->KeyboardLayout = remmina_rdp_settings_get_keyboard_layout(); - if (remmina_plugin_service->file_get_int(remminafile, "console", FALSE)) - { + if (remmina_plugin_service->file_get_int(remminafile, "console", FALSE)) { rfi->settings->ConsoleSession = True; } @@ -895,23 +847,18 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) - if (g_strcmp0(cs, "rdp") == 0) - { + if (g_strcmp0(cs, "rdp") == 0) { rfi->settings->RdpSecurity = True; rfi->settings->TlsSecurity = False; rfi->settings->NlaSecurity = False; rfi->settings->ExtSecurity = False; rfi->settings->UseRdpSecurityLayer = True; - } - else if (g_strcmp0(cs, "tls") == 0) - { + }else if (g_strcmp0(cs, "tls") == 0) { rfi->settings->RdpSecurity = False; rfi->settings->TlsSecurity = True; rfi->settings->NlaSecurity = False; rfi->settings->ExtSecurity = False; - } - else if (g_strcmp0(cs, "nla") == 0) - { + }else if (g_strcmp0(cs, "nla") == 0) { rfi->settings->RdpSecurity = False; rfi->settings->TlsSecurity = False; rfi->settings->NlaSecurity = True; @@ -929,8 +876,7 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) remmina_rdp_settings_get_orientation_scale_prefs(&desktopOrientation, &desktopScaleFactor, &deviceScaleFactor); rfi->settings->DesktopOrientation = desktopOrientation; - if (desktopScaleFactor != 0 && deviceScaleFactor != 0) - { + if (desktopScaleFactor != 0 && deviceScaleFactor != 0) { rfi->settings->DesktopScaleFactor = desktopScaleFactor; rfi->settings->DeviceScaleFactor = deviceScaleFactor; } @@ -942,30 +888,23 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) cs = remmina_plugin_service->file_get_string(remminafile, "sound"); - if (g_strcmp0(cs, "remote") == 0) - { + if (g_strcmp0(cs, "remote") == 0) { rfi->settings->RemoteConsoleAudio = 1; - } - else if (g_str_has_prefix(cs, "local")) - { + }else if (g_str_has_prefix(cs, "local")) { rdpsnd_nparams = 0; rdpsnd_params[rdpsnd_nparams++] = "rdpsnd"; cs = strchr(cs, ','); - if (cs) - { + if (cs) { rdpsnd_rate = atoi(cs + 1); - if (rdpsnd_rate > 1000 && rdpsnd_rate < 150000) - { + if (rdpsnd_rate > 1000 && rdpsnd_rate < 150000) { snprintf( rdpsnd_param1, sizeof(rdpsnd_param1), "rate:%d", rdpsnd_rate ); rdpsnd_params[rdpsnd_nparams++] = rdpsnd_param1; - cs = strchr(cs +1, ','); - if (cs) - { + cs = strchr(cs + 1, ','); + if (cs) { rdpsnd_channel = atoi(cs + 1); - if (rdpsnd_channel >= 1 && rdpsnd_channel <= 2) - { + if (rdpsnd_channel >= 1 && rdpsnd_channel <= 2) { snprintf( rdpsnd_param2, sizeof(rdpsnd_param2), "channel:%d", rdpsnd_channel ); rdpsnd_params[rdpsnd_nparams++] = rdpsnd_param2; } @@ -973,12 +912,11 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) } } - freerdp_client_add_static_channel(rfi->settings, rdpsnd_nparams, (char**) rdpsnd_params); + freerdp_client_add_static_channel(rfi->settings, rdpsnd_nparams, (char**)rdpsnd_params); } - if ( remmina_plugin_service->file_get_int(remminafile, "microphone", FALSE) ? TRUE : FALSE ) - { + if ( remmina_plugin_service->file_get_int(remminafile, "microphone", FALSE) ? TRUE : FALSE ) { char* p[1]; int count; @@ -988,16 +926,15 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) freerdp_client_add_dynamic_channel(rfi->settings, count, p); } - rfi->settings->RedirectClipboard = ( remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE) ? FALSE: TRUE ); + rfi->settings->RedirectClipboard = ( remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE) ? FALSE : TRUE ); cs = remmina_plugin_service->file_get_string(remminafile, "sharefolder"); - if (cs && cs[0] == '/') - { + if (cs && cs[0] == '/') { RDPDR_DRIVE* drive; gsize sz; - drive = (RDPDR_DRIVE*) malloc(sizeof(RDPDR_DRIVE)); + drive = (RDPDR_DRIVE*)malloc(sizeof(RDPDR_DRIVE)); ZeroMemory(drive, sizeof(RDPDR_DRIVE)); s = strrchr( cs, '/' ); @@ -1012,14 +949,13 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) drive->Path = _strdup(cs); g_free(sm); - freerdp_device_collection_add(rfi->settings, (RDPDR_DEVICE*) drive); + freerdp_device_collection_add(rfi->settings, (RDPDR_DEVICE*)drive); rfi->settings->DeviceRedirection = TRUE; } - if (remmina_plugin_service->file_get_int(remminafile, "shareprinter", FALSE)) - { + if (remmina_plugin_service->file_get_int(remminafile, "shareprinter", FALSE)) { RDPDR_PRINTER* printer; - printer = (RDPDR_PRINTER*) malloc(sizeof(RDPDR_PRINTER)); + printer = (RDPDR_PRINTER*)malloc(sizeof(RDPDR_PRINTER)); ZeroMemory(printer, sizeof(RDPDR_PRINTER)); printer->Type = RDPDR_DTYP_PRINT; @@ -1027,13 +963,12 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) rfi->settings->DeviceRedirection = TRUE; rfi->settings->RedirectPrinters = TRUE; - freerdp_device_collection_add(rfi->settings, (RDPDR_DEVICE*) printer); + freerdp_device_collection_add(rfi->settings, (RDPDR_DEVICE*)printer); } - if (remmina_plugin_service->file_get_int(remminafile, "sharesmartcard", FALSE)) - { + if (remmina_plugin_service->file_get_int(remminafile, "sharesmartcard", FALSE)) { RDPDR_SMARTCARD* smartcard; - smartcard = (RDPDR_SMARTCARD*) malloc(sizeof(RDPDR_SMARTCARD)); + smartcard = (RDPDR_SMARTCARD*)malloc(sizeof(RDPDR_SMARTCARD)); ZeroMemory(smartcard, sizeof(RDPDR_SMARTCARD)); smartcard->Type = RDPDR_DTYP_SMARTCARD; @@ -1043,59 +978,58 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget* gp) rfi->settings->DeviceRedirection = TRUE; rfi->settings->RedirectSmartCards = TRUE; - freerdp_device_collection_add(rfi->settings, (RDPDR_DEVICE*) smartcard); + freerdp_device_collection_add(rfi->settings, (RDPDR_DEVICE*)smartcard); } - if (!freerdp_connect(rfi->instance)) - { - if (!rfi->user_cancelled) - { + if (!freerdp_connect(rfi->instance)) { + if (!rfi->user_cancelled) { UINT32 e; e = freerdp_get_last_error(rfi->instance->context); - switch(e) { - case FREERDP_ERROR_AUTHENTICATION_FAILED: - case STATUS_LOGON_FAILURE: // wrong return code from FreeRDP introduced at the end of July 2016 ? - remmina_plugin_service->protocol_plugin_set_error(gp, _("Authentication to RDP server %s failed.\nCheck username, password and domain."), - rfi->settings->ServerHostname ); - // Invalidate the saved password, so the user will be re-asked at next logon - remmina_plugin_service->file_unsave_password(remminafile); - break; - case STATUS_ACCOUNT_LOCKED_OUT: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Access to RDP server %s failed.\nAccount is locked out."), - rfi->settings->ServerHostname ); - break; - case STATUS_ACCOUNT_EXPIRED: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Access to RDP server %s failed.\nAccount is expired."), - rfi->settings->ServerHostname ); - break; - case STATUS_PASSWORD_EXPIRED: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Access to RDP server %s failed.\nPassword expired."), - rfi->settings->ServerHostname ); - break; - case STATUS_ACCOUNT_DISABLED: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Access to RDP server %s failed.\nAccount is disabled."), - rfi->settings->ServerHostname ); - break; - case STATUS_ACCOUNT_RESTRICTION: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Access to RDP server %s failed.\nAccount has restrictions."), - rfi->settings->ServerHostname ); - break; - case FREERDP_ERROR_CONNECT_FAILED: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Connection to RDP server %s failed."), rfi->settings->ServerHostname ); - break; - case FREERDP_ERROR_DNS_NAME_NOT_FOUND: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Unable to find the address of RDP server %s."), rfi->settings->ServerHostname ); - break; - case FREERDP_ERROR_TLS_CONNECT_FAILED: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Error connecting to RDP server %s. TLS connection failed. Check that client and server support a common TLS version."), rfi->settings->ServerHostname ); - break; - case FREERDP_ERROR_SECURITY_NEGO_CONNECT_FAILED: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Unable to establish a connection to RDP server %s."), rfi->settings->ServerHostname ); - break; - default: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Unable to connect to RDP server %s"), rfi->settings->ServerHostname); - break; + switch (e) { + case FREERDP_ERROR_AUTHENTICATION_FAILED: + case STATUS_LOGON_FAILURE: // wrong return code from FreeRDP introduced at the end of July 2016 ? + remmina_plugin_service->protocol_plugin_set_error(gp, _("Authentication to RDP server %s failed.\nCheck username, password and domain."), + rfi->settings->ServerHostname ); + // Invalidate the saved password, so the user will be re-asked at next logon + remmina_plugin_service->file_unsave_password(remminafile); + break; + case STATUS_ACCOUNT_LOCKED_OUT: + remmina_plugin_service->protocol_plugin_set_error(gp, _("Access to RDP server %s failed.\nAccount is locked out."), + rfi->settings->ServerHostname ); + break; + case STATUS_ACCOUNT_EXPIRED: + remmina_plugin_service->protocol_plugin_set_error(gp, _("Access to RDP server %s failed.\nAccount is expired."), + rfi->settings->ServerHostname ); + break; + case STATUS_PASSWORD_EXPIRED: + remmina_plugin_service->protocol_plugin_set_error(gp, _("Access to RDP server %s failed.\nPassword expired."), + rfi->settings->ServerHostname ); + break; + case STATUS_ACCOUNT_DISABLED: + remmina_plugin_service->protocol_plugin_set_error(gp, _("Access to RDP server %s failed.\nAccount is disabled."), + rfi->settings->ServerHostname ); + break; + case STATUS_ACCOUNT_RESTRICTION: + remmina_plugin_service->protocol_plugin_set_error(gp, _("Access to RDP server %s failed.\nAccount has restrictions."), + rfi->settings->ServerHostname ); + break; + case FREERDP_ERROR_CONNECT_FAILED: + remmina_plugin_service->protocol_plugin_set_error(gp, _("Connection to RDP server %s failed."), rfi->settings->ServerHostname ); + break; + case FREERDP_ERROR_DNS_NAME_NOT_FOUND: + remmina_plugin_service->protocol_plugin_set_error(gp, _("Unable to find the address of RDP server %s."), rfi->settings->ServerHostname ); + break; + case FREERDP_ERROR_TLS_CONNECT_FAILED: + remmina_plugin_service->protocol_plugin_set_error(gp, + _("Error connecting to RDP server %s. TLS connection failed. Check that client and server support a common TLS version."), rfi->settings->ServerHostname ); + break; + case FREERDP_ERROR_SECURITY_NEGO_CONNECT_FAILED: + remmina_plugin_service->protocol_plugin_set_error(gp, _("Unable to establish a connection to RDP server %s."), rfi->settings->ServerHostname ); + break; + default: + remmina_plugin_service->protocol_plugin_set_error(gp, _("Unable to connect to RDP server %s"), rfi->settings->ServerHostname); + break; } } @@ -1117,7 +1051,7 @@ static gpointer remmina_rdp_main_thread(gpointer data) pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); CANCEL_ASYNC - gp = (RemminaProtocolWidget*) data; + gp = (RemminaProtocolWidget*)data; rfi = GET_PLUGIN_DATA(gp); remmina_rdp_main(gp); rfi->thread = 0; @@ -1125,7 +1059,7 @@ static gpointer remmina_rdp_main_thread(gpointer data) /* Signal main thread that we closed the connection. But wait 200ms, because we may * have outstaiding events to process in the meanwhile */ - g_timeout_add(200, ((GSourceFunc) remmina_plugin_service->protocol_plugin_close_connection), gp); + g_timeout_add(200, ((GSourceFunc)remmina_plugin_service->protocol_plugin_close_connection), gp); return NULL; } @@ -1145,7 +1079,7 @@ static void remmina_rdp_init(RemminaProtocolWidget* gp) instance->ContextSize = sizeof(rfContext); freerdp_context_new(instance); - rfi = (rfContext*) instance->context; + rfi = (rfContext*)instance->context; g_object_set_data_full(G_OBJECT(gp), "plugin-data", rfi, free); @@ -1167,8 +1101,7 @@ static gboolean remmina_rdp_open_connection(RemminaProtocolWidget* gp) rfi->scale = remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp); - if (pthread_create(&rfi->thread, NULL, remmina_rdp_main_thread, gp)) - { + if (pthread_create(&rfi->thread, NULL, remmina_rdp_main_thread, gp)) { remmina_plugin_service->protocol_plugin_set_error(gp, "%s", "Failed to initialize pthread. Falling back to non-thread mode..."); @@ -1187,14 +1120,12 @@ static gboolean remmina_rdp_close_connection(RemminaProtocolWidget* gp) freerdp* instance; RemminaPluginRdpUiObject* ui; - if (freerdp_get_last_error(rfi->instance->context) == 0x10005) - { + if (freerdp_get_last_error(rfi->instance->context) == 0x10005) { remmina_plugin_service->protocol_plugin_set_error(gp, "Another user connected to the server (%s), forcing the disconnection of the current connection.", rfi->settings->ServerHostname); } instance = rfi->instance; - if (rfi->thread) - { - rfi->thread_cancelled = TRUE; // Avoid all rf_queue function to run + if (rfi->thread) { + rfi->thread_cancelled = TRUE; // Avoid all rf_queue function to run pthread_cancel(rfi->thread); if (rfi->thread) @@ -1209,8 +1140,7 @@ static gboolean remmina_rdp_close_connection(RemminaProtocolWidget* gp) ui->clipboard.type = REMMINA_RDP_UI_CLIPBOARD_DETACH_OWNER; remmina_rdp_event_queue_ui_sync_retint(gp, ui); - if (instance) - { + if (instance) { if ( rfi->connected ) { freerdp_disconnect(instance); rfi->connected = False; @@ -1223,14 +1153,12 @@ static gboolean remmina_rdp_close_connection(RemminaProtocolWidget* gp) } remmina_rdp_clipboard_free(rfi); - if (rfi->rfx_context) - { + if (rfi->rfx_context) { rfx_context_free(rfi->rfx_context); rfi->rfx_context = NULL; } - if (instance) - { + if (instance) { gdi_free(instance); cache_free(instance->context->cache); instance->context->cache = NULL; @@ -1241,7 +1169,7 @@ static gboolean remmina_rdp_close_connection(RemminaProtocolWidget* gp) if (instance) { 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 */ } /* Remove instance->context from gp object data to avoid double free */ @@ -1267,32 +1195,31 @@ static void remmina_rdp_call_feature(RemminaProtocolWidget* gp, const RemminaPro remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); - switch (feature->id) - { - case REMMINA_RDP_FEATURE_UNFOCUS: - remmina_rdp_event_unfocus(gp); - break; + switch (feature->id) { + case REMMINA_RDP_FEATURE_UNFOCUS: + remmina_rdp_event_unfocus(gp); + break; - case REMMINA_RDP_FEATURE_SCALE: - rfi->scale = remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp); - remmina_rdp_event_update_scale(gp); - break; + case REMMINA_RDP_FEATURE_SCALE: + rfi->scale = remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp); + remmina_rdp_event_update_scale(gp); + break; - case REMMINA_RDP_FEATURE_DYNRESUPDATE: - break; + case REMMINA_RDP_FEATURE_DYNRESUPDATE: + break; - case REMMINA_RDP_FEATURE_TOOL_REFRESH: - 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)); - break; + case REMMINA_RDP_FEATURE_TOOL_REFRESH: + 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)); + break; - case REMMINA_RDP_FEATURE_TOOL_SENDCTRLALTDEL: - remmina_rdp_send_ctrlaltdel(gp); - break; + case REMMINA_RDP_FEATURE_TOOL_SENDCTRLALTDEL: + remmina_rdp_send_ctrlaltdel(gp); + break; - default: - break; + default: + break; } } @@ -1308,54 +1235,53 @@ static void remmina_rdp_keystroke(RemminaProtocolWidget *gp, const guint keystro static gboolean remmina_rdp_get_screenshot(RemminaProtocolWidget *gp, RemminaPluginScreenshotData *rpsd) { - rfContext* rfi = GET_PLUGIN_DATA(gp); - rdpGdi* gdi; - size_t szmem; + rfContext* rfi = GET_PLUGIN_DATA(gp); + rdpGdi* gdi; + size_t szmem; - UINT32 bytesPerPixel; - UINT32 bitsPerPixel; + UINT32 bytesPerPixel; + UINT32 bitsPerPixel; - if (!rfi) - return FALSE; + if (!rfi) + return FALSE; - gdi = ((rdpContext *)rfi)->gdi; + gdi = ((rdpContext*)rfi)->gdi; - bytesPerPixel = GetBytesPerPixel(gdi->hdc->format); - bitsPerPixel = GetBitsPerPixel(gdi->hdc->format); + bytesPerPixel = GetBytesPerPixel(gdi->hdc->format); + bitsPerPixel = GetBitsPerPixel(gdi->hdc->format); - /* ToDo: we should lock freerdp subthread to update rfi->primary_buffer, rfi->gdi and w/h, - * from here to memcpy, but... how ? */ + /* ToDo: we should lock freerdp subthread to update rfi->primary_buffer, rfi->gdi and w/h, + * from here to memcpy, but... how ? */ - szmem = gdi->width * gdi->height * bytesPerPixel; + szmem = gdi->width * gdi->height * bytesPerPixel; - remmina_plugin_service->log_printf("[RDP] allocating %zu bytes for a full screenshot\n", szmem); - rpsd->buffer = malloc(szmem); - if (!rpsd->buffer) - { - remmina_plugin_service->log_printf("[RDP] unable to allocate %zu bytes for a full screenshot\n", szmem); - return FALSE; - } - rpsd->width = gdi->width; - rpsd->height = gdi->height; - rpsd->bitsPerPixel = bitsPerPixel; - rpsd->bytesPerPixel = bytesPerPixel; + remmina_plugin_service->log_printf("[RDP] allocating %zu bytes for a full screenshot\n", szmem); + rpsd->buffer = malloc(szmem); + if (!rpsd->buffer) { + remmina_plugin_service->log_printf("[RDP] unable to allocate %zu bytes for a full screenshot\n", szmem); + return FALSE; + } + rpsd->width = gdi->width; + rpsd->height = gdi->height; + rpsd->bitsPerPixel = bitsPerPixel; + rpsd->bytesPerPixel = bytesPerPixel; - memcpy(rpsd->buffer, gdi->primary_buffer, szmem); + memcpy(rpsd->buffer, gdi->primary_buffer, szmem); - /* Returning TRUE instruct also the caller to deallocate rpsd->buffer */ - return TRUE; + /* Returning TRUE instruct also the caller to deallocate rpsd->buffer */ + return TRUE; } /* Array of key/value pairs for color depths */ static gpointer colordepth_list[] = { - "8", N_("256 colors (8 bpp)"), + "8", N_("256 colors (8 bpp)"), "15", N_("High color (15 bpp)"), "16", N_("High color (16 bpp)"), "24", N_("True color (24 bpp)"), "32", N_("True color (32 bpp)"), - "0", N_("RemoteFX (32 bpp)"), + "0", N_("RemoteFX (32 bpp)"), NULL }; @@ -1372,19 +1298,19 @@ static gpointer quality_list[] = /* Array of key/value pairs for sound options */ static gpointer sound_list[] = { - "off", N_("Off"), - "local", N_("Local"), + "off", N_("Off"), + "local", N_("Local"), "local,11025,1", N_("Local - low quality"), "local,22050,2", N_("Local - medium quality"), "local,44100,2", N_("Local - high quality"), - "remote", N_("Remote"), + "remote", N_("Remote"), NULL }; /* Array of key/value pairs for security */ static gpointer security_list[] = { - "", N_("Negotiate"), + "", N_("Negotiate"), "nla", "NLA", "tls", "TLS", "rdp", "RDP", @@ -1402,15 +1328,16 @@ static gpointer security_list[] = */ static const RemminaProtocolSetting remmina_rdp_basic_settings[] = { - { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, "server", NULL, FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("User name"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "domain", N_("Domain"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION, "resolution", NULL, FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Color depth"), FALSE, colordepth_list, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_FOLDER, "sharefolder", N_("Share folder"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableautoreconnect", N_("Disable automatic reconnection"), 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_("User name"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "domain", N_("Domain"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION, "resolution", NULL, FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Color depth"), FALSE, colordepth_list, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_FOLDER, "sharefolder", N_("Share folder"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableautoreconnect", N_("Disable automatic reconnection"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; /* Array of RemminaProtocolSetting for advanced settings. @@ -1424,88 +1351,88 @@ static const RemminaProtocolSetting remmina_rdp_basic_settings[] = */ static const RemminaProtocolSetting remmina_rdp_advanced_settings[] = { - { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "sound", N_("Sound"), FALSE, sound_list, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "security", N_("Security"), FALSE, security_list, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "gateway_server", N_("RD Gateway server"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "gateway_username", N_("RD Gateway username"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "gateway_password", N_("RD Gateway password"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "gateway_domain", N_("RD Gateway domain"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "clientname", N_("Client name"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "exec", N_("Startup program"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "execpath", N_("Startup path"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "loadbalanceinfo", N_("Load Balance Info"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "cert_ignore", N_("Ignore certificate"), TRUE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "microphone", N_("Redirect local microphone"), TRUE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "sharesmartcard", N_("Share smartcard"), TRUE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "shareprinter", N_("Share local printers"), TRUE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disablepasswordstoring", N_("Disable password storing"), TRUE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableclipboard", N_("Disable clipboard sync"), TRUE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "console", N_("Attach to console (2003/2003 R2)"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "gateway_usage", N_("Server detection using RD Gateway"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } + { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "sound", N_("Sound"), FALSE, sound_list, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "security", N_("Security"), FALSE, security_list, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "gateway_server", N_("RD Gateway server"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "gateway_username", N_("RD Gateway username"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "gateway_password", N_("RD Gateway password"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "gateway_domain", N_("RD Gateway domain"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "clientname", N_("Client name"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "exec", N_("Startup program"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "execpath", N_("Startup path"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "loadbalanceinfo", N_("Load Balance Info"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "cert_ignore", N_("Ignore certificate"), TRUE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "microphone", N_("Redirect local microphone"), TRUE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "sharesmartcard", N_("Share smartcard"), TRUE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "shareprinter", N_("Share local printers"), TRUE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disablepasswordstoring", N_("Disable password storing"), TRUE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableclipboard", N_("Disable clipboard sync"), TRUE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "console", N_("Attach to console (2003/2003 R2)"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "gateway_usage", N_("Server detection using RD Gateway"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; /* Array for available features. * The last element of the array must be REMMINA_PROTOCOL_FEATURE_TYPE_END. */ static const RemminaProtocolFeature remmina_rdp_features[] = { - { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_RDP_FEATURE_TOOL_REFRESH, N_("Refresh"), NULL, NULL }, - { REMMINA_PROTOCOL_FEATURE_TYPE_SCALE, REMMINA_RDP_FEATURE_SCALE, NULL, NULL, NULL }, - { REMMINA_PROTOCOL_FEATURE_TYPE_DYNRESUPDATE, REMMINA_RDP_FEATURE_DYNRESUPDATE, NULL, NULL, NULL }, - { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_RDP_FEATURE_TOOL_SENDCTRLALTDEL, N_("Send Ctrl+Alt+Delete"), NULL, NULL }, - { REMMINA_PROTOCOL_FEATURE_TYPE_UNFOCUS, REMMINA_RDP_FEATURE_UNFOCUS, NULL, NULL, NULL }, - { REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL } + { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_RDP_FEATURE_TOOL_REFRESH, N_("Refresh"), NULL, NULL }, + { REMMINA_PROTOCOL_FEATURE_TYPE_SCALE, REMMINA_RDP_FEATURE_SCALE, NULL, NULL, NULL }, + { REMMINA_PROTOCOL_FEATURE_TYPE_DYNRESUPDATE, REMMINA_RDP_FEATURE_DYNRESUPDATE, NULL, NULL, NULL }, + { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_RDP_FEATURE_TOOL_SENDCTRLALTDEL, N_("Send Ctrl+Alt+Delete"), NULL, NULL }, + { REMMINA_PROTOCOL_FEATURE_TYPE_UNFOCUS, REMMINA_RDP_FEATURE_UNFOCUS, NULL, NULL, NULL }, + { REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL } }; /* Protocol plugin definition and features */ static RemminaProtocolPlugin remmina_rdp = { - REMMINA_PLUGIN_TYPE_PROTOCOL, // Type - "RDP", // Name - N_("RDP - Remote Desktop Protocol"), // Description - GETTEXT_PACKAGE, // Translation domain - REMMINA_PLUGIN_RDP_VERSION, // Version number - "remmina-rdp", // Icon for normal connection - "remmina-rdp-ssh", // Icon for SSH connection - remmina_rdp_basic_settings, // Array for basic settings - remmina_rdp_advanced_settings, // Array for advanced settings - REMMINA_PROTOCOL_SSH_SETTING_TUNNEL, // SSH settings type - remmina_rdp_features, // Array for available features - remmina_rdp_init, // Plugin initialization - remmina_rdp_open_connection, // Plugin open connection - remmina_rdp_close_connection, // Plugin close connection - remmina_rdp_query_feature, // Query for available features - remmina_rdp_call_feature, // Call a feature - remmina_rdp_keystroke, // Send a keystroke - remmina_rdp_get_screenshot // Screenshot + REMMINA_PLUGIN_TYPE_PROTOCOL, // Type + "RDP", // Name + N_("RDP - Remote Desktop Protocol"), // Description + GETTEXT_PACKAGE, // Translation domain + REMMINA_PLUGIN_RDP_VERSION, // Version number + "remmina-rdp", // Icon for normal connection + "remmina-rdp-ssh", // Icon for SSH connection + remmina_rdp_basic_settings, // Array for basic settings + remmina_rdp_advanced_settings, // Array for advanced settings + REMMINA_PROTOCOL_SSH_SETTING_TUNNEL, // SSH settings type + remmina_rdp_features, // Array for available features + remmina_rdp_init, // Plugin initialization + remmina_rdp_open_connection, // Plugin open connection + remmina_rdp_close_connection, // Plugin close connection + remmina_rdp_query_feature, // Query for available features + remmina_rdp_call_feature, // Call a feature + remmina_rdp_keystroke, // Send a keystroke + remmina_rdp_get_screenshot // Screenshot }; /* File plugin definition and features */ static RemminaFilePlugin remmina_rdpf = { - REMMINA_PLUGIN_TYPE_FILE, // Type - "RDPF", // Name - N_("RDP - RDP File Handler"), // Description - GETTEXT_PACKAGE, // Translation domain - REMMINA_PLUGIN_RDP_VERSION, // Version number - remmina_rdp_file_import_test, // Test import function - remmina_rdp_file_import, // Import function - remmina_rdp_file_export_test, // Test export function - remmina_rdp_file_export, // Export function + REMMINA_PLUGIN_TYPE_FILE, // Type + "RDPF", // Name + N_("RDP - RDP File Handler"), // Description + GETTEXT_PACKAGE, // Translation domain + REMMINA_PLUGIN_RDP_VERSION, // Version number + remmina_rdp_file_import_test, // Test import function + remmina_rdp_file_import, // Import function + remmina_rdp_file_export_test, // Test export function + remmina_rdp_file_export, // Export function NULL }; /* Preferences plugin definition and features */ static RemminaPrefPlugin remmina_rdps = { - REMMINA_PLUGIN_TYPE_PREF, // Type - "RDPS", // Name - N_("RDP - Preferences"), // Description - GETTEXT_PACKAGE, // Translation domain - REMMINA_PLUGIN_RDP_VERSION, // Version number - "RDP", // Label - remmina_rdp_settings_new // Preferences body function + REMMINA_PLUGIN_TYPE_PREF, // Type + "RDPS", // Name + N_("RDP - Preferences"), // Description + GETTEXT_PACKAGE, // Translation domain + REMMINA_PLUGIN_RDP_VERSION, // Version number + "RDP", // Label + remmina_rdp_settings_new // Preferences body function }; G_MODULE_EXPORT gboolean remmina_plugin_entry(RemminaPluginService* service) @@ -1519,8 +1446,8 @@ G_MODULE_EXPORT gboolean remmina_plugin_entry(RemminaPluginService* service) freerdp_get_version(&vermaj, &vermin, &verrev); if (vermaj < FREERDP_REQUIRED_MAJOR || - (vermaj == FREERDP_REQUIRED_MAJOR && ( vermin < FREERDP_REQUIRED_MINOR || - (vermin == FREERDP_REQUIRED_MINOR && verrev < FREERDP_REQUIRED_REVISION) ) ) ) { + (vermaj == FREERDP_REQUIRED_MAJOR && ( vermin < FREERDP_REQUIRED_MINOR || + (vermin == FREERDP_REQUIRED_MINOR && verrev < FREERDP_REQUIRED_REVISION) ) ) ) { g_printf("Unable to load RDP plugin due to bad freerdp library version. Required " "libfreerdp version is at least %d.%d.%d but we found libfreerdp version %d.%d.%d\n", FREERDP_REQUIRED_MAJOR, FREERDP_REQUIRED_MINOR, FREERDP_REQUIRED_REVISION, @@ -1531,15 +1458,15 @@ G_MODULE_EXPORT gboolean remmina_plugin_entry(RemminaPluginService* service) bindtextdomain(GETTEXT_PACKAGE, REMMINA_RUNTIME_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); - if (! service->register_plugin((RemminaPlugin*) &remmina_rdp)) + if (!service->register_plugin((RemminaPlugin*)&remmina_rdp)) return FALSE; remmina_rdpf.export_hints = _("Export connection in Windows .rdp file format"); - if (! service->register_plugin((RemminaPlugin*) &remmina_rdpf)) + if (!service->register_plugin((RemminaPlugin*)&remmina_rdpf)) return FALSE; - if (! service->register_plugin((RemminaPlugin*) &remmina_rdps)) + if (!service->register_plugin((RemminaPlugin*)&remmina_rdps)) return FALSE; remmina_rdp_settings_init(); diff --git a/remmina-plugins/rdp/rdp_plugin.h b/remmina-plugins/rdp/rdp_plugin.h index 7fab83a93..383e09108 100644 --- a/remmina-plugins/rdp/rdp_plugin.h +++ b/remmina-plugins/rdp/rdp_plugin.h @@ -53,20 +53,19 @@ typedef struct rf_context rfContext; -#define GET_PLUGIN_DATA(gp) (rfContext*) g_object_get_data(G_OBJECT(gp), "plugin-data") +#define GET_PLUGIN_DATA(gp) (rfContext*)g_object_get_data(G_OBJECT(gp), "plugin-data") -#define DEFAULT_QUALITY_0 0x6f -#define DEFAULT_QUALITY_1 0x07 -#define DEFAULT_QUALITY_2 0x01 -#define DEFAULT_QUALITY_9 0x80 +#define DEFAULT_QUALITY_0 0x6f +#define DEFAULT_QUALITY_1 0x07 +#define DEFAULT_QUALITY_2 0x01 +#define DEFAULT_QUALITY_9 0x80 #define REMMINA_PLUGIN_RDP_VERSION "RDP Plugin: " VERSION " (git " REMMINA_GIT_REVISION \ - "), FreeRDP lib: " FREERDP_VERSION_FULL " (git " GIT_REVISION ")" + "), FreeRDP lib: " FREERDP_VERSION_FULL " (git " GIT_REVISION ")" extern RemminaPluginService* remmina_plugin_service; -struct rf_clipboard -{ +struct rf_clipboard { rfContext* rfi; CliprdrClientContext* context; wClipboard* system; @@ -77,38 +76,34 @@ struct rf_clipboard pthread_mutex_t transfer_clip_mutex; pthread_cond_t transfer_clip_cond; - enum { SCDW_NONE, SCDW_BUSY_WAIT, SCDW_ASYNCWAIT } srv_clip_data_wait ; + enum { SCDW_NONE, SCDW_BUSY_WAIT, SCDW_ASYNCWAIT } srv_clip_data_wait; gpointer srv_data; }; typedef struct rf_clipboard rfClipboard; -struct rf_pointer -{ +struct rf_pointer { rdpPointer pointer; GdkCursor* cursor; }; typedef struct rf_pointer rfPointer; -struct rf_bitmap -{ +struct rf_bitmap { rdpBitmap bitmap; Pixmap pixmap; cairo_surface_t* surface; }; typedef struct rf_bitmap rfBitmap; -struct rf_glyph -{ +struct rf_glyph { rdpGlyph glyph; Pixmap pixmap; }; typedef struct rf_glyph rfGlyph; -typedef enum -{ +typedef enum { REMMINA_RDP_EVENT_TYPE_SCANCODE, REMMINA_RDP_EVENT_TYPE_SCANCODE_UNICODE, REMMINA_RDP_EVENT_TYPE_MOUSE, @@ -118,35 +113,28 @@ typedef enum REMMINA_RDP_EVENT_TYPE_SEND_MONITOR_LAYOUT } RemminaPluginRdpEventType; -struct remmina_plugin_rdp_event -{ +struct remmina_plugin_rdp_event { RemminaPluginRdpEventType type; - union - { - struct - { + union { + struct { BOOL up; BOOL extended; UINT8 key_code; UINT32 unicode_code; } key_event; - struct - { + struct { UINT16 flags; UINT16 x; UINT16 y; BOOL extended; } mouse_event; - struct - { + struct { CLIPRDR_FORMAT_LIST* pFormatList; } clipboard_formatlist; - struct - { + struct { CLIPRDR_FORMAT_DATA_RESPONSE* pFormatDataResponse; } clipboard_formatdataresponse; - struct - { + struct { CLIPRDR_FORMAT_DATA_REQUEST* pFormatDataRequest; } clipboard_formatdatarequest; struct { @@ -160,8 +148,7 @@ struct remmina_plugin_rdp_event }; typedef struct remmina_plugin_rdp_event RemminaPluginRdpEvent; -typedef enum -{ +typedef enum { REMMINA_RDP_UI_UPDATE_REGION = 0, REMMINA_RDP_UI_CONNECTED, REMMINA_RDP_UI_RECONNECT_PROGRESS, @@ -172,8 +159,7 @@ typedef enum REMMINA_RDP_UI_EVENT } RemminaPluginRdpUiType; -typedef enum -{ +typedef enum { REMMINA_RDP_UI_CLIPBOARD_FORMATLIST, REMMINA_RDP_UI_CLIPBOARD_GET_DATA, REMMINA_RDP_UI_CLIPBOARD_SET_DATA, @@ -181,8 +167,7 @@ typedef enum REMMINA_RDP_UI_CLIPBOARD_DETACH_OWNER } RemminaPluginRdpUiClipboardType; -typedef enum -{ +typedef enum { REMMINA_RDP_POINTER_NEW, REMMINA_RDP_POINTER_FREE, REMMINA_RDP_POINTER_SET, @@ -191,49 +176,41 @@ typedef enum REMMINA_RDP_POINTER_SETPOS } RemminaPluginRdpUiPointerType; -typedef enum -{ +typedef enum { REMMINA_RDP_UI_EVENT_UPDATE_SCALE } RemminaPluginRdpUiEeventType; -struct remmina_plugin_rdp_ui_object -{ +struct remmina_plugin_rdp_ui_object { RemminaPluginRdpUiType type; gboolean sync; gboolean complete; pthread_mutex_t sync_wait_mutex; pthread_cond_t sync_wait_cond; - union - { - struct - { + union { + struct { gint x; gint y; gint width; gint height; } region; - struct - { + struct { rdpContext* context; rfPointer* pointer; RemminaPluginRdpUiPointerType type; } cursor; - struct - { + struct { gint left; gint top; RFX_MESSAGE* message; } rfx; - struct - { + struct { gint left; gint top; gint width; gint height; UINT8* bitmap; } nocodec; - struct - { + struct { RemminaPluginRdpUiClipboardType type; GtkTargetList* targetlist; UINT32 format; @@ -254,8 +231,7 @@ struct remmina_plugin_rdp_ui_object void *retptr; }; -struct rf_context -{ +struct rf_context { rdpContext _p; RemminaProtocolWidget* protocol_widget; diff --git a/remmina-plugins/rdp/rdp_settings.c b/remmina-plugins/rdp/rdp_settings.c index cf332f5ea..adf426a87 100644 --- a/remmina-plugins/rdp/rdp_settings.c +++ b/remmina-plugins/rdp/rdp_settings.c @@ -68,15 +68,14 @@ guint remmina_rdp_settings_get_keyboard_layout(void) return keyboard_layout; } -#define REMMINA_TYPE_PLUGIN_RDPSET_GRID (remmina_rdp_settings_grid_get_type()) -#define REMMINA_RDPSET_GRID(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), REMMINA_TYPE_PLUGIN_RDPSET_GRID, RemminaPluginRdpsetGrid)) -#define REMMINA_RDPSET_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), REMMINA_TYPE_PLUGIN_RDPSET_GRID, RemminaPluginRdpsetGridClass)) -#define REMMINA_IS_PLUGIN_RDPSET_GRID(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), REMMINA_TYPE_PLUGIN_RDPSET_GRID)) -#define REMMINA_IS_PLUGIN_RDPSET_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), REMMINA_TYPE_PLUGIN_RDPSET_GRID)) -#define REMMINA_RDPSET_GRID_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), REMMINA_TYPE_PLUGIN_RDPSET_GRID, RemminaPluginRdpsetGridClass)) - -typedef struct _RemminaPluginRdpsetGrid -{ +#define REMMINA_TYPE_PLUGIN_RDPSET_GRID (remmina_rdp_settings_grid_get_type()) +#define REMMINA_RDPSET_GRID(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), REMMINA_TYPE_PLUGIN_RDPSET_GRID, RemminaPluginRdpsetGrid)) +#define REMMINA_RDPSET_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), REMMINA_TYPE_PLUGIN_RDPSET_GRID, RemminaPluginRdpsetGridClass)) +#define REMMINA_IS_PLUGIN_RDPSET_GRID(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), REMMINA_TYPE_PLUGIN_RDPSET_GRID)) +#define REMMINA_IS_PLUGIN_RDPSET_GRID_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), REMMINA_TYPE_PLUGIN_RDPSET_GRID)) +#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; @@ -107,8 +106,7 @@ typedef struct _RemminaPluginRdpsetGrid guint quality_values[10]; } RemminaPluginRdpsetGrid; -typedef struct _RemminaPluginRdpsetGridClass -{ +typedef struct _RemminaPluginRdpsetGridClass { GtkGridClass parent_class; } RemminaPluginRdpsetGridClass; @@ -132,12 +130,10 @@ static void remmina_rdp_settings_grid_destroy(GtkWidget* widget, gpointer data) grid = REMMINA_RDPSET_GRID(widget); - if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->keyboard_layout_combo), &iter)) - { + if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->keyboard_layout_combo), &iter)) { gtk_tree_model_get(GTK_TREE_MODEL(grid->keyboard_layout_store), &iter, 0, &new_layout, -1); - if (new_layout != rdp_keyboard_layout) - { + if (new_layout != rdp_keyboard_layout) { rdp_keyboard_layout = new_layout; s = g_strdup_printf("%X", new_layout); remmina_plugin_service->pref_set_value("rdp_keyboard_layout", s); @@ -166,8 +162,7 @@ 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 { val = 0; @@ -181,8 +176,7 @@ 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 { val = 0; @@ -211,8 +205,7 @@ static void remmina_rdp_settings_grid_load_layout(RemminaPluginRdpsetGrid* grid) layouts = freerdp_keyboard_get_layouts(RDP_KEYBOARD_LAYOUT_TYPE_STANDARD | RDP_KEYBOARD_LAYOUT_TYPE_VARIANT); - for (i = 0; layouts[i].code; i++) - { + for (i = 0; layouts[i].code; i++) { s = g_strdup_printf("%08X - %s", layouts[i].code, layouts[i].name); gtk_list_store_append(grid->keyboard_layout_store, &iter); gtk_list_store_set(grid->keyboard_layout_store, &iter, 0, layouts[i].code, 1, s, -1); @@ -280,7 +273,7 @@ static void remmina_rdp_settings_grid_load_quality(RemminaPluginRdpsetGrid* grid gtk_list_store_append(grid->quality_store, &iter); gtk_list_store_set(grid->quality_store, &iter, 0, 9, 1, _("Best (slowest)"), -1); - memset(grid->quality_values, 0, sizeof (grid->quality_values)); + memset(grid->quality_values, 0, sizeof(grid->quality_values)); value = remmina_plugin_service->pref_get_value("rdp_quality_0"); grid->quality_values[0] = (value && value[0] ? strtoul(value, NULL, 16) : DEFAULT_QUALITY_0); @@ -305,18 +298,14 @@ 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) - { + 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); @@ -331,15 +320,14 @@ static void remmina_rdp_settings_quality_on_changed(GtkComboBox *widget, Remmina GtkTreeIter iter; gboolean sensitive; - if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX (grid->quality_combo), &iter)) - { + 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 ); if (sensitive) v = grid->quality_values[i]; else - v = 0x3f; /* All checkboxes disabled */ + v = 0x3f; /* All checkboxes disabled */ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(grid->wallpaper_check), (v & 1) == 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(grid->windowdrag_check), (v & 2) == 0); @@ -369,11 +357,9 @@ static void remmina_rdp_settings_quality_option_on_toggled(GtkToggleButton* togg guint i = 0; GtkTreeIter iter; - if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(grid->quality_combo), &iter)) - { + 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); - if (i != -1) - { + if (i != -1) { v = 0; v |= (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->wallpaper_check)) ? 0 : 1); v |= (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(grid->windowdrag_check)) ? 0 : 2); @@ -396,20 +382,17 @@ 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) - { + 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); + valid = gtk_tree_model_iter_next(m, &iter); } } @@ -433,8 +416,8 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) /* Create the content */ widget = gtk_label_new(_("Keyboard layout")); 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_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, 0, 1, 1); grid->keyboard_layout_store = gtk_list_store_new(2, G_TYPE_UINT, G_TYPE_STRING); @@ -449,8 +432,8 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new("-"); 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_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, 1, 1, 4, 2); grid->keyboard_layout_label = widget; @@ -468,8 +451,8 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new(_("Quality 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_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, 6, 1, 4); grid->quality_store = gtk_list_store_new(2, G_TYPE_UINT, G_TYPE_STRING); @@ -542,13 +525,13 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *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); + gtk_combo_box_set_active(GTK_COMBO_BOX(grid->quality_combo), 0); widget = gtk_label_new(_("Remote scale factor")); 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_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, 27, 1, 1); grid->device_scale_factor_store = gtk_list_store_new(2, G_TYPE_INT, G_TYPE_STRING); @@ -560,8 +543,8 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new(_("Desktop scale factor %")); 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_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, 1, 27, 1, 1); widget = gtk_spin_button_new_with_range(0, 10000, 1); @@ -571,8 +554,8 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new(_("Device scale factor %")); 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_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, 1, 28, 1, 1); widget = gtk_combo_box_new_with_model(GTK_TREE_MODEL(grid->device_scale_factor_store)); @@ -593,8 +576,8 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new(_("Desktop orientation")); 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_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, 29, 1, 1); widget = gtk_combo_box_new_with_model(GTK_TREE_MODEL(grid->desktop_orientation_store)); diff --git a/remmina-plugins/spice/spice_plugin.c b/remmina-plugins/spice/spice_plugin.c index 67d06d6c0..905c81226 100644 --- a/remmina-plugins/spice/spice_plugin.c +++ b/remmina-plugins/spice/spice_plugin.c @@ -36,8 +36,7 @@ #define XSPICE_DEFAULT_PORT 5900 -enum -{ +enum { REMMINA_PLUGIN_SPICE_FEATURE_PREF_VIEWONLY = 1, REMMINA_PLUGIN_SPICE_FEATURE_PREF_RESIZEGUEST, REMMINA_PLUGIN_SPICE_FEATURE_PREF_DISABLECLIPBOARD, @@ -57,8 +56,8 @@ void remmina_plugin_spice_select_usb_devices(RemminaProtocolWidget *); #ifdef SPICE_GTK_CHECK_VERSION # if SPICE_GTK_CHECK_VERSION(0, 31, 0) void remmina_plugin_spice_file_transfer_new_cb(SpiceMainChannel *, SpiceFileTransferTask *, RemminaProtocolWidget *); -# endif /* SPICE_GTK_CHECK_VERSION(0, 31, 0) */ -#endif /* SPICE_GTK_CHECK_VERSION */ +# endif /* SPICE_GTK_CHECK_VERSION(0, 31, 0) */ +#endif /* SPICE_GTK_CHECK_VERSION */ static void remmina_plugin_spice_init(RemminaProtocolWidget *gp) { @@ -73,22 +72,22 @@ static void remmina_plugin_spice_init(RemminaProtocolWidget *gp) gpdata->session = spice_session_new(); g_signal_connect(gpdata->session, - "channel-new", - G_CALLBACK(remmina_plugin_spice_channel_new_cb), - gp); + "channel-new", + G_CALLBACK(remmina_plugin_spice_channel_new_cb), + gp); g_object_set(gpdata->session, - "password", g_strdup(remmina_plugin_service->file_get_string(remminafile, "password")), - "read-only", remmina_plugin_service->file_get_int(remminafile, "viewonly", FALSE), - "enable-audio", remmina_plugin_service->file_get_int(remminafile, "enableaudio", FALSE), - "enable-smartcard", remmina_plugin_service->file_get_int(remminafile, "sharesmartcard", FALSE), - NULL); + "password", g_strdup(remmina_plugin_service->file_get_string(remminafile, "password")), + "read-only", remmina_plugin_service->file_get_int(remminafile, "viewonly", FALSE), + "enable-audio", remmina_plugin_service->file_get_int(remminafile, "enableaudio", FALSE), + "enable-smartcard", remmina_plugin_service->file_get_int(remminafile, "sharesmartcard", FALSE), + NULL); gpdata->gtk_session = spice_gtk_session_get(gpdata->session); g_object_set(gpdata->gtk_session, - "auto-clipboard", - !remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE), - NULL); + "auto-clipboard", + !remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE), + NULL); } static gboolean remmina_plugin_spice_open_connection(RemminaProtocolWidget *gp) @@ -102,27 +101,24 @@ static gboolean remmina_plugin_spice_open_connection(RemminaProtocolWidget *gp) RemminaFile *remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); remmina_plugin_service->get_server_port(remmina_plugin_service->file_get_string(remminafile, "server"), - XSPICE_DEFAULT_PORT, - &host, - &port); + XSPICE_DEFAULT_PORT, + &host, + &port); g_object_set(gpdata->session, "host", host, NULL); g_free(host); /* Unencrypted connection */ - if (!remmina_plugin_service->file_get_int(remminafile, "usetls", FALSE)) - { + if (!remmina_plugin_service->file_get_int(remminafile, "usetls", FALSE)) { g_object_set(gpdata->session, "port", g_strdup_printf("%i", port), NULL); } /* TLS encrypted connection */ - else - { + else{ g_object_set(gpdata->session, "tls_port", g_strdup_printf("%i", port), NULL); /* Server CA certificate */ cacert = remmina_plugin_service->file_get_string(remminafile, "cacert"); - if (cacert) - { + if (cacert) { g_object_set(gpdata->session, "ca-file", cacert, NULL); } } @@ -142,15 +138,13 @@ static gboolean remmina_plugin_spice_close_connection(RemminaProtocolWidget *gp) TRACE_CALL(__func__); RemminaPluginSpiceData *gpdata = GET_PLUGIN_DATA(gp); - if (gpdata->main_channel) - { + if (gpdata->main_channel) { g_signal_handlers_disconnect_by_func(gpdata->main_channel, - G_CALLBACK(remmina_plugin_spice_main_channel_event_cb), - gp); + G_CALLBACK(remmina_plugin_spice_main_channel_event_cb), + gp); } - if (gpdata->session) - { + if (gpdata->session) { spice_session_disconnect(gpdata->session); g_object_unref(gpdata->session); gpdata->session = NULL; @@ -159,12 +153,11 @@ static gboolean remmina_plugin_spice_close_connection(RemminaProtocolWidget *gp) #ifdef SPICE_GTK_CHECK_VERSION # if SPICE_GTK_CHECK_VERSION(0, 31, 0) - if (gpdata->file_transfers) - { + if (gpdata->file_transfers) { g_hash_table_unref(gpdata->file_transfers); } -# endif /* SPICE_GTK_CHECK_VERSION(0, 31, 0) */ -#endif /* SPICE_GTK_CHECK_VERSION */ +# endif /* SPICE_GTK_CHECK_VERSION(0, 31, 0) */ +#endif /* SPICE_GTK_CHECK_VERSION */ return FALSE; } @@ -179,38 +172,34 @@ static void remmina_plugin_spice_channel_new_cb(SpiceSession *session, SpiceChan g_object_get(channel, "channel-id", &id, NULL); - if (SPICE_IS_MAIN_CHANNEL(channel)) - { + if (SPICE_IS_MAIN_CHANNEL(channel)) { gpdata->main_channel = SPICE_MAIN_CHANNEL(channel); g_signal_connect(channel, - "channel-event", - G_CALLBACK(remmina_plugin_spice_main_channel_event_cb), - gp); + "channel-event", + G_CALLBACK(remmina_plugin_spice_main_channel_event_cb), + gp); #ifdef SPICE_GTK_CHECK_VERSION # if SPICE_GTK_CHECK_VERSION(0, 31, 0) g_signal_connect(channel, - "new-file-transfer", - G_CALLBACK(remmina_plugin_spice_file_transfer_new_cb), - gp); -# endif /* SPICE_GTK_CHECK_VERSION(0, 31, 0) */ -#endif /* SPICE_GTK_CHECK_VERSION */ + "new-file-transfer", + G_CALLBACK(remmina_plugin_spice_file_transfer_new_cb), + gp); +# endif /* SPICE_GTK_CHECK_VERSION(0, 31, 0) */ +#endif /* SPICE_GTK_CHECK_VERSION */ } - if (SPICE_IS_DISPLAY_CHANNEL(channel)) - { + if (SPICE_IS_DISPLAY_CHANNEL(channel)) { gpdata->display_channel = SPICE_DISPLAY_CHANNEL(channel); gpdata->display = spice_display_new(gpdata->session, id); g_signal_connect(gpdata->display, - "notify::ready", - G_CALLBACK(remmina_plugin_spice_display_ready_cb), - gp); + "notify::ready", + G_CALLBACK(remmina_plugin_spice_display_ready_cb), + gp); remmina_plugin_spice_display_ready_cb(G_OBJECT(gpdata->display), NULL, gp); } - if (SPICE_IS_PLAYBACK_CHANNEL(channel)) - { - if (remmina_plugin_service->file_get_int(remminafile, "enableaudio", FALSE)) - { + if (SPICE_IS_PLAYBACK_CHANNEL(channel)) { + if (remmina_plugin_service->file_get_int(remminafile, "enableaudio", FALSE)) { gpdata->audio = spice_audio_get(gpdata->session, NULL); } } @@ -229,17 +218,14 @@ static gboolean remmina_plugin_spice_ask_auth(RemminaProtocolWidget *gp) disablepasswordstoring = remmina_plugin_service->file_get_int(remminafile, "disablepasswordstoring", FALSE); ret = remmina_plugin_service->protocol_plugin_init_authpwd(gp, REMMINA_AUTHPWD_TYPE_PROTOCOL, !disablepasswordstoring); - if (ret == GTK_RESPONSE_OK) - { + if (ret == GTK_RESPONSE_OK) { g_object_set(gpdata->session, - "password", - remmina_plugin_service->protocol_plugin_init_get_password(gp), - NULL); + "password", + remmina_plugin_service->protocol_plugin_init_get_password(gp), + NULL); return TRUE; - } - else - { + }else { return FALSE; } } @@ -252,42 +238,38 @@ static void remmina_plugin_spice_main_channel_event_cb(SpiceChannel *channel, Sp gint port; RemminaFile *remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); - switch (event) - { - case SPICE_CHANNEL_CLOSED: - remmina_plugin_service->get_server_port(remmina_plugin_service->file_get_string(remminafile, "server"), - XSPICE_DEFAULT_PORT, - &server, - &port); - remmina_plugin_service->protocol_plugin_set_error(gp, _("Disconnected from SPICE server %s."), server); - g_free(server); - remmina_plugin_spice_close_connection(gp); - break; - case SPICE_CHANNEL_OPENED: - break; - case SPICE_CHANNEL_ERROR_AUTH: - if (remmina_plugin_spice_ask_auth(gp)) - { - remmina_plugin_spice_open_connection(gp); - } - else - { - remmina_plugin_service->protocol_plugin_set_error(gp, _("Invalid password.")); - remmina_plugin_spice_close_connection(gp); - } - break; - case SPICE_CHANNEL_ERROR_TLS: - remmina_plugin_service->protocol_plugin_set_error(gp, _("TLS connection error.")); - remmina_plugin_spice_close_connection(gp); - break; - case SPICE_CHANNEL_ERROR_IO: - case SPICE_CHANNEL_ERROR_LINK: - case SPICE_CHANNEL_ERROR_CONNECT: - remmina_plugin_service->protocol_plugin_set_error(gp, _("Connection to SPICE server failed.")); + switch (event) { + case SPICE_CHANNEL_CLOSED: + remmina_plugin_service->get_server_port(remmina_plugin_service->file_get_string(remminafile, "server"), + XSPICE_DEFAULT_PORT, + &server, + &port); + remmina_plugin_service->protocol_plugin_set_error(gp, _("Disconnected from SPICE server %s."), server); + g_free(server); + remmina_plugin_spice_close_connection(gp); + break; + case SPICE_CHANNEL_OPENED: + break; + case SPICE_CHANNEL_ERROR_AUTH: + if (remmina_plugin_spice_ask_auth(gp)) { + remmina_plugin_spice_open_connection(gp); + }else{ + remmina_plugin_service->protocol_plugin_set_error(gp, _("Invalid password.")); remmina_plugin_spice_close_connection(gp); - break; - default: - break; + } + break; + case SPICE_CHANNEL_ERROR_TLS: + remmina_plugin_service->protocol_plugin_set_error(gp, _("TLS connection error.")); + remmina_plugin_spice_close_connection(gp); + break; + case SPICE_CHANNEL_ERROR_IO: + case SPICE_CHANNEL_ERROR_LINK: + case SPICE_CHANNEL_ERROR_CONNECT: + remmina_plugin_service->protocol_plugin_set_error(gp, _("Connection to SPICE server failed.")); + remmina_plugin_spice_close_connection(gp); + break; + default: + break; } } @@ -300,16 +282,15 @@ static void remmina_plugin_spice_display_ready_cb(GObject *display, GParamSpec * g_object_get(display, "ready", &ready, NULL); - if (ready) - { + if (ready) { g_signal_handlers_disconnect_by_func(display, - G_CALLBACK(remmina_plugin_spice_display_ready_cb), - gp); + G_CALLBACK(remmina_plugin_spice_display_ready_cb), + gp); g_object_set(display, - "scaling", (remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp) != REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE), - "resize-guest", remmina_plugin_service->file_get_int(remminafile, "resizeguest", FALSE), - NULL); + "scaling", (remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp) != REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE), + "resize-guest", remmina_plugin_service->file_get_int(remminafile, "resizeguest", FALSE), + NULL); gtk_container_add(GTK_CONTAINER(gp), GTK_WIDGET(display)); gtk_widget_show(GTK_WIDGET(display)); @@ -324,12 +305,11 @@ static void remmina_plugin_spice_keystroke(RemminaProtocolWidget *gp, const guin TRACE_CALL(__func__); RemminaPluginSpiceData *gpdata = GET_PLUGIN_DATA(gp); - if (gpdata->display) - { + if (gpdata->display) { spice_display_send_keys(gpdata->display, - keystrokes, - keylen, - SPICE_DISPLAY_KEY_EVENT_CLICK); + keystrokes, + keylen, + SPICE_DISPLAY_KEY_EVENT_CLICK); } } @@ -354,18 +334,15 @@ static void remmina_plugin_spice_update_scale(RemminaProtocolWidget *gp) scale = remmina_plugin_service->file_get_int(remminafile, "scale", FALSE); g_object_set(gpdata->display, "scaling", scale, NULL); - if (scale) - { + if (scale) { /* In scaled mode, the SpiceDisplay will get its dimensions from its parent */ gtk_widget_set_size_request(GTK_WIDGET(gpdata->display), -1, -1 ); - } - else - { + }else { /* In non scaled mode, the plugins forces dimensions of the SpiceDisplay */ g_object_get(gpdata->display_channel, - "width", &width, - "height", &height, - NULL); + "width", &width, + "height", &height, + NULL); gtk_widget_set_size_request(GTK_WIDGET(gpdata->display), width, height); } } @@ -384,37 +361,36 @@ static void remmina_plugin_spice_call_feature(RemminaProtocolWidget *gp, const R RemminaPluginSpiceData *gpdata = GET_PLUGIN_DATA(gp); RemminaFile *remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); - switch (feature->id) - { - case REMMINA_PLUGIN_SPICE_FEATURE_PREF_VIEWONLY: - g_object_set(gpdata->session, - "read-only", - remmina_plugin_service->file_get_int(remminafile, "viewonly", FALSE), - NULL); - break; - case REMMINA_PLUGIN_SPICE_FEATURE_PREF_RESIZEGUEST: - g_object_set(gpdata->display, - "resize-guest", - remmina_plugin_service->file_get_int(remminafile, "resizeguest", TRUE), - NULL); - break; - case REMMINA_PLUGIN_SPICE_FEATURE_PREF_DISABLECLIPBOARD: - g_object_set(gpdata->gtk_session, - "auto-clipboard", - !remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE), - NULL); - break; - case REMMINA_PLUGIN_SPICE_FEATURE_SCALE: - remmina_plugin_spice_update_scale(gp); - break; - case REMMINA_PLUGIN_SPICE_FEATURE_TOOL_SENDCTRLALTDEL: - remmina_plugin_spice_send_ctrlaltdel(gp); - break; - case REMMINA_PLUGIN_SPICE_FEATURE_TOOL_USBREDIR: - remmina_plugin_spice_select_usb_devices(gp); - break; - default: - break; + switch (feature->id) { + case REMMINA_PLUGIN_SPICE_FEATURE_PREF_VIEWONLY: + g_object_set(gpdata->session, + "read-only", + remmina_plugin_service->file_get_int(remminafile, "viewonly", FALSE), + NULL); + break; + case REMMINA_PLUGIN_SPICE_FEATURE_PREF_RESIZEGUEST: + g_object_set(gpdata->display, + "resize-guest", + remmina_plugin_service->file_get_int(remminafile, "resizeguest", TRUE), + NULL); + break; + case REMMINA_PLUGIN_SPICE_FEATURE_PREF_DISABLECLIPBOARD: + g_object_set(gpdata->gtk_session, + "auto-clipboard", + !remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE), + NULL); + break; + case REMMINA_PLUGIN_SPICE_FEATURE_SCALE: + remmina_plugin_spice_update_scale(gp); + break; + case REMMINA_PLUGIN_SPICE_FEATURE_TOOL_SENDCTRLALTDEL: + remmina_plugin_spice_send_ctrlaltdel(gp); + break; + case REMMINA_PLUGIN_SPICE_FEATURE_TOOL_USBREDIR: + remmina_plugin_spice_select_usb_devices(gp); + break; + default: + break; } } @@ -429,12 +405,13 @@ static void remmina_plugin_spice_call_feature(RemminaProtocolWidget *gp, const R */ static const RemminaProtocolSetting remmina_plugin_spice_basic_settings[] = { - { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, "server", NULL, FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "resizeguest", N_("Resize guest to match window size"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "usetls", N_("Use TLS encryption"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_FILE, "cacert", N_("Server CA certificate"), 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_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "resizeguest", N_("Resize guest to match window size"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "usetls", N_("Use TLS encryption"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_FILE, "cacert", N_("Server CA certificate"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; /* Array of RemminaProtocolSetting for advanced settings. @@ -448,47 +425,48 @@ static const RemminaProtocolSetting remmina_plugin_spice_basic_settings[] = */ static const RemminaProtocolSetting remmina_plugin_spice_advanced_settings[] = { - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "viewonly", N_("View only"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableclipboard", N_("Disable clipboard sync"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disablepasswordstoring", N_("Disable password storing"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "enableaudio", N_("Enable audio channel"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "sharesmartcard", N_("Share smartcard"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "viewonly", N_("View only"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableclipboard", N_("Disable clipboard sync"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disablepasswordstoring", N_("Disable password storing"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "enableaudio", N_("Enable audio channel"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "sharesmartcard", N_("Share smartcard"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; /* Array for available features. * The last element of the array must be REMMINA_PROTOCOL_FEATURE_TYPE_END. */ static const RemminaProtocolFeature remmina_plugin_spice_features[] = { - { REMMINA_PROTOCOL_FEATURE_TYPE_PREF, REMMINA_PLUGIN_SPICE_FEATURE_PREF_VIEWONLY, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_CHECK), "viewonly", N_("View only") }, - { REMMINA_PROTOCOL_FEATURE_TYPE_PREF, REMMINA_PLUGIN_SPICE_FEATURE_PREF_RESIZEGUEST, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_CHECK), "resizeguest", N_("Resize guest to match window size") }, - { REMMINA_PROTOCOL_FEATURE_TYPE_PREF, REMMINA_PLUGIN_SPICE_FEATURE_PREF_DISABLECLIPBOARD, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_CHECK), "disableclipboard", N_("Disable clipboard sync") }, - { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_SPICE_FEATURE_TOOL_SENDCTRLALTDEL, N_("Send Ctrl+Alt+Delete"), NULL, NULL }, - { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_SPICE_FEATURE_TOOL_USBREDIR, N_("Select USB devices for redirection"), NULL, NULL }, - { REMMINA_PROTOCOL_FEATURE_TYPE_SCALE, REMMINA_PLUGIN_SPICE_FEATURE_SCALE, NULL, NULL, NULL }, - { REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL } + { REMMINA_PROTOCOL_FEATURE_TYPE_PREF, REMMINA_PLUGIN_SPICE_FEATURE_PREF_VIEWONLY, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_CHECK), "viewonly", + N_("View only") }, + { REMMINA_PROTOCOL_FEATURE_TYPE_PREF, REMMINA_PLUGIN_SPICE_FEATURE_PREF_RESIZEGUEST, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_CHECK), "resizeguest", N_("Resize guest to match window size") }, + { REMMINA_PROTOCOL_FEATURE_TYPE_PREF, REMMINA_PLUGIN_SPICE_FEATURE_PREF_DISABLECLIPBOARD, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_CHECK), "disableclipboard", N_("Disable clipboard sync") }, + { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_SPICE_FEATURE_TOOL_SENDCTRLALTDEL, N_("Send Ctrl+Alt+Delete"), NULL, NULL }, + { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_SPICE_FEATURE_TOOL_USBREDIR, N_("Select USB devices for redirection"), NULL, NULL }, + { REMMINA_PROTOCOL_FEATURE_TYPE_SCALE, REMMINA_PLUGIN_SPICE_FEATURE_SCALE, NULL, NULL, NULL }, + { REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL } }; static RemminaProtocolPlugin remmina_plugin_spice = { - REMMINA_PLUGIN_TYPE_PROTOCOL, // Type - "SPICE", // Name - N_("SPICE - Simple Protocol for Independent Computing Environments"), // Description - GETTEXT_PACKAGE, // Translation domain - VERSION, // Version number - "remmina-spice", // Icon for normal connection - "remmina-spice", // Icon for SSH connection - remmina_plugin_spice_basic_settings, // Array for basic settings - remmina_plugin_spice_advanced_settings, // Array for advanced settings - REMMINA_PROTOCOL_SSH_SETTING_NONE, // SSH settings type - remmina_plugin_spice_features, // Array for available features - remmina_plugin_spice_init, // Plugin initialization - remmina_plugin_spice_open_connection, // Plugin open connection - remmina_plugin_spice_close_connection, // Plugin close connection - remmina_plugin_spice_query_feature, // Query for available features - remmina_plugin_spice_call_feature, // Call a feature - remmina_plugin_spice_keystroke, // Send a keystroke - NULL // Screenshot + REMMINA_PLUGIN_TYPE_PROTOCOL, // Type + "SPICE", // Name + N_("SPICE - Simple Protocol for Independent Computing Environments"), // Description + GETTEXT_PACKAGE, // Translation domain + VERSION, // Version number + "remmina-spice", // Icon for normal connection + "remmina-spice", // Icon for SSH connection + remmina_plugin_spice_basic_settings, // Array for basic settings + remmina_plugin_spice_advanced_settings, // Array for advanced settings + REMMINA_PROTOCOL_SSH_SETTING_NONE, // SSH settings type + remmina_plugin_spice_features, // Array for available features + remmina_plugin_spice_init, // Plugin initialization + remmina_plugin_spice_open_connection, // Plugin open connection + remmina_plugin_spice_close_connection, // Plugin close connection + remmina_plugin_spice_query_feature, // Query for available features + remmina_plugin_spice_call_feature, // Call a feature + remmina_plugin_spice_keystroke, // Send a keystroke + NULL // Screenshot }; G_MODULE_EXPORT gboolean @@ -500,8 +478,7 @@ remmina_plugin_entry(RemminaPluginService *service) bindtextdomain(GETTEXT_PACKAGE, REMMINA_RUNTIME_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); - if (!service->register_plugin((RemminaPlugin *) &remmina_plugin_spice)) - { + if (!service->register_plugin((RemminaPlugin*)&remmina_plugin_spice)) { return FALSE; } diff --git a/remmina-plugins/spice/spice_plugin.h b/remmina-plugins/spice/spice_plugin.h index 499366d91..d58f380c5 100644 --- a/remmina-plugins/spice/spice_plugin.h +++ b/remmina-plugins/spice/spice_plugin.h @@ -49,10 +49,9 @@ # include <usb-device-widget.h> #endif -#define GET_PLUGIN_DATA(gp) (RemminaPluginSpiceData*) g_object_get_data(G_OBJECT(gp), "plugin-data") +#define GET_PLUGIN_DATA(gp) (RemminaPluginSpiceData*)g_object_get_data(G_OBJECT(gp), "plugin-data") -typedef struct _RemminaPluginSpiceData -{ +typedef struct _RemminaPluginSpiceData { SpiceAudio *audio; SpiceDisplay *display; SpiceDisplayChannel *display_channel; @@ -65,8 +64,8 @@ typedef struct _RemminaPluginSpiceData /* key: SpiceFileTransferTask, value: RemminaPluginSpiceXferWidgets */ GHashTable *file_transfers; GtkWidget *file_transfer_dialog; -# endif /* SPICE_GTK_CHECK_VERSION(0, 31, 0) */ -#endif /* SPICE_GTK_CHECK_VERSION */ +# endif /* SPICE_GTK_CHECK_VERSION(0, 31, 0) */ +#endif /* SPICE_GTK_CHECK_VERSION */ } RemminaPluginSpiceData; diff --git a/remmina-plugins/spice/spice_plugin_file_transfer.c b/remmina-plugins/spice/spice_plugin_file_transfer.c index c00415068..d902a6c44 100644 --- a/remmina-plugins/spice/spice_plugin_file_transfer.c +++ b/remmina-plugins/spice/spice_plugin_file_transfer.c @@ -62,50 +62,48 @@ void remmina_plugin_spice_file_transfer_new_cb(SpiceMainChannel *main_channel, S RemminaPluginSpiceData *gpdata = GET_PLUGIN_DATA(gp); g_signal_connect(task, - "finished", - G_CALLBACK(remmina_plugin_spice_file_transfer_finished_cb), - gp); - - if (!gpdata->file_transfers) - { - gpdata->file_transfers = g_hash_table_new_full(g_direct_hash, - g_direct_equal, - g_object_unref, - (GDestroyNotify)remmina_plugin_spice_xfer_widgets_free); + "finished", + G_CALLBACK(remmina_plugin_spice_file_transfer_finished_cb), + gp); + + if (!gpdata->file_transfers) { + gpdata->file_transfers = g_hash_table_new_full(g_direct_hash, + g_direct_equal, + g_object_unref, + (GDestroyNotify)remmina_plugin_spice_xfer_widgets_free); } - if (!gpdata->file_transfer_dialog) - { + if (!gpdata->file_transfer_dialog) { /* * FIXME: Use the RemminaConnectionWindow as transient parent widget * (and add the GTK_DIALOG_DESTROY_WITH_PARENT flag) if it becomes * accessible from the Remmina plugin API. */ gpdata->file_transfer_dialog = gtk_dialog_new_with_buttons(_("File Transfers"), - NULL, 0, - _("_Cancel"), - GTK_RESPONSE_CANCEL, - NULL); + NULL, 0, + _("_Cancel"), + GTK_RESPONSE_CANCEL, + NULL); dialog_content = gtk_dialog_get_content_area(GTK_DIALOG(gpdata->file_transfer_dialog)); gtk_widget_set_size_request(dialog_content, 400, -1); gtk_window_set_resizable(GTK_WINDOW(gpdata->file_transfer_dialog), FALSE); g_signal_connect(gpdata->file_transfer_dialog, - "response", - G_CALLBACK(remmina_plugin_spice_file_transfer_dialog_response_cb), - gp); + "response", + G_CALLBACK(remmina_plugin_spice_file_transfer_dialog_response_cb), + gp); } widgets = remmina_plugin_spice_xfer_widgets_new(task); g_hash_table_insert(gpdata->file_transfers, g_object_ref(task), widgets); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(gpdata->file_transfer_dialog))), - widgets->vbox, - TRUE, TRUE, 6); + widgets->vbox, + TRUE, TRUE, 6); g_signal_connect(task, - "notify::progress", - G_CALLBACK(remmina_plugin_spice_file_transfer_progress_cb), - gp); + "notify::progress", + G_CALLBACK(remmina_plugin_spice_file_transfer_progress_cb), + gp); gtk_widget_show(gpdata->file_transfer_dialog); } @@ -131,21 +129,21 @@ static RemminaPluginSpiceXferWidgets * remmina_plugin_spice_xfer_widgets_new(Spi widgets->cancel = gtk_button_new_from_icon_name("gtk-cancel", GTK_ICON_SIZE_SMALL_TOOLBAR); g_signal_connect(widgets->cancel, - "clicked", - G_CALLBACK(remmina_plugin_spice_file_transfer_cancel_cb), - task); + "clicked", + G_CALLBACK(remmina_plugin_spice_file_transfer_cancel_cb), + task); gtk_widget_set_hexpand(widgets->cancel, FALSE); gtk_widget_set_valign(widgets->cancel, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(widgets->hbox), widgets->progress, - TRUE, TRUE, 0); + TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(widgets->hbox), widgets->cancel, - FALSE, TRUE, 0); + FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(widgets->vbox), widgets->label, - TRUE, TRUE, 0); + TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(widgets->vbox), widgets->hbox, - TRUE, TRUE, 0); + TRUE, TRUE, 0); gtk_widget_show_all(widgets->vbox); @@ -180,11 +178,9 @@ static void remmina_plugin_spice_file_transfer_dialog_response_cb(GtkDialog *dia SpiceFileTransferTask *task; RemminaPluginSpiceData *gpdata = GET_PLUGIN_DATA(gp); - if (response == GTK_RESPONSE_CANCEL) - { + if (response == GTK_RESPONSE_CANCEL) { g_hash_table_iter_init(&iter, gpdata->file_transfers); - while (g_hash_table_iter_next(&iter, &key, &value)) - { + while (g_hash_table_iter_next(&iter, &key, &value)) { task = key; spice_file_transfer_task_cancel(task); } @@ -199,10 +195,9 @@ static void remmina_plugin_spice_file_transfer_progress_cb(GObject *task, GParam RemminaPluginSpiceData *gpdata = GET_PLUGIN_DATA(gp); widgets = g_hash_table_lookup(gpdata->file_transfers, task); - if (widgets) - { + if (widgets) { gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->progress), - spice_file_transfer_task_get_progress(SPICE_FILE_TRANSFER_TASK(task))); + spice_file_transfer_task_get_progress(SPICE_FILE_TRANSFER_TASK(task))); } } @@ -220,28 +215,24 @@ static void remmina_plugin_spice_file_transfer_finished_cb(SpiceFileTransferTask */ filename = spice_file_transfer_task_get_filename(task); - if (error) - { + if (error) { notification = g_notification_new(_("Transfer error")); notification_message = g_strdup_printf(_("%s: %s"), - filename, error->message); - } - else - { + filename, error->message); + }else { notification = g_notification_new(_("Transfer completed")); notification_message = g_strdup_printf(_("File %s transferred successfully"), - filename); + filename); } g_notification_set_body(notification, notification_message); g_application_send_notification(g_application_get_default(), - "remmina-plugin-spice-file-transfer-finished", - notification); + "remmina-plugin-spice-file-transfer-finished", + notification); g_hash_table_remove(gpdata->file_transfers, task); - if (!g_hash_table_size(gpdata->file_transfers)) - { + if (!g_hash_table_size(gpdata->file_transfers)) { gtk_widget_hide(gpdata->file_transfer_dialog); } @@ -249,5 +240,5 @@ static void remmina_plugin_spice_file_transfer_finished_cb(SpiceFileTransferTask g_free(notification_message); g_object_unref(notification); } -# endif /* SPICE_GTK_CHECK_VERSION(0, 31, 0) */ -#endif /* SPICE_GTK_CHECK_VERSION */ +# endif /* SPICE_GTK_CHECK_VERSION(0, 31, 0) */ +#endif /* SPICE_GTK_CHECK_VERSION */ diff --git a/remmina-plugins/spice/spice_plugin_usb.c b/remmina-plugins/spice/spice_plugin_usb.c index 82149f452..063b6299d 100644 --- a/remmina-plugins/spice/spice_plugin_usb.c +++ b/remmina-plugins/spice/spice_plugin_usb.c @@ -49,24 +49,24 @@ void remmina_plugin_spice_select_usb_devices(RemminaProtocolWidget *gp) * accessible from the Remmina plugin API. */ dialog = gtk_dialog_new_with_buttons(_("Select USB devices for redirection"), - NULL, - GTK_DIALOG_MODAL, - _("_Close"), - GTK_RESPONSE_ACCEPT, - NULL); + NULL, + GTK_DIALOG_MODAL, + _("_Close"), + GTK_RESPONSE_ACCEPT, + NULL); gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); usb_device_widget = spice_usb_device_widget_new(gpdata->session, NULL); g_signal_connect(usb_device_widget, - "connect-failed", - G_CALLBACK(remmina_plugin_spice_usb_connect_failed_cb), - gp); + "connect-failed", + G_CALLBACK(remmina_plugin_spice_usb_connect_failed_cb), + gp); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), - usb_device_widget, - TRUE, - TRUE, - 0); + usb_device_widget, + TRUE, + TRUE, + 0); gtk_widget_show_all(dialog); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); @@ -78,8 +78,7 @@ static void remmina_plugin_spice_usb_connect_failed_cb(GObject *object, SpiceUsb GtkWidget *dialog; - if (error->domain == G_IO_ERROR && error->code == G_IO_ERROR_CANCELLED) - { + if (error->domain == G_IO_ERROR && error->code == G_IO_ERROR_CANCELLED) { return; } @@ -89,13 +88,13 @@ static void remmina_plugin_spice_usb_connect_failed_cb(GObject *object, SpiceUsb * accessible from the Remmina plugin API. */ dialog = gtk_message_dialog_new(NULL, - GTK_DIALOG_MODAL, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_CLOSE, - _("USB redirection error")); + GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + _("USB redirection error")); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), - "%s", - error->message); + "%s", + error->message); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } diff --git a/remmina-plugins/telepathy/telepathy_channel_handler.c b/remmina-plugins/telepathy/telepathy_channel_handler.c index eed7db229..7c37e594b 100644 --- a/remmina-plugins/telepathy/telepathy_channel_handler.c +++ b/remmina-plugins/telepathy/telepathy_channel_handler.c @@ -48,8 +48,7 @@ extern RemminaPluginService *remmina_plugin_telepathy_service; -typedef struct _RemminaTpChannelHandler -{ +typedef struct _RemminaTpChannelHandler { gchar *connection_path; gchar *channel_path; GHashTable *channel_properties; @@ -72,40 +71,32 @@ typedef struct _RemminaTpChannelHandler static void remmina_tp_channel_handler_free(RemminaTpChannelHandler *chandler) { TRACE_CALL("__func__"); - if (chandler->disconnect_handler) - { + if (chandler->disconnect_handler) { g_signal_handler_disconnect(chandler->proto_widget, chandler->disconnect_handler); chandler->disconnect_handler = 0; } g_free(chandler->connection_path); g_free(chandler->channel_path); g_hash_table_destroy(chandler->channel_properties); - if (chandler->bus) - { + if (chandler->bus) { g_object_unref(chandler->bus); } - if (chandler->account) - { + if (chandler->account) { g_object_unref(chandler->account); } - if (chandler->connection) - { + if (chandler->connection) { g_object_unref(chandler->connection); } - if (chandler->channel) - { + if (chandler->channel) { g_object_unref(chandler->channel); } - if (chandler->alias) - { + if (chandler->alias) { g_free(chandler->alias); } - if (chandler->host) - { + if (chandler->host) { g_free(chandler->host); } - if (chandler->protocol) - { + if (chandler->protocol) { g_free(chandler->protocol); } g_free(chandler); @@ -114,7 +105,7 @@ static void remmina_tp_channel_handler_free(RemminaTpChannelHandler *chandler) static void remmina_tp_channel_handler_channel_closed(TpChannel *channel, gpointer user_data, GObject *self) { TRACE_CALL("__func__"); - RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler *) user_data; + RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler*)user_data; g_print("remmina_tp_channel_handler_channel_closed: %s\n", chandler->channel_path); remmina_tp_channel_handler_free(chandler); @@ -149,18 +140,17 @@ static void remmina_tp_channel_handler_connect(RemminaTpChannelHandler *chandler chandler->protocol = NULL; chandler->proto_widget = remmina_plugin_telepathy_service->open_connection(remminafile, - G_CALLBACK(remmina_tp_channel_handler_on_disconnect), chandler, &chandler->disconnect_handler); + G_CALLBACK(remmina_tp_channel_handler_on_disconnect), chandler, &chandler->disconnect_handler); } static void remmina_tp_channel_handler_get_service(TpProxy *channel, const GValue *service, const GError *error, - gpointer user_data, GObject *weak_object) + gpointer user_data, GObject *weak_object) { TRACE_CALL("__func__"); - RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler *) user_data; + RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler*)user_data; const gchar *svc; - if (error != NULL) - { + if (error != NULL) { g_print("remmina_tp_channel_handler_get_service: %s", error->message); remmina_tp_channel_handler_free(chandler); return; @@ -168,25 +158,21 @@ static void remmina_tp_channel_handler_get_service(TpProxy *channel, const GValu svc = g_value_get_string(service); g_print("remmina_tp_channel_handler_get_service: %s %s:%u\n", svc, chandler->host, chandler->port); - if (g_strcmp0(svc, "rfb") == 0) - { + if (g_strcmp0(svc, "rfb") == 0) { chandler->protocol = g_strdup("VNC"); - } - else - { + }else { chandler->protocol = g_ascii_strup(svc, -1); } remmina_tp_channel_handler_connect(chandler); } static void remmina_tp_channel_handler_accept(TpChannel *channel, const GValue *address, const GError *error, - gpointer user_data, GObject *weak_object) + gpointer user_data, GObject *weak_object) { TRACE_CALL("__func__"); - RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler *) user_data; + RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler*)user_data; - if (error != NULL) - { + if (error != NULL) { g_print("remmina_tp_channel_handler_accept: %s", error->message); remmina_tp_channel_handler_free(chandler); return; @@ -195,7 +181,7 @@ static void remmina_tp_channel_handler_accept(TpChannel *channel, const GValue * dbus_g_type_struct_get(address, 0, &chandler->host, 1, &chandler->port, G_MAXUINT); tp_cli_dbus_properties_call_get(channel, -1, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE, "Service", - remmina_tp_channel_handler_get_service, chandler, NULL, NULL); + remmina_tp_channel_handler_get_service, chandler, NULL, NULL); } static void remmina_tp_channel_handler_on_response(GtkDialog *dialog, gint response_id, RemminaTpChannelHandler *chandler) @@ -205,17 +191,14 @@ static void remmina_tp_channel_handler_on_response(GtkDialog *dialog, gint respo { 0 }; GError *error; - if (response_id == GTK_RESPONSE_YES) - { + if (response_id == GTK_RESPONSE_YES) { g_value_init(&noop, G_TYPE_INT); tp_cli_channel_type_stream_tube_call_accept(chandler->channel, -1, TP_SOCKET_ADDRESS_TYPE_IPV4, - TP_SOCKET_ACCESS_CONTROL_LOCALHOST, &noop, remmina_tp_channel_handler_accept, chandler, NULL, - NULL); + TP_SOCKET_ACCESS_CONTROL_LOCALHOST, &noop, remmina_tp_channel_handler_accept, chandler, NULL, + NULL); g_value_unset(&noop); tp_svc_client_handler_return_from_handle_channels(chandler->context); - } - else - { + }else { error = g_error_new(TP_ERRORS, TP_ERROR_NOT_AVAILABLE, "Channel rejected by user."); dbus_g_method_return_error(chandler->context, error); g_error_free(error); @@ -224,10 +207,10 @@ static void remmina_tp_channel_handler_on_response(GtkDialog *dialog, gint respo } static void remmina_tp_channel_handler_get_contacts(TpConnection *connection, guint n_contacts, TpContact * const *contacts, - guint n_failed, const TpHandle *failed, const GError *error, gpointer user_data, GObject *weak_object) + guint n_failed, const TpHandle *failed, const GError *error, gpointer user_data, GObject *weak_object) { TRACE_CALL("__func__"); - RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler *) user_data; + RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler*)user_data; TpContact *contact; gchar *token; gchar *cm; @@ -237,14 +220,12 @@ static void remmina_tp_channel_handler_get_contacts(TpConnection *connection, gu GtkWidget *image; GtkWidget *dialog; - if (error != NULL) - { + if (error != NULL) { g_print("remmina_tp_channel_handler_get_contacts: %s", error->message); remmina_tp_channel_handler_free(chandler); return; } - if (n_contacts <= 0) - { + if (n_contacts <= 0) { g_print("remmina_tp_channel_handler_get_contacts: no contacts\n"); remmina_tp_channel_handler_free(chandler); return; @@ -253,20 +234,18 @@ static void remmina_tp_channel_handler_get_contacts(TpConnection *connection, gu chandler->alias = g_strdup(tp_contact_get_alias(contact)); dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, - _("%s wants to share his/her desktop.\nDo you accept the invitation?"), chandler->alias); + _("%s wants to share his/her desktop.\nDo you accept the invitation?"), chandler->alias); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(remmina_tp_channel_handler_on_response), chandler); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL); gtk_window_set_title(GTK_WINDOW(dialog), _("Desktop sharing invitation")); remmina_plugin_telepathy_service->ui_register(dialog); gtk_widget_show(dialog); - token = (gchar *) tp_contact_get_avatar_token(contact); - if (token == NULL) - { + token = (gchar*)tp_contact_get_avatar_token(contact); + if (token == NULL) { return; } - if (!tp_connection_parse_object_path(chandler->connection, &protocol, &cm)) - { + if (!tp_connection_parse_object_path(chandler->connection, &protocol, &cm)) { g_print("tp_connection_parse_object_path: failed\n"); return; } @@ -275,11 +254,9 @@ static void remmina_tp_channel_handler_get_contacts(TpConnection *connection, gu g_free(cm); g_free(protocol); g_free(token); - if (g_file_test(filename, G_FILE_TEST_EXISTS)) - { + if (g_file_test(filename, G_FILE_TEST_EXISTS)) { pixbuf = gdk_pixbuf_new_from_file(filename, NULL); - if (pixbuf) - { + if (pixbuf) { image = gtk_image_new_from_pixbuf(pixbuf); gtk_widget_show(image); g_object_unref(pixbuf); @@ -292,22 +269,20 @@ static void remmina_tp_channel_handler_get_contacts(TpConnection *connection, gu static void remmina_tp_channel_handler_channel_ready(TpChannel *channel, const GError *channel_error, gpointer user_data) { TRACE_CALL("__func__"); - RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler *) user_data; + RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler*)user_data; TpHandle handle; GError *error = NULL; TpContactFeature features[] = { TP_CONTACT_FEATURE_ALIAS, TP_CONTACT_FEATURE_AVATAR_TOKEN }; - if (channel_error != NULL) - { + if (channel_error != NULL) { g_print("remmina_tp_channel_handler_channel_ready: %s\n", channel_error->message); remmina_tp_channel_handler_free(chandler); return; } if (tp_cli_channel_connect_to_closed(channel, remmina_tp_channel_handler_channel_closed, chandler, NULL, NULL, &error) - == NULL) - { + == NULL) { g_print("tp_cli_channel_connect_to_closed: %s\n", channel_error->message); remmina_tp_channel_handler_free(chandler); return; @@ -316,27 +291,25 @@ static void remmina_tp_channel_handler_channel_ready(TpChannel *channel, const G handle = tp_channel_get_handle(channel, NULL); tp_connection_get_contacts_by_handle(chandler->connection, 1, &handle, G_N_ELEMENTS(features), features, - remmina_tp_channel_handler_get_contacts, chandler, NULL, NULL); + remmina_tp_channel_handler_get_contacts, chandler, NULL, NULL); } static void remmina_tp_channel_handler_connection_ready(TpConnection *connection, const GError *connection_error, - gpointer user_data) + gpointer user_data) { TRACE_CALL("__func__"); - RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler *) user_data; + RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler*)user_data; GError *error = NULL; - if (connection_error != NULL) - { + if (connection_error != NULL) { g_print("remmina_tp_channel_handler_connection_ready: %s\n", connection_error->message); remmina_tp_channel_handler_free(chandler); return; } chandler->channel = tp_channel_new_from_properties(connection, chandler->channel_path, chandler->channel_properties, - &error); - if (chandler->channel == NULL) - { + &error); + if (chandler->channel == NULL) { g_print("tp_channel_new_from_properties: %s\n", error->message); remmina_tp_channel_handler_free(chandler); return; @@ -347,19 +320,17 @@ static void remmina_tp_channel_handler_connection_ready(TpConnection *connection static void remmina_tp_channel_handler_account_ready(GObject *account, GAsyncResult *res, gpointer user_data) { TRACE_CALL("__func__"); - RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler *) user_data; + RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler*)user_data; GError *error = NULL; - if (!tp_account_prepare_finish(TP_ACCOUNT(account), res, &error)) - { + if (!tp_account_prepare_finish(TP_ACCOUNT(account), res, &error)) { g_print("tp_account_prepare_finish: %s\n", error->message); remmina_tp_channel_handler_free(chandler); return; } chandler->connection = tp_connection_new(chandler->bus, NULL, chandler->connection_path, &error); - if (chandler->connection == NULL) - { + if (chandler->connection == NULL) { g_print("tp_connection_new: %s\n", error->message); remmina_tp_channel_handler_free(chandler); return; @@ -368,7 +339,7 @@ static void remmina_tp_channel_handler_account_ready(GObject *account, GAsyncRes } void remmina_tp_channel_handler_new(const gchar *account_path, const gchar *connection_path, const gchar *channel_path, - GHashTable *channel_properties, DBusGMethodInvocation *context) + GHashTable *channel_properties, DBusGMethodInvocation *context) { TRACE_CALL("__func__"); TpDBusDaemon *bus; @@ -377,14 +348,12 @@ void remmina_tp_channel_handler_new(const gchar *account_path, const gchar *conn RemminaTpChannelHandler *chandler; bus = tp_dbus_daemon_dup(&error); - if (bus == NULL) - { + if (bus == NULL) { g_print("tp_dbus_daemon_dup: %s", error->message); return; } account = tp_account_new(bus, account_path, &error); - if (account == NULL) - { + if (account == NULL) { g_object_unref(bus); g_print("tp_account_new: %s", error->message); return; @@ -396,8 +365,8 @@ void remmina_tp_channel_handler_new(const gchar *account_path, const gchar *conn chandler->connection_path = g_strdup(connection_path); chandler->channel_path = g_strdup(channel_path); chandler->channel_properties = tp_asv_new(NULL, NULL); - tp_g_hash_table_update(chandler->channel_properties, channel_properties, (GBoxedCopyFunc) g_strdup, - (GBoxedCopyFunc) tp_g_value_slice_dup); + tp_g_hash_table_update(chandler->channel_properties, channel_properties, (GBoxedCopyFunc)g_strdup, + (GBoxedCopyFunc)tp_g_value_slice_dup); chandler->context = context; tp_account_prepare_async(account, NULL, remmina_tp_channel_handler_account_ready, chandler); diff --git a/remmina-plugins/telepathy/telepathy_channel_handler.h b/remmina-plugins/telepathy/telepathy_channel_handler.h index 6a9f0ce9b..9699cea5c 100644 --- a/remmina-plugins/telepathy/telepathy_channel_handler.h +++ b/remmina-plugins/telepathy/telepathy_channel_handler.h @@ -39,7 +39,7 @@ G_BEGIN_DECLS void remmina_tp_channel_handler_new(const gchar *account_path, const gchar *connection_path, const gchar *channel_path, - GHashTable *channel_properties, DBusGMethodInvocation *context); + GHashTable *channel_properties, DBusGMethodInvocation *context); G_END_DECLS diff --git a/remmina-plugins/telepathy/telepathy_handler.c b/remmina-plugins/telepathy/telepathy_handler.c index f5d8e0074..16644e8a5 100644 --- a/remmina-plugins/telepathy/telepathy_handler.c +++ b/remmina-plugins/telepathy/telepathy_handler.c @@ -48,82 +48,80 @@ extern RemminaPluginService *remmina_plugin_telepathy_service; static void remmina_tp_handler_iface_init(gpointer g_iface, gpointer iface_data); -G_DEFINE_TYPE_WITH_CODE (RemminaTpHandler, remmina_tp_handler, G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CLIENT, NULL); - G_IMPLEMENT_INTERFACE( TP_TYPE_SVC_CLIENT_HANDLER, remmina_tp_handler_iface_init); - ); - - static void remmina_tp_handler_class_init(RemminaTpHandlerClass *klass) - { - TRACE_CALL("__func__"); - } - - static void remmina_tp_handler_init(RemminaTpHandler *handler) - { - TRACE_CALL("__func__"); - } - - static void remmina_tp_handler_handle_channels(TpSvcClientHandler *handler, const char *account_path, - const char *connection_path, const GPtrArray *channels, const GPtrArray *requests_satisfied, - guint64 user_action_time, GHashTable *handler_info, DBusGMethodInvocation *context) - { - TRACE_CALL("__func__"); - gint i; - GValueArray *array; - - for (i = 0; i < channels->len; i++) - { - array = g_ptr_array_index(channels, i); - remmina_tp_channel_handler_new(account_path, connection_path, - (const gchar *) g_value_get_boxed(g_value_array_get_nth(array, 0)), - (GHashTable *) g_value_get_boxed(g_value_array_get_nth(array, 1)), context); - } - } - - static void remmina_tp_handler_iface_init(gpointer g_iface, gpointer iface_data) - { - TRACE_CALL("__func__"); - TpSvcClientHandlerClass *klass = (TpSvcClientHandlerClass *) g_iface; - -#define IMPLEMENT(x) tp_svc_client_handler_implement_##x (klass, remmina_tp_handler_##x) - IMPLEMENT(handle_channels); +G_DEFINE_TYPE_WITH_CODE(RemminaTpHandler, remmina_tp_handler, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE(TP_TYPE_SVC_CLIENT, NULL); + G_IMPLEMENT_INTERFACE( TP_TYPE_SVC_CLIENT_HANDLER, remmina_tp_handler_iface_init); + ); + +static void remmina_tp_handler_class_init(RemminaTpHandlerClass *klass) +{ + TRACE_CALL("__func__"); +} + +static void remmina_tp_handler_init(RemminaTpHandler *handler) +{ + TRACE_CALL("__func__"); +} + +static void remmina_tp_handler_handle_channels(TpSvcClientHandler *handler, const char *account_path, + const char *connection_path, const GPtrArray *channels, const GPtrArray *requests_satisfied, + guint64 user_action_time, GHashTable *handler_info, DBusGMethodInvocation *context) +{ + TRACE_CALL("__func__"); + gint i; + GValueArray *array; + + for (i = 0; i < channels->len; i++) { + array = g_ptr_array_index(channels, i); + remmina_tp_channel_handler_new(account_path, connection_path, + (const gchar*)g_value_get_boxed(g_value_array_get_nth(array, 0)), + (GHashTable*)g_value_get_boxed(g_value_array_get_nth(array, 1)), context); + } +} + +static void remmina_tp_handler_iface_init(gpointer g_iface, gpointer iface_data) +{ + TRACE_CALL("__func__"); + TpSvcClientHandlerClass *klass = (TpSvcClientHandlerClass*)g_iface; + +#define IMPLEMENT(x) tp_svc_client_handler_implement_ ## x(klass, remmina_tp_handler_ ## x) + IMPLEMENT(handle_channels); #undef IMPLEMENT - } - - static gboolean remmina_tp_handler_register(RemminaTpHandler *handler) - { - TRACE_CALL("__func__"); - TpDBusDaemon *bus; - GError *error = NULL; - - bus = tp_dbus_daemon_dup(&error); - if (bus == NULL) - { - g_print("tp_dbus_daemon_dup: %s", error->message); - return FALSE; - } - if (!tp_dbus_daemon_request_name (bus, REMMINA_TP_BUS_NAME, FALSE, &error)) - { - g_object_unref(bus); - g_print("tp_dbus_daemon_request_name: %s", error->message); - return FALSE; - } dbus_g_connection_register_G_OBJECT( - tp_proxy_get_dbus_connection (TP_PROXY (bus)), - REMMINA_TP_OBJECT_PATH, G_OBJECT(handler)); - g_object_unref(bus); - g_print("remmina_tp_handler_register: bus_name " REMMINA_TP_BUS_NAME - " object_path " REMMINA_TP_OBJECT_PATH "\n"); - return TRUE; - } - - RemminaTpHandler* - remmina_tp_handler_new(void) - { - TRACE_CALL("__func__"); - RemminaTpHandler *handler; - - handler = REMMINA_TP_HANDLER(g_object_new(REMMINA_TYPE_TP_HANDLER, NULL)); - remmina_tp_handler_register(handler); - return handler; - } +} + +static gboolean remmina_tp_handler_register(RemminaTpHandler *handler) +{ + TRACE_CALL("__func__"); + TpDBusDaemon *bus; + GError *error = NULL; + + bus = tp_dbus_daemon_dup(&error); + if (bus == NULL) { + g_print("tp_dbus_daemon_dup: %s", error->message); + return FALSE; + } + if (!tp_dbus_daemon_request_name(bus, REMMINA_TP_BUS_NAME, FALSE, &error)) { + g_object_unref(bus); + g_print("tp_dbus_daemon_request_name: %s", error->message); + return FALSE; + } + dbus_g_connection_register_G_OBJECT( + tp_proxy_get_dbus_connection(TP_PROXY(bus)), + REMMINA_TP_OBJECT_PATH, G_OBJECT(handler)); + g_object_unref(bus); + g_print("remmina_tp_handler_register: bus_name " REMMINA_TP_BUS_NAME + " object_path " REMMINA_TP_OBJECT_PATH "\n"); + return TRUE; +} + +RemminaTpHandler* +remmina_tp_handler_new(void) +{ + TRACE_CALL("__func__"); + RemminaTpHandler *handler; + + handler = REMMINA_TP_HANDLER(g_object_new(REMMINA_TYPE_TP_HANDLER, NULL)); + remmina_tp_handler_register(handler); + return handler; +} diff --git a/remmina-plugins/telepathy/telepathy_handler.h b/remmina-plugins/telepathy/telepathy_handler.h index 062a0b795..9116345f3 100644 --- a/remmina-plugins/telepathy/telepathy_handler.h +++ b/remmina-plugins/telepathy/telepathy_handler.h @@ -37,20 +37,18 @@ G_BEGIN_DECLS -#define REMMINA_TYPE_TP_HANDLER (remmina_tp_handler_get_type ()) -#define REMMINA_TP_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), REMMINA_TYPE_TP_HANDLER, RemminaTpHandler)) -#define REMMINA_TP_HANDLER_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), REMMINA_TYPE_TP_HANDLER, RemminaTpHandlerClass)) -#define REMMINA_IS_TP_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), REMMINA_TYPE_TP_HANDLER)) -#define REMMINA_IS_TP_HANDLER_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), REMMINA_TYPE_TP_HANDLER)) -#define REMMINA_TP_HANDLER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), REMMINA_TYPE_TP_HANDLER, RemminaTpHandlerClass)) - -typedef struct _RemminaTpHandler -{ +#define REMMINA_TYPE_TP_HANDLER (remmina_tp_handler_get_type()) +#define REMMINA_TP_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), REMMINA_TYPE_TP_HANDLER, RemminaTpHandler)) +#define REMMINA_TP_HANDLER_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST((obj), REMMINA_TYPE_TP_HANDLER, RemminaTpHandlerClass)) +#define REMMINA_IS_TP_HANDLER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), REMMINA_TYPE_TP_HANDLER)) +#define REMMINA_IS_TP_HANDLER_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((obj), REMMINA_TYPE_TP_HANDLER)) +#define REMMINA_TP_HANDLER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), REMMINA_TYPE_TP_HANDLER, RemminaTpHandlerClass)) + +typedef struct _RemminaTpHandler { GObject parent; } RemminaTpHandler; -typedef struct _RemminaTpHandlerClass -{ +typedef struct _RemminaTpHandlerClass { GObjectClass parent_class; } RemminaTpHandlerClass; diff --git a/remmina-plugins/telepathy/telepathy_plugin.c b/remmina-plugins/telepathy/telepathy_plugin.c index be7c4152a..5bccf5beb 100644 --- a/remmina-plugins/telepathy/telepathy_plugin.c +++ b/remmina-plugins/telepathy/telepathy_plugin.c @@ -44,8 +44,7 @@ static RemminaTpHandler *remmina_tp_handler = NULL; void remmina_plugin_telepathy_entry(void) { TRACE_CALL("__func__"); - if (remmina_tp_handler == NULL) - { + if (remmina_tp_handler == NULL) { remmina_tp_handler = remmina_tp_handler_new(); } } @@ -53,12 +52,12 @@ void remmina_plugin_telepathy_entry(void) /* Entry plugin definition and features */ static RemminaEntryPlugin remmina_plugin_telepathy = { - REMMINA_PLUGIN_TYPE_ENTRY, // Type - "telepathy", // Name - N_("Telepathy - Desktop Sharing"), // Description - GETTEXT_PACKAGE, // Translation domain - VERSION, // Version number - remmina_plugin_telepathy_entry // Plugin entry function + REMMINA_PLUGIN_TYPE_ENTRY, // Type + "telepathy", // Name + N_("Telepathy - Desktop Sharing"), // Description + GETTEXT_PACKAGE, // Translation domain + VERSION, // Version number + remmina_plugin_telepathy_entry // Plugin entry function }; G_MODULE_EXPORT gboolean @@ -70,8 +69,7 @@ remmina_plugin_entry(RemminaPluginService *service) bindtextdomain(GETTEXT_PACKAGE, REMMINA_RUNTIME_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); - if (!service->register_plugin((RemminaPlugin *) &remmina_plugin_telepathy)) - { + if (!service->register_plugin((RemminaPlugin*)&remmina_plugin_telepathy)) { return FALSE; } return TRUE; diff --git a/remmina-plugins/tool_hello_world/plugin.c b/remmina-plugins/tool_hello_world/plugin.c index ac1727191..1d64551bc 100644 --- a/remmina-plugins/tool_hello_world/plugin.c +++ b/remmina-plugins/tool_hello_world/plugin.c @@ -58,7 +58,7 @@ static gboolean remmina_plugin_tool_open_connection(RemminaProtocolWidget *gp) GtkDialog *dialog; dialog = GTK_DIALOG(gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL | GTK_DIALOG_USE_HEADER_BAR, - GTK_MESSAGE_INFO, GTK_BUTTONS_OK, PLUGIN_DESCRIPTION)); + GTK_MESSAGE_INFO, GTK_BUTTONS_OK, PLUGIN_DESCRIPTION)); gtk_dialog_run(dialog); gtk_widget_destroy(GTK_WIDGET(dialog)); return FALSE; @@ -88,23 +88,23 @@ static const RemminaProtocolSetting remmina_plugin_tool_basic_settings[] = /* Protocol plugin definition and features */ static RemminaProtocolPlugin remmina_plugin = { - REMMINA_PLUGIN_TYPE_PROTOCOL, // Type - PLUGIN_NAME, // Name - PLUGIN_DESCRIPTION, // Description - GETTEXT_PACKAGE, // Translation domain - PLUGIN_VERSION, // Version number - PLUGIN_APPICON, // Icon for normal connection - PLUGIN_APPICON, // Icon for SSH connection - remmina_plugin_tool_basic_settings, // Array for basic settings - NULL, // Array for advanced settings - REMMINA_PROTOCOL_SSH_SETTING_NONE, // SSH settings type - NULL, // Array for available features - remmina_plugin_tool_init, // Plugin initialization - remmina_plugin_tool_open_connection, // Plugin open connection - remmina_plugin_tool_close_connection, // Plugin close connection - NULL, // Query for available features - NULL, // Call a feature - NULL, // Send a keystroke */ + REMMINA_PLUGIN_TYPE_PROTOCOL, // Type + PLUGIN_NAME, // Name + PLUGIN_DESCRIPTION, // Description + GETTEXT_PACKAGE, // Translation domain + PLUGIN_VERSION, // Version number + PLUGIN_APPICON, // Icon for normal connection + PLUGIN_APPICON, // Icon for SSH connection + remmina_plugin_tool_basic_settings, // Array for basic settings + NULL, // Array for advanced settings + REMMINA_PROTOCOL_SSH_SETTING_NONE, // SSH settings type + NULL, // Array for available features + remmina_plugin_tool_init, // Plugin initialization + remmina_plugin_tool_open_connection, // Plugin open connection + remmina_plugin_tool_close_connection, // Plugin close connection + NULL, // Query for available features + NULL, // Call a feature + NULL, // Send a keystroke */ }; G_MODULE_EXPORT gboolean remmina_plugin_entry(RemminaPluginService *service) @@ -115,8 +115,7 @@ G_MODULE_EXPORT gboolean remmina_plugin_entry(RemminaPluginService *service) bindtextdomain(GETTEXT_PACKAGE, REMMINA_RUNTIME_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); - if (!service->register_plugin((RemminaPlugin *) &remmina_plugin)) - { + if (!service->register_plugin((RemminaPlugin*)&remmina_plugin)) { return FALSE; } diff --git a/remmina-plugins/vnc/vnc_plugin.c b/remmina-plugins/vnc/vnc_plugin.c index 1bd1abee9..d12ef8e03 100644 --- a/remmina-plugins/vnc/vnc_plugin.c +++ b/remmina-plugins/vnc/vnc_plugin.c @@ -45,10 +45,9 @@ #define REMMINA_PLUGIN_VNC_FEATURE_UNFOCUS 7 #define REMMINA_PLUGIN_VNC_FEATURE_TOOL_SENDCTRLALTDEL 8 -#define GET_PLUGIN_DATA(gp) (RemminaPluginVncData*) g_object_get_data(G_OBJECT(gp), "plugin-data") +#define GET_PLUGIN_DATA(gp) (RemminaPluginVncData*)g_object_get_data(G_OBJECT(gp), "plugin-data") -typedef struct _RemminaPluginVncData -{ +typedef struct _RemminaPluginVncData { /* Whether the user requests to connect/disconnect */ gboolean connected; /* Whether the vnc process is running */ @@ -93,14 +92,13 @@ static RemminaPluginService *remmina_plugin_service = NULL; static int dot_cursor_x_hot = 2; static int dot_cursor_y_hot = 2; static const gchar * dot_cursor_xpm[] = -{ "5 5 3 1", " c None", ". c #000000", "+ c #FFFFFF", " ... ", ".+++.", ".+ +.", ".+++.", " ... " }; +{ "5 5 3 1", " c None", ". c #000000", "+ c #FFFFFF", " ... ", ".+++.", ".+ +.", ".+++.", " ... " }; -#define LOCK_BUFFER(t) if(t){CANCEL_DEFER}pthread_mutex_lock(&gpdata->buffer_mutex); -#define UNLOCK_BUFFER(t) pthread_mutex_unlock(&gpdata->buffer_mutex);if(t){CANCEL_ASYNC} +#define LOCK_BUFFER(t) if (t) { CANCEL_DEFER } pthread_mutex_lock(&gpdata->buffer_mutex); +#define UNLOCK_BUFFER(t) pthread_mutex_unlock(&gpdata->buffer_mutex); if (t) { CANCEL_ASYNC } -enum -{ +enum { REMMINA_PLUGIN_VNC_EVENT_KEY, REMMINA_PLUGIN_VNC_EVENT_POINTER, REMMINA_PLUGIN_VNC_EVENT_CUTTEXT, @@ -109,24 +107,19 @@ enum REMMINA_PLUGIN_VNC_EVENT_CHAT_CLOSE }; -typedef struct _RemminaPluginVncEvent -{ +typedef struct _RemminaPluginVncEvent { gint event_type; - union - { - struct - { + union { + struct { guint keyval; gboolean pressed; } key; - struct - { + struct { gint x; gint y; gint button_mask; } pointer; - struct - { + struct { gchar *text; } text; } event_data; @@ -158,10 +151,10 @@ static gboolean onMainThread_cb(struct onMainThread_cb_data *d) { TRACE_CALL("__func__"); if ( !d->cancelled ) { - switch( d->func ) { - case FUNC_UPDATE_SCALE: - remmina_plugin_vnc_update_scale(d->gp, d->scale); - break; + switch ( d->func ) { + case FUNC_UPDATE_SCALE: + remmina_plugin_vnc_update_scale(d->gp, d->scale); + break; } pthread_mutex_unlock( &d->mu ); } else { @@ -187,7 +180,7 @@ static void onMainThread_schedule_callback_and_wait( struct onMainThread_cb_data pthread_cleanup_push( onMainThread_cleanup_handler, d ); pthread_mutex_init( &d->mu, NULL ); pthread_mutex_lock( &d->mu ); - gdk_threads_add_idle( (GSourceFunc)onMainThread_cb, (gpointer) d ); + gdk_threads_add_idle( (GSourceFunc)onMainThread_cb, (gpointer)d ); pthread_mutex_lock( &d->mu ); @@ -204,31 +197,29 @@ static void remmina_plugin_vnc_event_push(RemminaProtocolWidget *gp, gint event_ event = g_new(RemminaPluginVncEvent, 1); event->event_type = event_type; - switch (event_type) - { - case REMMINA_PLUGIN_VNC_EVENT_KEY: - event->event_data.key.keyval = GPOINTER_TO_UINT(p1); - event->event_data.key.pressed = GPOINTER_TO_INT(p2); - break; - case REMMINA_PLUGIN_VNC_EVENT_POINTER: - event->event_data.pointer.x = GPOINTER_TO_INT(p1); - event->event_data.pointer.y = GPOINTER_TO_INT(p2); - event->event_data.pointer.button_mask = GPOINTER_TO_INT(p3); - break; - case REMMINA_PLUGIN_VNC_EVENT_CUTTEXT: - case REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND: - event->event_data.text.text = g_strdup((char*) p1); - break; - default: - break; + switch (event_type) { + case REMMINA_PLUGIN_VNC_EVENT_KEY: + event->event_data.key.keyval = GPOINTER_TO_UINT(p1); + event->event_data.key.pressed = GPOINTER_TO_INT(p2); + break; + case REMMINA_PLUGIN_VNC_EVENT_POINTER: + event->event_data.pointer.x = GPOINTER_TO_INT(p1); + event->event_data.pointer.y = GPOINTER_TO_INT(p2); + event->event_data.pointer.button_mask = GPOINTER_TO_INT(p3); + break; + case REMMINA_PLUGIN_VNC_EVENT_CUTTEXT: + case REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND: + event->event_data.text.text = g_strdup((char*)p1); + break; + default: + break; } pthread_mutex_lock(&gpdata->vnc_event_queue_mutex); g_queue_push_tail(gpdata->vnc_event_queue, event); pthread_mutex_unlock(&gpdata->vnc_event_queue_mutex); - if (write(gpdata->vnc_event_pipe[1], "\0", 1)) - { + if (write(gpdata->vnc_event_pipe[1], "\0", 1)) { /* Ignore */ } } @@ -236,14 +227,13 @@ static void remmina_plugin_vnc_event_push(RemminaProtocolWidget *gp, gint event_ static void remmina_plugin_vnc_event_free(RemminaPluginVncEvent *event) { TRACE_CALL("__func__"); - switch (event->event_type) - { - case REMMINA_PLUGIN_VNC_EVENT_CUTTEXT: - case REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND: - g_free(event->event_data.text.text); - break; - default: - break; + switch (event->event_type) { + case REMMINA_PLUGIN_VNC_EVENT_CUTTEXT: + case REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND: + g_free(event->event_data.text.text); + break; + default: + break; } g_free(event); } @@ -256,8 +246,7 @@ static void remmina_plugin_vnc_event_free_all(RemminaProtocolWidget *gp) /* This is called from main thread after plugin thread has been closed, so no queue locking is nessesary here */ - while ((event = g_queue_pop_head(gpdata->vnc_event_queue)) != NULL) - { + while ((event = g_queue_pop_head(gpdata->vnc_event_queue)) != NULL) { remmina_plugin_vnc_event_free(event); } } @@ -316,15 +305,12 @@ static void remmina_plugin_vnc_update_scale(RemminaProtocolWidget *gp, gboolean width = remmina_plugin_service->protocol_plugin_get_width(gp); height = remmina_plugin_service->protocol_plugin_get_height(gp); - if (scale) - { + if (scale) { /* In scaled mode, drawing_area will get its dimensions from its parent */ gtk_widget_set_size_request(GTK_WIDGET(gpdata->drawing_area), -1, -1 ); - } - else - { + }else { /* In non scaled mode, the plugins forces dimensions of drawing area */ - gtk_widget_set_size_request (GTK_WIDGET (gpdata->drawing_area), width, height); + gtk_widget_set_size_request(GTK_WIDGET(gpdata->drawing_area), width, height); } remmina_plugin_service->protocol_plugin_emit_signal(gp, "update-align"); @@ -339,17 +325,14 @@ gboolean remmina_plugin_vnc_setcursor(RemminaProtocolWidget *gp) LOCK_BUFFER(FALSE); gpdata->queuecursor_handler = 0; - if (gpdata->queuecursor_surface) - { + if (gpdata->queuecursor_surface) { cur = gdk_cursor_new_from_surface(gdk_display_get_default(), gpdata->queuecursor_surface, gpdata->queuecursor_x, - gpdata->queuecursor_y); + gpdata->queuecursor_y); gdk_window_set_cursor(gtk_widget_get_window(gpdata->drawing_area), cur); g_object_unref(cur); cairo_surface_destroy(gpdata->queuecursor_surface); gpdata->queuecursor_surface = NULL; - } - else - { + }else { gdk_window_set_cursor(gtk_widget_get_window(gpdata->drawing_area), NULL); } UNLOCK_BUFFER(FALSE); @@ -362,21 +345,18 @@ static void remmina_plugin_vnc_queuecursor(RemminaProtocolWidget *gp, cairo_surf TRACE_CALL("__func__"); RemminaPluginVncData *gpdata = GET_PLUGIN_DATA(gp); - if (gpdata->queuecursor_surface) - { + if (gpdata->queuecursor_surface) { cairo_surface_destroy(gpdata->queuecursor_surface); } gpdata->queuecursor_surface = surface; gpdata->queuecursor_x = x; gpdata->queuecursor_y = y; - if (!gpdata->queuecursor_handler) - { - gpdata->queuecursor_handler = IDLE_ADD((GSourceFunc) remmina_plugin_vnc_setcursor, gp); + if (!gpdata->queuecursor_handler) { + gpdata->queuecursor_handler = IDLE_ADD((GSourceFunc)remmina_plugin_vnc_setcursor, gp); } } -typedef struct _RemminaKeyVal -{ +typedef struct _RemminaKeyVal { guint keyval; guint16 keycode; } RemminaKeyVal; @@ -385,9 +365,10 @@ typedef struct _RemminaKeyVal #include <rfb/rfbclient.h> static const uint32_t remmina_plugin_vnc_no_encrypt_auth_types[] = -{ rfbNoAuth, rfbVncAuth, rfbMSLogon, 0}; +{ rfbNoAuth, rfbVncAuth, rfbMSLogon, 0 }; -static RemminaPluginVncEvent *remmina_plugin_vnc_event_queue_pop_head(RemminaPluginVncData *gpdata) { +static RemminaPluginVncEvent *remmina_plugin_vnc_event_queue_pop_head(RemminaPluginVncData *gpdata) +{ RemminaPluginVncEvent *event; CANCEL_DEFER; @@ -409,45 +390,40 @@ static void remmina_plugin_vnc_process_vnc_event(RemminaProtocolWidget *gp) rfbClient *cl; gchar buf[100]; - cl = (rfbClient*) gpdata->client; - while ((event = remmina_plugin_vnc_event_queue_pop_head(gpdata)) != NULL) - { - if (cl) - { - switch (event->event_type) - { - case REMMINA_PLUGIN_VNC_EVENT_KEY: - SendKeyEvent(cl, event->event_data.key.keyval, event->event_data.key.pressed); - 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); - break; - case REMMINA_PLUGIN_VNC_EVENT_CUTTEXT: - SendClientCutText(cl, event->event_data.text.text, strlen(event->event_data.text.text)); - break; - case REMMINA_PLUGIN_VNC_EVENT_CHAT_OPEN: - TextChatOpen(cl); - break; - case REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND: - TextChatSend(cl, event->event_data.text.text); - break; - case REMMINA_PLUGIN_VNC_EVENT_CHAT_CLOSE: - TextChatClose(cl); - TextChatFinish(cl); - break; + cl = (rfbClient*)gpdata->client; + while ((event = remmina_plugin_vnc_event_queue_pop_head(gpdata)) != NULL) { + if (cl) { + switch (event->event_type) { + case REMMINA_PLUGIN_VNC_EVENT_KEY: + SendKeyEvent(cl, event->event_data.key.keyval, event->event_data.key.pressed); + 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); + break; + case REMMINA_PLUGIN_VNC_EVENT_CUTTEXT: + SendClientCutText(cl, event->event_data.text.text, strlen(event->event_data.text.text)); + break; + case REMMINA_PLUGIN_VNC_EVENT_CHAT_OPEN: + TextChatOpen(cl); + break; + case REMMINA_PLUGIN_VNC_EVENT_CHAT_SEND: + TextChatSend(cl, event->event_data.text.text); + break; + case REMMINA_PLUGIN_VNC_EVENT_CHAT_CLOSE: + TextChatClose(cl); + TextChatFinish(cl); + break; } } remmina_plugin_vnc_event_free(event); } - if (read(gpdata->vnc_event_pipe[0], buf, sizeof(buf))) - { + if (read(gpdata->vnc_event_pipe[0], buf, sizeof(buf))) { /* Ignore */ } } -typedef struct _RemminaPluginVncCuttextParam -{ +typedef struct _RemminaPluginVncCuttextParam { RemminaProtocolWidget *gp; gchar *text; gint textlen; @@ -456,33 +432,32 @@ typedef struct _RemminaPluginVncCuttextParam static void remmina_plugin_vnc_update_quality(rfbClient *cl, gint quality) { TRACE_CALL("__func__"); - switch (quality) - { - case 9: - cl->appData.useBGR233 = 0; - cl->appData.encodingsString = "copyrect hextile raw"; - cl->appData.compressLevel = 0; - cl->appData.qualityLevel = 9; - break; - case 2: - cl->appData.useBGR233 = 0; - cl->appData.encodingsString = "tight zrle ultra copyrect hextile zlib corre rre raw"; - cl->appData.compressLevel = 3; - cl->appData.qualityLevel = 7; - break; - case 1: - cl->appData.useBGR233 = 0; - cl->appData.encodingsString = "tight zrle ultra copyrect hextile zlib corre rre raw"; - cl->appData.compressLevel = 5; - cl->appData.qualityLevel = 5; - break; - case 0: - default: - cl->appData.useBGR233 = 1; - cl->appData.encodingsString = "tight zrle ultra copyrect hextile zlib corre rre raw"; - cl->appData.compressLevel = 9; - cl->appData.qualityLevel = 0; - break; + switch (quality) { + case 9: + cl->appData.useBGR233 = 0; + cl->appData.encodingsString = "copyrect hextile raw"; + cl->appData.compressLevel = 0; + cl->appData.qualityLevel = 9; + break; + case 2: + cl->appData.useBGR233 = 0; + cl->appData.encodingsString = "tight zrle ultra copyrect hextile zlib corre rre raw"; + cl->appData.compressLevel = 3; + cl->appData.qualityLevel = 7; + break; + case 1: + cl->appData.useBGR233 = 0; + cl->appData.encodingsString = "tight zrle ultra copyrect hextile zlib corre rre raw"; + cl->appData.compressLevel = 5; + cl->appData.qualityLevel = 5; + break; + case 0: + default: + cl->appData.useBGR233 = 1; + cl->appData.encodingsString = "tight zrle ultra copyrect hextile zlib corre rre raw"; + cl->appData.compressLevel = 9; + cl->appData.qualityLevel = 0; + break; } } @@ -493,50 +468,49 @@ static void remmina_plugin_vnc_update_colordepth(rfbClient *cl, gint colordepth) cl->format.bigEndian = 0; cl->appData.requestedDepth = colordepth; - switch (colordepth) - { - case 8: - cl->format.depth = 8; - cl->format.bitsPerPixel = 8; - cl->format.blueMax = 3; - cl->format.blueShift = 6; - cl->format.greenMax = 7; - cl->format.greenShift = 3; - cl->format.redMax = 7; - cl->format.redShift = 0; - break; - case 16: - cl->format.depth = 16; - cl->format.bitsPerPixel = 16; - cl->format.blueMax = 0x1f; - cl->format.blueShift = 0; - cl->format.greenMax = 0x3f; - cl->format.greenShift = 5; - cl->format.redMax = 0x1f; - cl->format.redShift = 11; - break; - case 15: - cl->format.depth = 15; - cl->format.bitsPerPixel = 16; - cl->format.blueMax = 0x1f; - cl->format.blueShift = 0; - cl->format.greenMax = 0x1f; - cl->format.greenShift = 5; - cl->format.redMax = 0x1f; - cl->format.redShift = 10; - break; - case 24: - case 32: - default: - cl->format.depth = 24; - cl->format.bitsPerPixel = 32; - cl->format.blueShift = 0; - cl->format.redShift = 16; - cl->format.greenShift = 8; - cl->format.blueMax = 0xff; - cl->format.redMax = 0xff; - cl->format.greenMax = 0xff; - break; + switch (colordepth) { + case 8: + cl->format.depth = 8; + cl->format.bitsPerPixel = 8; + cl->format.blueMax = 3; + cl->format.blueShift = 6; + cl->format.greenMax = 7; + cl->format.greenShift = 3; + cl->format.redMax = 7; + cl->format.redShift = 0; + break; + case 16: + cl->format.depth = 16; + cl->format.bitsPerPixel = 16; + cl->format.blueMax = 0x1f; + cl->format.blueShift = 0; + cl->format.greenMax = 0x3f; + cl->format.greenShift = 5; + cl->format.redMax = 0x1f; + cl->format.redShift = 11; + break; + case 15: + cl->format.depth = 15; + cl->format.bitsPerPixel = 16; + cl->format.blueMax = 0x1f; + cl->format.blueShift = 0; + cl->format.greenMax = 0x1f; + cl->format.greenShift = 5; + cl->format.redMax = 0x1f; + cl->format.redShift = 10; + break; + case 24: + case 32: + default: + cl->format.depth = 24; + cl->format.bitsPerPixel = 32; + cl->format.blueShift = 0; + cl->format.redShift = 16; + cl->format.greenShift = 8; + cl->format.blueMax = 0xff; + cl->format.redMax = 0xff; + cl->format.greenMax = 0xff; + break; } } @@ -568,7 +542,7 @@ static rfbBool remmina_plugin_vnc_rfb_allocfb(rfbClient *cl) if (gpdata->vnc_buffer) g_free(gpdata->vnc_buffer); - gpdata->vnc_buffer = (guchar*) g_malloc(size); + gpdata->vnc_buffer = (guchar*)g_malloc(size); cl->frameBuffer = gpdata->vnc_buffer; UNLOCK_BUFFER(TRUE); @@ -593,8 +567,7 @@ static gint remmina_plugin_vnc_bits(gint n) { TRACE_CALL("__func__"); gint b = 0; - while (n) - { + while (n) { b++; n >>= 1; } @@ -607,8 +580,7 @@ static gboolean remmina_plugin_vnc_queue_draw_area_real(RemminaProtocolWidget *g RemminaPluginVncData *gpdata = GET_PLUGIN_DATA(gp); gint x, y, w, h; - if (GTK_IS_WIDGET(gp) && gpdata->connected) - { + if (GTK_IS_WIDGET(gp) && gpdata->connected) { LOCK_BUFFER(FALSE); x = gpdata->queuedraw_x; y = gpdata->queuedraw_y; @@ -629,8 +601,7 @@ static void remmina_plugin_vnc_queue_draw_area(RemminaProtocolWidget *gp, gint x gint nx2, ny2, ox2, oy2; LOCK_BUFFER(TRUE); - if (gpdata->queuedraw_handler) - { + if (gpdata->queuedraw_handler) { nx2 = x + w; ny2 = y + h; ox2 = gpdata->queuedraw_x + gpdata->queuedraw_w; @@ -639,20 +610,18 @@ static void remmina_plugin_vnc_queue_draw_area(RemminaProtocolWidget *gp, gint x gpdata->queuedraw_y = MIN(gpdata->queuedraw_y, y); gpdata->queuedraw_w = MAX(ox2, nx2) - gpdata->queuedraw_x; gpdata->queuedraw_h = MAX(oy2, ny2) - gpdata->queuedraw_y; - } - else - { + }else { gpdata->queuedraw_x = x; gpdata->queuedraw_y = y; gpdata->queuedraw_w = w; gpdata->queuedraw_h = h; - gpdata->queuedraw_handler = IDLE_ADD((GSourceFunc) remmina_plugin_vnc_queue_draw_area_real, gp); + gpdata->queuedraw_handler = IDLE_ADD((GSourceFunc)remmina_plugin_vnc_queue_draw_area_real, gp); } UNLOCK_BUFFER(TRUE); } static void remmina_plugin_vnc_rfb_fill_buffer(rfbClient* cl, guchar *dest, gint dest_rowstride, guchar *src, - gint src_rowstride, guchar *mask, gint w, gint h) + gint src_rowstride, guchar *mask, gint w, gint h) { TRACE_CALL("__func__"); guchar *srcptr; @@ -664,89 +633,76 @@ 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 - { + union { + struct { guchar a, r, g, b; } colors; guint32 argb; } dst_pixel; bytesPerPixel = cl->format.bitsPerPixel / 8; - switch (cl->format.bitsPerPixel) - { - case 32: - /* The following codes fill in the Alpha channel swap red/green value */ - for (iy = 0; iy < h; iy++) - { - destptr = (guint32*)(dest + iy * dest_rowstride); - srcptr = src + iy * src_rowstride; - for (ix = 0; ix < w; ix++) - { - if(!mask || *mask++) - { - dst_pixel.colors.a = 0xff; - dst_pixel.colors.r = *(srcptr + 2); - dst_pixel.colors.g = *(srcptr + 1); - dst_pixel.colors.b = *srcptr; - *destptr++ = ntohl(dst_pixel.argb); - } - else - { - *destptr++ = 0; - } - srcptr += 4; + switch (cl->format.bitsPerPixel) { + case 32: + /* The following codes fill in the Alpha channel swap red/green value */ + for (iy = 0; iy < h; iy++) { + destptr = (guint32*)(dest + iy * dest_rowstride); + srcptr = src + iy * src_rowstride; + for (ix = 0; ix < w; ix++) { + if (!mask || *mask++) { + dst_pixel.colors.a = 0xff; + dst_pixel.colors.r = *(srcptr + 2); + dst_pixel.colors.g = *(srcptr + 1); + dst_pixel.colors.b = *srcptr; + *destptr++ = ntohl(dst_pixel.argb); + }else{ + *destptr++ = 0; } + srcptr += 4; } - break; - default: - rm = cl->format.redMax; - gm = cl->format.greenMax; - bm = cl->format.blueMax; - rr = remmina_plugin_vnc_bits(rm); - gr = remmina_plugin_vnc_bits(gm); - br = remmina_plugin_vnc_bits(bm); - rl = 8 - rr; - gl = 8 - gr; - bl = 8 - br; - rs = cl->format.redShift; - gs = cl->format.greenShift; - bs = cl->format.blueShift; - for (iy = 0; iy < h; iy++) - { - destptr = (guint32*)(dest + iy * dest_rowstride); - srcptr = src + iy * src_rowstride; - for (ix = 0; ix < w; ix++) - { - src_pixel = 0; - for (i = 0; i < bytesPerPixel; i++) - src_pixel += (*srcptr++) << (8 * i); - - if(!mask || *mask++) - { - dst_pixel.colors.a = 0xff; - c = (guchar)((src_pixel >> rs) & rm) << rl; - for (r = rr; r < 8; r *= 2) - c |= c >> r; - dst_pixel.colors.r = c; - c = (guchar)((src_pixel >> gs) & gm) << gl; - for (r = gr; r < 8; r *= 2) - c |= c >> r; - dst_pixel.colors.g = c; - c = (guchar)((src_pixel >> bs) & bm) << bl; - for (r = br; r < 8; r *= 2) - c |= c >> r; - dst_pixel.colors.b = c; - *destptr++ = ntohl(dst_pixel.argb); - } - else - { - *destptr++ = 0; - } + } + break; + default: + rm = cl->format.redMax; + gm = cl->format.greenMax; + bm = cl->format.blueMax; + rr = remmina_plugin_vnc_bits(rm); + gr = remmina_plugin_vnc_bits(gm); + br = remmina_plugin_vnc_bits(bm); + rl = 8 - rr; + gl = 8 - gr; + bl = 8 - br; + rs = cl->format.redShift; + gs = cl->format.greenShift; + bs = cl->format.blueShift; + for (iy = 0; iy < h; iy++) { + destptr = (guint32*)(dest + iy * dest_rowstride); + srcptr = src + iy * src_rowstride; + for (ix = 0; ix < w; ix++) { + src_pixel = 0; + for (i = 0; i < bytesPerPixel; i++) + src_pixel += (*srcptr++) << (8 * i); + + if (!mask || *mask++) { + dst_pixel.colors.a = 0xff; + c = (guchar)((src_pixel >> rs) & rm) << rl; + for (r = rr; r < 8; r *= 2) + c |= c >> r; + dst_pixel.colors.r = c; + c = (guchar)((src_pixel >> gs) & gm) << gl; + for (r = gr; r < 8; r *= 2) + c |= c >> r; + dst_pixel.colors.g = c; + c = (guchar)((src_pixel >> bs) & bm) << bl; + for (r = br; r < 8; r *= 2) + c |= c >> r; + dst_pixel.colors.b = c; + *destptr++ = ntohl(dst_pixel.argb); + }else{ + *destptr++ = 0; } } - break; + } + break; } } @@ -761,20 +717,18 @@ static void remmina_plugin_vnc_rfb_updatefb(rfbClient* cl, int x, int y, int w, LOCK_BUFFER(TRUE); - if (w >= 1 || h >= 1) - { + if (w >= 1 || h >= 1) { width = remmina_plugin_service->protocol_plugin_get_width(gp); bytesPerPixel = cl->format.bitsPerPixel / 8; rowstride = cairo_image_surface_get_stride(gpdata->rgb_buffer); cairo_surface_flush(gpdata->rgb_buffer); remmina_plugin_vnc_rfb_fill_buffer(cl, cairo_image_surface_get_data(gpdata->rgb_buffer) + y * rowstride + x * 4, - rowstride, gpdata->vnc_buffer + ((y * width + x) * bytesPerPixel), width * bytesPerPixel, NULL, - w, h); + rowstride, gpdata->vnc_buffer + ((y * width + x) * bytesPerPixel), width * bytesPerPixel, NULL, + w, h); cairo_surface_mark_dirty(gpdata->rgb_buffer); } - if ((remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp) != REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE)) - { + if ((remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp) != REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE)) { remmina_plugin_vnc_scale_area(gp, &x, &y, &w, &h); } @@ -795,17 +749,15 @@ static gboolean remmina_plugin_vnc_queue_cuttext(RemminaPluginVncCuttextParam *p gsize br, bw; - if (GTK_IS_WIDGET(gp) && gpdata->connected) - { + if (GTK_IS_WIDGET(gp) && gpdata->connected) { g_get_current_time(&t); diff = (t.tv_sec - gpdata->clipboard_timer.tv_sec) * 10 - + (t.tv_usec - gpdata->clipboard_timer.tv_usec) / 100000; - if (diff >= 10) - { + + (t.tv_usec - gpdata->clipboard_timer.tv_usec) / 100000; + if (diff >= 10) { gpdata->clipboard_timer = t; /* Convert text from VNC latin-1 to current GTK charset (usually UTF-8) */ g_get_charset(&cur_charset); - text = g_convert_with_fallback(param->text, -1, cur_charset, "ISO-8859-1" ,"?", &br, &bw, NULL); + text = g_convert_with_fallback(param->text, -1, cur_charset, "ISO-8859-1", "?", &br, &bw, NULL); gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), text, bw); g_free(text); } @@ -821,11 +773,11 @@ static void remmina_plugin_vnc_rfb_cuttext(rfbClient* cl, const char *text, int RemminaPluginVncCuttextParam *param; param = g_new(RemminaPluginVncCuttextParam, 1); - param->gp = (RemminaProtocolWidget*) rfbClientGetClientData(cl, NULL); + param->gp = (RemminaProtocolWidget*)rfbClientGetClientData(cl, NULL); param->text = g_malloc(textlen); memcpy(param->text, text, textlen); param->textlen = textlen; - IDLE_ADD((GSourceFunc) remmina_plugin_vnc_queue_cuttext, param); + IDLE_ADD((GSourceFunc)remmina_plugin_vnc_queue_cuttext, param); } static char* @@ -842,21 +794,16 @@ remmina_plugin_vnc_rfb_password(rfbClient *cl) gpdata->auth_called = TRUE; remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); - if (gpdata->auth_first) - { + if (gpdata->auth_first) { pwd = g_strdup(remmina_plugin_service->file_get_string(remminafile, "password")); } - if (!pwd) - { + if (!pwd) { disablepasswordstoring = remmina_plugin_service->file_get_int(remminafile, "disablepasswordstoring", FALSE); ret = remmina_plugin_service->protocol_plugin_init_authpwd(gp, REMMINA_AUTHPWD_TYPE_PROTOCOL, !disablepasswordstoring); - if (ret == GTK_RESPONSE_OK) - { + if (ret == GTK_RESPONSE_OK) { pwd = remmina_plugin_service->protocol_plugin_init_get_password(gp); - } - else - { + }else { gpdata->connected = FALSE; } } @@ -864,11 +811,11 @@ remmina_plugin_vnc_rfb_password(rfbClient *cl) } static rfbCredential* -remmina_plugin_vnc_rfb_credential (rfbClient *cl, int credentialType) +remmina_plugin_vnc_rfb_credential(rfbClient *cl, int credentialType) { TRACE_CALL("__func__"); rfbCredential *cred; - RemminaProtocolWidget *gp = rfbClientGetClientData (cl, NULL); + RemminaProtocolWidget *gp = rfbClientGetClientData(cl, NULL); RemminaPluginVncData *gpdata = GET_PLUGIN_DATA(gp); RemminaFile *remminafile; gint ret; @@ -876,26 +823,22 @@ remmina_plugin_vnc_rfb_credential (rfbClient *cl, int credentialType) gboolean disablepasswordstoring; gpdata->auth_called = TRUE; - remminafile = remmina_plugin_service->protocol_plugin_get_file (gp); + remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); - cred = g_new0 (rfbCredential, 1); + cred = g_new0(rfbCredential, 1); - switch (credentialType) - { + switch (credentialType) { - case rfbCredentialTypeUser: + case rfbCredentialTypeUser: - s1 = g_strdup (remmina_plugin_service->file_get_string (remminafile, "username")); + s1 = g_strdup(remmina_plugin_service->file_get_string(remminafile, "username")); - s2 = g_strdup (remmina_plugin_service->file_get_string (remminafile, "password")); + s2 = g_strdup(remmina_plugin_service->file_get_string(remminafile, "password")); - if (gpdata->auth_first && s1 && s2) - { + if (gpdata->auth_first && s1 && s2) { cred->userCredential.username = s1; cred->userCredential.password = s2; - } - else - { + }else { g_free(s1); g_free(s2); @@ -903,13 +846,10 @@ remmina_plugin_vnc_rfb_credential (rfbClient *cl, int credentialType) ret = remmina_plugin_service->protocol_plugin_init_authuserpwd(gp, FALSE, !disablepasswordstoring); - if (ret == GTK_RESPONSE_OK) - { - cred->userCredential.username = remmina_plugin_service->protocol_plugin_init_get_username (gp); - cred->userCredential.password = remmina_plugin_service->protocol_plugin_init_get_password (gp); - } - else - { + if (ret == GTK_RESPONSE_OK) { + cred->userCredential.username = remmina_plugin_service->protocol_plugin_init_get_username(gp); + cred->userCredential.password = remmina_plugin_service->protocol_plugin_init_get_password(gp); + }else { g_free(cred); cred = NULL; gpdata->connected = FALSE; @@ -917,29 +857,23 @@ remmina_plugin_vnc_rfb_credential (rfbClient *cl, int credentialType) } break; - case rfbCredentialTypeX509: + case rfbCredentialTypeX509: if (gpdata->auth_first && - remmina_plugin_service->file_get_string (remminafile, "cacert")) - { - cred->x509Credential.x509CACertFile = g_strdup (remmina_plugin_service->file_get_string (remminafile, "cacert")); - cred->x509Credential.x509CACrlFile = g_strdup (remmina_plugin_service->file_get_string (remminafile, "cacrl")); - cred->x509Credential.x509ClientCertFile = g_strdup (remmina_plugin_service->file_get_string (remminafile, "clientcert")); - cred->x509Credential.x509ClientKeyFile = g_strdup (remmina_plugin_service->file_get_string (remminafile, "clientkey")); - } - else - { - - ret = remmina_plugin_service->protocol_plugin_init_authx509 (gp); - - if (ret == GTK_RESPONSE_OK) - { - cred->x509Credential.x509CACertFile = remmina_plugin_service->protocol_plugin_init_get_cacert (gp); - cred->x509Credential.x509CACrlFile = remmina_plugin_service->protocol_plugin_init_get_cacrl (gp); - cred->x509Credential.x509ClientCertFile = remmina_plugin_service->protocol_plugin_init_get_clientcert (gp); - cred->x509Credential.x509ClientKeyFile = remmina_plugin_service->protocol_plugin_init_get_clientkey (gp); - } - else - { + remmina_plugin_service->file_get_string(remminafile, "cacert")) { + cred->x509Credential.x509CACertFile = g_strdup(remmina_plugin_service->file_get_string(remminafile, "cacert")); + cred->x509Credential.x509CACrlFile = g_strdup(remmina_plugin_service->file_get_string(remminafile, "cacrl")); + cred->x509Credential.x509ClientCertFile = g_strdup(remmina_plugin_service->file_get_string(remminafile, "clientcert")); + cred->x509Credential.x509ClientKeyFile = g_strdup(remmina_plugin_service->file_get_string(remminafile, "clientkey")); + }else { + + ret = remmina_plugin_service->protocol_plugin_init_authx509(gp); + + if (ret == GTK_RESPONSE_OK) { + cred->x509Credential.x509CACertFile = remmina_plugin_service->protocol_plugin_init_get_cacert(gp); + cred->x509Credential.x509CACrlFile = remmina_plugin_service->protocol_plugin_init_get_cacrl(gp); + cred->x509Credential.x509ClientCertFile = remmina_plugin_service->protocol_plugin_init_get_clientcert(gp); + cred->x509Credential.x509ClientKeyFile = remmina_plugin_service->protocol_plugin_init_get_clientkey(gp); + }else { g_free(cred); cred = NULL; gpdata->connected = FALSE; @@ -947,7 +881,7 @@ remmina_plugin_vnc_rfb_credential (rfbClient *cl, int credentialType) } break; - default: + default: g_free(cred); cred = NULL; break; @@ -967,18 +901,17 @@ static void remmina_plugin_vnc_rfb_cursor_shape(rfbClient *cl, int xhot, int yho if (!gtk_widget_get_window(GTK_WIDGET(gp))) return; - if (width && height) - { + if (width && height) { stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width); data = g_malloc(stride * height); remmina_plugin_vnc_rfb_fill_buffer(cl, data, stride, cl->rcSource, - width * cl->format.bitsPerPixel / 8, cl->rcMask, width, height); + width * cl->format.bitsPerPixel / 8, cl->rcMask, width, height); surface = cairo_image_surface_create_for_data(data, CAIRO_FORMAT_ARGB32, width, height, stride); if (cairo_surface_status(surface) != CAIRO_STATUS_SUCCESS) { g_free(data); return; } - if(cairo_surface_set_user_data(surface, NULL, NULL, g_free) != CAIRO_STATUS_SUCCESS) { + if (cairo_surface_set_user_data(surface, NULL, NULL, g_free) != CAIRO_STATUS_SUCCESS) { g_free(data); return; } @@ -995,7 +928,7 @@ static void remmina_plugin_vnc_rfb_bell(rfbClient *cl) RemminaProtocolWidget *gp; GdkWindow *window; - gp = (RemminaProtocolWidget*) (rfbClientGetClientData(cl, NULL)); + gp = (RemminaProtocolWidget*)(rfbClientGetClientData(cl, NULL)); window = gtk_widget_get_window(GTK_WIDGET(gp)); if (window) @@ -1022,36 +955,30 @@ static void remmina_plugin_vnc_rfb_output(const char *format, ...) gchar *f, *p, *ff; /* eliminate the last \n */ - f = g_strdup (format); - if (f[strlen (f) - 1] == '\n') f[strlen (f) - 1] = '\0'; - - if (g_strcmp0(f, "VNC connection failed: %s") == 0) - { - p = va_arg (args, gchar*); - g_snprintf (vnc_error, MAX_ERROR_LENGTH, _(f), _(p)); - } - else if (g_strcmp0(f, "Unknown authentication scheme from VNC server: %s") == 0) - { - p = va_arg (args, gchar*); + f = g_strdup(format); + if (f[strlen(f) - 1] == '\n') f[strlen(f) - 1] = '\0'; + + if (g_strcmp0(f, "VNC connection failed: %s") == 0) { + p = va_arg(args, gchar*); + g_snprintf(vnc_error, MAX_ERROR_LENGTH, _(f), _(p)); + }else if (g_strcmp0(f, "Unknown authentication scheme from VNC server: %s") == 0) { + p = va_arg(args, gchar*); if (vnc_encryption_disable_requested) { ff = g_strconcat(_("Unknown authentication scheme from VNC server: %s"), ". ", _("Please retry after enabling encryption on this profile."), NULL); - g_snprintf (vnc_error, MAX_ERROR_LENGTH, ff, p); + g_snprintf(vnc_error, MAX_ERROR_LENGTH, ff, p); g_free(ff); - } - else - g_snprintf (vnc_error, MAX_ERROR_LENGTH, _(f), p); - } - else - { - g_vsnprintf (vnc_error, MAX_ERROR_LENGTH, _(f), args); + }else + g_snprintf(vnc_error, MAX_ERROR_LENGTH, _(f), p); + }else { + g_vsnprintf(vnc_error, MAX_ERROR_LENGTH, _(f), args); } g_free(f); va_end(args); - remmina_plugin_service->log_printf ("[VNC]%s\n", vnc_error); + remmina_plugin_service->log_printf("[VNC]%s\n", vnc_error); } static void remmina_plugin_vnc_chat_on_send(RemminaProtocolWidget *gp, const gchar *text) @@ -1095,10 +1022,10 @@ static gboolean remmina_plugin_vnc_open_chat(RemminaProtocolWidget *gp) RemminaPluginVncData *gpdata = GET_PLUGIN_DATA(gp); rfbClient *cl; - cl = (rfbClient*) gpdata->client; + cl = (rfbClient*)gpdata->client; remmina_plugin_service->protocol_plugin_chat_open(gp, cl->desktopName, remmina_plugin_vnc_chat_on_send, - remmina_plugin_vnc_chat_on_destroy); + remmina_plugin_vnc_chat_on_destroy); remmina_plugin_vnc_event_push(gp, REMMINA_PLUGIN_VNC_EVENT_CHAT_OPEN, NULL, NULL, NULL); return FALSE; } @@ -1108,22 +1035,21 @@ static void remmina_plugin_vnc_rfb_chat(rfbClient* cl, int value, char *text) TRACE_CALL("__func__"); RemminaProtocolWidget *gp; - gp = (RemminaProtocolWidget*) (rfbClientGetClientData(cl, NULL)); - switch (value) - { - case rfbTextChatOpen: - IDLE_ADD((GSourceFunc) remmina_plugin_vnc_open_chat, gp); - break; - case rfbTextChatClose: - /* Do nothing... but wait for the next rfbTextChatFinished signal */ - break; - case rfbTextChatFinished: - IDLE_ADD((GSourceFunc) remmina_plugin_vnc_close_chat, gp); - break; - default: - /* value is the text length */ - remmina_plugin_service->protocol_plugin_chat_receive(gp, text); - break; + gp = (RemminaProtocolWidget*)(rfbClientGetClientData(cl, NULL)); + switch (value) { + case rfbTextChatOpen: + IDLE_ADD((GSourceFunc)remmina_plugin_vnc_open_chat, gp); + break; + case rfbTextChatClose: + /* Do nothing... but wait for the next rfbTextChatFinished signal */ + break; + case rfbTextChatFinished: + IDLE_ADD((GSourceFunc)remmina_plugin_vnc_close_chat, gp); + break; + default: + /* value is the text length */ + remmina_plugin_service->protocol_plugin_chat_receive(gp, text); + break; } } @@ -1145,8 +1071,7 @@ static gboolean remmina_plugin_vnc_incoming_connection(RemminaProtocolWidget *gp FD_SET(gpdata->listen_sock, &fds); select(gpdata->listen_sock + 1, &fds, NULL, NULL, NULL); - if (!FD_ISSET(gpdata->listen_sock, &fds)) - { + if (!FD_ISSET(gpdata->listen_sock, &fds)) { close(gpdata->listen_sock); gpdata->listen_sock = -1; return FALSE; @@ -1155,8 +1080,7 @@ static gboolean remmina_plugin_vnc_incoming_connection(RemminaProtocolWidget *gp cl->sock = AcceptTcpConnection(gpdata->listen_sock); close(gpdata->listen_sock); gpdata->listen_sock = -1; - if (cl->sock < 0 || !SetNonBlocking(cl->sock)) - { + if (cl->sock < 0 || !SetNonBlocking(cl->sock)) { return FALSE; } @@ -1173,13 +1097,12 @@ static gboolean remmina_plugin_vnc_main_loop(RemminaProtocolWidget *gp) fd_set fds; struct timeval timeout; - if (!gpdata->connected) - { + if (!gpdata->connected) { gpdata->running = FALSE; return FALSE; } - cl = (rfbClient*) gpdata->client; + cl = (rfbClient*)gpdata->client; timeout.tv_sec = 10; timeout.tv_usec = 0; @@ -1193,21 +1116,17 @@ static gboolean remmina_plugin_vnc_main_loop(RemminaProtocolWidget *gp) if (ret <= 0) return TRUE; - if (FD_ISSET(gpdata->vnc_event_pipe[0], &fds)) - { + if (FD_ISSET(gpdata->vnc_event_pipe[0], &fds)) { remmina_plugin_vnc_process_vnc_event(gp); } - if (FD_ISSET(cl->sock, &fds)) - { - i = WaitForMessage (cl, 500); + if (FD_ISSET(cl->sock, &fds)) { + i = WaitForMessage(cl, 500); if (i < 0) return TRUE; - if (!HandleRFBServerMessage(cl)) - { + if (!HandleRFBServerMessage(cl)) { gpdata->running = FALSE; - if (gpdata->connected && !remmina_plugin_service->protocol_plugin_is_closed(gp)) - { - IDLE_ADD((GSourceFunc) remmina_plugin_service->protocol_plugin_close_connection, gp); + if (gpdata->connected && !remmina_plugin_service->protocol_plugin_is_closed(gp)) { + IDLE_ADD((GSourceFunc)remmina_plugin_service->protocol_plugin_close_connection, gp); } return FALSE; } @@ -1231,14 +1150,12 @@ static gboolean remmina_plugin_vnc_main(RemminaProtocolWidget *gp) rfbClientLog = remmina_plugin_vnc_rfb_output; rfbClientErr = remmina_plugin_vnc_rfb_output; - while (gpdata->connected) - { + while (gpdata->connected) { gpdata->auth_called = FALSE; host = remmina_plugin_service->protocol_plugin_start_direct_tunnel(gp, 5900, TRUE); - if (host == NULL) - { + if (host == NULL) { gpdata->connected = FALSE; break; } @@ -1250,33 +1167,27 @@ static gboolean remmina_plugin_vnc_main(RemminaProtocolWidget *gp) cl->GetCredential = remmina_plugin_vnc_rfb_credential; cl->GotFrameBufferUpdate = remmina_plugin_vnc_rfb_updatefb; cl->GotXCutText = ( - remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE) ? - NULL : remmina_plugin_vnc_rfb_cuttext); + remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE) ? + NULL : remmina_plugin_vnc_rfb_cuttext); cl->GotCursorShape = remmina_plugin_vnc_rfb_cursor_shape; cl->Bell = remmina_plugin_vnc_rfb_bell; cl->HandleTextChat = remmina_plugin_vnc_rfb_chat; rfbClientSetClientData(cl, NULL, gp); - if (host[0] == '\0') - { + if (host[0] == '\0') { cl->serverHost = strdup(host); cl->listenSpecified = TRUE; - if (remmina_plugin_service->file_get_int(remminafile, "ssh_enabled", FALSE)) - { + if (remmina_plugin_service->file_get_int(remminafile, "ssh_enabled", FALSE)) { /* When we use reverse tunnel, the local port does not really matter. * Hardcode a default port just in case the remote port is customized * to a privilege port then we will have problem listening. */ cl->listenPort = 5500; - } - else - { + }else { cl->listenPort = remmina_plugin_service->file_get_int(remminafile, "listenport", 5500); } remmina_plugin_vnc_incoming_connection(gp, cl); - } - else - { + }else { remmina_plugin_service->get_server_port(host, 5900, &s, &cl->serverPort); cl->serverHost = strdup(s); g_free(s); @@ -1288,30 +1199,26 @@ static gboolean remmina_plugin_vnc_main(RemminaProtocolWidget *gp) g_free(host); host = NULL; - if (remmina_plugin_service->file_get_string(remminafile, "proxy")) - { + if (remmina_plugin_service->file_get_string(remminafile, "proxy")) { cl->destHost = cl->serverHost; cl->destPort = cl->serverPort; - remmina_plugin_service->get_server_port (remmina_plugin_service->file_get_string (remminafile, "proxy"), 5900, - &s, &cl->serverPort); - cl->serverHost = strdup (s); + remmina_plugin_service->get_server_port(remmina_plugin_service->file_get_string(remminafile, "proxy"), 5900, + &s, &cl->serverPort); + cl->serverHost = strdup(s); g_free(s); } cl->appData.useRemoteCursor = ( - remmina_plugin_service->file_get_int(remminafile, "showcursor", FALSE) ? FALSE : TRUE); + remmina_plugin_service->file_get_int(remminafile, "showcursor", FALSE) ? FALSE : TRUE); remmina_plugin_vnc_update_quality(cl, remmina_plugin_service->file_get_int(remminafile, "quality", 0)); remmina_plugin_vnc_update_colordepth(cl, remmina_plugin_service->file_get_int(remminafile, "colordepth", 15)); SetFormatAndEncodings(cl); - if (remmina_plugin_service->file_get_int(remminafile, "disableencryption", FALSE)) - { + if (remmina_plugin_service->file_get_int(remminafile, "disableencryption", FALSE)) { vnc_encryption_disable_requested = TRUE; - SetClientAuthSchemes (cl, remmina_plugin_vnc_no_encrypt_auth_types, -1); - } - else - { + SetClientAuthSchemes(cl, remmina_plugin_vnc_no_encrypt_auth_types, -1); + }else { vnc_encryption_disable_requested = FALSE; } @@ -1319,15 +1226,13 @@ static gboolean remmina_plugin_vnc_main(RemminaProtocolWidget *gp) break; /* If the authentication is not called, it has to be a fatel error and must quit */ - if (!gpdata->auth_called) - { + if (!gpdata->auth_called) { gpdata->connected = FALSE; break; } /* vnc4server reports "already in use" after authentication. Workaround here */ - if (strstr(vnc_error, "The server is already in use")) - { + if (strstr(vnc_error, "The server is already in use")) { gpdata->connected = FALSE; gpdata->auth_called = FALSE; break; @@ -1347,15 +1252,13 @@ static gboolean remmina_plugin_vnc_main(RemminaProtocolWidget *gp) gpdata->auth_first = FALSE; } - if (!gpdata->connected) - { - if (cl && !gpdata->auth_called && !(remmina_plugin_service->protocol_plugin_has_error(gp))) - { + if (!gpdata->connected) { + if (cl && !gpdata->auth_called && !(remmina_plugin_service->protocol_plugin_has_error(gp))) { remmina_plugin_service->protocol_plugin_set_error(gp, "%s", vnc_error); } gpdata->running = FALSE; - IDLE_ADD((GSourceFunc) remmina_plugin_service->protocol_plugin_close_connection, gp); + IDLE_ADD((GSourceFunc)remmina_plugin_service->protocol_plugin_close_connection, gp); return FALSE; } @@ -1366,21 +1269,16 @@ static gboolean remmina_plugin_vnc_main(RemminaProtocolWidget *gp) remmina_plugin_service->protocol_plugin_emit_signal(gp, "connect"); - if (remmina_plugin_service->file_get_int(remminafile, "disableserverinput", FALSE)) - { + if (remmina_plugin_service->file_get_int(remminafile, "disableserverinput", FALSE)) { PermitServerInput(cl, 1); } - if (gpdata->thread) - { - while (remmina_plugin_vnc_main_loop(gp)) - { + if (gpdata->thread) { + while (remmina_plugin_vnc_main_loop(gp)) { } gpdata->running = FALSE; - } - else - { - IDLE_ADD((GSourceFunc) remmina_plugin_vnc_main_loop, gp); + }else { + IDLE_ADD((GSourceFunc)remmina_plugin_vnc_main_loop, gp); } return FALSE; @@ -1388,29 +1286,27 @@ static gboolean remmina_plugin_vnc_main(RemminaProtocolWidget *gp) static gpointer -remmina_plugin_vnc_main_thread (gpointer data) +remmina_plugin_vnc_main_thread(gpointer data) { TRACE_CALL("__func__"); - pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL); + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); CANCEL_ASYNC - remmina_plugin_vnc_main ((RemminaProtocolWidget*) data); + remmina_plugin_vnc_main((RemminaProtocolWidget*)data); return NULL; } -static RemminaPluginVncCoordinates remmina_plugin_vnc_scale_coordinates(GtkWidget *widget, RemminaProtocolWidget *gp, gint x, gint y) { +static RemminaPluginVncCoordinates remmina_plugin_vnc_scale_coordinates(GtkWidget *widget, RemminaProtocolWidget *gp, gint x, gint y) +{ GtkAllocation widget_allocation; RemminaPluginVncCoordinates result; - if ((remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp) != REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE)) - { + if ((remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp) != REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE)) { gtk_widget_get_allocation(widget, &widget_allocation); result.x = x * remmina_plugin_service->protocol_plugin_get_width(gp) / widget_allocation.width; result.y = y * remmina_plugin_service->protocol_plugin_get_height(gp) / widget_allocation.height; - } - else - { + }else { result.x = x; result.y = y; } @@ -1433,7 +1329,7 @@ static gboolean remmina_plugin_vnc_on_motion(GtkWidget *widget, GdkEventMotion * coordinates = remmina_plugin_vnc_scale_coordinates(widget, gp, event->x, event->y); remmina_plugin_vnc_event_push(gp, REMMINA_PLUGIN_VNC_EVENT_POINTER, GINT_TO_POINTER(coordinates.x), GINT_TO_POINTER(coordinates.y), - GINT_TO_POINTER(gpdata->button_mask)); + GINT_TO_POINTER(gpdata->button_mask)); return TRUE; } @@ -1460,11 +1356,11 @@ static gboolean remmina_plugin_vnc_on_button(GtkWidget *widget, GdkEventButton * mask = (1 << (event->button - 1)); gpdata->button_mask = (event->type == GDK_BUTTON_PRESS ? (gpdata->button_mask | mask) : - (gpdata->button_mask & (0xff - mask))); + (gpdata->button_mask & (0xff - mask))); coordinates = remmina_plugin_vnc_scale_coordinates(widget, gp, event->x, event->y); remmina_plugin_vnc_event_push(gp, REMMINA_PLUGIN_VNC_EVENT_POINTER, GINT_TO_POINTER(coordinates.x), GINT_TO_POINTER(coordinates.y), - GINT_TO_POINTER(gpdata->button_mask)); + GINT_TO_POINTER(gpdata->button_mask)); return TRUE; } @@ -1482,43 +1378,42 @@ static gboolean remmina_plugin_vnc_on_scroll(GtkWidget *widget, GdkEventScroll * if (remmina_plugin_service->file_get_int(remminafile, "viewonly", FALSE)) return FALSE; - switch (event->direction) - { - case GDK_SCROLL_UP: + switch (event->direction) { + case GDK_SCROLL_UP: + mask = (1 << 3); + break; + case GDK_SCROLL_DOWN: + mask = (1 << 4); + break; + case GDK_SCROLL_LEFT: + mask = (1 << 5); + break; + case GDK_SCROLL_RIGHT: + mask = (1 << 6); + break; +#ifdef GDK_SCROLL_SMOOTH + case GDK_SCROLL_SMOOTH: + if (event->delta_y < 0) mask = (1 << 3); - break; - case GDK_SCROLL_DOWN: + if (event->delta_y > 0) mask = (1 << 4); - break; - case GDK_SCROLL_LEFT: + if (event->delta_x < 0) mask = (1 << 5); - break; - case GDK_SCROLL_RIGHT: + if (event->delta_x > 0) mask = (1 << 6); - break; -#ifdef GDK_SCROLL_SMOOTH - case GDK_SCROLL_SMOOTH: - if (event->delta_y < 0) - mask = (1 << 3); - if (event->delta_y > 0) - mask = (1 << 4); - if (event->delta_x < 0) - mask = (1 << 5); - if (event->delta_x > 0) - mask = (1 << 6); - if (!mask) - return FALSE; - break; -#endif - default: + if (!mask) return FALSE; + break; +#endif + default: + return FALSE; } coordinates = remmina_plugin_vnc_scale_coordinates(widget, gp, event->x, event->y); remmina_plugin_vnc_event_push(gp, REMMINA_PLUGIN_VNC_EVENT_POINTER, GINT_TO_POINTER(coordinates.x), GINT_TO_POINTER(coordinates.y), - GINT_TO_POINTER(mask | gpdata->button_mask)); + GINT_TO_POINTER(mask | gpdata->button_mask)); remmina_plugin_vnc_event_push(gp, REMMINA_PLUGIN_VNC_EVENT_POINTER, GINT_TO_POINTER(coordinates.x), GINT_TO_POINTER(coordinates.y), - GINT_TO_POINTER(gpdata->button_mask)); + GINT_TO_POINTER(gpdata->button_mask)); return TRUE; } @@ -1530,26 +1425,20 @@ static void remmina_plugin_vnc_release_key(RemminaProtocolWidget *gp, guint16 ke RemminaKeyVal *k; gint i; - if (keycode == 0) - { + if (keycode == 0) { /* Send all release key events for previously pressed keys */ - for (i = 0; i < gpdata->pressed_keys->len; i++) - { + for (i = 0; i < gpdata->pressed_keys->len; i++) { k = g_ptr_array_index(gpdata->pressed_keys, i); remmina_plugin_vnc_event_push(gp, REMMINA_PLUGIN_VNC_EVENT_KEY, GUINT_TO_POINTER(k->keyval), - GINT_TO_POINTER(FALSE), NULL); + GINT_TO_POINTER(FALSE), NULL); g_free(k); } g_ptr_array_set_size(gpdata->pressed_keys, 0); - } - else - { + }else { /* Unregister the keycode only */ - for (i = 0; i < gpdata->pressed_keys->len; i++) - { + for (i = 0; i < gpdata->pressed_keys->len; i++) { k = g_ptr_array_index(gpdata->pressed_keys, i); - if (k->keycode == keycode) - { + if (k->keycode == keycode) { g_free(k); g_ptr_array_remove_index_fast(gpdata->pressed_keys, i); break; @@ -1589,21 +1478,18 @@ static gboolean remmina_plugin_vnc_on_key(GtkWidget *widget, GdkEventKey *event, } keyval = remmina_plugin_service->pref_keymap_get_keyval(remmina_plugin_service->file_get_string(remminafile, "keymap"), - event_keyval); + event_keyval); remmina_plugin_vnc_event_push(gp, REMMINA_PLUGIN_VNC_EVENT_KEY, GUINT_TO_POINTER(keyval), - GINT_TO_POINTER(event->type == GDK_KEY_PRESS ? TRUE : FALSE), NULL); + GINT_TO_POINTER(event->type == GDK_KEY_PRESS ? TRUE : FALSE), NULL); /* Register/unregister the pressed key */ - if (event->type == GDK_KEY_PRESS) - { + if (event->type == GDK_KEY_PRESS) { k = g_new(RemminaKeyVal, 1); k->keyval = keyval; k->keycode = event->hardware_keycode; g_ptr_array_add(gpdata->pressed_keys, k); - } - else - { + }else { remmina_plugin_vnc_release_key(gp, event->hardware_keycode); } return TRUE; @@ -1619,12 +1505,11 @@ static void remmina_plugin_vnc_on_cuttext_request(GtkClipboard *clipboard, const gchar *latin1_text; const char *cur_charset; - if (text) - { + if (text) { /* A timer (1 second) to avoid clipboard "loopback": text cut out from VNC won't paste back into VNC */ g_get_current_time(&t); diff = (t.tv_sec - gpdata->clipboard_timer.tv_sec) * 10 - + (t.tv_usec - gpdata->clipboard_timer.tv_usec) / 100000; + + (t.tv_usec - gpdata->clipboard_timer.tv_usec) / 100000; if (diff < 10) return; @@ -1632,8 +1517,8 @@ static void remmina_plugin_vnc_on_cuttext_request(GtkClipboard *clipboard, const /* Convert text from current charset to latin-1 before sending to remote server. * See RFC6143 7.5.6 */ g_get_charset(&cur_charset); - latin1_text = g_convert_with_fallback(text, -1, "ISO-8859-1", cur_charset ,"?", &br, &bw, NULL); - remmina_plugin_vnc_event_push(gp, REMMINA_PLUGIN_VNC_EVENT_CUTTEXT, (gpointer) latin1_text, NULL, NULL); + latin1_text = g_convert_with_fallback(text, -1, "ISO-8859-1", cur_charset, "?", &br, &bw, NULL); + remmina_plugin_vnc_event_push(gp, REMMINA_PLUGIN_VNC_EVENT_CUTTEXT, (gpointer)latin1_text, NULL, NULL); g_free(latin1_text); } } @@ -1650,7 +1535,7 @@ static void remmina_plugin_vnc_on_cuttext(GtkClipboard *clipboard, GdkEvent *eve if (remmina_plugin_service->file_get_int(remminafile, "viewonly", FALSE)) return; - gtk_clipboard_request_text(clipboard, (GtkClipboardTextReceivedFunc) remmina_plugin_vnc_on_cuttext_request, gp); + gtk_clipboard_request_text(clipboard, (GtkClipboardTextReceivedFunc)remmina_plugin_vnc_on_cuttext_request, gp); } static void remmina_plugin_vnc_on_realize(RemminaProtocolWidget *gp, gpointer data) @@ -1662,8 +1547,7 @@ static void remmina_plugin_vnc_on_realize(RemminaProtocolWidget *gp, gpointer da remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); - if (remmina_plugin_service->file_get_int(remminafile, "showcursor", FALSE)) - { + if (remmina_plugin_service->file_get_int(remminafile, "showcursor", FALSE)) { /* Hide local cursor (show a small dot instead) */ pixbuf = gdk_pixbuf_new_from_xpm_data(dot_cursor_xpm); cursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), pixbuf, dot_cursor_x_hot, dot_cursor_y_hot); @@ -1695,18 +1579,16 @@ static gboolean remmina_plugin_vnc_open_connection(RemminaProtocolWidget *gp) g_signal_connect(G_OBJECT(gpdata->drawing_area), "key-press-event", G_CALLBACK(remmina_plugin_vnc_on_key), gp); g_signal_connect(G_OBJECT(gpdata->drawing_area), "key-release-event", G_CALLBACK(remmina_plugin_vnc_on_key), gp); - if (!remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE)) - { + if (!remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE)) { gpdata->clipboard_handler = g_signal_connect(G_OBJECT(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)), - "owner-change", G_CALLBACK(remmina_plugin_vnc_on_cuttext), gp); + "owner-change", G_CALLBACK(remmina_plugin_vnc_on_cuttext), gp); } - if (pthread_create (&gpdata->thread, NULL, remmina_plugin_vnc_main_thread, gp)) - { + if (pthread_create(&gpdata->thread, NULL, remmina_plugin_vnc_main_thread, gp)) { /* I don't think this will ever happen... */ g_print("Failed to initialize pthread. Falling back to non-thread mode...\n"); - g_timeout_add (0, (GSourceFunc) remmina_plugin_vnc_main, gp); + g_timeout_add(0, (GSourceFunc)remmina_plugin_vnc_main, gp); gpdata->thread = 0; } @@ -1723,44 +1605,36 @@ static gboolean remmina_plugin_vnc_close_connection_timeout(RemminaProtocolWidge return TRUE; /* unregister the clipboard monitor */ - if (gpdata->clipboard_handler) - { + if (gpdata->clipboard_handler) { g_signal_handler_disconnect(G_OBJECT(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)), gpdata->clipboard_handler); gpdata->clipboard_handler = 0; } - if (gpdata->queuecursor_handler) - { + if (gpdata->queuecursor_handler) { g_source_remove(gpdata->queuecursor_handler); gpdata->queuecursor_handler = 0; } - if (gpdata->queuecursor_surface) - { + if (gpdata->queuecursor_surface) { cairo_surface_destroy(gpdata->queuecursor_surface); gpdata->queuecursor_surface = NULL; } - if (gpdata->queuedraw_handler) - { + if (gpdata->queuedraw_handler) { g_source_remove(gpdata->queuedraw_handler); gpdata->queuedraw_handler = 0; } - if (gpdata->listen_sock >= 0) - { + if (gpdata->listen_sock >= 0) { close(gpdata->listen_sock); } - if (gpdata->client) - { - rfbClientCleanup((rfbClient*) gpdata->client); + if (gpdata->client) { + rfbClientCleanup((rfbClient*)gpdata->client); gpdata->client = NULL; } - if (gpdata->rgb_buffer) - { + if (gpdata->rgb_buffer) { cairo_surface_destroy(gpdata->rgb_buffer); gpdata->rgb_buffer = NULL; } - if (gpdata->vnc_buffer) - { + if (gpdata->vnc_buffer) { g_free(gpdata->vnc_buffer); gpdata->vnc_buffer = NULL; } @@ -1772,7 +1646,7 @@ static gboolean remmina_plugin_vnc_close_connection_timeout(RemminaProtocolWidge close(gpdata->vnc_event_pipe[1]); - pthread_mutex_destroy (&gpdata->buffer_mutex); + pthread_mutex_destroy(&gpdata->buffer_mutex); remmina_plugin_service->protocol_plugin_emit_signal(gp, "disconnect"); @@ -1787,16 +1661,13 @@ static gboolean remmina_plugin_vnc_close_connection(RemminaProtocolWidget *gp) gpdata->connected = FALSE; - if (gpdata->thread) - { - pthread_cancel (gpdata->thread); - if (gpdata->thread) pthread_join (gpdata->thread, NULL); + if (gpdata->thread) { + pthread_cancel(gpdata->thread); + if (gpdata->thread) pthread_join(gpdata->thread, NULL); gpdata->running = FALSE; - remmina_plugin_vnc_close_connection_timeout (gp); - } - else - { - g_timeout_add (200, (GSourceFunc) remmina_plugin_vnc_close_connection_timeout, gp); + remmina_plugin_vnc_close_connection_timeout(gp); + }else { + g_timeout_add(200, (GSourceFunc)remmina_plugin_vnc_close_connection_timeout, gp); } return FALSE; @@ -1807,14 +1678,13 @@ static gboolean remmina_plugin_vnc_query_feature(RemminaProtocolWidget *gp, cons TRACE_CALL("__func__"); RemminaPluginVncData *gpdata = GET_PLUGIN_DATA(gp); - switch (feature->id) - { - case REMMINA_PLUGIN_VNC_FEATURE_PREF_DISABLESERVERINPUT: - return (SupportsClient2Server((rfbClient*) (gpdata->client), rfbSetServerInput) ? TRUE : FALSE); - case REMMINA_PLUGIN_VNC_FEATURE_TOOL_CHAT: - return (SupportsClient2Server((rfbClient*) (gpdata->client), rfbTextChat) ? TRUE : FALSE); - default: - return TRUE; + switch (feature->id) { + case REMMINA_PLUGIN_VNC_FEATURE_PREF_DISABLESERVERINPUT: + return (SupportsClient2Server((rfbClient*)(gpdata->client), rfbSetServerInput) ? TRUE : FALSE); + case REMMINA_PLUGIN_VNC_FEATURE_TOOL_CHAT: + return (SupportsClient2Server((rfbClient*)(gpdata->client), rfbTextChat) ? TRUE : FALSE); + default: + return TRUE; } } @@ -1825,40 +1695,39 @@ static void remmina_plugin_vnc_call_feature(RemminaProtocolWidget *gp, const Rem RemminaFile *remminafile; remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); - switch (feature->id) - { - case REMMINA_PLUGIN_VNC_FEATURE_PREF_QUALITY: - remmina_plugin_vnc_update_quality((rfbClient*) (gpdata->client), - remmina_plugin_service->file_get_int(remminafile, "quality", 0)); - remmina_plugin_vnc_update_colordepth((rfbClient*) (gpdata->client), - remmina_plugin_service->file_get_int(remminafile, "colordepth", 15)); - SetFormatAndEncodings((rfbClient*) (gpdata->client)); - break; - case REMMINA_PLUGIN_VNC_FEATURE_PREF_VIEWONLY: - break; - case REMMINA_PLUGIN_VNC_FEATURE_PREF_DISABLESERVERINPUT: - PermitServerInput((rfbClient*) (gpdata->client), - remmina_plugin_service->file_get_int(remminafile, "disableserverinput", FALSE) ? 1 : 0); - break; - case REMMINA_PLUGIN_VNC_FEATURE_UNFOCUS: - remmina_plugin_vnc_release_key(gp, 0); - break; - case REMMINA_PLUGIN_VNC_FEATURE_SCALE: - remmina_plugin_vnc_update_scale(gp, remmina_plugin_service->file_get_int(remminafile, "scale", FALSE)); - break; - case REMMINA_PLUGIN_VNC_FEATURE_TOOL_REFRESH: - SendFramebufferUpdateRequest((rfbClient*) (gpdata->client), 0, 0, - remmina_plugin_service->protocol_plugin_get_width(gp), - remmina_plugin_service->protocol_plugin_get_height(gp), FALSE); - break; - case REMMINA_PLUGIN_VNC_FEATURE_TOOL_CHAT: - remmina_plugin_vnc_open_chat(gp); - break; - case REMMINA_PLUGIN_VNC_FEATURE_TOOL_SENDCTRLALTDEL: - remmina_plugin_vnc_send_ctrlaltdel(gp); - break; - default: - break; + switch (feature->id) { + case REMMINA_PLUGIN_VNC_FEATURE_PREF_QUALITY: + remmina_plugin_vnc_update_quality((rfbClient*)(gpdata->client), + remmina_plugin_service->file_get_int(remminafile, "quality", 0)); + remmina_plugin_vnc_update_colordepth((rfbClient*)(gpdata->client), + remmina_plugin_service->file_get_int(remminafile, "colordepth", 15)); + SetFormatAndEncodings((rfbClient*)(gpdata->client)); + break; + case REMMINA_PLUGIN_VNC_FEATURE_PREF_VIEWONLY: + break; + case REMMINA_PLUGIN_VNC_FEATURE_PREF_DISABLESERVERINPUT: + PermitServerInput((rfbClient*)(gpdata->client), + remmina_plugin_service->file_get_int(remminafile, "disableserverinput", FALSE) ? 1 : 0); + break; + case REMMINA_PLUGIN_VNC_FEATURE_UNFOCUS: + remmina_plugin_vnc_release_key(gp, 0); + break; + case REMMINA_PLUGIN_VNC_FEATURE_SCALE: + remmina_plugin_vnc_update_scale(gp, remmina_plugin_service->file_get_int(remminafile, "scale", FALSE)); + break; + case REMMINA_PLUGIN_VNC_FEATURE_TOOL_REFRESH: + SendFramebufferUpdateRequest((rfbClient*)(gpdata->client), 0, 0, + remmina_plugin_service->protocol_plugin_get_width(gp), + remmina_plugin_service->protocol_plugin_get_height(gp), FALSE); + break; + case REMMINA_PLUGIN_VNC_FEATURE_TOOL_CHAT: + remmina_plugin_vnc_open_chat(gp); + break; + case REMMINA_PLUGIN_VNC_FEATURE_TOOL_SENDCTRLALTDEL: + remmina_plugin_vnc_send_ctrlaltdel(gp); + break; + default: + break; } } @@ -1883,8 +1752,7 @@ static gboolean remmina_plugin_vnc_on_draw(GtkWidget *widget, cairo_t *context, LOCK_BUFFER(FALSE); surface = gpdata->rgb_buffer; - if (!surface) - { + if (!surface) { UNLOCK_BUFFER(FALSE); return FALSE; } @@ -1892,11 +1760,11 @@ static gboolean remmina_plugin_vnc_on_draw(GtkWidget *widget, cairo_t *context, width = remmina_plugin_service->protocol_plugin_get_width(gp); height = remmina_plugin_service->protocol_plugin_get_height(gp); - if((remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp) != REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE)) { + if ((remmina_plugin_service->remmina_protocol_widget_get_current_scale_mode(gp) != REMMINA_PROTOCOL_WIDGET_SCALE_MODE_NONE)) { gtk_widget_get_allocation(widget, &widget_allocation); cairo_scale(context, - (double) widget_allocation.width / width, - (double) widget_allocation.height / height); + (double)widget_allocation.width / width, + (double)widget_allocation.height / height); } cairo_rectangle(context, 0, 0, width, height); @@ -1921,9 +1789,9 @@ static void remmina_plugin_vnc_init(RemminaProtocolWidget *gp) gtk_container_add(GTK_CONTAINER(gp), gpdata->drawing_area); gtk_widget_add_events( - gpdata->drawing_area, - GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK - | GDK_KEY_RELEASE_MASK | GDK_SCROLL_MASK); + gpdata->drawing_area, + GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK + | GDK_KEY_RELEASE_MASK | GDK_SCROLL_MASK); gtk_widget_set_can_focus(gpdata->drawing_area, TRUE); @@ -1935,8 +1803,7 @@ static void remmina_plugin_vnc_init(RemminaProtocolWidget *gp) gpdata->pressed_keys = g_ptr_array_new(); gpdata->vnc_event_queue = g_queue_new(); pthread_mutex_init(&gpdata->vnc_event_queue_mutex, NULL); - if (pipe(gpdata->vnc_event_pipe)) - { + if (pipe(gpdata->vnc_event_pipe)) { g_print("Error creating pipes.\n"); gpdata->vnc_event_pipe[0] = 0; gpdata->vnc_event_pipe[1] = 0; @@ -1944,14 +1811,14 @@ static void remmina_plugin_vnc_init(RemminaProtocolWidget *gp) flags = fcntl(gpdata->vnc_event_pipe[0], F_GETFL, 0); fcntl(gpdata->vnc_event_pipe[0], F_SETFL, flags | O_NONBLOCK); - pthread_mutex_init (&gpdata->buffer_mutex, NULL); + pthread_mutex_init(&gpdata->buffer_mutex, NULL); } /* Array of key/value pairs for color depths */ static gpointer colordepth_list[] = { - "8", N_("256 colors (8 bpp)"), + "8", N_("256 colors (8 bpp)"), "15", N_("High color (15 bpp)"), "16", N_("High color (16 bpp)"), "24", N_("True color (24 bpp)"), @@ -1980,14 +1847,14 @@ static gpointer quality_list[] = */ static const RemminaProtocolSetting remmina_plugin_vnc_basic_settings[] = { - { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, "server", NULL, FALSE, "_rfb._tcp", NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "proxy", N_("Repeater"), FALSE, NULL, NULL}, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("User name"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Color depth"), FALSE, colordepth_list, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP, NULL, NULL, FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } + { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, "server", NULL, FALSE, "_rfb._tcp", NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "proxy", N_("Repeater"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("User name"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Color depth"), FALSE, colordepth_list, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP, NULL, NULL, FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; /* Array of RemminaProtocolSetting for basic settings. @@ -2001,13 +1868,13 @@ static const RemminaProtocolSetting remmina_plugin_vnc_basic_settings[] = */ 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_("User name"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Color depth"), FALSE, colordepth_list, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP, NULL, NULL, FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "listenport", N_("Listen on port"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("User name"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("User password"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Color depth"), FALSE, colordepth_list, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "quality", N_("Quality"), FALSE, quality_list, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP, NULL, NULL, FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; /* Array of RemminaProtocolSetting for advanced settings. @@ -2021,73 +1888,75 @@ 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_("Disable clipboard sync"), TRUE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableencryption", N_("Disable encryption"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableserverinput", N_("Disable server input"), TRUE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disablepasswordstoring", N_("Disable password storing"), FALSE, 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_("Disable clipboard sync"), TRUE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableencryption", N_("Disable encryption"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disableserverinput", N_("Disable server input"), TRUE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "disablepasswordstoring", N_("Disable password storing"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; /* Array for available features. * The last element of the array must be REMMINA_PROTOCOL_FEATURE_TYPE_END. */ static const RemminaProtocolFeature remmina_plugin_vnc_features[] = { - { REMMINA_PROTOCOL_FEATURE_TYPE_PREF, REMMINA_PLUGIN_VNC_FEATURE_PREF_QUALITY, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_RADIO), "quality", quality_list }, - { 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_("Disable server input") }, - { 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_PREF, REMMINA_PLUGIN_VNC_FEATURE_PREF_QUALITY, GINT_TO_POINTER(REMMINA_PROTOCOL_FEATURE_PREF_RADIO), "quality", + quality_list }, + { 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_("Disable server input") }, + { 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 */ static RemminaProtocolPlugin remmina_plugin_vnc = { - REMMINA_PLUGIN_TYPE_PROTOCOL, // Type - "VNC", // Name - N_("VNC - Virtual Network Computing"), // Description - GETTEXT_PACKAGE, // Translation domain - VERSION, // Version number - "remmina-vnc", // Icon for normal connection - "remmina-vnc-ssh", // Icon for SSH connection - remmina_plugin_vnc_basic_settings, // Array for basic settings - remmina_plugin_vnc_advanced_settings, // Array for advanced settings - REMMINA_PROTOCOL_SSH_SETTING_TUNNEL, // SSH settings type - remmina_plugin_vnc_features, // Array for available features - remmina_plugin_vnc_init, // Plugin initialization - remmina_plugin_vnc_open_connection, // Plugin open connection - remmina_plugin_vnc_close_connection, // Plugin close connection - remmina_plugin_vnc_query_feature, // Query for available features - remmina_plugin_vnc_call_feature, // Call a feature - remmina_plugin_vnc_keystroke // Send a keystroke + REMMINA_PLUGIN_TYPE_PROTOCOL, // Type + "VNC", // Name + N_("VNC - Virtual Network Computing"), // Description + GETTEXT_PACKAGE, // Translation domain + VERSION, // Version number + "remmina-vnc", // Icon for normal connection + "remmina-vnc-ssh", // Icon for SSH connection + remmina_plugin_vnc_basic_settings, // Array for basic settings + remmina_plugin_vnc_advanced_settings, // Array for advanced settings + REMMINA_PROTOCOL_SSH_SETTING_TUNNEL, // SSH settings type + remmina_plugin_vnc_features, // Array for available features + remmina_plugin_vnc_init, // Plugin initialization + remmina_plugin_vnc_open_connection, // Plugin open connection + remmina_plugin_vnc_close_connection, // Plugin close connection + remmina_plugin_vnc_query_feature, // Query for available features + remmina_plugin_vnc_call_feature, // Call a feature + remmina_plugin_vnc_keystroke // Send a keystroke }; /* Protocol plugin definition and features */ static RemminaProtocolPlugin remmina_plugin_vnci = { - REMMINA_PLUGIN_TYPE_PROTOCOL, // Type - "VNCI", // Name - N_("VNC - Incoming Connection"), // Description - GETTEXT_PACKAGE, // Translation domain - VERSION, // Version number - "remmina-vnc", // Icon for normal connection - "remmina-vnc-ssh", // Icon for SSH connection - remmina_plugin_vnci_basic_settings, // Array for basic settings - remmina_plugin_vnc_advanced_settings, // Array for advanced settings - REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL, // SSH settings type - remmina_plugin_vnc_features, // Array for available features - remmina_plugin_vnc_init, // Plugin initialization - remmina_plugin_vnc_open_connection, // Plugin open connection - remmina_plugin_vnc_close_connection, // Plugin close connection - remmina_plugin_vnc_query_feature, // Query for available features - remmina_plugin_vnc_call_feature, // Call a feature - remmina_plugin_vnc_keystroke, // Send a keystroke - NULL // No screenshot support available + REMMINA_PLUGIN_TYPE_PROTOCOL, // Type + "VNCI", // Name + N_("VNC - Incoming Connection"), // Description + GETTEXT_PACKAGE, // Translation domain + VERSION, // Version number + "remmina-vnc", // Icon for normal connection + "remmina-vnc-ssh", // Icon for SSH connection + remmina_plugin_vnci_basic_settings, // Array for basic settings + remmina_plugin_vnc_advanced_settings, // Array for advanced settings + REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL, // SSH settings type + remmina_plugin_vnc_features, // Array for available features + remmina_plugin_vnc_init, // Plugin initialization + remmina_plugin_vnc_open_connection, // Plugin open connection + remmina_plugin_vnc_close_connection, // Plugin close connection + remmina_plugin_vnc_query_feature, // Query for available features + remmina_plugin_vnc_call_feature, // Call a feature + remmina_plugin_vnc_keystroke, // Send a keystroke + NULL // No screenshot support available }; G_MODULE_EXPORT gboolean @@ -2099,13 +1968,11 @@ remmina_plugin_entry(RemminaPluginService *service) bindtextdomain(GETTEXT_PACKAGE, REMMINA_RUNTIME_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); - if (!service->register_plugin((RemminaPlugin *) &remmina_plugin_vnc)) - { + if (!service->register_plugin((RemminaPlugin*)&remmina_plugin_vnc)) { return FALSE; } - if (!service->register_plugin((RemminaPlugin *) &remmina_plugin_vnci)) - { + if (!service->register_plugin((RemminaPlugin*)&remmina_plugin_vnci)) { return FALSE; } diff --git a/remmina-plugins/xdmcp/xdmcp_plugin.c b/remmina-plugins/xdmcp/xdmcp_plugin.c index 516497b48..7dfda59de 100644 --- a/remmina-plugins/xdmcp/xdmcp_plugin.c +++ b/remmina-plugins/xdmcp/xdmcp_plugin.c @@ -43,13 +43,12 @@ INCLUDE_GET_AVAILABLE_XDISPLAY #define REMMINA_PLUGIN_XDMCP_FEATURE_TOOL_SENDCTRLALTDEL 1 -#define GET_PLUGIN_DATA(gp) (RemminaPluginXdmcpData*) g_object_get_data(G_OBJECT(gp), "plugin-data"); +#define GET_PLUGIN_DATA(gp) (RemminaPluginXdmcpData*)g_object_get_data(G_OBJECT(gp), "plugin-data"); /* Forward declaration */ static RemminaProtocolPlugin remmina_plugin_xdmcp; -typedef struct _RemminaPluginXdmcpData -{ +typedef struct _RemminaPluginXdmcpData { GtkWidget *socket; gint socket_id; GPid pid; @@ -95,8 +94,7 @@ static gboolean remmina_plugin_xdmcp_start_xephyr(RemminaProtocolWidget *gp) remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); gpdata->display = remmina_get_available_xdisplay(); - if (gpdata->display == 0) - { + if (gpdata->display == 0) { remmina_plugin_service->protocol_plugin_set_error(gp, _("Run out of available local X display number.")); return FALSE; } @@ -115,50 +113,41 @@ static gboolean remmina_plugin_xdmcp_start_xephyr(RemminaProtocolWidget *gp) * As a workaround, a "Default" color depth will not add the -screen argument. */ i = remmina_plugin_service->file_get_int(remminafile, "colordepth", 8); - if (i >= 8) - { + if (i >= 8) { argv[argc++] = g_strdup("-screen"); argv[argc++] = g_strdup_printf("%ix%ix%i", - remmina_plugin_service->get_profile_remote_width(gp), - remmina_plugin_service->get_profile_remote_height(gp), i); + remmina_plugin_service->get_profile_remote_width(gp), + remmina_plugin_service->get_profile_remote_height(gp), i); } - if (i == 2) - { + if (i == 2) { argv[argc++] = g_strdup("-grayscale"); } - if (remmina_plugin_service->file_get_int(remminafile, "showcursor", FALSE)) - { + if (remmina_plugin_service->file_get_int(remminafile, "showcursor", FALSE)) { argv[argc++] = g_strdup("-host-cursor"); } - if (remmina_plugin_service->file_get_int(remminafile, "once", FALSE)) - { + if (remmina_plugin_service->file_get_int(remminafile, "once", FALSE)) { argv[argc++] = g_strdup("-once"); } /* Listen on protocol TCP */ - if (remmina_plugin_service->file_get_int(remminafile, "listen_on_tcp", FALSE)) - { + if (remmina_plugin_service->file_get_int(remminafile, "listen_on_tcp", FALSE)) { argv[argc++] = g_strdup("-listen"); argv[argc++] = g_strdup("tcp"); } - if (!remmina_plugin_service->file_get_int(remminafile, "ssh_enabled", FALSE)) - { + if (!remmina_plugin_service->file_get_int(remminafile, "ssh_enabled", FALSE)) { remmina_plugin_service->get_server_port(remmina_plugin_service->file_get_string(remminafile, "server"), 0, - &host, &i); + &host, &i); argv[argc++] = g_strdup("-query"); argv[argc++] = host; - if (i) - { + if (i) { argv[argc++] = g_strdup("-port"); argv[argc++] = g_strdup_printf("%i", i); } - } - else - { + }else { /* When the connection is through an SSH tunnel, it connects back to local unix socket, * so for security we can disable tcp listening */ argv[argc++] = g_strdup("-nolisten"); @@ -175,8 +164,7 @@ static gboolean remmina_plugin_xdmcp_start_xephyr(RemminaProtocolWidget *gp) for (i = 0; i < argc; i++) g_free(argv[i]); - if (!ret) - { + if (!ret) { remmina_plugin_service->protocol_plugin_set_error(gp, "%s", error->message); return FALSE; } @@ -185,7 +173,7 @@ static gboolean remmina_plugin_xdmcp_start_xephyr(RemminaProtocolWidget *gp) } static gboolean remmina_plugin_xdmcp_tunnel_init_callback(RemminaProtocolWidget *gp, gint remotedisplay, const gchar *server, - gint port) + gint port) { TRACE_CALL("__func__"); RemminaPluginXdmcpData *gpdata = GET_PLUGIN_DATA(gp); @@ -200,15 +188,12 @@ static gboolean remmina_plugin_xdmcp_tunnel_init_callback(RemminaProtocolWidget remmina_plugin_service->protocol_plugin_set_display(gp, gpdata->display); - if (remmina_plugin_service->file_get_string(remminafile, "exec")) - { + if (remmina_plugin_service->file_get_string(remminafile, "exec")) { return remmina_plugin_service->protocol_plugin_ssh_exec(gp, FALSE, "DISPLAY=localhost:%i.0 %s", remotedisplay, - remmina_plugin_service->file_get_string(remminafile, "exec")); - } - else - { + remmina_plugin_service->file_get_string(remminafile, "exec")); + }else { return remmina_plugin_service->protocol_plugin_ssh_exec(gp, TRUE, - "xqproxy -display %i -host %s -port %i -query -manage", remotedisplay, server, port); + "xqproxy -display %i -host %s -port %i -query -manage", remotedisplay, server, port); } } @@ -220,18 +205,13 @@ static gboolean remmina_plugin_xdmcp_main(RemminaProtocolWidget *gp) remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); - if (remmina_plugin_service->file_get_int(remminafile, "ssh_enabled", FALSE)) - { - if (!remmina_plugin_service->protocol_plugin_start_xport_tunnel(gp, remmina_plugin_xdmcp_tunnel_init_callback)) - { + if (remmina_plugin_service->file_get_int(remminafile, "ssh_enabled", FALSE)) { + if (!remmina_plugin_service->protocol_plugin_start_xport_tunnel(gp, remmina_plugin_xdmcp_tunnel_init_callback)) { gpdata->thread = 0; return FALSE; } - } - else - { - if (!remmina_plugin_xdmcp_start_xephyr(gp)) - { + }else { + if (!remmina_plugin_xdmcp_start_xephyr(gp)) { gpdata->thread = 0; return FALSE; } @@ -242,15 +222,14 @@ static gboolean remmina_plugin_xdmcp_main(RemminaProtocolWidget *gp) } static gpointer -remmina_plugin_xdmcp_main_thread (gpointer data) +remmina_plugin_xdmcp_main_thread(gpointer data) { TRACE_CALL("__func__"); - pthread_setcancelstate (PTHREAD_CANCEL_ENABLE, NULL); + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); CANCEL_ASYNC - if (!remmina_plugin_xdmcp_main ((RemminaProtocolWidget*) data)) - { - IDLE_ADD ((GSourceFunc) remmina_plugin_service->protocol_plugin_close_connection, data); + if (!remmina_plugin_xdmcp_main((RemminaProtocolWidget*)data)) { + IDLE_ADD((GSourceFunc)remmina_plugin_service->protocol_plugin_close_connection, data); } return NULL; } @@ -281,9 +260,8 @@ static gboolean remmina_plugin_xdmcp_open_connection(RemminaProtocolWidget *gp) RemminaFile *remminafile; gint width, height; - if (!remmina_plugin_service->gtksocket_available()) - { - remmina_plugin_service->protocol_plugin_set_error (gp, + if (!remmina_plugin_service->gtksocket_available()) { + remmina_plugin_service->protocol_plugin_set_error(gp, _("Protocol %s is unavailable because GtkSocket only works under Xorg"), remmina_plugin_xdmcp.name); return FALSE; @@ -299,23 +277,17 @@ static gboolean remmina_plugin_xdmcp_open_connection(RemminaProtocolWidget *gp) gpdata->socket_id = gtk_socket_get_id(GTK_SOCKET(gpdata->socket)); - if (remmina_plugin_service->file_get_int (remminafile, "ssh_enabled", FALSE)) - { - if (pthread_create (&gpdata->thread, NULL, remmina_plugin_xdmcp_main_thread, gp)) - { - remmina_plugin_service->protocol_plugin_set_error (gp, - "Failed to initialize pthread. Falling back to non-thread mode..."); + if (remmina_plugin_service->file_get_int(remminafile, "ssh_enabled", FALSE)) { + if (pthread_create(&gpdata->thread, NULL, remmina_plugin_xdmcp_main_thread, gp)) { + remmina_plugin_service->protocol_plugin_set_error(gp, + "Failed to initialize pthread. Falling back to non-thread mode..."); gpdata->thread = 0; return FALSE; - } - else - { + }else { return TRUE; } - } - else - { - return remmina_plugin_xdmcp_main (gp); + }else { + return remmina_plugin_xdmcp_main(gp); } } @@ -325,14 +297,12 @@ static gboolean remmina_plugin_xdmcp_close_connection(RemminaProtocolWidget *gp) TRACE_CALL("__func__"); RemminaPluginXdmcpData *gpdata = GET_PLUGIN_DATA(gp); - if (gpdata->thread) - { - pthread_cancel (gpdata->thread); - if (gpdata->thread) pthread_join (gpdata->thread, NULL); + if (gpdata->thread) { + pthread_cancel(gpdata->thread); + if (gpdata->thread) pthread_join(gpdata->thread, NULL); } - if (gpdata->pid) - { + if (gpdata->pid) { kill(gpdata->pid, SIGTERM); g_spawn_close_pid(gpdata->pid); gpdata->pid = 0; @@ -366,22 +336,21 @@ static void remmina_plugin_xdmcp_call_feature(RemminaProtocolWidget *gp, const R RemminaFile *remminafile; remminafile = remmina_plugin_service->protocol_plugin_get_file(gp); - switch (feature->id) - { - case REMMINA_PLUGIN_XDMCP_FEATURE_TOOL_SENDCTRLALTDEL: - remmina_plugin_xdmcp_send_ctrlaltdel(gp); - break; - default: - break; + switch (feature->id) { + case REMMINA_PLUGIN_XDMCP_FEATURE_TOOL_SENDCTRLALTDEL: + remmina_plugin_xdmcp_send_ctrlaltdel(gp); + break; + default: + break; } } /* Array of key/value pairs for color depths */ static gpointer colordepth_list[] = { - "0", N_("Default"), - "2", N_("Grayscale"), - "8", N_("256 colors"), + "0", N_("Default"), + "2", N_("Grayscale"), + "8", N_("256 colors"), "16", N_("High color (16 bit)"), "24", N_("True color (24 bit)"), NULL @@ -398,14 +367,14 @@ static gpointer colordepth_list[] = */ static const RemminaProtocolSetting remmina_plugin_xdmcp_basic_settings[] = { - { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, NULL, NULL, FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION, NULL, NULL, FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Color depth"), FALSE, colordepth_list, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "exec", N_("Startup program"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "showcursor", N_("Use local cursor"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "once", N_("Disconnect after one session"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "listen_on_tcp", N_("Listening connection on protocol TCP"), FALSE, NULL, NULL }, - { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } + { REMMINA_PROTOCOL_SETTING_TYPE_SERVER, NULL, NULL, FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION, NULL, NULL, FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Color depth"), FALSE, colordepth_list, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "exec", N_("Startup program"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "showcursor", N_("Use local cursor"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "once", N_("Disconnect after one session"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "listen_on_tcp", N_("Listening connection on protocol TCP"), FALSE, NULL, NULL }, + { REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL } }; /* Array for available features. @@ -413,30 +382,30 @@ static const RemminaProtocolSetting remmina_plugin_xdmcp_basic_settings[] = static const RemminaProtocolFeature remmina_plugin_xdmcp_features[] = { { REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_PLUGIN_XDMCP_FEATURE_TOOL_SENDCTRLALTDEL, N_("Send Ctrl+Alt+Delete"), NULL, NULL }, - { REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL } + { REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL } }; /* Protocol plugin definition and features */ static RemminaProtocolPlugin remmina_plugin_xdmcp = { - REMMINA_PLUGIN_TYPE_PROTOCOL, // Type - "XDMCP", // Name - N_("XDMCP - X Remote Session"), // Description - GETTEXT_PACKAGE, // Translation domain - VERSION, // Version number - "remmina-xdmcp", // Icon for normal connection - "remmina-xdmcp-ssh", // Icon for SSH connection - remmina_plugin_xdmcp_basic_settings, // Array for basic settings - NULL, // Array for advanced settings - REMMINA_PROTOCOL_SSH_SETTING_TUNNEL, // SSH settings type - remmina_plugin_xdmcp_features, // Array for available features - remmina_plugin_xdmcp_init, // Plugin initialization - remmina_plugin_xdmcp_open_connection, // Plugin open connection - remmina_plugin_xdmcp_close_connection, // Plugin close connection - remmina_plugin_xdmcp_query_feature, // Query for available features - remmina_plugin_xdmcp_call_feature, // Call a feature - NULL, // Send a keystroke - NULL // Screenshot + REMMINA_PLUGIN_TYPE_PROTOCOL, // Type + "XDMCP", // Name + N_("XDMCP - X Remote Session"), // Description + GETTEXT_PACKAGE, // Translation domain + VERSION, // Version number + "remmina-xdmcp", // Icon for normal connection + "remmina-xdmcp-ssh", // Icon for SSH connection + remmina_plugin_xdmcp_basic_settings, // Array for basic settings + NULL, // Array for advanced settings + REMMINA_PROTOCOL_SSH_SETTING_TUNNEL, // SSH settings type + remmina_plugin_xdmcp_features, // Array for available features + remmina_plugin_xdmcp_init, // Plugin initialization + remmina_plugin_xdmcp_open_connection, // Plugin open connection + remmina_plugin_xdmcp_close_connection, // Plugin close connection + remmina_plugin_xdmcp_query_feature, // Query for available features + remmina_plugin_xdmcp_call_feature, // Call a feature + NULL, // Send a keystroke + NULL // Screenshot }; G_MODULE_EXPORT gboolean @@ -448,8 +417,7 @@ remmina_plugin_entry(RemminaPluginService *service) bindtextdomain(GETTEXT_PACKAGE, REMMINA_RUNTIME_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); - if (!service->register_plugin((RemminaPlugin *) &remmina_plugin_xdmcp)) - { + if (!service->register_plugin((RemminaPlugin*)&remmina_plugin_xdmcp)) { return FALSE; } |