static void gb_project_tree_actions_open_with_editor (GSimpleAction *action, GVariant *variant, gpointer user_data) { GbWorkbench *workbench; GbProjectTree *self = user_data; GFileInfo *file_info; GFile *file; GbTreeNode *selected; GObject *item; g_assert (GB_IS_PROJECT_TREE (self)); if (!(selected = gb_tree_get_selected (GB_TREE (self))) || !(item = gb_tree_node_get_item (selected)) || !IDE_IS_PROJECT_FILE (item) || !(file_info = ide_project_file_get_file_info (IDE_PROJECT_FILE (item))) || (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY) || !(file = ide_project_file_get_file (IDE_PROJECT_FILE (item))) || !(workbench = gb_widget_get_workbench (GTK_WIDGET (self)))) return; gb_workbench_open_with_editor (workbench, file); }
static void ide_project_file_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { IdeProjectFile *self = IDE_PROJECT_FILE (object); switch (prop_id) { case PROP_FILE: g_value_set_object (value, ide_project_file_get_file (self)); break; case PROP_FILE_INFO: g_value_set_object (value, ide_project_file_get_file_info (self)); break; case PROP_IS_DIRECTORY: g_value_set_boolean (value, ide_project_file_get_is_directory (self)); break; case PROP_NAME: g_value_set_string (value, ide_project_file_get_name (self)); break; case PROP_PATH: g_value_set_string (value, ide_project_file_get_path (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } }
static void gb_project_tree_actions_open_with (GSimpleAction *action, GVariant *variant, gpointer user_data) { g_autoptr(GDesktopAppInfo) app_info = NULL; g_autoptr(GdkAppLaunchContext) launch_context = NULL; GbProjectTree *self = user_data; GbTreeNode *selected; GbWorkbench *workbench; GdkDisplay *display; GFileInfo *file_info; GFile *file; const gchar *app_id; GObject *item; GList *files; g_assert (GB_IS_PROJECT_TREE (self)); g_assert (g_variant_is_of_type (variant, G_VARIANT_TYPE_STRING)); if (!(workbench = gb_widget_get_workbench (GTK_WIDGET (self))) || !(selected = gb_tree_get_selected (GB_TREE (self))) || !(item = gb_tree_node_get_item (selected)) || !IDE_IS_PROJECT_FILE (item) || !(app_id = g_variant_get_string (variant, NULL)) || !(file_info = ide_project_file_get_file_info (IDE_PROJECT_FILE (item))) || !(file = ide_project_file_get_file (IDE_PROJECT_FILE (item))) || !(app_info = g_desktop_app_info_new (app_id))) return; display = gtk_widget_get_display (GTK_WIDGET (self)); launch_context = gdk_display_get_app_launch_context (display); files = g_list_append (NULL, file); g_app_info_launch (G_APP_INFO (app_info), files, G_APP_LAUNCH_CONTEXT (launch_context), NULL); g_list_free (files); }
static void gb_project_tree_actions_rename_file (GSimpleAction *action, GVariant *variant, gpointer user_data) { GbProjectTree *self = user_data; GbTreeNode *selected; GtkPopover *popover; GObject *item; GFile *file; GFileInfo *file_info; gboolean is_dir; g_assert (GB_IS_PROJECT_TREE (self)); if (!(selected = gb_tree_get_selected (GB_TREE (self))) || !(item = gb_tree_node_get_item (selected)) || !IDE_IS_PROJECT_FILE (item) || !(file = ide_project_file_get_file (IDE_PROJECT_FILE (item))) || !(file_info = ide_project_file_get_file_info (IDE_PROJECT_FILE (item)))) return; is_dir = (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY); popover = g_object_new (GB_TYPE_RENAME_FILE_POPOVER, "file", file, "is-directory", is_dir, "position", GTK_POS_RIGHT, NULL); g_signal_connect_object (popover, "rename-file", G_CALLBACK (gb_project_tree_actions__rename_file_cb), self, G_CONNECT_SWAPPED); gb_tree_node_show_popover (selected, popover); }