[libpanel] frame: add API to get/set frame sizes



commit 999b273b272b553a2cc342ead4c2cc81ea2fac54
Author: Christian Hergert <chergert redhat com>
Date:   Thu Sep 15 20:47:37 2022 -0700

    frame: add API to get/set frame sizes
    
    This is desired for restoring panel positions after restart.

 src/panel-frame.c           | 30 +++++++++++++++++++++++++
 src/panel-frame.h           | 53 +++++++++++++++++++++++++--------------------
 src/panel-resizer-private.h |  1 +
 src/panel-resizer.c         |  8 +++++++
 4 files changed, 68 insertions(+), 24 deletions(-)
---
diff --git a/src/panel-frame.c b/src/panel-frame.c
index 87e3125..9e60b6a 100644
--- a/src/panel-frame.c
+++ b/src/panel-frame.c
@@ -1415,3 +1415,33 @@ panel_frame_get_position (PanelFrame *self)
 
   return g_steal_pointer (&position);
 }
+
+int
+panel_frame_get_requested_size (PanelFrame *self)
+{
+  GtkWidget *resizer;
+
+  g_return_val_if_fail (PANEL_IS_FRAME (self), -1);
+
+  if (!(resizer = gtk_widget_get_ancestor (GTK_WIDGET (self), PANEL_TYPE_RESIZER)))
+    return -1;
+
+  return panel_resizer_get_drag_position (PANEL_RESIZER (resizer));
+}
+
+void
+panel_frame_set_requested_size (PanelFrame *self,
+                                int         requested_size)
+{
+  GtkWidget *resizer;
+
+  g_return_if_fail (PANEL_IS_FRAME (self));
+
+  if (!(resizer = gtk_widget_get_ancestor (GTK_WIDGET (self), PANEL_TYPE_RESIZER)))
+    {
+      g_warning_once ("Attempt to set requested size for unrooted frame");
+      return;
+    }
+
+  panel_resizer_set_drag_position (PANEL_RESIZER (resizer), requested_size);
+}
diff --git a/src/panel-frame.h b/src/panel-frame.h
index b049f5d..93a9456 100644
--- a/src/panel-frame.h
+++ b/src/panel-frame.h
@@ -40,44 +40,49 @@ struct _PanelFrameClass
 };
 
 PANEL_AVAILABLE_IN_ALL
-GtkWidget         *panel_frame_new               (void);
+GtkWidget         *panel_frame_new                (void);
 PANEL_AVAILABLE_IN_ALL
-gboolean           panel_frame_get_closeable     (PanelFrame       *self);
+gboolean           panel_frame_get_closeable      (PanelFrame       *self);
 PANEL_AVAILABLE_IN_ALL
-PanelFrameHeader  *panel_frame_get_header        (PanelFrame       *self);
+PanelFrameHeader  *panel_frame_get_header         (PanelFrame       *self);
 PANEL_AVAILABLE_IN_ALL
-void               panel_frame_set_header        (PanelFrame       *self,
-                                                  PanelFrameHeader *header);
+void               panel_frame_set_header         (PanelFrame       *self,
+                                                   PanelFrameHeader *header);
 PANEL_AVAILABLE_IN_ALL
-gboolean           panel_frame_get_empty         (PanelFrame       *self);
+gboolean           panel_frame_get_empty          (PanelFrame       *self);
 PANEL_AVAILABLE_IN_ALL
-void               panel_frame_add               (PanelFrame       *self,
-                                                  PanelWidget      *panel);
+void               panel_frame_add                (PanelFrame       *self,
+                                                   PanelWidget      *panel);
 PANEL_AVAILABLE_IN_ALL
-void               panel_frame_add_before        (PanelFrame       *self,
-                                                  PanelWidget      *panel,
-                                                  PanelWidget      *sibling);
+void               panel_frame_add_before         (PanelFrame       *self,
+                                                   PanelWidget      *panel,
+                                                   PanelWidget      *sibling);
 PANEL_AVAILABLE_IN_ALL
