aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/text/e-completion-test.c11
-rw-r--r--widgets/text/e-entry.c19
-rw-r--r--widgets/text/e-entry.h3
-rw-r--r--widgets/text/e-text.c34
-rw-r--r--widgets/text/e-text.h9
5 files changed, 66 insertions, 10 deletions
diff --git a/widgets/text/e-completion-test.c b/widgets/text/e-completion-test.c
index 3172cecb13..f01389363a 100644
--- a/widgets/text/e-completion-test.c
+++ b/widgets/text/e-completion-test.c
@@ -142,6 +142,12 @@ end_dict_search (ECompletion *complete, gpointer user_data)
}
}
+static void
+popup_cb (EEntry *popup, GdkEventButton *ev, gint pos, gpointer user_data)
+{
+ g_print ("popup at pos %d\n", pos);
+}
+
int
main (int argc, gchar **argv)
{
@@ -172,6 +178,11 @@ main (int argc, gchar **argv)
e_entry_enable_completion_full (E_ENTRY (entry), complete, -1, NULL);
e_entry_set_editable (E_ENTRY (entry), TRUE);
+ gtk_signal_connect (GTK_OBJECT (entry),
+ "popup",
+ GTK_SIGNAL_FUNC (popup_cb),
+ NULL);
+
gtk_container_add (GTK_CONTAINER (win), entry);
gtk_widget_show_all (win);
diff --git a/widgets/text/e-entry.c b/widgets/text/e-entry.c
index 8116895e1c..8c0682e370 100644
--- a/widgets/text/e-entry.c
+++ b/widgets/text/e-entry.c
@@ -58,6 +58,7 @@ static GtkObjectClass *parent_class;
enum {
E_ENTRY_CHANGED,
E_ENTRY_ACTIVATE,
+ E_ENTRY_POPUP,
E_ENTRY_LAST_SIGNAL
};
@@ -100,6 +101,7 @@ struct _EEntryPrivate {
guint changed_proxy_tag;
guint activate_proxy_tag;
+ guint popup_proxy_tag;
/* Data related to completions */
ECompletion *completion;
@@ -215,6 +217,12 @@ e_entry_proxy_activate (EText *text, EEntry *entry)
}
static void
+e_entry_proxy_popup (EText *text, GdkEventButton *ev, gint pos, EEntry *entry)
+{
+ gtk_signal_emit (GTK_OBJECT (entry), e_entry_signals [E_ENTRY_POPUP], ev, pos);
+}
+
+static void
e_entry_init (GtkObject *object)
{
EEntry *entry = E_ENTRY (object);
@@ -272,6 +280,10 @@ e_entry_init (GtkObject *object)
"activate",
GTK_SIGNAL_FUNC (e_entry_proxy_activate),
entry);
+ entry->priv->popup_proxy_tag = gtk_signal_connect (GTK_OBJECT (entry->priv->item),
+ "popup",
+ GTK_SIGNAL_FUNC (e_entry_proxy_popup),
+ entry);
entry->priv->completion_delay = 1;
}
@@ -1025,6 +1037,13 @@ e_entry_class_init (GtkObjectClass *object_class)
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
+ e_entry_signals[E_ENTRY_POPUP] = gtk_signal_new ("popup",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (EEntryClass, popup),
+ gtk_marshal_NONE__POINTER_INT,
+ GTK_TYPE_NONE, 2, GTK_TYPE_POINTER, GTK_TYPE_INT);
+
gtk_object_class_add_signals (object_class, e_entry_signals, E_ENTRY_LAST_SIGNAL);
diff --git a/widgets/text/e-entry.h b/widgets/text/e-entry.h
index 8b62ddcc29..64b6fb7875 100644
--- a/widgets/text/e-entry.h
+++ b/widgets/text/e-entry.h
@@ -58,8 +58,9 @@ struct _EEntry {
struct _EEntryClass {
GtkTableClass parent_class;
- void (* changed) (EEntry *entry);
+ void (* changed) (EEntry *entry);
void (* activate) (EEntry *entry);
+ void (* popup) (EEntry *entry, GdkEventButton *ev, gint pos);
};
GtkType e_entry_get_type (void);
diff --git a/widgets/text/e-text.c b/widgets/text/e-text.c
index 84ee92fb17..2f2e968394 100644
--- a/widgets/text/e-text.c
+++ b/widgets/text/e-text.c
@@ -1,8 +1,9 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* EText - Text item for evolution.
- * Copyright (C) 2000 Helix Code, Inc.
+ * Copyright (C) 2000, 2001 Ximian Inc.
*
- * Author: Chris Lahey <clahey@umich.edu>
+ * Author: Chris Lahey <clahey@ximian.com>
+ * Further hacking by Jon Trowbridge <trow@ximian.com>
*
* A majority of code taken from:
*
@@ -37,6 +38,7 @@
enum {
E_TEXT_CHANGED,
E_TEXT_ACTIVATE,
+ E_TEXT_POPUP,
E_TEXT_LAST_SIGNAL
};
@@ -225,6 +227,14 @@ e_text_class_init (ETextClass *klass)
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
+ e_text_signals[E_TEXT_POPUP] =
+ gtk_signal_new ("popup",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (ETextClass, popup),
+ gtk_marshal_NONE__POINTER_INT,
+ GTK_TYPE_NONE, 2, GTK_TYPE_POINTER, GTK_TYPE_INT);
+
gtk_object_class_add_signals (object_class, e_text_signals, E_TEXT_LAST_SIGNAL);
@@ -2993,6 +3003,17 @@ e_text_event (GnomeCanvasItem *item, GdkEvent *event)
e_canvas_item_grab_focus (item);
}
#endif
+
+ /* We follow convention and emit popup events on right-clicks. */
+ if (event->type == GDK_BUTTON_PRESS && event->button.button == 3) {
+ gtk_signal_emit (GTK_OBJECT (text),
+ e_text_signals[E_TEXT_POPUP],
+ &(event->button),
+ _get_position_from_xy (text, event->button.x, event->button.y));
+
+ break;
+ }
+
/* Create our own double and triple click events,
as gnome-canvas doesn't forward them to us */
if (event->type == GDK_BUTTON_PRESS) {
@@ -3507,13 +3528,15 @@ e_text_command(ETextEventProcessor *tep, ETextEventProcessorCommand *command, gp
gnome_canvas_item_request_update (GNOME_CANVAS_ITEM(text));
}
-static void _invisible_destroy (GtkInvisible *invisible,
+static void
+_invisible_destroy (GtkInvisible *invisible,
EText *text)
{
text->invisible = NULL;
}
-static GtkWidget *e_text_get_invisible(EText *text)
+static GtkWidget *
+e_text_get_invisible(EText *text)
{
GtkWidget *invisible;
if (text->invisible) {
@@ -3607,7 +3630,8 @@ _selection_received (GtkInvisible *invisible,
}
}
-static void e_text_supply_selection (EText *text, guint time, GdkAtom selection, guchar *data, gint length)
+static void
+e_text_supply_selection (EText *text, guint time, GdkAtom selection, guchar *data, gint length)
{
gboolean successful;
GtkWidget *invisible;
diff --git a/widgets/text/e-text.h b/widgets/text/e-text.h
index 8ab6e33815..b42ea06663 100644
--- a/widgets/text/e-text.h
+++ b/widgets/text/e-text.h
@@ -1,8 +1,9 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* EText - Text item for evolution.
- * Copyright (C) 2000 Helix Code, Inc.
+ * Copyright (C) 2000, 2001 Ximian Inc.
*
- * Author: Chris Lahey <clahey@umich.edu>
+ * Author: Chris Lahey <clahey@ximian.com>
+ * Further hacking by Jon Trowbridge <trow@ximian.com>
*
* A majority of code taken from:
*
@@ -216,15 +217,15 @@ struct _EText {
struct _ETextClass {
GnomeCanvasItemClass parent_class;
- void (* changed) (EText *text);
+ void (* changed) (EText *text);
void (* activate) (EText *text);
+ void (* popup) (EText *text, GdkEventButton *ev, gint pos);
};
/* Standard Gtk function */
GtkType e_text_get_type (void);
-
END_GNOME_DECLS
#endif