date-chooser-day: Make it a button
This stops reimplementing a flat button and use GtkButton directly instead.
This commit is contained in:
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user