[libhandy/tabs: 11/62] Close confirmation




commit ce55d26715c32ccd572751d253b1ae4b1390dc1e
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Sat Sep 5 00:54:27 2020 +0500

    Close confirmation

 src/hdy-tab-view.c | 116 ++++++++++++++++++-----------------------------------
 src/hdy-tab-view.h |  20 +++++----
 2 files changed, 47 insertions(+), 89 deletions(-)
---
diff --git a/src/hdy-tab-view.c b/src/hdy-tab-view.c
index 5649fc82..9a02380a 100644
--- a/src/hdy-tab-view.c
+++ b/src/hdy-tab-view.c
@@ -98,6 +98,7 @@ enum {
   SIGNAL_PAGE_REORDERED,
   SIGNAL_PAGE_PINNED,
   SIGNAL_PAGE_UNPINNED,
+  SIGNAL_CLOSE_PAGE,
   SIGNAL_SETUP_MENU,
   SIGNAL_CREATE_WINDOW,
   SIGNAL_SECONDARY_ICON_ACTIVATED,
@@ -1002,7 +1003,7 @@ hdy_tab_view_class_init (HdyTabViewClass *klass)
                   HDY_TYPE_TAB_PAGE);
 
   /**
-   * HdyTabView::setup-menu:
+   * HdyTabView::close-page:
    * @self: a #HdyTabView
    * @page: TBD
    *
@@ -1010,6 +1011,26 @@ hdy_tab_view_class_init (HdyTabViewClass *klass)
    *
    * Since: 1.2
    */
