static void jsdirs_init_treeview (GtkBuilder* bxml) { const gchar *project_root = NULL; GtkTreeIter iter; GtkListStore *list_store = GTK_LIST_STORE (gtk_builder_get_object (bxml, JSDIRS_LISTSTORE)); if (!list_store) return; anjuta_shell_get (ANJUTA_PLUGIN (getPlugin ())->shell, IANJUTA_PROJECT_MANAGER_PROJECT_ROOT_URI, G_TYPE_STRING, &project_root, NULL); GFile *tmp = g_file_new_for_uri (project_root); AnjutaSession *session = anjuta_session_new (g_file_get_path (tmp)); g_object_unref (tmp); GList* dir_list = anjuta_session_get_string_list (session, "options", "js_dirs"); GList *i; gtk_list_store_clear (list_store); for (i = dir_list; i; i = g_list_next (i)) { gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, 0, i->data, -1); } if (!dir_list) { gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, 0, ".", -1); } }
static void jsdirs_save (GtkTreeModel *list_store) { GtkTreeIter iter; const gchar *project_root = NULL; anjuta_shell_get (ANJUTA_PLUGIN (getPlugin ())->shell, IANJUTA_PROJECT_MANAGER_PROJECT_ROOT_URI, G_TYPE_STRING, &project_root, NULL); GFile *tmp = g_file_new_for_uri (project_root); AnjutaSession *session = anjuta_session_new (g_file_get_path (tmp)); g_object_unref (tmp); GList *dirs = NULL; if (!gtk_tree_model_iter_children (list_store, &iter, NULL)) return; do { gchar *dir; gtk_tree_model_get (list_store, &iter, 0, &dir, -1); g_assert (dir != NULL); dirs = g_list_append (dirs, dir); } while (gtk_tree_model_iter_next (list_store, &iter)); anjuta_session_set_string_list (session, "options", "js_dirs", dirs); anjuta_session_sync (session); }
static gboolean check_target (RunProgramPlugin *plugin) { IAnjutaBuilder *builder; gchar *prog_uri; anjuta_shell_get (ANJUTA_PLUGIN (plugin)->shell, RUN_PROGRAM_URI, G_TYPE_STRING, &prog_uri, NULL); builder = anjuta_shell_get_interface (ANJUTA_PLUGIN (plugin)->shell, IAnjutaBuilder, NULL); if (builder != NULL) { if (plugin->build_uri) { /* a build operation is currently running */ if (strcmp (plugin->build_uri, prog_uri) == 0) { /* It is the same one, just ignore */ return TRUE; } else { /* Cancel old operation */ ianjuta_builder_cancel (builder, plugin->build_handle, NULL); } } plugin->build_uri = prog_uri; /* Check if target is up to date */ plugin->build_handle = ianjuta_builder_is_built (builder, plugin->build_uri, on_is_built_finished, plugin, NULL); return plugin->build_handle != 0; } else { plugin->build_uri = prog_uri; /* Unable to build target, just run it */ return run_program (plugin); } }
static gboolean run_program (RunProgramPlugin *plugin) { gchar *target; gchar *quote_target; gchar *dir = NULL; gchar *dir_uri = NULL; gchar *args = NULL; gchar **env = NULL; gchar *cmd; gboolean run_in_terminal = 0; AnjutaPreferences *prefs; GPid pid; target = get_local_executable (GTK_WINDOW (ANJUTA_PLUGIN (plugin)->shell), plugin->build_uri); g_free (plugin->build_uri); plugin->build_uri = NULL; if (target == NULL) return FALSE; /* Get directory from shell */ anjuta_shell_get (ANJUTA_PLUGIN (plugin)->shell, RUN_PROGRAM_DIR, G_TYPE_STRING, &dir_uri, NULL); if (dir_uri != NULL) { dir = get_local_directory (GTK_WINDOW (ANJUTA_PLUGIN (plugin)->shell), dir_uri); g_free (dir_uri); if (dir == NULL) return FALSE; } else { dir = g_path_get_dirname (target); } /* Get other parameters from shell */ anjuta_shell_get (ANJUTA_PLUGIN (plugin)->shell, RUN_PROGRAM_ARGS, G_TYPE_STRING, &args, RUN_PROGRAM_ENV, G_TYPE_STRV, &env, RUN_PROGRAM_NEED_TERM, G_TYPE_BOOLEAN, &run_in_terminal, NULL); /* Quote target name */ quote_target = g_shell_quote (target); g_free (target); if (args && strlen (args) > 0) cmd = g_strconcat (quote_target, " ", args, NULL); else cmd = g_strdup (quote_target); g_free (args); g_free (quote_target); /* Take care of scratchbox */ prefs = anjuta_shell_get_preferences (ANJUTA_PLUGIN(plugin)->shell, NULL); if (anjuta_preferences_get_bool (prefs , PREF_USE_SB)) { const gchar* sb_path = anjuta_preferences_get(prefs, PREF_SB_PATH); /* we need to skip the /scratchbox/users part, maybe could be done more clever */ const gchar* real_dir = strstr(dir, "/home"); gchar* oldcmd = cmd; gchar* olddir = dir; cmd = g_strdup_printf("%s/login -d %s \"%s\"", sb_path, real_dir, oldcmd); g_free(oldcmd); dir = g_strdup(real_dir); g_free (olddir); } if (run_in_terminal) { pid = execute_with_terminal (plugin, dir, cmd, env); if (!pid) { pid = execute_without_terminal (plugin, dir, cmd, env); } } else { pid = execute_without_terminal (plugin, dir, cmd, env); } if (pid == 0) { anjuta_util_dialog_error (GTK_WINDOW (ANJUTA_PLUGIN (plugin)->shell), "Unable to execute %s", cmd); } run_plugin_update_menu_sensitivity (plugin); g_free (dir); g_strfreev (env); g_free (cmd); return TRUE; }