Hi, Thank you. It's done now. Is this OK? Mike Kestner wrote: On Thu, 2003-08-07 at 03:11, Maxx Cao wrote:Corrections made according to Mike's comments. I can't hook this to "popup_menu" event, because e-text is not inherited from GtkWidget. Please review this new one. Thank you!A few more tiny things: case GDK_KEY_PRESS: /* Fall Through */ Move that /* Fall Through */ to the bottom of the case so it's clear control continues into the RELEASE case. + + /* Handle S-F10 key binding here. */ + + if (event->key.keyval == GDK_F10 + && (event->key.state&GDK_SHIFT_MASK) Always put spaces before and after operators for more readability. + && 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 = GDK_CURRENT_TIME; As Larry suggested, please copy the time into the event from the original key event. + button->button = 0; + e_text_do_popup (text, button, 0); + return TRUE; + } + case GDK_KEY_RELEASE: + if (text->editing) { GdkEventKey key; gint ret; @@ -2517,6 +2535,22 @@ } 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; Again, spaces before and after operators. + } + + return; +} After you resolve the above issues, go ahead and commit. Thanks again for the patch. -- Best Regards Maxx |
Index: ChangeLog =================================================================== RCS file: /cvs/gnome/gal/ChangeLog,v retrieving revision 1.798 diff -u -r1.798 ChangeLog --- ChangeLog 5 Aug 2003 06:29:32 -0000 1.798 +++ ChangeLog 8 Aug 2003 01:54:43 -0000 @@ -1,3 +1,11 @@ +2003-08-07 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. + 2003-08-05 Gilbert Fang <gilbert fang sun com> * gal/a11y/Makefile.am: eliminate -no-undefined option.(#47322) Index: gal/e-text/e-text.c =================================================================== RCS file: /cvs/gnome/gal/gal/e-text/e-text.c,v retrieving revision 1.145 diff -u -r1.145 e-text.c --- gal/e-text/e-text.c 14 May 2003 00:42:36 -0000 1.145 +++ gal/e-text/e-text.c 8 Aug 2003 01:54:45 -0000 @@ -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 @@ } 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 = GDK_CURRENT_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; @@ -2517,6 +2537,22 @@ } 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, gpointer user_data) @@ -2587,9 +2623,17 @@ 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); }