filter S-F10 key binding, and show popup menu. (popup_menu_placement_cb):

2003-08-10  Maxx Cao  <maxx.cao@sun.com>

       * gal/e-text/e-text.c (e_text_event): filter S-F10 key binding, and
       show popup menu.
       (popup_menu_placement_cb): function added to adjust popup menu position.+       (popup_targets_received): show popup menu in different ways, according
       to whether it's invoked by mouse click or key binding.

svn path=/trunk/; revision=22204
This commit is contained in:
Maxx Cao
2003-08-13 06:00:20 +00:00
committed by Yuedong Du
parent bb2401c0ce
commit a8ef795eb9

View File

@ -43,6 +43,7 @@
#include <string.h>
#include <glib-object.h>
#include <gdk/gdkx.h> /* for BlackPixel */
#include <gdk/gdkkeysyms.h>
#include <gtk/gtkclipboard.h>
#include <gtk/gtkmain.h>
#include <gtk/gtkselection.h>
@ -2146,8 +2147,27 @@ e_text_event (GnomeCanvasItem *item, GdkEvent *event)
}
return_val = 0;
break;
case GDK_KEY_PRESS: /* Fall Through */
case GDK_KEY_PRESS:
/* Handle S-F10 key binding here. */
if (event->key.keyval == GDK_F10
&& (event->key.state & GDK_SHIFT_MASK)
&& text->handle_popup ){
/* Simulate a GdkEventButton here, so that we can call e_text_do_popup directly */
GdkEventButton *button = gdk_event_new (GDK_BUTTON_PRESS);
button->time = event->key.time;
button->button = 0;
e_text_do_popup (text, button, 0);
return TRUE;
}
/* Fall Through */
case GDK_KEY_RELEASE:
if (text->editing) {
GdkEventKey key;
gint ret;
@ -2516,6 +2536,22 @@ popup_menu_detach (GtkWidget *attach_widget,
{
}
static void
popup_menu_placement_cb (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data)
{
EText *text = E_TEXT(user_data);
GnomeCanvasItem *item = &text->item;
GnomeCanvas *parent = item->canvas;
if (parent){
gdk_window_get_origin (((GtkWidget*) parent)->window, x, y);
*x += item->x1 + text->width / 2;
*y += item->y1 + text->height / 2;
}
return;
}
static void
popup_targets_received (GtkClipboard *clipboard,
GtkSelectionData *data,
@ -2587,9 +2623,17 @@ popup_targets_received (GtkClipboard *clipboard,
button, position,
popup_menu);
gtk_menu_popup (GTK_MENU (popup_menu), NULL, NULL,
NULL, NULL,
button->button, GDK_CURRENT_TIME);
/* If invoked by S-F10 key binding, button will be 0. */
if (button->button == 0){
gtk_menu_popup (GTK_MENU (popup_menu), NULL, NULL,
popup_menu_placement_cb, (gpointer)text,
button->button, GDK_CURRENT_TIME);
gdk_event_free (button);
} else {
gtk_menu_popup (GTK_MENU (popup_menu), NULL, NULL,
NULL, NULL,
button->button, GDK_CURRENT_TIME);
}
g_object_unref (text);
}