Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #712 from jviksell/memleaks
Fix a bunch of memleaks
  • Loading branch information
antenore committed Jan 4, 2016
2 parents e7f665f + f26f02b commit 4997b83
Show file tree
Hide file tree
Showing 9 changed files with 81 additions and 55 deletions.
5 changes: 4 additions & 1 deletion remmina/src/remmina_connection_window.c
Expand Up @@ -2592,6 +2592,7 @@ static void remmina_connection_holder_create_scrolled(RemminaConnectionHolder* c
GtkWidget* grid;
GtkWidget* toolbar;
GtkWidget* notebook;
GList *chain;
gchar* tag;
int newwin_width, newwin_height;

Expand Down Expand Up @@ -2640,7 +2641,9 @@ static void remmina_connection_holder_create_scrolled(RemminaConnectionHolder* c

gtk_container_add(GTK_CONTAINER(window), grid);

gtk_container_set_focus_chain(GTK_CONTAINER(grid), g_list_append(NULL, notebook));
chain = g_list_append(NULL, notebook);
gtk_container_set_focus_chain(GTK_CONTAINER(grid), chain);
g_list_free(chain);

/* Add drag capabilities to the toolbar */
gtk_drag_source_set(GTK_WIDGET(toolbar), GDK_BUTTON1_MASK,
Expand Down
32 changes: 13 additions & 19 deletions remmina/src/remmina_external_tools.c
Expand Up @@ -41,28 +41,22 @@
#include "remmina_external_tools.h"
#include "remmina/remmina_trace_calls.h"

typedef struct _RemminaExternalTools
{
gchar remminafilename[MAX_PATH_LEN];
gchar scriptfilename[MAX_PATH_LEN];
gchar scriptshortname[MAX_PATH_LEN];
} RemminaExternalTools;

static gboolean remmina_external_tools_launcher(const gchar* filename, const gchar* scriptname, const gchar* shortname);

void view_popup_menu_onDoSomething (GtkWidget *menuitem, gpointer userdata)
static void view_popup_menu_onDoSomething (GtkWidget *menuitem, gpointer userdata)
{
TRACE_CALL("view_popup_menu_onDoSomething");
/* we passed the view as userdata when we connected the signal */
RemminaExternalTools *ret = (RemminaExternalTools *)userdata;
remmina_external_tools_launcher(ret->remminafilename, ret->scriptfilename, ret->scriptshortname);
gchar *remminafilename = g_object_get_data(G_OBJECT(menuitem), "remminafilename");
gchar *scriptfilename = g_object_get_data(G_OBJECT(menuitem), "scriptfilename");
gchar *scriptshortname = g_object_get_data(G_OBJECT(menuitem), "scriptshortname");

remmina_external_tools_launcher(remminafilename, scriptfilename, scriptshortname);
}

gboolean remmina_external_tools_from_filename(RemminaMain *remminamain, gchar* remminafilename)
{
TRACE_CALL("remmina_external_tools_from_filename");
GtkWidget *menu, *menuitem;
menu = gtk_menu_new();
gchar dirname[MAX_PATH_LEN];
gchar filename[MAX_PATH_LEN];
GDir* dir;
Expand All @@ -74,19 +68,19 @@ gboolean remmina_external_tools_from_filename(RemminaMain *remminamain, gchar* r
if (dir == NULL)
return FALSE;

menu = gtk_menu_new();

while ((name = g_dir_read_name(dir)) != NULL)
{
if (!g_str_has_prefix(name, "remmina_"))
continue;
g_snprintf(filename, MAX_PATH_LEN, "%s/%s", dirname, name);
RemminaExternalTools *ret;
ret = (RemminaExternalTools *)malloc(sizeof(RemminaExternalTools));
strcpy(ret->remminafilename,remminafilename);
strcpy(ret->scriptfilename,filename);
strcpy(ret->scriptshortname,name);
menuitem = gtk_menu_item_new_with_label(strndup(name + 8, strlen(name) -8));
g_signal_connect(menuitem, "activate", (GCallback) view_popup_menu_onDoSomething, ret);

menuitem = gtk_menu_item_new_with_label(name + 8);
g_object_set_data_full(G_OBJECT(menuitem), "remminafilename", g_strdup(remminafilename), g_free);
g_object_set_data_full(G_OBJECT(menuitem), "scriptfilename", g_strdup(filename), g_free);
g_object_set_data_full(G_OBJECT(menuitem), "scriptshortname", g_strdup(name), g_free);
g_signal_connect(menuitem, "activate", (GCallback) view_popup_menu_onDoSomething, NULL);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
}
g_dir_close(dir);
Expand Down
5 changes: 5 additions & 0 deletions remmina/src/remmina_file.c
Expand Up @@ -148,11 +148,16 @@ void remmina_file_generate_filename(RemminaFile *remminafile)
old = g_dir_open(dirname, 0, NULL);
if (old == NULL)
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
g_dir_close(old);

/* If the XDG directories exist, use them. */
dir = g_dir_open(dirname, 0, NULL);
if (dir != NULL)
remminafile->filename = g_strdup_printf("%s/%li%03li.remmina", dirname, gtime.tv_sec,
gtime.tv_usec / 1000);
else
remminafile->filename = NULL;
g_dir_close(dir);
}

void remmina_file_set_filename(RemminaFile *remminafile, const gchar *filename)
Expand Down
2 changes: 1 addition & 1 deletion remmina/src/remmina_file_editor.c
Expand Up @@ -968,7 +968,7 @@ static void remmina_file_editor_protocol_combo_on_changed(GtkComboBox* combo, Re

if (priv->config_container)
{
gtk_container_remove(GTK_CONTAINER(priv->config_box), priv->config_container);
gtk_widget_destroy(priv->config_container);
priv->config_container = NULL;
}

Expand Down
19 changes: 16 additions & 3 deletions remmina/src/remmina_file_manager.c
Expand Up @@ -54,6 +54,9 @@ void remmina_file_manager_init(void)
if (old == NULL)
/* If the XDG directories exist, use them. */
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
else
g_dir_close(old);

g_mkdir_with_parents(dirname, 0700);
}

Expand All @@ -72,9 +75,12 @@ gint remmina_file_manager_iterate(GFunc func, gpointer user_data)
g_snprintf(dirname, sizeof(dirname), "%s/.%s", g_get_home_dir(), remmina);
old = g_dir_open(dirname, 0, NULL);
if (old == NULL)
{
/* If the XDG directories exist, use them. */
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
dir = g_dir_open(dirname, 0, NULL);
dir = g_dir_open(dirname, 0, NULL);
} else
dir = old;

if (dir)
{
Expand Down Expand Up @@ -115,9 +121,12 @@ gchar* remmina_file_manager_get_groups(void)
g_snprintf(dirname, sizeof(dirname), "%s/.%s", g_get_home_dir(), remmina);
old = g_dir_open(dirname, 0, NULL);
if (old == NULL)
{
/* If the XDG directories exist, use them. */
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
dir = g_dir_open(dirname, 0, NULL);
dir = g_dir_open(dirname, 0, NULL);
} else
dir = old;

if (dir == NULL)
return 0;
Expand Down Expand Up @@ -223,9 +232,13 @@ GNode* remmina_file_manager_get_group_tree(void)
g_snprintf(dirname, sizeof(dirname), "%s/.%s", g_get_home_dir(), remmina);
old = g_dir_open(dirname, 0, NULL);
if (old == NULL)
{
/* If the XDG directories exist, use them. */
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
dir = g_dir_open(dirname, 0, NULL);
dir = g_dir_open(dirname, 0, NULL);
} else
dir = old;

if (dir == NULL)
return root;
while ((name = g_dir_read_name(dir)) != NULL)
Expand Down
28 changes: 11 additions & 17 deletions remmina/src/remmina_init_dialog.c
Expand Up @@ -282,17 +282,11 @@ gint remmina_init_dialog_authpwd(RemminaInitDialog *dialog, const gchar *label,
s = g_strdup_printf(_("Save %s"), label);
save_password_check = gtk_check_button_new_with_label(s);
g_free(s);
if (allow_save)
{
gtk_widget_show(save_password_check);
gtk_grid_attach(GTK_GRID(grid), save_password_check, 0, 1, 2, 1);
if (dialog->save_password)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(save_password_check), TRUE);
}
else
{
gtk_widget_set_sensitive(save_password_check, FALSE);
}
gtk_widget_show(save_password_check);
gtk_grid_attach(GTK_GRID(grid), save_password_check, 0, 1, 2, 1);
if (dialog->save_password)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(save_password_check), TRUE);
gtk_widget_set_sensitive(save_password_check, allow_save);

/* Pack it into the dialog */
gtk_box_pack_start(GTK_BOX(dialog->content_vbox), grid, TRUE, TRUE, 4);
Expand All @@ -312,7 +306,7 @@ gint remmina_init_dialog_authpwd(RemminaInitDialog *dialog, const gchar *label,
dialog->save_password = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(save_password_check));
}

gtk_container_remove(GTK_CONTAINER(dialog->content_vbox), grid);
gtk_widget_destroy(grid);

remmina_init_dialog_connecting(dialog);

Expand Down Expand Up @@ -451,7 +445,7 @@ gint remmina_init_dialog_authuserpwd(RemminaInitDialog *dialog, gboolean want_do
dialog->domain = g_strdup(gtk_entry_get_text(GTK_ENTRY(domain_entry)));
}

gtk_container_remove(GTK_CONTAINER(dialog->content_vbox), grid);
gtk_widget_destroy(grid);

remmina_init_dialog_connecting(dialog);

Expand Down Expand Up @@ -557,7 +551,7 @@ gint remmina_init_dialog_certificate(RemminaInitDialog* dialog, const gchar* sub

}

gtk_container_remove(GTK_CONTAINER(dialog->content_vbox), grid);
gtk_widget_destroy(grid);

return status;
}
Expand Down Expand Up @@ -674,7 +668,7 @@ gint remmina_init_dialog_certificate_changed(RemminaInitDialog* dialog, const gc

}

gtk_container_remove(GTK_CONTAINER(dialog->content_vbox), grid);
gtk_widget_destroy(grid);

return status;
}
Expand Down Expand Up @@ -776,7 +770,7 @@ gint remmina_init_dialog_authx509(RemminaInitDialog *dialog, const gchar *cacert
dialog->clientkey = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(clientkey_button));
}

