diff options
author | bhatman1441 <blackhat1441@protonmail.com> | 2023-06-28 18:54:03 +0300 |
---|---|---|
committer | bhatman1441 <blackhat1441@protonmail.com> | 2023-06-28 18:54:03 +0300 |
commit | 4df09aa1441e19c55123fdded54bde23f34b0dce (patch) | |
tree | 95687da222f820a636db5b5612ae23b391294e63 /src | |
parent | 424af3487efce050a0c65caa8a65794e3c9f7ec0 (diff) | |
parent | ea2fa164cf2de8f503be396bb3373b541ce77cde (diff) |
Merge branch 'fix-memory-leaks' into 'master'
Fix memory leaks and change GTK critical errors to remmina warnings for null icon autostart file
See merge request Remmina/Remmina!2509
Diffstat (limited to 'src')
-rw-r--r-- | src/remmina_icon.c | 45 | ||||
-rw-r--r-- | src/remmina_pref.c | 23 |
2 files changed, 45 insertions, 23 deletions
diff --git a/src/remmina_icon.c b/src/remmina_icon.c index f12afce3d..eb2b8d317 100644 --- a/src/remmina_icon.c +++ b/src/remmina_icon.c @@ -276,7 +276,12 @@ static void remmina_icon_save_autostart_file(GKeyFile *gkeyfile) gsize length; content = g_key_file_to_data(gkeyfile, &length, NULL); - g_file_set_contents(remmina_icon.autostart_file, content, length, NULL); + if (remmina_icon.autostart_file != NULL) { + g_file_set_contents(remmina_icon.autostart_file, content, length, NULL); + } + else { + REMMINA_WARNING("Cannot save remmina icon autostart file. Uncheck Preferences -> Applet -> No Tray Icon to recreate it."); + } g_free(content); } @@ -430,7 +435,14 @@ gboolean remmina_icon_is_autostart(void) gboolean b; gkeyfile = g_key_file_new(); - g_key_file_load_from_file(gkeyfile, remmina_icon.autostart_file, G_KEY_FILE_NONE, NULL); + + if (remmina_icon.autostart_file != NULL) { + g_key_file_load_from_file(gkeyfile, remmina_icon.autostart_file, G_KEY_FILE_NONE, NULL); + } + else { + REMMINA_WARNING("Cannot load remmina icon autostart file. Uncheck Preferences -> Applet -> No Tray Icon to recreate it."); + } + b = !g_key_file_get_boolean(gkeyfile, "Desktop Entry", "Hidden", NULL); g_key_file_free(gkeyfile); return b; @@ -442,19 +454,24 @@ void remmina_icon_set_autostart(gboolean autostart) GKeyFile *gkeyfile; gboolean b; - gkeyfile = g_key_file_new(); - g_key_file_load_from_file(gkeyfile, remmina_icon.autostart_file, G_KEY_FILE_NONE, NULL); - b = !g_key_file_get_boolean(gkeyfile, "Desktop Entry", "Hidden", NULL); - if (b != autostart) { - g_key_file_set_boolean(gkeyfile, "Desktop Entry", "Hidden", !autostart); - /* Refresh it in case translation is updated */ - // TRANSLATORS: Applet Name as per the Freedesktop Desktop entry specification https://specifications.freedesktop.org/desktop-entry-spec/latest/ - g_key_file_set_string(gkeyfile, "Desktop Entry", "Name", _("Remmina Applet")); - // TRANSLATORS: Applet comment/description as per the Freedesktop Desktop entry specification https://specifications.freedesktop.org/desktop-entry-spec/latest/ - g_key_file_set_string(gkeyfile, "Desktop Entry", "Comment", _("Connect to remote desktops through the applet menu")); - remmina_icon_save_autostart_file(gkeyfile); + if (remmina_icon.autostart_file != NULL) { + gkeyfile = g_key_file_new(); + g_key_file_load_from_file(gkeyfile, remmina_icon.autostart_file, G_KEY_FILE_NONE, NULL); + b = !g_key_file_get_boolean(gkeyfile, "Desktop Entry", "Hidden", NULL); + if (b != autostart) { + g_key_file_set_boolean(gkeyfile, "Desktop Entry", "Hidden", !autostart); + /* Refresh it in case translation is updated */ + // TRANSLATORS: Applet Name as per the Freedesktop Desktop entry specification https://specifications.freedesktop.org/desktop-entry-spec/latest/ + g_key_file_set_string(gkeyfile, "Desktop Entry", "Name", _("Remmina Applet")); + // TRANSLATORS: Applet comment/description as per the Freedesktop Desktop entry specification https://specifications.freedesktop.org/desktop-entry-spec/latest/ + g_key_file_set_string(gkeyfile, "Desktop Entry", "Comment", _("Connect to remote desktops through the applet menu")); + remmina_icon_save_autostart_file(gkeyfile); + g_key_file_free(gkeyfile); + } + } + else { + REMMINA_WARNING("Cannot load remmina icon autostart file. Uncheck Preferences -> Applet -> No Tray Icon to recreate it."); } - g_key_file_free(gkeyfile); } #else diff --git a/src/remmina_pref.c b/src/remmina_pref.c index 23d1a1ad7..d31cb29aa 100644 --- a/src/remmina_pref.c +++ b/src/remmina_pref.c @@ -221,7 +221,7 @@ void remmina_pref_init(void) { TRACE_CALL(__func__); GKeyFile *gkeyfile; - gchar *remmina_dir; + gchar *remmina_dir, *remmina_pref_path, *user_config_path; const gchar *filename = "remmina.pref"; const gchar *colors_filename = "remmina.colors"; g_autofree gchar *remmina_colors_file = NULL; @@ -239,10 +239,10 @@ void remmina_pref_init(void) remmina_dir = g_build_path("/", g_get_home_dir(), legacy, NULL); if (g_file_test(remmina_dir, G_FILE_TEST_IS_DIR)) { dir = g_dir_open(remmina_dir, 0, NULL); - remmina_pref_file_do_copy( - g_build_path("/", remmina_dir, filename, NULL), - g_build_path("/", g_get_user_config_dir(), - "remmina", filename, NULL)); + remmina_pref_path = g_build_path("/", remmina_dir, filename, NULL); + user_config_path = g_build_path("/", g_get_user_config_dir(), + "remmina", filename, NULL); + remmina_pref_file_do_copy(remmina_pref_path, user_config_path); g_dir_close(dir); } @@ -255,15 +255,18 @@ void remmina_pref_init(void) if (g_file_test(remmina_dir, G_FILE_TEST_IS_DIR)) { dir = g_dir_open(remmina_dir, 0, NULL); while ((filename = g_dir_read_name(dir)) != NULL) { - remmina_pref_file_do_copy( - g_build_path("/", remmina_dir, filename, NULL), - g_build_path("/", g_get_user_config_dir(), - "remmina", filename, NULL)); + remmina_pref_path = g_build_path("/", remmina_dir, filename, NULL); + user_config_path = g_build_path("/", g_get_user_config_dir(), + "remmina", filename, NULL); + remmina_pref_file_do_copy(remmina_pref_path, user_config_path); } g_free(remmina_dir), remmina_dir = NULL; } } + g_free(remmina_pref_path); + g_free(user_config_path); + /* The last case we use the home ~/.config/remmina */ if (remmina_dir != NULL) g_free(remmina_dir), remmina_dir = NULL; @@ -276,6 +279,8 @@ void remmina_pref_init(void) remmina_keymap_file = g_strdup_printf("%s/remmina.keymap", remmina_dir); + g_free(remmina_dir); + gkeyfile = g_key_file_new(); g_key_file_load_from_file(gkeyfile, remmina_pref_file, G_KEY_FILE_NONE, NULL); |