[Geany-Devel] [PATCH geany] gtkcompat: Add gtk_widget_{set_can_default, get_allocation}

Thomas Martitz thomas.martitz at xxxxx
Fri Apr 5 08:39:03 UTC 2013


Am 05.04.2013 08:58, schrieb Quentin Glidic:
> From: Quentin Glidic <sardemff7+git at sardemff7.net>
>
> Signed-off-by: Quentin Glidic <sardemff7+git at sardemff7.net>
> ---
>   src/gtkcompat.h | 6 ++++++
>   1 file changed, 6 insertions(+)
>
> diff --git a/src/gtkcompat.h b/src/gtkcompat.h
> index ca1c187..7e0276c 100644
> --- a/src/gtkcompat.h
> +++ b/src/gtkcompat.h
> @@ -92,6 +92,12 @@ G_BEGIN_DECLS
>   		compat_widget_set_flag((widget), GTK_NO_WINDOW, !(has_window))
>   #	define gtk_widget_set_can_focus(widget, can_focus) \
>   		compat_widget_set_flag((widget), GTK_CAN_FOCUS, (can_focus))
> +#	define gtk_widget_set_can_default(widget, can_default) \
> +		compat_widget_set_flag((widget), GTK_CAN_DEFAULT, (can_default))
> +#	define gtk_widget_get_allocation(widget, alloc) \
> +		do { \
> +			(alloc) = (((GtkWidget *) (widget))->allocation
> +		} while (0)
>   #endif
>   #if ! GTK_CHECK_VERSION(2, 20, 0)
>   #	define gtk_widget_get_mapped(widget)	GTK_WIDGET_MAPPED(widget)

This isn't right. alloc is a pointer to caller-provided GtkAllocation. 
If this were a function (inline or not) the pointer would point to 
something else, but that doesn't affect the caller-provided 
GtkAllocation which is supposed to be initialized.
Since this is a macro I expect it to not even compile (havent tried 
though). You're calling it in a later patch ("addons: Fix GTK+3 
support") like this:

gtk_widget_get_allocation(widget, &allocation);

The macro would expand to:

..
(&allocation) = (((GtkWidget *) (widget))->allocation
..

That isn't valid C.

This should be correct, as it copies the contents over to the caller-provided GtkAllocation:
*(alloc) = *((GtkAllocation *) ((((GtkWidget *) (widget))->allocation));
or:
mempcy(alloc, ((GtkWidget *) (widget))->allocation, sizeof(GtkAllocation));


Best regards



More information about the Devel mailing list