Пример #1
0
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;
}