[epiphany] Fix Tab order with Open Link in New Tab
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany] Fix Tab order with Open Link in New Tab
- Date: Mon, 8 Apr 2019 20:41:38 +0000 (UTC)
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]