From fe1a5b4636d7df256373d473f85fb3a4c3510e47 Mon Sep 17 00:00:00 2001 From: Antenore Gatta Date: Thu, 25 May 2023 11:46:56 +0000 Subject: Automatic doc build by remmina-ci --- public/remmina__pref__dialog_8c_source.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/remmina__pref__dialog_8c_source.html b/public/remmina__pref__dialog_8c_source.html index 8a88cf42c..2e91cf552 100644 --- a/public/remmina__pref__dialog_8c_source.html +++ b/public/remmina__pref__dialog_8c_source.html @@ -86,7 +86,7 @@ $(document).ready(function(){initNavTree('remmina__pref__dialog_8c_source.html',
remmina_pref_dialog.c
-Go to the documentation of this file.
1 /*
2  * Remmina - The GTK+ Remote Desktop Client
3  * Copyright (C) 2009-2011 Vic Lee
4  * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo
5  * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo
6  * Copyright (C) 2022-2023 Antenore Gatta, Giovanni Panozzo, Hiroyuki Tanaka
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  *
23  * In addition, as a special exception, the copyright holders give
24  * permission to link the code of portions of this program with the
25  * OpenSSL library under certain conditions as described in each
26  * individual source file, and distribute linked combinations
27  * including the two.
28  * You must obey the GNU General Public License in all respects
29  * for all of the code used other than OpenSSL. * If you modify
30  * file(s) with this exception, you may extend this exception to your
31  * version of the file(s), but you are not obligated to do so. * If you
32  * do not wish to do so, delete this exception statement from your
33  * version. * If you delete this exception statement from all source
34  * files in the program, then also delete it here.
35  *
36  */
37 
38 #include <gtk/gtk.h>
39 #include <glib/gi18n.h>
40 #include <stdlib.h>
41 #include "config.h"
42 #if defined (HAVE_LIBSSH) && defined (HAVE_LIBVTE)
43 #include <vte/vte.h>
44 #endif
45 #include "remmina_log.h"
46 #include "remmina_file_manager.h"
47 #include "remmina_sodium.h"
48 #include "remmina_passwd.h"
49 #include "remmina_public.h"
50 #include "remmina_main.h"
51 #include "remmina_string_list.h"
52 #include "remmina_widget_pool.h"
53 #include "remmina_key_chooser.h"
54 #include "remmina_plugin_manager.h"
55 #include "remmina_icon.h"
56 #include "remmina_pref.h"
57 #include "remmina_pref_dialog.h"
59 
61 
62 #define GET_OBJECT(object_name) gtk_builder_get_object(remmina_pref_dialog->builder, object_name)
63 
64 static GActionEntry pref_actions[] = {
65  { "close", remmina_pref_dialog_on_action_close, NULL, NULL, NULL },
66 };
67 
68 
69 /* Show a key chooser dialog */
70 void remmina_pref_dialog_on_key_chooser(GtkWidget *widget, gpointer user_data)
71 {
72  TRACE_CALL(__func__);
73  RemminaKeyChooserArguments *arguments;
74 
75  g_return_if_fail(GTK_IS_BUTTON(widget));
76 
77  arguments = remmina_key_chooser_new(GTK_WINDOW(remmina_pref_dialog->dialog), FALSE);
78  if (arguments->response != GTK_RESPONSE_CANCEL && arguments->response != GTK_RESPONSE_DELETE_EVENT) {
79  gchar *val = remmina_key_chooser_get_value(arguments->keyval, arguments->state);
80  gtk_button_set_label(GTK_BUTTON(widget), val);
81  g_free(val);
82  }
83  g_free(arguments);
84 }
85 
86 /* Show the available resolutions list dialog */
87 void remmina_pref_on_button_resolutions_clicked(GtkWidget *widget, gpointer user_data)
88 {
89  TRACE_CALL(__func__);
90  GtkDialog *dialog = remmina_string_list_new(FALSE, NULL);
91 
94  remmina_string_list_set_titles(_("Resolutions"), _("Configure the available resolutions"));
95  gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(remmina_pref_dialog->dialog));
96  gtk_dialog_run(dialog);
97  g_free(remmina_pref.resolutions);
99  gtk_widget_destroy(GTK_WIDGET(dialog));
100 }
101 
102 /* Re-initialize the remmina_pref_init to reload the color scheme when a color scheme
103  * file is selected*/
104 void remmina_pref_on_color_scheme_selected(GtkWidget *widget, gpointer user_data)
105 {
106  TRACE_CALL(__func__);
107  gchar *sourcepath;
108  gchar *remmina_dir;
109  gchar *destpath;
110  GFile *source;
111  GFile *destination;
112 
113  sourcepath = gtk_file_chooser_get_filename(remmina_pref_dialog->button_term_cs);
114  source = g_file_new_for_path(sourcepath);
115 
116  remmina_dir = g_build_path("/", g_get_user_config_dir(), "remmina", NULL);
117  /* /home/foo/.config/remmina */
118  destpath = g_strdup_printf("%s/remmina.colors", remmina_dir);
119  destination = g_file_new_for_path(destpath);
120 
121  if (g_file_test(sourcepath, G_FILE_TEST_IS_REGULAR)) {
122  g_file_copy(source,
123  destination,
124  G_FILE_COPY_OVERWRITE,
125  NULL,
126  NULL,
127  NULL,
128  NULL);
129  /* Here we should reinitialize the widget */
130  gtk_file_chooser_set_file(remmina_pref_dialog->button_term_cs, source, NULL);
131  }
132  g_free(sourcepath);
133  g_free(remmina_dir);
134  g_free(destpath);
135  g_object_unref(source);
136 }
137 
138 void remmina_pref_dialog_clear_recent(GtkWidget *widget, gpointer user_data)
139 {
140  TRACE_CALL(__func__);
141  GtkDialog *dialog;
142 
144  dialog = GTK_DIALOG(gtk_message_dialog_new(GTK_WINDOW(remmina_pref_dialog->dialog),
145  GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
146  _("Recent lists cleared.")));
147  gtk_dialog_run(dialog);
148  gtk_widget_destroy(GTK_WIDGET(dialog));
149 }
150 
151 /* Configure custom keystrokes to send to the plugins */
152 void remmina_pref_on_button_keystrokes_clicked(GtkWidget *widget, gpointer user_data)
153 {
154  TRACE_CALL(__func__);
155  GtkDialog *dialog = remmina_string_list_new(TRUE, STRING_DELIMITOR2);
156 
158  remmina_string_list_set_titles(_("Keystrokes"), _("Configure the keystrokes"));
159  gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(remmina_pref_dialog->dialog));
160  gtk_dialog_run(dialog);
161  g_free(remmina_pref.keystrokes);
163  gtk_widget_destroy(GTK_WIDGET(dialog));
164 }
165 
166 void remmina_prefdiag_on_grab_color_activated(GtkSwitch *widget, gpointer user_data)
167 {
168  TRACE_CALL(__func__);
169  //REMMINA_DEBUG ("entry_grab_color %d", gtk_switch_get_active(widget));
170  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->entry_grab_color), gtk_switch_get_active(widget));
171 }
172 
173 /* connect to notify::active or toggled (in this case ::toggled */
174 void remmina_prefdiag_on_use_password_activated(GtkSwitch *sw, gpointer user_data)
175 {
176  TRACE_CALL(__func__);
177  //REMMINA_DEBUG ("Use Primary Password %d", gtk_switch_get_active(sw));
178  if (gtk_switch_get_active(sw)) {
179  //REMMINA_DEBUG ("use_password activated");
180  gchar *unlock_password = NULL;
181  unlock_password = g_strdup(remmina_pref_get_value("unlock_password"));
182  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_connect), TRUE);
183  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_edit), TRUE);
184  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_view_passwords), TRUE);
185  //REMMINA_DEBUG ("Password from preferences is: %s", unlock_password);
186  if (unlock_password == NULL || unlock_password[0] == '\0') {
187  if (remmina_passwd(GTK_WINDOW(remmina_pref_dialog->dialog), &unlock_password)) {
188  //REMMINA_DEBUG ("Password is: %s", unlock_password);
189  remmina_pref_set_value("unlock_password", g_strdup(unlock_password));
190  remmina_pref.unlock_password = g_strdup(unlock_password);
191  } else {
193  remmina_pref_set_value("unlock_password", "");
194  }
195  }
196  g_free(unlock_password), unlock_password = NULL;
197  } else {
198  //REMMINA_DEBUG ("use_password deactivated");
199  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_connect), FALSE);
200  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_edit), FALSE);
201  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_view_passwords), FALSE);
203  remmina_pref_set_value("unlock_password", "");
204  }
205 }
206 
207 void remmina_pref_dialog_on_action_close(GSimpleAction *action, GVariant *param, gpointer data)
208 {
209  TRACE_CALL(__func__);
210  gtk_widget_destroy(GTK_WIDGET(remmina_pref_dialog->dialog));
211  /* Reload to use new preferences */
213 }
214 
216 {
217  TRACE_CALL(__func__);
218  gtk_widget_destroy(GTK_WIDGET(remmina_pref_dialog->dialog));
219 }
220 
221 void remmina_pref_on_dialog_destroy(GtkWidget *widget, gpointer user_data)
222 {
223  TRACE_CALL(__func__);
224  gboolean b;
225  GdkRGBA color;
226  gboolean rebuild_remmina_icon = FALSE;
227 
228  remmina_pref.datadir_path = gtk_file_chooser_get_filename(remmina_pref_dialog->filechooserbutton_options_datadir_path);
229  if (remmina_pref.datadir_path == NULL)
230  remmina_pref.datadir_path = g_strdup("");
231  remmina_pref.remmina_file_name = gtk_entry_get_text(remmina_pref_dialog->entry_options_file_name);
232  remmina_pref.screenshot_path = gtk_file_chooser_get_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path);
233  remmina_pref.screenshot_name = gtk_entry_get_text(remmina_pref_dialog->entry_options_screenshot_name);
234  remmina_pref.deny_screenshot_clipboard = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_options_deny_screenshot_clipboard));
235  remmina_pref.save_view_mode = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_options_remember_last_view_mode));
236  remmina_pref.confirm_close = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_options_confirm_close));
237  remmina_pref.use_primary_password = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_use_primary_password));
238  remmina_pref.lock_connect = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_connect));
239  remmina_pref.lock_edit = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_edit));
240  remmina_pref.lock_view_passwords = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_view_passwords));
241  remmina_pref.enc_mode = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_security_enc_method);
242  remmina_pref.audit = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_audit));
243  remmina_pref.trust_all = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_trust_all));
244  remmina_pref.screenshot_path = gtk_file_chooser_get_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path);
245  remmina_pref.fullscreen_on_auto = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_fullscreen_on_auto));
246  remmina_pref.always_show_tab = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_tabs));
247  remmina_pref.always_show_notes = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_notes));
248  remmina_pref.hide_connection_toolbar = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_hide_toolbar));
249  remmina_pref.hide_searchbar = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_hide_searchbar));
250 
251  remmina_pref.default_action = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_options_double_click);
252  remmina_pref.default_mode = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_appearance_view_mode);
253  remmina_pref.tab_mode = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_appearance_tab_interface);
255  remmina_pref.scale_quality = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_options_scale_quality);
256  remmina_pref.ssh_loglevel = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_options_ssh_loglevel);
257  remmina_pref.sshtunnel_port = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_ssh_port));
258  if (remmina_pref.sshtunnel_port <= 0)
259  remmina_pref.sshtunnel_port = DEFAULT_SSHTUNNEL_PORT;
260  remmina_pref.ssh_tcp_keepidle = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_ssh_tcp_keepidle));
262  remmina_pref.ssh_tcp_keepidle = SSH_SOCKET_TCP_KEEPIDLE;
263  remmina_pref.ssh_tcp_keepintvl = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_ssh_tcp_keepintvl));
265  remmina_pref.ssh_tcp_keepintvl = SSH_SOCKET_TCP_KEEPINTVL;
266  remmina_pref.ssh_tcp_keepcnt = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_ssh_tcp_keepcnt));
267  if (remmina_pref.ssh_tcp_keepcnt <= 0)
268  remmina_pref.ssh_tcp_keepcnt = SSH_SOCKET_TCP_KEEPCNT;
269  remmina_pref.ssh_tcp_usrtimeout = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_ssh_tcp_usrtimeout));
271  remmina_pref.ssh_tcp_usrtimeout = SSH_SOCKET_TCP_USER_TIMEOUT;
272  remmina_pref.ssh_parseconfig = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_options_ssh_parseconfig));
273 #if SODIUM_VERSION_INT >= 90200
274  remmina_pref.unlock_timeout = atoi(gtk_entry_get_text(remmina_pref_dialog->unlock_timeout));
277 #endif
278 
279  remmina_pref.auto_scroll_step = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_scroll));
282  else if (remmina_pref.auto_scroll_step > 500)
284 
285  remmina_pref.recent_maximum = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_recent_items));
288 
289  remmina_pref.applet_new_ontop = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_new_connection_on_top));
290  remmina_pref.applet_hide_count = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_hide_totals));
291  b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_dark_theme));
292  if (remmina_pref.dark_theme != b) {
294  rebuild_remmina_icon = TRUE;
295  }
296 
297  remmina_pref.grab_color_switch = gtk_switch_get_active(remmina_pref_dialog->switch_appearance_grab_color);
298  remmina_pref.grab_color = gtk_entry_get_text(remmina_pref_dialog->entry_grab_color);
299 
300  b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_disable_tray));
301  if (remmina_pref.disable_tray_icon != b) {
303  rebuild_remmina_icon = TRUE;
304  }
305  if (b)
306  b = FALSE;
307  else
308  b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_start_in_tray));
310 
311  if (rebuild_remmina_icon) {
314  }
315 
316  remmina_pref.hostkey = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_host_key));
318  remmina_pref.shortcutkey_autofit = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_auto_fit));
321  remmina_pref.shortcutkey_scale = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_scaled));
328  remmina_pref.shortcutkey_toolbar = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_toolbar));
329 
330  g_free(remmina_pref.vte_font);
331  if (gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_font_system)))
332  remmina_pref.vte_font = NULL;
333  else
334  remmina_pref.vte_font = g_strdup(gtk_font_chooser_get_font(GTK_FONT_CHOOSER(remmina_pref_dialog->fontbutton_terminal_font)));
335  remmina_pref.vte_allow_bold_text = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_bold));
336  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_foreground), &color);
337  remmina_pref.color_pref.foreground = gdk_rgba_to_string(&color);
338  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_background), &color);
339  remmina_pref.color_pref.background = gdk_rgba_to_string(&color);
340  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor), &color);
341  remmina_pref.color_pref.cursor = gdk_rgba_to_string(&color);
342  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor_foreground), &color);
343  remmina_pref.color_pref.cursor_foreground = gdk_rgba_to_string(&color);
344  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight), &color);
345  remmina_pref.color_pref.highlight = gdk_rgba_to_string(&color);
346  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight_foreground), &color);
347  remmina_pref.color_pref.highlight_foreground = gdk_rgba_to_string(&color);
348  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_colorBD), &color);
349  remmina_pref.color_pref.colorBD = gdk_rgba_to_string(&color);
350  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color0), &color);
351  remmina_pref.color_pref.color0 = gdk_rgba_to_string(&color);
352  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color1), &color);
353  remmina_pref.color_pref.color1 = gdk_rgba_to_string(&color);
354  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color2), &color);
355  remmina_pref.color_pref.color2 = gdk_rgba_to_string(&color);
356  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color3), &color);
357  remmina_pref.color_pref.color3 = gdk_rgba_to_string(&color);
358  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color4), &color);
359  remmina_pref.color_pref.color4 = gdk_rgba_to_string(&color);
360  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color5), &color);
361  remmina_pref.color_pref.color5 = gdk_rgba_to_string(&color);
362  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color6), &color);
363  remmina_pref.color_pref.color6 = gdk_rgba_to_string(&color);
364  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color7), &color);
365  remmina_pref.color_pref.color7 = gdk_rgba_to_string(&color);
366  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color8), &color);
367  remmina_pref.color_pref.color8 = gdk_rgba_to_string(&color);
368  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color9), &color);
369  remmina_pref.color_pref.color9 = gdk_rgba_to_string(&color);
370  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color10), &color);
371  remmina_pref.color_pref.color10 = gdk_rgba_to_string(&color);
372  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color11), &color);
373  remmina_pref.color_pref.color11 = gdk_rgba_to_string(&color);
374  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color12), &color);
375  remmina_pref.color_pref.color12 = gdk_rgba_to_string(&color);
376  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color13), &color);
377  remmina_pref.color_pref.color13 = gdk_rgba_to_string(&color);
378  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color14), &color);
379  remmina_pref.color_pref.color14 = gdk_rgba_to_string(&color);
380  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color15), &color);
381  remmina_pref.color_pref.color15 = gdk_rgba_to_string(&color);
382  remmina_pref.vte_lines = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_scrollback_lines));
383  remmina_pref.vte_shortcutkey_copy = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_copy));
384  remmina_pref.vte_shortcutkey_paste = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_paste));
389 
392 
393  remmina_pref_dialog->dialog = NULL;
394 }
395 
396 static gboolean remmina_pref_dialog_add_pref_plugin(gchar *name, RemminaPlugin *plugin, gpointer user_data)
397 {
398  TRACE_CALL(__func__);
399  RemminaPrefPlugin *pref_plugin;
400  GtkWidget *vbox;
401  GtkWidget *widget;
402 
403  pref_plugin = (RemminaPrefPlugin *)plugin;
404 
405  widget = gtk_label_new(pref_plugin->pref_label);
406  gtk_widget_set_halign(widget, GTK_ALIGN_END);
407  gtk_widget_show(widget);
408 
409  vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
410  gtk_widget_show(vbox);
411  gtk_notebook_append_page(GTK_NOTEBOOK(remmina_pref_dialog->notebook_preferences), vbox, widget);
412 
413  widget = pref_plugin->get_pref_body(pref_plugin);
414  gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0);
415 
416  return FALSE;
417 }
418 
420 {
421  TRACE_CALL(__func__);
422  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->fontbutton_terminal_font), !gtk_switch_get_active(widget));
423 }
424 
426 {
427  TRACE_CALL(__func__);
428  gboolean b;
429 
430  b = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
431 
432  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), b);
433 }
434 
435 /* Helper function for remmina_pref_dialog_init() */
436 static void remmina_pref_dialog_set_button_label(GtkButton *button, guint keyval)
437 {
438  gchar *val;
439 
440  val = remmina_key_chooser_get_value(keyval, 0);
441  gtk_button_set_label(button, val);
442  g_free(val);
443 }
444 
445 /* Remmina preferences initialization */
446 static void remmina_pref_dialog_init(void)
447 {
448  TRACE_CALL(__func__);
449  gchar buf[100];
450  GdkRGBA color;
451 
452 #if !defined (HAVE_LIBSSH) || !defined (HAVE_LIBVTE)
453  GtkWidget *align;
454 #endif
455 
456 #if !defined (HAVE_LIBVTE)
457  align = GTK_WIDGET(GET_OBJECT("alignment_terminal"));
458  gtk_widget_set_sensitive(align, FALSE);
459 #endif
460 
461 #if !defined (HAVE_LIBSSH)
462  align = GTK_WIDGET(GET_OBJECT("alignment_ssh"));
463  gtk_widget_set_sensitive(align, FALSE);
464 #endif
465 
466  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_options_remember_last_view_mode), remmina_pref.save_view_mode);
467  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_options_confirm_close), remmina_pref.confirm_close);
468 #if SODIUM_VERSION_INT >= 90200
469  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_use_primary_password), remmina_pref.use_primary_password);
470  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_use_primary_password), TRUE);
471  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_connect), remmina_pref.lock_connect);
472  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_edit), remmina_pref.lock_edit);
473  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_view_passwords), remmina_pref.lock_view_passwords);
474  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->unlock_timeout), TRUE);
475 #else
476  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_use_primary_password), FALSE);
477  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_use_primary_password), FALSE);
478  // TRANSLATORS: Do not translate libsodium, is the name of a library
479  gtk_widget_set_tooltip_text(GTK_WIDGET(remmina_pref_dialog->switch_security_use_primary_password), _("libsodium >= 1.9.0 is required to use Primary Password"));
480  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_connect), FALSE);
481  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_edit), FALSE);
482  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->unlock_timeout), FALSE);
483 #endif
484  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_audit), remmina_pref.audit);
485  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_audit), TRUE);
486  if (remmina_pref.remmina_file_name != NULL)
487  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, remmina_pref.remmina_file_name);
488  else
489  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, "%G_%P_%N_%h.remmina");
490 
491  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_trust_all), remmina_pref.trust_all);
492 
493  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_options_deny_screenshot_clipboard), remmina_pref.deny_screenshot_clipboard);
494  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_fullscreen_on_auto), remmina_pref.fullscreen_on_auto);
495  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_tabs), remmina_pref.always_show_tab);
496  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_notes), remmina_pref.always_show_notes);
497  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_hide_toolbar), remmina_pref.hide_connection_toolbar);
498  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_hide_searchbar), remmina_pref.hide_searchbar);
499 
500  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.sshtunnel_port);
501  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_port, buf);
502  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_keepidle);
503  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_keepidle, buf);
504  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_keepintvl);
505  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_keepintvl, buf);
506  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_keepcnt);
507  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_keepcnt, buf);
508  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_usrtimeout);
509  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_usrtimeout, buf);
510  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.auto_scroll_step);
511  gtk_entry_set_text(remmina_pref_dialog->entry_options_scroll, buf);
512  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.recent_maximum);
513  gtk_entry_set_text(remmina_pref_dialog->entry_options_recent_items, buf);
514 
515 #ifdef HAVE_LIBAPPINDICATOR
516  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_new_connection_on_top), remmina_pref.applet_new_ontop);
517  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_hide_totals), remmina_pref.applet_hide_count);
518  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_disable_tray), remmina_pref.disable_tray_icon);
519  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_dark_theme), remmina_pref.dark_theme);
520  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_start_in_tray), remmina_icon_is_autostart());
521  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), !remmina_pref.disable_tray_icon);
522 #else
524  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_dark_theme), remmina_pref.dark_theme);
525  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_new_connection_on_top), FALSE);
526  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_hide_totals), FALSE);
527  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_disable_tray), FALSE);
528  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), FALSE);
529 #endif
530 
544 
546  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_font_system), TRUE);
548  gtk_font_chooser_set_font(GTK_FONT_CHOOSER(remmina_pref_dialog->fontbutton_terminal_font), remmina_pref.vte_font);
549  } else {
550  gtk_font_chooser_set_font(GTK_FONT_CHOOSER(remmina_pref_dialog->fontbutton_terminal_font), "Monospace 12");
551  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->fontbutton_terminal_font), FALSE);
552  }
553  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_bold), remmina_pref.vte_allow_bold_text);
554 
555  /* Foreground color option */
556  gdk_rgba_parse(&color, remmina_pref.color_pref.foreground);
557  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_foreground), &color);
558  /* Background color option */
559  gdk_rgba_parse(&color, remmina_pref.color_pref.background);
560  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_background), &color);
561  /* Cursor color option */
562  gdk_rgba_parse(&color, remmina_pref.color_pref.cursor);
563  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor), &color);
564  gdk_rgba_parse(&color, remmina_pref.color_pref.cursor_foreground);
565  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor_foreground), &color);
566  /* Highlight color option */
567  gdk_rgba_parse(&color, remmina_pref.color_pref.highlight);
568  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight), &color);
569  gdk_rgba_parse(&color, remmina_pref.color_pref.highlight_foreground);
570  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight_foreground), &color);
571  /* Bold color option */
572  gdk_rgba_parse(&color, remmina_pref.color_pref.colorBD);
573  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_colorBD), &color);
574  /* 16 colors */
575  gdk_rgba_parse(&color, remmina_pref.color_pref.color0);
576  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color0), &color);
577  gdk_rgba_parse(&color, remmina_pref.color_pref.color1);
578  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color1), &color);
579  gdk_rgba_parse(&color, remmina_pref.color_pref.color2);
580  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color2), &color);
581  gdk_rgba_parse(&color, remmina_pref.color_pref.color3);
582  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color3), &color);
583  gdk_rgba_parse(&color, remmina_pref.color_pref.color4);
584  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color4), &color);
585  gdk_rgba_parse(&color, remmina_pref.color_pref.color5);
586  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color5), &color);
587  gdk_rgba_parse(&color, remmina_pref.color_pref.color6);
588  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color6), &color);
589  gdk_rgba_parse(&color, remmina_pref.color_pref.color7);
590  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color7), &color);
591  gdk_rgba_parse(&color, remmina_pref.color_pref.color8);
592  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color8), &color);
593  gdk_rgba_parse(&color, remmina_pref.color_pref.color9);
594  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color9), &color);
595  gdk_rgba_parse(&color, remmina_pref.color_pref.color10);
596  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color10), &color);
597  gdk_rgba_parse(&color, remmina_pref.color_pref.color11);
598  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color11), &color);
599  gdk_rgba_parse(&color, remmina_pref.color_pref.color12);
600  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color12), &color);
601  gdk_rgba_parse(&color, remmina_pref.color_pref.color13);
602  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color13), &color);
603  gdk_rgba_parse(&color, remmina_pref.color_pref.color14);
604  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color14), &color);
605  gdk_rgba_parse(&color, remmina_pref.color_pref.color15);
606  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color15), &color);
607 #if defined (HAVE_LIBSSH) && defined (HAVE_LIBVTE)
608 #if !VTE_CHECK_VERSION(0, 38, 0)
609  /* Disable color scheme buttons if old version of VTE */
610  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_cursor), FALSE);
611  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_cursor_foreground), FALSE);
612  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_highlight), FALSE);
613  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_highlight_foreground), FALSE);
614  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_colorBD), FALSE);
615  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color0), FALSE);
616  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color1), FALSE);
617  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color2), FALSE);
618  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color3), FALSE);
619  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color4), FALSE);
620  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color5), FALSE);
621  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color6), FALSE);
622  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color7), FALSE);
623  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color8), FALSE);
624  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color9), FALSE);
625  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color10), FALSE);
626  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color11), FALSE);
627  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color12), FALSE);
628  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color13), FALSE);
629  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color14), FALSE);
630  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color15), FALSE);
631 #endif
632 #endif
633 
634  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.vte_lines);
635  gtk_entry_set_text(remmina_pref_dialog->entry_scrollback_lines, buf);
636 
637 #if SODIUM_VERSION_INT >= 90200
638  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.unlock_timeout);
639  gtk_entry_set_text(remmina_pref_dialog->unlock_timeout, buf);
640 #endif
641 
642  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_options_double_click, remmina_pref.default_action);
643  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_appearance_view_mode, remmina_pref.default_mode);
644  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_appearance_tab_interface, remmina_pref.tab_mode);
645  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_security_enc_method, remmina_pref.enc_mode);
647  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_options_scale_quality, remmina_pref.scale_quality);
648  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_options_ssh_loglevel, remmina_pref.ssh_loglevel);
649  if (remmina_pref.datadir_path != NULL && strlen(remmina_pref.datadir_path) > 0)
650  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_datadir_path, remmina_pref.datadir_path);
651  else
652  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_datadir_path, remmina_file_get_datadir());
653  if (remmina_pref.remmina_file_name != NULL)
654  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, remmina_pref.remmina_file_name);
655  else
656  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, "%G_%P_%N_%h.remmina");
657 
658  if (remmina_pref.screenshot_path != NULL)
659  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path, remmina_pref.screenshot_path);
660  else
661  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path, g_get_home_dir());
662  if (remmina_pref.screenshot_name != NULL)
663  gtk_entry_set_text(remmina_pref_dialog->entry_options_screenshot_name, remmina_pref.screenshot_name);
664  else
665  gtk_entry_set_text(remmina_pref_dialog->entry_options_screenshot_name, "remmina_%p_%h_%Y%m%d-%H%M%S");
666 
667  gtk_switch_set_active(remmina_pref_dialog->switch_appearance_grab_color, remmina_pref.grab_color_switch);
668  if (remmina_pref.grab_color != NULL)
669  gtk_entry_set_text(remmina_pref_dialog->entry_grab_color, remmina_pref.grab_color);
670  else
671  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, "#00FF00");
672 
673  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_options_ssh_parseconfig), remmina_pref.ssh_parseconfig);
674 
681 
683 
684  g_signal_connect(G_OBJECT(remmina_pref_dialog->dialog), "destroy", G_CALLBACK(remmina_pref_on_dialog_destroy), NULL);
685 
686  g_object_set_data(G_OBJECT(remmina_pref_dialog->dialog), "tag", "remmina-pref-dialog");
687  remmina_widget_pool_register(GTK_WIDGET(remmina_pref_dialog->dialog));
688 }
689 
690 /* RemminaPrefDialog instance */
691 GtkWidget *remmina_pref_dialog_new(gint default_tab, GtkWindow *parent)
692 {
693  TRACE_CALL(__func__);
694  GSimpleActionGroup *actions;
695  GtkAccelGroup *accel_group = NULL;
696 
697  remmina_pref_dialog = g_new0(RemminaPrefDialog, 1);
698  remmina_pref_dialog->priv = g_new0(RemminaPrefDialogPriv, 1);
699 
700  remmina_pref_dialog->builder = remmina_public_gtk_builder_new_from_resource("/org/remmina/Remmina/src/../data/ui/remmina_preferences.glade");
701  remmina_pref_dialog->dialog = GTK_WIDGET(gtk_builder_get_object(remmina_pref_dialog->builder, "RemminaPrefDialog"));
702  if (parent)
703  gtk_window_set_transient_for(GTK_WINDOW(remmina_pref_dialog->dialog), parent);
704 
705  remmina_pref_dialog->notebook_preferences = GTK_NOTEBOOK(GET_OBJECT("notebook_preferences"));
706 
707  remmina_pref_dialog->filechooserbutton_options_datadir_path = GTK_FILE_CHOOSER(GET_OBJECT("filechooserbutton_options_datadir_path"));
708  remmina_pref_dialog->entry_options_file_name = GTK_ENTRY(GET_OBJECT("entry_options_file_name"));
709  remmina_pref_dialog->filechooserbutton_options_screenshots_path = GTK_FILE_CHOOSER(GET_OBJECT("filechooserbutton_options_screenshots_path"));
710  remmina_pref_dialog->entry_options_screenshot_name = GTK_ENTRY(GET_OBJECT("entry_options_screenshot_name"));
711  remmina_pref_dialog->switch_options_deny_screenshot_clipboard = GTK_SWITCH(GET_OBJECT("switch_options_deny_screenshot_clipboard"));
712  remmina_pref_dialog->switch_options_remember_last_view_mode = GTK_SWITCH(GET_OBJECT("switch_options_remember_last_view_mode"));
713  remmina_pref_dialog->switch_options_confirm_close = GTK_SWITCH(GET_OBJECT("switch_options_confirm_close"));
714  remmina_pref_dialog->switch_security_use_primary_password = GTK_SWITCH(GET_OBJECT("switch_security_use_primary_password"));
715  remmina_pref_dialog->unlock_timeout = GTK_ENTRY(GET_OBJECT("unlock_timeout"));
716  remmina_pref_dialog->switch_security_lock_connect = GTK_SWITCH(GET_OBJECT("switch_security_lock_connect"));
717  remmina_pref_dialog->switch_security_lock_edit = GTK_SWITCH(GET_OBJECT("switch_security_lock_edit"));
718  remmina_pref_dialog->switch_security_lock_view_passwords = GTK_SWITCH(GET_OBJECT("switch_security_lock_view_passwords"));
719  remmina_pref_dialog->comboboxtext_security_enc_method = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_security_enc_method"));
720 
721  remmina_pref_dialog->switch_security_audit = GTK_SWITCH(GET_OBJECT("switch_security_audit"));
722  remmina_pref_dialog->switch_security_trust_all = GTK_SWITCH(GET_OBJECT("switch_security_trust_all"));
723  remmina_pref_dialog->checkbutton_options_save_settings = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_options_save_settings"));
724  remmina_pref_dialog->checkbutton_appearance_fullscreen_on_auto = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_fullscreen_on_auto"));
725  remmina_pref_dialog->checkbutton_appearance_show_tabs = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_show_tabs"));
726  remmina_pref_dialog->checkbutton_appearance_show_notes = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_show_notes"));
727  remmina_pref_dialog->checkbutton_appearance_hide_toolbar = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_hide_toolbar"));
728  remmina_pref_dialog->checkbutton_appearance_hide_searchbar = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_hide_searchbar"));
729  remmina_pref_dialog->comboboxtext_options_double_click = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_options_double_click"));
730  remmina_pref_dialog->comboboxtext_appearance_view_mode = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_appearance_view_mode"));
731  remmina_pref_dialog->comboboxtext_appearance_tab_interface = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_appearance_tab_interface"));
732  remmina_pref_dialog->comboboxtext_appearance_fullscreen_toolbar_visibility = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_appearance_fullscreen_toolbar_visibility"));
733  remmina_pref_dialog->comboboxtext_options_scale_quality = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_options_scale_quality"));
734  remmina_pref_dialog->checkbutton_options_ssh_parseconfig = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_options_ssh_parseconfig"));
735  remmina_pref_dialog->comboboxtext_options_ssh_loglevel = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_options_ssh_loglevel"));
736  remmina_pref_dialog->entry_options_ssh_port = GTK_ENTRY(GET_OBJECT("entry_options_ssh_port"));
737  remmina_pref_dialog->entry_options_ssh_tcp_keepidle = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_keepidle"));
738  remmina_pref_dialog->entry_options_ssh_tcp_keepintvl = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_keepintvl"));
739  remmina_pref_dialog->entry_options_ssh_tcp_keepcnt = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_keepcnt"));
740  remmina_pref_dialog->entry_options_ssh_tcp_usrtimeout = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_usrtimeout"));
741  remmina_pref_dialog->entry_options_scroll = GTK_ENTRY(GET_OBJECT("entry_options_scroll"));
742  remmina_pref_dialog->entry_options_recent_items = GTK_ENTRY(GET_OBJECT("entry_options_recent_items"));
743  remmina_pref_dialog->entry_grab_color = GTK_ENTRY(GET_OBJECT("entry_grab_color"));
744  remmina_pref_dialog->switch_appearance_grab_color = GTK_SWITCH(GET_OBJECT("switch_appearance_grab_color"));
745  remmina_pref_dialog->button_options_recent_items_clear = GTK_BUTTON(GET_OBJECT("button_options_recent_items_clear"));
746 
747  remmina_pref_dialog->checkbutton_applet_new_connection_on_top = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_new_connection_on_top"));
748  remmina_pref_dialog->checkbutton_applet_hide_totals = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_hide_totals"));
749  remmina_pref_dialog->checkbutton_applet_disable_tray = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_disable_tray"));
750  remmina_pref_dialog->checkbutton_dark_theme = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_dark_theme"));
751  remmina_pref_dialog->checkbutton_applet_start_in_tray = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_start_in_tray"));
752 
753  remmina_pref_dialog->button_keyboard_host_key = GTK_BUTTON(GET_OBJECT("button_keyboard_host_key"));
754  remmina_pref_dialog->button_keyboard_fullscreen = GTK_BUTTON(GET_OBJECT("button_keyboard_fullscreen"));
755  remmina_pref_dialog->button_keyboard_auto_fit = GTK_BUTTON(GET_OBJECT("button_keyboard_auto_fit"));
756  remmina_pref_dialog->button_keyboard_switch_tab_left = GTK_BUTTON(GET_OBJECT("button_keyboard_switch_tab_left"));
757  remmina_pref_dialog->button_keyboard_switch_tab_right = GTK_BUTTON(GET_OBJECT("button_keyboard_switch_tabright"));
758  remmina_pref_dialog->button_keyboard_scaled = GTK_BUTTON(GET_OBJECT("button_keyboard_scaled"));
759  remmina_pref_dialog->button_keyboard_grab_keyboard = GTK_BUTTON(GET_OBJECT("button_keyboard_grab_keyboard"));
760  remmina_pref_dialog->button_keyboard_multimon = GTK_BUTTON(GET_OBJECT("button_keyboard_multimon"));
761  remmina_pref_dialog->button_keyboard_screenshot = GTK_BUTTON(GET_OBJECT("button_keyboard_screenshot"));
762  remmina_pref_dialog->button_keyboard_viewonly = GTK_BUTTON(GET_OBJECT("button_keyboard_viewonly"));
763  remmina_pref_dialog->button_keyboard_minimize = GTK_BUTTON(GET_OBJECT("button_keyboard_minimize"));
764  remmina_pref_dialog->button_keyboard_disconnect = GTK_BUTTON(GET_OBJECT("button_keyboard_disconnect"));
765  remmina_pref_dialog->button_keyboard_toolbar = GTK_BUTTON(GET_OBJECT("button_keyboard_toolbar"));
766 
767  remmina_pref_dialog->switch_terminal_font_system = GTK_SWITCH(GET_OBJECT("switch_terminal_font_system"));
768  remmina_pref_dialog->fontbutton_terminal_font = GTK_FONT_BUTTON(GET_OBJECT("fontbutton_terminal_font"));
769  remmina_pref_dialog->switch_terminal_bold = GTK_SWITCH(GET_OBJECT("switch_terminal_bold"));
770  remmina_pref_dialog->entry_scrollback_lines = GTK_ENTRY(GET_OBJECT("entry_scrollback_lines"));
771  remmina_pref_dialog->button_keyboard_copy = GTK_BUTTON(GET_OBJECT("button_keyboard_copy"));
772  remmina_pref_dialog->button_keyboard_paste = GTK_BUTTON(GET_OBJECT("button_keyboard_paste"));
773  remmina_pref_dialog->button_keyboard_select_all = GTK_BUTTON(GET_OBJECT("button_keyboard_select_all"));
774  remmina_pref_dialog->button_keyboard_increase_font = GTK_BUTTON(GET_OBJECT("button_keyboard_increase_font"));
775  remmina_pref_dialog->button_keyboard_decrease_font = GTK_BUTTON(GET_OBJECT("button_keyboard_decrease_font"));
776  remmina_pref_dialog->button_keyboard_search_text = GTK_BUTTON(GET_OBJECT("button_keyboard_search_text"));
777  remmina_pref_dialog->label_terminal_foreground = GTK_LABEL(GET_OBJECT("label_terminal_foreground"));
778  remmina_pref_dialog->colorbutton_foreground = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_foreground"));
779  remmina_pref_dialog->label_terminal_background = GTK_LABEL(GET_OBJECT("label_terminal_background"));
780  remmina_pref_dialog->colorbutton_background = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_background"));
781  remmina_pref_dialog->label_terminal_cursor_color = GTK_LABEL(GET_OBJECT("label_terminal_cursor_color"));
782  remmina_pref_dialog->colorbutton_cursor = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_cursor"));
783  remmina_pref_dialog->colorbutton_cursor_foreground = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_cursor_foreground"));
784  remmina_pref_dialog->colorbutton_highlight = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_highlight"));
785  remmina_pref_dialog->colorbutton_highlight_foreground = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_highlight_foreground"));
786  remmina_pref_dialog->label_terminal_bold_color = GTK_LABEL(GET_OBJECT("label_terminal_bold_color"));
787  remmina_pref_dialog->colorbutton_colorBD = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_colorBD"));
788  remmina_pref_dialog->label_terminal_normal_colors = GTK_LABEL(GET_OBJECT("label_terminal_normal_colors"));
789  remmina_pref_dialog->colorbutton_color0 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color0"));
790  remmina_pref_dialog->colorbutton_color1 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color1"));
791  remmina_pref_dialog->colorbutton_color2 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color2"));
792  remmina_pref_dialog->colorbutton_color3 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color3"));
793  remmina_pref_dialog->colorbutton_color4 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color4"));
794  remmina_pref_dialog->colorbutton_color5 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color5"));
795  remmina_pref_dialog->colorbutton_color6 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color6"));
796  remmina_pref_dialog->colorbutton_color7 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color7"));
797  remmina_pref_dialog->label_terminal_bright_colors = GTK_LABEL(GET_OBJECT("label_terminal_bright_colors"));
798  remmina_pref_dialog->colorbutton_color8 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color8"));
799  remmina_pref_dialog->colorbutton_color9 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color9"));
800  remmina_pref_dialog->colorbutton_color10 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color10"));
801  remmina_pref_dialog->colorbutton_color11 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color11"));
802  remmina_pref_dialog->colorbutton_color12 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color12"));
803  remmina_pref_dialog->colorbutton_color13 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color13"));
804  remmina_pref_dialog->colorbutton_color14 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color14"));
805  remmina_pref_dialog->colorbutton_color15 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color15"));
806 #if defined (HAVE_LIBSSH) && defined (HAVE_LIBVTE)
807 #if VTE_CHECK_VERSION(0, 38, 0)
808  const gchar *remmina_dir;
809  gchar *destpath;
810  remmina_dir = g_build_path("/", g_get_user_config_dir(), "remmina", NULL);
811  destpath = g_strdup_printf("%s/remmina.colors", remmina_dir);
812  remmina_pref_dialog->button_term_cs = GTK_FILE_CHOOSER(GET_OBJECT("button_term_cs"));
813  const gchar *fc_tooltip_text = g_strconcat(_("Picking a terminal colouring file replaces the file: "),
814  "\n",
815  destpath,
816  "\n",
817  _("This file contains the “Custom” terminal colour scheme selectable from the “Advanced” tab of terminal connections and editable in the “Terminal” tab in the settings."),
818  NULL);
819  gtk_widget_set_tooltip_text(GTK_WIDGET(remmina_pref_dialog->button_term_cs), fc_tooltip_text);
820  gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(remmina_pref_dialog->button_term_cs), REMMINA_RUNTIME_TERM_CS_DIR);
821  g_free(destpath);
822 #endif
823 #endif
824  /* Non widget objects */
825  actions = g_simple_action_group_new();
826  g_action_map_add_action_entries(G_ACTION_MAP(actions), pref_actions, G_N_ELEMENTS(pref_actions), remmina_pref_dialog->dialog);
827  gtk_widget_insert_action_group(GTK_WIDGET(remmina_pref_dialog->dialog), "pref", G_ACTION_GROUP(actions));
828  g_action_map_add_action_entries(G_ACTION_MAP(actions), pref_actions, G_N_ELEMENTS(pref_actions), remmina_pref_dialog->dialog);
829  g_object_unref(actions);
830  /* Accelerators */
831  accel_group = gtk_accel_group_new();
832  gtk_window_add_accel_group(GTK_WINDOW(remmina_pref_dialog->dialog), accel_group);
833  gtk_accel_group_connect(accel_group, GDK_KEY_Q, GDK_CONTROL_MASK, 0,
834  g_cclosure_new_swap(G_CALLBACK(remmina_pref_dialog_on_action_close), NULL, NULL));
835 
836  /* Connect signals */
837  gtk_builder_connect_signals(remmina_pref_dialog->builder, NULL);
838  /* Initialize the window and load the preferences */
840 
841  if (default_tab > 0)
842  gtk_notebook_set_current_page(remmina_pref_dialog->notebook_preferences, default_tab);
843  return remmina_pref_dialog->dialog;
844 }
845 
847 {
848  if (!remmina_pref_dialog)
849  return NULL;
850  return remmina_pref_dialog->dialog;
851 }
guint shortcutkey_fullscreen
Definition: remmina_pref.h:175
+Go to the documentation of this file.
1 /*
2  * Remmina - The GTK+ Remote Desktop Client
3  * Copyright (C) 2009-2011 Vic Lee
4  * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo
5  * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo
6  * Copyright (C) 2022-2023 Antenore Gatta, Giovanni Panozzo, Hiroyuki Tanaka
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  *
23  * In addition, as a special exception, the copyright holders give
24  * permission to link the code of portions of this program with the
25  * OpenSSL library under certain conditions as described in each
26  * individual source file, and distribute linked combinations
27  * including the two.
28  * You must obey the GNU General Public License in all respects
29  * for all of the code used other than OpenSSL. * If you modify
30  * file(s) with this exception, you may extend this exception to your
31  * version of the file(s), but you are not obligated to do so. * If you
32  * do not wish to do so, delete this exception statement from your
33  * version. * If you delete this exception statement from all source
34  * files in the program, then also delete it here.
35  *
36  */
37 
38 #include <gtk/gtk.h>
39 #include <glib/gi18n.h>
40 #include <stdlib.h>
41 #include "config.h"
42 #if defined (HAVE_LIBSSH) && defined (HAVE_LIBVTE)
43 #include <vte/vte.h>
44 #endif
45 #include "remmina_log.h"
46 #include "remmina_file_manager.h"
47 #include "remmina_sodium.h"
48 #include "remmina_passwd.h"
49 #include "remmina_public.h"
50 #include "remmina_main.h"
51 #include "remmina_string_list.h"
52 #include "remmina_widget_pool.h"
53 #include "remmina_key_chooser.h"
54 #include "remmina_plugin_manager.h"
55 #include "remmina_icon.h"
56 #include "remmina_pref.h"
57 #include "remmina_pref_dialog.h"
59 
61 
62 #define GET_OBJECT(object_name) gtk_builder_get_object(remmina_pref_dialog->builder, object_name)
63 
64 static GActionEntry pref_actions[] = {
65  { "close", remmina_pref_dialog_on_action_close, NULL, NULL, NULL },
66 };
67 
68 
69 /* Show a key chooser dialog */
70 void remmina_pref_dialog_on_key_chooser(GtkWidget *widget, gpointer user_data)
71 {
72  TRACE_CALL(__func__);
73  RemminaKeyChooserArguments *arguments;
74 
75  g_return_if_fail(GTK_IS_BUTTON(widget));
76 
77  arguments = remmina_key_chooser_new(GTK_WINDOW(remmina_pref_dialog->dialog), FALSE);
78  if (arguments->response != GTK_RESPONSE_CANCEL && arguments->response != GTK_RESPONSE_DELETE_EVENT) {
79  gchar *val = remmina_key_chooser_get_value(arguments->keyval, arguments->state);
80  gtk_button_set_label(GTK_BUTTON(widget), val);
81  g_free(val);
82  }
83  g_free(arguments);
84 }
85 
86 /* Show the available resolutions list dialog */
87 void remmina_pref_on_button_resolutions_clicked(GtkWidget *widget, gpointer user_data)
88 {
89  TRACE_CALL(__func__);
90  GtkDialog *dialog = remmina_string_list_new(FALSE, NULL);
91 
94  remmina_string_list_set_titles(_("Resolutions"), _("Configure the available resolutions"));
95  gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(remmina_pref_dialog->dialog));
96  gtk_dialog_run(dialog);
97  g_free(remmina_pref.resolutions);
99  gtk_widget_destroy(GTK_WIDGET(dialog));
100 }
101 
102 /* Re-initialize the remmina_pref_init to reload the color scheme when a color scheme
103  * file is selected*/
104 void remmina_pref_on_color_scheme_selected(GtkWidget *widget, gpointer user_data)
105 {
106  TRACE_CALL(__func__);
107  gchar *sourcepath;
108  gchar *remmina_dir;
109  gchar *destpath;
110  GFile *source;
111  GFile *destination;
112 
113  sourcepath = gtk_file_chooser_get_filename(remmina_pref_dialog->button_term_cs);
114  source = g_file_new_for_path(sourcepath);
115 
116  remmina_dir = g_build_path("/", g_get_user_config_dir(), "remmina", NULL);
117  /* /home/foo/.config/remmina */
118  destpath = g_strdup_printf("%s/remmina.colors", remmina_dir);
119  destination = g_file_new_for_path(destpath);
120 
121  if (g_file_test(sourcepath, G_FILE_TEST_IS_REGULAR)) {
122  g_file_copy(source,
123  destination,
124  G_FILE_COPY_OVERWRITE,
125  NULL,
126  NULL,
127  NULL,
128  NULL);
129  /* Here we should reinitialize the widget */
130  gtk_file_chooser_set_file(remmina_pref_dialog->button_term_cs, source, NULL);
131  }
132  g_free(sourcepath);
133  g_free(remmina_dir);
134  g_free(destpath);
135  g_object_unref(source);
136 }
137 
138 void remmina_pref_dialog_clear_recent(GtkWidget *widget, gpointer user_data)
139 {
140  TRACE_CALL(__func__);
141  GtkDialog *dialog;
142 
144  dialog = GTK_DIALOG(gtk_message_dialog_new(GTK_WINDOW(remmina_pref_dialog->dialog),
145  GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
146  _("Recent lists cleared.")));
147  gtk_dialog_run(dialog);
148  gtk_widget_destroy(GTK_WIDGET(dialog));
149 }
150 
151 /* Configure custom keystrokes to send to the plugins */
152 void remmina_pref_on_button_keystrokes_clicked(GtkWidget *widget, gpointer user_data)
153 {
154  TRACE_CALL(__func__);
155  GtkDialog *dialog = remmina_string_list_new(TRUE, STRING_DELIMITOR2);
156 
158  remmina_string_list_set_titles(_("Keystrokes"), _("Configure the keystrokes"));
159  gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(remmina_pref_dialog->dialog));
160  gtk_dialog_run(dialog);
161  g_free(remmina_pref.keystrokes);
163  gtk_widget_destroy(GTK_WIDGET(dialog));
164 }
165 
166 void remmina_prefdiag_on_grab_color_activated(GtkSwitch *widget, gpointer user_data)
167 {
168  TRACE_CALL(__func__);
169  //REMMINA_DEBUG ("entry_grab_color %d", gtk_switch_get_active(widget));
170  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->entry_grab_color), gtk_switch_get_active(widget));
171 }
172 
173 /* connect to notify::active or toggled (in this case ::toggled */
174 void remmina_prefdiag_on_use_password_activated(GtkSwitch *sw, gpointer user_data)
175 {
176  TRACE_CALL(__func__);
177  //REMMINA_DEBUG ("Use Primary Password %d", gtk_switch_get_active(sw));
178  if (gtk_switch_get_active(sw)) {
179  //REMMINA_DEBUG ("use_password activated");
180  gchar *unlock_password = NULL;
181  unlock_password = g_strdup(remmina_pref_get_value("unlock_password"));
182  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_connect), TRUE);
183  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_edit), TRUE);
184  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_view_passwords), TRUE);
185  //REMMINA_DEBUG ("Password from preferences is: %s", unlock_password);
186  if (unlock_password == NULL || unlock_password[0] == '\0') {
187  if (remmina_passwd(GTK_WINDOW(remmina_pref_dialog->dialog), &unlock_password)) {
188  //REMMINA_DEBUG ("Password is: %s", unlock_password);
189  remmina_pref_set_value("unlock_password", g_strdup(unlock_password));
190  remmina_pref.unlock_password = g_strdup(unlock_password);
191  } else {
193  remmina_pref_set_value("unlock_password", "");
194  }
195  }
196  g_free(unlock_password), unlock_password = NULL;
197  } else {
198  //REMMINA_DEBUG ("use_password deactivated");
199  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_connect), FALSE);
200  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_edit), FALSE);
201  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_lock_view_passwords), FALSE);
203  remmina_pref_set_value("unlock_password", "");
204  }
205 }
206 
207 void remmina_pref_dialog_on_action_close(GSimpleAction *action, GVariant *param, gpointer data)
208 {
209  TRACE_CALL(__func__);
210  gtk_widget_destroy(GTK_WIDGET(remmina_pref_dialog->dialog));
211  /* Reload to use new preferences */
213 }
214 
216 {
217  TRACE_CALL(__func__);
218  gtk_widget_destroy(GTK_WIDGET(remmina_pref_dialog->dialog));
219 }
220 
221 void remmina_pref_on_dialog_destroy(GtkWidget *widget, gpointer user_data)
222 {
223  TRACE_CALL(__func__);
224  gboolean b;
225  GdkRGBA color;
226  gboolean rebuild_remmina_icon = FALSE;
227 
228  remmina_pref.datadir_path = gtk_file_chooser_get_filename(remmina_pref_dialog->filechooserbutton_options_datadir_path);
229  if (remmina_pref.datadir_path == NULL)
230  remmina_pref.datadir_path = g_strdup("");
231  remmina_pref.remmina_file_name = gtk_entry_get_text(remmina_pref_dialog->entry_options_file_name);
232  remmina_pref.screenshot_path = gtk_file_chooser_get_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path);
233  remmina_pref.screenshot_name = gtk_entry_get_text(remmina_pref_dialog->entry_options_screenshot_name);
234  remmina_pref.deny_screenshot_clipboard = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_options_deny_screenshot_clipboard));
235  remmina_pref.save_view_mode = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_options_remember_last_view_mode));
236  remmina_pref.confirm_close = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_options_confirm_close));
237  remmina_pref.use_primary_password = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_use_primary_password));
238  remmina_pref.lock_connect = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_connect));
239  remmina_pref.lock_edit = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_edit));
240  remmina_pref.lock_view_passwords = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_view_passwords));
241  remmina_pref.enc_mode = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_security_enc_method);
242  remmina_pref.audit = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_audit));
243  remmina_pref.trust_all = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_security_trust_all));
244  remmina_pref.screenshot_path = gtk_file_chooser_get_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path);
245  remmina_pref.fullscreen_on_auto = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_fullscreen_on_auto));
246  remmina_pref.always_show_tab = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_tabs));
247  remmina_pref.always_show_notes = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_notes));
248  remmina_pref.hide_connection_toolbar = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_hide_toolbar));
249  remmina_pref.hide_searchbar = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_hide_searchbar));
250 
251  remmina_pref.default_action = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_options_double_click);
252  remmina_pref.default_mode = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_appearance_view_mode);
253  remmina_pref.tab_mode = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_appearance_tab_interface);
255  remmina_pref.scale_quality = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_options_scale_quality);
256  remmina_pref.ssh_loglevel = gtk_combo_box_get_active(remmina_pref_dialog->comboboxtext_options_ssh_loglevel);
257  remmina_pref.sshtunnel_port = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_ssh_port));
258  if (remmina_pref.sshtunnel_port <= 0)
259  remmina_pref.sshtunnel_port = DEFAULT_SSHTUNNEL_PORT;
260  remmina_pref.ssh_tcp_keepidle = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_ssh_tcp_keepidle));
262  remmina_pref.ssh_tcp_keepidle = SSH_SOCKET_TCP_KEEPIDLE;
263  remmina_pref.ssh_tcp_keepintvl = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_ssh_tcp_keepintvl));
265  remmina_pref.ssh_tcp_keepintvl = SSH_SOCKET_TCP_KEEPINTVL;
266  remmina_pref.ssh_tcp_keepcnt = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_ssh_tcp_keepcnt));
267  if (remmina_pref.ssh_tcp_keepcnt <= 0)
268  remmina_pref.ssh_tcp_keepcnt = SSH_SOCKET_TCP_KEEPCNT;
269  remmina_pref.ssh_tcp_usrtimeout = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_ssh_tcp_usrtimeout));
271  remmina_pref.ssh_tcp_usrtimeout = SSH_SOCKET_TCP_USER_TIMEOUT;
272  remmina_pref.ssh_parseconfig = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_options_ssh_parseconfig));
273 #if SODIUM_VERSION_INT >= 90200
274  remmina_pref.unlock_timeout = atoi(gtk_entry_get_text(remmina_pref_dialog->unlock_timeout));
277 #endif
278 
279  remmina_pref.auto_scroll_step = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_scroll));
282  else if (remmina_pref.auto_scroll_step > 500)
284 
285  remmina_pref.recent_maximum = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_options_recent_items));
288 
289  remmina_pref.applet_new_ontop = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_new_connection_on_top));
290  remmina_pref.applet_hide_count = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_hide_totals));
291  b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_dark_theme));
292  if (remmina_pref.dark_theme != b) {
294  rebuild_remmina_icon = TRUE;
295  }
296 
297  remmina_pref.grab_color_switch = gtk_switch_get_active(remmina_pref_dialog->switch_appearance_grab_color);
298  remmina_pref.grab_color = gtk_entry_get_text(remmina_pref_dialog->entry_grab_color);
299 
300  b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_disable_tray));
301  if (remmina_pref.disable_tray_icon != b) {
303  rebuild_remmina_icon = TRUE;
304  }
305  if (b)
306  b = FALSE;
307  else
308  b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_start_in_tray));
310 
311  if (rebuild_remmina_icon) {
314  }
315 
316  remmina_pref.hostkey = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_host_key));
318  remmina_pref.shortcutkey_autofit = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_auto_fit));
321  remmina_pref.shortcutkey_scale = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_scaled));
328  remmina_pref.shortcutkey_toolbar = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_toolbar));
329 
330  g_free(remmina_pref.vte_font);
331  if (gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_font_system)))
332  remmina_pref.vte_font = NULL;
333  else
334  remmina_pref.vte_font = g_strdup(gtk_font_chooser_get_font(GTK_FONT_CHOOSER(remmina_pref_dialog->fontbutton_terminal_font)));
335  remmina_pref.vte_allow_bold_text = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_bold));
336  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_foreground), &color);
337  remmina_pref.color_pref.foreground = gdk_rgba_to_string(&color);
338  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_background), &color);
339  remmina_pref.color_pref.background = gdk_rgba_to_string(&color);
340  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor), &color);
341  remmina_pref.color_pref.cursor = gdk_rgba_to_string(&color);
342  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor_foreground), &color);
343  remmina_pref.color_pref.cursor_foreground = gdk_rgba_to_string(&color);
344  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight), &color);
345  remmina_pref.color_pref.highlight = gdk_rgba_to_string(&color);
346  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight_foreground), &color);
347  remmina_pref.color_pref.highlight_foreground = gdk_rgba_to_string(&color);
348  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_colorBD), &color);
349  remmina_pref.color_pref.colorBD = gdk_rgba_to_string(&color);
350  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color0), &color);
351  remmina_pref.color_pref.color0 = gdk_rgba_to_string(&color);
352  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color1), &color);
353  remmina_pref.color_pref.color1 = gdk_rgba_to_string(&color);
354  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color2), &color);
355  remmina_pref.color_pref.color2 = gdk_rgba_to_string(&color);
356  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color3), &color);
357  remmina_pref.color_pref.color3 = gdk_rgba_to_string(&color);
358  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color4), &color);
359  remmina_pref.color_pref.color4 = gdk_rgba_to_string(&color);
360  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color5), &color);
361  remmina_pref.color_pref.color5 = gdk_rgba_to_string(&color);
362  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color6), &color);
363  remmina_pref.color_pref.color6 = gdk_rgba_to_string(&color);
364  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color7), &color);
365  remmina_pref.color_pref.color7 = gdk_rgba_to_string(&color);
366  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color8), &color);
367  remmina_pref.color_pref.color8 = gdk_rgba_to_string(&color);
368  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color9), &color);
369  remmina_pref.color_pref.color9 = gdk_rgba_to_string(&color);
370  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color10), &color);
371  remmina_pref.color_pref.color10 = gdk_rgba_to_string(&color);
372  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color11), &color);
373  remmina_pref.color_pref.color11 = gdk_rgba_to_string(&color);
374  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color12), &color);
375  remmina_pref.color_pref.color12 = gdk_rgba_to_string(&color);
376  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color13), &color);
377  remmina_pref.color_pref.color13 = gdk_rgba_to_string(&color);
378  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color14), &color);
379  remmina_pref.color_pref.color14 = gdk_rgba_to_string(&color);
380  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color15), &color);
381  remmina_pref.color_pref.color15 = gdk_rgba_to_string(&color);
382  remmina_pref.vte_lines = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_scrollback_lines));
383  remmina_pref.vte_shortcutkey_copy = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_copy));
384  remmina_pref.vte_shortcutkey_paste = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_paste));
389 
392 
393  remmina_pref_dialog->dialog = NULL;
394 }
395 
396 static gboolean remmina_pref_dialog_add_pref_plugin(gchar *name, RemminaPlugin *plugin, gpointer user_data)
397 {
398  TRACE_CALL(__func__);
399  RemminaPrefPlugin *pref_plugin;
400  GtkWidget *vbox;
401  GtkWidget *widget;
402 
403  pref_plugin = (RemminaPrefPlugin *)plugin;
404 
405  widget = gtk_label_new(pref_plugin->pref_label);
406  gtk_widget_set_halign(widget, GTK_ALIGN_START);
407  gtk_widget_show(widget);
408 
409  vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
410  gtk_widget_show(vbox);
411  gtk_notebook_append_page(GTK_NOTEBOOK(remmina_pref_dialog->notebook_preferences), vbox, widget);
412 
413  widget = pref_plugin->get_pref_body(pref_plugin);
414  gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0);
415 
416  return FALSE;
417 }
418 
420 {
421  TRACE_CALL(__func__);
422  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->fontbutton_terminal_font), !gtk_switch_get_active(widget));
423 }
424 
426 {
427  TRACE_CALL(__func__);
428  gboolean b;
429 
430  b = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
431 
432  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), b);
433 }
434 
435 /* Helper function for remmina_pref_dialog_init() */
436 static void remmina_pref_dialog_set_button_label(GtkButton *button, guint keyval)
437 {
438  gchar *val;
439 
440  val = remmina_key_chooser_get_value(keyval, 0);
441  gtk_button_set_label(button, val);
442  g_free(val);
443 }
444 
445 /* Remmina preferences initialization */
446 static void remmina_pref_dialog_init(void)
447 {
448  TRACE_CALL(__func__);
449  gchar buf[100];
450  GdkRGBA color;
451 
452 #if !defined (HAVE_LIBSSH) || !defined (HAVE_LIBVTE)
453  GtkWidget *align;
454 #endif
455 
456 #if !defined (HAVE_LIBVTE)
457  align = GTK_WIDGET(GET_OBJECT("alignment_terminal"));
458  gtk_widget_set_sensitive(align, FALSE);
459 #endif
460 
461 #if !defined (HAVE_LIBSSH)
462  align = GTK_WIDGET(GET_OBJECT("alignment_ssh"));
463  gtk_widget_set_sensitive(align, FALSE);
464 #endif
465 
466  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_options_remember_last_view_mode), remmina_pref.save_view_mode);
467  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_options_confirm_close), remmina_pref.confirm_close);
468 #if SODIUM_VERSION_INT >= 90200
469  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_use_primary_password), remmina_pref.use_primary_password);
470  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_use_primary_password), TRUE);
471  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_connect), remmina_pref.lock_connect);
472  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_edit), remmina_pref.lock_edit);
473  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_view_passwords), remmina_pref.lock_view_passwords);
474  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->unlock_timeout), TRUE);
475 #else
476  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_use_primary_password), FALSE);
477  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_use_primary_password), FALSE);
478  // TRANSLATORS: Do not translate libsodium, is the name of a library
479  gtk_widget_set_tooltip_text(GTK_WIDGET(remmina_pref_dialog->switch_security_use_primary_password), _("libsodium >= 1.9.0 is required to use Primary Password"));
480  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_connect), FALSE);
481  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_edit), FALSE);
482  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->unlock_timeout), FALSE);
483 #endif
484  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_audit), remmina_pref.audit);
485  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_audit), TRUE);
486  if (remmina_pref.remmina_file_name != NULL)
487  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, remmina_pref.remmina_file_name);
488  else
489  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, "%G_%P_%N_%h.remmina");
490 
491  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_trust_all), remmina_pref.trust_all);
492 
493  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_options_deny_screenshot_clipboard), remmina_pref.deny_screenshot_clipboard);
494  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_fullscreen_on_auto), remmina_pref.fullscreen_on_auto);
495  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_tabs), remmina_pref.always_show_tab);
496  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_notes), remmina_pref.always_show_notes);
497  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_hide_toolbar), remmina_pref.hide_connection_toolbar);
498  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_hide_searchbar), remmina_pref.hide_searchbar);
499 
500  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.sshtunnel_port);
501  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_port, buf);
502  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_keepidle);
503  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_keepidle, buf);
504  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_keepintvl);
505  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_keepintvl, buf);
506  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_keepcnt);
507  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_keepcnt, buf);
508  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_usrtimeout);
509  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_usrtimeout, buf);
510  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.auto_scroll_step);
511  gtk_entry_set_text(remmina_pref_dialog->entry_options_scroll, buf);
512  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.recent_maximum);
513  gtk_entry_set_text(remmina_pref_dialog->entry_options_recent_items, buf);
514 
515 #ifdef HAVE_LIBAPPINDICATOR
516  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_new_connection_on_top), remmina_pref.applet_new_ontop);
517  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_hide_totals), remmina_pref.applet_hide_count);
518  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_disable_tray), remmina_pref.disable_tray_icon);
519  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_dark_theme), remmina_pref.dark_theme);
520  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_start_in_tray), remmina_icon_is_autostart());
521  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), !remmina_pref.disable_tray_icon);
522 #else
524  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_dark_theme), remmina_pref.dark_theme);
525  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_new_connection_on_top), FALSE);
526  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_hide_totals), FALSE);
527  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_disable_tray), FALSE);
528  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), FALSE);
529 #endif
530 
544 
546  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_font_system), TRUE);
548  gtk_font_chooser_set_font(GTK_FONT_CHOOSER(remmina_pref_dialog->fontbutton_terminal_font), remmina_pref.vte_font);
549  } else {
550  gtk_font_chooser_set_font(GTK_FONT_CHOOSER(remmina_pref_dialog->fontbutton_terminal_font), "Monospace 12");
551  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->fontbutton_terminal_font), FALSE);
552  }
553  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_bold), remmina_pref.vte_allow_bold_text);
554 
555  /* Foreground color option */
556  gdk_rgba_parse(&color, remmina_pref.color_pref.foreground);
557  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_foreground), &color);
558  /* Background color option */
559  gdk_rgba_parse(&color, remmina_pref.color_pref.background);
560  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_background), &color);
561  /* Cursor color option */
562  gdk_rgba_parse(&color, remmina_pref.color_pref.cursor);
563  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor), &color);
564  gdk_rgba_parse(&color, remmina_pref.color_pref.cursor_foreground);
565  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor_foreground), &color);
566  /* Highlight color option */
567  gdk_rgba_parse(&color, remmina_pref.color_pref.highlight);
568  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight), &color);
569  gdk_rgba_parse(&color, remmina_pref.color_pref.highlight_foreground);
570  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight_foreground), &color);
571  /* Bold color option */
572  gdk_rgba_parse(&color, remmina_pref.color_pref.colorBD);
573  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_colorBD), &color);
574  /* 16 colors */
575  gdk_rgba_parse(&color, remmina_pref.color_pref.color0);
576  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color0), &color);
577  gdk_rgba_parse(&color, remmina_pref.color_pref.color1);
578  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color1), &color);
579  gdk_rgba_parse(&color, remmina_pref.color_pref.color2);
580  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color2), &color);
581  gdk_rgba_parse(&color, remmina_pref.color_pref.color3);
582  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color3), &color);
583  gdk_rgba_parse(&color, remmina_pref.color_pref.color4);
584  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color4), &color);
585  gdk_rgba_parse(&color, remmina_pref.color_pref.color5);
586  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color5), &color);
587  gdk_rgba_parse(&color, remmina_pref.color_pref.color6);
588  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color6), &color);
589  gdk_rgba_parse(&color, remmina_pref.color_pref.color7);
590  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color7), &color);
591  gdk_rgba_parse(&color, remmina_pref.color_pref.color8);
592  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color8), &color);
593  gdk_rgba_parse(&color, remmina_pref.color_pref.color9);
594  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color9), &color);
595  gdk_rgba_parse(&color, remmina_pref.color_pref.color10);
596  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color10), &color);
597  gdk_rgba_parse(&color, remmina_pref.color_pref.color11);
598  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color11), &color);
599  gdk_rgba_parse(&color, remmina_pref.color_pref.color12);
600  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color12), &color);
601  gdk_rgba_parse(&color, remmina_pref.color_pref.color13);
602  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color13), &color);
603  gdk_rgba_parse(&color, remmina_pref.color_pref.color14);
604  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color14), &color);
605  gdk_rgba_parse(&color, remmina_pref.color_pref.color15);
606  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color15), &color);
607 #if defined (HAVE_LIBSSH) && defined (HAVE_LIBVTE)
608 #if !VTE_CHECK_VERSION(0, 38, 0)
609  /* Disable color scheme buttons if old version of VTE */
610  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_cursor), FALSE);
611  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_cursor_foreground), FALSE);
612  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_highlight), FALSE);
613  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_highlight_foreground), FALSE);
614  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_colorBD), FALSE);
615  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color0), FALSE);
616  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color1), FALSE);
617  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color2), FALSE);
618  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color3), FALSE);
619  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color4), FALSE);
620  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color5), FALSE);
621  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color6), FALSE);
622  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color7), FALSE);
623  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color8), FALSE);
624  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color9), FALSE);
625  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color10), FALSE);
626  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color11), FALSE);
627  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color12), FALSE);
628  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color13), FALSE);
629  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color14), FALSE);
630  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color15), FALSE);
631 #endif
632 #endif
633 
634  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.vte_lines);
635  gtk_entry_set_text(remmina_pref_dialog->entry_scrollback_lines, buf);
636 
637 #if SODIUM_VERSION_INT >= 90200
638  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.unlock_timeout);
639  gtk_entry_set_text(remmina_pref_dialog->unlock_timeout, buf);
640 #endif
641 
642  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_options_double_click, remmina_pref.default_action);
643  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_appearance_view_mode, remmina_pref.default_mode);
644  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_appearance_tab_interface, remmina_pref.tab_mode);
645  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_security_enc_method, remmina_pref.enc_mode);
647  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_options_scale_quality, remmina_pref.scale_quality);
648  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_options_ssh_loglevel, remmina_pref.ssh_loglevel);
649  if (remmina_pref.datadir_path != NULL && strlen(remmina_pref.datadir_path) > 0)
650  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_datadir_path, remmina_pref.datadir_path);
651  else
652  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_datadir_path, remmina_file_get_datadir());
653  if (remmina_pref.remmina_file_name != NULL)
654  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, remmina_pref.remmina_file_name);
655  else
656  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, "%G_%P_%N_%h.remmina");
657 
658  if (remmina_pref.screenshot_path != NULL)
659  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path, remmina_pref.screenshot_path);
660  else
661  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path, g_get_home_dir());
662  if (remmina_pref.screenshot_name != NULL)
663  gtk_entry_set_text(remmina_pref_dialog->entry_options_screenshot_name, remmina_pref.screenshot_name);
664  else
665  gtk_entry_set_text(remmina_pref_dialog->entry_options_screenshot_name, "remmina_%p_%h_%Y%m%d-%H%M%S");
666 
667  gtk_switch_set_active(remmina_pref_dialog->switch_appearance_grab_color, remmina_pref.grab_color_switch);
668  if (remmina_pref.grab_color != NULL)
669  gtk_entry_set_text(remmina_pref_dialog->entry_grab_color, remmina_pref.grab_color);
670  else
671  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, "#00FF00");
672 
673  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_options_ssh_parseconfig), remmina_pref.ssh_parseconfig);
674 
681 
683 
684  g_signal_connect(G_OBJECT(remmina_pref_dialog->dialog), "destroy", G_CALLBACK(remmina_pref_on_dialog_destroy), NULL);
685 
686  g_object_set_data(G_OBJECT(remmina_pref_dialog->dialog), "tag", "remmina-pref-dialog");
687  remmina_widget_pool_register(GTK_WIDGET(remmina_pref_dialog->dialog));
688 }
689 
690 /* RemminaPrefDialog instance */
691 GtkWidget *remmina_pref_dialog_new(gint default_tab, GtkWindow *parent)
692 {
693  TRACE_CALL(__func__);
694  GSimpleActionGroup *actions;
695  GtkAccelGroup *accel_group = NULL;
696 
697  remmina_pref_dialog = g_new0(RemminaPrefDialog, 1);
698  remmina_pref_dialog->priv = g_new0(RemminaPrefDialogPriv, 1);
699 
700  remmina_pref_dialog->builder = remmina_public_gtk_builder_new_from_resource("/org/remmina/Remmina/src/../data/ui/remmina_preferences.glade");
701  remmina_pref_dialog->dialog = GTK_WIDGET(gtk_builder_get_object(remmina_pref_dialog->builder, "RemminaPrefDialog"));
702  if (parent)
703  gtk_window_set_transient_for(GTK_WINDOW(remmina_pref_dialog->dialog), parent);
704 
705  remmina_pref_dialog->notebook_preferences = GTK_NOTEBOOK(GET_OBJECT("notebook_preferences"));
706 
707  remmina_pref_dialog->filechooserbutton_options_datadir_path = GTK_FILE_CHOOSER(GET_OBJECT("filechooserbutton_options_datadir_path"));
708  remmina_pref_dialog->entry_options_file_name = GTK_ENTRY(GET_OBJECT("entry_options_file_name"));
709  remmina_pref_dialog->filechooserbutton_options_screenshots_path = GTK_FILE_CHOOSER(GET_OBJECT("filechooserbutton_options_screenshots_path"));
710  remmina_pref_dialog->entry_options_screenshot_name = GTK_ENTRY(GET_OBJECT("entry_options_screenshot_name"));
711  remmina_pref_dialog->switch_options_deny_screenshot_clipboard = GTK_SWITCH(GET_OBJECT("switch_options_deny_screenshot_clipboard"));
712  remmina_pref_dialog->switch_options_remember_last_view_mode = GTK_SWITCH(GET_OBJECT("switch_options_remember_last_view_mode"));
713  remmina_pref_dialog->switch_options_confirm_close = GTK_SWITCH(GET_OBJECT("switch_options_confirm_close"));
714  remmina_pref_dialog->switch_security_use_primary_password = GTK_SWITCH(GET_OBJECT("switch_security_use_primary_password"));
715  remmina_pref_dialog->unlock_timeout = GTK_ENTRY(GET_OBJECT("unlock_timeout"));
716  remmina_pref_dialog->switch_security_lock_connect = GTK_SWITCH(GET_OBJECT("switch_security_lock_connect"));
717  remmina_pref_dialog->switch_security_lock_edit = GTK_SWITCH(GET_OBJECT("switch_security_lock_edit"));
718  remmina_pref_dialog->switch_security_lock_view_passwords = GTK_SWITCH(GET_OBJECT("switch_security_lock_view_passwords"));
719  remmina_pref_dialog->comboboxtext_security_enc_method = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_security_enc_method"));
720 
721  remmina_pref_dialog->switch_security_audit = GTK_SWITCH(GET_OBJECT("switch_security_audit"));
722  remmina_pref_dialog->switch_security_trust_all = GTK_SWITCH(GET_OBJECT("switch_security_trust_all"));
723  remmina_pref_dialog->checkbutton_options_save_settings = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_options_save_settings"));
724  remmina_pref_dialog->checkbutton_appearance_fullscreen_on_auto = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_fullscreen_on_auto"));
725  remmina_pref_dialog->checkbutton_appearance_show_tabs = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_show_tabs"));
726  remmina_pref_dialog->checkbutton_appearance_show_notes = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_show_notes"));
727  remmina_pref_dialog->checkbutton_appearance_hide_toolbar = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_hide_toolbar"));
728  remmina_pref_dialog->checkbutton_appearance_hide_searchbar = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_hide_searchbar"));
729  remmina_pref_dialog->comboboxtext_options_double_click = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_options_double_click"));
730  remmina_pref_dialog->comboboxtext_appearance_view_mode = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_appearance_view_mode"));
731  remmina_pref_dialog->comboboxtext_appearance_tab_interface = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_appearance_tab_interface"));
732  remmina_pref_dialog->comboboxtext_appearance_fullscreen_toolbar_visibility = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_appearance_fullscreen_toolbar_visibility"));
733  remmina_pref_dialog->comboboxtext_options_scale_quality = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_options_scale_quality"));
734  remmina_pref_dialog->checkbutton_options_ssh_parseconfig = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_options_ssh_parseconfig"));
735  remmina_pref_dialog->comboboxtext_options_ssh_loglevel = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_options_ssh_loglevel"));
736  remmina_pref_dialog->entry_options_ssh_port = GTK_ENTRY(GET_OBJECT("entry_options_ssh_port"));
737  remmina_pref_dialog->entry_options_ssh_tcp_keepidle = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_keepidle"));
738  remmina_pref_dialog->entry_options_ssh_tcp_keepintvl = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_keepintvl"));
739  remmina_pref_dialog->entry_options_ssh_tcp_keepcnt = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_keepcnt"));
740  remmina_pref_dialog->entry_options_ssh_tcp_usrtimeout = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_usrtimeout"));
741  remmina_pref_dialog->entry_options_scroll = GTK_ENTRY(GET_OBJECT("entry_options_scroll"));
742  remmina_pref_dialog->entry_options_recent_items = GTK_ENTRY(GET_OBJECT("entry_options_recent_items"));
743  remmina_pref_dialog->entry_grab_color = GTK_ENTRY(GET_OBJECT("entry_grab_color"));
744  remmina_pref_dialog->switch_appearance_grab_color = GTK_SWITCH(GET_OBJECT("switch_appearance_grab_color"));
745  remmina_pref_dialog->button_options_recent_items_clear = GTK_BUTTON(GET_OBJECT("button_options_recent_items_clear"));
746 
747  remmina_pref_dialog->checkbutton_applet_new_connection_on_top = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_new_connection_on_top"));
748  remmina_pref_dialog->checkbutton_applet_hide_totals = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_hide_totals"));
749  remmina_pref_dialog->checkbutton_applet_disable_tray = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_disable_tray"));
750  remmina_pref_dialog->checkbutton_dark_theme = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_dark_theme"));
751  remmina_pref_dialog->checkbutton_applet_start_in_tray = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_start_in_tray"));
752 
753  remmina_pref_dialog->button_keyboard_host_key = GTK_BUTTON(GET_OBJECT("button_keyboard_host_key"));
754  remmina_pref_dialog->button_keyboard_fullscreen = GTK_BUTTON(GET_OBJECT("button_keyboard_fullscreen"));
755  remmina_pref_dialog->button_keyboard_auto_fit = GTK_BUTTON(GET_OBJECT("button_keyboard_auto_fit"));
756  remmina_pref_dialog->button_keyboard_switch_tab_left = GTK_BUTTON(GET_OBJECT("button_keyboard_switch_tab_left"));
757  remmina_pref_dialog->button_keyboard_switch_tab_right = GTK_BUTTON(GET_OBJECT("button_keyboard_switch_tabright"));
758  remmina_pref_dialog->button_keyboard_scaled = GTK_BUTTON(GET_OBJECT("button_keyboard_scaled"));
759  remmina_pref_dialog->button_keyboard_grab_keyboard = GTK_BUTTON(GET_OBJECT("button_keyboard_grab_keyboard"));
760  remmina_pref_dialog->button_keyboard_multimon = GTK_BUTTON(GET_OBJECT("button_keyboard_multimon"));
761  remmina_pref_dialog->button_keyboard_screenshot = GTK_BUTTON(GET_OBJECT("button_keyboard_screenshot"));
762  remmina_pref_dialog->button_keyboard_viewonly = GTK_BUTTON(GET_OBJECT("button_keyboard_viewonly"));
763  remmina_pref_dialog->button_keyboard_minimize = GTK_BUTTON(GET_OBJECT("button_keyboard_minimize"));
764  remmina_pref_dialog->button_keyboard_disconnect = GTK_BUTTON(GET_OBJECT("button_keyboard_disconnect"));
765  remmina_pref_dialog->button_keyboard_toolbar = GTK_BUTTON(GET_OBJECT("button_keyboard_toolbar"));
766 
767  remmina_pref_dialog->switch_terminal_font_system = GTK_SWITCH(GET_OBJECT("switch_terminal_font_system"));
768  remmina_pref_dialog->fontbutton_terminal_font = GTK_FONT_BUTTON(GET_OBJECT("fontbutton_terminal_font"));
769  remmina_pref_dialog->switch_terminal_bold = GTK_SWITCH(GET_OBJECT("switch_terminal_bold"));
770  remmina_pref_dialog->entry_scrollback_lines = GTK_ENTRY(GET_OBJECT("entry_scrollback_lines"));
771  remmina_pref_dialog->button_keyboard_copy = GTK_BUTTON(GET_OBJECT("button_keyboard_copy"));
772  remmina_pref_dialog->button_keyboard_paste = GTK_BUTTON(GET_OBJECT("button_keyboard_paste"));
773  remmina_pref_dialog->button_keyboard_select_all = GTK_BUTTON(GET_OBJECT("button_keyboard_select_all"));
774  remmina_pref_dialog->button_keyboard_increase_font = GTK_BUTTON(GET_OBJECT("button_keyboard_increase_font"));
775  remmina_pref_dialog->button_keyboard_decrease_font = GTK_BUTTON(GET_OBJECT("button_keyboard_decrease_font"));
776  remmina_pref_dialog->button_keyboard_search_text = GTK_BUTTON(GET_OBJECT("button_keyboard_search_text"));
777  remmina_pref_dialog->label_terminal_foreground = GTK_LABEL(GET_OBJECT("label_terminal_foreground"));
778  remmina_pref_dialog->colorbutton_foreground = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_foreground"));
779  remmina_pref_dialog->label_terminal_background = GTK_LABEL(GET_OBJECT("label_terminal_background"));
780  remmina_pref_dialog->colorbutton_background = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_background"));
781  remmina_pref_dialog->label_terminal_cursor_color = GTK_LABEL(GET_OBJECT("label_terminal_cursor_color"));
782  remmina_pref_dialog->colorbutton_cursor = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_cursor"));
783  remmina_pref_dialog->colorbutton_cursor_foreground = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_cursor_foreground"));
784  remmina_pref_dialog->colorbutton_highlight = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_highlight"));
785  remmina_pref_dialog->colorbutton_highlight_foreground = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_highlight_foreground"));
786  remmina_pref_dialog->label_terminal_bold_color = GTK_LABEL(GET_OBJECT("label_terminal_bold_color"));
787  remmina_pref_dialog->colorbutton_colorBD = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_colorBD"));
788  remmina_pref_dialog->label_terminal_normal_colors = GTK_LABEL(GET_OBJECT("label_terminal_normal_colors"));
789  remmina_pref_dialog->colorbutton_color0 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color0"));
790  remmina_pref_dialog->colorbutton_color1 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color1"));
791  remmina_pref_dialog->colorbutton_color2 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color2"));
792  remmina_pref_dialog->colorbutton_color3 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color3"));
793  remmina_pref_dialog->colorbutton_color4 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color4"));
794  remmina_pref_dialog->colorbutton_color5 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color5"));
795  remmina_pref_dialog->colorbutton_color6 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color6"));
796  remmina_pref_dialog->colorbutton_color7 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color7"));
797  remmina_pref_dialog->label_terminal_bright_colors = GTK_LABEL(GET_OBJECT("label_terminal_bright_colors"));
798  remmina_pref_dialog->colorbutton_color8 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color8"));
799  remmina_pref_dialog->colorbutton_color9 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color9"));
800  remmina_pref_dialog->colorbutton_color10 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color10"));
801  remmina_pref_dialog->colorbutton_color11 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color11"));
802  remmina_pref_dialog->colorbutton_color12 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color12"));
803  remmina_pref_dialog->colorbutton_color13 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color13"));
804  remmina_pref_dialog->colorbutton_color14 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color14"));
805  remmina_pref_dialog->colorbutton_color15 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color15"));
806 #if defined (HAVE_LIBSSH) && defined (HAVE_LIBVTE)
807 #if VTE_CHECK_VERSION(0, 38, 0)
808  const gchar *remmina_dir;
809  gchar *destpath;
810  remmina_dir = g_build_path("/", g_get_user_config_dir(), "remmina", NULL);
811  destpath = g_strdup_printf("%s/remmina.colors", remmina_dir);
812  remmina_pref_dialog->button_term_cs = GTK_FILE_CHOOSER(GET_OBJECT("button_term_cs"));
813  const gchar *fc_tooltip_text = g_strconcat(_("Picking a terminal colouring file replaces the file: "),
814  "\n",
815  destpath,
816  "\n",
817  _("This file contains the “Custom” terminal colour scheme selectable from the “Advanced” tab of terminal connections and editable in the “Terminal” tab in the settings."),
818  NULL);
819  gtk_widget_set_tooltip_text(GTK_WIDGET(remmina_pref_dialog->button_term_cs), fc_tooltip_text);
820  gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(remmina_pref_dialog->button_term_cs), REMMINA_RUNTIME_TERM_CS_DIR);
821  g_free(destpath);
822 #endif
823 #endif
824  /* Non widget objects */
825  actions = g_simple_action_group_new();
826  g_action_map_add_action_entries(G_ACTION_MAP(actions), pref_actions, G_N_ELEMENTS(pref_actions), remmina_pref_dialog->dialog);
827  gtk_widget_insert_action_group(GTK_WIDGET(remmina_pref_dialog->dialog), "pref", G_ACTION_GROUP(actions));
828  g_action_map_add_action_entries(G_ACTION_MAP(actions), pref_actions, G_N_ELEMENTS(pref_actions), remmina_pref_dialog->dialog);
829  g_object_unref(actions);
830  /* Accelerators */
831  accel_group = gtk_accel_group_new();
832  gtk_window_add_accel_group(GTK_WINDOW(remmina_pref_dialog->dialog), accel_group);
833  gtk_accel_group_connect(accel_group, GDK_KEY_Q, GDK_CONTROL_MASK, 0,
834  g_cclosure_new_swap(G_CALLBACK(remmina_pref_dialog_on_action_close), NULL, NULL));
835 
836  /* Connect signals */
837  gtk_builder_connect_signals(remmina_pref_dialog->builder, NULL);
838  /* Initialize the window and load the preferences */
840 
841  if (default_tab > 0)
842  gtk_notebook_set_current_page(remmina_pref_dialog->notebook_preferences, default_tab);
843  return remmina_pref_dialog->dialog;
844 }
845 
847 {
848  if (!remmina_pref_dialog)
849  return NULL;
850  return remmina_pref_dialog->dialog;
851 }
guint shortcutkey_fullscreen
Definition: remmina_pref.h:175
GtkDialog * remmina_string_list_new(gboolean two_columns, const gchar *fields_separator)
gboolean hide_searchbar
Definition: remmina_pref.h:155
guint vte_shortcutkey_search_text
Definition: remmina_pref.h:209
-- cgit v1.2.3