week-header: turn into a GtkGrid
If the header is a GtkScrolledWindow, all the content (including the top labels and week names) are scrolled. This is a wrong behavior, since only the events should be scrollable. Fix that by making GcalWeekHeader a GtkGrid, and adding the scrolled window in the correct position.
This commit is contained in:
+21
-17
@@ -1,9 +1,8 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<interface>
|
<interface>
|
||||||
<template class="GcalWeekHeader" parent="GtkScrolledWindow">
|
<template class="GcalWeekHeader" parent="GtkGrid">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="hexpand">True</property>
|
<property name="hexpand">True</property>
|
||||||
<property name="max-content-height">200</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkGrid">
|
<object class="GtkGrid">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
@@ -44,25 +43,30 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkViewport">
|
<object class="GtkOverlay">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="shadow_type">none</property>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkOverlay">
|
<object class="GtkDrawingArea" id="draw_area">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
<property name="height-request">100</property>
|
||||||
|
<signal name="draw" handler="gcal_week_header_draw" object="GcalWeekHeader" swapped="yes"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child type="overlay">
|
||||||
|
<object class="GtkScrolledWindow" id="scrolledwindow">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="max-content-height">150</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkDrawingArea" id="draw_area">
|
<object class="GtkViewport">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="height-request">100</property>
|
<property name="shadow_type">none</property>
|
||||||
<signal name="draw" handler="gcal_week_header_draw" object="GcalWeekHeader" swapped="yes"/>
|
<child>
|
||||||
</object>
|
<object class="GtkGrid" id="grid">
|
||||||
</child>
|
<property name="visible">True</property>
|
||||||
<child type="overlay">
|
<property name="column-homogeneous">True</property>
|
||||||
<object class="GtkGrid" id="grid">
|
<property name="row-homogeneous">True</property>
|
||||||
<property name="visible">True</property>
|
</object>
|
||||||
<property name="height-request">100</property>
|
</child>
|
||||||
<property name="column-homogeneous">True</property>
|
|
||||||
<property name="row-homogeneous">True</property>
|
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
@@ -72,4 +76,4 @@
|
|||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</template>
|
</template>
|
||||||
</interface>
|
</interface>
|
||||||
|
|||||||
@@ -31,13 +31,14 @@
|
|||||||
|
|
||||||
struct _GcalWeekHeader
|
struct _GcalWeekHeader
|
||||||
{
|
{
|
||||||
GtkScrolledWindow parent;
|
GtkGrid parent;
|
||||||
|
|
||||||
GtkWidget *grid;
|
GtkWidget *grid;
|
||||||
GtkWidget *draw_area;
|
GtkWidget *draw_area;
|
||||||
GtkWidget *month_label;
|
GtkWidget *month_label;
|
||||||
GtkWidget *week_label;
|
GtkWidget *week_label;
|
||||||
GtkWidget *year_label;
|
GtkWidget *year_label;
|
||||||
|
GtkWidget *scrolledwindow;
|
||||||
|
|
||||||
GcalManager *manager;
|
GcalManager *manager;
|
||||||
|
|
||||||
@@ -78,7 +79,7 @@ enum
|
|||||||
PROP_ACTIVE_DATE
|
PROP_ACTIVE_DATE
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (GcalWeekHeader, gcal_week_header, GTK_TYPE_SCROLLED_WINDOW);
|
G_DEFINE_TYPE (GcalWeekHeader, gcal_week_header, GTK_TYPE_GRID);
|
||||||
|
|
||||||
static GDateTime*
|
static GDateTime*
|
||||||
get_start_of_week (GcalWeekHeader *self)
|
get_start_of_week (GcalWeekHeader *self)
|
||||||
@@ -290,7 +291,8 @@ gcal_week_header_size_allocate (GtkWidget *widget,
|
|||||||
gtk_style_context_get (context, state, "font", &bold_font, NULL);
|
gtk_style_context_get (context, state, "font", &bold_font, NULL);
|
||||||
pango_font_description_set_weight (bold_font, PANGO_WEIGHT_SEMIBOLD);
|
pango_font_description_set_weight (bold_font, PANGO_WEIGHT_SEMIBOLD);
|
||||||
|
|
||||||
gtk_widget_set_margin_top (self->grid, (4 * pango_font_description_get_size (bold_font)) / PANGO_SCALE);
|
gtk_widget_set_margin_top (self->scrolledwindow,
|
||||||
|
(4 * pango_font_description_get_size (bold_font)) / PANGO_SCALE);
|
||||||
|
|
||||||
GTK_WIDGET_CLASS (gcal_week_header_parent_class)->size_allocate (widget, alloc);
|
GTK_WIDGET_CLASS (gcal_week_header_parent_class)->size_allocate (widget, alloc);
|
||||||
}
|
}
|
||||||
@@ -456,6 +458,7 @@ gcal_week_header_class_init (GcalWeekHeaderClass *kclass)
|
|||||||
gtk_widget_class_bind_template_child (widget_class, GcalWeekHeader, year_label);
|
gtk_widget_class_bind_template_child (widget_class, GcalWeekHeader, year_label);
|
||||||
gtk_widget_class_bind_template_child (widget_class, GcalWeekHeader, week_label);
|
gtk_widget_class_bind_template_child (widget_class, GcalWeekHeader, week_label);
|
||||||
gtk_widget_class_bind_template_child (widget_class, GcalWeekHeader, draw_area);
|
gtk_widget_class_bind_template_child (widget_class, GcalWeekHeader, draw_area);
|
||||||
|
gtk_widget_class_bind_template_child (widget_class, GcalWeekHeader, scrolledwindow);
|
||||||
|
|
||||||
gtk_widget_class_bind_template_callback (widget_class, gcal_week_header_draw);
|
gtk_widget_class_bind_template_callback (widget_class, gcal_week_header_draw);
|
||||||
|
|
||||||
@@ -513,4 +516,4 @@ gcal_week_header_set_current_date (GcalWeekHeader *self,
|
|||||||
update_headers (self);
|
update_headers (self);
|
||||||
|
|
||||||
gtk_widget_queue_draw (self->draw_area);
|
gtk_widget_queue_draw (self->draw_area);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
#define GCAL_TYPE_WEEK_HEADER (gcal_week_header_get_type())
|
#define GCAL_TYPE_WEEK_HEADER (gcal_week_header_get_type())
|
||||||
|
|
||||||
G_DECLARE_FINAL_TYPE (GcalWeekHeader, gcal_week_header, GCAL, WEEK_HEADER, GtkScrolledWindow)
|
G_DECLARE_FINAL_TYPE (GcalWeekHeader, gcal_week_header, GCAL, WEEK_HEADER, GtkGrid)
|
||||||
|
|
||||||
void gcal_week_header_set_manager (GcalWeekHeader *self,
|
void gcal_week_header_set_manager (GcalWeekHeader *self,
|
||||||
GcalManager *manager);
|
GcalManager *manager);
|
||||||
|
|||||||
Reference in New Issue
Block a user