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
*
* Copyright (C) 2015 Red Hat, Inc.
* Copyright (C) 2022 Purism SPC
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -25,33 +26,15 @@
#include <stdlib.h>
#include <langinfo.h>
enum {
SELECTED,
LAST_DAY_SIGNAL
};
static guint signals[LAST_DAY_SIGNAL] = { 0, };
struct _GcalDateChooserDay
{
AdwBin parent;
GtkButton parent;
GtkWidget *label;
GDateTime *date;
};
G_DEFINE_TYPE (GcalDateChooserDay, gcal_date_chooser_day, ADW_TYPE_BIN)
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);
}
G_DEFINE_TYPE (GcalDateChooserDay, gcal_date_chooser_day, GTK_TYPE_BUTTON)
static void
gcal_date_chooser_day_dispose (GObject *object)
@@ -66,40 +49,23 @@ gcal_date_chooser_day_dispose (GObject *object)
static void
gcal_date_chooser_day_class_init (GcalDateChooserDayClass *class)
{
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
GObjectClass *object_class = G_OBJECT_CLASS (class);
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
gcal_date_chooser_day_init (GcalDateChooserDay *self)
{
GtkGesture *click_gesture;
GtkWidget *widget = GTK_WIDGET (self);
gtk_widget_set_halign (widget, GTK_ALIGN_CENTER);
gtk_widget_set_valign (widget, GTK_ALIGN_CENTER);
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, "flat");
self->label = gtk_label_new ("");
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_vexpand (self->label, TRUE);
adw_bin_set_child (ADW_BIN (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);
gtk_button_set_child (GTK_BUTTON (self), self->label);
}
GtkWidget*
@@ -160,8 +116,16 @@ void
gcal_date_chooser_day_set_selected (GcalDateChooserDay *self,
gboolean selected)
{
if (selected)
gtk_widget_set_state_flags (GTK_WIDGET (self), GTK_STATE_FLAG_SELECTED, FALSE);
GtkWidget *widget = GTK_WIDGET (self);
if (G_UNLIKELY (selected))
{
gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_SELECTED, FALSE);
gtk_widget_remove_css_class (widget, "flat");
}
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
* Copyright (C) 2015 Red Hat, Inc.
* Copyright (C) 2022 Purism SPC
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -17,12 +18,12 @@
#pragma once
#include <adwaita.h>
#include <gtk/gtk.h>
G_BEGIN_DECLS
#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);
+1 -1
View File
@@ -579,7 +579,7 @@ gcal_date_chooser_init (GcalDateChooser *self)
self->days[row][col] = gcal_date_chooser_day_new ();
g_signal_connect_object (self->days[row][col],
"selected",
"clicked",
G_CALLBACK (day_selected_cb),
self,
0);
+14 -34
View File
@@ -182,50 +182,30 @@ datechooser .weekday:backdrop {
}
/* days */
datechooser day {
transition-property: background-color;
transition-duration: 200ms;
datechooser button.day {
font-size: 10pt;
font-weight: normal;
margin: 3px;
min-height: 28px;
min-width: 28px;
transition: none;
}
datechooser day label {
transition-property: color;
transition-duration: 200ms;
datechooser button.day:selected {
background-color: @accent_bg_color;
color: @accent_fg_color;
font-weight: bold;
}
datechooser day {
min-height: 32px;
min-width: 32px;
border-radius: 50%;
}
datechooser day.other-month:not(:hover),
datechooser day.other-month:backdrop {
datechooser button.day.other-month:not(:hover),
datechooser button.day.other-month:backdrop {
color: alpha(currentColor, 0.1);
}
/* avoid the theme interfering with label colors */
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) {
datechooser button.day.other-month:hover:not(:backdrop) {
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 {
font-size: 16pt;
font-weight: bold;