Use weather service from GcalContext
All those properties were a waste compared to storing it into the context.
This commit is contained in:
@@ -1191,3 +1191,28 @@ gcal_weather_service_stop (GcalWeatherService *self)
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_weather_service_connect_widget:
|
||||
* @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 widgets.
|
||||
*/
|
||||
void
|
||||
gcal_weather_service_connect_widget (GcalWeatherService *self,
|
||||
GcalWeatherUpdateFunc update_func,
|
||||
GCallback weather_changed_cb,
|
||||
GtkWidget *data)
|
||||
{
|
||||
g_return_if_fail (GCAL_IS_WEATHER_SERVICE (self));
|
||||
g_return_if_fail (update_func != NULL);
|
||||
g_return_if_fail (weather_changed_cb != NULL);
|
||||
g_return_if_fail (GTK_IS_WIDGET (data));
|
||||
|
||||
g_signal_connect_object (self, "weather-changed", weather_changed_cb, data, 0);
|
||||
update_func (data);
|
||||
}
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GCAL_TYPE_WEATHER_SERVICE (gcal_weather_service_get_type())
|
||||
|
||||
G_DECLARE_FINAL_TYPE (GcalWeatherService, gcal_weather_service, GCAL, WEATHER_SERVICE, GObject)
|
||||
|
||||
typedef void (*GcalWeatherUpdateFunc) (GtkWidget *widget);
|
||||
|
||||
GcalWeatherService* gcal_weather_service_new (void);
|
||||
|
||||
@@ -50,6 +50,11 @@ void gcal_weather_service_run (GcalWeatherSer
|
||||
|
||||
void gcal_weather_service_stop (GcalWeatherService *self);
|
||||
|
||||
void gcal_weather_service_connect_widget (GcalWeatherService *self,
|
||||
GcalWeatherUpdateFunc update_func,
|
||||
GCallback weather_changed_cb,
|
||||
GtkWidget *data);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* GCAL_WEATHER_SERVICE_H */
|
||||
|
||||
@@ -34,8 +34,6 @@ struct _GcalWeatherSettings
|
||||
GtkWidget *weather_location_entry;
|
||||
|
||||
GcalContext *context;
|
||||
|
||||
GcalWeatherService *weather_service;
|
||||
};
|
||||
|
||||
|
||||
@@ -56,7 +54,6 @@ enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_CONTEXT,
|
||||
PROP_WEATHER_SERVICE,
|
||||
N_PROPS
|
||||
};
|
||||
|
||||
@@ -191,8 +188,12 @@ get_checked_fixed_location (GcalWeatherSettings *self)
|
||||
static void
|
||||
manage_weather_service (GcalWeatherSettings *self)
|
||||
{
|
||||
GcalWeatherService *weather_service;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
weather_service = gcal_context_get_weather_service (self->context);
|
||||
|
||||
if (gtk_switch_get_active (self->show_weather_switch))
|
||||
{
|
||||
g_autoptr (GWeatherLocation) location = NULL;
|
||||
@@ -205,11 +206,11 @@ manage_weather_service (GcalWeatherSettings *self)
|
||||
g_warning ("Unknown location '%s' selected", gtk_entry_get_text (GTK_ENTRY (self->weather_location_entry)));
|
||||
}
|
||||
|
||||
gcal_weather_service_run (self->weather_service, location);
|
||||
gcal_weather_service_run (weather_service, location);
|
||||
}
|
||||
else
|
||||
{
|
||||
gcal_weather_service_stop (self->weather_service);
|
||||
gcal_weather_service_stop (weather_service);
|
||||
}
|
||||
|
||||
GCAL_EXIT;
|
||||
@@ -268,7 +269,6 @@ on_weather_location_searchbox_changed_cb (GWeatherLocationEntry *entry,
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* GObject overrides
|
||||
*/
|
||||
@@ -278,7 +278,7 @@ gcal_weather_settings_finalize (GObject *object)
|
||||
{
|
||||
GcalWeatherSettings *self = (GcalWeatherSettings *)object;
|
||||
|
||||
g_clear_object (&self->weather_service);
|
||||
g_clear_object (&self->context);
|
||||
|
||||
G_OBJECT_CLASS (gcal_weather_settings_parent_class)->finalize (object);
|
||||
}
|
||||
@@ -297,10 +297,6 @@ gcal_weather_settings_get_property (GObject *object,
|
||||
g_value_set_object (value, self->context);
|
||||
break;
|
||||
|
||||
case PROP_WEATHER_SERVICE:
|
||||
g_value_set_object (value, self->weather_service);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
@@ -327,10 +323,6 @@ gcal_weather_settings_set_property (GObject *object,
|
||||
}
|
||||
break;
|
||||
|
||||
case PROP_WEATHER_SERVICE:
|
||||
gcal_weather_settings_set_weather_service (self, g_value_get_object (value));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
@@ -352,12 +344,6 @@ gcal_weather_settings_class_init (GcalWeatherSettingsClass *klass)
|
||||
GCAL_TYPE_CONTEXT,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
properties[PROP_WEATHER_SERVICE] = g_param_spec_object ("weather-service",
|
||||
"The weather service object",
|
||||
"The weather service object",
|
||||
GCAL_TYPE_WEATHER_SERVICE,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
g_object_class_install_properties (object_class, N_PROPS, properties);
|
||||
|
||||
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/calendar/weather-settings.ui");
|
||||
@@ -376,32 +362,3 @@ gcal_weather_settings_init (GcalWeatherSettings *self)
|
||||
{
|
||||
gtk_widget_init_template (GTK_WIDGET (self));
|
||||
}
|
||||
|
||||
GcalWeatherService*
|
||||
gcal_weather_settings_get_weather_service (GcalWeatherSettings *self)
|
||||
{
|
||||
g_return_val_if_fail (GCAL_IS_WEATHER_SETTINGS (self), NULL);
|
||||
|
||||
return self->weather_service;
|
||||
}
|
||||
|
||||
void
|
||||
gcal_weather_settings_set_weather_service (GcalWeatherSettings *self,
|
||||
GcalWeatherService *service)
|
||||
{
|
||||
g_return_if_fail (GCAL_IS_WEATHER_SETTINGS (self));
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
if (!g_set_object (&self->weather_service, service))
|
||||
GCAL_RETURN ();
|
||||
|
||||
/* Recover weather settings */
|
||||
load_weather_settings (self);
|
||||
update_menu_weather_sensitivity (self);
|
||||
manage_weather_service (self);
|
||||
|
||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_WEATHER_SERVICE]);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
@@ -25,12 +25,7 @@
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GCAL_TYPE_WEATHER_SETTINGS (gcal_weather_settings_get_type())
|
||||
|
||||
G_DECLARE_FINAL_TYPE (GcalWeatherSettings, gcal_weather_settings, GCAL, WEATHER_SETTINGS, GtkBox)
|
||||
|
||||
GcalWeatherService* gcal_weather_settings_get_weather_service (GcalWeatherSettings *self);
|
||||
|
||||
void gcal_weather_settings_set_weather_service (GcalWeatherSettings *self,
|
||||
GcalWeatherService *service);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
Reference in New Issue
Block a user