Remmina - The GTK+ Remote Desktop Client  v1.4.33
Remmina is a remote desktop client written in GTK+, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large monitors or tiny netbooks. Remmina supports multiple network protocols in an integrated and consistent user interface. Currently RDP, VNC, NX, XDMCP and SSH are supported.
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));
329  remmina_pref.shortcutkey_toolbar = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_toolbar));
330 
331  g_free(remmina_pref.vte_font);
332  if (gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_font_system)))
333  remmina_pref.vte_font = NULL;
334  else
335  remmina_pref.vte_font = g_strdup(gtk_font_chooser_get_font(GTK_FONT_CHOOSER(remmina_pref_dialog->fontbutton_terminal_font)));
336  remmina_pref.vte_allow_bold_text = gtk_switch_get_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_bold));
337  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_foreground), &color);
338  remmina_pref.color_pref.foreground = gdk_rgba_to_string(&color);
339  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_background), &color);
340  remmina_pref.color_pref.background = gdk_rgba_to_string(&color);
341  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor), &color);
342  remmina_pref.color_pref.cursor = gdk_rgba_to_string(&color);
343  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor_foreground), &color);
344  remmina_pref.color_pref.cursor_foreground = gdk_rgba_to_string(&color);
345  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight), &color);
346  remmina_pref.color_pref.highlight = gdk_rgba_to_string(&color);
347  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight_foreground), &color);
348  remmina_pref.color_pref.highlight_foreground = gdk_rgba_to_string(&color);
349  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_colorBD), &color);
350  remmina_pref.color_pref.colorBD = gdk_rgba_to_string(&color);
351  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color0), &color);
352  remmina_pref.color_pref.color0 = gdk_rgba_to_string(&color);
353  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color1), &color);
354  remmina_pref.color_pref.color1 = gdk_rgba_to_string(&color);
355  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color2), &color);
356  remmina_pref.color_pref.color2 = gdk_rgba_to_string(&color);
357  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color3), &color);
358  remmina_pref.color_pref.color3 = gdk_rgba_to_string(&color);
359  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color4), &color);
360  remmina_pref.color_pref.color4 = gdk_rgba_to_string(&color);
361  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color5), &color);
362  remmina_pref.color_pref.color5 = gdk_rgba_to_string(&color);
363  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color6), &color);
364  remmina_pref.color_pref.color6 = gdk_rgba_to_string(&color);
365  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color7), &color);
366  remmina_pref.color_pref.color7 = gdk_rgba_to_string(&color);
367  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color8), &color);
368  remmina_pref.color_pref.color8 = gdk_rgba_to_string(&color);
369  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color9), &color);
370  remmina_pref.color_pref.color9 = gdk_rgba_to_string(&color);
371  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color10), &color);
372  remmina_pref.color_pref.color10 = gdk_rgba_to_string(&color);
373  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color11), &color);
374  remmina_pref.color_pref.color11 = gdk_rgba_to_string(&color);
375  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color12), &color);
376  remmina_pref.color_pref.color12 = gdk_rgba_to_string(&color);
377  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color13), &color);
378  remmina_pref.color_pref.color13 = gdk_rgba_to_string(&color);
379  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color14), &color);
380  remmina_pref.color_pref.color14 = gdk_rgba_to_string(&color);
381  gtk_color_chooser_get_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color15), &color);
382  remmina_pref.color_pref.color15 = gdk_rgba_to_string(&color);
383  remmina_pref.vte_lines = atoi(gtk_entry_get_text(remmina_pref_dialog->entry_scrollback_lines));
384  remmina_pref.vte_shortcutkey_copy = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_copy));
385  remmina_pref.vte_shortcutkey_paste = remmina_key_chooser_get_keyval(gtk_button_get_label(remmina_pref_dialog->button_keyboard_paste));
390 
393 
394  remmina_pref_dialog->dialog = NULL;
395 }
396 
397 static gboolean remmina_pref_dialog_add_pref_plugin(gchar *name, RemminaPlugin *plugin, gpointer user_data)
398 {
399  TRACE_CALL(__func__);
400  RemminaPrefPlugin *pref_plugin;
401  GtkWidget *vbox;
402  GtkWidget *widget;
403 
404  pref_plugin = (RemminaPrefPlugin *)plugin;
405 
406  widget = gtk_label_new(pref_plugin->pref_label);
407  gtk_widget_set_halign(widget, GTK_ALIGN_START);
408  gtk_widget_show(widget);
409 
410  vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
411  gtk_widget_show(vbox);
412  gtk_notebook_append_page(GTK_NOTEBOOK(remmina_pref_dialog->notebook_preferences), vbox, widget);
413 
414  widget = pref_plugin->get_pref_body(pref_plugin);
415  gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, FALSE, 0);
416 
417  return FALSE;
418 }
419 
421 {
422  TRACE_CALL(__func__);
423  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->fontbutton_terminal_font), !gtk_switch_get_active(widget));
424 }
425 
427 {
428  TRACE_CALL(__func__);
429  gboolean b;
430 
431  b = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
432 
433  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), b);
434 }
435 
436 /* Helper function for remmina_pref_dialog_init() */
437 static void remmina_pref_dialog_set_button_label(GtkButton *button, guint keyval)
438 {
439  gchar *val;
440 
441  val = remmina_key_chooser_get_value(keyval, 0);
442  gtk_button_set_label(button, val);
443  g_free(val);
444 }
445 
446 /* Remmina preferences initialization */
447 static void remmina_pref_dialog_init(void)
448 {
449  TRACE_CALL(__func__);
450  gchar buf[100];
451  GdkRGBA color;
452 
453 #if !defined (HAVE_LIBSSH) || !defined (HAVE_LIBVTE)
454  GtkWidget *align;
455 #endif
456 
457 #if !defined (HAVE_LIBVTE)
458  align = GTK_WIDGET(GET_OBJECT("alignment_terminal"));
459  gtk_widget_set_sensitive(align, FALSE);
460 #endif
461 
462 #if !defined (HAVE_LIBSSH)
463  align = GTK_WIDGET(GET_OBJECT("alignment_ssh"));
464  gtk_widget_set_sensitive(align, FALSE);
465 #endif
466 
467  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_options_remember_last_view_mode), remmina_pref.save_view_mode);
468  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_options_confirm_close), remmina_pref.confirm_close);
469 #if SODIUM_VERSION_INT >= 90200
470  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_use_primary_password), remmina_pref.use_primary_password);
471  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_use_primary_password), TRUE);
472  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_connect), remmina_pref.lock_connect);
473  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_edit), remmina_pref.lock_edit);
474  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_view_passwords), remmina_pref.lock_view_passwords);
475  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->unlock_timeout), TRUE);
476 #else
477  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_use_primary_password), FALSE);
478  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_use_primary_password), FALSE);
479  // TRANSLATORS: Do not translate libsodium, is the name of a library
480  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"));
481  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_connect), FALSE);
482  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_lock_edit), FALSE);
483  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->unlock_timeout), FALSE);
484 #endif
485  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_audit), remmina_pref.audit);
486  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->switch_security_audit), TRUE);
487  if (remmina_pref.remmina_file_name != NULL)
488  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, remmina_pref.remmina_file_name);
489  else
490  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, "%G_%P_%N_%h.remmina");
491 
492  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_security_trust_all), remmina_pref.trust_all);
493 
494  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_options_deny_screenshot_clipboard), remmina_pref.deny_screenshot_clipboard);
495  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_fullscreen_on_auto), remmina_pref.fullscreen_on_auto);
496  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_tabs), remmina_pref.always_show_tab);
497  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_show_notes), remmina_pref.always_show_notes);
498  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_hide_toolbar), remmina_pref.hide_connection_toolbar);
499  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_appearance_hide_searchbar), remmina_pref.hide_searchbar);
500 
501  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.sshtunnel_port);
502  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_port, buf);
503  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_keepidle);
504  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_keepidle, buf);
505  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_keepintvl);
506  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_keepintvl, buf);
507  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_keepcnt);
508  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_keepcnt, buf);
509  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.ssh_tcp_usrtimeout);
510  gtk_entry_set_text(remmina_pref_dialog->entry_options_ssh_tcp_usrtimeout, buf);
511  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.auto_scroll_step);
512  gtk_entry_set_text(remmina_pref_dialog->entry_options_scroll, buf);
513  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.recent_maximum);
514  gtk_entry_set_text(remmina_pref_dialog->entry_options_recent_items, buf);
515 
516 #ifdef HAVE_LIBAPPINDICATOR
517  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_new_connection_on_top), remmina_pref.applet_new_ontop);
518  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_hide_totals), remmina_pref.applet_hide_count);
519  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_disable_tray), remmina_pref.disable_tray_icon);
520  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_dark_theme), remmina_pref.dark_theme);
521  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_start_in_tray), remmina_icon_is_autostart());
522  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), !remmina_pref.disable_tray_icon);
523 #else
525  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_dark_theme), remmina_pref.dark_theme);
526  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_new_connection_on_top), FALSE);
527  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_hide_totals), FALSE);
528  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_disable_tray), FALSE);
529  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), FALSE);
530 #endif
531 
546 
548  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_font_system), TRUE);
550  gtk_font_chooser_set_font(GTK_FONT_CHOOSER(remmina_pref_dialog->fontbutton_terminal_font), remmina_pref.vte_font);
551  } else {
552  gtk_font_chooser_set_font(GTK_FONT_CHOOSER(remmina_pref_dialog->fontbutton_terminal_font), "Monospace 12");
553  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->fontbutton_terminal_font), FALSE);
554  }
555  gtk_switch_set_active(GTK_SWITCH(remmina_pref_dialog->switch_terminal_bold), remmina_pref.vte_allow_bold_text);
556 
557  /* Foreground color option */
558  gdk_rgba_parse(&color, remmina_pref.color_pref.foreground);
559  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_foreground), &color);
560  /* Background color option */
561  gdk_rgba_parse(&color, remmina_pref.color_pref.background);
562  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_background), &color);
563  /* Cursor color option */
564  gdk_rgba_parse(&color, remmina_pref.color_pref.cursor);
565  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor), &color);
566  gdk_rgba_parse(&color, remmina_pref.color_pref.cursor_foreground);
567  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_cursor_foreground), &color);
568  /* Highlight color option */
569  gdk_rgba_parse(&color, remmina_pref.color_pref.highlight);
570  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight), &color);
571  gdk_rgba_parse(&color, remmina_pref.color_pref.highlight_foreground);
572  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_highlight_foreground), &color);
573  /* Bold color option */
574  gdk_rgba_parse(&color, remmina_pref.color_pref.colorBD);
575  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_colorBD), &color);
576  /* 16 colors */
577  gdk_rgba_parse(&color, remmina_pref.color_pref.color0);
578  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color0), &color);
579  gdk_rgba_parse(&color, remmina_pref.color_pref.color1);
580  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color1), &color);
581  gdk_rgba_parse(&color, remmina_pref.color_pref.color2);
582  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color2), &color);
583  gdk_rgba_parse(&color, remmina_pref.color_pref.color3);
584  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color3), &color);
585  gdk_rgba_parse(&color, remmina_pref.color_pref.color4);
586  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color4), &color);
587  gdk_rgba_parse(&color, remmina_pref.color_pref.color5);
588  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color5), &color);
589  gdk_rgba_parse(&color, remmina_pref.color_pref.color6);
590  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color6), &color);
591  gdk_rgba_parse(&color, remmina_pref.color_pref.color7);
592  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color7), &color);
593  gdk_rgba_parse(&color, remmina_pref.color_pref.color8);
594  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color8), &color);
595  gdk_rgba_parse(&color, remmina_pref.color_pref.color9);
596  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color9), &color);
597  gdk_rgba_parse(&color, remmina_pref.color_pref.color10);
598  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color10), &color);
599  gdk_rgba_parse(&color, remmina_pref.color_pref.color11);
600  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color11), &color);
601  gdk_rgba_parse(&color, remmina_pref.color_pref.color12);
602  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color12), &color);
603  gdk_rgba_parse(&color, remmina_pref.color_pref.color13);
604  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color13), &color);
605  gdk_rgba_parse(&color, remmina_pref.color_pref.color14);
606  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color14), &color);
607  gdk_rgba_parse(&color, remmina_pref.color_pref.color15);
608  gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(remmina_pref_dialog->colorbutton_color15), &color);
609 #if defined (HAVE_LIBSSH) && defined (HAVE_LIBVTE)
610 #if !VTE_CHECK_VERSION(0, 38, 0)
611  /* Disable color scheme buttons if old version of VTE */
612  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_cursor), FALSE);
613  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_cursor_foreground), FALSE);
614  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_highlight), FALSE);
615  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_highlight_foreground), FALSE);
616  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_colorBD), FALSE);
617  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color0), FALSE);
618  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color1), FALSE);
619  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color2), FALSE);
620  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color3), FALSE);
621  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color4), FALSE);
622  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color5), FALSE);
623  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color6), FALSE);
624  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color7), FALSE);
625  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color8), FALSE);
626  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color9), FALSE);
627  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color10), FALSE);
628  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color11), FALSE);
629  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color12), FALSE);
630  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color13), FALSE);
631  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color14), FALSE);
632  gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->colorbutton_color15), FALSE);
633 #endif
634 #endif
635 
636  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.vte_lines);
637  gtk_entry_set_text(remmina_pref_dialog->entry_scrollback_lines, buf);
638 
639 #if SODIUM_VERSION_INT >= 90200
640  g_snprintf(buf, sizeof(buf), "%i", remmina_pref.unlock_timeout);
641  gtk_entry_set_text(remmina_pref_dialog->unlock_timeout, buf);
642 #endif
643 
644  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_options_double_click, remmina_pref.default_action);
645  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_appearance_view_mode, remmina_pref.default_mode);
646  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_appearance_tab_interface, remmina_pref.tab_mode);
647  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_security_enc_method, remmina_pref.enc_mode);
649  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_options_scale_quality, remmina_pref.scale_quality);
650  gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_options_ssh_loglevel, remmina_pref.ssh_loglevel);
651  if (remmina_pref.datadir_path != NULL && strlen(remmina_pref.datadir_path) > 0)
652  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_datadir_path, remmina_pref.datadir_path);
653  else
654  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_datadir_path, remmina_file_get_datadir());
655  if (remmina_pref.remmina_file_name != NULL)
656  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, remmina_pref.remmina_file_name);
657  else
658  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, "%G_%P_%N_%h.remmina");
659 
660  if (remmina_pref.screenshot_path != NULL)
661  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path, remmina_pref.screenshot_path);
662  else
663  gtk_file_chooser_set_filename(remmina_pref_dialog->filechooserbutton_options_screenshots_path, g_get_home_dir());
664  if (remmina_pref.screenshot_name != NULL)
665  gtk_entry_set_text(remmina_pref_dialog->entry_options_screenshot_name, remmina_pref.screenshot_name);
666  else
667  gtk_entry_set_text(remmina_pref_dialog->entry_options_screenshot_name, "remmina_%p_%h_%Y%m%d-%H%M%S");
668 
669  gtk_switch_set_active(remmina_pref_dialog->switch_appearance_grab_color, remmina_pref.grab_color_switch);
670  if (remmina_pref.grab_color != NULL)
671  gtk_entry_set_text(remmina_pref_dialog->entry_grab_color, remmina_pref.grab_color);
672  else
673  gtk_entry_set_text(remmina_pref_dialog->entry_options_file_name, "#00FF00");
674 
675  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_options_ssh_parseconfig), remmina_pref.ssh_parseconfig);
676 
683 
685 
686  g_signal_connect(G_OBJECT(remmina_pref_dialog->dialog), "destroy", G_CALLBACK(remmina_pref_on_dialog_destroy), NULL);
687 
688  g_object_set_data(G_OBJECT(remmina_pref_dialog->dialog), "tag", "remmina-pref-dialog");
689  remmina_widget_pool_register(GTK_WIDGET(remmina_pref_dialog->dialog));
690 }
691 
692 /* RemminaPrefDialog instance */
693 GtkWidget *remmina_pref_dialog_new(gint default_tab, GtkWindow *parent)
694 {
695  TRACE_CALL(__func__);
696  GSimpleActionGroup *actions;
697  GtkAccelGroup *accel_group = NULL;
698 
699  remmina_pref_dialog = g_new0(RemminaPrefDialog, 1);
700  remmina_pref_dialog->priv = g_new0(RemminaPrefDialogPriv, 1);
701 
702  remmina_pref_dialog->builder = remmina_public_gtk_builder_new_from_resource("/org/remmina/Remmina/src/../data/ui/remmina_preferences.glade");
703  remmina_pref_dialog->dialog = GTK_WIDGET(gtk_builder_get_object(remmina_pref_dialog->builder, "RemminaPrefDialog"));
704  if (parent)
705  gtk_window_set_transient_for(GTK_WINDOW(remmina_pref_dialog->dialog), parent);
706 
707  remmina_pref_dialog->notebook_preferences = GTK_NOTEBOOK(GET_OBJECT("notebook_preferences"));
708 
709  remmina_pref_dialog->filechooserbutton_options_datadir_path = GTK_FILE_CHOOSER(GET_OBJECT("filechooserbutton_options_datadir_path"));
710  remmina_pref_dialog->entry_options_file_name = GTK_ENTRY(GET_OBJECT("entry_options_file_name"));
711  remmina_pref_dialog->filechooserbutton_options_screenshots_path = GTK_FILE_CHOOSER(GET_OBJECT("filechooserbutton_options_screenshots_path"));
712  remmina_pref_dialog->entry_options_screenshot_name = GTK_ENTRY(GET_OBJECT("entry_options_screenshot_name"));
713  remmina_pref_dialog->switch_options_deny_screenshot_clipboard = GTK_SWITCH(GET_OBJECT("switch_options_deny_screenshot_clipboard"));
714  remmina_pref_dialog->switch_options_remember_last_view_mode = GTK_SWITCH(GET_OBJECT("switch_options_remember_last_view_mode"));
715  remmina_pref_dialog->switch_options_confirm_close = GTK_SWITCH(GET_OBJECT("switch_options_confirm_close"));
716  remmina_pref_dialog->switch_security_use_primary_password = GTK_SWITCH(GET_OBJECT("switch_security_use_primary_password"));
717  remmina_pref_dialog->unlock_timeout = GTK_ENTRY(GET_OBJECT("unlock_timeout"));
718  remmina_pref_dialog->switch_security_lock_connect = GTK_SWITCH(GET_OBJECT("switch_security_lock_connect"));
719  remmina_pref_dialog->switch_security_lock_edit = GTK_SWITCH(GET_OBJECT("switch_security_lock_edit"));
720  remmina_pref_dialog->switch_security_lock_view_passwords = GTK_SWITCH(GET_OBJECT("switch_security_lock_view_passwords"));
721  remmina_pref_dialog->comboboxtext_security_enc_method = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_security_enc_method"));
722 
723  remmina_pref_dialog->switch_security_audit = GTK_SWITCH(GET_OBJECT("switch_security_audit"));
724  remmina_pref_dialog->switch_security_trust_all = GTK_SWITCH(GET_OBJECT("switch_security_trust_all"));
725  remmina_pref_dialog->checkbutton_options_save_settings = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_options_save_settings"));
726  remmina_pref_dialog->checkbutton_appearance_fullscreen_on_auto = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_fullscreen_on_auto"));
727  remmina_pref_dialog->checkbutton_appearance_show_tabs = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_show_tabs"));
728  remmina_pref_dialog->checkbutton_appearance_show_notes = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_show_notes"));
729  remmina_pref_dialog->checkbutton_appearance_hide_toolbar = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_hide_toolbar"));
730  remmina_pref_dialog->checkbutton_appearance_hide_searchbar = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_appearance_hide_searchbar"));
731  remmina_pref_dialog->comboboxtext_options_double_click = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_options_double_click"));
732  remmina_pref_dialog->comboboxtext_appearance_view_mode = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_appearance_view_mode"));
733  remmina_pref_dialog->comboboxtext_appearance_tab_interface = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_appearance_tab_interface"));
734  remmina_pref_dialog->comboboxtext_appearance_fullscreen_toolbar_visibility = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_appearance_fullscreen_toolbar_visibility"));
735  remmina_pref_dialog->comboboxtext_options_scale_quality = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_options_scale_quality"));
736  remmina_pref_dialog->checkbutton_options_ssh_parseconfig = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_options_ssh_parseconfig"));
737  remmina_pref_dialog->comboboxtext_options_ssh_loglevel = GTK_COMBO_BOX(GET_OBJECT("comboboxtext_options_ssh_loglevel"));
738  remmina_pref_dialog->entry_options_ssh_port = GTK_ENTRY(GET_OBJECT("entry_options_ssh_port"));
739  remmina_pref_dialog->entry_options_ssh_tcp_keepidle = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_keepidle"));
740  remmina_pref_dialog->entry_options_ssh_tcp_keepintvl = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_keepintvl"));
741  remmina_pref_dialog->entry_options_ssh_tcp_keepcnt = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_keepcnt"));
742  remmina_pref_dialog->entry_options_ssh_tcp_usrtimeout = GTK_ENTRY(GET_OBJECT("entry_options_ssh_tcp_usrtimeout"));
743  remmina_pref_dialog->entry_options_scroll = GTK_ENTRY(GET_OBJECT("entry_options_scroll"));
744  remmina_pref_dialog->entry_options_recent_items = GTK_ENTRY(GET_OBJECT("entry_options_recent_items"));
745  remmina_pref_dialog->entry_grab_color = GTK_ENTRY(GET_OBJECT("entry_grab_color"));
746  remmina_pref_dialog->switch_appearance_grab_color = GTK_SWITCH(GET_OBJECT("switch_appearance_grab_color"));
747  remmina_pref_dialog->button_options_recent_items_clear = GTK_BUTTON(GET_OBJECT("button_options_recent_items_clear"));
748 
749  remmina_pref_dialog->checkbutton_applet_new_connection_on_top = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_new_connection_on_top"));
750  remmina_pref_dialog->checkbutton_applet_hide_totals = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_hide_totals"));
751  remmina_pref_dialog->checkbutton_applet_disable_tray = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_disable_tray"));
752  remmina_pref_dialog->checkbutton_dark_theme = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_dark_theme"));
753  remmina_pref_dialog->checkbutton_applet_start_in_tray = GTK_CHECK_BUTTON(GET_OBJECT("checkbutton_applet_start_in_tray"));
754 
755  remmina_pref_dialog->button_keyboard_host_key = GTK_BUTTON(GET_OBJECT("button_keyboard_host_key"));
756  remmina_pref_dialog->button_keyboard_fullscreen = GTK_BUTTON(GET_OBJECT("button_keyboard_fullscreen"));
757  remmina_pref_dialog->button_keyboard_auto_fit = GTK_BUTTON(GET_OBJECT("button_keyboard_auto_fit"));
758  remmina_pref_dialog->button_keyboard_switch_tab_left = GTK_BUTTON(GET_OBJECT("button_keyboard_switch_tab_left"));
759  remmina_pref_dialog->button_keyboard_switch_tab_right = GTK_BUTTON(GET_OBJECT("button_keyboard_switch_tabright"));
760  remmina_pref_dialog->button_keyboard_scaled = GTK_BUTTON(GET_OBJECT("button_keyboard_scaled"));
761  remmina_pref_dialog->button_keyboard_clipboard = GTK_BUTTON(GET_OBJECT("button_keyboard_clipboard"));
762  remmina_pref_dialog->button_keyboard_grab_keyboard = GTK_BUTTON(GET_OBJECT("button_keyboard_grab_keyboard"));
763  remmina_pref_dialog->button_keyboard_multimon = GTK_BUTTON(GET_OBJECT("button_keyboard_multimon"));
764  remmina_pref_dialog->button_keyboard_screenshot = GTK_BUTTON(GET_OBJECT("button_keyboard_screenshot"));
765  remmina_pref_dialog->button_keyboard_viewonly = GTK_BUTTON(GET_OBJECT("button_keyboard_viewonly"));
766  remmina_pref_dialog->button_keyboard_minimize = GTK_BUTTON(GET_OBJECT("button_keyboard_minimize"));
767  remmina_pref_dialog->button_keyboard_disconnect = GTK_BUTTON(GET_OBJECT("button_keyboard_disconnect"));
768  remmina_pref_dialog->button_keyboard_toolbar = GTK_BUTTON(GET_OBJECT("button_keyboard_toolbar"));
769 
770  remmina_pref_dialog->switch_terminal_font_system = GTK_SWITCH(GET_OBJECT("switch_terminal_font_system"));
771  remmina_pref_dialog->fontbutton_terminal_font = GTK_FONT_BUTTON(GET_OBJECT("fontbutton_terminal_font"));
772  remmina_pref_dialog->switch_terminal_bold = GTK_SWITCH(GET_OBJECT("switch_terminal_bold"));
773  remmina_pref_dialog->entry_scrollback_lines = GTK_ENTRY(GET_OBJECT("entry_scrollback_lines"));
774  remmina_pref_dialog->button_keyboard_copy = GTK_BUTTON(GET_OBJECT("button_keyboard_copy"));
775  remmina_pref_dialog->button_keyboard_paste = GTK_BUTTON(GET_OBJECT("button_keyboard_paste"));
776  remmina_pref_dialog->button_keyboard_select_all = GTK_BUTTON(GET_OBJECT("button_keyboard_select_all"));
777  remmina_pref_dialog->button_keyboard_increase_font = GTK_BUTTON(GET_OBJECT("button_keyboard_increase_font"));
778  remmina_pref_dialog->button_keyboard_decrease_font = GTK_BUTTON(GET_OBJECT("button_keyboard_decrease_font"));
779  remmina_pref_dialog->button_keyboard_search_text = GTK_BUTTON(GET_OBJECT("button_keyboard_search_text"));
780  remmina_pref_dialog->label_terminal_foreground = GTK_LABEL(GET_OBJECT("label_terminal_foreground"));
781  remmina_pref_dialog->colorbutton_foreground = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_foreground"));
782  remmina_pref_dialog->label_terminal_background = GTK_LABEL(GET_OBJECT("label_terminal_background"));
783  remmina_pref_dialog->colorbutton_background = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_background"));
784  remmina_pref_dialog->label_terminal_cursor_color = GTK_LABEL(GET_OBJECT("label_terminal_cursor_color"));
785  remmina_pref_dialog->colorbutton_cursor = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_cursor"));
786  remmina_pref_dialog->colorbutton_cursor_foreground = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_cursor_foreground"));
787  remmina_pref_dialog->colorbutton_highlight = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_highlight"));
788  remmina_pref_dialog->colorbutton_highlight_foreground = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_highlight_foreground"));
789  remmina_pref_dialog->label_terminal_bold_color = GTK_LABEL(GET_OBJECT("label_terminal_bold_color"));
790  remmina_pref_dialog->colorbutton_colorBD = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_colorBD"));
791  remmina_pref_dialog->label_terminal_normal_colors = GTK_LABEL(GET_OBJECT("label_terminal_normal_colors"));
792  remmina_pref_dialog->colorbutton_color0 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color0"));
793  remmina_pref_dialog->colorbutton_color1 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color1"));
794  remmina_pref_dialog->colorbutton_color2 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color2"));
795  remmina_pref_dialog->colorbutton_color3 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color3"));
796  remmina_pref_dialog->colorbutton_color4 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color4"));
797  remmina_pref_dialog->colorbutton_color5 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color5"));
798  remmina_pref_dialog->colorbutton_color6 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color6"));
799  remmina_pref_dialog->colorbutton_color7 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color7"));
800  remmina_pref_dialog->label_terminal_bright_colors = GTK_LABEL(GET_OBJECT("label_terminal_bright_colors"));
801  remmina_pref_dialog->colorbutton_color8 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color8"));
802  remmina_pref_dialog->colorbutton_color9 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color9"));
803  remmina_pref_dialog->colorbutton_color10 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color10"));
804  remmina_pref_dialog->colorbutton_color11 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color11"));
805  remmina_pref_dialog->colorbutton_color12 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color12"));
806  remmina_pref_dialog->colorbutton_color13 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color13"));
807  remmina_pref_dialog->colorbutton_color14 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color14"));
808  remmina_pref_dialog->colorbutton_color15 = GTK_COLOR_BUTTON(GET_OBJECT("colorbutton_color15"));
809 #if defined (HAVE_LIBSSH) && defined (HAVE_LIBVTE)
810 #if VTE_CHECK_VERSION(0, 38, 0)
811  const gchar *remmina_dir;
812  gchar *destpath;
813  remmina_dir = g_build_path("/", g_get_user_config_dir(), "remmina", NULL);
814  destpath = g_strdup_printf("%s/remmina.colors", remmina_dir);
815  remmina_pref_dialog->button_term_cs = GTK_FILE_CHOOSER(GET_OBJECT("button_term_cs"));
816  const gchar *fc_tooltip_text = g_strconcat(_("Picking a terminal colouring file replaces the file: "),
817  "\n",
818  destpath,
819  "\n",
820  _("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."),
821  NULL);
822  gtk_widget_set_tooltip_text(GTK_WIDGET(remmina_pref_dialog->button_term_cs), fc_tooltip_text);
823  gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(remmina_pref_dialog->button_term_cs), REMMINA_RUNTIME_TERM_CS_DIR);
824  g_free(destpath);
825 #endif
826 #endif
827  /* Non widget objects */
828  actions = g_simple_action_group_new();
829  g_action_map_add_action_entries(G_ACTION_MAP(actions), pref_actions, G_N_ELEMENTS(pref_actions), remmina_pref_dialog->dialog);
830  gtk_widget_insert_action_group(GTK_WIDGET(remmina_pref_dialog->dialog), "pref", G_ACTION_GROUP(actions));
831  g_action_map_add_action_entries(G_ACTION_MAP(actions), pref_actions, G_N_ELEMENTS(pref_actions), remmina_pref_dialog->dialog);
832  g_object_unref(actions);
833  /* Accelerators */
834  accel_group = gtk_accel_group_new();
835  gtk_window_add_accel_group(GTK_WINDOW(remmina_pref_dialog->dialog), accel_group);
836  gtk_accel_group_connect(accel_group, GDK_KEY_Q, GDK_CONTROL_MASK, 0,
837  g_cclosure_new_swap(G_CALLBACK(remmina_pref_dialog_on_action_close), NULL, NULL));
838 
839  /* Connect signals */
840  gtk_builder_connect_signals(remmina_pref_dialog->builder, NULL);
841  /* Initialize the window and load the preferences */
843 
844  if (default_tab > 0)
845  gtk_notebook_set_current_page(remmina_pref_dialog->notebook_preferences, default_tab);
846  return remmina_pref_dialog->dialog;
847 }
848 
850 {
851  if (!remmina_pref_dialog)
852  return NULL;
853  return remmina_pref_dialog->dialog;
854 }
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:210
GtkButton * button_keyboard_select_all
static gboolean remmina_pref_dialog_add_pref_plugin(gchar *name, RemminaPlugin *plugin, gpointer user_data)
GtkColorButton * colorbutton_color2
guint shortcutkey_minimize
Definition: remmina_pref.h:186
GtkColorButton * colorbutton_color14
gboolean lock_connect
Definition: remmina_pref.h:194
GtkColorButton * colorbutton_highlight_foreground
GtkButton * button_keyboard_grab_keyboard
const gchar * grab_color
Definition: remmina_pref.h:159
RemminaKeyChooserArguments * remmina_key_chooser_new(GtkWindow *parent_window, gboolean use_modifiers)
guint vte_shortcutkey_increase_font
Definition: remmina_pref.h:208
static void remmina_pref_dialog_set_button_label(GtkButton *button, guint keyval)
gint default_action
Definition: remmina_pref.h:141
GtkComboBox * comboboxtext_appearance_fullscreen_toolbar_visibility
void remmina_string_list_set_validation_func(RemminaStringListValidationFunc func)
GtkButton * button_keyboard_paste
gchar * keystrokes
Definition: remmina_pref.h:146
void remmina_main_reload_preferences()
GtkButton * button_options_recent_items_clear
GtkEntry * entry_options_screenshot_name
guint shortcutkey_screenshot
Definition: remmina_pref.h:185
guint shortcutkey_prevtab
Definition: remmina_pref.h:177
gboolean use_primary_password
Definition: remmina_pref.h:190
GtkSwitch * switch_security_audit
gboolean ssh_parseconfig
Definition: remmina_pref.h:167
static void remmina_pref_dialog_init(void)
void remmina_plugin_manager_for_each_plugin(RemminaPluginType type, RemminaPluginFunc func, gpointer data)
GtkEntry * entry_options_file_name
GtkCheckButton * checkbutton_appearance_fullscreen_on_auto
GtkLabel * label_terminal_foreground
GtkSwitch * switch_options_confirm_close
void remmina_widget_pool_register(GtkWidget *widget)
gint ssh_tcp_keepintvl
Definition: remmina_pref.h:170
GtkButton * button_keyboard_fullscreen
GtkCheckButton * checkbutton_options_save_settings
GtkButton * button_keyboard_toolbar
GtkButton * button_keyboard_disconnect
gint auto_scroll_step
Definition: remmina_pref.h:143
void remmina_pref_dialog_vte_font_on_toggled(GtkSwitch *widget, RemminaPrefDialog *dialog)
GtkEntry * entry_options_recent_items
guint vte_shortcutkey_copy
Definition: remmina_pref.h:205
GtkEntry * entry_options_ssh_tcp_usrtimeout
void remmina_pref_dialog_disable_tray_icon_on_toggled(GtkWidget *widget, RemminaPrefDialog *dialog)
gboolean remmina_public_resolution_validation_func(const gchar *new_str, gchar **error)
GtkSwitch * switch_terminal_bold
guint shortcutkey_autofit
Definition: remmina_pref.h:176
GtkCheckButton * checkbutton_dark_theme
GtkColorButton * colorbutton_color6
void remmina_icon_populate_menu(void)
Definition: remmina_icon.c:256
GtkLabel * label_terminal_normal_colors
GtkSwitch * switch_security_use_primary_password
GtkSwitch * switch_options_remember_last_view_mode
GtkFontButton * fontbutton_terminal_font
GtkColorButton * colorbutton_color3
gchar * highlight_foreground
Definition: remmina_pref.h:112
GtkColorButton * colorbutton_color15
gint scale_quality
Definition: remmina_pref.h:142
gboolean remmina_passwd(GtkWindow *parent, gchar **unlock_password)
void remmina_pref_set_value(const gchar *key, const gchar *value)
gboolean deny_screenshot_clipboard
Definition: remmina_pref.h:138
gchar * resolutions
Definition: remmina_pref.h:145
guint vte_shortcutkey_select_all
Definition: remmina_pref.h:207
GtkCheckButton * checkbutton_appearance_hide_searchbar
GtkCheckButton * checkbutton_appearance_hide_toolbar
void remmina_pref_on_dialog_destroy(GtkWidget *widget, gpointer user_data)
GtkSwitch * switch_security_lock_edit
void remmina_pref_on_color_scheme_selected(GtkWidget *widget, gpointer user_data)
GtkButton * button_keyboard_copy
GtkEntry * entry_options_ssh_tcp_keepintvl
GtkColorButton * colorbutton_cursor_foreground
GtkSwitch * switch_security_lock_view_passwords
GtkEntry * entry_options_ssh_port
gboolean vte_allow_bold_text
Definition: remmina_pref.h:202
GtkFileChooser * filechooserbutton_options_screenshots_path
GtkEntry * entry_options_ssh_tcp_keepidle
gchar * remmina_pref_get_value(const gchar *key)
gboolean disable_tray_icon
Definition: remmina_pref.h:164
GtkEntry * entry_scrollback_lines
GtkColorButton * colorbutton_color4
gboolean lock_view_passwords
Definition: remmina_pref.h:196
gint recent_maximum
Definition: remmina_pref.h:144
GtkButton * button_keyboard_search_text
gchar * vte_font
Definition: remmina_pref.h:201
guint shortcutkey_multimon
Definition: remmina_pref.h:182
void remmina_prefdiag_on_use_password_activated(GtkSwitch *sw, gpointer user_data)
void remmina_pref_dialog_on_key_chooser(GtkWidget *widget, gpointer user_data)
const gchar * screenshot_path
Definition: remmina_pref.h:137
void remmina_icon_init(void)
Definition: remmina_icon.c:362
GtkButton * button_keyboard_screenshot
GtkButton * button_keyboard_viewonly
GtkCheckButton * checkbutton_applet_new_connection_on_top
GtkSwitch * switch_terminal_font_system
GtkButton * button_keyboard_clipboard
gint unlock_timeout
Definition: remmina_pref.h:193
GtkColorButton * colorbutton_color13
gboolean confirm_close
Definition: remmina_pref.h:147
GtkSwitch * switch_security_trust_all
GtkColorButton * colorbutton_color5
guint vte_shortcutkey_decrease_font
Definition: remmina_pref.h:209
GtkEntry * entry_options_ssh_tcp_keepcnt
GtkNotebook * notebook_preferences
GtkSwitch * switch_security_lock_connect
GtkComboBox * comboboxtext_security_enc_method
const gchar * unlock_password
Definition: remmina_pref.h:191
guint vte_shortcutkey_paste
Definition: remmina_pref.h:206
guint shortcutkey_disconnect
Definition: remmina_pref.h:187
GtkButton * button_keyboard_decrease_font
gint ssh_tcp_usrtimeout
Definition: remmina_pref.h:172
GtkButton * button_keyboard_switch_tab_left
const gchar * pref_label
Definition: plugin.h:131
void remmina_pref_dialog_on_close_clicked(GtkWidget *widget, RemminaPrefDialog *dialog)
GtkCheckButton * checkbutton_applet_start_in_tray
GtkButton * button_keyboard_auto_fit
guint shortcutkey_grab
Definition: remmina_pref.h:183
gboolean always_show_tab
Definition: remmina_pref.h:152
GtkLabel * label_terminal_background
GtkFileChooser * button_term_cs
guint shortcutkey_scale
Definition: remmina_pref.h:181
GtkColorButton * colorbutton_color0
GtkComboBox * comboboxtext_options_scale_quality
GtkEntry * entry_options_scroll
GtkCheckButton * checkbutton_appearance_show_tabs
gboolean remmina_icon_is_autostart(void)
Definition: remmina_icon.c:438
GtkBuilder * remmina_public_gtk_builder_new_from_resource(gchar *resource)
GtkColorButton * colorbutton_foreground
static RemminaPrefDialog * remmina_pref_dialog
guint shortcutkey_clipboard
Definition: remmina_pref.h:178
gchar * remmina_file_get_datadir(void)
Return datadir_path from pref or first found data dir as per XDG specs.
GtkColorButton * colorbutton_color11
GtkButton * button_keyboard_host_key
void remmina_string_list_set_text(const gchar *text, const gboolean clear_data)
GtkColorButton * colorbutton_highlight
void remmina_pref_clear_recent(void)
Definition: remmina_pref.c:999
GtkComboBox * comboboxtext_appearance_tab_interface
guint shortcutkey_nexttab
Definition: remmina_pref.h:179
void remmina_prefdiag_on_grab_color_activated(GtkSwitch *widget, gpointer user_data)
gboolean applet_hide_count
Definition: remmina_pref.h:163
GtkCheckButton * checkbutton_appearance_show_notes
GtkCheckButton * checkbutton_applet_disable_tray
gint ssh_tcp_keepidle
Definition: remmina_pref.h:169
GtkComboBox * comboboxtext_options_ssh_loglevel
gboolean lock_edit
Definition: remmina_pref.h:195
void remmina_string_list_set_titles(gchar *title1, gchar *title2)
GtkWidget *(* get_pref_body)(struct _RemminaPrefPlugin *instance)
Definition: plugin.h:132
GtkLabel * label_terminal_cursor_color
GtkLabel * label_terminal_bold_color
RemminaPref remmina_pref
Definition: rcw.c:79
gboolean trust_all
Definition: remmina_pref.h:199
GtkButton * button_keyboard_multimon
const gchar * remmina_file_name
Definition: remmina_pref.h:136
void remmina_pref_init(void)
Definition: remmina_pref.c:220
GtkColorButton * colorbutton_colorBD
guint shortcutkey_toolbar
Definition: remmina_pref.h:188
void remmina_pref_on_button_resolutions_clicked(GtkWidget *widget, gpointer user_data)
static GActionEntry pref_actions[]
GtkComboBox * comboboxtext_options_double_click
void remmina_pref_on_button_keystrokes_clicked(GtkWidget *widget, gpointer user_data)
gboolean remmina_pref_save(void)
Definition: remmina_pref.c:790
gint ssh_tcp_keepcnt
Definition: remmina_pref.h:171
gboolean applet_new_ontop
Definition: remmina_pref.h:162
const gchar * screenshot_name
Definition: remmina_pref.h:139
GtkButton * button_keyboard_minimize
gboolean hide_connection_toolbar
Definition: remmina_pref.h:154
gboolean audit
Definition: remmina_pref.h:198
GtkCheckButton * checkbutton_options_ssh_parseconfig
gint sshtunnel_port
Definition: remmina_pref.h:168
const gchar * datadir_path
Definition: remmina_pref.h:135
GtkSwitch * switch_options_deny_screenshot_clipboard
void remmina_pref_dialog_clear_recent(GtkWidget *widget, gpointer user_data)
GtkCheckButton * checkbutton_applet_hide_totals
GtkColorButton * colorbutton_color10
void remmina_pref_dialog_on_action_close(GSimpleAction *action, GVariant *param, gpointer data)
GtkButton * button_keyboard_switch_tab_right
GtkComboBox * comboboxtext_appearance_view_mode
GtkButton * button_keyboard_increase_font
GtkButton * button_keyboard_scaled
gchar * cursor_foreground
Definition: remmina_pref.h:110
GtkColorButton * colorbutton_color8
GtkColorButton * colorbutton_background
gboolean always_show_notes
Definition: remmina_pref.h:153
GtkColorButton * colorbutton_cursor
GtkColorButton * colorbutton_color7
void remmina_icon_set_autostart(gboolean autostart)
Definition: remmina_icon.c:458
RemminaColorPref color_pref
Definition: remmina_pref.h:236
guint shortcutkey_viewonly
Definition: remmina_pref.h:184
GtkWidget * remmina_pref_dialog_new(gint default_tab, GtkWindow *parent)
RemminaPrefDialogPriv * priv
gboolean fullscreen_on_auto
Definition: remmina_pref.h:151
GtkWidget * remmina_pref_dialog_get_dialog()
GtkColorButton * colorbutton_color9
GtkLabel * label_terminal_bright_colors
GtkSwitch * switch_appearance_grab_color
gboolean dark_theme
Definition: remmina_pref.h:149
gboolean save_view_mode
Definition: remmina_pref.h:140
gint fullscreen_toolbar_visibility
Definition: remmina_pref.h:158
GtkColorButton * colorbutton_color12
GtkFileChooser * filechooserbutton_options_datadir_path
GtkColorButton * colorbutton_color1
guint remmina_key_chooser_get_keyval(const gchar *value)
gboolean grab_color_switch
Definition: remmina_pref.h:160
gchar * remmina_key_chooser_get_value(guint keyval, guint state)
gchar * remmina_string_list_get_text(void)