gtk_container_remove(GTK_CONTAINER(dialog->content_vbox), grid);
gtk_widget_destroy(grid);

remmina_init_dialog_connecting(dialog);

Expand Down Expand Up @@ -848,7 +842,7 @@ gint remmina_init_dialog_serverkey_confirm(RemminaInitDialog *dialog, const gcha

/* Now run it */
ret = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_container_remove(GTK_CONTAINER(dialog->content_vbox), vbox);
gtk_widget_destroy(vbox);
remmina_init_dialog_connecting(dialog);

return ret;
Expand Down
2 changes: 1 addition & 1 deletion remmina/src/remmina_key_chooser.c
Expand Up @@ -85,7 +85,7 @@ gchar* remmina_key_chooser_get_value(guint keyval, guint state)
TRACE_CALL("remmina_key_chooser_get_value");

if (!keyval)
return KEY_CHOOSER_NONE;
return g_strdup(KEY_CHOOSER_NONE);

return g_strdup_printf("%s%s%s%s%s%s%s",
state & GDK_SHIFT_MASK ? KEY_MODIFIER_SHIFT : "",
Expand Down
3 changes: 3 additions & 0 deletions remmina/src/remmina_pref.c
Expand Up @@ -164,6 +164,7 @@ static void remmina_pref_init_keymap(void)
gptr++;
}
g_strfreev(groups);
g_key_file_free(gkeyfile);
}

