view: Move weather API to interface GcalView
This allows us to get rid of similar code.
This commit is contained in:
committed by
Georges Basile Stavracas Neto
parent
d13473d3bc
commit
d51d1ea2cd
@@ -56,6 +56,18 @@ gcal_view_default_init (GcalViewInterface *iface)
|
||||
GCAL_TYPE_MANAGER,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* GcalView::weather-service:
|
||||
*
|
||||
* The #GcalWeatherService of the view.
|
||||
*/
|
||||
g_object_interface_install_property (iface,
|
||||
g_param_spec_object ("weather-service",
|
||||
"The weather service",
|
||||
"The weather service of the view",
|
||||
GCAL_TYPE_WEATHER_SERVICE,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
/**
|
||||
* GcalView::create-event:
|
||||
*
|
||||
@@ -125,6 +137,87 @@ gcal_view_get_manager (GcalView *self)
|
||||
return manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_view_get_weather_service:
|
||||
* @self: The #GcalView instance.
|
||||
* @service: (nullable): The weather service to query.
|
||||
*
|
||||
* Sets the service to query for weather reports.
|
||||
*/
|
||||
GcalWeatherService*
|
||||
gcal_view_get_weather_service (GcalView *self)
|
||||
{
|
||||
GcalWeatherService *service; /* unowned */
|
||||
|
||||
g_return_val_if_fail (GCAL_IS_VIEW (self), NULL);
|
||||
|
||||
g_object_get (self, "weather-service", &service, NULL);
|
||||
g_object_unref (service);
|
||||
|
||||
return service;
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_view_set_weather_service:
|
||||
* @self: The #GcalView instance.
|
||||
*
|
||||
* Returns: (transfer none): The internal weather service object.
|
||||
*/
|
||||
void
|
||||
gcal_view_set_weather_service (GcalView *self,
|
||||
GcalWeatherService *service)
|
||||
{
|
||||
g_return_if_fail (GCAL_IS_VIEW (self));
|
||||
g_return_if_fail (service == NULL || GCAL_IS_WEATHER_SERVICE (service));
|
||||
|
||||
g_object_set (self, "weather-service", &service, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_view_set_weather_service_impl_helper:
|
||||
* @old_service: The views weather service field.
|
||||
* @new_service: (nullable): The new weather service to use.
|
||||
* @update_func: The function to call after updating weather.
|
||||
* @weather_changed_cb: The views "weather-changed" handler
|
||||
* @data: The data to pass to @update_func and @weather_changed_cb
|
||||
*
|
||||
* Internal implementation helper for
|
||||
* gcal_view_set_weather_service().
|
||||
*/
|
||||
void
|
||||
gcal_view_set_weather_service_impl_helper (GcalWeatherService **old_service,
|
||||
GcalWeatherService *new_service,
|
||||
GcalWeatherUpdateFunc update_func,
|
||||
GCallback weather_changed_cb,
|
||||
GtkWidget *data)
|
||||
{
|
||||
g_return_if_fail (old_service != NULL);
|
||||
g_return_if_fail (*old_service == NULL || GCAL_IS_WEATHER_SERVICE (*old_service));
|
||||
g_return_if_fail (new_service == NULL || GCAL_IS_WEATHER_SERVICE (new_service));
|
||||
g_return_if_fail (update_func != NULL);
|
||||
g_return_if_fail (weather_changed_cb != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (data));
|
||||
|
||||
if (*old_service != new_service)
|
||||
{
|
||||
if (*old_service != NULL)
|
||||
g_signal_handlers_disconnect_by_func (*old_service,
|
||||
(GCallback) weather_changed_cb,
|
||||
data);
|
||||
|
||||
g_set_object (old_service, new_service);
|
||||
|
||||
if (*old_service != NULL)
|
||||
g_signal_connect (*old_service,
|
||||
"weather-changed",
|
||||
(GCallback) weather_changed_cb,
|
||||
data);
|
||||
|
||||
update_func (data);
|
||||
g_object_notify (G_OBJECT (data), "weather-service");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_view_get_date:
|
||||
* @view: a #GcalView
|
||||
|
||||
Reference in New Issue
Block a user