gdouble x,
gdouble y)
{
+ GList *items = NULL;
EvLink *link;
EvImage *image;
EvAnnotation *annot;
image = ev_view_get_image_at_location (view, x, y);
- if (image) {
- g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, image);
- return TRUE;
- }
+ if (image)
+ items = g_list_prepend (items, image);
link = ev_view_get_link_at_location (view, x, y);
- if (link) {
- g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, link);
- return TRUE;
- }
+ if (link)
+ items = g_list_prepend (items, link);
annot = ev_view_get_annotation_at_location (view, x, y);
- if (annot) {
- g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, annot);
- return TRUE;
- }
+ if (annot)
+ items = g_list_prepend (items, annot);
+
+ g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, items);
- g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, NULL);
+ g_list_free (items);
return TRUE;
}
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (EvViewClass, popup_menu),
NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
+ g_cclosure_marshal_VOID__POINTER,
G_TYPE_NONE, 1,
- G_TYPE_OBJECT);
+ G_TYPE_POINTER);
signals[SIGNAL_SELECTION_CHANGED] = g_signal_new ("selection-changed",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
static gboolean
view_menu_popup_cb (EvView *view,
- GObject *object,
+ GList *items,
EvWindow *ev_window)
{
- view_menu_link_popup (ev_window,
- EV_IS_LINK (object) ? EV_LINK (object) : NULL);
- view_menu_image_popup (ev_window,
- EV_IS_IMAGE (object) ? EV_IMAGE (object) : NULL);
- view_menu_annot_popup (ev_window,
- EV_IS_ANNOTATION (object) ? EV_ANNOTATION (object) : NULL);
-
+ GList *l;
+ gboolean has_link = FALSE;
+ gboolean has_image = FALSE;
+ gboolean has_annot = FALSE;
+
+ for (l = items; l; l = g_list_next (l)) {
+ if (EV_IS_LINK (l->data)) {
+ view_menu_link_popup (ev_window, EV_LINK (l->data));
+ has_link = TRUE;
+ } else if (EV_IS_IMAGE (l->data)) {
+ view_menu_image_popup (ev_window, EV_IMAGE (l->data));
+ has_image = TRUE;
+ } else if (EV_IS_ANNOTATION (l->data)) {
+ view_menu_annot_popup (ev_window, EV_ANNOTATION (l->data));
+ has_annot = TRUE;
+ }
+ }
+
+ if (!has_link)
+ view_menu_link_popup (ev_window, NULL);
+ if (!has_image)
+ view_menu_image_popup (ev_window, NULL);
+ if (!has_annot)
+ view_menu_annot_popup (ev_window, NULL);
+
gtk_menu_popup (GTK_MENU (ev_window->priv->view_popup),
NULL, NULL, NULL, NULL,
3, gtk_get_current_event_time ());