From 9362760d620015e0b80d44f20d73d77b8f759d38 Mon Sep 17 00:00:00 2001 From: Giovanni Panozzo Date: Tue, 16 Dec 2014 22:15:15 +0100 Subject: [PATCH 01/13] Fixes a crash when exporting RDP profile to .rdp file. Fixes #412. Also fixes https://bugs.launchpad.net/ubuntu/+source/remmina/+bug/714011 --- remmina-plugins/rdp/rdp_file.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/remmina-plugins/rdp/rdp_file.c b/remmina-plugins/rdp/rdp_file.c index 4ee497c033..1a3a6ffd34 100644 --- a/remmina-plugins/rdp/rdp_file.c +++ b/remmina-plugins/rdp/rdp_file.c @@ -253,17 +253,19 @@ gboolean remmina_rdp_file_export_channel(RemminaFile* remminafile, FILE* fp) const gchar* cs; fprintf(fp, "screen mode id:i:2\r\n"); - s = g_strdup(remmina_plugin_service->file_get_string(remminafile, "resolution")); - - p = strchr(s, 'x'); - - if (p) + cs = remmina_plugin_service->file_get_string(remminafile, "resolution"); + if (cs) { - *p++ = '\0'; - fprintf(fp, "desktopwidth:i:%s\r\n", s); - fprintf(fp, "desktopheight:i:%s\r\n", p); + s = g_strdup(cs); + p = strchr(s, 'x'); + if (p) + { + *p++ = '\0'; + fprintf(fp, "desktopwidth:i:%s\r\n", s); + fprintf(fp, "desktopheight:i:%s\r\n", p); + } + g_free(s); } - g_free(s); fprintf(fp, "session bpp:i:%i\r\n", remmina_plugin_service->file_get_int(remminafile, "colordepth", 8)); //fprintf(fp, "winposstr:s:0,1,123,34,931,661\r\n"); @@ -278,7 +280,8 @@ gboolean remmina_rdp_file_export_channel(RemminaFile* remminafile, FILE* fp) fprintf(fp, "disable themes:i:0\r\n"); fprintf(fp, "disable cursor setting:i:0\r\n"); fprintf(fp, "bitmapcachepersistenable:i:1\r\n"); - fprintf(fp, "full address:s:%s\r\n", remmina_plugin_service->file_get_string(remminafile, "server")); + cs = remmina_plugin_service->file_get_string(remminafile, "server"); + fprintf(fp, "full address:s:%s\r\n", cs ? cs : "" ); if (g_strcmp0(remmina_plugin_service->file_get_string(remminafile, "sound"), "local") == 0) fprintf(fp, "audiomode:i:0\r\n"); else if (g_strcmp0(remmina_plugin_service->file_get_string(remminafile, "sound"), "remote") == 0) From 19d0da1764e72f3bc84a626eed1db5c3222b379c Mon Sep 17 00:00:00 2001 From: Giovanni Panozzo Date: Sun, 21 Dec 2014 19:51:32 +0100 Subject: [PATCH 02/13] Clipboard fixes Clipboard is still having problems. This commit should help to avoid crashes line the one reported in issue #411 --- remmina-plugins/rdp/rdp_cliprdr.c | 155 +++++++++++++++++++++++++----- 1 file changed, 131 insertions(+), 24 deletions(-) diff --git a/remmina-plugins/rdp/rdp_cliprdr.c b/remmina-plugins/rdp/rdp_cliprdr.c index 84f938a24d..43b3f0f1bf 100644 --- a/remmina-plugins/rdp/rdp_cliprdr.c +++ b/remmina-plugins/rdp/rdp_cliprdr.c @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, + * Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. * * In addition, as a special exception, the copyright holders give @@ -40,6 +40,75 @@ #include #include +#pragma pack(push,1) +typedef unsigned int wDWORD; +typedef unsigned short wWORD; +typedef int wLONG; +typedef unsigned char wBYTE; +typedef wLONG FXPT2DOT30; +typedef struct tagCIEXYZ +{ + FXPT2DOT30 ciexyzX; + FXPT2DOT30 ciexyzY; + FXPT2DOT30 ciexyzZ; +} CIEXYZ; + +typedef struct tagICEXYZTRIPLE +{ + CIEXYZ ciexyzRed; + CIEXYZ ciexyzGreen; + CIEXYZ ciexyzBlue; +} CIEXYZTRIPLE; +typedef struct +{ + wDWORD bV5Size; + wLONG bV5Width; + wLONG bV5Height; + wWORD bV5Planes; + wWORD bV5BitCount; + wDWORD bV5Compression; + wDWORD bV5SizeImage; + wLONG bV5XPelsPerMeter; + wLONG bV5YPelsPerMeter; + wDWORD bV5ClrUsed; + wDWORD bV5ClrImportant; + wDWORD bV5RedMask; + wDWORD bV5GreenMask; + wDWORD bV5BlueMask; + wDWORD bV5AlphaMask; + wDWORD bV5CSType; + CIEXYZTRIPLE bV5Endpoints; + wDWORD bV5GammaRed; + wDWORD bV5GammaGreen; + wDWORD bV5GammaBlue; + wDWORD bV5Intent; + wDWORD bV5ProfileData; + wDWORD bV5ProfileSize; + wDWORD bV5Reserved; +} BITMAPV5HEADER; +typedef struct tagRGBQUAD +{ + wBYTE rgbBlue; + wBYTE rgbGreen; + wBYTE rgbRed; + wBYTE rgbReserved; +} RGBQUAD; +typedef struct tagBITMAPINFOHEADER +{ + wDWORD biSize; + wLONG biWidth; + wLONG biHeight; + wWORD biPlanes; + wWORD biBitCount; + wDWORD biCompression; + wDWORD biSizeImage; + wLONG biXPelsPerMeter; + wLONG biYPelsPerMeter; + wDWORD biClrUsed; + wDWORD biClrImportant; +} BITMAPINFOHEADER; +#pragma pack(pop) + UINT32 remmina_rdp_cliprdr_get_format_from_gdkatom(GdkAtom atom) { @@ -186,11 +255,14 @@ void remmina_rdp_cliprdr_process_format_list(RemminaProtocolWidget* gp, RDP_CB_F GdkAtom atom = gdk_atom_intern("image/jpeg", TRUE); gtk_target_list_add(list, atom, 0, CB_FORMAT_JPEG); } + /* it seems that in freerdp 1.1 PNG images are not correctly + * received from server. So just disable it. if (event->formats[i] == CB_FORMAT_PNG) { GdkAtom atom = gdk_atom_intern("image/png", TRUE); gtk_target_list_add(list, atom, 0, CB_FORMAT_PNG); } + */ } ui = g_new0(RemminaPluginRdpUiObject, 1); @@ -228,33 +300,46 @@ void remmina_rdp_cliprdr_process_data_response(RemminaProtocolWidget* gp, RDP_CB { case CB_FORMAT_UNICODETEXT: { - size = ConvertFromUnicode(CP_UTF8, 0, (WCHAR*)data, size / 2, (CHAR**)&data, 0, NULL, NULL); - crlf2lf(data, &size); - output = data; + size = ConvertFromUnicode(CP_UTF8, 0, (WCHAR*)data, size / 2, (CHAR**)&output, 0, NULL, NULL); + crlf2lf(output, &size); break; } case CB_FORMAT_TEXT: case CB_FORMAT_HTML: { - crlf2lf(data, &size); - output = data; + output = (gpointer)calloc(1, size + 1); + if (output) { + memcpy(output, data, size); + crlf2lf(output, &size); + } break; } case CB_FORMAT_DIB: { wStream* s; - UINT16 bpp; UINT32 offset; - UINT32 ncolors; - - s = Stream_New(data, size); - Stream_Seek(s, 14); - Stream_Read_UINT16(s, bpp); - Stream_Read_UINT32(s, ncolors); - offset = 14 + 40 + (bpp <= 8 ? (ncolors == 0 ? (1 << bpp) : ncolors) * 4 : 0); - Stream_Free(s, TRUE); + 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'); @@ -263,15 +348,23 @@ void remmina_rdp_cliprdr_process_data_response(RemminaProtocolWidget* gp, RDP_CB 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(); - gdk_pixbuf_loader_write(pixbuf, data, size, NULL); - gdk_pixbuf_loader_close(pixbuf, NULL); - Stream_Free(s, TRUE); - output = g_object_ref(gdk_pixbuf_loader_get_pixbuf(pixbuf)); + 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) ) { + perr = NULL; + remmina_plugin_service->log_printf("[RDP] rdp_cliprdr: gdk_pixbuf_loader_close() returned error %s\n", perr->message); + } + Stream_Free(s, TRUE); + output = g_object_ref(gdk_pixbuf_loader_get_pixbuf(pixbuf)); + } g_object_unref(pixbuf); break; } @@ -288,7 +381,11 @@ void remmina_rdp_cliprdr_process_data_response(RemminaProtocolWidget* gp, RDP_CB } } } - g_async_queue_push(rfi->clipboard_queue, output); + + if (rfi->clipboard_queue) { + g_async_queue_push(rfi->clipboard_queue, output); + } + } void remmina_rdp_channel_cliprdr_process(RemminaProtocolWidget* gp, wMessage* event) @@ -319,6 +416,10 @@ void remmina_rdp_cliprdr_request_data(GtkClipboard *clipboard, GtkSelectionData gpointer data; RDP_CB_DATA_REQUEST_EVENT* event; rfContext* rfi = GET_DATA(gp); + GAsyncQueue* q; + + if (rfi->clipboard_queue != NULL) + return; target = gtk_selection_data_get_target(selection_data); rfi->format = remmina_rdp_cliprdr_get_format_from_gdkatom(target); @@ -330,7 +431,7 @@ void remmina_rdp_cliprdr_request_data(GtkClipboard *clipboard, GtkSelectionData event->format = rfi->format; freerdp_channels_send_event(rfi->instance->context->channels, (wMessage*) event); - data = g_async_queue_timeout_pop(rfi->clipboard_queue, 1000000); + data = g_async_queue_timeout_pop(rfi->clipboard_queue, 2000000); if (data != NULL) { if (info == CB_FORMAT_PNG || info == CB_FORMAT_DIB || info == CB_FORMAT_JPEG) @@ -341,8 +442,14 @@ void remmina_rdp_cliprdr_request_data(GtkClipboard *clipboard, GtkSelectionData else { gtk_selection_data_set_text(selection_data, data, -1); + free(data); } } + + q = rfi->clipboard_queue; + rfi->clipboard_queue = NULL; + g_async_queue_unref(q); + } void remmina_rdp_cliprdr_empty_clipboard(GtkClipboard *clipboard, RemminaProtocolWidget* gp) @@ -384,7 +491,7 @@ int remmina_rdp_cliprdr_send_format_list(RemminaProtocolWidget* gp, RemminaPlugi } else event->num_formats = 0; - + return freerdp_channels_send_event(rfi->instance->context->channels, (wMessage*) event); } From bbe4d1a5e31f7b3cb10514e95a8cabdd12afdf59 Mon Sep 17 00:00:00 2001 From: Giovanni Panozzo Date: Mon, 22 Dec 2014 15:25:54 +0100 Subject: [PATCH 03/13] Fix null pointer use --- remmina-plugins/rdp/rdp_cliprdr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remmina-plugins/rdp/rdp_cliprdr.c b/remmina-plugins/rdp/rdp_cliprdr.c index 43b3f0f1bf..6a0a9c5af4 100644 --- a/remmina-plugins/rdp/rdp_cliprdr.c +++ b/remmina-plugins/rdp/rdp_cliprdr.c @@ -359,8 +359,8 @@ void remmina_rdp_cliprdr_process_data_response(RemminaProtocolWidget* gp, RDP_CB else { if ( !gdk_pixbuf_loader_close(pixbuf, &perr) ) { - perr = NULL; 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)); From 0ca2a23246261f0952b8ac04ec7f017f371ba79f Mon Sep 17 00:00:00 2001 From: Raphael Kubo da Costa Date: Wed, 31 Dec 2014 15:30:09 +0200 Subject: [PATCH 04/13] remmina: Actually install its headers. The installation of the headers in remmina/include/remmina has been broken ever since Remmina moved away from autotools, as the path specified in the call to install() did not exist. Move the install() call to remmina/ so that it works, and add a trailing / to the path so that we do not end up with $CMAKE_INSTALL_PREFIX/include/remmina/remmina. --- CMakeLists.txt | 2 -- remmina/CMakeLists.txt | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0465af36f6..9227e4493c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,5 +127,3 @@ if(GTK_FOUND) endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h) - -install(DIRECTORY include/remmina DESTINATION include/remmina FILES_MATCHING PATTERN "*.h") diff --git a/remmina/CMakeLists.txt b/remmina/CMakeLists.txt index e7494f699b..1236d2f589 100644 --- a/remmina/CMakeLists.txt +++ b/remmina/CMakeLists.txt @@ -176,7 +176,7 @@ add_subdirectory(desktop) add_subdirectory(external_tools) install(TARGETS remmina DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(DIRECTORY include/remmina/ DESTINATION include/remmina FILES_MATCHING PATTERN "*.h") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/remmina.pc.in ${CMAKE_CURRENT_BINARY_DIR}/remmina.pc @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/remmina.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - From 8c2f156a4e0561f69bcf784ba136e6b0130c05dd Mon Sep 17 00:00:00 2001 From: Muflone Date: Fri, 26 Dec 2014 23:32:42 +0100 Subject: [PATCH 05/13] Expose the arguments in the help text and parse --help and -h arguments locally --- remmina/src/remmina.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/remmina/src/remmina.c b/remmina/src/remmina.c index bbe76fce81..22f6262adf 100644 --- a/remmina/src/remmina.c +++ b/remmina/src/remmina.c @@ -206,9 +206,42 @@ gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), REMMINA_DATADIR G_DIR_SEPARATOR_S "icons"); } +static gboolean remmina_on_local_cmdline (GApplication *app, gchar ***arguments, gint *exit_status) +{ + /* Partially unimplemented local command line only used to append the + * command line arguments to the help text and to parse the --help/-h + * arguments locally instead of forwarding them to the remote instance */ + GOptionContext *context; + gint i = 0; + gchar **argv; + + context = g_option_context_new("- The GTK+ Remote Desktop Client"); + g_option_context_add_group(context, gtk_get_option_group(FALSE)); + g_option_context_set_help_enabled(context, TRUE); + g_option_context_add_main_entries(context, remmina_options, GETTEXT_PACKAGE); + g_option_context_set_translation_domain(context, GETTEXT_PACKAGE); + *exit_status = 0; + + // Parse the command line arguments for --help/-h + argv = *arguments; + for (i = 0; argv[i] != NULL; i++) + { + if ((g_strcmp0(argv[i], "--help") == 0 || g_strcmp0(argv[i], "-h") == 0)) { + g_print("%s", g_option_context_get_help(context, TRUE, NULL)); + *exit_status = EXIT_FAILURE; + } + } + g_option_context_free(context); + // Exit from the local instance whenever the exit status is not zero + if (*exit_status != 0) + exit(*exit_status); + return FALSE; +} + int main(int argc, char* argv[]) { - GApplication* app; + GApplication *app; + GApplicationClass *app_class; int status; bindtextdomain(GETTEXT_PACKAGE, REMMINA_LOCALEDIR); @@ -232,6 +265,8 @@ int main(int argc, char* argv[]) gtk_init(&argc, &argv); app = g_application_new("org.Remmina", G_APPLICATION_HANDLES_COMMAND_LINE); + app_class = G_APPLICATION_CLASS(G_OBJECT_GET_CLASS (app)); + app_class->local_command_line = remmina_on_local_cmdline; g_signal_connect(app, "startup", G_CALLBACK(remmina_on_startup), NULL); g_signal_connect(app, "command-line", G_CALLBACK(remmina_on_command_line), NULL); g_application_set_inactivity_timeout(app, 10000); @@ -249,4 +284,3 @@ int main(int argc, char* argv[]) return status; } - From 0ebb4b2f955e01f2d8b21c457553ce8b735785a1 Mon Sep 17 00:00:00 2001 From: Muflone Date: Sat, 27 Dec 2014 12:07:53 +0100 Subject: [PATCH 06/13] Wrapped line --- remmina/src/remmina.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/remmina/src/remmina.c b/remmina/src/remmina.c index 22f6262adf..8ca5dd191f 100644 --- a/remmina/src/remmina.c +++ b/remmina/src/remmina.c @@ -226,7 +226,8 @@ static gboolean remmina_on_local_cmdline (GApplication *app, gchar ***arguments, argv = *arguments; for (i = 0; argv[i] != NULL; i++) { - if ((g_strcmp0(argv[i], "--help") == 0 || g_strcmp0(argv[i], "-h") == 0)) { + if ((g_strcmp0(argv[i], "--help") == 0 || g_strcmp0(argv[i], "-h") == 0)) + { g_print("%s", g_option_context_get_help(context, TRUE, NULL)); *exit_status = EXIT_FAILURE; } From 0914f0ddf2b6e5e5fd0ca8be80686396dc6ddc50 Mon Sep 17 00:00:00 2001 From: Muflone Date: Sun, 28 Dec 2014 20:56:06 +0100 Subject: [PATCH 07/13] Added a check for GtkToggleToolButtons to position the popup menu under --- remmina/src/remmina_public.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/remmina/src/remmina_public.c b/remmina/src/remmina_public.c index d242ee51af..a480d5bb13 100644 --- a/remmina/src/remmina_public.c +++ b/remmina/src/remmina_public.c @@ -316,7 +316,15 @@ void remmina_public_popup_position(GtkMenu *menu, gint *x, gint *y, gboolean *pu } gdk_window_get_origin(gtk_widget_get_window(widget), &tx, &ty); gtk_widget_get_allocation(widget, &allocation); - if (gtk_widget_get_has_window(widget)) + /* I'm unsure why the author made the check about a GdkWindow inside the + * widget argument. This function generally is called passing by a ToolButton + * which hasn't any GdkWindow, therefore the positioning is wrong + * I think the gtk_widget_get_has_window() check should be removed + * + * While leaving the previous check intact I'm checking also if the provided + * widget is a GtkToggleToolButton and position the menu accordingly. */ + if (gtk_widget_get_has_window(widget) || + g_strcmp0(gtk_widget_get_name(widget), "GtkToggleToolButton") == 0) { tx += allocation.x; ty += allocation.y; From b1aaff53e26bee64a702ec940ecb117e7c213e4a Mon Sep 17 00:00:00 2001 From: Antonio Guillen Date: Mon, 9 Feb 2015 19:56:54 +0100 Subject: [PATCH 08/13] Update es.po Update translations --- remmina/po/es.po | 49 ++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/remmina/po/es.po b/remmina/po/es.po index 759cc29409..8f7a4a740d 100644 --- a/remmina/po/es.po +++ b/remmina/po/es.po @@ -209,7 +209,7 @@ msgstr "Desactivar icono en el área de notificación" #: remmina/src/remmina_pref_dialog.c:555 msgid "Start Remmina in tray icon at user logon" -msgstr "" +msgstr "Mostrar el icono de Remmina en el área de notificación al iniciar sesión" #: remmina/src/remmina_pref_dialog.c:563 msgid "Minimize windows to tray" @@ -320,11 +320,11 @@ msgstr "Elija un servidor de escritorio remoto" #: remmina/src/remmina_file_editor.c:138 remmina/src/remmina_file_editor.c:321 #: remmina/src/remmina_file_editor.c:1235 msgid "_Cancel" -msgstr "" +msgstr "_Cancelar" #: remmina/src/remmina_file_editor.c:139 msgid "_OK" -msgstr "" +msgstr "_Aceptar" #: remmina/src/remmina_file_editor.c:313 remmina/src/remmina_file_editor.c:320 #: remmina-plugins/nx/nx_plugin.c:625 @@ -333,7 +333,7 @@ msgstr "Archivo de identidad" #: remmina/src/remmina_file_editor.c:322 msgid "_Open" -msgstr "" +msgstr "_Abrir" #: remmina/src/remmina_file_editor.c:360 remmina/src/remmina_file_editor.c:843 #: remmina/src/remmina_file_editor.c:856 remmina/src/remmina_main.c:1300 @@ -430,11 +430,11 @@ msgstr "Preferencias del escritorio remoto" #: remmina/src/remmina_file_editor.c:1228 msgid "_Save" -msgstr "" +msgstr "_Guardar" #: remmina/src/remmina_file_editor.c:1240 msgid "Connect" -msgstr "" +msgstr "Conectar" #: remmina/src/remmina_file_editor.c:1253 #: remmina-plugins/xdmcp/xdmcp_plugin.c:341 @@ -525,7 +525,7 @@ msgstr "El cliente de escritorio remoto en GTK+" #: remmina/src/remmina_about.c:93 msgid "translator-credits" -msgstr "" +msgstr "Créditos (Traducción)" "Julio Napurí Carlos \n" "\n" "Launchpad Contributions:\n" @@ -537,6 +537,9 @@ msgstr "" " Martín V. https://launchpad.net/~martinvukovic\n" " Moritatux https://launchpad.net/~moritatux\n" " Paco Molinero https://launchpad.net/~franciscomol" +"\n" +"Github Contributions:\n" +"Antonio Guillen https://github.com/agdg" #: remmina/src/remmina_chat_window.c:178 #, c-format @@ -545,7 +548,7 @@ msgstr "Conversando con %s" #: remmina/src/remmina_chat_window.c:226 msgid "_Send" -msgstr "E_nviar" +msgstr "_Enviar" #: remmina/src/remmina_chat_window.c:236 msgid "_Clear" @@ -577,7 +580,7 @@ msgstr "Subir" #: remmina/src/remmina_ftp_client.c:683 msgid "_Delete" -msgstr "" +msgstr "_Borrar" #: remmina/src/remmina_ftp_client.c:777 msgid "Go to home folder" @@ -799,7 +802,7 @@ msgstr "_Herramientas" #: remmina/src/remmina_main.c:863 msgid "_Help" -msgstr "Ay_uda" +msgstr "_Ayuda" #: remmina/src/remmina_main.c:865 msgid "Create a new remote desktop file" @@ -843,7 +846,7 @@ msgstr "Exportar" #: remmina/src/remmina_main.c:901 msgid "External Tools" -msgstr "" +msgstr "Herramientas externas" #: remmina/src/remmina_main.c:908 msgid "Toolbar" @@ -876,7 +879,7 @@ msgstr "Cliente de escritorio remoto Remmina" #: remmina/src/remmina_main.c:1262 msgid "Connect !" -msgstr "" +msgstr "Conectar!" #: remmina/src/remmina_sftp_plugin.c:258 msgid "Show Hidden Files" @@ -973,7 +976,7 @@ msgstr "El siguiente archivo ya existe en la carpeta de destino:" #: remmina/src/remmina_protocol_widget.c:124 #, c-format msgid "Connecting to '%s'..." -msgstr "Conectando con «%s»…" +msgstr "Conectando con '%s'..." #: remmina/src/remmina_protocol_widget.c:201 #, c-format @@ -1039,11 +1042,11 @@ msgstr "Abrir en ventana principal" #: remmina/src/remmina_icon.c:133 msgid "_Preferences" -msgstr "" +msgstr "_Preferencias" #: remmina/src/remmina_icon.c:139 msgid "_About" -msgstr "" +msgstr "_Acerca de" #: remmina/src/remmina_icon.c:149 msgid "Enable Service Discovery" @@ -1051,7 +1054,7 @@ msgstr "Habilitar descubrimiento de servicios" #: remmina/src/remmina_icon.c:164 msgid "_Quit" -msgstr "" +msgstr "_Salir" #: remmina/src/remmina_icon.c:395 remmina/src/remmina_icon.c:488 msgid "Remmina Applet" @@ -1081,7 +1084,7 @@ msgstr "Guardar contraseña" #: remmina/src/remmina_init_dialog.c:383 msgid "Certificate Details:" -msgstr "" +msgstr "Detalles del Certificado:" #: remmina/src/remmina_init_dialog.c:396 remmina/src/remmina_init_dialog.c:473 msgid "Subject:" @@ -1101,11 +1104,11 @@ msgstr "¿Aceptar certificado?" #: remmina/src/remmina_init_dialog.c:460 msgid "Certificate Changed! Details:" -msgstr "" +msgstr "El Certificado ha cambiado! Detalles:" #: remmina/src/remmina_init_dialog.c:494 msgid "Old Fingerprint:" -msgstr "" +msgstr "Antigua huella digital:" #: remmina/src/remmina_init_dialog.c:504 msgid "New Fingerprint:" @@ -1113,7 +1116,7 @@ msgstr "" #: remmina/src/remmina_init_dialog.c:515 msgid "Accept Changed Certificate?" -msgstr "" +msgstr "¿Aceptar el Nuevo Certificado?" #: remmina/src/remmina_init_dialog.c:596 msgid "CA certificate" @@ -1305,11 +1308,13 @@ msgid "" "Authentication to RDP server %s failed.\n" "Check username, password and domain." msgstr "" +"La autentificación con el servidor RDP %s ha fallado.\n" +"Compruebe el usuario, contraseña y dominio" #: remmina-plugins/rdp/rdp_plugin.c:896 #, c-format msgid "Connection to RDP server %s failed." -msgstr "" +msgstr "La conexión con el servidor RDP %s ha fallado" #: remmina-plugins/rdp/rdp_plugin.c:899 #, c-format @@ -1382,7 +1387,7 @@ msgstr "Impresoras locales compartidas" #: remmina-plugins/rdp/rdp_plugin.c:1133 msgid "Share smartcard" -msgstr "" +msgstr "Compartir tarjeta inteligente" #: remmina-plugins/rdp/rdp_plugin.c:1135 msgid "Attach to console (Windows 2003 / 2003 R2)" From 2b377188973d08a19a9fa8dad563a1bae26179d3 Mon Sep 17 00:00:00 2001 From: Giovanni Panozzo Date: Wed, 25 Mar 2015 23:58:58 +0100 Subject: [PATCH 09/13] Fix for notebook tab drag and drop, fixes issues #529 #478 --- remmina/src/remmina_connection_window.c | 58 +++++++++++++++---------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/remmina/src/remmina_connection_window.c b/remmina/src/remmina_connection_window.c index e40ba7f532..5bc123cdda 100644 --- a/remmina/src/remmina_connection_window.c +++ b/remmina/src/remmina_connection_window.c @@ -139,6 +139,8 @@ struct _RemminaConnectionHolder static void remmina_connection_holder_create_scrolled(RemminaConnectionHolder* cnnhld, RemminaConnectionObject* cnnobj); static void remmina_connection_holder_create_fullscreen(RemminaConnectionHolder* cnnhld, RemminaConnectionObject* cnnobj, gint view_mode); +static gboolean remmina_connection_window_hostkey_func(RemminaProtocolWidget* gp, guint keyval, gboolean release, + RemminaConnectionHolder* cnnhld); #if GTK_VERSION == 3 static void remmina_connection_window_class_init(RemminaConnectionWindowClass* klass) @@ -1995,28 +1997,24 @@ static void remmina_connection_window_initialize_notebook(GtkNotebook* to, GtkNo else { /* View mode changed. Migrate all existing connections to the new notebook */ - c = gtk_notebook_get_current_page(from); - n = gtk_notebook_get_n_pages(from); - for (i = 0; i < n; i++) - { - widget = gtk_notebook_get_nth_page(from, i); - cnnobj = (RemminaConnectionObject*) g_object_get_data(G_OBJECT(widget), "cnnobj"); - - tab = remmina_connection_object_create_tab(cnnobj); - remmina_connection_object_append_page(cnnobj, to, tab, view_mode); - -#if GTK_VERSION == 3 - /* Reparent cnnobj->viewport */ - g_object_ref(cnnobj->viewport); - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(cnnobj->viewport)), cnnobj->viewport); - gtk_container_add(GTK_CONTAINER(cnnobj->scrolled_container), cnnobj->viewport ); - g_object_unref(cnnobj->viewport); -#elif GTK_VERSION == 2 - gtk_widget_reparent(cnnobj->viewport, cnnobj->scrolled_container); -#endif + if (from != NULL && GTK_IS_NOTEBOOK(from)) { + c = gtk_notebook_get_current_page(from); + n = gtk_notebook_get_n_pages(from); + for (i = 0; i < n; i++) + { + widget = gtk_notebook_get_nth_page(from, i); + cnnobj = (RemminaConnectionObject*) g_object_get_data(G_OBJECT(widget), "cnnobj"); + + tab = remmina_connection_object_create_tab(cnnobj); + remmina_connection_object_append_page(cnnobj, to, tab, view_mode); + /* Reparent cnnobj->viewport */ + G_GNUC_BEGIN_IGNORE_DEPRECATIONS + gtk_widget_reparent(cnnobj->viewport, cnnobj->scrolled_container); + G_GNUC_END_IGNORE_DEPRECATIONS + } + gtk_notebook_set_current_page(to, c); } - gtk_notebook_set_current_page(to, c); } } @@ -2109,6 +2107,7 @@ remmina_connection_holder_on_notebook_create_window(GtkNotebook* notebook, GtkWi srccnnwin = REMMINA_CONNECTION_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(notebook))); dstcnnwin = REMMINA_CONNECTION_WINDOW(remmina_widget_pool_find_by_window(REMMINA_TYPE_CONNECTION_WINDOW, window)); + if (srccnnwin == dstcnnwin) return NULL; @@ -2125,12 +2124,23 @@ remmina_connection_holder_on_notebook_create_window(GtkNotebook* notebook, GtkWi else { cnnobj->cnnhld = g_new0(RemminaConnectionHolder, 1); + if (!cnnobj->cnnhld->cnnwin) + { + /* Create a new scrolled window to accomodate the dropped connection */ + remmina_connection_holder_create_scrolled(cnnobj->cnnhld, NULL); + + /* We must resize the new window here: remmina_connection_holder_check_resize() failed + * to set initial size because it has no notebook page on the window. So, we do resize + * manually here */ + gtk_window_resize( GTK_WINDOW(cnnobj->cnnhld->cnnwin), + remmina_file_get_int (cnnobj->remmina_file, "window_width", 640), + remmina_file_get_int (cnnobj->remmina_file, "window_height", 480)); + } } - g_signal_emit_by_name(cnnobj->proto, "connect", cnnobj); - gtk_notebook_remove_page(GTK_NOTEBOOK(srccnnwin->priv->notebook), srcpagenum); - - return NULL; + remmina_protocol_widget_set_hostkey_func(REMMINA_PROTOCOL_WIDGET(cnnobj->proto), + (RemminaHostkeyFunc) remmina_connection_window_hostkey_func, cnnobj->cnnhld); + return GTK_NOTEBOOK(cnnobj->cnnhld->cnnwin->priv->notebook); } static GtkWidget* From a9f1fbe24d7c785c9d78e872971cfe03af1179f5 Mon Sep 17 00:00:00 2001 From: Rene Rheaume Date: Sat, 11 Apr 2015 12:26:20 -0400 Subject: [PATCH 10/13] Tentatively correct widget positions of the RDP tab in Remmina settings on GTK+ 2 --- remmina-plugins/rdp/rdp_settings.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/remmina-plugins/rdp/rdp_settings.c b/remmina-plugins/rdp/rdp_settings.c index 228de63b9a..3df335879c 100644 --- a/remmina-plugins/rdp/rdp_settings.c +++ b/remmina-plugins/rdp/rdp_settings.c @@ -301,7 +301,7 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) gtk_grid_set_row_spacing(GTK_GRID(grid), 4); gtk_grid_set_column_spacing(GTK_GRID(grid), 4); #else - gtk_table_resize(GTK_TABLE(grid), 8, 3); + gtk_table_resize(GTK_TABLE(grid), 7, 6); gtk_table_set_homogeneous(GTK_TABLE(grid), FALSE); gtk_container_set_border_width(GTK_CONTAINER(grid), 8); gtk_table_set_row_spacings(GTK_TABLE(grid), 4); @@ -312,12 +312,12 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new(_("Keyboard layout")); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); - remmina_rdp_settings_grid_attach(grid, widget, 0, 0, 1, 1); + remmina_rdp_settings_grid_attach(grid, widget, 0, 0, 3, 1); grid->keyboard_layout_store = gtk_list_store_new(2, G_TYPE_UINT, G_TYPE_STRING); widget = gtk_combo_box_new_with_model(GTK_TREE_MODEL(grid->keyboard_layout_store)); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 0, 4, 1); + remmina_rdp_settings_grid_attach(grid, widget, 3, 0, 3, 1); renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); @@ -327,14 +327,14 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new("-"); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); - remmina_rdp_settings_grid_attach(grid, widget, 1, 1, 4, 2); + remmina_rdp_settings_grid_attach(grid, widget, 3, 1, 3, 1); grid->keyboard_layout_label = widget; remmina_rdp_settings_grid_load_layout(grid); widget = gtk_check_button_new_with_label(_("Use client keyboard mapping")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 3, 3, 3); + remmina_rdp_settings_grid_attach(grid, widget, 3, 2, 3, 1); grid->use_client_keymap_check = widget; s = remmina_plugin_service->pref_get_value("rdp_use_client_keymap"); @@ -345,12 +345,12 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new(_("Quality option")); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); - remmina_rdp_settings_grid_attach(grid, widget, 0, 6, 1, 4); + remmina_rdp_settings_grid_attach(grid, widget, 0, 3, 3, 1); grid->quality_store = gtk_list_store_new(2, G_TYPE_UINT, G_TYPE_STRING); widget = gtk_combo_box_new_with_model(GTK_TREE_MODEL(grid->quality_store)); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 6, 4, 4); + remmina_rdp_settings_grid_attach(grid, widget, 3, 3, 3, 1); renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); @@ -363,56 +363,56 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_check_button_new_with_label(_("Wallpaper")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 10, 2, 5); + remmina_rdp_settings_grid_attach(grid, widget, 0, 4, 3, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->wallpaper_check = widget; widget = gtk_check_button_new_with_label(_("Window drag")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 10, 3, 5); + remmina_rdp_settings_grid_attach(grid, widget, 3, 4, 3, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->windowdrag_check = widget; widget = gtk_check_button_new_with_label(_("Menu animation")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 13, 2, 6); + remmina_rdp_settings_grid_attach(grid, widget, 0, 5, 3, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->menuanimation_check = widget; widget = gtk_check_button_new_with_label(_("Theme")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 13, 3, 6); + remmina_rdp_settings_grid_attach(grid, widget, 3, 5, 3, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->theme_check = widget; widget = gtk_check_button_new_with_label(_("Cursor shadow")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 16, 2, 7); + remmina_rdp_settings_grid_attach(grid, widget, 0, 5, 3, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->cursorshadow_check = widget; widget = gtk_check_button_new_with_label(_("Cursor blinking")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 16, 3, 7); + remmina_rdp_settings_grid_attach(grid, widget, 3, 5, 3, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->cursorblinking_check = widget; widget = gtk_check_button_new_with_label(_("Font smoothing")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 19, 2, 8); + remmina_rdp_settings_grid_attach(grid, widget, 0, 6, 3, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->fontsmoothing_check = widget; widget = gtk_check_button_new_with_label(_("Composition")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 19, 3, 8); + remmina_rdp_settings_grid_attach(grid, widget, 3, 6, 3, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->composition_check = widget; From 17defefb33e53f44cae27e795200c3caa47002ce Mon Sep 17 00:00:00 2001 From: Rene Rheaume Date: Sat, 11 Apr 2015 13:57:10 -0400 Subject: [PATCH 11/13] Revert "Tentatively correct widget positions of the RDP tab in Remmina settings on GTK+ 2" This reverts commit a9f1fbe24d7c785c9d78e872971cfe03af1179f5. --- remmina-plugins/rdp/rdp_settings.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/remmina-plugins/rdp/rdp_settings.c b/remmina-plugins/rdp/rdp_settings.c index 3df335879c..228de63b9a 100644 --- a/remmina-plugins/rdp/rdp_settings.c +++ b/remmina-plugins/rdp/rdp_settings.c @@ -301,7 +301,7 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) gtk_grid_set_row_spacing(GTK_GRID(grid), 4); gtk_grid_set_column_spacing(GTK_GRID(grid), 4); #else - gtk_table_resize(GTK_TABLE(grid), 7, 6); + gtk_table_resize(GTK_TABLE(grid), 8, 3); gtk_table_set_homogeneous(GTK_TABLE(grid), FALSE); gtk_container_set_border_width(GTK_CONTAINER(grid), 8); gtk_table_set_row_spacings(GTK_TABLE(grid), 4); @@ -312,12 +312,12 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new(_("Keyboard layout")); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); - remmina_rdp_settings_grid_attach(grid, widget, 0, 0, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 0, 0, 1, 1); grid->keyboard_layout_store = gtk_list_store_new(2, G_TYPE_UINT, G_TYPE_STRING); widget = gtk_combo_box_new_with_model(GTK_TREE_MODEL(grid->keyboard_layout_store)); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 0, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 1, 0, 4, 1); renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); @@ -327,14 +327,14 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new("-"); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); - remmina_rdp_settings_grid_attach(grid, widget, 3, 1, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 1, 1, 4, 2); grid->keyboard_layout_label = widget; remmina_rdp_settings_grid_load_layout(grid); widget = gtk_check_button_new_with_label(_("Use client keyboard mapping")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 2, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 1, 3, 3, 3); grid->use_client_keymap_check = widget; s = remmina_plugin_service->pref_get_value("rdp_use_client_keymap"); @@ -345,12 +345,12 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new(_("Quality option")); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); - remmina_rdp_settings_grid_attach(grid, widget, 0, 3, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 0, 6, 1, 4); grid->quality_store = gtk_list_store_new(2, G_TYPE_UINT, G_TYPE_STRING); widget = gtk_combo_box_new_with_model(GTK_TREE_MODEL(grid->quality_store)); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 3, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 1, 6, 4, 4); renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); @@ -363,56 +363,56 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_check_button_new_with_label(_("Wallpaper")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 0, 4, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 1, 10, 2, 5); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->wallpaper_check = widget; widget = gtk_check_button_new_with_label(_("Window drag")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 4, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 3, 10, 3, 5); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->windowdrag_check = widget; widget = gtk_check_button_new_with_label(_("Menu animation")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 0, 5, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 1, 13, 2, 6); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->menuanimation_check = widget; widget = gtk_check_button_new_with_label(_("Theme")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 5, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 3, 13, 3, 6); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->theme_check = widget; widget = gtk_check_button_new_with_label(_("Cursor shadow")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 0, 5, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 1, 16, 2, 7); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->cursorshadow_check = widget; widget = gtk_check_button_new_with_label(_("Cursor blinking")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 5, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 3, 16, 3, 7); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->cursorblinking_check = widget; widget = gtk_check_button_new_with_label(_("Font smoothing")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 0, 6, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 1, 19, 2, 8); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->fontsmoothing_check = widget; widget = gtk_check_button_new_with_label(_("Composition")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 6, 3, 1); + remmina_rdp_settings_grid_attach(grid, widget, 3, 19, 3, 8); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->composition_check = widget; From 8a18d5a1711aad6971346fd4c99ad93e9c4ec007 Mon Sep 17 00:00:00 2001 From: Rene Rheaume Date: Sun, 12 Apr 2015 17:02:48 -0400 Subject: [PATCH 12/13] Corrected RDP tab in preference in GTK+2 --- remmina-plugins/rdp/rdp_settings-gtk2.glade | 256 ++++++++++++++++++++ remmina-plugins/rdp/rdp_settings.c | 28 +-- 2 files changed, 270 insertions(+), 14 deletions(-) create mode 100644 remmina-plugins/rdp/rdp_settings-gtk2.glade diff --git a/remmina-plugins/rdp/rdp_settings-gtk2.glade b/remmina-plugins/rdp/rdp_settings-gtk2.glade new file mode 100644 index 0000000000..f049e52050 --- /dev/null +++ b/remmina-plugins/rdp/rdp_settings-gtk2.glade @@ -0,0 +1,256 @@ + + + + + + False + 5 + dialog + + + True + False + 2 + + + True + False + end + + + + + + + + + True + True + 0 + + + + + True + False + 8 + 3 + 4 + 4 + + + + + + + + + True + False + Keyboard layout + + + + + True + False + + + 1 + 3 + + + + + True + False + - + + + 1 + 3 + 1 + 2 + + + + + Use client keyboard mapping + True + True + False + True + + + 1 + 3 + 2 + 3 + + + + + True + False + Quality option + + + 3 + 4 + + + + + True + False + + + 1 + 3 + 3 + 4 + + + + + Wallpaper + True + True + False + True + + + 1 + 2 + 4 + 5 + + + + + Window drag + True + True + False + True + + + 2 + 3 + 4 + 5 + + + + + Menu animation + True + True + False + True + + + 1 + 2 + 5 + 6 + + + + + Theme + True + True + False + True + + + 2 + 3 + 5 + 6 + + + + + Cursor shadow + True + True + False + True + + + 1 + 2 + 6 + 7 + + + + + Cursor blinking + True + True + False + True + + + 2 + 3 + 6 + 7 + + + + + Font smoothing + True + True + False + True + + + 1 + 2 + 7 + 8 + + + + + Composition + True + True + False + True + + + 2 + 3 + 7 + 8 + + + + + + + + + + + + + + + + + True + True + 1 + + + + + + diff --git a/remmina-plugins/rdp/rdp_settings.c b/remmina-plugins/rdp/rdp_settings.c index 228de63b9a..919576bff8 100644 --- a/remmina-plugins/rdp/rdp_settings.c +++ b/remmina-plugins/rdp/rdp_settings.c @@ -282,7 +282,7 @@ gint left, gint top, gint width, gint height) #else //gtk_table_attach_defaults (GtkTable *table, GtkWidget *widget, // guint left_attach, guint right_attach, guint top_attach, guint bottom_attach); - gtk_table_attach_defaults(GTK_TABLE(grid), child, left, left + width - 1, top, top + height - 1); + gtk_table_attach_defaults(GTK_TABLE(grid), child, left, left + width, top, top + height); #endif } @@ -317,7 +317,7 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) grid->keyboard_layout_store = gtk_list_store_new(2, G_TYPE_UINT, G_TYPE_STRING); widget = gtk_combo_box_new_with_model(GTK_TREE_MODEL(grid->keyboard_layout_store)); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 0, 4, 1); + remmina_rdp_settings_grid_attach(grid, widget, 1, 0, 2, 1); renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); @@ -327,14 +327,14 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new("-"); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); - remmina_rdp_settings_grid_attach(grid, widget, 1, 1, 4, 2); + remmina_rdp_settings_grid_attach(grid, widget, 1, 1, 2, 1); grid->keyboard_layout_label = widget; remmina_rdp_settings_grid_load_layout(grid); widget = gtk_check_button_new_with_label(_("Use client keyboard mapping")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 3, 3, 3); + remmina_rdp_settings_grid_attach(grid, widget, 1, 2, 2, 1); grid->use_client_keymap_check = widget; s = remmina_plugin_service->pref_get_value("rdp_use_client_keymap"); @@ -345,12 +345,12 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_label_new(_("Quality option")); gtk_widget_show(widget); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); - remmina_rdp_settings_grid_attach(grid, widget, 0, 6, 1, 4); + remmina_rdp_settings_grid_attach(grid, widget, 0, 3, 1, 1); grid->quality_store = gtk_list_store_new(2, G_TYPE_UINT, G_TYPE_STRING); widget = gtk_combo_box_new_with_model(GTK_TREE_MODEL(grid->quality_store)); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 6, 4, 4); + remmina_rdp_settings_grid_attach(grid, widget, 1, 3, 2, 1); renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); @@ -363,56 +363,56 @@ static void remmina_rdp_settings_grid_init(RemminaPluginRdpsetGrid *grid) widget = gtk_check_button_new_with_label(_("Wallpaper")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 10, 2, 5); + remmina_rdp_settings_grid_attach(grid, widget, 1, 4, 1, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->wallpaper_check = widget; widget = gtk_check_button_new_with_label(_("Window drag")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 10, 3, 5); + remmina_rdp_settings_grid_attach(grid, widget, 2, 4, 1, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->windowdrag_check = widget; widget = gtk_check_button_new_with_label(_("Menu animation")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 13, 2, 6); + remmina_rdp_settings_grid_attach(grid, widget, 1, 5, 1, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->menuanimation_check = widget; widget = gtk_check_button_new_with_label(_("Theme")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 13, 3, 6); + remmina_rdp_settings_grid_attach(grid, widget, 2, 5, 1, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->theme_check = widget; widget = gtk_check_button_new_with_label(_("Cursor shadow")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 16, 2, 7); + remmina_rdp_settings_grid_attach(grid, widget, 1, 6, 1, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->cursorshadow_check = widget; widget = gtk_check_button_new_with_label(_("Cursor blinking")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 16, 3, 7); + remmina_rdp_settings_grid_attach(grid, widget, 2, 6, 1, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->cursorblinking_check = widget; widget = gtk_check_button_new_with_label(_("Font smoothing")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 1, 19, 2, 8); + remmina_rdp_settings_grid_attach(grid, widget, 1, 7, 1, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->fontsmoothing_check = widget; widget = gtk_check_button_new_with_label(_("Composition")); gtk_widget_show(widget); - remmina_rdp_settings_grid_attach(grid, widget, 3, 19, 3, 8); + remmina_rdp_settings_grid_attach(grid, widget, 2, 7, 1, 1); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(remmina_rdp_settings_quality_option_on_toggled), grid); grid->composition_check = widget; From 44fc8219c1e6c1204bd3d69cf063f8143c73fcd2 Mon Sep 17 00:00:00 2001 From: Rene Rheaume Date: Tue, 14 Apr 2015 06:56:33 -0400 Subject: [PATCH 13/13] Corrected some dialog layout on GTK+2 --- remmina/src/remmina_file_editor.c | 52 +++++++++---------------------- remmina/src/remmina_init_dialog.c | 34 ++++++++++---------- 2 files changed, 32 insertions(+), 54 deletions(-) diff --git a/remmina/src/remmina_file_editor.c b/remmina/src/remmina_file_editor.c index b68947716f..39d40495f0 100644 --- a/remmina/src/remmina_file_editor.c +++ b/remmina/src/remmina_file_editor.c @@ -566,7 +566,7 @@ static GtkWidget* remmina_file_editor_create_text(RemminaFileEditor* gfe, GtkWid #if GTK_VERSION == 3 gtk_grid_attach(GTK_GRID(table), widget, 1, row, 1, 1); #elif GTK_VERSION == 2 - gtk_table_attach(GTK_TABLE(table), widget, col, col + 1, row, row + 1, GTK_FILL, 0, 0, 0); + gtk_table_attach(GTK_TABLE(table), widget, col + 1, col + 2, row, row + 1, GTK_FILL, 0, 0, 0); #endif gtk_entry_set_max_length(GTK_ENTRY(widget), 300); @@ -636,10 +636,10 @@ static GtkWidget* remmina_file_editor_create_check(RemminaFileEditor* gfe, GtkWi #if GTK_VERSION == 3 gtk_grid_set_row_spacing(GTK_GRID(table), 1); - gtk_grid_attach(GTK_GRID(table), widget, col, row , 1, 1); + gtk_grid_attach(GTK_GRID(table), widget, col, row, 1, 1); #elif GTK_VERSION == 2 if (row >= 0) - gtk_table_attach_defaults(GTK_TABLE(table), widget, col, col + 2, row, row + 1); + gtk_table_attach_defaults(GTK_TABLE(table), widget, col, col + 1, row, row + 1); else gtk_box_pack_start(GTK_BOX(table), widget, TRUE, TRUE, 10); #endif @@ -718,15 +718,12 @@ static void remmina_file_editor_create_settings(RemminaFileEditor* gfe, GtkWidge { case REMMINA_PROTOCOL_SETTING_TYPE_SERVER: remmina_file_editor_create_server(gfe, settings, table, row); + row++; break; case REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD: -#if GTK_VERSION == 3 remmina_file_editor_create_password(gfe, table, row); row++; -#elif GTK_VERSION == 2 - remmina_file_editor_create_password(gfe, table, row); -#endif break; case REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION: @@ -736,11 +733,7 @@ static void remmina_file_editor_create_settings(RemminaFileEditor* gfe, GtkWidge case REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP: strarr = remmina_pref_keymap_groups(); -#if GTK_VERSION == 3 - priv->keymap_combo = remmina_file_editor_create_select(gfe, table, row + 1, 0, -#elif GTK_VERSION == 2 priv->keymap_combo = remmina_file_editor_create_select(gfe, table, row + 1, 0, -#endif _("Keyboard mapping"), (const gpointer*) strarr, remmina_file_get_string(priv->remmina_file, "keymap")); g_strfreev(strarr); @@ -781,7 +774,7 @@ static void remmina_file_editor_create_settings(RemminaFileEditor* gfe, GtkWidge #if GTK_VERSION == 3 gtk_grid_attach(GTK_GRID(table), widget, 1, row, 2, row + 2); #elif GTK_VERSION == 2 - gtk_table_attach_defaults(GTK_TABLE(table), widget, 1, 2, row, row + 2); + gtk_table_attach_defaults(GTK_TABLE(table), widget, 1, 2, row + 1, row + 2); #endif remmina_scaler_set(REMMINA_SCALER(widget), @@ -790,42 +783,33 @@ static void remmina_file_editor_create_settings(RemminaFileEditor* gfe, GtkWidge remmina_file_get_int(priv->remmina_file, "aspectscale", FALSE)); priv->scaler_widget = widget; - row++; + row+=2; break; case REMMINA_PROTOCOL_SETTING_TYPE_TEXT: -#if GTK_VERSION == 3 widget = remmina_file_editor_create_text(gfe, table, row, 0, -#elif GTK_VERSION == 2 - widget = remmina_file_editor_create_text(gfe, table, row + 1, 0, -#endif g_dgettext(priv->plugin->domain, settings->label), remmina_file_get_string(priv->remmina_file, settings->name)); g_hash_table_insert(priv->setting_widgets, (gchar*) settings->name, widget); + row++; break; case REMMINA_PROTOCOL_SETTING_TYPE_SELECT: -#if GTK_VERSION == 3 - widget = remmina_file_editor_create_select(gfe, table, row, 0, -#elif GTK_VERSION == 2 widget = remmina_file_editor_create_select(gfe, table, row, 0, -#endif g_dgettext(priv->plugin->domain, settings->label), (const gpointer*) settings->opt1, remmina_file_get_string(priv->remmina_file, settings->name)); g_hash_table_insert(priv->setting_widgets, (gchar*) settings->name, widget); + row++; break; case REMMINA_PROTOCOL_SETTING_TYPE_COMBO: -#if GTK_VERSION == 3 - widget = remmina_file_editor_create_combo(gfe, table, row, 0, -#elif GTK_VERSION == 2 widget = remmina_file_editor_create_combo(gfe, table, row, 0, -#endif g_dgettext(priv->plugin->domain, settings->label), (const gchar*) settings->opt1, remmina_file_get_string(priv->remmina_file, settings->name)); g_hash_table_insert(priv->setting_widgets, (gchar*) settings->name, widget); + row++; break; case REMMINA_PROTOCOL_SETTING_TYPE_CHECK: @@ -840,34 +824,28 @@ static void remmina_file_editor_create_settings(RemminaFileEditor* gfe, GtkWidge ccount = 1; } widget = remmina_file_editor_create_check(gfe, table, row, top, - g_dgettext (priv->plugin->domain, settings->label), - remmina_file_get_int (priv->remmina_file, (gchar*) settings->name, FALSE)); - (ccount ? 1 : row++); + g_dgettext (priv->plugin->domain, settings->label), + remmina_file_get_int (priv->remmina_file, (gchar*) settings->name, FALSE)); + (ccount ? 1 : row++); g_hash_table_insert(priv->setting_widgets, (gchar*) settings->name, widget); break; case REMMINA_PROTOCOL_SETTING_TYPE_FILE: -#if GTK_VERSION == 3 widget = remmina_file_editor_create_chooser (gfe, table, row, 0, -#elif GTK_VERSION == 2 - widget = remmina_file_editor_create_chooser (gfe, table, row, 0, -#endif g_dgettext (priv->plugin->domain, settings->label), remmina_file_get_string (priv->remmina_file, settings->name), GTK_FILE_CHOOSER_ACTION_OPEN); g_hash_table_insert(priv->setting_widgets, (gchar*) settings->name, widget); + row++; break; case REMMINA_PROTOCOL_SETTING_TYPE_FOLDER: -#if GTK_VERSION == 3 widget = remmina_file_editor_create_chooser (gfe, table, row, 0, -#elif GTK_VERSION == 2 - widget = remmina_file_editor_create_chooser (gfe, table, row, 0, -#endif g_dgettext (priv->plugin->domain, settings->label), remmina_file_get_string (priv->remmina_file, settings->name), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); g_hash_table_insert(priv->setting_widgets, (gchar*) settings->name, widget); + row++; break; default: @@ -1549,7 +1527,7 @@ GtkWidget* remmina_file_editor_new_from_file(RemminaFile* remminafile) gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); #if GTK_VERSION == 3 gtk_grid_attach(GTK_GRID(table), widget, 0, 3, 2, 1); - gtk_grid_set_column_spacing (GTK_GRID(table), 10); + gtk_grid_set_column_spacing (GTK_GRID(table), 10); #elif GTK_VERSION == 2 gtk_table_attach(GTK_TABLE(table), widget, 1, 2, 1, 2, GTK_FILL, 0, 0, 0); #endif diff --git a/remmina/src/remmina_init_dialog.c b/remmina/src/remmina_init_dialog.c index 2e3c47f28b..1169ba9959 100644 --- a/remmina/src/remmina_init_dialog.c +++ b/remmina/src/remmina_init_dialog.c @@ -239,7 +239,7 @@ gint remmina_init_dialog_authpwd(RemminaInitDialog *dialog, const gchar *label, password_entry = gtk_entry_new(); gtk_widget_show(password_entry); - remmina_init_dialog_attach(table, password_entry, 1, 0, 2, 1); + remmina_init_dialog_attach(table, password_entry, 1, 0, 1, 1); gtk_entry_set_max_length(GTK_ENTRY(password_entry), 100); gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE); gtk_entry_set_activates_default(GTK_ENTRY(password_entry), TRUE); @@ -312,7 +312,7 @@ gint remmina_init_dialog_authuserpwd(RemminaInitDialog *dialog, gboolean want_do username_entry = gtk_entry_new(); gtk_widget_show(username_entry); - remmina_init_dialog_attach(table, username_entry, 1, 0, 2, 1); + remmina_init_dialog_attach(table, username_entry, 1, 0, 1, 1); gtk_entry_set_max_length(GTK_ENTRY(username_entry), 100); if (default_username && default_username[0] != '\0') { @@ -322,11 +322,11 @@ gint remmina_init_dialog_authuserpwd(RemminaInitDialog *dialog, gboolean want_do widget = gtk_label_new(_("Password")); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 0, 2, 1, 1); + remmina_init_dialog_attach(table, widget, 0, 1, 1, 1); password_entry = gtk_entry_new(); gtk_widget_show(password_entry); - remmina_init_dialog_attach(table, password_entry, 1, 2, 2, 1); + remmina_init_dialog_attach(table, password_entry, 1, 1, 1, 1); gtk_entry_set_max_length(GTK_ENTRY(password_entry), 100); gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE); gtk_entry_set_activates_default(GTK_ENTRY(password_entry), TRUE); @@ -340,7 +340,7 @@ gint remmina_init_dialog_authuserpwd(RemminaInitDialog *dialog, gboolean want_do domain_entry = gtk_entry_new(); gtk_widget_show(domain_entry); - remmina_init_dialog_attach(table, domain_entry, 1, 3, 2, 1); + remmina_init_dialog_attach(table, domain_entry, 1, 3, 1, 1); gtk_entry_set_max_length(GTK_ENTRY(domain_entry), 100); if (default_domain && default_domain[0] != '\0') { @@ -350,7 +350,7 @@ gint remmina_init_dialog_authuserpwd(RemminaInitDialog *dialog, gboolean want_do save_password_check = gtk_check_button_new_with_label(_("Save password")); gtk_widget_show(save_password_check); - remmina_init_dialog_attach(table, save_password_check, 0, 4, 2, 3); + remmina_init_dialog_attach(table, save_password_check, 1, 2, 1, 1); if (allow_save) { if (dialog->save_password) @@ -421,7 +421,7 @@ gint remmina_init_dialog_certificate(RemminaInitDialog* dialog, const gchar* sub widget = gtk_label_new(subject); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 1, 0, 2, 1); + remmina_init_dialog_attach(table, widget, 1, 0, 1, 1); widget = gtk_label_new(_("Issuer:")); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); @@ -431,7 +431,7 @@ gint remmina_init_dialog_certificate(RemminaInitDialog* dialog, const gchar* sub widget = gtk_label_new(issuer); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 1, 1, 2, 1); + remmina_init_dialog_attach(table, widget, 1, 1, 1, 1); widget = gtk_label_new(_("Fingerprint:")); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); @@ -441,7 +441,7 @@ gint remmina_init_dialog_certificate(RemminaInitDialog* dialog, const gchar* sub widget = gtk_label_new(fingerprint); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 1, 2, 2, 1); + remmina_init_dialog_attach(table, widget, 1, 2, 1, 1); widget = gtk_label_new (NULL); s = g_strdup_printf("%s", _("Accept Certificate?")); @@ -449,7 +449,7 @@ gint remmina_init_dialog_certificate(RemminaInitDialog* dialog, const gchar* sub g_free(s); gtk_misc_set_alignment(GTK_MISC(widget), 0.5, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 0, 3, 3, 1); + remmina_init_dialog_attach(table, widget, 0, 3, 2, 1); /* Pack it into the dialog */ gtk_box_pack_start(GTK_BOX(dialog->content_vbox), table, TRUE, TRUE, 4); @@ -498,7 +498,7 @@ gint remmina_init_dialog_certificate_changed(RemminaInitDialog* dialog, const gc widget = gtk_label_new(subject); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 1, 0, 2, 1); + remmina_init_dialog_attach(table, widget, 1, 0, 1, 1); widget = gtk_label_new(_("Issuer:")); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); @@ -508,7 +508,7 @@ gint remmina_init_dialog_certificate_changed(RemminaInitDialog* dialog, const gc widget = gtk_label_new(issuer); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 1, 1, 2, 1); + remmina_init_dialog_attach(table, widget, 1, 1, 1, 1); widget = gtk_label_new(_("Old Fingerprint:")); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); @@ -518,7 +518,7 @@ gint remmina_init_dialog_certificate_changed(RemminaInitDialog* dialog, const gc widget = gtk_label_new(old_fingerprint); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 1, 2, 2, 1); + remmina_init_dialog_attach(table, widget, 1, 2, 1, 1); widget = gtk_label_new(_("New Fingerprint:")); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); @@ -528,7 +528,7 @@ gint remmina_init_dialog_certificate_changed(RemminaInitDialog* dialog, const gc widget = gtk_label_new(new_fingerprint); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 1, 3, 2, 1); + remmina_init_dialog_attach(table, widget, 1, 3, 1, 1); widget = gtk_label_new (NULL); s = g_strdup_printf("%s", _("Accept Changed Certificate?")); @@ -536,7 +536,7 @@ gint remmina_init_dialog_certificate_changed(RemminaInitDialog* dialog, const gc g_free(s); gtk_misc_set_alignment(GTK_MISC(widget), 0.5, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 0, 4, 3, 1); + remmina_init_dialog_attach(table, widget, 0, 4, 2, 1); /* Pack it into the dialog */ gtk_box_pack_start(GTK_BOX(dialog->content_vbox), table, TRUE, TRUE, 4); @@ -566,12 +566,12 @@ static GtkWidget* remmina_init_dialog_create_file_button(GtkWidget *table, const widget = gtk_label_new(label); gtk_misc_set_alignment(GTK_MISC(widget), 0.0, 0.5); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 0, row, 1, row + 1); + remmina_init_dialog_attach(table, widget, 0, row, 1, 1); widget = gtk_file_chooser_button_new(label, GTK_FILE_CHOOSER_ACTION_OPEN); gtk_file_chooser_button_set_width_chars(GTK_FILE_CHOOSER_BUTTON(widget), 25); gtk_widget_show(widget); - remmina_init_dialog_attach(table, widget, 1, row, 2, row + 1); + remmina_init_dialog_attach(table, widget, 1, row, 2, 1); if (filename && filename[0] != '\0') { gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(widget), filename);