From 575feabefc7e27e9e0b8cd5e7aac4d54cd69a6a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Rameau?= Date: Sun, 24 Sep 2006 19:59:37 +0000 Subject: Add middle-click on New Tab/Window button to open URL on clipboard. Fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2006-09-24 Jean-François Rameau * src/ephy-window.c: (ephy_window_constructor): * src/ephy-lockdown.c: (update_window): * src/window-commands.c: (window_cmd_file_new_window), (window_cmd_file_new_tab): * src/window-commands.h: (window_cmd_file_new_window), (window_cmd_file_new_tab): * src/ephy-toolbar.c: (ephy_toolbar_set_window): * src/ephy-home-action.c: (ephy_home_action_activate): Add middle-click on New Tab/Window button to open URL on clipboard. Fix bug 149715. Both New Tab and New Window actions are now EphyHomeAction. --- src/ephy-home-action.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 96 insertions(+), 4 deletions(-) (limited to 'src/ephy-home-action.c') diff --git a/src/ephy-home-action.c b/src/ephy-home-action.c index d00315586..672a55f80 100644 --- a/src/ephy-home-action.c +++ b/src/ephy-home-action.c @@ -26,17 +26,109 @@ #include "ephy-gui.h" #include "eel-gconf-extensions.h" +#include + +#include + +typedef struct +{ + GObject *weak_ptr; + EphyLinkFlags flags; +} ClipboardCtx; + +static void +clipboard_text_received_cb (GtkClipboard *clipboard, + const char *text, + ClipboardCtx *ctx) +{ + if (ctx->weak_ptr != NULL && text != NULL) + { + ephy_link_open (EPHY_LINK (ctx->weak_ptr), text, NULL, ctx->flags); + } + + if (ctx->weak_ptr != NULL) + { + GObject **object = &(ctx->weak_ptr); + g_object_remove_weak_pointer (G_OBJECT (ctx->weak_ptr), + (gpointer *)object); + } + + g_free (ctx); +} + +static void +ephy_home_action_with_clipboard (GtkAction *action, + EphyLinkFlags flags) +{ + ClipboardCtx *ctx; + GObject **object; + + ctx = g_new (ClipboardCtx, 1); + ctx->flags = flags; + + /* We need to make sure we know if the action is destroyed between + * requesting the clipboard contents, and receiving them. + */ + ctx->weak_ptr = G_OBJECT (action); + object = &(ctx->weak_ptr); + g_object_add_weak_pointer (ctx->weak_ptr, (gpointer *)object); + + gtk_clipboard_request_text + (gtk_clipboard_get_for_display (gdk_display_get_default(), + GDK_SELECTION_PRIMARY), + (GtkClipboardTextReceivedFunc) clipboard_text_received_cb, + ctx); + +} + +static void +ephy_home_action_open (GtkAction *action, + const char *address, + EphyLinkFlags flags) +{ + if (ephy_gui_is_middle_click ()) + { + ephy_home_action_with_clipboard (action, flags); + } + else /* Left button */ + { + ephy_link_open (EPHY_LINK (action), + address != NULL && address[0] != '\0' ? address : "about:blank", + NULL, + flags); + } +} + static void ephy_home_action_activate (GtkAction *action) { + char *action_name; char *address; + g_object_get (G_OBJECT (action), "name", &action_name, NULL); + address = eel_gconf_get_string (CONF_GENERAL_HOMEPAGE); - ephy_link_open (EPHY_LINK (action), - address != NULL && address[0] != '\0' ? address : "about:blank", - NULL, - ephy_link_flags_from_current_event ()); + if (strcmp (action_name, "GoHome") == 0) + { + + ephy_link_open (EPHY_LINK (action), + address != NULL && address[0] != '\0' ? address : "about:blank", + NULL, + ephy_link_flags_from_current_event ()); + } + else if (strcmp (action_name, "FileNewTab") == 0) + { + ephy_home_action_open (action, + address, + EPHY_LINK_NEW_TAB | EPHY_LINK_JUMP_TO); + } + else if (strcmp (action_name, "FileNewWindow") == 0) + { + ephy_home_action_open (action, + address, + EPHY_LINK_NEW_WINDOW); + } g_free (address); } -- cgit v1.2.3