[epiphany/wip/exalm/tabs] fixup! tmp



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]