[evolution-patches] [Fwd: Re: Resubmit patch for bug 45631, "activate popup menu in mail composer's to/cc"]




--
Best Regards
Maxx

--- Begin Message ---
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);
 }

--- End Message ---


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]