gimp r25273 - in trunk: . libgimpwidgets
- From: neo svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r25273 - in trunk: . libgimpwidgets
- Date: Fri, 28 Mar 2008 11:02:37 +0000 (GMT)
Author: neo
Date: Fri Mar 28 11:02:37 2008
New Revision: 25273
URL: http://svn.gnome.org/viewvc/gimp?rev=25273&view=rev
Log:
2008-03-28 Sven Neumann <sven gimp org>
* libgimpwidgets/gimphelpui.c: show a custom tooltip for menu
items and inform the user the she can get more help by pressing F1.
Modified:
trunk/ChangeLog
trunk/libgimpwidgets/gimphelpui.c
Modified: trunk/libgimpwidgets/gimphelpui.c
==============================================================================
--- trunk/libgimpwidgets/gimphelpui.c (original)
+++ trunk/libgimpwidgets/gimphelpui.c Fri Mar 28 11:02:37 2008
@@ -25,12 +25,11 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
-#include "gimpwidgetstypes.h"
-
-#include "gimpdialog.h"
-#include "gimphelpui.h"
+#include "gimpwidgets.h"
#include "gimpwidgets-private.h"
+#include "libgimp/libgimp-intl.h"
+
typedef enum
{
@@ -46,21 +45,29 @@
/* local function prototypes */
-static const gchar * gimp_help_get_help_data (GtkWidget *widget,
- GtkWidget **help_widget,
- gpointer *ret_data);
-static gboolean gimp_help_callback (GtkWidget *widget,
- GimpWidgetHelpType help_type,
- GimpHelpFunc help_func);
-
-static gboolean gimp_context_help_idle_start (gpointer widget);
-static gboolean gimp_context_help_button_press (GtkWidget *widget,
- GdkEventButton *bevent,
- gpointer data);
-static gboolean gimp_context_help_key_press (GtkWidget *widget,
- GdkEventKey *kevent,
- gpointer data);
-static gboolean gimp_context_help_idle_show_help (gpointer data);
+static const gchar * gimp_help_get_help_data (GtkWidget *widget,
+ GtkWidget **help_widget,
+ gpointer *ret_data);
+static gboolean gimp_help_callback (GtkWidget *widget,
+ GimpWidgetHelpType help_type,
+ GimpHelpFunc help_func);
+
+static void gimp_help_menu_item_set_tooltip (GtkWidget *widget,
+ const gchar *tooltip,
+ const gchar *help_id);
+static gboolean gimp_help_menu_item_query_tooltip (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_mode,
+ GtkTooltip *tooltip);
+static gboolean gimp_context_help_idle_start (gpointer widget);
+static gboolean gimp_context_help_button_press (GtkWidget *widget,
+ GdkEventButton *bevent,
+ gpointer data);
+static gboolean gimp_context_help_key_press (GtkWidget *widget,
+ GdkEventKey *kevent,
+ gpointer data);
+static gboolean gimp_context_help_idle_show_help (gpointer data);
/* public functions */
@@ -204,7 +211,12 @@
g_return_if_fail (GTK_IS_WIDGET (widget));
if (tooltips_enabled)
- gtk_widget_set_tooltip_text (widget, tooltip);
+ {
+ gtk_widget_set_tooltip_text (widget, tooltip);
+
+ if (GTK_IS_MENU_ITEM (widget))
+ gimp_help_menu_item_set_tooltip (widget, tooltip, help_id);
+ }
g_object_set_qdata (G_OBJECT (widget), GIMP_HELP_ID, (gpointer) help_id);
}
@@ -229,7 +241,12 @@
g_return_if_fail (GTK_IS_WIDGET (widget));
if (tooltips_enabled)
- gtk_widget_set_tooltip_markup (widget, tooltip);
+ {
+ gtk_widget_set_tooltip_markup (widget, tooltip);
+
+ if (GTK_IS_MENU_ITEM (widget))
+ gimp_help_menu_item_set_tooltip (widget, tooltip, help_id);
+ }
g_object_set_qdata (G_OBJECT (widget), GIMP_HELP_ID, (gpointer) help_id);
}
@@ -286,8 +303,8 @@
GtkWidget **help_widget,
gpointer *ret_data)
{
- gchar *help_id = NULL;
- gpointer help_data = NULL;
+ const gchar *help_id = NULL;
+ gpointer help_data = NULL;
for (; widget; widget = widget->parent)
{
@@ -302,7 +319,7 @@
if (ret_data)
*ret_data = help_data;
- return (const gchar *) help_id;
+ return help_id;
}
}
@@ -325,13 +342,8 @@
case GIMP_WIDGET_HELP_TYPE_HELP:
if (help_func)
{
- gchar *help_id = NULL;
- gpointer help_data = NULL;
-
- help_id = g_object_get_qdata (G_OBJECT (widget), GIMP_HELP_ID);
- help_data = g_object_get_data (G_OBJECT (widget), "gimp-help-data");
-
- (* help_func) (help_id, help_data);
+ help_func (g_object_get_qdata (G_OBJECT (widget), GIMP_HELP_ID),
+ g_object_get_data (G_OBJECT (widget), "gimp-help-data"));
}
return TRUE;
@@ -346,6 +358,79 @@
return FALSE;
}
+static void
+gimp_help_menu_item_set_tooltip (GtkWidget *widget,
+ const gchar *tooltip,
+ const gchar *help_id)
+{
+ g_return_if_fail (GTK_IS_MENU_ITEM (widget));
+
+ if (tooltip && help_id)
+ {
+ g_object_set (widget, "has-tooltip", TRUE, NULL);
+
+ g_signal_connect (widget, "query-tooltip",
+ G_CALLBACK (gimp_help_menu_item_query_tooltip),
+ NULL);
+ }
+ else if (! tooltip)
+ {
+ g_object_set (widget, "has-tooltip", FALSE, NULL);
+
+ g_signal_handlers_disconnect_by_func (widget,
+ gimp_help_menu_item_query_tooltip,
+ NULL);
+ }
+}
+
+static gboolean
+gimp_help_menu_item_query_tooltip (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_mode,
+ GtkTooltip *tooltip)
+{
+ GtkWidget *vbox;
+ GtkWidget *label;
+ gchar *text;
+ gboolean use_markup = TRUE;
+
+ text = gtk_widget_get_tooltip_markup (widget);
+
+ if (! text)
+ {
+ text = gtk_widget_get_tooltip_text (widget);
+ use_markup = FALSE;
+ }
+
+ if (! text)
+ return FALSE;
+
+ vbox = gtk_vbox_new (FALSE, 12);
+
+ label = gtk_label_new (text);
+ gtk_label_set_use_markup (GTK_LABEL (label), use_markup);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
+ gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
+ gtk_widget_show (label);
+
+ g_free (text);
+
+ label = gtk_label_new (_("Press F1 for more help"));
+ gimp_label_set_attributes (GTK_LABEL (label),
+ PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC,
+ -1);
+ gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.0);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ gtk_tooltip_set_custom (tooltip, vbox);
+
+ return TRUE;
+}
+
+
/* Do all the actual context help calls in idle functions and check for
* some widget holding a grab before starting the query because strange
* things happen if (1) the help browser pops up while the query has
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]