DFBResult IWindow_Real::Restack( CoreWindow *relative, int relation ) { D_DEBUG_AT( Core_Window, "IWindow_Real::%s( %p )\n", __FUNCTION__, obj ); D_MAGIC_ASSERT( obj, CoreWindow ); DFBResult ret; CoreWindowStack *stack; D_MAGIC_ASSERT( obj, CoreWindow ); D_ASSERT( obj->stack != NULL ); stack = obj->stack; /* Lock the window stack. */ if (dfb_windowstack_lock( stack )) return DFB_FUSION; /* Never call WM after destroying the window. */ if (DFB_WINDOW_DESTROYED( obj )) { dfb_windowstack_unlock( stack ); return DFB_DESTROYED; } /* Let the window manager do its work. */ ret = dfb_wm_restack_window( obj, relative, relation ); /* Unlock the window stack. */ dfb_windowstack_unlock( stack ); return ret; }
static DFBResult IDirectFBWindow_GetProperty( IDirectFBWindow *thiz, const char *key, void **ret_value ) { DFBResult ret; DIRECT_INTERFACE_GET_DATA(IDirectFBWindow) D_DEBUG_AT( IDirectFB_Window, "%s()\n", __FUNCTION__ ); if (data->destroyed) return DFB_DESTROYED; if (!key) return DFB_INVARG; if (!ret_value) return DFB_INVARG; dfb_windowstack_lock( data->window->stack ); ret = dfb_wm_get_window_property( data->window->stack, data->window, key, ret_value ); dfb_windowstack_unlock( data->window->stack ); return ret; }
static DFBResult IDirectFBWindow_Resize( IDirectFBWindow *thiz, int width, int height ) { DFBResult ret; DFBInsets insets; DIRECT_INTERFACE_GET_DATA(IDirectFBWindow) D_DEBUG_AT( IDirectFB_Window, "%s()\n", __FUNCTION__ ); if (data->destroyed) return DFB_DESTROYED; if (width < 1 || width > 4096 || height < 1 || height > 4096) return DFB_INVARG; dfb_windowstack_lock( data->window->stack ); dfb_wm_get_insets( data->window->stack, data->window, &insets ); width += insets.l+insets.r; height += insets.t+insets.b; ret = dfb_window_resize( data->window, width, height ); dfb_windowstack_unlock( data->window->stack ); return ret; }
static DFBResult IDirectFBWindow_GetSize( IDirectFBWindow *thiz, int *width, int *height ) { DFBInsets insets; DIRECT_INTERFACE_GET_DATA(IDirectFBWindow) D_DEBUG_AT( IDirectFB_Window, "%s()\n", __FUNCTION__ ); if (data->destroyed) return DFB_DESTROYED; if (!width && !height) return DFB_INVARG; dfb_windowstack_lock( data->window->stack ); dfb_wm_get_insets( data->window->stack, data->window, &insets ); dfb_windowstack_unlock( data->window->stack ); if (width) *width = data->window->config.bounds.w-insets.l-insets.r; if (height) *height = data->window->config.bounds.h-insets.t-insets.b; return DFB_OK; }
static DFBResult IDirectFBWindow_GetPosition( IDirectFBWindow *thiz, int *x, int *y ) { DFBInsets insets; DIRECT_INTERFACE_GET_DATA(IDirectFBWindow) D_DEBUG_AT( IDirectFB_Window, "%s()\n", __FUNCTION__ ); if (data->destroyed) return DFB_DESTROYED; if (!x && !y) return DFB_INVARG; dfb_windowstack_lock( data->window->stack ); dfb_wm_get_insets( data->window->stack, data->window, &insets ); dfb_windowstack_unlock( data->window->stack ); if (x) *x = data->window->config.bounds.x-insets.l; if (y) *y = data->window->config.bounds.y-insets.t; return DFB_OK; }
DFBResult IWindow_Real::BeginUpdates( const DFBRegion *update ) { DFBResult ret; D_DEBUG_AT( Core_Window, "IWindow_Real::%s( %p )\n", __FUNCTION__, obj ); D_MAGIC_ASSERT( obj, CoreWindow ); dfb_windowstack_lock( obj->stack ); ret = dfb_wm_begin_updates( obj, update ); dfb_windowstack_unlock( obj->stack ); return ret; }
DFBResult IWindow_Real::SetCursorPosition( int x, int y ) { DFBResult ret; D_DEBUG_AT( Core_Window, "IWindow_Real::%s( %p )\n", __FUNCTION__, obj ); D_MAGIC_ASSERT( obj, CoreWindow ); dfb_windowstack_lock( obj->stack ); ret = dfb_wm_set_cursor_position( obj, x, y ); dfb_windowstack_unlock( obj->stack ); return ret; }
DFBResult IWindow_Real::Resize( int width, int height ) { DFBResult ret; DFBInsets insets; D_DEBUG_AT( Core_Window, "IWindow_Real::%s( %p )\n", __FUNCTION__, obj ); D_MAGIC_ASSERT( obj, CoreWindow ); dfb_windowstack_lock( obj->stack ); dfb_wm_get_insets( obj->stack, obj, &insets ); ret = dfb_window_resize( obj, width + insets.l+insets.r, height + insets.t+insets.b ); dfb_windowstack_unlock( obj->stack ); return ret; }
DFBResult IWindow_Real::MoveTo( int x, int y ) { DFBResult ret; DFBInsets insets; D_DEBUG_AT( Core_Window, "IWindow_Real::%s( %p )\n", __FUNCTION__, obj ); D_MAGIC_ASSERT( obj, CoreWindow ); dfb_windowstack_lock( obj->stack ); dfb_wm_get_insets( obj->stack, obj, &insets ); ret = dfb_window_move( obj, x + insets.l, y + insets.t, false ); dfb_windowstack_unlock( obj->stack ); return ret; }
static DFBResult IDirectFBWindow_MoveTo( IDirectFBWindow *thiz, int x, int y ) { DFBResult ret; DFBInsets insets; DIRECT_INTERFACE_GET_DATA(IDirectFBWindow) D_DEBUG_AT( IDirectFB_Window, "%s()\n", __FUNCTION__ ); if (data->destroyed) return DFB_DESTROYED; dfb_windowstack_lock( data->window->stack ); dfb_wm_get_insets( data->window->stack, data->window, &insets ); x += insets.l; y += insets.t; ret = dfb_window_move( data->window, x, y, false ); dfb_windowstack_unlock( data->window->stack ); return ret; }
static bool context_callback( FusionObjectPool *pool, FusionObject *object, void *ctx ) { int refs; DirectResult ret; UniqueContext *context = (UniqueContext*) object; if (object->state != FOS_ACTIVE) return true; ret = fusion_ref_stat( &object->ref, &refs ); if (ret) { printf( "Fusion error %d!\n", ret ); return false; } printf( "\n" "-------[ Contexts ]-------\n" "Reference . Refs Windows\n" "--------------------------\n" ); #if FUSION_BUILD_MULTI printf( "0x%08x : ", object->ref.multi.id ); #else printf( "N/A : " ); #endif printf( "%3d ", refs ); printf( "%2d ", fusion_vector_size( &context->windows ) ); printf( "\n" ); ret = dfb_windowstack_lock( context->stack ); if (ret) { D_DERROR( ret, "UniQuE/Dump: Could not lock window stack!\n" ); return true; } if (fusion_vector_has_elements( &context->windows )) { int index; UniqueWindow *window; printf( "\n" "-----------------------------------[ Windows ]------------------------------------\n" ); printf( "Reference . Refs X Y Width Height Opacity ID Flags\n" ); printf( "----------------------------------------------------------------------------------\n" ); fusion_vector_foreach_reverse( window, index, context->windows ) window_callback( window ); } dfb_windowstack_unlock( context->stack ); printf( "\n" ); return true; }