[epiphany/wip/exalm/tabs] fixup! tmp
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [epiphany/wip/exalm/tabs] fixup! tmp
- Date: Mon, 7 Sep 2020 20:54:32 +0000 (UTC)
commit 197f3be0e2d8c5804dfb07931e166f747f8b48f9
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Tue Sep 8 01:53:39 2020 +0500
fixup! tmp
src/ephy-desktop-utils.c | 2 +-
src/ephy-page-row.c | 131 ++++++----
src/ephy-page-row.h | 8 +-
src/ephy-pages-view.c | 20 +-
src/ephy-tab-label.c | 465 -----------------------------------
src/ephy-tab-label.h | 41 ---
src/meson.build | 1 -
src/resources/epiphany.gresource.xml | 1 -
src/resources/gtk/page-row.ui | 7 +
src/resources/gtk/tab-label.ui | 90 -------
10 files changed, 89 insertions(+), 677 deletions(-)
---
diff --git a/src/ephy-desktop-utils.c b/src/ephy-desktop-utils.c
index 9c57cb4d5..ef5fc75bd 100644
--- a/src/ephy-desktop-utils.c
+++ b/src/ephy-desktop-utils.c
@@ -50,7 +50,7 @@ ephy_get_fallback_favicon_name (const char *uri,
{
if (uri) {
if (g_str_has_prefix (uri, "ephy-about:overview") || g_str_has_prefix (uri, "about:overview"))
- return EPHY_FAVICON_TYPE_SHOW_MISSING_PLACEHOLDER ? "view-grid-symbolic" : NULL;
+ return (type == EPHY_FAVICON_TYPE_SHOW_MISSING_PLACEHOLDER) ? "view-grid-symbolic" : NULL;
else if (g_str_has_prefix (uri, "ephy-about:") || g_str_has_prefix (uri, "about:"))
return "web-browser-symbolic";
}
diff --git a/src/ephy-page-row.c b/src/ephy-page-row.c
index 6cd5dce20..1ac89481b 100644
--- a/src/ephy-page-row.c
+++ b/src/ephy-page-row.c
@@ -23,20 +23,12 @@
#include "ephy-desktop-utils.h"
#include "ephy-embed.h"
-#include "ephy-embed-utils.h"
#include "ephy-page-row.h"
#include "ephy-web-view.h"
-enum {
- CLOSED,
-
- LAST_SIGNAL
-};
-
struct _EphyPageRow {
GtkPopover parent_instance;
- GtkBox *box;
GtkImage *icon;
GtkStack *icon_stack;
GtkImage *speaker_icon;
@@ -45,16 +37,15 @@ struct _EphyPageRow {
GtkButton *close_button;
HdyTabPage *page;
+ EphyTabView *tab_view;
};
-static guint signals[LAST_SIGNAL];
-
G_DEFINE_TYPE (EphyPageRow, ephy_page_row, GTK_TYPE_LIST_BOX_ROW)
static void
close_clicked_cb (EphyPageRow *self)
{
- g_signal_emit (self, signals[CLOSED], 0);
+ hdy_tab_view_close_page (ephy_tab_view_get_tab_view (self->tab_view), self->page);
}
static gboolean
@@ -65,7 +56,7 @@ button_release_event (GtkWidget *widget,
GdkEventButton *button_event = (GdkEventButton *)event;
if (button_event->button == GDK_BUTTON_MIDDLE) {
- g_signal_emit (self, signals[CLOSED], 0);
+ hdy_tab_view_close_page (ephy_tab_view_get_tab_view (self->tab_view), self->page);
return GDK_EVENT_STOP;
}
@@ -78,15 +69,7 @@ ephy_page_row_class_init (EphyPageRowClass *klass)
{
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- signals[CLOSED] =
- g_signal_new ("closed",
- EPHY_TYPE_PAGE_ROW,
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE, 0);
-
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/epiphany/gtk/page-row.ui");
- gtk_widget_class_bind_template_child (widget_class, EphyPageRow, box);
gtk_widget_class_bind_template_child (widget_class, EphyPageRow, icon);
gtk_widget_class_bind_template_child (widget_class, EphyPageRow, icon_stack);
gtk_widget_class_bind_template_child (widget_class, EphyPageRow, speaker_icon);
@@ -103,54 +86,94 @@ ephy_page_row_init (EphyPageRow *self)
gtk_widget_init_template (GTK_WIDGET (self));
}
-EphyPageRow *
-ephy_page_row_new (HdyTabPage *page)
+static gboolean
+loading_to_visible_child (GBinding *binding,
+ const GValue *input,
+ GValue *output,
+ EphyPageRow *self)
{
- EphyPageRow *self;
- GtkWidget *embed;
+ if (g_value_get_boolean (input))
+ g_value_set_object (output, self->spinner);
+ else
+ g_value_set_object (output, self->icon);
- g_assert (HDY_IS_TAB_PAGE (page));
+ return TRUE;
+}
- self = g_object_new (EPHY_TYPE_PAGE_ROW, NULL);
- self->page = page;
+static void
+update_icon_cb (EphyPageRow *self)
+{
+ EphyEmbed *embed = EPHY_EMBED (hdy_tab_page_get_content (self->page));
+ EphyWebView *view = ephy_embed_get_web_view (embed);
+ GIcon *icon = G_ICON (ephy_web_view_get_icon (view));
+ const char *uri, *favicon_name;
+ HdyTabView *tab_view;
- embed = hdy_tab_page_get_content (page);
+ if (icon) {
+ gtk_image_set_from_gicon (self->icon, icon, GTK_ICON_SIZE_MENU);
- g_assert (EPHY_IS_EMBED (embed));
+ return;
+ }
- return self;
-}
+ uri = webkit_web_view_get_uri (WEBKIT_WEB_VIEW (view));
+ favicon_name = ephy_get_fallback_favicon_name (uri, EPHY_FAVICON_TYPE_SHOW_MISSING_PLACEHOLDER);
-void
-ephy_page_row_set_adaptive_mode (EphyPageRow *self,
- EphyAdaptiveMode adaptive_mode)
-{
- GtkStyleContext *context;
+ if (favicon_name) {
+ g_autoptr (GIcon) fallback_icon = g_themed_icon_new (favicon_name);
- g_assert (EPHY_IS_PAGE_ROW (self));
+ gtk_image_set_from_gicon (self->icon, fallback_icon, GTK_ICON_SIZE_MENU);
- context = gtk_widget_get_style_context (GTK_WIDGET (self));
+ return;
+ }
- switch (adaptive_mode) {
- case EPHY_ADAPTIVE_MODE_NORMAL:
- gtk_widget_set_size_request (GTK_WIDGET (self->box), -1, -1);
- gtk_widget_set_margin_end (GTK_WIDGET (self->box), 0);
- gtk_widget_set_margin_start (GTK_WIDGET (self->box), 4);
- gtk_box_set_spacing (self->box, 0);
+ tab_view = ephy_tab_view_get_tab_view (self->tab_view);
- gtk_style_context_remove_class (context, "narrow");
+ gtk_image_set_from_gicon (self->icon, hdy_tab_view_get_default_icon (tab_view), GTK_ICON_SIZE_MENU);
+}
- break;
- case EPHY_ADAPTIVE_MODE_NARROW:
- gtk_widget_set_size_request (GTK_WIDGET (self->box), -1, 50);
- gtk_widget_set_margin_end (GTK_WIDGET (self->box), 4);
- gtk_widget_set_margin_start (GTK_WIDGET (self->box), 8);
- gtk_box_set_spacing (self->box, 4);
+EphyPageRow *
+ephy_page_row_new (EphyTabView *tab_view,
+ HdyTabPage *page)
+{
+ EphyPageRow *self;
+ GtkWidget *embed = hdy_tab_page_get_content (page);
+ EphyWebView *view;
- gtk_style_context_add_class (context, "narrow");
+ g_assert (HDY_IS_TAB_PAGE (page));
+ g_assert (EPHY_IS_EMBED (embed));
- break;
- }
+ view = ephy_embed_get_web_view (EPHY_EMBED (embed));
+
+ self = g_object_new (EPHY_TYPE_PAGE_ROW, NULL);
+ self->tab_view = tab_view;
+ self->page = page;
+
+ g_object_bind_property (page, "title",
+ self->title, "label",
+ G_BINDING_SYNC_CREATE);
+ g_object_bind_property (page, "secondary-icon",
+ self->speaker_icon, "gicon",
+ G_BINDING_SYNC_CREATE);
+ g_object_bind_property (page, "pinned",
+ self->close_button, "visible",
+ G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN);
+ g_object_bind_property_full (page, "loading",
+ self->icon_stack, "visible-child",
+ G_BINDING_SYNC_CREATE,
+ (GBindingTransformFunc)loading_to_visible_child,
+ NULL,
+ self, NULL);
+
+ g_signal_connect_object (view, "notify::icon",
+ G_CALLBACK (update_icon_cb), self,
+ G_CONNECT_SWAPPED);
+ g_signal_connect_object (view, "notify::uri",
+ G_CALLBACK (update_icon_cb), self,
+ G_CONNECT_SWAPPED);
+
+ update_icon_cb (self);
+
+ return self;
}
HdyTabPage *
diff --git a/src/ephy-page-row.h b/src/ephy-page-row.h
index 53fd3a1cb..6369359d7 100644
--- a/src/ephy-page-row.h
+++ b/src/ephy-page-row.h
@@ -22,7 +22,7 @@
#pragma once
#include <handy.h>
-#include "ephy-adaptive-mode.h"
+#include "ephy-tab-view.h"
G_BEGIN_DECLS
@@ -30,10 +30,8 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (EphyPageRow, ephy_page_row, EPHY, PAGE_ROW, GtkListBoxRow)
-EphyPageRow *ephy_page_row_new (HdyTabPage *page);
-
-void ephy_page_row_set_adaptive_mode (EphyPageRow *self,
- EphyAdaptiveMode adaptive_mode);
+EphyPageRow *ephy_page_row_new (EphyTabView *view,
+ HdyTabPage *page);
HdyTabPage *ephy_page_row_get_page (EphyPageRow *self);
diff --git a/src/ephy-pages-view.c b/src/ephy-pages-view.c
index 53200cedd..8ac9d424d 100644
--- a/src/ephy-pages-view.c
+++ b/src/ephy-pages-view.c
@@ -34,7 +34,6 @@ struct _EphyPagesView {
GListModel *model;
EphyTabView *tab_view;
- EphyAdaptiveMode adaptive_mode;
};
G_DEFINE_TYPE (EphyPagesView, ephy_pages_view, GTK_TYPE_SCROLLED_WINDOW)
@@ -54,20 +53,6 @@ release_tab_view (EphyPagesView *self)
}
}
-static void
-row_closed_cb (EphyPagesView *self,
- EphyPageRow *row)
-{
- HdyTabPage *page;
-
- g_assert (EPHY_IS_PAGES_VIEW (self));
- g_assert (EPHY_IS_PAGE_ROW (row));
-
- page = ephy_page_row_get_page (row);
-
- hdy_tab_view_close_page (ephy_tab_view_get_tab_view (self->tab_view), page);
-}
-
static void
row_activated_cb (EphyPagesView *self,
EphyPageRow *row)
@@ -91,10 +76,7 @@ static GtkWidget *
create_row (HdyTabPage *page,
EphyPagesView *self)
{
- EphyPageRow *row = ephy_page_row_new (page);
-
- ephy_page_row_set_adaptive_mode (row, EPHY_ADAPTIVE_MODE_NARROW);
- g_signal_connect_swapped (row, "closed", G_CALLBACK (row_closed_cb), self);
+ EphyPageRow *row = ephy_page_row_new (self->tab_view, page);
gtk_widget_show (GTK_WIDGET (row));
diff --git a/src/meson.build b/src/meson.build
index a8aabbbe1..447168f80 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -40,7 +40,6 @@ libephymain_sources = [
'ephy-suggestion-model.c',
'ephy-tab-view.c',
'ephy-tab-header-bar.c',
- 'ephy-tab-label.c',
'ephy-window.c',
'popup-commands.c',
'preferences/clear-data-view.c',
diff --git a/src/resources/epiphany.gresource.xml b/src/resources/epiphany.gresource.xml
index fc6b99ff1..3282815bd 100644
--- a/src/resources/epiphany.gresource.xml
+++ b/src/resources/epiphany.gresource.xml
@@ -39,7 +39,6 @@
<file preprocess="xml-stripblanks" compressed="true">gtk/search-engine-dialog.ui</file>
<file preprocess="xml-stripblanks" compressed="true">gtk/synced-tabs-dialog.ui</file>
<file preprocess="xml-stripblanks" compressed="true">gtk/shortcuts-dialog.ui</file>
- <file preprocess="xml-stripblanks" compressed="true">gtk/tab-label.ui</file>
<file preprocess="xml-stripblanks" compressed="true">gtk/webapp-additional-urls-dialog.ui</file>
</gresource>
<gresource prefix="/org/gnome/Epiphany/icons">
diff --git a/src/resources/gtk/page-row.ui b/src/resources/gtk/page-row.ui
index 17bcb9278..8e95a71a7 100644
--- a/src/resources/gtk/page-row.ui
+++ b/src/resources/gtk/page-row.ui
@@ -4,6 +4,9 @@
<requires lib="gtk+" version="3.16"/>
<template class="EphyPageRow" parent="GtkListBoxRow">
<property name="can_focus">True</property>
+ <style>
+ <class name="narrow"/>
+ </style>
<child>
<object class="GtkEventBox">
<property name="visible">True</property>
@@ -13,6 +16,9 @@
<object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="height-request">50</property>
+ <property name="margin-start">8</property>
+ <property name="margin-end">4</property>
<child>
<object class="GtkStack" id="icon_stack">
<property name="visible">True</property>
@@ -32,6 +38,7 @@
<object class="GtkSpinner" id="spinner">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="active">True</property>
</object>
<packing>
<property name="position">1</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]