[epiphany] Fix Tab order with Open Link in New Tab



commit 590c3edfdf44c0b2301f1ae5685b643317b2d2c8
Author: Jan-Michael Brummer <jan brummer tabos org>
Date:   Sun Apr 7 16:12:01 2019 +0200

    Fix Tab order with Open Link in New Tab
    
    Fixes: https://gitlab.gnome.org/GNOME/epiphany/issues/49

 src/ephy-shell.c  |  9 +++------
 src/ephy-window.c | 28 +++++++++++++++++++++++++++-
 src/ephy-window.h |  4 ++++
 3 files changed, 34 insertions(+), 7 deletions(-)
---
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index c90bd9ed6..b4b7fe246 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -761,12 +761,9 @@ ephy_shell_new_tab_full (EphyShell       *shell,
        window, previous_embed, jump_to ? "t" : "f");
 
   if (flags & EPHY_NEW_TAB_APPEND_AFTER) {
-    if (previous_embed) {
-      GtkWidget *nb = ephy_window_get_notebook (window);
-      /* FIXME this assumes the tab is the  direct notebook child */
-      position = gtk_notebook_page_num (GTK_NOTEBOOK (nb),
-                                        GTK_WIDGET (previous_embed)) + 1;
-    } else
+    if (previous_embed)
+      position = ephy_window_get_position_for_new_embed (window, previous_embed);
+    else
       g_warning ("Requested to append new tab after parent, but 'previous_embed' was NULL");
   }
 
diff --git a/src/ephy-window.c b/src/ephy-window.c
index b694fc382..bde4ff6f3 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -156,7 +156,8 @@ struct _EphyWindow {
   EphyLocationController *location_controller;
   guint modified_forms_timeout_id;
   EphyMouseGestureController *mouse_gesture_controller;
-
+  EphyEmbed *last_opened_embed;
+  int last_opened_pos;
   gboolean show_fullscreen_header_bar;
 
   gint current_width;
@@ -2986,6 +2987,9 @@ ephy_window_dispose (GObject *object)
 
     _ephy_window_set_context_event (window, NULL);
 
+    if (window->last_opened_embed)
+      g_clear_weak_pointer ((gpointer *)&window->last_opened_embed);
+
     g_clear_object (&window->bookmarks_manager);
     g_clear_object (&window->hit_test_result);
     g_clear_object (&window->mouse_gesture_controller);
@@ -3986,3 +3990,25 @@ ephy_window_show_fullscreen_header_bar (EphyWindow *window)
 {
   window->show_fullscreen_header_bar = TRUE;
 }
+
+int
+ephy_window_get_position_for_new_embed (EphyWindow *window,
+                                        EphyEmbed  *embed)
+{
+  GtkWidget *nb = ephy_window_get_notebook (window);
+  int position;
+
+  if (embed == window->last_opened_embed)
+    return window->last_opened_pos++;
+
+  position = gtk_notebook_page_num (GTK_NOTEBOOK (nb), GTK_WIDGET (embed)) + 1;
+
+  if (window->last_opened_embed)
+    g_object_remove_weak_pointer (G_OBJECT (window->last_opened_embed), (gpointer 
*)&window->last_opened_embed);
+
+  g_object_add_weak_pointer (G_OBJECT (embed), (gpointer *)&window->last_opened_embed);
+  window->last_opened_embed = embed;
+  window->last_opened_pos = position + 1;
+
+  return position;
+}
diff --git a/src/ephy-window.h b/src/ephy-window.h
index b80b4eb2b..1a708ce66 100644
--- a/src/ephy-window.h
+++ b/src/ephy-window.h
@@ -21,6 +21,7 @@
 #pragma once
 
 #include "ephy-bookmarks-manager.h"
+#include "ephy-embed.h"
 #include "ephy-embed-event.h"
 #include "ephy-location-controller.h"
 #include "ephy-web-view.h"
@@ -79,4 +80,7 @@ void              ephy_window_set_default_position     (EphyWindow *window,
                                                         gint        y);
 void              ephy_window_show_fullscreen_header_bar (EphyWindow *window);
 
+int               ephy_window_get_position_for_new_embed (EphyWindow *window,
+                                                          EphyEmbed  *embed);
+
 G_END_DECLS


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