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"?>
|
||||
<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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user