void ide_workbench_set_visible_perspective (IdeWorkbench *self, IdePerspective *perspective) { GActionGroup *actions; GtkStack *stack; gchar *id; g_return_if_fail (IDE_IS_WORKBENCH (self)); g_return_if_fail (IDE_IS_PERSPECTIVE (perspective)); stack = GTK_STACK (gtk_widget_get_ancestor (GTK_WIDGET (perspective), GTK_TYPE_STACK)); id = ide_perspective_get_id (perspective); if (!ide_str_equal0 (gtk_stack_get_visible_child_name (stack), id)) { gtk_stack_set_visible_child_name (stack, id); gtk_stack_set_visible_child_name (self->titlebar_stack, id); } g_free (id); actions = ide_perspective_get_actions (perspective); gtk_widget_insert_action_group (GTK_WIDGET (self), "perspective", actions); if ((stack == self->perspectives_stack) && !ide_str_equal0 (gtk_stack_get_visible_child_name (self->top_stack), "perspectives")) { gtk_stack_set_visible_child_name (self->top_stack, "perspectives"); g_timeout_add (1000 + gtk_stack_get_transition_duration (self->top_stack), remove_early_perspectives, g_object_ref (self)); } }
static void ide_workbench_notify_visible_child (IdeWorkbench *self, GParamSpec *pspec, GtkStack *stack) { IdePerspective *perspective; g_assert (IDE_IS_WORKBENCH (self)); g_assert (GTK_IS_STACK (stack)); perspective = IDE_PERSPECTIVE (gtk_stack_get_visible_child (stack)); if (perspective != NULL) { GActionGroup *actions; gchar *id; id = ide_perspective_get_id (perspective); gtk_stack_set_visible_child_name (self->titlebar_stack, id); actions = ide_perspective_get_actions (perspective); gtk_widget_insert_action_group (GTK_WIDGET (self), "perspective", actions); g_clear_object (&actions); g_free (id); } }
void ide_workbench_add_perspective (IdeWorkbench *self, IdePerspective *perspective) { g_autofree gchar *accel= NULL; g_autofree gchar *icon_name = NULL; g_autofree gchar *id = NULL; g_autofree gchar *title = NULL; GtkWidget *titlebar; g_assert (IDE_IS_WORKBENCH (self)); g_assert (IDE_IS_PERSPECTIVE (perspective)); id = ide_perspective_get_id (perspective); title = ide_perspective_get_title (perspective); icon_name = ide_perspective_get_icon_name (perspective); titlebar = ide_perspective_get_titlebar (perspective); gtk_container_add_with_properties (GTK_CONTAINER (self->perspectives_stack), GTK_WIDGET (perspective), "icon-name", icon_name, "name", id, "needs-attention", FALSE, "title", title, NULL); if (titlebar != NULL) gtk_container_add_with_properties (GTK_CONTAINER (self->header_stack), titlebar, "name", id, NULL); if (!IDE_IS_GREETER_PERSPECTIVE (perspective)) { guint position = 0; gtk_container_child_get (GTK_CONTAINER (self->perspectives_stack), GTK_WIDGET (perspective), "position", &position, NULL); g_list_store_append (self->perspectives, perspective); g_list_store_sort (self->perspectives, ide_workbench_compare_perspective, NULL); } accel = ide_perspective_get_accelerator (perspective); if (accel != NULL) { const gchar *accel_map[] = { accel, NULL }; g_autofree gchar *action_name = NULL; action_name = g_strdup_printf ("win.perspective('%s')", id); gtk_application_set_accels_for_action (GTK_APPLICATION (IDE_APPLICATION_DEFAULT), action_name, accel_map); } }
void ide_workbench_remove_perspective (IdeWorkbench *self, IdePerspective *perspective) { const gchar *id; GtkWidget *titlebar; g_assert (IDE_IS_WORKBENCH (self)); g_assert (IDE_IS_PERSPECTIVE (perspective)); g_assert (gtk_widget_get_parent (GTK_WIDGET (perspective)) == GTK_WIDGET (self->perspectives_stack)); id = ide_perspective_get_id (perspective); titlebar = gtk_stack_get_child_by_name (self->titlebar_stack, id); gtk_container_remove (GTK_CONTAINER (self->titlebar_stack), titlebar); gtk_container_remove (GTK_CONTAINER (self->perspectives_stack), GTK_WIDGET (perspective)); }
void ide_workbench_add_perspective (IdeWorkbench *self, IdePerspective *perspective) { g_autofree gchar *icon_name = NULL; g_autofree gchar *id = NULL; g_autofree gchar *title = NULL; GtkStack *stack; GtkWidget *titlebar; g_assert (IDE_IS_WORKBENCH (self)); g_assert (IDE_IS_PERSPECTIVE (perspective)); id = ide_perspective_get_id (perspective); title = ide_perspective_get_title (perspective); icon_name = ide_perspective_get_icon_name (perspective); if (ide_perspective_is_early (perspective)) stack = self->top_stack; else stack = self->perspectives_stack; gtk_widget_set_hexpand (GTK_WIDGET (perspective), TRUE); gtk_container_add_with_properties (GTK_CONTAINER (stack), GTK_WIDGET (perspective), "icon-name", icon_name, "name", id, "needs-attention", FALSE, "title", title, NULL); titlebar = ide_perspective_get_titlebar (perspective); if (titlebar == NULL) titlebar = g_object_new (IDE_TYPE_WORKBENCH_HEADER_BAR, "visible", TRUE, NULL); gtk_container_add_with_properties (GTK_CONTAINER (self->titlebar_stack), titlebar, "name", id, NULL); ide_workbench_resort_perspectives (self); }
void _ide_workbench_add_perspective_shortcut (IdeWorkbench *self, IdePerspective *perspective) { g_autofree gchar *accel= NULL; g_assert (IDE_IS_WORKBENCH (self)); g_assert (IDE_IS_PERSPECTIVE (perspective)); accel = ide_perspective_get_accelerator (perspective); if (accel != NULL) { DzlShortcutController *controller; g_autofree gchar *id = ide_perspective_get_id (perspective); g_autofree gchar *title = ide_perspective_get_title (perspective); g_autofree gchar *command_id = g_strdup_printf ("org.gnome.builder.workbench.perspective('%s')", id); g_autofree gchar *action_name = g_strdup_printf ("win.perspective('%s')", id); g_autofree gchar *shortcut_help = g_strdup_printf ("Switch to %s perspective", title); const DzlShortcutEntry workbench_shortcut_entry[] = { { command_id, 0, NULL, NC_("shortcut window", "Workbench shortcuts"), NC_("shortcut window", "Perspectives"), NC_("shortcut window", shortcut_help) }, }; controller = dzl_shortcut_controller_find (GTK_WIDGET (self)); dzl_shortcut_controller_add_command_action (controller, command_id, accel, DZL_SHORTCUT_PHASE_GLOBAL, action_name); dzl_shortcut_manager_add_shortcut_entries (NULL, workbench_shortcut_entry, G_N_ELEMENTS (workbench_shortcut_entry), GETTEXT_PACKAGE); } }
void ide_workbench_set_visible_perspective (IdeWorkbench *self, IdePerspective *perspective) { g_autofree gchar *id = NULL; GActionGroup *actions = NULL; const gchar *current_id; GtkWidget *titlebar; guint restore_duration = 0; g_return_if_fail (IDE_IS_WORKBENCH (self)); g_return_if_fail (IDE_IS_PERSPECTIVE (perspective)); /* * If we can detect that this is the first transition to the editor, * and that our window is not yet displayed, we can avoid the transition * duration altogether. This is handy when first opening a window with * a project loaded, as used by self->disable_greeter. */ if (self->disable_greeter && IDE_IS_EDITOR_PERSPECTIVE (perspective) && !self->did_initial_editor_transition) { self->did_initial_editor_transition = TRUE; restore_duration = gtk_stack_get_transition_duration (self->perspectives_stack); gtk_stack_set_transition_duration (self->perspectives_stack, 0); } current_id = gtk_stack_get_visible_child_name (self->perspectives_stack); id = ide_perspective_get_id (perspective); if (!ide_str_equal0 (current_id, id)) gtk_stack_set_visible_child_name (self->perspectives_stack, id); titlebar = gtk_stack_get_child_by_name (self->header_stack, id); if (titlebar != NULL) gtk_stack_set_visible_child (self->header_stack, titlebar); else gtk_stack_set_visible_child (self->header_stack, GTK_WIDGET (self->header_bar)); actions = ide_perspective_get_actions (perspective); gtk_widget_insert_action_group (GTK_WIDGET (self), "perspective", actions); /* * If we are transitioning to the editor the first time, we can * remove the early perspectives (greeter, etc). */ if (IDE_IS_EDITOR_PERSPECTIVE (perspective)) remove_early_perspectives (self); gtk_widget_set_visible (GTK_WIDGET (self->perspective_menu_button), !ide_perspective_is_early (perspective)); if (self->addins != NULL) peas_extension_set_foreach (self->addins, ide_workbench_notify_perspective_set, perspective); g_clear_object (&actions); if (restore_duration != 0) gtk_stack_set_transition_duration (self->perspectives_stack, restore_duration); /* Notify the application to possibly update actions such * as the preferences state. */ ide_application_actions_update (IDE_APPLICATION_DEFAULT); }