-void               panel_frame_remove            (PanelFrame       *self,
-                                                  PanelWidget      *panel);
+void               panel_frame_remove             (PanelFrame       *self,
+                                                   PanelWidget      *panel);
 PANEL_AVAILABLE_IN_ALL
-void               panel_frame_set_visible_child (PanelFrame       *self,
-                                                  PanelWidget      *widget);
+void               panel_frame_set_visible_child  (PanelFrame       *self,
+                                                   PanelWidget      *widget);
 PANEL_AVAILABLE_IN_ALL
-PanelWidget       *panel_frame_get_visible_child (PanelFrame       *self);
+PanelWidget       *panel_frame_get_visible_child  (PanelFrame       *self);
 PANEL_AVAILABLE_IN_ALL
-PanelWidget       *panel_frame_get_page          (PanelFrame       *self,
-                                                  guint             n);
+PanelWidget       *panel_frame_get_page           (PanelFrame       *self,
+                                                   guint             n);
 PANEL_AVAILABLE_IN_ALL
-GtkSelectionModel *panel_frame_get_pages         (PanelFrame       *self);
+GtkSelectionModel *panel_frame_get_pages          (PanelFrame       *self);
 PANEL_AVAILABLE_IN_ALL
-guint              panel_frame_get_n_pages       (PanelFrame       *self);
+guint              panel_frame_get_n_pages        (PanelFrame       *self);
 PANEL_AVAILABLE_IN_ALL
-GtkWidget         *panel_frame_get_placeholder   (PanelFrame       *self);
+GtkWidget         *panel_frame_get_placeholder    (PanelFrame       *self);
 PANEL_AVAILABLE_IN_ALL
-void               panel_frame_set_placeholder   (PanelFrame       *self,
-                                                  GtkWidget        *placeholder);
+void               panel_frame_set_placeholder    (PanelFrame       *self,
+                                                   GtkWidget        *placeholder);
 PANEL_AVAILABLE_IN_ALL
-PanelPosition     *panel_frame_get_position      (PanelFrame       *self);
+PanelPosition     *panel_frame_get_position       (PanelFrame       *self);
+PANEL_AVAILABLE_IN_ALL
+int                panel_frame_get_requested_size (PanelFrame       *self);
+PANEL_AVAILABLE_IN_ALL
+void               panel_frame_set_requested_size (PanelFrame       *self,
+                                                   int               requested_size);
 
 G_END_DECLS
diff --git a/src/panel-resizer-private.h b/src/panel-resizer-private.h
index e365c39..2ca4a5e 100644
--- a/src/panel-resizer-private.h
+++ b/src/panel-resizer-private.h
@@ -38,6 +38,7 @@ GtkWidget *panel_resizer_get_child         (PanelResizer *self);
 void       panel_resizer_set_child         (PanelResizer *self,
                                             GtkWidget    *child);
 GtkWidget *panel_resizer_get_handle        (PanelResizer *self);
+int        panel_resizer_get_drag_position (PanelResizer *self);
 void       panel_resizer_set_drag_position (PanelResizer *self,
                                             int           drag_position);
 
diff --git a/src/panel-resizer.c b/src/panel-resizer.c
index 8e07595..3fe31ac 100644
--- a/src/panel-resizer.c
+++ b/src/panel-resizer.c
@@ -526,6 +526,14 @@ panel_resizer_get_handle (PanelResizer *self)
   return GTK_WIDGET (self->handle);
 }
 
+int
+panel_resizer_get_drag_position (PanelResizer *self)
+{
+  g_return_val_if_fail (PANEL_IS_RESIZER (self), -1);
+
+  return self->drag_position_set ? self->drag_position : -1;
+}
+
 void
 panel_resizer_set_drag_position (PanelResizer *self,
                                  int           drag_position)


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