Attached is the patch for window properties.
Comments suggestions ?
? prop.patch
Index: include/directfb.h
===================================================================
RCS file: /cvs/directfb/DirectFB/include/directfb.h,v
retrieving revision 1.304
diff -u -r1.304 directfb.h
--- include/directfb.h 17 Jul 2006 13:12:21 -0000 1.304
+++ include/directfb.h 1 Aug 2006 20:14:01 -0000
@@ -4324,6 +4324,34 @@
/** Appearance and Behaviour **/
/*
+ * Set property controlling appearance and behaviour of the window.
+ */
+ DFBResult (*SetProperty) (
+ IDirectFBWindow *thiz,
+ char *key,
+ void *value,
+ void **old_value
+ );
+
+ /*
+ * Get property controlling appearance and behaviour of the window.
+ */
+ DFBResult (*GetProperty) (
+ IDirectFBWindow *thiz,
+ char *key,
+ void **value
+ );
+
+ /*
+ * Remove property controlling appearance and behaviour of the window.
+ */
+ DFBResult (*RemoveProperty) (
+ IDirectFBWindow *thiz,
+ char *key,
+ void **value
+ );
+
+ /*
* Set options controlling appearance and behaviour of the window.
*/
DFBResult (*SetOptions) (
Index: src/core/wm.c
===================================================================
RCS file: /cvs/directfb/DirectFB/src/core/wm.c,v
retrieving revision 1.12
diff -u -r1.12 wm.c
--- src/core/wm.c 16 Jul 2006 10:15:29 -0000 1.12
+++ src/core/wm.c 1 Aug 2006 20:14:02 -0000
@@ -563,6 +563,7 @@
return wm_local->funcs->GetInsets(stack,window,insets);
}
+
/**
Give the wm a chance to override the windows configuration
**/
@@ -652,6 +653,65 @@
return ret;
}
+/**
+ * Let the wm set a property on a window
+ */
+DFBResult
+dfb_wm_set_window_property( CoreWindowStack *stack,
+ CoreWindow *window,
+ char *key,
+ void *value,
+ void **old_value)
+{
+ D_ASSERT( wm_local != NULL );
+ D_ASSERT( wm_local->funcs != NULL );
+ D_ASSERT( wm_local->funcs->SetWindowProperty != NULL );
+
+ D_ASSERT( stack != NULL );
+
+ return wm_local->funcs->SetWindowProperty(stack,wm_local->data,stack->stack_data,
+ window,window->window_data,
+ key,value,old_value);
+}
+
+/**
+ * get the wm property on a window
+ */
+DFBResult
+dfb_wm_get_window_property( CoreWindowStack *stack,
+ CoreWindow *window,
+ char *key,
+ void **value)
+{
+ D_ASSERT( wm_local != NULL );
+ D_ASSERT( wm_local->funcs != NULL );
+ D_ASSERT( wm_local->funcs->GetWindowProperty != NULL );
+
+ D_ASSERT( stack != NULL );
+
+ return wm_local->funcs->GetWindowProperty(stack,wm_local->data,stack->stack_data,
+ window,window->window_data,key,value);
+}
+
+/**
+ * remove th wm property on a window
+ */
+DFBResult
+dfb_wm_remove_window_property( CoreWindowStack *stack,
+ CoreWindow *window,
+ char *key,
+ void **value)
+{
+ D_ASSERT( wm_local != NULL );
+ D_ASSERT( wm_local->funcs != NULL );
+ D_ASSERT( wm_local->funcs->RemoveWindowProperty != NULL );
+
+ D_ASSERT( stack != NULL );
+
+ return wm_local->funcs->RemoveWindowProperty(stack,wm_local->data,stack->stack_data,
+ window,window->window_data,key,value);
+}
+
DFBResult
dfb_wm_set_window_config( CoreWindow *window,
const CoreWindowConfig *config,
Index: src/core/wm.h
===================================================================
RCS file: /cvs/directfb/DirectFB/src/core/wm.h,v
retrieving revision 1.11
diff -u -r1.11 wm.h
--- src/core/wm.h 16 Jul 2006 10:15:29 -0000 1.11
+++ src/core/wm.h 1 Aug 2006 20:14:02 -0000
@@ -185,6 +185,30 @@
/** Window **/
+ DFBResult (*SetWindowProperty)( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void *value,
+ void **old_value);
+
+ DFBResult (*GetWindowProperty)( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void **value);
+
+ DFBResult (*RemoveWindowProperty)( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void **value);
DFBResult (*GetInsets) ( CoreWindowStack *stack,
CoreWindow *window,
@@ -296,7 +320,23 @@
CoreWindow *window,
DFBInsets *insets );
-DFBResult dfb_wm_preconfigure_window( CoreWindowStack *stack,
+DFBResult dfb_wm_set_window_property ( CoreWindowStack *stack,
+ CoreWindow *window,
+ char *key,
+ void *value,
+ void **old_value);
+
+DFBResult dfb_wm_get_window_property ( CoreWindowStack *stack,
+ CoreWindow *window,
+ char *key,
+ void **value);
+
+DFBResult dfb_wm_remove_window_property ( CoreWindowStack *stack,
+ CoreWindow *window,
+ char *key,
+ void **value);
+
+DFBResult dfb_wm_preconfigure_window ( CoreWindowStack *stack,
CoreWindow *window );
Index: src/core/wm_module.h
===================================================================
RCS file: /cvs/directfb/DirectFB/src/core/wm_module.h,v
retrieving revision 1.9
diff -u -r1.9 wm_module.h
--- src/core/wm_module.h 16 Jul 2006 10:15:29 -0000 1.9
+++ src/core/wm_module.h 1 Aug 2006 20:14:02 -0000
@@ -120,6 +120,31 @@
CoreWindow *window,
void *window_data );
+static DFBResult wm_set_window_property( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void *value,
+ void **old_value );
+
+static DFBResult wm_get_window_property( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void **ret_value );
+
+static DFBResult wm_remove_window_property( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void **ret_value );
+
static DFBResult wm_add_window ( CoreWindowStack *stack,
void *wm_data,
void *stack_data,
@@ -201,7 +226,10 @@
StartDesktop: wm_start_desktop,
GetInsets: wm_get_insets,
- PreConfigureWindow: wm_preconfigure_window,
+ PreConfigureWindow: wm_preconfigure_window,
+ SetWindowProperty: wm_set_window_property,
+ GetWindowProperty: wm_get_window_property,
+ RemoveWindowProperty:wm_remove_window_property,
AddWindow: wm_add_window,
RemoveWindow: wm_remove_window,
SetWindowConfig: wm_set_window_config,
Index: src/windows/idirectfbwindow.c
===================================================================
RCS file: /cvs/directfb/DirectFB/src/windows/idirectfbwindow.c,v
retrieving revision 1.86
diff -u -r1.86 idirectfbwindow.c
--- src/windows/idirectfbwindow.c 11 Jun 2006 16:33:00 -0000 1.86
+++ src/windows/idirectfbwindow.c 1 Aug 2006 20:14:03 -0000
@@ -344,6 +344,55 @@
}
static DFBResult
+IDirectFBWindow_SetProperty( IDirectFBWindow *thiz,
+ char *key, void *value, void **old_value )
+{
+ DIRECT_INTERFACE_GET_DATA(IDirectFBWindow)
+
+ /* Check arguments */
+ if (data->destroyed)
+ return DFB_DESTROYED;
+
+ if (!key)
+ return DFB_INVARG;
+
+ return dfb_wm_set_window_property(data->window->stack,data->window,key,value,old_value);
+}
+
+static DFBResult
+IDirectFBWindow_GetProperty( IDirectFBWindow *thiz,char *key,
+ void **ret_value )
+{
+ DIRECT_INTERFACE_GET_DATA(IDirectFBWindow)
+
+ if (data->destroyed)
+ return DFB_DESTROYED;
+
+ if (!key)
+ return DFB_INVARG;
+
+ if (!ret_value)
+ return DFB_INVARG;
+
+ return dfb_wm_get_window_property(data->window->stack,data->window,key,ret_value);
+}
+
+static DFBResult
+IDirectFBWindow_RemoveProperty( IDirectFBWindow *thiz,char *key,
+ void **ret_value )
+{
+ DIRECT_INTERFACE_GET_DATA(IDirectFBWindow)
+
+ if (data->destroyed)
+ return DFB_DESTROYED;
+
+ if (!key)
+ return DFB_INVARG;
+
+ return dfb_wm_remove_window_property(data->window->stack,data->window,key,ret_value);
+}
+
+static DFBResult
IDirectFBWindow_SetOptions( IDirectFBWindow *thiz,
DFBWindowOptions options )
{
@@ -832,6 +881,9 @@
thiz->GetPosition = IDirectFBWindow_GetPosition;
thiz->GetSize = IDirectFBWindow_GetSize;
thiz->GetSurface = IDirectFBWindow_GetSurface;
+ thiz->SetProperty = IDirectFBWindow_SetProperty;
+ thiz->GetProperty = IDirectFBWindow_GetProperty;
+ thiz->RemoveProperty = IDirectFBWindow_RemoveProperty;
thiz->SetOptions = IDirectFBWindow_SetOptions;
thiz->GetOptions = IDirectFBWindow_GetOptions;
thiz->SetColorKey = IDirectFBWindow_SetColorKey;
Index: wm/default/default.c
===================================================================
RCS file: /cvs/directfb/DirectFB/wm/default/default.c,v
retrieving revision 1.31
diff -u -r1.31 default.c
--- wm/default/default.c 16 Jul 2006 10:15:29 -0000 1.31
+++ wm/default/default.c 1 Aug 2006 20:14:04 -0000
@@ -2795,6 +2795,7 @@
return DFB_OK;
}
+
static DFBResult
wm_preconfigure_window( CoreWindowStack *stack,
void *wm_data,
@@ -2806,6 +2807,44 @@
}
static DFBResult
+wm_set_window_property( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void *value,
+ void **old_value)
+{
+ return DFB_OK;
+}
+
+static DFBResult
+wm_get_window_property( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void **value)
+{
+ return DFB_OK;
+}
+
+
+static DFBResult
+wm_remove_window_property( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void **value)
+{
+ return DFB_OK;
+}
+
+static DFBResult
wm_add_window( CoreWindowStack *stack,
void *wm_data,
void *stack_data,
Index: wm/unique/unique.c
===================================================================
RCS file: /cvs/directfb/DirectFB/wm/unique/unique.c,v
retrieving revision 1.14
diff -u -r1.14 unique.c
--- wm/unique/unique.c 16 Jul 2006 10:15:29 -0000 1.14
+++ wm/unique/unique.c 1 Aug 2006 20:14:05 -0000
@@ -564,6 +564,44 @@
}
static DFBResult
+wm_set_window_property( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void *value,
+ void **old_value)
+{
+ return DFB_OK;
+}
+
+static DFBResult
+wm_get_window_property( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void **value)
+{
+ return DFB_OK;
+}
+
+
+static DFBResult
+wm_remove_window_property( CoreWindowStack *stack,
+ void *wm_data,
+ void *stack_data,
+ CoreWindow *window,
+ void *window_data,
+ char *key,
+ void **value)
+{
+ return DFB_OK;
+}
+
+static DFBResult
wm_add_window( CoreWindowStack *stack,
void *wm_data,
void *stack_data,
_______________________________________________
directfb-dev mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev