36 #include <glib/gi18n.h>
37 #include <glib/gstdio.h>
50 gchar *remminafilename = g_object_get_data(G_OBJECT(menuitem),
"remminafilename");
51 gchar *scriptfilename = g_object_get_data(G_OBJECT(menuitem),
"scriptfilename");
52 gchar *scriptshortname = g_object_get_data(G_OBJECT(menuitem),
"scriptshortname");
60 GtkWidget *menu, *menuitem;
61 gchar dirname[MAX_PATH_LEN];
62 gchar filename[MAX_PATH_LEN];
66 strcpy(dirname, REMMINA_RUNTIME_EXTERNAL_TOOLS_DIR);
67 dir = g_dir_open(dirname, 0, NULL);
72 menu = gtk_menu_new();
74 while ((name = g_dir_read_name(dir)) != NULL) {
75 if (!g_str_has_prefix(name,
"remmina_"))
77 g_snprintf(filename, MAX_PATH_LEN,
"%s/%s", dirname, name);
79 menuitem = gtk_menu_item_new_with_label(name + 8);
80 g_object_set_data_full(G_OBJECT(menuitem),
"remminafilename", g_strdup(remminafilename), g_free);
81 g_object_set_data_full(G_OBJECT(menuitem),
"scriptfilename", g_strdup(filename), g_free);
82 g_object_set_data_full(G_OBJECT(menuitem),
"scriptshortname", g_strdup(name), g_free);
84 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
88 gtk_widget_show_all(menu);
93 #if GTK_CHECK_VERSION(3, 22, 0)
94 gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
96 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, 0);
104 TRACE_CALL(__func__);
106 const char *env_format =
"%s=%s";
109 gchar launcher[MAX_PATH_LEN];
111 g_snprintf(launcher, MAX_PATH_LEN,
"%s/launcher.sh", REMMINA_RUNTIME_EXTERNAL_TOOLS_DIR);
117 const gchar *key, *value;
118 g_hash_table_iter_init(&iter, remminafile->settings);
119 while (g_hash_table_iter_next(&iter, (gpointer*)&key, (gpointer*)&value)) {
120 envstrlen = strlen(key) + strlen(value) + strlen(env_format) + 1;
121 env = (
char*)malloc(envstrlen);
126 int retval = snprintf(env, envstrlen, env_format, key, value);
127 if (retval > 0 && (
size_t)retval <= envstrlen) {
128 if (putenv(env) != 0) {
135 const char *term_title_key =
"remmina_term_title";
136 const char *term_title_val_prefix =
"Remmina external tool";
137 envstrlen = strlen(term_title_key) + strlen(term_title_val_prefix) + strlen(shortname) + 7;
138 env = (
char*)malloc(envstrlen);
140 if (snprintf(env, envstrlen,
"%s=%s: %s", term_title_key, term_title_val_prefix, shortname) ) {
141 if (putenv(env) != 0) {
148 const size_t cmdlen = strlen(launcher) + strlen(scriptname) + 2;
149 gchar *cmd = (gchar*)malloc(cmdlen);
150 g_snprintf(cmd, cmdlen,
"%s %s", launcher, scriptname);
void remmina_file_free(RemminaFile *remminafile)
RemminaFile * remmina_file_load(const gchar *filename)
static RemminaMain * remminamain
typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile