[gnome-calendar/wip/cdavis/date-selector-tweaks: 2/2] event-editor: Make DateSelector an AdwEntryRow




commit 2459126456d5fffb569899b79739c0d7bfe6e155
Author: Christopher Davis <christopherdavis gnome org>
Date:   Thu Jul 7 14:06:57 2022 -0400

    event-editor: Make DateSelector an AdwEntryRow
    
    Also adjust placement of it in the editor dialog,
    and place the time selector in an AdwActionRow below.

 src/gui/event-editor/gcal-date-selector.c     | 30 ++++---------
 src/gui/event-editor/gcal-date-selector.h     |  3 +-
 src/gui/event-editor/gcal-date-selector.ui    | 44 ++++++++++--------
 src/gui/event-editor/gcal-schedule-section.ui | 64 ++++++++++-----------------
 4 files changed, 58 insertions(+), 83 deletions(-)
---
diff --git a/src/gui/event-editor/gcal-date-selector.c b/src/gui/event-editor/gcal-date-selector.c
index f3a18a97..88e0501e 100644
--- a/src/gui/event-editor/gcal-date-selector.c
+++ b/src/gui/event-editor/gcal-date-selector.c
@@ -29,7 +29,7 @@
 
 struct _GcalDateSelector
 {
-  GtkEntry     parent;
+  AdwEntryRow  parent;
 
   /* widgets */
   GtkWidget   *date_chooser;
@@ -38,7 +38,7 @@ struct _GcalDateSelector
   GSettings   *settings;
 };
 
-G_DEFINE_TYPE (GcalDateSelector, gcal_date_selector, GTK_TYPE_ENTRY);
+G_DEFINE_TYPE (GcalDateSelector, gcal_date_selector, ADW_TYPE_ENTRY_ROW);
 
 enum
 {
@@ -97,20 +97,6 @@ parse_date (GcalDateSelector *self)
   g_clear_pointer (&new_date, g_date_time_unref);
 }
 
