aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--matchbox/core/mb-wm-layout.c40
-rw-r--r--matchbox/core/mb-wm-layout.h5
3 files changed, 43 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 8d8e7da..4f9ad48 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-10 Ross Burton <ross@openedhand.com>
+
+ * matchbox/core/mb-wm-layout.[ch]:
+ Add virutal functions for the various layout stages, so subclasses
+ can override part of the layout procedure.
+
2008-04-10 Tomas Frydrych <tf@o-hand.com>
* matchbox/comp-mgr/mb-wm-comp-mgr-clutter.c:
diff --git a/matchbox/core/mb-wm-layout.c b/matchbox/core/mb-wm-layout.c
index aefb651..d033131 100644
--- a/matchbox/core/mb-wm-layout.c
+++ b/matchbox/core/mb-wm-layout.c
@@ -9,6 +9,14 @@
static void
mb_wm_layout_real_update (MBWMLayout * layout);
+static void
+mb_wm_layout_real_layout_panels (MBWMLayout *layout, MBGeometry * avail_geom);
+static void
+mb_wm_layout_real_layout_input (MBWMLayout *layout, MBGeometry * avail_geom);
+static void
+mb_wm_layout_real_layout_free (MBWMLayout *layout, MBGeometry * avail_geom);
+static void
+mb_wm_layout_real_layout_fullscreen (MBWMLayout *layout, MBGeometry * avail_geom);
static void
mb_wm_layout_class_init (MBWMObjectClass *klass)
@@ -16,6 +24,10 @@ mb_wm_layout_class_init (MBWMObjectClass *klass)
MBWMLayoutClass * layout_class = MB_WM_LAYOUT_CLASS (klass);
layout_class->update = mb_wm_layout_real_update;
+ layout_class->layout_panels = mb_wm_layout_real_layout_panels;
+ layout_class->layout_input = mb_wm_layout_real_layout_input;
+ layout_class->layout_free = mb_wm_layout_real_layout_free;
+ layout_class->layout_fullscreen = mb_wm_layout_real_layout_fullscreen;
#if MBWM_WANT_DEBUG
klass->klass_name = "MBWMLayout";
@@ -204,8 +216,9 @@ mb_wm_layout_maximise_geometry (MBGeometry *geom,
}
static void
-mb_wm_layout_panels (MBWindowManager * wm, MBGeometry * avail_geom)
+mb_wm_layout_real_layout_panels (MBWMLayout *layout, MBGeometry * avail_geom)
{
+ MBWindowManager *wm = layout->wm;
MBWindowManagerClient *client;
MBGeometry coverage;
Bool need_change;
@@ -350,8 +363,9 @@ mb_wm_layout_panels (MBWindowManager * wm, MBGeometry * avail_geom)
}
static void
-mb_wm_layout_input (MBWindowManager * wm, MBGeometry * avail_geom)
+mb_wm_layout_real_layout_input (MBWMLayout *layout, MBGeometry * avail_geom)
{
+ MBWindowManager *wm = layout->wm;
MBWindowManagerClient *client;
MBGeometry coverage;
Bool need_change;
@@ -525,8 +539,9 @@ mb_wm_layout_input (MBWindowManager * wm, MBGeometry * avail_geom)
}
static void
-mb_wm_layout_free (MBWindowManager * wm, MBGeometry * avail_geom)
+mb_wm_layout_real_layout_free (MBWMLayout *layout, MBGeometry * avail_geom)
{
+ MBWindowManager *wm = layout->wm;
MBWindowManagerClient *client;
MBGeometry coverage;
Bool need_change;
@@ -582,8 +597,9 @@ mb_wm_layout_free (MBWindowManager * wm, MBGeometry * avail_geom)
}
static void
-mb_wm_layout_fullscreen (MBWindowManager * wm, MBGeometry * avail_geom)
+mb_wm_layout_real_layout_fullscreen (MBWMLayout *layout, MBGeometry * avail_geom)
{
+ MBWindowManager *wm = layout->wm;
MBWindowManagerClient *client;
MBGeometry coverage;
@@ -674,9 +690,17 @@ mb_wm_layout_fullscreen (MBWindowManager * wm, MBGeometry * avail_geom)
static void
mb_wm_layout_real_update (MBWMLayout * layout)
{
+ MBWMLayoutClass *klass;
MBWindowManager *wm = layout->wm;
MBGeometry avail_geom;
+ klass = MB_WM_LAYOUT_CLASS (MB_WM_OBJECT_GET_CLASS (layout));
+
+ MBWM_ASSERT (klass->layout_panels);
+ MBWM_ASSERT (klass->layout_input);
+ MBWM_ASSERT (klass->layout_free);
+ MBWM_ASSERT (klass->layout_fullscreen);
+
mb_wm_get_display_geometry (wm, &avail_geom);
/*
@@ -714,12 +738,12 @@ mb_wm_layout_real_update (MBWMLayout * layout)
*/
- mb_wm_layout_panels (wm, &avail_geom);
- mb_wm_layout_input (wm, &avail_geom);
- mb_wm_layout_free (wm, &avail_geom);
+ klass->layout_panels (layout, &avail_geom);
+ klass->layout_input (layout, &avail_geom);
+ klass->layout_free (layout, &avail_geom);
mb_wm_get_display_geometry (wm, &avail_geom);
- mb_wm_layout_fullscreen (wm, &avail_geom);
+ klass->layout_fullscreen (layout, &avail_geom);
}
void
diff --git a/matchbox/core/mb-wm-layout.h b/matchbox/core/mb-wm-layout.h
index 264edbb..3e89e6b 100644
--- a/matchbox/core/mb-wm-layout.h
+++ b/matchbox/core/mb-wm-layout.h
@@ -39,6 +39,11 @@ struct MBWMLayoutClass
MBWMObjectClass parent;
void (*update) (MBWMLayout *layout);
+
+ void (*layout_panels) (MBWMLayout *layout, MBGeometry *avail_geom);
+ void (*layout_input) (MBWMLayout *layout, MBGeometry *avail_geom);
+ void (*layout_free) (MBWMLayout *layout, MBGeometry *avail_geom);
+ void (*layout_fullscreen) (MBWMLayout *layout, MBGeometry *avail_geom);
};
int