void remmina_pref_init(void)
Expand All @@ -178,6 +179,8 @@ void remmina_pref_init(void)
if (old == NULL)
/* If the XDG directories exist, use them. */
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_config_dir(), remmina);
else
g_dir_close(old);
g_mkdir_with_parents(dirname, 0700);
remmina_pref_file = g_strdup_printf("%s/remmina.pref", dirname);
remmina_keymap_file = g_strdup_printf("%s/remmina.keymap", dirname);
Expand Down
40 changes: 27 additions & 13 deletions remmina/src/remmina_pref_dialog.c
Expand Up @@ -61,7 +61,11 @@ void remmina_pref_dialog_on_key_chooser(GtkWidget *widget, gpointer user_data)

arguments = remmina_key_chooser_new(GTK_WINDOW(remmina_pref_dialog->dialog), FALSE);
if (arguments->response != GTK_RESPONSE_CANCEL && arguments->response != GTK_RESPONSE_DELETE_EVENT)
gtk_button_set_label(GTK_BUTTON(widget), remmina_key_chooser_get_value(arguments->keyval, arguments->state));
{
gchar *val = remmina_key_chooser_get_value(arguments->keyval, arguments->state);
gtk_button_set_label(GTK_BUTTON(widget), val);
g_free(val);
}
g_free(arguments);
}

Expand Down Expand Up @@ -256,6 +260,16 @@ void remmina_pref_dialog_disable_tray_icon_on_toggled(GtkWidget *widget, Remmina
gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), b);
}

