copied some code from gtk+/gtk/gtkmenubar.c:window_key_press_handler()

2002-05-24  Michael Natterer  <mitch@gimp.org>

	* app/display/gimpdisplayshell-callbacks.c: copied some code from
	gtk+/gtk/gtkmenubar.c:window_key_press_handler() which pops up the
	<Image> menu on F10 (or whatever is configured in GtkSettings).
This commit is contained in:
Michael Natterer 2002-05-24 02:20:20 +00:00 committed by Michael Natterer
parent e0294ab399
commit 3a7654ec7c
2 changed files with 76 additions and 19 deletions

View File

@ -1,3 +1,9 @@
2002-05-24 Michael Natterer <mitch@gimp.org>
* app/display/gimpdisplayshell-callbacks.c: copied some code from
gtk+/gtk/gtkmenubar.c:window_key_press_handler() which pops up the
<Image> menu on F10 (or whatever is configured in GtkSettings).
2002-05-22 Sven Neumann <sven@gimp.org>
* app/config/gimprc.c (gimp_rc_query): check for GIMP_PARAM_SERIALIZE.

View File

@ -97,6 +97,9 @@ static void gimp_display_shell_origin_menu_position (GtkMenu *menu,
gint *x,
gint *y,
gpointer data);
static void gimp_display_shell_origin_menu_popup (GimpDisplayShell *shell,
guint button,
guint32 time);
GdkEvent * gimp_display_shell_compress_motion (GimpDisplayShell *shell);
@ -110,12 +113,48 @@ gimp_display_shell_events (GtkWidget *widget,
{
Gimp *gimp = shell->gdisp->gimage->gimp;
gboolean set_display = FALSE;
gboolean popup_menu = FALSE;
switch (event->type)
{
GdkEventKey *kevent;
case GDK_KEY_PRESS:
{
gchar *accel = NULL;
g_object_get (G_OBJECT (gtk_widget_get_settings (widget)),
"gtk-menu-bar-accel",
&accel,
NULL);
if (accel)
{
guint keyval = 0;
GdkModifierType mods = 0;
gtk_accelerator_parse (accel, &keyval, &mods);
if (keyval == 0)
g_warning ("Failed to parse menu bar accelerator '%s'\n", accel);
kevent = (GdkEventKey *) event;
/* FIXME this is wrong, needs to be in the global accel resolution
* thing, to properly consider i18n etc., but that probably requires
* AccelGroup changes etc.
*/
if (kevent->keyval == keyval &&
((kevent->state & gtk_accelerator_get_default_mod_mask ()) ==
(mods & gtk_accelerator_get_default_mod_mask ())))
{
popup_menu = TRUE;
}
g_free (accel);
}
}
case GDK_KEY_RELEASE:
kevent = (GdkEventKey *) event;
@ -184,6 +223,12 @@ gimp_display_shell_events (GtkWidget *widget,
shell->gdisp);
}
if (popup_menu)
{
gimp_display_shell_origin_menu_popup (shell, 0, event->key.time);
return TRUE;
}
return FALSE;
}
@ -1192,26 +1237,11 @@ gimp_display_shell_origin_button_press (GtkWidget *widget,
GdkEventButton *event,
GimpDisplayShell *shell)
{
GimpDisplay *gdisp;
gdisp = shell->gdisp;
if (! gdisp->gimage->gimp->busy && event->button == 1)
if (! shell->gdisp->gimage->gimp->busy && event->button == 1)
{
GtkItemFactory *factory;
gint x, y;
factory = GTK_ITEM_FACTORY (shell->item_factory);
gimp_display_shell_origin_menu_position (GTK_MENU (factory->widget),
&x, &y,
widget);
gtk_item_factory_popup_with_data (factory,
gdisp->gimage,
NULL,
x, y,
1, event->time);
gimp_display_shell_origin_menu_popup (shell,
event->button,
event->time);
}
/* Return TRUE to stop signal emission so the button doesn't grab the
@ -1503,6 +1533,27 @@ gimp_display_shell_origin_menu_position (GtkMenu *menu,
*y -= (GTK_WIDGET (menu)->allocation.height);
}
static void
gimp_display_shell_origin_menu_popup (GimpDisplayShell *shell,
guint button,
guint32 time)
{
GtkItemFactory *factory;
gint x, y;
factory = GTK_ITEM_FACTORY (shell->item_factory);
gimp_display_shell_origin_menu_position (GTK_MENU (factory->widget),
&x, &y,
shell->origin);
gtk_item_factory_popup_with_data (factory,
shell->gdisp->gimage,
NULL,
x, y,
button, time);
}
/* gimp_display_shell_compress_motion:
*
* This function walks the whole GDK event queue seeking motion events