[epiphany] Open homepage in new tab when middle clicking on homepage button



commit cf424884672f7883e1afadc7fedaa177944d58f4
Author: Jan-Michael Brummer <jan brummer tabos org>
Date:   Sun Dec 23 21:33:26 2018 +0100

    Open homepage in new tab when middle clicking on homepage button
    
    Mimic Firefox behaviour and open a new homepage tab and set it as active child.
    
    Fixes: https://gitlab.gnome.org/GNOME/epiphany/issues/368

 src/ephy-action-bar-start.c | 25 +++++++++++++++++++++++++
 src/ephy-window.c           |  1 +
 src/window-commands.c       | 25 +++++++++++++++++++++++++
 src/window-commands.h       |  3 +++
 4 files changed, 54 insertions(+)
---
diff --git a/src/ephy-action-bar-start.c b/src/ephy-action-bar-start.c
index 1fe13119d..3c83174fb 100644
--- a/src/ephy-action-bar-start.c
+++ b/src/ephy-action-bar-start.c
@@ -378,6 +378,29 @@ navigation_button_release_event_cb (GtkButton *button,
   return G_SOURCE_REMOVE;
 }
 
+static gboolean
+homepage_button_release_event_cb (GtkButton *button,
+                                  GdkEvent  *event,
+                                  gpointer   user_data)
+{
+  EphyActionBarStart *action_bar_start = EPHY_ACTION_BAR_START (user_data);
+  GActionGroup *action_group;
+  GAction *action;
+
+  action_group = gtk_widget_get_action_group (gtk_widget_get_ancestor (GTK_WIDGET (action_bar_start), 
EPHY_TYPE_WINDOW), "toolbar");
+
+  switch (((GdkEventButton *)event)->button) {
+    case GDK_BUTTON_MIDDLE:
+      action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "homepage-new-tab");
+       g_action_activate (action, NULL);
+      break;
+    default:
+      break;
+  }
+
+  return G_SOURCE_REMOVE;
+}
+
 static gboolean
 navigation_leave_notify_event_cb (GtkButton *button,
                                   GdkEvent  *event,
@@ -459,6 +482,8 @@ ephy_action_bar_start_constructed (GObject *object)
   } else {
     gtk_widget_set_visible (action_bar_start->homepage_button, FALSE);
   }
+  g_signal_connect (action_bar_start->homepage_button, "button-release-event",
+                    G_CALLBACK (homepage_button_release_event_cb), action_bar_start);
 }
 
 static void
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 6670babcc..9be41ff81 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -829,6 +829,7 @@ static const GActionEntry toolbar_entries [] = {
   { "navigation-back-new-tab", window_cmd_navigation_new_tab },
   { "navigation-forward", window_cmd_navigation },
   { "navigation-forward-new-tab", window_cmd_navigation_new_tab },
+  { "homepage-new-tab", window_cmd_homepage_new_tab },
 
   { "stop", window_cmd_stop },
   { "reload", window_cmd_reload },
diff --git a/src/window-commands.c b/src/window-commands.c
index 3b844913e..43da871f4 100644
--- a/src/window-commands.c
+++ b/src/window-commands.c
@@ -2558,3 +2558,28 @@ window_cmd_open_application_manager (GSimpleAction *action,
 
   ephy_web_view_load_url (web_view, "about:applications");
 }
+
+void
+window_cmd_homepage_new_tab (GSimpleAction *action,
+                             GVariant      *parameter,
+                             gpointer       user_data)
+{
+  EphyWindow *window = EPHY_WINDOW (user_data);
+  EphyEmbed *embed;
+  EphyWebView *web_view;
+
+  embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
+  g_assert (embed != NULL);
+
+  embed = ephy_shell_new_tab (ephy_shell_get_default (),
+                              EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (embed))),
+                              NULL,
+                              0);
+
+  web_view = ephy_embed_get_web_view (embed);
+  ephy_web_view_load_homepage (web_view);
+
+  ephy_embed_container_set_active_child (EPHY_EMBED_CONTAINER (window), embed);
+
+  gtk_widget_grab_focus (GTK_WIDGET (embed));
+}
diff --git a/src/window-commands.h b/src/window-commands.h
index 1ad38c2f4..c06aa39b7 100644
--- a/src/window-commands.h
+++ b/src/window-commands.h
@@ -212,5 +212,8 @@ void window_cmd_toggle_reader_mode              (GSimpleAction *action,
 void window_cmd_open_application_manager        (GSimpleAction *action,
                                                  GVariant      *parameter,
                                                  gpointer       user_data);
+void window_cmd_homepage_new_tab                (GSimpleAction *action,
+                                                 GVariant      *parameter,
+                                                 gpointer       user_data);
 
 G_END_DECLS


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]