+  signals[SIGNAL_CLOSE_PAGE] =
+    g_signal_new ("close-page",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_LAST,
+                  0,
+                  g_signal_accumulator_true_handled,
+                  NULL, NULL,
+                  G_TYPE_BOOLEAN,
+                  1,
+                  HDY_TYPE_TAB_PAGE);
+
+  /**
+   * HdyTabView::setup-menu:
+   * @self: a #HdyTabView
+   * @page: (nullable): TBD
+   *
+   * TBD
+   *
+   * Since: 1.2
+   */
   signals[SIGNAL_SETUP_MENU] =
     g_signal_new ("setup-menu",
                   G_TYPE_FROM_CLASS (klass),
@@ -2234,63 +2255,17 @@ gboolean
 hdy_tab_view_close_page (HdyTabView *self,
                          HdyTabPage *page)
 {
-  gboolean can_close;
+  gboolean prevent_closing;
 
   g_return_val_if_fail (HDY_IS_TAB_VIEW (self), FALSE);
   g_return_val_if_fail (HDY_IS_TAB_PAGE (page), FALSE);
 
-//  g_signal_emit_by_name (page, "closing", &can_close);
-  can_close = TRUE;
+  g_signal_emit (self, signals[SIGNAL_CLOSE_PAGE], 0, page, &prevent_closing);
 
-  if (can_close)
+  if (!prevent_closing)
     close_page (self, page);
 
-  return can_close;
-}
-
-/**
- * hdy_tab_view_close_pages:
- * @self: a #HdyTabView
- * @pages: (element-type HdyTabPage) (transfer container): TBD
- *
- * TBD
- *
- * Returns: TBD
- *
- * Since: 1.2
- */
-gboolean
-hdy_tab_view_close_pages (HdyTabView *self,
-                          GSList     *pages)
-{
-  gboolean can_close = TRUE;
-  GSList *l;
-
-  g_return_val_if_fail (HDY_IS_TAB_VIEW (self), FALSE);
-
-  if (!pages)
-    return TRUE;
-
-  for (l = pages; l; l = l->next) {
-    HdyTabPage *page = l->data;
-    gboolean can_close_tab;
-
-//    g_signal_emit_by_name (page, "closing", &can_close_tab);
-    can_close_tab = TRUE;
-
-    can_close &= can_close_tab;
-  }
-
-  if (can_close)
-    for (l = pages; l; l = l->next) {
-      HdyTabPage *page = l->data;
-
-      close_page (self, page);
-    }
-
-  g_free (pages);
-
-  return can_close;
+  return !prevent_closing;
 }
 
 /**
@@ -2300,19 +2275,16 @@ hdy_tab_view_close_pages (HdyTabView *self,
  *
  * TBD
  *
- * Returns: TBD
- *
  * Since: 1.2
  */
-gboolean
+void
 hdy_tab_view_close_other_pages (HdyTabView *self,
                                 HdyTabPage *page)
 {
-  GSList *pages = NULL;
   gint i;
 
-  g_return_val_if_fail (HDY_IS_TAB_VIEW (self), FALSE);
-  g_return_val_if_fail (HDY_IS_TAB_PAGE (page), FALSE);
+  g_return_if_fail (HDY_IS_TAB_VIEW (self));
+  g_return_if_fail (HDY_IS_TAB_PAGE (page));
 
   for (i = self->n_pages - 1; i >= self->n_pinned_pages; i--) {
     HdyTabPage *p = hdy_tab_view_get_nth_page (self, i);
@@ -2320,10 +2292,8 @@ hdy_tab_view_close_other_pages (HdyTabView *self,
     if (p == page)
       continue;
 
-    pages = g_slist_prepend (pages, p);
+    hdy_tab_view_close_page (self, p);
   }
-
-  return hdy_tab_view_close_pages (self, pages);
 }
 
 /**
@@ -2333,29 +2303,24 @@ hdy_tab_view_close_other_pages (HdyTabView *self,
  *
  * TBD
  *
- * Returns: TBD
- *
  * Since: 1.2
  */
-gboolean
+void
 hdy_tab_view_close_pages_before (HdyTabView *self,
                                  HdyTabPage *page)
 {
-  GSList *pages = NULL;
   gint pos, i;
 
-  g_return_val_if_fail (HDY_IS_TAB_VIEW (self), FALSE);
-  g_return_val_if_fail (HDY_IS_TAB_PAGE (page), FALSE);
+  g_return_if_fail (HDY_IS_TAB_VIEW (self));
+  g_return_if_fail (HDY_IS_TAB_PAGE (page));
 
   pos = hdy_tab_view_get_page_position (self, page);
 
   for (i = pos - 1; i >= self->n_pinned_pages; i--) {
     HdyTabPage *p = hdy_tab_view_get_nth_page (self, i);
 
-    pages = g_slist_prepend (pages, p);
+    hdy_tab_view_close_page (self, p);
   }
-
-  return hdy_tab_view_close_pages (self, pages);
 }
 
 /**
@@ -2365,19 +2330,16 @@ hdy_tab_view_close_pages_before (HdyTabView *self,
  *
  * TBD
  *
- * Returns: TBD
- *
  * Since: 1.2
  */
-gboolean
+void
 hdy_tab_view_close_pages_after (HdyTabView *self,
                                 HdyTabPage *page)
 {
-  GSList *pages = NULL;
   gint pos, i;
 
-  g_return_val_if_fail (HDY_IS_TAB_VIEW (self), FALSE);
-  g_return_val_if_fail (HDY_IS_TAB_PAGE (page), FALSE);
+  g_return_if_fail (HDY_IS_TAB_VIEW (self));
+  g_return_if_fail (HDY_IS_TAB_PAGE (page));
 
   pos = hdy_tab_view_get_page_position (self, page);
 
@@ -2387,10 +2349,8 @@ hdy_tab_view_close_pages_after (HdyTabView *self,
   for (i = self->n_pages - 1; i > pos; i--) {
     HdyTabPage *p = hdy_tab_view_get_nth_page (self, i);
 
-    pages = g_slist_prepend (pages, p);
+    hdy_tab_view_close_page (self, p);
   }
-
-  return hdy_tab_view_close_pages (self, pages);
 }
 
 /**
diff --git a/src/hdy-tab-view.h b/src/hdy-tab-view.h
index 37609f4e..000dc88a 100644
--- a/src/hdy-tab-view.h
+++ b/src/hdy-tab-view.h
@@ -164,20 +164,18 @@ HdyTabPage *hdy_tab_view_append_pinned  (HdyTabView *self,
                                          GtkWidget  *content);
 
 HDY_AVAILABLE_IN_ALL
-gboolean hdy_tab_view_close_page         (HdyTabView *self,
-                                          HdyTabPage *page);
-HDY_AVAILABLE_IN_ALL
-gboolean hdy_tab_view_close_pages        (HdyTabView *self,
-                                          GSList     *pages);
+gboolean hdy_tab_view_close_page (HdyTabView *self,
+                                  HdyTabPage *page);
+
 HDY_AVAILABLE_IN_ALL
-gboolean hdy_tab_view_close_other_pages  (HdyTabView *self,
-                                          HdyTabPage *page);
+void hdy_tab_view_close_other_pages  (HdyTabView *self,
+                                      HdyTabPage *page);
 HDY_AVAILABLE_IN_ALL
-gboolean hdy_tab_view_close_pages_before (HdyTabView *self,
-                                          HdyTabPage *page);
+void hdy_tab_view_close_pages_before (HdyTabView *self,
+                                      HdyTabPage *page);
 HDY_AVAILABLE_IN_ALL
-gboolean hdy_tab_view_close_pages_after  (HdyTabView *self,
-                                          HdyTabPage *page);
+void hdy_tab_view_close_pages_after  (HdyTabView *self,
+                                      HdyTabPage *page);
 
 HDY_AVAILABLE_IN_ALL
 gboolean hdy_tab_view_reorder_page     (HdyTabView *self,


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