static void ide_runtime_real_prepare_configuration (IdeRuntime *self, IdeConfiguration *configuration) { IdeRuntimePrivate *priv = ide_runtime_get_instance_private (self); g_autofree gchar *install_path = NULL; IdeContext *context; IdeProject *project; const gchar *project_name; g_assert (IDE_IS_RUNTIME (self)); g_assert (IDE_IS_CONFIGURATION (configuration)); context = ide_object_get_context (IDE_OBJECT (self)); project = ide_context_get_project (context); project_name = ide_project_get_name (project); install_path = g_build_filename (g_get_user_cache_dir (), "gnome-builder", "install", project_name, priv->id, NULL); ide_configuration_set_prefix (configuration, install_path); }
static void gb_project_tree_actions_move_to_trash (GSimpleAction *action, GVariant *param, gpointer user_data) { GbProjectTree *self = user_data; GbWorkbench *workbench; IdeContext *context; IdeProject *project; GbTreeNode *node; GFile *file; GObject *item; g_assert (G_IS_SIMPLE_ACTION (action)); g_assert (GB_IS_PROJECT_TREE (self)); workbench = gb_widget_get_workbench (GTK_WIDGET (self)); context = gb_workbench_get_context (workbench); project = ide_context_get_project (context); if (!(node = gb_tree_get_selected (GB_TREE (self))) || !(item = gb_tree_node_get_item (node)) || !IDE_IS_PROJECT_FILE (item) || !(file = ide_project_file_get_file (IDE_PROJECT_FILE (item)))) return; ide_project_trash_file_async (project, file, NULL, gb_project_tree_actions__trash_file_cb, g_object_ref (self)); }
static void ide_omni_bar_update (IdeOmniBar *self) { g_autofree gchar *branch_name = NULL; const gchar *project_name = NULL; IdeContext *context; g_assert (IDE_IS_OMNI_BAR (self)); context = ide_widget_get_context (GTK_WIDGET (self)); if (IDE_IS_CONTEXT (context)) { IdeProject *project; IdeVcs *vcs; project = ide_context_get_project (context); project_name = ide_project_get_name (project); vcs = ide_context_get_vcs (context); branch_name = ide_vcs_get_branch_name (vcs); } gtk_label_set_label (self->project_label, project_name); gtk_label_set_label (self->branch_label, branch_name); gtk_label_set_label (self->popover_branch_label, branch_name); }
static void gb_project_tree_actions__rename_file_cb (GbProjectTree *self, GFile *orig_file, GFile *new_file, GbRenameFilePopover *popover) { GbWorkbench *workbench; IdeContext *context; IdeProject *project; g_assert (GB_IS_PROJECT_TREE (self)); g_assert (G_IS_FILE (orig_file)); g_assert (G_IS_FILE (new_file)); g_assert (GTK_IS_POPOVER (popover)); workbench = gb_widget_get_workbench (GTK_WIDGET (self)); context = gb_workbench_get_context (workbench); project = ide_context_get_project (context); /* todo: set busin spinner in popover */ g_object_set_data_full (G_OBJECT (popover), "G_FILE", g_object_ref (new_file), g_object_unref); ide_project_rename_file_async (project, orig_file, new_file, NULL, gb_project_tree_actions__project_rename_file_cb, g_object_ref (popover)); }
void ide_workbench_set_context (IdeWorkbench *self, IdeContext *context) { g_autoptr(GSettings) settings = NULL; IdeProject *project; guint duration; g_return_if_fail (IDE_IS_WORKBENCH (self)); g_return_if_fail (IDE_IS_CONTEXT (context)); g_return_if_fail (self->context == NULL); settings = g_settings_new ("org.gnome.builder"); g_set_object (&self->context, context); project = ide_context_get_project (context); g_object_bind_property_full (project, "name", self, "title", G_BINDING_SYNC_CREATE, transform_title, NULL, NULL, NULL); self->addins = peas_extension_set_new (peas_engine_get_default (), IDE_TYPE_WORKBENCH_ADDIN, NULL); g_signal_connect (self->addins, "extension-added", G_CALLBACK (ide_workbench_addin_added), self); g_signal_connect (self->addins, "extension-removed", G_CALLBACK (ide_workbench_addin_removed), self); peas_extension_set_foreach (self->addins, ide_workbench_addin_added, self); /* * Creating all the addins above is a bit intenstive, so give ourselves * just a bit of time to stablize allocations and sizing before * transitioning to the editor. */ g_timeout_add (STABLIZE_DELAY_MSEC, stablize_cb, g_object_ref (self)); /* * When restoring, previous buffers may get loaded. This causes new * widgets to be created and added to the workspace. Doing so during * the stack transition results in non-smooth transitions. So instead, * we will delay until the transition has completed. */ if (g_settings_get_boolean (settings, "restore-previous-files")) { duration = gtk_stack_get_transition_duration (self->top_stack); g_timeout_add (STABLIZE_DELAY_MSEC + duration, restore_in_timeout, g_object_ref (context)); } }
void gb_project_tree_set_context (GbProjectTree *self, IdeContext *context) { GtkTreeModel *model; GtkTreeIter iter; IdeTreeNode *root; IdeProject *project; IdeVcs *vcs; g_return_if_fail (GB_IS_PROJECT_TREE (self)); g_return_if_fail (IDE_IS_CONTEXT (context)); vcs = ide_context_get_vcs (context); g_signal_connect_object (vcs, "changed", G_CALLBACK (gb_project_tree_vcs_changed), self, G_CONNECT_SWAPPED); project = ide_context_get_project (context); g_signal_connect_object (project, "file-renamed", G_CALLBACK (gb_project_tree_project_file_renamed), self, G_CONNECT_SWAPPED); g_signal_connect_object (project, "file-trashed", G_CALLBACK (gb_project_tree_project_file_trashed), self, G_CONNECT_SWAPPED); model = gtk_tree_view_get_model (GTK_TREE_VIEW (self)); root = ide_tree_node_new (); ide_tree_node_set_item (root, G_OBJECT (context)); ide_tree_set_root (IDE_TREE (self), root); /* * If we only have one toplevel item (underneath root), expand it. */ if ((gtk_tree_model_iter_n_children (model, NULL) == 1) && gtk_tree_model_get_iter_first (model, &iter)) { g_autoptr(IdeTreeNode) node = NULL; gtk_tree_model_get (model, &iter, 0, &node, -1); if (node != NULL) ide_tree_node_expand (node, FALSE); } }
static void gb_project_tree_actions__create_cb (GObject *object, GAsyncResult *result, gpointer user_data) { GFile *file = (GFile *)object; g_autoptr(IdeProjectFile) project_file = NULL; g_autoptr(GbTreeNode) node = user_data; g_autoptr(GError) error = NULL; GbProjectTree *self; GbWorkbench *workbench; IdeContext *context; IdeProject *project; GbTreeNode *created; g_assert (G_IS_FILE (file)); g_assert (GB_IS_TREE_NODE (node)); if (!g_file_create_finish (file, result, &error)) { /* todo: show error messsage */ return; } self = GB_PROJECT_TREE (gb_tree_node_get_tree (node)); if (self == NULL) return; workbench = gb_widget_get_workbench (GTK_WIDGET (self)); if (workbench == NULL) return; context = gb_workbench_get_context (workbench); if (context == NULL) return; project = ide_context_get_project (context); project_file = create_file (context, file, G_FILE_TYPE_REGULAR); ide_project_add_file (project, project_file); gb_workbench_open (workbench, file); gb_tree_node_rebuild (node); gb_tree_node_expand (node, FALSE); created = gb_tree_find_item (GB_TREE (self), G_OBJECT (project_file)); if (created != NULL) gb_tree_node_select (created); }
static void save_temp_response (GtkWidget *widget, gint response, gpointer user_data) { g_autoptr(IdeEditorView) self = user_data; g_autoptr(GFile) target = NULL; g_autoptr(IdeProgress) progress = NULL; GtkFileChooser *chooser = (GtkFileChooser *)widget; g_assert (GTK_IS_FILE_CHOOSER (chooser)); g_assert (IDE_IS_EDITOR_VIEW (self)); switch (response) { case GTK_RESPONSE_OK: target = gtk_file_chooser_get_file (chooser); break; case GTK_RESPONSE_CANCEL: default: break; } if (target != NULL) { IdeBufferManager *buffer_manager; IdeContext *context; IdeProject *project; IdeBuffer *buffer = IDE_BUFFER (self->document); g_autoptr(IdeFile) file = NULL; context = ide_buffer_get_context (buffer); project = ide_context_get_project (context); buffer_manager = ide_context_get_buffer_manager (context); file = ide_project_get_project_file (project, target); ide_buffer_set_file (buffer, file); ide_buffer_manager_save_file_async (buffer_manager, buffer, file, &progress, NULL, ide_editor_view_actions__save_temp_cb, g_object_ref (self)); } gtk_widget_destroy (widget); }
static void build_context (GbProjectTreeBuilder *self, IdeTreeNode *node) { g_autoptr(GbProjectFile) item = NULL; g_autoptr(GFileInfo) file_info = NULL; g_autofree gchar *name = NULL; IdeTreeNode *child; IdeContext *context; IdeProject *project; IdeVcs *vcs; GFile *workdir; g_return_if_fail (GB_IS_PROJECT_TREE_BUILDER (self)); g_return_if_fail (IDE_IS_TREE_NODE (node)); context = IDE_CONTEXT (ide_tree_node_get_item (node)); vcs = ide_context_get_vcs (context); workdir = ide_vcs_get_working_directory (vcs); project = ide_context_get_project (context); file_info = g_file_info_new (); g_file_info_set_file_type (file_info, G_FILE_TYPE_DIRECTORY); name = g_file_get_basename (workdir); g_file_info_set_name (file_info, name); g_file_info_set_display_name (file_info, name); item = g_object_new (GB_TYPE_PROJECT_FILE, "file", workdir, "file-info", file_info, NULL); child = g_object_new (IDE_TYPE_TREE_NODE, "item", item, "icon-name", "folder-symbolic", NULL); g_object_bind_property (project, "name", child, "text", G_BINDING_SYNC_CREATE); ide_tree_node_append (node, child); }
static void ide_omni_bar_context_set (GtkWidget *widget, IdeContext *context) { IdeOmniBar *self = (IdeOmniBar *)widget; IdeConfigurationManager *config_manager = NULL; IdeBuildManager *build_manager = NULL; GListModel *pausables = NULL; IdeProject *project = NULL; IdeVcs *vcs = NULL; IDE_ENTRY; g_assert (IDE_IS_OMNI_BAR (self)); g_assert (!context || IDE_IS_CONTEXT (context)); ide_omni_bar_update (self); if (context != NULL) { vcs = ide_context_get_vcs (context); build_manager = ide_context_get_build_manager (context); config_manager = ide_context_get_configuration_manager (context); project = ide_context_get_project (context); pausables = _ide_context_get_pausables (context); } dzl_binding_group_set_source (self->build_manager_bindings, build_manager); dzl_signal_group_set_target (self->build_manager_signals, build_manager); dzl_binding_group_set_source (self->config_manager_bindings, config_manager); dzl_signal_group_set_target (self->config_manager_signals, config_manager); dzl_binding_group_set_source (self->project_bindings, project); dzl_binding_group_set_source (self->vcs_bindings, vcs); dzl_list_box_set_model (self->pausables, pausables); if (config_manager != NULL) ide_omni_bar__config_manager__notify_current (self, NULL, config_manager); IDE_EXIT; }
static void print_build_info (IdeContext *context, IdeDevice *device) { IdeProject *project; IdeBuildSystem *build_system; IdeVcs *vcs; const gchar *project_name; const gchar *vcs_name; const gchar *build_system_name; const gchar *device_id; const gchar *system_type; g_autofree gchar *build_date = NULL; GTimeVal tv; project = ide_context_get_project (context); project_name = ide_project_get_name (project); vcs = ide_context_get_vcs (context); vcs_name = g_type_name (G_TYPE_FROM_INSTANCE (vcs)); build_system = ide_context_get_build_system (context); build_system_name = g_type_name (G_TYPE_FROM_INSTANCE (build_system)); device_id = ide_device_get_id (device); system_type = ide_device_get_system_type (device); g_get_current_time (&tv); build_date = g_time_val_to_iso8601 (&tv); g_printerr (_("========================\n")); g_printerr (_(" Project Name: %s\n"), project_name); g_printerr (_(" Version Control System: %s\n"), vcs_name); g_printerr (_(" Build System: %s\n"), build_system_name); g_printerr (_(" Build Date and Time: %s\n"), build_date); g_printerr (_(" Building for Device: %s (%s)\n"), device_id, system_type); g_printerr (_("========================\n")); }
void gb_project_tree_set_context (GbProjectTree *self, IdeContext *context) { GbTreeNode *root; IdeProject *project = NULL; GtkTreeModel *model; g_return_if_fail (GB_IS_PROJECT_TREE (self)); g_return_if_fail (!context || IDE_IS_CONTEXT (context)); if (context != NULL) project = ide_context_get_project (context); root = gb_tree_get_root (GB_TREE (self)); gb_tree_node_set_item (root, G_OBJECT (project)); gb_tree_rebuild (GB_TREE (self)); /* * If we only have one item at the root of the tree, expand it. */ if ((model = gtk_tree_view_get_model (GTK_TREE_VIEW (self)))) { GtkTreeIter iter; if ((gtk_tree_model_iter_n_children (model, NULL) == 1) && gtk_tree_model_get_iter_first (model, &iter)) { g_autoptr(GbTreeNode) node = NULL; gtk_tree_model_get (model, &iter, 0, &node, -1); if (node != NULL) gb_tree_node_expand (node, FALSE); } } }
void ide_workbench_set_context (IdeWorkbench *self, IdeContext *context) { g_autoptr(GSettings) settings = NULL; IdeBuildManager *build_manager; IdeRunManager *run_manager; IdeProject *project; guint delay_msec; IDE_ENTRY; g_return_if_fail (IDE_IS_WORKBENCH (self)); g_return_if_fail (IDE_IS_CONTEXT (context)); g_return_if_fail (self->context == NULL); settings = g_settings_new ("org.gnome.builder"); g_set_object (&self->context, context); project = ide_context_get_project (context); g_object_bind_property_full (project, "name", self, "title", G_BINDING_SYNC_CREATE, transform_title, NULL, NULL, NULL); build_manager = ide_context_get_build_manager (context); gtk_widget_insert_action_group (GTK_WIDGET (self), "build-manager", G_ACTION_GROUP (build_manager)); run_manager = ide_context_get_run_manager (context); gtk_widget_insert_action_group (GTK_WIDGET (self), "run-manager", G_ACTION_GROUP (run_manager)); self->addins = peas_extension_set_new (peas_engine_get_default (), IDE_TYPE_WORKBENCH_ADDIN, NULL); g_signal_connect (self->addins, "extension-added", G_CALLBACK (ide_workbench_addin_added), self); g_signal_connect (self->addins, "extension-removed", G_CALLBACK (ide_workbench_addin_removed), self); peas_extension_set_foreach (self->addins, ide_workbench_addin_added, self); g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_CONTEXT]); /* * Creating all the addins above is a bit intensive, so give ourselves * just a bit of time to stablize allocations and sizing before * transitioning to the editor. */ delay_msec = self->disable_greeter ? 0 : STABLIZE_DELAY_MSEC; g_timeout_add (delay_msec, stablize_cb, g_object_ref (self)); /* * When restoring, previous buffers may get loaded. This causes new * widgets to be created and added to the workspace. Doing so during * the stack transition results in non-smooth transitions. So instead, * we will delay until the transition has completed. */ if (g_settings_get_boolean (settings, "restore-previous-files")) { guint duration = 0; if (!self->disable_greeter) duration = gtk_stack_get_transition_duration (self->perspectives_stack); g_timeout_add (delay_msec + duration, restore_in_timeout, g_object_ref (context)); } IDE_EXIT; }
static void ide_settings_constructed (GObject *object) { IdeSettings *self = (IdeSettings *)object; g_autofree gchar *full_path = NULL; const gchar *project_id; IdeContext *context; IdeProject *project; GSettings *settings; gchar *path; IDE_ENTRY; G_OBJECT_CLASS (ide_settings_parent_class)->constructed (object); if (self->schema_id == NULL) { g_error ("You must provide IdeSettings:schema-id"); abort (); } if (self->relative_path == NULL) { g_autoptr(GSettingsSchema) schema = NULL; GSettingsSchemaSource *source; const gchar *schema_path; source = g_settings_schema_source_get_default (); schema = g_settings_schema_source_lookup (source, self->schema_id, TRUE); if (schema == NULL) { g_error ("Could not locate schema %s", self->schema_id); abort (); } schema_path = g_settings_schema_get_path (schema); if ((schema_path != NULL) && !g_str_has_prefix (schema_path, "/org/gnome/builder/")) { g_error ("Schema path MUST be under /org/gnome/builder/"); abort (); } else if (schema_path == NULL) { self->relative_path = g_strdup (""); } else { self->relative_path = g_strdup (schema_path + strlen ("/org/gnome/builder/")); } } g_assert (self->relative_path != NULL); g_assert (self->relative_path [0] != '/'); g_assert ((self->relative_path [0] == 0) || g_str_has_suffix (self->relative_path, "/")); context = ide_object_get_context (IDE_OBJECT (self)); project = ide_context_get_project (context); project_id = ide_project_get_id (project); full_path = g_strdup_printf ("/org/gnome/builder/%s", self->relative_path); self->settings_sandwich = egg_settings_sandwich_new (self->schema_id, full_path); /* Add our project relative settings */ if (self->ignore_project_settings == FALSE) { path = g_strdup_printf ("/org/gnome/builder/projects/%s/%s", project_id, self->relative_path); settings = g_settings_new_with_path (self->schema_id, path); egg_settings_sandwich_append (self->settings_sandwich, settings); g_clear_object (&settings); g_free (path); } /* Add our application global (user defaults) settings */ settings = g_settings_new_with_path (self->schema_id, full_path); egg_settings_sandwich_append (self->settings_sandwich, settings); g_clear_object (&settings); IDE_EXIT; }