-static void
-icon_pressed_cb (GcalDateSelector     *self,
-                 GtkEntryIconPosition  position,
-                 GdkEvent             *event)
-{
-  GdkRectangle icon_bounds;
-
-  gtk_entry_get_icon_area (GTK_ENTRY (self), position, &icon_bounds);
-
-  gtk_popover_set_pointing_to (GTK_POPOVER (self->date_selector_popover), &icon_bounds);
-
-  gtk_popover_popup (GTK_POPOVER (self->date_selector_popover));
-}
-
 static void
 on_contains_focus_changed_cb (GtkEventControllerFocus *focus_controller,
                               GParamSpec              *pspec,
@@ -205,16 +191,15 @@ gcal_date_selector_set_property (GObject      *object,
 }
 
 static void
-gcal_date_selector_activate (GtkEntry *entry)
+gcal_date_selector_activate (GcalDateSelector *self)
 {
-  parse_date (GCAL_DATE_SELECTOR (entry));
+  parse_date (GCAL_DATE_SELECTOR (self));
 }
 
 static void
 gcal_date_selector_class_init (GcalDateSelectorClass *klass)
 {
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-  GtkEntryClass *entry_class = GTK_ENTRY_CLASS (klass);
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
   g_type_ensure (GCAL_TYPE_DATE_CHOOSER);
@@ -226,8 +211,6 @@ gcal_date_selector_class_init (GcalDateSelectorClass *klass)
   widget_class->focus = gcal_date_selector_focus;
   widget_class->size_allocate = gcal_date_selector_size_allocate;
 
-  entry_class->activate = gcal_date_selector_activate;
-
   /**
    * GcalDateSelector::date:
    *
@@ -247,7 +230,6 @@ gcal_date_selector_class_init (GcalDateSelectorClass *klass)
   gtk_widget_class_bind_template_child (widget_class, GcalDateSelector, date_selector_popover);
 
   gtk_widget_class_bind_template_callback (widget_class, calendar_day_selected);
-  gtk_widget_class_bind_template_callback (widget_class, icon_pressed_cb);
   gtk_widget_class_bind_template_callback (widget_class, on_contains_focus_changed_cb);
 }
 
@@ -263,6 +245,10 @@ gcal_date_selector_init (GcalDateSelector *self)
                    self->date_chooser,
                    "show-week-numbers",
                    G_SETTINGS_BIND_DEFAULT);
+
+  g_signal_connect_swapped (gtk_editable_get_delegate (GTK_EDITABLE (self)),
+                            "activate", G_CALLBACK (gcal_date_selector_activate),
+                            self);
 }
 
 /* Public API */
diff --git a/src/gui/event-editor/gcal-date-selector.h b/src/gui/event-editor/gcal-date-selector.h
index 7da46bf9..13f364e7 100644
--- a/src/gui/event-editor/gcal-date-selector.h
+++ b/src/gui/event-editor/gcal-date-selector.h
@@ -20,12 +20,13 @@
 #define __GCAL_DATE_SELECTOR_H__
 
 #include <gtk/gtk.h>
+#include <libadwaita-1/adwaita.h>
 
 G_BEGIN_DECLS
 
 #define GCAL_TYPE_DATE_SELECTOR             (gcal_date_selector_get_type ())
 
-G_DECLARE_FINAL_TYPE (GcalDateSelector, gcal_date_selector, GCAL, DATE_SELECTOR, GtkEntry)
+G_DECLARE_FINAL_TYPE (GcalDateSelector, gcal_date_selector, GCAL, DATE_SELECTOR, AdwEntryRow)
 
 GtkWidget*       gcal_date_selector_new             (void);
 
diff --git a/src/gui/event-editor/gcal-date-selector.ui b/src/gui/event-editor/gcal-date-selector.ui
index 250cfd2c..6b937cca 100644
--- a/src/gui/event-editor/gcal-date-selector.ui
+++ b/src/gui/event-editor/gcal-date-selector.ui
@@ -1,11 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <template class="GcalDateSelector" parent="GtkEntry">
-    <property name="width-chars">11</property>
-    <property name="max-width-chars">11</property>
-    <property name="secondary-icon-name">pan-down-symbolic</property>
+  <template class="GcalDateSelector" parent="AdwEntryRow">
     <property name="input-hints">no-emoji</property>
-    <signal name="icon-press" handler="icon_pressed_cb" object="GcalDateSelector" swapped="no"/>
 
     <child>
       <object class="GtkEventControllerFocus">
@@ -13,21 +9,31 @@
       </object>
     </child>
 
-    <child>
-      <object class="GtkPopover" id="date_selector_popover">
-        <property name="position">bottom</property>
-        <property name="margin-top">12</property>
-        <property name="margin-bottom">12</property>
-        <property name="margin-start">12</property>
-        <property name="margin-end">12</property>
-        <child>
-          <object class="GcalDateChooser" id="date_chooser">
-            <property name="show_events">False</property>
-            <property name="show_selected_week">False</property>
-            <property name="show_week_numbers">True</property>
-            <signal name="day-selected" handler="calendar_day_selected" object="GcalDateSelector" 
swapped="yes"/>
+    <child type="suffix">
+      <object class="GtkMenuButton" id="date_selector_button">
+        <property name="valign">center</property>
+        <property name="icon-name">x-office-calendar-symbolic</property>
+        <property name="tooltip-text" translatable="yes">Pick Date</property>
+        <property name="popover">
+          <object class="GtkPopover" id="date_selector_popover">
+            <property name="position">bottom</property>
+            <property name="margin-top">12</property>
+            <property name="margin-bottom">12</property>
+            <property name="margin-start">12</property>
+            <property name="margin-end">12</property>
+            <child>
+              <object class="GcalDateChooser" id="date_chooser">
+                <property name="show_events">False</property>
+                <property name="show_selected_week">False</property>
+                <property name="show_week_numbers">True</property>
+                <signal name="day-selected" handler="calendar_day_selected" object="GcalDateSelector" 
swapped="yes"/>
+              </object>
+            </child>
           </object>
-        </child>
+        </property>
+        <style>
+          <class name="flat"/>
+        </style>
       </object>
     </child>
 
diff --git a/src/gui/event-editor/gcal-schedule-section.ui b/src/gui/event-editor/gcal-schedule-section.ui
index 60683e0e..896c4422 100644
--- a/src/gui/event-editor/gcal-schedule-section.ui
+++ b/src/gui/event-editor/gcal-schedule-section.ui
@@ -43,24 +43,20 @@
             </child>
 
             <child>
-              <object class="GtkBox">
-                <property name="hexpand">True</property>
-                <property name="halign">center</property>
-                <property name="margin-top">12</property>
-                <property name="margin-bottom">12</property>
-                <property name="margin-start">12</property>
-                <property name="margin-end">12</property>
-                <property name="spacing">6</property>
+              <object class="GcalDateSelector" id="start_date_selector">
+                <property name="title" translatable="yes">Start Date</property>
+                <signal name="notify::date" handler="sync_datetimes" object="GcalScheduleSection" 
swapped="yes" />
+              </object>
+            </child>
 
-                <child>
-                  <object class="GcalDateSelector" id="start_date_selector">
-                    <property name="valign">center</property>
-                    <signal name="notify::date" handler="sync_datetimes" object="GcalScheduleSection" 
swapped="yes" />
-                  </object>
-                </child>
+            <child>
+              <object class="AdwActionRow">
+                <property name="title" translatable="yes">Time</property>
 
                 <child>
                   <object class="GcalTimeSelector" id="start_time_selector">
+                    <property name="margin-top">12</property>
+                    <property name="margin-bottom">12</property>
                     <signal name="notify::time" handler="sync_datetimes" object="GcalScheduleSection" 
swapped="yes" />
                   </object>
                 </child>
@@ -86,24 +82,21 @@
             </child>
 
             <child>
-              <object class="GtkBox">
-                <property name="hexpand">True</property>
-                <property name="halign">center</property>
-                <property name="margin-top">12</property>
-                <property name="margin-bottom">12</property>
-                <property name="margin-start">12</property>
-                <property name="margin-end">12</property>
-                <property name="spacing">6</property>
+              <object class="GcalDateSelector" id="end_date_selector">
+                <property name="valign">center</property>
+                <property name="title" translatable="yes">End Date</property>
+                <signal name="notify::date" handler="sync_datetimes" object="GcalScheduleSection" 
swapped="yes" />
+              </object>
+            </child>
 
-                <child>
-                  <object class="GcalDateSelector" id="end_date_selector">
-                    <property name="valign">center</property>
-                    <signal name="notify::date" handler="sync_datetimes" object="GcalScheduleSection" 
swapped="yes" />
-                  </object>
-                </child>
+            <child>
+              <object class="AdwActionRow">
+                <property name="title" translatable="yes">Time</property>
 
                 <child>
                   <object class="GcalTimeSelector" id="end_time_selector">
+                    <property name="margin-top">12</property>
+                    <property name="margin-bottom">12</property>
                     <signal name="notify::time" handler="sync_datetimes" object="GcalScheduleSection" 
swapped="yes" />
                   </object>
                 </child>
@@ -183,18 +176,9 @@
 
         <!-- End Repeat Date -->
         <child>
-          <object class="AdwActionRow">
-            <property name="visible" bind-source="until_date_selector" bind-property="visible" 
bind-flags="default|sync-create" />
+          <object class = "GcalDateSelector" id="until_date_selector">
+            <property name="visible">False</property>
             <property name="title" translatable="yes">End Repeat Date</property>
-            <property name="activatable-widget">until_date_selector</property>
-
-            <child>
-              <object class = "GcalDateSelector" id="until_date_selector">
-                <property name="visible">False</property>
-                <property name="valign">center</property>
-              </object>
-            </child>
-
           </object>
         </child>
 
@@ -216,9 +200,7 @@
   <object class="GtkSizeGroup">
     <property name="mode">horizontal</property>
     <widgets>
-      <widget name="end_date_selector" />
       <widget name="end_time_selector" />
-      <widget name="start_date_selector" />
       <widget name="start_time_selector" />
     </widgets>
   </object>


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