[libpanel] frame: add API to get/set frame sizes
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libpanel] frame: add API to get/set frame sizes
- Date: Fri, 16 Sep 2022 03:47:44 +0000 (UTC)
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]