36 #include <gdk/gdkkeysyms.h> 37 #include <glib/gi18n.h> 47 #define SPAWN_TIMEOUT 10 49 #define GET_OBJECT(object_name) gtk_builder_get_object(builder, object_name) 55 gtk_spinner_stop(GTK_SPINNER(pcspinner->
spinner));
56 gtk_widget_destroy(GTK_WIDGET(pcspinner->
dialog));
57 g_spawn_close_pid(pid);
76 strcpy(pre,
"precommand");
77 strcpy(post,
"postcommand");
79 if (remmina_ext_exec_type != NULL && (
80 strcmp(remmina_ext_exec_type, pre) |
81 strcmp(remmina_ext_exec_type, post) )) {
83 g_debug(
"[%s] %s", remmina_ext_exec_type, cmd);
88 g_debug(
"[%s] updated to: %s", remmina_ext_exec_type, cmd);
93 pcspinner->
dialog = GTK_DIALOG(gtk_builder_get_object(builder,
"DialogSpinner"));
95 pcspinner->
spinner = GTK_WIDGET(GET_OBJECT(
"spinner"));
96 pcspinner->
button_cancel = GTK_BUTTON(GET_OBJECT(
"button_cancel"));
98 gtk_builder_connect_signals(builder, NULL);
101 g_shell_parse_argv(cmd, NULL, &argv, &error);
104 g_warning(
"%s\n", error->message);
112 G_SPAWN_SEARCH_PATH |
113 G_SPAWN_SEARCH_PATH_FROM_ENVP |
114 G_SPAWN_DO_NOT_REAP_CHILD,
120 gtk_spinner_start(GTK_SPINNER(pcspinner->
spinner));
121 g_child_watch_add(child_pid,
wait_for_child, (gpointer)pcspinner);
122 gtk_dialog_run(pcspinner->dialog);
124 g_warning(
"Command %s exited with error: %s\n", cmd, error->message);
129 return (pcspinner->
dialog);
const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)
typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile
gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)
GtkDialog * remmina_ext_exec_new(RemminaFile *remminafile, const char *remmina_ext_exec_type)
General utility functions, non-GTK related.
static void wait_for_child(GPid pid, gint script_retval, gpointer data)
GtkButton * button_cancel
GtkBuilder * remmina_public_gtk_builder_new_from_resource(gchar *resource)
GtkLabel * label_pleasewait