added "show-tooltip" and "hide-tooltip" signals. Connect to each menu
2006-03-09 Michael Natterer <mitch@gimp.org> * app/widgets/gimpuimanager.[ch]: added "show-tooltip" and "hide-tooltip" signals. Connect to each menu item's enter-notify-event and leave-notify-event. On enter, emit show-tooltip, on leave emit hide-tooltip. * app/display/gimpdisplayshell.c: connect to the menubar ui manager's show-tooltip and hide-tooltip signals and show the tip in the display's status bar.
This commit is contained in:

committed by
Michael Natterer

parent
578de6bb49
commit
6a01bb2306
@ -52,58 +52,66 @@ enum
|
||||
enum
|
||||
{
|
||||
UPDATE,
|
||||
SHOW_TOOLTIP,
|
||||
HIDE_TOOLTIP,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
|
||||
static GObject * gimp_ui_manager_constructor (GType type,
|
||||
guint n_params,
|
||||
GObjectConstructParam *params);
|
||||
static void gimp_ui_manager_dispose (GObject *object);
|
||||
static void gimp_ui_manager_finalize (GObject *object);
|
||||
static void gimp_ui_manager_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gimp_ui_manager_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gimp_ui_manager_connect_proxy (GtkUIManager *manager,
|
||||
GtkAction *action,
|
||||
GtkWidget *proxy);
|
||||
static GtkWidget * gimp_ui_manager_get_widget (GtkUIManager *manager,
|
||||
const gchar *path);
|
||||
static GtkAction * gimp_ui_manager_get_action (GtkUIManager *manager,
|
||||
const gchar *path);
|
||||
static void gimp_ui_manager_real_update (GimpUIManager *manager,
|
||||
gpointer update_data);
|
||||
static GObject * gimp_ui_manager_constructor (GType type,
|
||||
guint n_params,
|
||||
GObjectConstructParam *params);
|
||||
static void gimp_ui_manager_dispose (GObject *object);
|
||||
static void gimp_ui_manager_finalize (GObject *object);
|
||||
static void gimp_ui_manager_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gimp_ui_manager_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gimp_ui_manager_connect_proxy (GtkUIManager *manager,
|
||||
GtkAction *action,
|
||||
GtkWidget *proxy);
|
||||
static GtkWidget * gimp_ui_manager_get_widget (GtkUIManager *manager,
|
||||
const gchar *path);
|
||||
static GtkAction * gimp_ui_manager_get_action (GtkUIManager *manager,
|
||||
const gchar *path);
|
||||
static void gimp_ui_manager_real_update (GimpUIManager *manager,
|
||||
gpointer update_data);
|
||||
static GimpUIManagerUIEntry *
|
||||
gimp_ui_manager_entry_get (GimpUIManager *manager,
|
||||
const gchar *ui_path);
|
||||
static gboolean gimp_ui_manager_entry_load (GimpUIManager *manager,
|
||||
GimpUIManagerUIEntry *entry,
|
||||
GError **error);
|
||||
gimp_ui_manager_entry_get (GimpUIManager *manager,
|
||||
const gchar *ui_path);
|
||||
static gboolean gimp_ui_manager_entry_load (GimpUIManager *manager,
|
||||
GimpUIManagerUIEntry *entry,
|
||||
GError **error);
|
||||
static GimpUIManagerUIEntry *
|
||||
gimp_ui_manager_entry_ensure (GimpUIManager *manager,
|
||||
const gchar *path);
|
||||
static void gimp_ui_manager_menu_position (GtkMenu *menu,
|
||||
gint *x,
|
||||
gint *y,
|
||||
gpointer data);
|
||||
static void gimp_ui_manager_menu_pos (GtkMenu *menu,
|
||||
gint *x,
|
||||
gint *y,
|
||||
gboolean *push_in,
|
||||
gpointer data);
|
||||
gimp_ui_manager_entry_ensure (GimpUIManager *manager,
|
||||
const gchar *path);
|
||||
static void gimp_ui_manager_menu_position (GtkMenu *menu,
|
||||
gint *x,
|
||||
gint *y,
|
||||
gpointer data);
|
||||
static void gimp_ui_manager_menu_pos (GtkMenu *menu,
|
||||
gint *x,
|
||||
gint *y,
|
||||
gboolean *push_in,
|
||||
gpointer data);
|
||||
static void
|
||||
gimp_ui_manager_delete_popdown_data (GtkObject *object,
|
||||
GimpUIManager *manager);
|
||||
static void gimp_ui_manager_item_realize (GtkWidget *widget,
|
||||
GimpUIManager *manager);
|
||||
static gboolean gimp_ui_manager_item_key_press (GtkWidget *widget,
|
||||
GdkEventKey *kevent,
|
||||
GimpUIManager *manager);
|
||||
gimp_ui_manager_delete_popdown_data (GtkObject *object,
|
||||
GimpUIManager *manager);
|
||||
static void gimp_ui_manager_item_realize (GtkWidget *widget,
|
||||
GimpUIManager *manager);
|
||||
static gboolean gimp_ui_manager_menu_item_enter (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
GimpUIManager *manager);
|
||||
static gboolean gimp_ui_manager_menu_item_leave (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
GimpUIManager *manager);
|
||||
static gboolean gimp_ui_manager_item_key_press (GtkWidget *widget,
|
||||
GdkEventKey *kevent,
|
||||
GimpUIManager *manager);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpUIManager, gimp_ui_manager, GTK_TYPE_UI_MANAGER);
|
||||
@ -141,6 +149,26 @@ gimp_ui_manager_class_init (GimpUIManagerClass *klass)
|
||||
G_TYPE_NONE, 1,
|
||||
G_TYPE_POINTER);
|
||||
|
||||
manager_signals[SHOW_TOOLTIP] =
|
||||
g_signal_new ("show-tooltip",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GimpUIManagerClass, show_tooltip),
|
||||
NULL, NULL,
|
||||
gimp_marshal_VOID__STRING,
|
||||
G_TYPE_NONE, 1,
|
||||
G_TYPE_STRING);
|
||||
|
||||
manager_signals[HIDE_TOOLTIP] =
|
||||
g_signal_new ("hide-tooltip",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GimpUIManagerClass, hide_tooltip),
|
||||
NULL, NULL,
|
||||
gimp_marshal_VOID__VOID,
|
||||
G_TYPE_NONE, 0,
|
||||
G_TYPE_NONE);
|
||||
|
||||
g_object_class_install_property (object_class, PROP_NAME,
|
||||
g_param_spec_string ("name",
|
||||
NULL, NULL,
|
||||
@ -801,6 +829,13 @@ gimp_ui_manager_item_realize (GtkWidget *widget,
|
||||
gimp_ui_manager_item_realize,
|
||||
manager);
|
||||
|
||||
g_signal_connect (widget, "enter-notify-event",
|
||||
G_CALLBACK (gimp_ui_manager_menu_item_enter),
|
||||
manager);
|
||||
g_signal_connect (widget, "leave-notify-event",
|
||||
G_CALLBACK (gimp_ui_manager_menu_item_leave),
|
||||
manager);
|
||||
|
||||
if (GTK_IS_MENU_SHELL (widget->parent))
|
||||
{
|
||||
static GQuark quark_key_press_connected = 0;
|
||||
@ -830,6 +865,40 @@ gimp_ui_manager_item_realize (GtkWidget *widget,
|
||||
GIMP_HELP_ID));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_ui_manager_menu_item_enter (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
GimpUIManager *manager)
|
||||
{
|
||||
GtkAction *action = g_object_get_data (G_OBJECT (widget), "gtk-action");
|
||||
|
||||
if (action)
|
||||
{
|
||||
gchar *tooltip;
|
||||
|
||||
g_object_get (action, "tooltip", &tooltip, NULL);
|
||||
|
||||
if (tooltip)
|
||||
{
|
||||
g_signal_emit (manager, manager_signals[SHOW_TOOLTIP], 0,
|
||||
tooltip);
|
||||
g_free (tooltip);
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_ui_manager_menu_item_leave (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
GimpUIManager *manager)
|
||||
{
|
||||
g_signal_emit (manager, manager_signals[HIDE_TOOLTIP], 0);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_ui_manager_item_key_press (GtkWidget *widget,
|
||||
GdkEventKey *kevent,
|
||||
|
Reference in New Issue
Block a user