aboutsummaryrefslogtreecommitdiffstats
path: root/src/ephy-tab.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ephy-tab.c')
-rw-r--r--src/ephy-tab.c77
1 files changed, 68 insertions, 9 deletions
diff --git a/src/ephy-tab.c b/src/ephy-tab.c
index 7561bb476..98f04fad1 100644
--- a/src/ephy-tab.c
+++ b/src/ephy-tab.c
@@ -22,11 +22,11 @@
#include "ephy-tab.h"
#include "ephy-shell.h"
-#include "ephy-embed-popup-bw.h"
#include "eel-gconf-extensions.h"
#include "ephy-prefs.h"
#include "ephy-embed-prefs.h"
#include "ephy-debug.h"
+#include "egg-menu-merge.h"
#include <bonobo/bonobo-i18n.h>
#include <libgnomevfs/gnome-vfs-uri.h>
@@ -39,12 +39,15 @@
#include <gtk/gtkiconfactory.h>
#include <gtk/gtkstyle.h>
#include <gtk/gtkselection.h>
+#include <gtk/gtkmain.h>
+#include <gtk/gtkmenu.h>
#include <string.h>
struct EphyTabPrivate
{
EphyEmbed *embed;
EphyWindow *window;
+ EphyEmbedEvent *event;
gboolean is_active;
TabLoadStatus load_status;
char status_message[255];
@@ -195,6 +198,7 @@ ephy_tab_init (EphyTab *tab)
tab->priv->embed = ephy_embed_new (G_OBJECT(shell));
tab->priv->window = NULL;
+ tab->priv->event = NULL;
tab->priv->is_active = FALSE;
*tab->priv->status_message = '\0';
*tab->priv->link_message = '\0';
@@ -280,6 +284,11 @@ ephy_tab_finalize (GObject *object)
g_idle_remove_by_data (tab->priv->embed);
+ if (tab->priv->event)
+ {
+ g_object_unref (tab->priv->event);
+ }
+
g_free (tab->priv);
G_OBJECT_CLASS (parent_class)->finalize (object);
@@ -346,6 +355,12 @@ ephy_tab_get_window (EphyTab *tab)
return tab->priv->window;
}
+EphyEmbedEvent *
+ephy_tab_get_event (EphyTab *tab)
+{
+ return tab->priv->event;
+}
+
static void
ephy_tab_update_color (EphyTab *tab)
{
@@ -813,24 +828,68 @@ ephy_tab_dom_mouse_click_cb (EphyEmbed *embed,
}
static void
+ephy_tab_set_event (EphyTab *tab,
+ EphyEmbedEvent *event)
+{
+ if (tab->priv->event) g_object_unref (tab->priv->event);
+ g_object_ref (event);
+ tab->priv->event = event;
+}
+
+static void
ephy_tab_show_embed_popup (EphyTab *tab, EphyEmbedEvent *event)
{
- EphyEmbedPopup *popup;
+ EmbedEventContext context;
+ const char *popup;
+ const GValue *value;
+ gboolean framed;
EphyWindow *window;
- EphyEmbed *embed;
+ char *path;
+ GtkWidget *widget;
window = ephy_tab_get_window (tab);
- embed = ephy_tab_get_embed (tab);
- popup = EPHY_EMBED_POPUP (ephy_window_get_popup_factory (window));
- ephy_embed_popup_set_event (popup, event);
- ephy_embed_popup_show (popup, embed);
+ ephy_embed_event_get_property (event, "framed_page", &value);
+ framed = g_value_get_int (value);
+
+ ephy_embed_event_get_context (event, &context);
+
+ if ((context & EMBED_CONTEXT_LINK) &&
+ (context & EMBED_CONTEXT_IMAGE))
+ {
+ popup = "EphyImageLinkPopup";
+ }
+ else if (context & EMBED_CONTEXT_LINK)
+ {
+ popup = "EphyLinkPopup";
+ }
+ else if (context & EMBED_CONTEXT_IMAGE)
+ {
+ popup = "EphyImagePopup";
+ }
+ else
+ {
+ popup = framed ? "EphyFramedDocumentPopup" :
+ "EphyDocumentPopup";
+ }
+
+ path = g_strconcat ("/popups/", popup, NULL);
+ g_print (path);
+ widget = egg_menu_merge_get_widget (EGG_MENU_MERGE (window->ui_merge),
+ path);
+ g_free (path);
+
+ g_return_if_fail (widget != NULL);
+
+ ephy_tab_set_event (tab, event);
+ gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL, 2,
+ gtk_get_current_event_time ());
}
static gint
ephy_tab_dom_mouse_down_cb (EphyEmbed *embed,
- EphyEmbedEvent *event,
- EphyTab *tab)
+ EphyEmbedEvent *event,
+ EphyTab *tab)
{
EphyWindow *window;
int button;