Mercurial > pidgin.yaz
changeset 21946:ddd53c9174bc
Add tooltips to the plugin window. I did it mostly to test the new tooltip
functions. They seem to be working OK, and pretty simple to use. But I will
be happy to listen to comments/suggestions etc.
I am thrusting this tooltip in the plugin window down everyone's throat.
But feel totally free to vomit it out ;)
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Fri, 28 Dec 2007 01:57:17 +0000 |
parents | 3fc5862b834a |
children | c6b408d16011 |
files | pidgin/gtkplugin.c |
diffstat | 1 files changed, 57 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/pidgin/gtkplugin.c Fri Dec 28 01:38:41 2007 +0000 +++ b/pidgin/gtkplugin.c Fri Dec 28 01:57:17 2007 +0000 @@ -31,6 +31,7 @@ #include "debug.h" #include "prefs.h" #include "request.h" +#include "pidgintooltip.h" #include <string.h> @@ -531,6 +532,58 @@ plugin_dialog_response_cb(dialog, PIDGIN_RESPONSE_CONFIGURE, sel); } +static gboolean +pidgin_plugins_paint_tooltip(GtkWidget *tipwindow, gpointer data) +{ + PangoLayout *layout = g_object_get_data(G_OBJECT(tipwindow), "tooltip-plugin"); + gtk_paint_layout(tipwindow->style, tipwindow->window, GTK_STATE_NORMAL, FALSE, + NULL, tipwindow, "tooltip", + 6, 6, layout); + return TRUE; +} + +static gboolean +pidgin_plugins_create_tooltip(GtkWidget *tipwindow, GtkTreePath *path, + gpointer data, int *w, int *h) +{ + GtkTreeIter iter; + GtkTreeView *treeview = GTK_TREE_VIEW(data); + PurplePlugin *plugin = NULL; + GtkTreeModel *model = gtk_tree_view_get_model(treeview); + PangoLayout *layout; + int width, height; + char *markup, *name, *desc, *author; + + if (!gtk_tree_model_get_iter(model, &iter, path)) + return FALSE; + + gtk_tree_model_get(model, &iter, 2, &plugin, -1); + + markup = g_strdup_printf("<span size='x-large' weight='bold'>%s</span>\n<b>Description:</b> %s\n<b>Author:</b> %s", + name = g_markup_escape_text(purple_plugin_get_name(plugin), -1), + desc = g_markup_escape_text(purple_plugin_get_description(plugin), -1), + author = g_markup_escape_text(purple_plugin_get_author(plugin), -1)); + + layout = gtk_widget_create_pango_layout(tipwindow, NULL); + pango_layout_set_markup(layout, markup, -1); + pango_layout_set_wrap(layout, PANGO_WRAP_WORD); + pango_layout_set_width(layout, 600000); + pango_layout_get_size(layout, &width, &height); + g_object_set_data_full(G_OBJECT(tipwindow), "tooltip-plugin", layout, g_object_unref); + + if (w) + *w = PANGO_PIXELS(width) + 12; + if (h) + *h = PANGO_PIXELS(height) + 12; + + g_free(markup); + g_free(name); + g_free(desc); + g_free(author); + + return TRUE; +} + void pidgin_plugin_dialog_show() { GtkWidget *sw; @@ -613,6 +666,10 @@ gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(event_view), pidgin_tree_view_search_equal_func, NULL, NULL); + pidgin_tooltip_setup_for_treeview(event_view, event_view, + pidgin_plugins_create_tooltip, + pidgin_plugins_paint_tooltip); + expander = gtk_expander_new(_("<b>Plugin Details</b>")); gtk_expander_set_use_markup(GTK_EXPANDER(expander), TRUE); plugin_details = gtk_label_new(NULL);