Mercurial > pidgin
changeset 24467:558523cebd10
A patch from db42 to fix right-to-left text in tooltips.
Fixes #1977
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Mon, 17 Nov 2008 19:09:37 +0000 |
parents | de3b12b70b5f |
children | e5efa83aa6d2 7cc66981f029 |
files | pidgin/gtkblist.c |
diffstat | 1 files changed, 19 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/pidgin/gtkblist.c Mon Nov 17 13:28:32 2008 +0000 +++ b/pidgin/gtkblist.c Mon Nov 17 19:09:37 2008 +0000 @@ -2979,6 +2979,22 @@ pidgin_tooltip_destroy(); } +static void +pidgin_blist_align_tooltip(struct tooltip_data *td, GtkWidget *widget) +{ + GtkTextDirection dir = gtk_widget_get_direction(widget); + + if (dir == GTK_TEXT_DIR_RTL) + { + char* layout_name = purple_markup_strip_html(pango_layout_get_text(td->name_layout)); + PangoDirection dir = pango_find_base_dir(layout_name, -1); + if (dir == PANGO_DIRECTION_RTL || dir == PANGO_DIRECTION_NEUTRAL) + pango_layout_set_alignment(td->name_layout, PANGO_ALIGN_RIGHT); + g_free(layout_name); + pango_layout_set_alignment(td->layout, PANGO_ALIGN_RIGHT); + } +} + static gboolean pidgin_blist_create_tooltip_for_node(GtkWidget *widget, gpointer data, int *w, int *h) { @@ -2998,11 +3014,13 @@ if (PURPLE_BLIST_NODE_IS_CHAT(node) || PURPLE_BLIST_NODE_IS_BUDDY(node)) { struct tooltip_data *td = create_tip_for_node(node, TRUE); + pidgin_blist_align_tooltip(td, gtkblist->tipwindow); gtkblist->tooltipdata = g_list_append(gtkblist->tooltipdata, td); } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { PurpleGroup *group = (PurpleGroup*)node; GSList *accounts; struct tooltip_data *td = create_tip_for_node(node, TRUE); + pidgin_blist_align_tooltip(td, gtkblist->tipwindow); gtkblist->tooltipdata = g_list_append(gtkblist->tooltipdata, td); /* Accounts with buddies in group */ @@ -3022,6 +3040,7 @@ { if(PURPLE_BLIST_NODE_IS_BUDDY(child) && buddy_is_displayable((PurpleBuddy*)child)) { struct tooltip_data *td = create_tip_for_node(child, (b == (PurpleBuddy*)child)); + pidgin_blist_align_tooltip(td, gtkblist->tipwindow); if (b == (PurpleBuddy *)child) { gtkblist->tooltipdata = g_list_prepend(gtkblist->tooltipdata, td); } else {