[gnome-calendar/gbsneto/gtk4: 2/34] event-editor/date-chooser: Port to GTK4
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/gbsneto/gtk4: 2/34] event-editor/date-chooser: Port to GTK4
- Date: Wed, 2 Feb 2022 01:47:50 +0000 (UTC)
commit c7b3de4e90d4da79b9d76268a185607ebdec8fc4
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Mon Jan 10 16:42:11 2022 -0300
event-editor/date-chooser: Port to GTK4
src/gui/event-editor/gcal-date-chooser.c | 68 +++++++++++++------------------
src/gui/event-editor/gcal-date-chooser.h | 4 +-
src/gui/event-editor/gcal-date-chooser.ui | 30 +++++++-------
3 files changed, 45 insertions(+), 57 deletions(-)
---
diff --git a/src/gui/event-editor/gcal-date-chooser.c b/src/gui/event-editor/gcal-date-chooser.c
index 949a138d..5dc17a8c 100644
--- a/src/gui/event-editor/gcal-date-chooser.c
+++ b/src/gui/event-editor/gcal-date-chooser.c
@@ -30,7 +30,7 @@
struct _GcalDateChooser
{
- GtkBin parent;
+ AdwBin parent;
GtkWidget *month_choice;
GtkWidget *year_choice;
@@ -57,7 +57,7 @@ struct _GcalDateChooser
GDestroyNotify day_options_destroy;
};
-G_DEFINE_TYPE (GcalDateChooser, gcal_date_chooser, GTK_TYPE_BIN)
+G_DEFINE_TYPE (GcalDateChooser, gcal_date_chooser, ADW_TYPE_BIN)
enum
{
@@ -410,49 +410,38 @@ multi_choice_changed (GcalDateChooser *self)
gcal_date_chooser_set_date (self, date);
}
-static void
-calendar_drag_data_received (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection_data,
- guint info,
- guint time)
-{
- GcalDateChooser *self = GCAL_DATE_CHOOSER (widget);
- gchar *text;
- GDate *gdate;
+static gboolean
+on_drop_target_drop_cb (GtkDropTarget *target,
+ const GValue *value,
+ double x,
+ double y,
+ GcalDateChooser *self)
+{
+ g_autoptr (GDateTime) date = NULL;
+ g_autoptr (GDate) gdate = NULL;
+ const gchar *text;
gint year, month, day;
- GDateTime *date;
gdate = g_date_new ();
- text = (gchar *)gtk_selection_data_get_text (selection_data);
+ text = g_value_get_string (value);
+
if (text)
- {
- g_date_set_parse (gdate, text);
- g_free (text);
- }
+ g_date_set_parse (gdate, text);
+
if (!g_date_valid (gdate))
- {
- g_date_free (gdate);
- gtk_drag_finish (context, FALSE, FALSE, time);
- return;
- }
+ return FALSE;
year = g_date_get_year (gdate);
month = g_date_get_month (gdate);
day = g_date_get_day (gdate);
- g_date_free (gdate);
-
- gtk_drag_finish (context, TRUE, FALSE, time);
-
if (!self->show_heading || self->no_month_change)
g_date_time_get_ymd (self->date, &year, &month, NULL);
date = g_date_time_new_local (year, month, day, 1, 1, 1);
gcal_date_chooser_set_date (self, date);
- g_date_time_unref (date);
+
+ return TRUE;
}
static void
@@ -483,8 +472,6 @@ gcal_date_chooser_class_init (GcalDateChooserClass *class)
object_class->set_property = calendar_set_property;
object_class->get_property = calendar_get_property;
- widget_class->drag_data_received = calendar_drag_data_received;
-
gtk_widget_class_set_template_from_resource (widget_class,
"/org/gnome/calendar/ui/event-editor/gcal-date-chooser.ui");
properties[PROP_DATE] = g_param_spec_boxed ("date",
@@ -548,6 +535,7 @@ gcal_date_chooser_class_init (GcalDateChooserClass *class)
static void
gcal_date_chooser_init (GcalDateChooser *self)
{
+ GtkDropTarget *drop_target;
GtkWidget *label;
gint row, col;
gint year, month;
@@ -599,14 +587,14 @@ gcal_date_chooser_init (GcalDateChooser *self)
*/
self->corner = gtk_stack_new ();
gtk_grid_attach (GTK_GRID (self->grid), self->corner, -1, -1, 1, 1);
+
label = gtk_label_new ("");
- gtk_widget_show (label);
- gtk_style_context_add_class (gtk_widget_get_style_context (label), "weekday");
- gtk_container_add (GTK_CONTAINER (self->corner), label);
+ gtk_widget_add_css_class (label, "weekday");
+ gtk_stack_add_named (GTK_STACK (self->corner), label, "weekday");
label = gtk_label_new ("99");
- gtk_style_context_add_class (gtk_widget_get_style_context (label), "weeknum");
- gtk_container_add (GTK_CONTAINER (self->corner), label);
+ gtk_widget_add_css_class (label, "weeknum");
+ gtk_stack_add_named (GTK_STACK (self->corner), label, "weeknum");
self->day_grid = g_object_new (GTK_TYPE_GRID,
"valign", GTK_ALIGN_FILL,
@@ -643,8 +631,10 @@ gcal_date_chooser_init (GcalDateChooser *self)
gcal_multi_choice_set_value (GCAL_MULTI_CHOICE (self->month_choice), month - 1);
calendar_update_selected_day_display (self);
- gtk_drag_dest_set (GTK_WIDGET (self), GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY);
- gtk_drag_dest_add_text_targets (GTK_WIDGET (self));
+ drop_target = gtk_drop_target_new (G_TYPE_STRING, GDK_ACTION_COPY);
+ gtk_drop_target_set_preload (drop_target, TRUE);
+ g_signal_connect (drop_target, "drop", G_CALLBACK (on_drop_target_drop_cb), NULL);
+ gtk_widget_add_controller (GTK_WIDGET (self), GTK_EVENT_CONTROLLER (drop_target));
}
GtkWidget*
diff --git a/src/gui/event-editor/gcal-date-chooser.h b/src/gui/event-editor/gcal-date-chooser.h
index cbbdf1d0..d04f3e91 100644
--- a/src/gui/event-editor/gcal-date-chooser.h
+++ b/src/gui/event-editor/gcal-date-chooser.h
@@ -18,7 +18,7 @@
#ifndef __GCAL_DATE_CHOOSER_H__
#define __GCAL_DATE_CHOOSER_H__
-#include <gtk/gtk.h>
+#include <adwaita.h>
G_BEGIN_DECLS
@@ -32,7 +32,7 @@ typedef enum
#define GCAL_TYPE_DATE_CHOOSER (gcal_date_chooser_get_type ())
-G_DECLARE_FINAL_TYPE (GcalDateChooser, gcal_date_chooser, GCAL, DATE_CHOOSER, GtkBin)
+G_DECLARE_FINAL_TYPE (GcalDateChooser, gcal_date_chooser, GCAL, DATE_CHOOSER, AdwBin)
typedef GcalDateChooserDayOptions (*GcalDateChooserDayOptionsCallback) (GcalDateChooser *self,
GDateTime *date,
diff --git a/src/gui/event-editor/gcal-date-chooser.ui b/src/gui/event-editor/gcal-date-chooser.ui
index db203431..15093450 100644
--- a/src/gui/event-editor/gcal-date-chooser.ui
+++ b/src/gui/event-editor/gcal-date-chooser.ui
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="3.16"/>
- <template class="GcalDateChooser" parent="GtkBin">
+ <template class="GcalDateChooser" parent="AdwBin">
<child>
<object class="GtkGrid">
- <property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GcalMultiChoice" id="month_choice">
@@ -15,11 +14,11 @@
<property name="animate">False</property>
<property name="value">0</property>
<signal name="notify::value" handler="multi_choice_changed" swapped="yes"/>
+ <layout>
+ <property name="column">0</property>
+ <property name="row">0</property>
+ </layout>
</object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">0</property>
- </packing>
</child>
<child>
<object class="GcalMultiChoice" id="year_choice">
@@ -30,23 +29,22 @@
<property name="animate">False</property>
<property name="value">0</property>
<signal name="notify::value" handler="multi_choice_changed" swapped="yes"/>
+ <layout>
+ <property name="column">1</property>
+ <property name="row">0</property>
+ </layout>
</object>
- <packing>
- <property name="left-attach">1</property>
- <property name="top-attach">0</property>
- </packing>
</child>
<child>
<object class="GtkGrid" id="grid">
- <property name="visible">True</property>
<property name="row-homogeneous">True</property>
<property name="column-homogeneous">True</property>
+ <layout>
+ <property name="column">0</property>
+ <property name="column-span">2</property>
+ <property name="row">1</property>
+ </layout>
</object>
- <packing>
- <property name="left-attach">0</property>
- <property name="top-attach">1</property>
- <property name="width">2</property>
- </packing>
</child>
</object>
</child>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]