[gnome-builder] workbench: add gb_workbench_views_foreach()
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] workbench: add gb_workbench_views_foreach()
- Date: Fri, 8 May 2015 05:21:31 +0000 (UTC)
commit 8b82cdc3e5e372f5c15a886c41ea7ed45d553ec9
Author: Christian Hergert <christian hergert me>
Date: Thu May 7 22:18:06 2015 -0700
workbench: add gb_workbench_views_foreach()
This is a helper to iterate all of the GbView in the workspaces.
I don't particularly like this, but it keeps us moving forward.
I'd really like to see something in the future that manages views,
workspaces, layouts, etc in a cleaner way.
src/editor/gb-editor-workspace.c | 32 ++++++++++++++++++++++++++++++++
src/views/gb-view-stack.c | 15 +++++++++++++++
src/views/gb-view-stack.h | 1 +
src/workbench/gb-workbench.c | 11 +++++++++++
src/workbench/gb-workbench.h | 3 +++
src/workbench/gb-workspace.c | 12 ++++++++++++
src/workbench/gb-workspace.h | 7 +++++++
7 files changed, 81 insertions(+), 0 deletions(-)
---
diff --git a/src/editor/gb-editor-workspace.c b/src/editor/gb-editor-workspace.c
index f239af9..75872bc 100644
--- a/src/editor/gb-editor-workspace.c
+++ b/src/editor/gb-editor-workspace.c
@@ -240,6 +240,35 @@ gb_editor_workspace__project_paned_notify_position (GbEditorWorkspace *self,
}
static void
+gb_editor_workspace_views_foreach (GbWorkspace *workspace,
+ GtkCallback callback,
+ gpointer callback_data)
+{
+ GbEditorWorkspace *self = (GbEditorWorkspace *)workspace;
+ GList *stacks;
+ GList *stack;
+
+ g_assert (GB_IS_EDITOR_WORKSPACE (self));
+
+ stacks = gb_view_grid_get_stacks (self->view_grid);
+
+ for (stack = stacks; stack; stack = stack->next)
+ {
+ GList *views;
+ GList *iter;
+
+ views = gb_view_stack_get_views (stack->data);
+
+ for (iter = views; iter; iter = iter->next)
+ callback (iter->data, callback_data);
+
+ g_list_free (views);
+ }
+
+ g_list_free (stacks);
+}
+
+static void
gb_editor_workspace_constructed (GObject *object)
{
GbEditorWorkspace *self = (GbEditorWorkspace *)object;
@@ -314,6 +343,7 @@ gb_editor_workspace_class_init (GbEditorWorkspaceClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GbWorkspaceClass *workspace_class = GB_WORKSPACE_CLASS (klass);
object_class->constructed = gb_editor_workspace_constructed;
object_class->finalize = gb_editor_workspace_finalize;
@@ -323,6 +353,8 @@ gb_editor_workspace_class_init (GbEditorWorkspaceClass *klass)
widget_class->grab_focus = gb_editor_workspace_grab_focus;
widget_class->hierarchy_changed = gb_editor_workspace_hierarchy_changed;
+ workspace_class->views_foreach = gb_editor_workspace_views_foreach;
+
gParamSpecs [PROP_SHOW_PROJECT_TREE] =
g_param_spec_boolean ("show-project-tree",
_("Show Project Tree"),
diff --git a/src/views/gb-view-stack.c b/src/views/gb-view-stack.c
index 818b6fa..540b546 100644
--- a/src/views/gb-view-stack.c
+++ b/src/views/gb-view-stack.c
@@ -821,3 +821,18 @@ gb_view_stack_find_document_typed (GbViewStack *self,
return NULL;
}
+
+/**
+ * gb_view_stack_get_views:
+ *
+ * Gets the views belonging to this #GbViewStack.
+ *
+ * Returns: (transfer container): A #GList of #GbView.
+ */
+GList *
+gb_view_stack_get_views (GbViewStack *self)
+{
+ g_return_val_if_fail (GB_IS_VIEW_STACK (self), NULL);
+
+ return gtk_container_get_children (GTK_CONTAINER (self->stack));
+}
diff --git a/src/views/gb-view-stack.h b/src/views/gb-view-stack.h
index 0139b6b..fa4b433 100644
--- a/src/views/gb-view-stack.h
+++ b/src/views/gb-view-stack.h
@@ -45,6 +45,7 @@ void gb_view_stack_focus_document (GbViewStack *self,
GbDocument *document);
void gb_view_stack_focus_location (GbViewStack *self,
IdeSourceLocation *location);
+GList *gb_view_stack_get_views (GbViewStack *self);
G_END_DECLS
diff --git a/src/workbench/gb-workbench.c b/src/workbench/gb-workbench.c
index da6f328..64b4f61 100644
--- a/src/workbench/gb-workbench.c
+++ b/src/workbench/gb-workbench.c
@@ -877,3 +877,14 @@ gb_workbench_get_closing (GbWorkbench *self)
return (self->unloading || (self->disposing > 0));
}
+
+void
+gb_workbench_views_foreach (GbWorkbench *self,
+ GtkCallback callback,
+ gpointer callback_data)
+{
+ g_return_if_fail (GB_IS_WORKBENCH (self));
+ g_return_if_fail (callback != NULL);
+
+ gb_workspace_views_foreach (GB_WORKSPACE (self->editor_workspace), callback, callback_data);
+}
diff --git a/src/workbench/gb-workbench.h b/src/workbench/gb-workbench.h
index c7490f3..1675710 100644
--- a/src/workbench/gb-workbench.h
+++ b/src/workbench/gb-workbench.h
@@ -54,6 +54,9 @@ GbCommandManager *gb_workbench_get_command_manager (GbWorkbench *self);
gpointer gb_workbench_get_workspace_typed (GbWorkbench *self,
GType workspace_type);
gboolean gb_workbench_get_closing (GbWorkbench *self);
+void gb_workbench_views_foreach (GbWorkbench *self,
+ GtkCallback callback,
+ gpointer callback_data);
G_END_DECLS
diff --git a/src/workbench/gb-workspace.c b/src/workbench/gb-workspace.c
index dbe3094..b1b18fe 100644
--- a/src/workbench/gb-workspace.c
+++ b/src/workbench/gb-workspace.c
@@ -180,3 +180,15 @@ static void
gb_workspace_init (GbWorkspace *workspace)
{
}
+
+void
+gb_workspace_views_foreach (GbWorkspace *self,
+ GtkCallback callback,
+ gpointer callback_data)
+{
+ g_return_if_fail (GB_IS_WORKSPACE (self));
+ g_return_if_fail (callback != NULL);
+
+ if (GB_WORKSPACE_GET_CLASS (self)->views_foreach)
+ GB_WORKSPACE_GET_CLASS (self)->views_foreach (self, callback, callback_data);
+}
diff --git a/src/workbench/gb-workspace.h b/src/workbench/gb-workspace.h
index cffbbed..6997a7e 100644
--- a/src/workbench/gb-workspace.h
+++ b/src/workbench/gb-workspace.h
@@ -32,6 +32,10 @@ G_DECLARE_DERIVABLE_TYPE (GbWorkspace, gb_workspace, GB, WORKSPACE, GtkBin)
struct _GbWorkspaceClass
{
GtkBinClass parent_class;
+
+ void (*views_foreach) (GbWorkspace *workspace,
+ GtkCallback callback,
+ gpointer callback_data);
};
const gchar *gb_workspace_get_icon_name (GbWorkspace *self);
@@ -40,6 +44,9 @@ void gb_workspace_set_icon_name (GbWorkspace *self,
const gchar *gb_workspace_get_title (GbWorkspace *self);
void gb_workspace_set_title (GbWorkspace *self,
const gchar *title);
+void gb_workspace_views_foreach (GbWorkspace *self,
+ GtkCallback callback,
+ gpointer callback_data);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]