diff options
author | Jean-François Rameau <jframeau@cvs.gnome.org> | 2006-09-25 03:59:37 +0800 |
---|---|---|
committer | Jean-François Rameau <jframeau@src.gnome.org> | 2006-09-25 03:59:37 +0800 |
commit | 575feabefc7e27e9e0b8cd5e7aac4d54cd69a6a4 (patch) | |
tree | e9287933d2908e0521b9df7119c32370dbe9c3ff /src/ephy-home-action.c | |
parent | 93435055701bffb38039ea16069a796aca256246 (diff) | |
download | gsoc2013-epiphany-575feabefc7e27e9e0b8cd5e7aac4d54cd69a6a4.tar gsoc2013-epiphany-575feabefc7e27e9e0b8cd5e7aac4d54cd69a6a4.tar.gz gsoc2013-epiphany-575feabefc7e27e9e0b8cd5e7aac4d54cd69a6a4.tar.bz2 gsoc2013-epiphany-575feabefc7e27e9e0b8cd5e7aac4d54cd69a6a4.tar.lz gsoc2013-epiphany-575feabefc7e27e9e0b8cd5e7aac4d54cd69a6a4.tar.xz gsoc2013-epiphany-575feabefc7e27e9e0b8cd5e7aac4d54cd69a6a4.tar.zst gsoc2013-epiphany-575feabefc7e27e9e0b8cd5e7aac4d54cd69a6a4.zip |
Add middle-click on New Tab/Window button to open URL on clipboard. Fix
2006-09-24 Jean-François Rameau <jframeau@cvs.gnome.org>
* 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.
Diffstat (limited to 'src/ephy-home-action.c')
-rw-r--r-- | src/ephy-home-action.c | 100 |
1 files changed, 96 insertions, 4 deletions
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 <string.h> + +#include <gtk/gtkclipboard.h> + +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); } |