void desktop_run_in_terminal(char* executable) { gboolean is_ok = FALSE; GSettings* s = g_settings_new("com.deepin.desktop.default-applications.terminal"); if (s != NULL) { char* terminal = g_settings_get_string(s, "exec"); g_object_unref(s); if (terminal != NULL && terminal[0] != '\0') { char* quoted_dir = g_shell_quote(DESKTOP_DIR()); char* exec = NULL; exec = g_strdup_printf("sh -c 'cd %s && %s'", quoted_dir, terminal); g_free(quoted_dir); g_free(terminal); is_ok = exec_app_info(exec, G_APP_INFO_CREATE_NONE); g_free(exec); if (!is_ok) { g_debug("exec app info failed!"); } return; } g_free(terminal); } is_ok = exec_app_info (executable, G_APP_INFO_CREATE_NEEDS_TERMINAL); if ( !is_ok ) { g_debug ("exec app info failed!"); /*exec_app_info (executable);*/ } return; }
void run_in_terminal(char* dir, char* executable) { gboolean is_ok = FALSE; gboolean should_free_dir = FALSE; if (dir == NULL) { should_free_dir = TRUE; dir = g_get_current_dir(); } GSettings* s = g_settings_new("com.deepin.desktop.default-applications.terminal"); if (s != NULL) { char* terminal = g_settings_get_string(s, "exec"); char* terminal_arg = g_settings_get_string(s, "exec-arg"); g_object_unref(s); if (terminal != NULL && terminal[0] != '\0') { char* quoted_dir = g_shell_quote(dir); char* exec = NULL; exec = g_strdup_printf("sh -c 'cd %s && %s %s %s'", quoted_dir, terminal, terminal_arg, executable); g_free(quoted_dir); g_free(terminal); g_free(terminal_arg); is_ok = exec_app_info(dir, exec, G_APP_INFO_CREATE_NONE); g_free(exec); if (!is_ok) { g_debug("exec app info failed!"); } if (should_free_dir) { g_free(dir); } return; } g_free(terminal); } is_ok = exec_app_info(dir, executable, G_APP_INFO_CREATE_NEEDS_TERMINAL); if ( !is_ok ) { g_debug ("exec app info failed!"); /*exec_app_info (executable);*/ } if (should_free_dir) { g_free(dir); } return; }