date-chooser-day: Make it a button

This stops reimplementing a flat button and use GtkButton directly
instead.
This commit is contained in:
Adrien Plazas
2022-06-16 09:29:16 +02:00
parent 9c641fa597
commit f9c4501d6c
4 changed files with 35 additions and 90 deletions
+17 -53
View File
@@ -1,6 +1,7 @@
/* GTK - The GIMP Toolkit /* GTK - The GIMP Toolkit
* *
* Copyright (C) 2015 Red Hat, Inc. * Copyright (C) 2015 Red Hat, Inc.
* Copyright (C) 2022 Purism SPC
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -25,33 +26,15 @@
#include <stdlib.h> #include <stdlib.h>
#include <langinfo.h> #include <langinfo.h>
enum {
SELECTED,
LAST_DAY_SIGNAL
};
static guint signals[LAST_DAY_SIGNAL] = { 0, };
struct _GcalDateChooserDay struct _GcalDateChooserDay
{ {
AdwBin parent; GtkButton parent;
GtkWidget *label; GtkWidget *label;
GDateTime *date; GDateTime *date;
}; };
G_DEFINE_TYPE (GcalDateChooserDay, gcal_date_chooser_day, ADW_TYPE_BIN) G_DEFINE_TYPE (GcalDateChooserDay, gcal_date_chooser_day, GTK_TYPE_BUTTON)
static void
day_pressed (GtkGestureClick *click_gesture,
gint n_press,
gdouble x,
gdouble y,
GcalDateChooserDay *self)
{
if (n_press == 1)
g_signal_emit (self, signals[SELECTED], 0);
}
static void static void
gcal_date_chooser_day_dispose (GObject *object) gcal_date_chooser_day_dispose (GObject *object)
@@ -66,40 +49,23 @@ gcal_date_chooser_day_dispose (GObject *object)
static void static void
gcal_date_chooser_day_class_init (GcalDateChooserDayClass *class) gcal_date_chooser_day_class_init (GcalDateChooserDayClass *class)
{ {
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
GObjectClass *object_class = G_OBJECT_CLASS (class); GObjectClass *object_class = G_OBJECT_CLASS (class);
object_class->dispose = gcal_date_chooser_day_dispose; object_class->dispose = gcal_date_chooser_day_dispose;
signals[SELECTED] = g_signal_new ("selected",
GCAL_TYPE_DATE_CHOOSER_DAY,
G_SIGNAL_RUN_FIRST,
0,
NULL,
NULL,
NULL,
G_TYPE_NONE, 0);
gtk_widget_class_set_css_name (widget_class, "day");
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_space, 0, "selected", NULL);
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_Return, 0, "selected", NULL);
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_ISO_Enter, 0, "selected", NULL);
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_KP_Enter, 0, "selected", NULL);
gtk_widget_class_add_binding_signal (widget_class, GDK_KEY_KP_Space, 0, "selected", NULL);
} }
static void static void
gcal_date_chooser_day_init (GcalDateChooserDay *self) gcal_date_chooser_day_init (GcalDateChooserDay *self)
{ {
GtkGesture *click_gesture;
GtkWidget *widget = GTK_WIDGET (self); GtkWidget *widget = GTK_WIDGET (self);
gtk_widget_set_halign (widget, GTK_ALIGN_CENTER); gtk_widget_set_halign (widget, GTK_ALIGN_CENTER);
gtk_widget_set_valign (widget, GTK_ALIGN_CENTER); gtk_widget_set_valign (widget, GTK_ALIGN_CENTER);
gtk_widget_set_can_focus (widget, TRUE); gtk_widget_set_can_focus (widget, TRUE);
gtk_widget_add_css_class (widget, "circular");
gtk_widget_add_css_class (widget, "day"); gtk_widget_add_css_class (widget, "day");
gtk_widget_add_css_class (widget, "flat");
self->label = gtk_label_new (""); self->label = gtk_label_new ("");
gtk_widget_set_halign (self->label, GTK_ALIGN_CENTER); gtk_widget_set_halign (self->label, GTK_ALIGN_CENTER);
@@ -107,17 +73,7 @@ gcal_date_chooser_day_init (GcalDateChooserDay *self)
gtk_widget_set_hexpand (self->label, TRUE); gtk_widget_set_hexpand (self->label, TRUE);
gtk_widget_set_vexpand (self->label, TRUE); gtk_widget_set_vexpand (self->label, TRUE);
adw_bin_set_child (ADW_BIN (self), self->label); gtk_button_set_child (GTK_BUTTON (self), self->label);
click_gesture = gtk_gesture_click_new ();
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (click_gesture), 0);
gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (click_gesture));
g_signal_connect_object (click_gesture,
"pressed",
G_CALLBACK (day_pressed),
self,
0);
} }
GtkWidget* GtkWidget*
@@ -160,8 +116,16 @@ void
gcal_date_chooser_day_set_selected (GcalDateChooserDay *self, gcal_date_chooser_day_set_selected (GcalDateChooserDay *self,
gboolean selected) gboolean selected)
{ {
if (selected) GtkWidget *widget = GTK_WIDGET (self);
gtk_widget_set_state_flags (GTK_WIDGET (self), GTK_STATE_FLAG_SELECTED, FALSE);
if (G_UNLIKELY (selected))
{
gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_SELECTED, FALSE);
gtk_widget_remove_css_class (widget, "flat");
}
else else
gtk_widget_unset_state_flags (GTK_WIDGET (self), GTK_STATE_FLAG_SELECTED); {
gtk_widget_unset_state_flags (widget, GTK_STATE_FLAG_SELECTED);
gtk_widget_add_css_class (widget, "flat");
}
} }
+3 -2
View File
@@ -1,5 +1,6 @@
/* GTK - The GIMP Toolkit /* GTK - The GIMP Toolkit
* Copyright (C) 2015 Red Hat, Inc. * Copyright (C) 2015 Red Hat, Inc.
* Copyright (C) 2022 Purism SPC
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@@ -17,12 +18,12 @@
#pragma once #pragma once
#include <adwaita.h> #include <gtk/gtk.h>
G_BEGIN_DECLS G_BEGIN_DECLS
#define GCAL_TYPE_DATE_CHOOSER_DAY (gcal_date_chooser_day_get_type()) #define GCAL_TYPE_DATE_CHOOSER_DAY (gcal_date_chooser_day_get_type())
G_DECLARE_FINAL_TYPE (GcalDateChooserDay, gcal_date_chooser_day, GCAL, DATE_CHOOSER_DAY, AdwBin) G_DECLARE_FINAL_TYPE (GcalDateChooserDay, gcal_date_chooser_day, GCAL, DATE_CHOOSER_DAY, GtkButton)
GtkWidget* gcal_date_chooser_day_new (void); GtkWidget* gcal_date_chooser_day_new (void);
+1 -1
View File
@@ -579,7 +579,7 @@ gcal_date_chooser_init (GcalDateChooser *self)
self->days[row][col] = gcal_date_chooser_day_new (); self->days[row][col] = gcal_date_chooser_day_new ();
g_signal_connect_object (self->days[row][col], g_signal_connect_object (self->days[row][col],
"selected", "clicked",
G_CALLBACK (day_selected_cb), G_CALLBACK (day_selected_cb),
self, self,
0); 0);
+14 -34
View File
@@ -182,50 +182,30 @@ datechooser .weekday:backdrop {
} }
/* days */ /* days */
datechooser day { datechooser button.day {
transition-property: background-color; font-size: 10pt;
transition-duration: 200ms; font-weight: normal;
margin: 3px;
min-height: 28px;
min-width: 28px;
transition: none;
} }
datechooser day label { datechooser button.day:selected {
transition-property: color; background-color: @accent_bg_color;
transition-duration: 200ms; color: @accent_fg_color;
font-weight: bold;
} }
datechooser day { datechooser button.day.other-month:not(:hover),
min-height: 32px; datechooser button.day.other-month:backdrop {
min-width: 32px;
border-radius: 50%;
}
datechooser day.other-month:not(:hover),
datechooser day.other-month:backdrop {
color: alpha(currentColor, 0.1); color: alpha(currentColor, 0.1);
} }
/* avoid the theme interfering with label colors */ datechooser button.day.other-month:hover:not(:backdrop) {
datechooser day:selected label,
datechooser day.other-month label:hover,
datechooser day.other-month label:backdrop {
color: currentColor;
}
/* hovered days style */
datechooser day:hover:not(:backdrop) {
background-color: alpha(currentColor, 0.1);
}
datechooser day.other-month:hover:not(:backdrop) {
color: @insensitive_fg_color; color: @insensitive_fg_color;
} }
datechooser day:selected,
datechooser day:selected:hover {
color: @accent_fg_color;
background-color: @accent_bg_color;
font-weight: bold;
}
label.month-name { label.month-name {
font-size: 16pt; font-size: 16pt;
font-weight: bold; font-weight: bold;