/* Helper function for remmina_pref_dialog_init() */
static void remmina_pref_dialog_set_button_label(GtkButton *button, guint keyval)
{
gchar *val;

val = remmina_key_chooser_get_value(keyval, 0);
gtk_button_set_label(button, val);
g_free(val);
}

/* Remmina preferences initialization */
static void remmina_pref_dialog_init(void)
{
Expand Down Expand Up @@ -284,16 +298,16 @@ static void remmina_pref_dialog_init(void)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_applet_start_in_tray), remmina_icon_is_autostart());
gtk_widget_set_sensitive(GTK_WIDGET(remmina_pref_dialog->checkbutton_applet_start_in_tray), !remmina_pref.disable_tray_icon);

gtk_button_set_label(remmina_pref_dialog->button_keyboard_host_key, remmina_key_chooser_get_value(remmina_pref.hostkey, 0));
gtk_button_set_label(remmina_pref_dialog->button_keyboard_fullscreen, remmina_key_chooser_get_value(remmina_pref.shortcutkey_fullscreen, 0));
gtk_button_set_label(remmina_pref_dialog->button_keyboard_auto_fit, remmina_key_chooser_get_value(remmina_pref.shortcutkey_autofit, 0));
gtk_button_set_label(remmina_pref_dialog->button_keyboard_switch_tab_left, remmina_key_chooser_get_value(remmina_pref.shortcutkey_prevtab, 0));
gtk_button_set_label(remmina_pref_dialog->button_keyboard_switch_tab_right, remmina_key_chooser_get_value(remmina_pref.shortcutkey_nexttab, 0));
gtk_button_set_label(remmina_pref_dialog->button_keyboard_scaled, remmina_key_chooser_get_value(remmina_pref.shortcutkey_scale, 0));
gtk_button_set_label(remmina_pref_dialog->button_keyboard_grab_keyboard, remmina_key_chooser_get_value(remmina_pref.shortcutkey_grab, 0));
gtk_button_set_label(remmina_pref_dialog->button_keyboard_minimize, remmina_key_chooser_get_value(remmina_pref.shortcutkey_minimize, 0));
gtk_button_set_label(remmina_pref_dialog->button_keyboard_disconnect, remmina_key_chooser_get_value(remmina_pref.shortcutkey_disconnect, 0));
gtk_button_set_label(remmina_pref_dialog->button_keyboard_toolbar, remmina_key_chooser_get_value(remmina_pref.shortcutkey_toolbar, 0));
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_host_key, remmina_pref.hostkey);
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_fullscreen, remmina_pref.shortcutkey_fullscreen);
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_auto_fit, remmina_pref.shortcutkey_autofit);
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_switch_tab_left, remmina_pref.shortcutkey_prevtab);
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_switch_tab_right, remmina_pref.shortcutkey_nexttab);
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_scaled, remmina_pref.shortcutkey_scale);
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_grab_keyboard, remmina_pref.shortcutkey_grab);
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_minimize, remmina_pref.shortcutkey_minimize);
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_disconnect, remmina_pref.shortcutkey_disconnect);
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_toolbar, remmina_pref.shortcutkey_toolbar);

if (!(remmina_pref.vte_font && remmina_pref.vte_font[0]))
{
Expand Down Expand Up @@ -341,8 +355,8 @@ static void remmina_pref_dialog_init(void)
gtk_combo_box_set_active(remmina_pref_dialog->comboboxtext_options_ssh_loglevel, remmina_pref.ssh_loglevel);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remmina_pref_dialog->checkbutton_options_ssh_parseconfig), remmina_pref.ssh_parseconfig);

gtk_button_set_label(remmina_pref_dialog->button_keyboard_copy, remmina_key_chooser_get_value(remmina_pref.vte_shortcutkey_copy, 0));
gtk_button_set_label(remmina_pref_dialog->button_keyboard_paste, remmina_key_chooser_get_value(remmina_pref.vte_shortcutkey_paste, 0));
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_copy, remmina_pref.vte_shortcutkey_copy);
remmina_pref_dialog_set_button_label(remmina_pref_dialog->button_keyboard_paste, remmina_pref.vte_shortcutkey_paste);

remmina_plugin_manager_for_each_plugin(REMMINA_PLUGIN_TYPE_PREF, remmina_pref_dialog_add_pref_plugin, remmina_pref_dialog->dialog);

Expand Down

0 comments on commit 4997b83

Please sign in to comment.