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 | |
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')
-rw-r--r-- | src/ephy-home-action.c | 100 | ||||
-rw-r--r-- | src/ephy-lockdown.c | 2 | ||||
-rwxr-xr-x | src/ephy-toolbar.c | 23 | ||||
-rw-r--r-- | src/ephy-window.c | 10 | ||||
-rw-r--r-- | src/window-commands.c | 29 | ||||
-rw-r--r-- | src/window-commands.h | 6 |
6 files changed, 123 insertions, 47 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); } diff --git a/src/ephy-lockdown.c b/src/ephy-lockdown.c index 6c880d413..10753d2af 100644 --- a/src/ephy-lockdown.c +++ b/src/ephy-lockdown.c @@ -197,7 +197,7 @@ update_window (EphyWindow *window, ephy_action_change_sensitivity_flags (action, LOCKDOWN_FLAG, disabled); fullscreen = eel_gconf_get_boolean (CONF_LOCKDOWN_FULLSCREEN); - action = gtk_action_group_get_action (action_group, "FileNewWindow"); + action = gtk_action_group_get_action (toolbar_action_group, "FileNewWindow"); ephy_action_change_sensitivity_flags (action, LOCKDOWN_FLAG, fullscreen); action = gtk_action_group_get_action (action_group, "ViewFullscreen"); ephy_action_change_sensitivity_flags (action, LOCKDOWN_FLAG, fullscreen); diff --git a/src/ephy-toolbar.c b/src/ephy-toolbar.c index 83a89f2a7..60acce052 100755 --- a/src/ephy-toolbar.c +++ b/src/ephy-toolbar.c @@ -359,6 +359,29 @@ ephy_toolbar_set_window (EphyToolbar *toolbar, G_CALLBACK (ephy_link_open), toolbar); gtk_action_group_add_action_with_accel (priv->action_group, action, "<alt>Home"); g_object_unref (action); + + action = g_object_new (EPHY_TYPE_HOME_ACTION, + "name", "FileNewTab", + "label", _("New _Tab"), + "stock_id", STOCK_NEW_TAB, + "tooltip", _("Open a new tab"), + NULL); + g_signal_connect_swapped (action, "open-link", + G_CALLBACK (ephy_link_open), toolbar); + gtk_action_group_add_action_with_accel (priv->action_group, action, "<control>T"); + g_object_unref (action); + + action = g_object_new (EPHY_TYPE_HOME_ACTION, + "name", "FileNewWindow", + "label", _("_New Window"), + "stock_id", STOCK_NEW_WINDOW, + "tooltip", _("Open a new window"), + NULL); + g_signal_connect_swapped (action, "open-link", + G_CALLBACK (ephy_link_open), toolbar); + gtk_action_group_add_action_with_accel (priv->action_group, action, "<control>N"); + g_object_unref (action); + } /* public functions */ diff --git a/src/ephy-window.c b/src/ephy-window.c index 4039f112f..04539f2b9 100644 --- a/src/ephy-window.c +++ b/src/ephy-window.c @@ -126,12 +126,6 @@ static const GtkActionEntry ephy_menu_entries [] = { /* File menu */ - { "FileNewWindow", STOCK_NEW_WINDOW, N_("_New Window"), "<control>N", - N_("Open a new window"), - G_CALLBACK (window_cmd_file_new_window) }, - { "FileNewTab", STOCK_NEW_TAB, N_("New _Tab"), "<control>T", - N_("Open a new tab"), - G_CALLBACK (window_cmd_file_new_tab) }, { "FileOpen", GTK_STOCK_OPEN, N_("_Open..."), "<control>O", N_("Open a file"), G_CALLBACK (window_cmd_file_open) }, @@ -3070,6 +3064,7 @@ ephy_window_constructor (GType type, EggToolbarsModel *model; GtkSettings *settings; GtkAction *action; + GtkActionGroup *toolbar_action_group; GError *error = NULL; guint settings_connection; @@ -3204,7 +3199,8 @@ ephy_window_constructor (GType type, G_CALLBACK (sync_network_status), window); /* Popup part */ - action = gtk_action_group_get_action (priv->action_group, "FileNewTab"); + toolbar_action_group = ephy_toolbar_get_action_group (priv->toolbar); + action = gtk_action_group_get_action (toolbar_action_group, "FileNewTab"); ephy_action_change_sensitivity_flags (action, SENS_FLAG_CHROME, priv->is_popup); action = gtk_action_group_get_action (priv->popups_action_group, "OpenLinkInNewTab"); diff --git a/src/window-commands.c b/src/window-commands.c index c12bfd746..97f15d709 100644 --- a/src/window-commands.c +++ b/src/window-commands.c @@ -203,35 +203,6 @@ window_cmd_view_reload (GtkAction *action, } void -window_cmd_file_new_window (GtkAction *action, - EphyWindow *window) -{ - EphyTab *tab; - - tab = ephy_window_get_active_tab (window); - g_return_if_fail (tab != NULL); - - ephy_shell_new_tab (ephy_shell, window, tab, NULL, - EPHY_NEW_TAB_NEW_PAGE | - EPHY_NEW_TAB_IN_NEW_WINDOW); -} - -void -window_cmd_file_new_tab (GtkAction *action, - EphyWindow *window) -{ - EphyTab *tab; - - tab = ephy_window_get_active_tab (window); - g_return_if_fail (tab != NULL); - - ephy_shell_new_tab (ephy_shell, window, tab, NULL, - EPHY_NEW_TAB_NEW_PAGE | - EPHY_NEW_TAB_IN_EXISTING_WINDOW | - EPHY_NEW_TAB_JUMP); -} - -void window_cmd_go_bookmarks (GtkAction *action, EphyWindow *window) { diff --git a/src/window-commands.h b/src/window-commands.h index b271332bf..f25ddbc46 100644 --- a/src/window-commands.h +++ b/src/window-commands.h @@ -43,12 +43,6 @@ void window_cmd_view_reload (GtkAction *action, void window_cmd_new (GtkAction *action, EphyWindow *window); -void window_cmd_file_new_window (GtkAction *action, - EphyWindow *window); - -void window_cmd_file_new_tab (GtkAction *action, - EphyWindow *window); - void window_cmd_file_bookmark_page(GtkAction *action, EphyWindow *window); |