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:
Georges Basile Stavracas Neto
2016-12-01 23:48:53 -02:00
parent 61f25b78db
commit a43df17b08
3 changed files with 29 additions and 22 deletions
+21 -17
View File
@@ -1,9 +1,8 @@
<?xml version="1.0"?>
<interface>
<template class="GcalWeekHeader" parent="GtkScrolledWindow">
<template class="GcalWeekHeader" parent="GtkGrid">
<property name="visible">True</property>
<property name="hexpand">True</property>
<property name="max-content-height">200</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
@@ -44,25 +43,30 @@
</object>
</child>
<child>
<object class="GtkViewport">
<object class="GtkOverlay">
<property name="visible">True</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkOverlay">
<object class="GtkDrawingArea" id="draw_area">
<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>
<object class="GtkDrawingArea" id="draw_area">
<object class="GtkViewport">
<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="GtkGrid" id="grid">
<property name="visible">True</property>
<property name="height-request">100</property>
<property name="column-homogeneous">True</property>
<property name="row-homogeneous">True</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkGrid" id="grid">
<property name="visible">True</property>
<property name="column-homogeneous">True</property>
<property name="row-homogeneous">True</property>
</object>
</child>
</object>
</child>
</object>
@@ -72,4 +76,4 @@
</object>
</child>
</template>
</interface>
</interface>
+7 -4
View File
@@ -31,13 +31,14 @@
struct _GcalWeekHeader
{
GtkScrolledWindow parent;
GtkGrid parent;
GtkWidget *grid;
GtkWidget *draw_area;
GtkWidget *month_label;
GtkWidget *week_label;
GtkWidget *year_label;
GtkWidget *scrolledwindow;
GcalManager *manager;
@@ -78,7 +79,7 @@ enum
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*
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);
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);
}
@@ -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, week_label);
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);
@@ -513,4 +516,4 @@ gcal_week_header_set_current_date (GcalWeekHeader *self,
update_headers (self);
gtk_widget_queue_draw (self->draw_area);
}
}
+1 -1
View File
@@ -29,7 +29,7 @@ G_BEGIN_DECLS
#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,
GcalManager *manager);