[PATCH] Move the sidebar to the right for RTL languages

Vratislav Podzimek vpodzime at redhat.com
Mon Feb 24 08:48:25 UTC 2014


On Fri, 2014-02-21 at 20:05 -0500, David Shea wrote:
> ---
>  widgets/src/HubWindow.c        | 36 +++++++++++++++++++++++++++++++-----
>  widgets/src/StandaloneWindow.c | 40 +++++++++++++++++++++++++++++++++++-----
>  2 files changed, 66 insertions(+), 10 deletions(-)
> 
> diff --git a/widgets/src/HubWindow.c b/widgets/src/HubWindow.c
> index 6756a31..b776016 100644
> --- a/widgets/src/HubWindow.c
> +++ b/widgets/src/HubWindow.c
> @@ -100,18 +100,36 @@ static int get_sidebar_height(GtkWidget *window) {
>  
>  /* function to override default drawing to insert sidebar image */
>  static gboolean anaconda_hub_window_on_draw(GtkWidget *win, cairo_t *cr) {
> +    GtkStyleContext *context;
> +    gdouble sidebar_x;
> +    gdouble sidebar_width;
> +
>      /* calls parent class' draw handler */
>      GTK_WIDGET_CLASS(anaconda_hub_window_parent_class)->draw(win,cr);
>  
> -    GtkStyleContext * context = gtk_widget_get_style_context(win);
> +    sidebar_width = get_sidebar_width(win);
> +
> +    /* For RTL languages, move the sidebar to the right edge */
> +    if (gtk_get_locale_direction() == GTK_TEXT_DIR_LTR)
> +    {
> +        sidebar_x = 0;
> +    }
> +    else
> +    {
> +        GtkAllocation allocation;
> +        gtk_widget_get_allocation(win, &allocation);
> +        sidebar_x = allocation.width - sidebar_width;
> +    }
> +
> +    context = gtk_widget_get_style_context(win);
>      gtk_style_context_save (context);
>  
>      gtk_style_context_add_class(context, "logo-sidebar");
> -    gtk_render_background(context, cr, 0, 0, get_sidebar_width(win), get_sidebar_height(win));
> +    gtk_render_background(context, cr, sidebar_x, 0, sidebar_width, get_sidebar_height(win));
>      gtk_style_context_remove_class(context, "logo-sidebar");
>  
>      gtk_style_context_add_class(context, "logo");
> -    gtk_render_background(context, cr, 0, 0, get_sidebar_width(win), get_sidebar_height(win));
> +    gtk_render_background(context, cr, sidebar_x, 0, sidebar_width, get_sidebar_height(win));
>      gtk_style_context_remove_class(context, "logo");
>  
>      gtk_style_context_restore (context);
> @@ -119,7 +137,7 @@ static gboolean anaconda_hub_window_on_draw(GtkWidget *win, cairo_t *cr) {
>      return TRUE; /* TRUE to avoid default draw handler */
>  }
>  
> -/* Move base window content appropriate amount of space to the right to make room for sidebar */
> +/* Move base window content appropriate amount of space to make room for sidebar */
>  static void anaconda_hub_window_size_allocate (GtkWidget *window, GtkAllocation *allocation) {
>      GtkAllocation child_allocation;
>      GtkWidget *child;
> @@ -127,11 +145,19 @@ static void anaconda_hub_window_size_allocate (GtkWidget *window, GtkAllocation
>  
>      gtk_widget_set_allocation(window, allocation);
>      sidebar_width = get_sidebar_width(window);
> -    child_allocation.x = allocation->x+sidebar_width;
>      child_allocation.y = allocation->y;
>      child_allocation.width = allocation->width-sidebar_width;
>      child_allocation.height = allocation->height;
>  
> +    if (gtk_get_locale_direction() == GTK_TEXT_DIR_LTR)
> +    {
> +        child_allocation.x = allocation->x+sidebar_width;
> +    }
> +    else
> +    {
> +        child_allocation.x = allocation->x;
> +    }
I remember guys pointing out to me that we don't use curly brackets
around one-line blocks in our C code. It wasn't true consistently by
that time and I'm not sure if it has changed in the meantime, but I
think you can drop them in cases like this one.

Otherwise this looks good to me.

-- 
Vratislav Podzimek

Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic



More information about the anaconda-patches mailing list