[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