diff options
Diffstat (limited to 'mateweather')
-rw-r--r-- | mateweather/Makefile.am | 26 | ||||
-rw-r--r-- | mateweather/mateweather-applet.c | 87 | ||||
-rw-r--r-- | mateweather/mateweather-dialog.c | 616 | ||||
-rw-r--r-- | mateweather/mateweather-dialog.h | 34 | ||||
-rw-r--r-- | mateweather/mateweather-dialog.ui | 549 | ||||
-rw-r--r-- | mateweather/mateweather-resources.gresource.xml | 7 | ||||
-rw-r--r-- | mateweather/mateweather.h | 1 |
7 files changed, 766 insertions, 554 deletions
diff --git a/mateweather/Makefile.am b/mateweather/Makefile.am index dd80e547..07e7884c 100644 --- a/mateweather/Makefile.am +++ b/mateweather/Makefile.am @@ -5,7 +5,7 @@ SUBDIRS = docs AM_CPPFLAGS = \ -I$(srcdir) \ -I$(top_srcdir) \ - -DMATEWEATHER_MENU_UI_DIR=\""$(uidir)"\" \ + -DWEATHER_RESOURCE_PATH=\""/org/mate/mate-applets/mateweather/"\" \ $(MATE_APPLETS4_CFLAGS) \ $(LIBNOTIFY_CFLAGS) \ $(LIBMATEWEATHER_CFLAGS) \ @@ -13,6 +13,8 @@ AM_CPPFLAGS = \ libexec_PROGRAMS = mateweather-applet +BUILT_SOURCES = mateweather-resources.c mateweather-resources.h +nodist_mateweather_applet_SOURCES = $(BUILT_SOURCES) mateweather_applet_SOURCES = \ mateweather.h \ main.c \ @@ -27,8 +29,11 @@ mateweather_applet_LDADD = \ $(MATE_LIBS2_LIBS) \ $(LIBMATEWEATHER_LIBS) -uidir = $(datadir)/mate/ui -ui_DATA = mateweather-applet-menu.xml +mateweather-resources.c: mateweather-resources.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/mateweather-resources.gresource.xml) + $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate --c-name mateweather $< + +mateweather-resources.h: mateweather-resources.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/mateweather-resources.gresource.xml) + $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate --c-name mateweather $< appletdir = $(datadir)/mate-panel/applets applet_in_files = org.mate.applets.MateWeatherApplet.mate-panel-applet.desktop.in @@ -52,11 +57,18 @@ org.mate.panel.applet.MateWeatherAppletFactory.service: $(service_in_files) -e "s|\@LIBEXECDIR\@|$(libexecdir)|" \ $< > $@ -CLEANFILES = $(applet_DATA) $(applet_in_files) $(service_DATA) +CLEANFILES = \ + $(applet_DATA) \ + $(applet_in_files) \ + $(service_DATA) \ + $(BUILT_SOURCES) -EXTRA_DIST = \ - $(applet_in_files).in \ - $(service_in_files) \ +EXTRA_DIST = \ + mateweather-applet-menu.xml \ + mateweather-dialog.ui \ + mateweather-resources.gresource.xml \ + $(applet_in_files).in \ + $(service_in_files) \ $(ui_DATA) -include $(top_srcdir)/git.mk diff --git a/mateweather/mateweather-applet.c b/mateweather/mateweather-applet.c index 92332224..68041c59 100644 --- a/mateweather/mateweather-applet.c +++ b/mateweather/mateweather-applet.c @@ -11,8 +11,8 @@ */ #ifdef HAVE_CONFIG_H -# include <config.h> -#endif +#include <config.h> +#endif /* HAVE_CONFIG_H */ #include <stdio.h> #include <stdlib.h> @@ -58,7 +58,7 @@ static void help_cb (GtkAction *action, gtk_get_current_event_time (), &error); - if (error) { + if (error) { GtkWidget *dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("There was an error displaying help: %s"), error->message); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), NULL); @@ -128,9 +128,9 @@ static void place_widgets (MateWeatherApplet *gw_applet) int total_size = 0; gboolean horizontal = FALSE; int panel_size = gw_applet->size; - const gchar *temp; + const gchar *temp; const gchar *icon_name; - + switch (gw_applet->orient) { case MATE_PANEL_APPLET_ORIENT_LEFT: case MATE_PANEL_APPLET_ORIENT_RIGHT: @@ -144,7 +144,7 @@ static void place_widgets (MateWeatherApplet *gw_applet) /* Create the weather icon */ icon_name = weather_info_get_icon_name (gw_applet->mateweather_info); - gw_applet->image = gtk_image_new_from_icon_name(icon_name, GTK_ICON_SIZE_BUTTON); + gw_applet->image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON); if (icon_name != NULL) { gtk_widget_show (gw_applet->image); @@ -157,10 +157,10 @@ static void place_widgets (MateWeatherApplet *gw_applet) /* Create the temperature label */ gw_applet->label = gtk_label_new("0\302\260F"); - + /* Update temperature text */ temp = weather_info_get_temp_summary(gw_applet->mateweather_info); - if (temp) + if (temp) gtk_label_set_text(GTK_LABEL(gw_applet->label), temp); /* Check the label size to determine box layout */ @@ -174,14 +174,14 @@ static void place_widgets (MateWeatherApplet *gw_applet) /* Pack the box */ if (gw_applet->box) gtk_widget_destroy (gw_applet->box); - + if (horizontal && (total_size <= panel_size)) gw_applet->box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); else if (horizontal && (total_size > panel_size)) gw_applet->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); else if (!horizontal && (total_size <= panel_size)) gw_applet->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); - else + else gw_applet->box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); /* better for vertical panels */ @@ -201,7 +201,7 @@ static void place_widgets (MateWeatherApplet *gw_applet) static void change_orient_cb (MatePanelApplet *w, MatePanelAppletOrient o, gpointer data) { MateWeatherApplet *gw_applet = (MateWeatherApplet *)data; - + gw_applet->orient = o; place_widgets(gw_applet); return; @@ -210,7 +210,7 @@ static void change_orient_cb (MatePanelApplet *w, MatePanelAppletOrient o, gpoin static void size_allocate_cb(MatePanelApplet *w, GtkAllocation *allocation, gpointer data) { MateWeatherApplet *gw_applet = (MateWeatherApplet *)data; - + if ((gw_applet->orient == MATE_PANEL_APPLET_ORIENT_LEFT) || (gw_applet->orient == MATE_PANEL_APPLET_ORIENT_RIGHT)) { if (gw_applet->size == allocation->width) return; @@ -220,7 +220,7 @@ static void size_allocate_cb(MatePanelApplet *w, GtkAllocation *allocation, gpoi return; gw_applet->size = allocation->height; } - + place_widgets(gw_applet); return; } @@ -237,17 +237,17 @@ static gboolean clicked_cb (GtkWidget *widget, GdkEventButton *ev, gpointer data details_cb (NULL, gw_applet); else gtk_widget_destroy (GTK_WIDGET (gw_applet->details_dialog)); - + return TRUE; } - + return FALSE; } -static gboolean +static gboolean key_press_cb (GtkWidget *widget, GdkEventKey *event, MateWeatherApplet *gw_applet) { - switch (event->keyval) { + switch (event->keyval) { case GDK_KEY_u: if (event->state == GDK_CONTROL_MASK) { mateweather_update (gw_applet); @@ -259,7 +259,7 @@ key_press_cb (GtkWidget *widget, GdkEventKey *event, MateWeatherApplet *gw_apple details_cb (NULL, gw_applet); return TRUE; } - break; + break; case GDK_KEY_KP_Enter: case GDK_KEY_ISO_Enter: case GDK_KEY_3270_Enter: @@ -284,7 +284,6 @@ network_changed (GNetworkMonitor *monitor, gboolean available, MateWeatherApplet } } - static void applet_destroy (GtkWidget *widget, MateWeatherApplet *gw_applet) { @@ -300,12 +299,12 @@ applet_destroy (GtkWidget *widget, MateWeatherApplet *gw_applet) g_source_remove(gw_applet->timeout_tag); gw_applet->timeout_tag = 0; } - + if (gw_applet->suncalc_timeout_tag > 0) { g_source_remove(gw_applet->suncalc_timeout_tag); gw_applet->suncalc_timeout_tag = 0; } - + if (gw_applet->settings) { g_object_unref (gw_applet->settings); gw_applet->settings = NULL; @@ -322,7 +321,6 @@ applet_destroy (GtkWidget *widget, MateWeatherApplet *gw_applet) void mateweather_applet_create (MateWeatherApplet *gw_applet) { GtkActionGroup *action_group; - gchar *ui_path; AtkObject *atk_obj; GNetworkMonitor*monitor; @@ -336,7 +334,7 @@ void mateweather_applet_create (MateWeatherApplet *gw_applet) gw_applet->mateweather_pref.speed_unit = SPEED_UNIT_INVALID; gw_applet->mateweather_pref.pressure_unit = PRESSURE_UNIT_INVALID; gw_applet->mateweather_pref.distance_unit = DISTANCE_UNIT_INVALID; - + mate_panel_applet_set_flags (gw_applet->applet, MATE_PANEL_APPLET_EXPAND_MINOR); mate_panel_applet_set_background_widget(gw_applet->applet, @@ -350,13 +348,13 @@ void mateweather_applet_create (MateWeatherApplet *gw_applet) G_CALLBACK(change_orient_cb), gw_applet); g_signal_connect (G_OBJECT(gw_applet->applet), "size_allocate", G_CALLBACK(size_allocate_cb), gw_applet); - g_signal_connect (G_OBJECT(gw_applet->applet), "destroy", + g_signal_connect (G_OBJECT(gw_applet->applet), "destroy", G_CALLBACK (applet_destroy), gw_applet); g_signal_connect (G_OBJECT(gw_applet->applet), "button_press_event", G_CALLBACK(clicked_cb), gw_applet); - g_signal_connect (G_OBJECT(gw_applet->applet), "key_press_event", + g_signal_connect (G_OBJECT(gw_applet->applet), "key_press_event", G_CALLBACK(key_press_cb), gw_applet); - + gtk_widget_set_tooltip_text (GTK_WIDGET(gw_applet->applet), _("MATE Weather")); atk_obj = gtk_widget_get_accessible (GTK_WIDGET (gw_applet->applet)); @@ -373,10 +371,9 @@ void mateweather_applet_create (MateWeatherApplet *gw_applet) weather_applet_menu_actions, G_N_ELEMENTS (weather_applet_menu_actions), gw_applet); - ui_path = g_build_filename (MATEWEATHER_MENU_UI_DIR, "mateweather-applet-menu.xml", NULL); - mate_panel_applet_setup_menu_from_file (gw_applet->applet, - ui_path, action_group); - g_free (ui_path); + mate_panel_applet_setup_menu_from_resource (gw_applet->applet, + WEATHER_RESOURCE_PATH "mateweather-applet-menu.xml", + action_group); if (mate_panel_applet_get_locked_down (gw_applet->applet)) { GtkAction *action; @@ -385,8 +382,8 @@ void mateweather_applet_create (MateWeatherApplet *gw_applet) gtk_action_set_visible (action, FALSE); } g_object_unref (action_group); - - place_widgets(gw_applet); + + place_widgets(gw_applet); monitor = g_network_monitor_get_default(); g_signal_connect (monitor, "network-changed", @@ -395,7 +392,7 @@ void mateweather_applet_create (MateWeatherApplet *gw_applet) gint timeout_cb (gpointer data) { MateWeatherApplet *gw_applet = (MateWeatherApplet *)data; - + mateweather_update(gw_applet); return 0; /* Do not repeat timeout (will be reset by mateweather_update) */ } @@ -434,13 +431,13 @@ update_finish (WeatherInfo *info, gpointer data) { gw_fault_counter = 0; icon_name = weather_info_get_icon_name (gw_applet->mateweather_info); - gtk_image_set_from_icon_name (GTK_IMAGE(gw_applet->image), + gtk_image_set_from_icon_name (GTK_IMAGE(gw_applet->image), icon_name, GTK_ICON_SIZE_BUTTON); - - gtk_label_set_text (GTK_LABEL (gw_applet->label), + + gtk_label_set_text (GTK_LABEL (gw_applet->label), weather_info_get_temp_summary( gw_applet->mateweather_info)); - + s = weather_info_get_weather_summary (gw_applet->mateweather_info); gtk_widget_set_tooltip_text (GTK_WIDGET (gw_applet->applet), s); g_free (s); @@ -457,7 +454,7 @@ update_finish (WeatherInfo *info, gpointer data) if (gw_applet->mateweather_pref.show_notifications) { NotifyNotification *n; - + /* Show notifications if possible */ if (!notify_is_initted ()) notify_init (_("Weather Forecast")); @@ -466,7 +463,7 @@ update_finish (WeatherInfo *info, gpointer data) { GError *error = NULL; const char *icon; - + /* Show notification */ message = g_strdup_printf ("%s: %s", weather_info_get_location_name (info), @@ -480,16 +477,16 @@ update_finish (WeatherInfo *info, gpointer data) icon = weather_info_get_icon_name (gw_applet->mateweather_info); if (icon == NULL) icon = "stock-unknown"; - + n = notify_notification_new (message, detail, icon); - + notify_notification_show (n, &error); if (error) { g_warning ("%s", error->message); g_error_free (error); } - + g_free (message); g_free (detail); } @@ -519,8 +516,8 @@ void mateweather_update (MateWeatherApplet *gw_applet) const gchar *icon_name; icon_name = weather_info_get_icon_name(gw_applet->mateweather_info); - gtk_image_set_from_icon_name (GTK_IMAGE (gw_applet->image), - icon_name, GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name (GTK_IMAGE (gw_applet->image), + icon_name, GTK_ICON_SIZE_BUTTON); gtk_widget_set_tooltip_text (GTK_WIDGET(gw_applet->applet), _("Updating...")); /* Set preferred forecast type */ @@ -539,7 +536,7 @@ void mateweather_update (MateWeatherApplet *gw_applet) prefs.distance_unit = gw_applet->mateweather_pref.distance_unit; /* Update current conditions */ - if (gw_applet->mateweather_info && + if (gw_applet->mateweather_info && weather_location_equal(weather_info_get_location(gw_applet->mateweather_info), gw_applet->mateweather_pref.location)) { weather_info_update(gw_applet->mateweather_info, &prefs, diff --git a/mateweather/mateweather-dialog.c b/mateweather/mateweather-dialog.c index e8ff29ae..b677094d 100644 --- a/mateweather/mateweather-dialog.c +++ b/mateweather/mateweather-dialog.c @@ -11,8 +11,8 @@ */ #ifdef HAVE_CONFIG_H -# include <config.h> -#endif +#include <config.h> +#endif /* HAVE_CONFIG_H */ #include <stdio.h> #include <stdlib.h> @@ -27,84 +27,56 @@ #include "mateweather-pref.h" #include "mateweather-dialog.h" -struct _MateWeatherDialogPrivate { - GtkWidget* cond_location; - GtkWidget* cond_update; - GtkWidget* cond_cond; - GtkWidget* cond_sky; - GtkWidget* cond_temp; - GtkWidget* cond_dew; - GtkWidget* cond_humidity; - GtkWidget* cond_wind; - GtkWidget* cond_pressure; - GtkWidget* cond_vis; - GtkWidget* cond_apparent; - GtkWidget* cond_sunrise; - GtkWidget* cond_sunset; - GtkWidget* cond_image; - GtkWidget* forecast_text; - GtkWidget* radar_image; - - MateWeatherApplet* applet; +struct _MateWeatherDialog { + GtkDialog parent; + + GtkWidget *weather_notebook; + GtkWidget *cond_location; + GtkWidget *cond_update; + GtkWidget *cond_cond; + GtkWidget *cond_sky; + GtkWidget *cond_temp; + GtkWidget *cond_dew; + GtkWidget *cond_humidity; + GtkWidget *cond_wind; + GtkWidget *cond_pressure; + GtkWidget *cond_vis; + GtkWidget *cond_apparent; + GtkWidget *cond_sunrise; + GtkWidget *cond_sunset; + GtkWidget *cond_image; + GtkWidget *forecast_text; + GtkWidget *radar_image; + + MateWeatherApplet *applet; }; enum { - PROP_0, - PROP_MATEWEATHER_APPLET, + PROP_0, + PROP_MATEWEATHER_APPLET, }; -G_DEFINE_TYPE_WITH_PRIVATE (MateWeatherDialog, mateweather_dialog, GTK_TYPE_DIALOG); +G_DEFINE_TYPE (MateWeatherDialog, mateweather_dialog, GTK_TYPE_DIALOG); #define MONOSPACE_FONT_SCHEMA "org.mate.interface" #define MONOSPACE_FONT_KEY "monospace-font-name" -static void mateweather_dialog_save_geometry(MateWeatherDialog* dialog) -{ -#if 0 - GSettings* settings; - int w, h; - - gtk_window_get_size (GTK_WINDOW (dialog), &w, &h); - - settings = dialog->priv->applet->settings; - - /* FIXME those keys are not in org.mate.weather! */ - g_settings_set_int (settings, "dialog-width", w); - g_settings_set_int (settings, "dialog-height", h); -#endif -} - -static void mateweather_dialog_load_geometry(MateWeatherDialog* dialog) -{ -#if 0 - GSettings* settings; - int w, h; - - settings = dialog->priv->applet->settings; - - /* FIXME those keys are not in org.mate.weather! */ - w = g_settings_get_int (settings, "dialog-width"); - h = g_settings_get_int (settings, "dialog-height"); - - if (w > 0 && h > 0) - { - gtk_window_resize(GTK_WINDOW(dialog), w, h); - } -#endif -} - -static void response_cb(MateWeatherDialog* dialog, gint id, gpointer data) +static void +response_cb (MateWeatherDialog *dialog, + gint id, + gpointer data) { if (id == GTK_RESPONSE_OK) { - mateweather_update (dialog->priv->applet); - - mateweather_dialog_update (dialog); + mateweather_update (dialog->applet); + mateweather_dialog_update (dialog); } else { - gtk_widget_destroy (GTK_WIDGET(dialog)); + gtk_widget_destroy (GTK_WIDGET (dialog)); } } -static void link_cb(GtkButton* button, gpointer data) +static void +link_cb (GtkButton *button, + gpointer data) { gtk_show_uri_on_window (NULL, "http://www.weather.com/", @@ -112,7 +84,8 @@ static void link_cb(GtkButton* button, gpointer data) NULL); } -static gchar* replace_multiple_new_lines(gchar* s) +static gchar* +replace_multiple_new_lines(gchar* s) { gchar *prev_s = s; gint count; @@ -140,350 +113,6 @@ static gchar* replace_multiple_new_lines(gchar* s) return prev_s; } -static void mateweather_dialog_create(MateWeatherDialog* dialog) -{ - MateWeatherDialogPrivate *priv; - MateWeatherApplet *gw_applet; - - GtkWidget *weather_vbox; - GtkWidget *weather_notebook; - GtkWidget *cond_hbox; - GtkWidget *cond_grid; - GtkWidget *cond_location_lbl; - GtkWidget *cond_update_lbl; - GtkWidget *cond_temp_lbl; - GtkWidget *cond_cond_lbl; - GtkWidget *cond_sky_lbl; - GtkWidget *cond_wind_lbl; - GtkWidget *cond_humidity_lbl; - GtkWidget *cond_pressure_lbl; - GtkWidget *cond_vis_lbl; - GtkWidget *cond_dew_lbl; - GtkWidget *cond_apparent_lbl; - GtkWidget *cond_sunrise_lbl; - GtkWidget *cond_sunset_lbl; - GtkWidget *cond_vbox; - GtkWidget *current_note_lbl; - GtkWidget *forecast_note_lbl; - GtkWidget *radar_note_lbl; - GtkWidget *radar_vbox; - GtkWidget *radar_link_btn; - GtkWidget *radar_link_box; - GtkWidget *forecast_hbox; - GtkWidget *ebox; - GtkWidget *scrolled_window; - GtkWidget *imagescroll_window; - - priv = dialog->priv; - gw_applet = priv->applet; - - g_object_set (dialog, "destroy-with-parent", TRUE, NULL); - gtk_window_set_title (GTK_WINDOW (dialog), _("Details")); - gtk_dialog_add_buttons (GTK_DIALOG (dialog), - _("_Update"), GTK_RESPONSE_OK, - "gtk-close", GTK_RESPONSE_CLOSE, - NULL); - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE); - gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); - gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), 2); - gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); - - if (gw_applet->mateweather_pref.radar_enabled) - gtk_window_set_default_size (GTK_WINDOW (dialog), 570,440); - else - gtk_window_set_default_size (GTK_WINDOW (dialog), 590, 340); - - gtk_window_set_screen (GTK_WINDOW (dialog), - gtk_widget_get_screen (GTK_WIDGET (gw_applet->applet))); - mateweather_dialog_load_geometry (dialog); - - /* Must come after load geometry, otherwise it will get reset. */ - gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE); - - weather_vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); - gtk_widget_show (weather_vbox); - - weather_notebook = gtk_notebook_new (); - gtk_container_set_border_width (GTK_CONTAINER (weather_notebook), 5); - gtk_widget_show (weather_notebook); - gtk_box_pack_start (GTK_BOX (weather_vbox), weather_notebook, TRUE, TRUE, 0); - - cond_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2); - gtk_widget_show (cond_hbox); - gtk_container_add (GTK_CONTAINER (weather_notebook), cond_hbox); - gtk_container_set_border_width (GTK_CONTAINER (cond_hbox), 4); - - cond_grid = gtk_grid_new (); - gtk_widget_show (cond_grid); - gtk_box_pack_start (GTK_BOX (cond_hbox), cond_grid, TRUE, TRUE, 0); - gtk_container_set_border_width (GTK_CONTAINER (cond_grid), 12); - gtk_grid_set_row_spacing (GTK_GRID (cond_grid), 6); - gtk_grid_set_column_spacing (GTK_GRID (cond_grid), 12); - - cond_location_lbl = gtk_label_new (_("City:")); - gtk_widget_show (cond_location_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_location_lbl, 0, 0, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_location_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_location_lbl), 0.0); - - cond_update_lbl = gtk_label_new (_("Last update:")); - gtk_widget_show (cond_update_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_update_lbl, 0, 1, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_update_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_update_lbl), 0.0); - - cond_cond_lbl = gtk_label_new (_("Conditions:")); - gtk_widget_show (cond_cond_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_cond_lbl, 0, 2, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_cond_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_cond_lbl), 0.0); - - cond_sky_lbl = gtk_label_new (_("Sky:")); - gtk_widget_show (cond_sky_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_sky_lbl, 0, 3, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_sky_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_sky_lbl), 0.0); - - cond_temp_lbl = gtk_label_new (_("Temperature:")); - gtk_widget_show (cond_temp_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_temp_lbl, 0, 4, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_temp_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_temp_lbl), 0.0); - - cond_apparent_lbl = gtk_label_new (_("Feels like:")); - gtk_widget_show (cond_apparent_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_apparent_lbl, 0, 5, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_apparent_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_apparent_lbl), 0.0); - - cond_dew_lbl = gtk_label_new (_("Dew point:")); - gtk_widget_show (cond_dew_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_dew_lbl, 0, 6, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_dew_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_dew_lbl), 0.0); - - cond_humidity_lbl = gtk_label_new (_("Relative humidity:")); - gtk_widget_show (cond_humidity_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_humidity_lbl, 0, 7, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_humidity_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_humidity_lbl), 0.0); - - cond_wind_lbl = gtk_label_new (_("Wind:")); - gtk_widget_show (cond_wind_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_wind_lbl, 0, 8, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_wind_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_wind_lbl), 0.0); - - cond_pressure_lbl = gtk_label_new (_("Pressure:")); - gtk_widget_show (cond_pressure_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_pressure_lbl, 0, 9, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_pressure_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_pressure_lbl), 0.0); - - cond_vis_lbl = gtk_label_new (_("Visibility:")); - gtk_widget_show (cond_vis_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_vis_lbl, 0, 10, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_vis_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_vis_lbl), 0.0); - - cond_sunrise_lbl = gtk_label_new (_("Sunrise:")); - gtk_widget_show (cond_sunrise_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_sunrise_lbl, 0, 11, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_sunrise_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_sunrise_lbl), 0.0); - - cond_sunset_lbl = gtk_label_new (_("Sunset:")); - gtk_widget_show (cond_sunset_lbl); - gtk_grid_attach (GTK_GRID (cond_grid), cond_sunset_lbl, 0, 12, 1, 1); - gtk_label_set_justify (GTK_LABEL (cond_sunset_lbl), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (cond_sunset_lbl), 0.0); - - priv->cond_location = gtk_label_new (""); - gtk_widget_show (priv->cond_location); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_location, 1, 0, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_location), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_location), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_location), 0.0); - - priv->cond_update = gtk_label_new (""); - gtk_widget_show (priv->cond_update); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_update, 1, 1, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_update), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_update), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_update), 0.0); - - priv->cond_cond = gtk_label_new (""); - gtk_widget_show (priv->cond_cond); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_cond, 1, 2, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_cond), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_cond), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_cond), 0.0); - - priv->cond_sky = gtk_label_new (""); - gtk_widget_show (priv->cond_sky); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_sky, 1, 3, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_sky), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_sky), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_sky), 0.0); - - priv->cond_temp = gtk_label_new (""); - gtk_widget_show (priv->cond_temp); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_temp, 1, 4, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_temp), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_temp), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_temp), 0.0); - - priv->cond_apparent = gtk_label_new (""); - gtk_widget_show (priv->cond_apparent); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_apparent, 1, 5, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_apparent), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_apparent), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_apparent), 0.0); - - priv->cond_dew = gtk_label_new (""); - gtk_widget_show (priv->cond_dew); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_dew, 1, 6, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_dew), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_dew), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_dew), 0.0); - - priv->cond_humidity = gtk_label_new (""); - gtk_widget_show (priv->cond_humidity); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_humidity, 1, 7, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_humidity), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_humidity), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_humidity), 0.0); - - priv->cond_wind = gtk_label_new (""); - gtk_widget_show (priv->cond_wind); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_wind, 1, 8, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_wind), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_wind), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_wind), 0.0); - - priv->cond_pressure = gtk_label_new (""); - gtk_widget_show (priv->cond_pressure); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_pressure, 1, 9, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_pressure), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_pressure), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_pressure), 0.0); - - priv->cond_vis = gtk_label_new (""); - gtk_widget_show (priv->cond_vis); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_vis, 1, 10, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_vis), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_vis), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_vis), 0.0); - - priv->cond_sunrise = gtk_label_new (""); - gtk_widget_show (priv->cond_sunrise); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_sunrise, 1, 11, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_sunrise), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_sunrise), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_sunrise), 0.0); - - priv->cond_sunset = gtk_label_new (""); - gtk_widget_show (priv->cond_sunset); - gtk_grid_attach (GTK_GRID (cond_grid), priv->cond_sunset, 1, 12, 1, 1); - gtk_label_set_selectable (GTK_LABEL (priv->cond_sunset), TRUE); - gtk_label_set_justify (GTK_LABEL (priv->cond_sunset), GTK_JUSTIFY_LEFT); - gtk_label_set_xalign (GTK_LABEL (priv->cond_sunset), 0.0); - - cond_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); - gtk_widget_set_valign (cond_vbox, GTK_ALIGN_START); - gtk_widget_set_vexpand (cond_vbox, TRUE); - gtk_widget_show (cond_vbox); - gtk_box_pack_end (GTK_BOX (cond_hbox), cond_vbox, FALSE, FALSE, 0); - gtk_container_set_border_width (GTK_CONTAINER (cond_vbox), 2); - - priv->cond_image = gtk_image_new_from_icon_name ("stock-unknown", GTK_ICON_SIZE_BUTTON); - gtk_widget_show (priv->cond_image); - gtk_container_add (GTK_CONTAINER (cond_vbox), priv->cond_image); - - current_note_lbl = gtk_label_new (_("Current Conditions")); - gtk_widget_show (current_note_lbl); - gtk_notebook_set_tab_label (GTK_NOTEBOOK (weather_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (weather_notebook), 0), current_note_lbl); - - if (gw_applet->mateweather_pref.location->zone_valid) { - - forecast_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_container_set_border_width (GTK_CONTAINER (forecast_hbox), 12); - gtk_widget_show (forecast_hbox); - - scrolled_window = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), - GTK_SHADOW_ETCHED_IN); - - priv->forecast_text = gtk_text_view_new (); - set_access_namedesc (priv->forecast_text, _("Forecast Report"), _("See the ForeCast Details")); - gtk_container_add (GTK_CONTAINER (scrolled_window), priv->forecast_text); - gtk_text_view_set_editable (GTK_TEXT_VIEW (priv->forecast_text), FALSE); - gtk_text_view_set_left_margin (GTK_TEXT_VIEW (priv->forecast_text), 6); - gtk_widget_show (priv->forecast_text); - gtk_widget_show (scrolled_window); - gtk_box_pack_start (GTK_BOX (forecast_hbox), scrolled_window, TRUE, TRUE, 0); - - gtk_container_add (GTK_CONTAINER (weather_notebook), forecast_hbox); - - forecast_note_lbl = gtk_label_new (_("Forecast")); - gtk_widget_show (forecast_note_lbl); - gtk_notebook_set_tab_label (GTK_NOTEBOOK (weather_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (weather_notebook), 1), forecast_note_lbl); - - } - - if (gw_applet->mateweather_pref.radar_enabled) { - - radar_note_lbl = gtk_label_new_with_mnemonic (_("Radar Map")); - gtk_widget_show (radar_note_lbl); - - radar_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_widget_show (radar_vbox); - gtk_notebook_append_page (GTK_NOTEBOOK (weather_notebook), radar_vbox, radar_note_lbl); - gtk_container_set_border_width (GTK_CONTAINER (radar_vbox), 6); - - priv->radar_image = gtk_image_new (); - - imagescroll_window = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (imagescroll_window), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (imagescroll_window), - GTK_SHADOW_ETCHED_IN); - - ebox = gtk_event_box_new (); - gtk_widget_show (ebox); - - gtk_container_add (GTK_CONTAINER (imagescroll_window),ebox); - gtk_box_pack_start (GTK_BOX (radar_vbox), imagescroll_window, TRUE, TRUE, 0); - gtk_widget_show (priv->radar_image); - gtk_widget_show (imagescroll_window); - - gtk_container_add (GTK_CONTAINER (ebox), priv->radar_image); - - radar_link_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); - gtk_widget_set_halign (radar_link_box, GTK_ALIGN_CENTER); - gtk_widget_set_hexpand (radar_link_box, TRUE); - gtk_widget_show (radar_link_box); - gtk_box_pack_start (GTK_BOX (radar_vbox), radar_link_box, FALSE, FALSE, 0); - - radar_link_btn = gtk_button_new_with_mnemonic (_("_Visit Weather.com")); - set_access_namedesc (radar_link_btn, _("Visit Weather.com"), _("Click to Enter Weather.com")); - gtk_widget_set_size_request (radar_link_btn, 450, -2); - gtk_widget_show (radar_link_btn); - if (!g_settings_get_boolean (gw_applet->settings, "use-custom-radar-url")) - gtk_container_add (GTK_CONTAINER (radar_link_box), radar_link_btn); - - g_signal_connect (G_OBJECT (radar_link_btn), "clicked", - G_CALLBACK (link_cb), NULL); - - } - - g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (response_cb), NULL); - -} - static PangoFontDescription* get_system_monospace_font(void) { PangoFontDescription *desc = NULL; @@ -549,100 +178,123 @@ override_widget_font (GtkWidget *widget, g_free (size); } -void mateweather_dialog_update(MateWeatherDialog* dialog) +void +mateweather_dialog_update (MateWeatherDialog *dialog) { - MateWeatherDialogPrivate *priv; - MateWeatherApplet *gw_applet; + WeatherInfo *info; gchar *forecast; GtkTextBuffer *buffer; PangoFontDescription *font_desc; const gchar *icon_name; - priv = dialog->priv; - gw_applet = priv->applet; - /* Check for parallel network update in progress */ - if(gw_applet->mateweather_info == NULL) + if (dialog->applet->mateweather_info == NULL) return; + info = dialog->applet->mateweather_info; + /* Update icon */ - icon_name = weather_info_get_icon_name (gw_applet->mateweather_info); - gtk_image_set_from_icon_name (GTK_IMAGE (priv->cond_image), + icon_name = weather_info_get_icon_name (info); + gtk_image_set_from_icon_name (GTK_IMAGE (dialog->cond_image), icon_name, GTK_ICON_SIZE_DIALOG); /* Update current condition fields and forecast */ - gtk_label_set_text(GTK_LABEL(priv->cond_location), weather_info_get_location_name(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_update), weather_info_get_update(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_cond), weather_info_get_conditions(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_sky), weather_info_get_sky(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_temp), weather_info_get_temp(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_apparent), weather_info_get_apparent(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_dew), weather_info_get_dew(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_humidity), weather_info_get_humidity(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_wind), weather_info_get_wind(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_pressure), weather_info_get_pressure(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_vis), weather_info_get_visibility(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_sunrise), weather_info_get_sunrise(gw_applet->mateweather_info)); - gtk_label_set_text(GTK_LABEL(priv->cond_sunset), weather_info_get_sunset(gw_applet->mateweather_info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_location), weather_info_get_location_name (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_update), weather_info_get_update (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_cond), weather_info_get_conditions (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_sky), weather_info_get_sky (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_temp), weather_info_get_temp (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_apparent), weather_info_get_apparent (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_dew), weather_info_get_dew (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_humidity), weather_info_get_humidity (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_wind), weather_info_get_wind (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_pressure), weather_info_get_pressure (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_vis), weather_info_get_visibility (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_sunrise), weather_info_get_sunrise (info)); + gtk_label_set_text (GTK_LABEL (dialog->cond_sunset), weather_info_get_sunset (info)); /* Update forecast */ - if (gw_applet->mateweather_pref.location->zone_valid) { + if (dialog->applet->mateweather_pref.location->zone_valid) { font_desc = get_system_monospace_font (); if (font_desc) { - override_widget_font (priv->forecast_text, font_desc); + override_widget_font (dialog->forecast_text, font_desc); pango_font_description_free (font_desc); } - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->forecast_text)); - forecast = g_strdup(weather_info_get_forecast(gw_applet->mateweather_info)); + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (dialog->forecast_text)); + forecast = g_strdup (weather_info_get_forecast (dialog->applet->mateweather_info)); if (forecast) { - forecast = g_strstrip(replace_multiple_new_lines(forecast)); - gtk_text_buffer_set_text(buffer, forecast, -1); - g_free(forecast); + forecast = g_strstrip (replace_multiple_new_lines (forecast)); + gtk_text_buffer_set_text (buffer, forecast, -1); + g_free (forecast); } else { - gtk_text_buffer_set_text(buffer, _("Forecast not currently available for this location."), -1); + gtk_text_buffer_set_text (buffer, _("Forecast not currently available for this location."), -1); } + gtk_widget_show (gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->weather_notebook), 1)); + } else { + gtk_widget_hide (gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->weather_notebook), 1)); } /* Update radar map */ - if (gw_applet->mateweather_pref.radar_enabled) { + if (dialog->applet->mateweather_pref.radar_enabled) { GdkPixbufAnimation *radar; - radar = weather_info_get_radar (gw_applet->mateweather_info); + radar = weather_info_get_radar (info); if (radar) { - gtk_image_set_from_animation (GTK_IMAGE (priv->radar_image), radar); + gtk_image_set_from_animation (GTK_IMAGE (dialog->radar_image), radar); } + gtk_widget_show (gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->weather_notebook), 2)); + gtk_window_set_default_size (GTK_WINDOW (dialog), 570, 440); + } else { + gtk_widget_hide (gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->weather_notebook), 2)); + gtk_window_set_default_size (GTK_WINDOW (dialog), 590, 340); } } -static void mateweather_dialog_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec) +static void +mateweather_dialog_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) { - MateWeatherDialog *dialog = MATEWEATHER_DIALOG (object); + MateWeatherDialog *dialog; + + dialog = MATEWEATHER_DIALOG (object); switch (prop_id) { - case PROP_MATEWEATHER_APPLET: - dialog->priv->applet = g_value_get_pointer (value); - break; + case PROP_MATEWEATHER_APPLET: + dialog->applet = g_value_get_pointer (value); + break; } } -static void mateweather_dialog_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec) +static void +mateweather_dialog_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { - MateWeatherDialog *dialog = MATEWEATHER_DIALOG (object); + MateWeatherDialog *dialog; + + dialog = MATEWEATHER_DIALOG (object); switch (prop_id) { case PROP_MATEWEATHER_APPLET: - g_value_set_pointer (value, dialog->priv->applet); + g_value_set_pointer (value, dialog->applet); break; } } -static void mateweather_dialog_init(MateWeatherDialog* self) +static void +mateweather_dialog_init (MateWeatherDialog *dialog) { - self->priv = mateweather_dialog_get_instance_private (self); + gtk_widget_init_template (GTK_WIDGET (dialog)); } -static GObject* mateweather_dialog_constructor(GType type, guint n_construct_params, GObjectConstructParam* construct_params) +static GObject* +mateweather_dialog_constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params) { GObject *object; MateWeatherDialog *self; @@ -651,40 +303,58 @@ static GObject* mateweather_dialog_constructor(GType type, guint n_construct_par constructor (type, n_construct_params, construct_params); self = MATEWEATHER_DIALOG (object); - mateweather_dialog_create (self); mateweather_dialog_update (self); return object; } -GtkWidget* mateweather_dialog_new(MateWeatherApplet* applet) +GtkWidget* +mateweather_dialog_new (MateWeatherApplet *applet) { - return g_object_new(MATEWEATHER_TYPE_DIALOG, - "mateweather-applet", applet, - NULL); + return g_object_new(MATEWEATHER_TYPE_DIALOG, + "mateweather-applet", applet, + NULL); } -static void mateweather_dialog_unrealize(GtkWidget* widget) -{ - MateWeatherDialog* self = MATEWEATHER_DIALOG(widget); - - mateweather_dialog_save_geometry(self); - - GTK_WIDGET_CLASS(mateweather_dialog_parent_class)->unrealize(widget); -} - -static void mateweather_dialog_class_init(MateWeatherDialogClass* klass) +static void +mateweather_dialog_class_init (MateWeatherDialogClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - mateweather_dialog_parent_class = g_type_class_peek_parent (klass); - object_class->set_property = mateweather_dialog_set_property; object_class->get_property = mateweather_dialog_get_property; object_class->constructor = mateweather_dialog_constructor; - widget_class->unrealize = mateweather_dialog_unrealize; /* This becomes an OBJECT property when MateWeatherApplet is redone */ - g_object_class_install_property(object_class, PROP_MATEWEATHER_APPLET, g_param_spec_pointer ("mateweather-applet", "MateWeather Applet", "The MateWeather Applet", G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + g_object_class_install_property (object_class, + PROP_MATEWEATHER_APPLET, + g_param_spec_pointer ("mateweather-applet", + "MateWeather Applet", + "The MateWeather Applet", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + + gtk_widget_class_set_template_from_resource (widget_class, + WEATHER_RESOURCE_PATH "mateweather-dialog.ui"); + + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, weather_notebook); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_location); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_update); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_cond); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_sky); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_temp); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_dew); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_humidity); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_wind); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_pressure); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_vis); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_apparent); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_sunrise); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_sunset); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_image); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, forecast_text); + gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, radar_image); + + gtk_widget_class_bind_template_callback (widget_class, response_cb); + gtk_widget_class_bind_template_callback (widget_class, link_cb); } diff --git a/mateweather/mateweather-dialog.h b/mateweather/mateweather-dialog.h index 69aa734d..0eaf0b50 100644 --- a/mateweather/mateweather-dialog.h +++ b/mateweather/mateweather-dialog.h @@ -21,34 +21,12 @@ G_BEGIN_DECLS -#define MATEWEATHER_TYPE_DIALOG (mateweather_dialog_get_type ()) -#define MATEWEATHER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MATEWEATHER_TYPE_DIALOG, MateWeatherDialog)) -#define MATEWEATHER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MATEWEATHER_TYPE_DIALOG, MateWeatherDialogClass)) -#define MATEWEATHER_IS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MATEWEATHER_TYPE_DIALOG)) -#define MATEWEATHER_IS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MATEWEATHER_TYPE_DIALOG)) -#define MATEWEATHER_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MATEWEATHER_TYPE_DIALOG, MateWeatherDialogClass)) - -typedef struct _MateWeatherDialog MateWeatherDialog; -typedef struct _MateWeatherDialogPrivate MateWeatherDialogPrivate; -typedef struct _MateWeatherDialogClass MateWeatherDialogClass; - -struct _MateWeatherDialog -{ - GtkDialog parent; - - /* private */ - MateWeatherDialogPrivate *priv; -}; - - -struct _MateWeatherDialogClass -{ - GtkDialogClass parent_class; -}; - -GType mateweather_dialog_get_type (void); -GtkWidget *mateweather_dialog_new (MateWeatherApplet *applet); -void mateweather_dialog_update (MateWeatherDialog *dialog); +#define MATEWEATHER_TYPE_DIALOG mateweather_dialog_get_type () +G_DECLARE_FINAL_TYPE (MateWeatherDialog, mateweather_dialog, + MATEWEATHER, DIALOG, GtkDialog) + +GtkWidget *mateweather_dialog_new (MateWeatherApplet *applet); +void mateweather_dialog_update (MateWeatherDialog *dialog); G_END_DECLS diff --git a/mateweather/mateweather-dialog.ui b/mateweather/mateweather-dialog.ui new file mode 100644 index 00000000..e370ac7e --- /dev/null +++ b/mateweather/mateweather-dialog.ui @@ -0,0 +1,549 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.36.0 --> +<interface> + <requires lib="gtk+" version="3.22"/> + <object class="GtkImage" id="close_img"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">window-close</property> + </object> + <template class="MateWeatherDialog" parent="GtkDialog"> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="title" translatable="yes">Details</property> + <property name="default_width">590</property> + <property name="default_height">340</property> + <property name="destroy_with_parent">True</property> + <property name="type_hint">dialog</property> + <signal name="response" handler="response_cb" swapped="no"/> + <child internal-child="vbox"> + <object class="GtkBox"> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">12</property> + <child internal-child="action_area"> + <object class="GtkButtonBox"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="button1"> + <property name="label" translatable="yes">_Update</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_underline">True</property> + <property name="always_show_image">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button2"> + <property name="label" translatable="yes">_Close</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="has_default">True</property> + <property name="receives_default">True</property> + <property name="image">close_img</property> + <property name="use_underline">True</property> + <property name="always_show_image">True</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkNotebook" id="weather_notebook"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <child> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="row_spacing">6</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">City:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Last update:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Conditions:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Sky:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Temperature:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">4</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Feels like:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">5</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Dew point:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">6</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Relative humidity:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">7</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Wind:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">8</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Pressure:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">9</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Visibility:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">10</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Sunrise:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">11</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes">Sunset:</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">12</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_location"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_update"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_cond"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_sky"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_temp"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">4</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_apparent"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">5</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_dew"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">6</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_humidity"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">7</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_wind"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">8</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_pressure"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">9</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_vis"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">10</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_sunrise"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">11</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="cond_sunset"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">12</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkImage" id="cond_image"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="valign">start</property> + <property name="icon_name">stock-unknown</property> + <property name="icon_size">6</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Current Conditions</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTextView" id="forecast_text"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="left_margin">6</property> + <child internal-child="accessible"> + <object class="AtkObject" id="forecast_text-atkobject"> + <property name="AtkObject::accessible-name" translatable="yes">Forecast Report</property> + <property name="AtkObject::accessible-description" translatable="yes">See the ForeCast Details</property> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Forecast</property> + </object> + <packing> + <property name="position">1</property> + <property name="tab_fill">False</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">12</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkViewport"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkImage" id="radar_image"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-missing-image</property> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="radar_link_btn"> + <property name="label" translatable="yes">_Visit Weather.com</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_underline">True</property> + <signal name="clicked" handler="link_cb" swapped="no"/> + <child internal-child="accessible"> + <object class="AtkObject" id="radar_link_btn-atkobject"> + <property name="AtkObject::accessible-name" translatable="yes">Visit Weather.com</property> + <property name="AtkObject::accessible-description" translatable="yes">Click to Enter Weather.com</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">2</property> + </packing> + </child> + <child type="tab"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Radar Map</property> + </object> + <packing> + <property name="position">2</property> + <property name="tab_fill">False</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + <action-widgets> + <action-widget response="-5">button1</action-widget> + <action-widget response="-7">button2</action-widget> + </action-widgets> + <child type="titlebar"> + <placeholder/> + </child> + </template> +</interface> diff --git a/mateweather/mateweather-resources.gresource.xml b/mateweather/mateweather-resources.gresource.xml new file mode 100644 index 00000000..db4b5d57 --- /dev/null +++ b/mateweather/mateweather-resources.gresource.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<gresources> + <gresource prefix="/org/mate/mate-applets/mateweather"> + <file compressed="true">mateweather-applet-menu.xml</file> + <file compressed="true">mateweather-dialog.ui</file> + </gresource> +</gresources> diff --git a/mateweather/mateweather.h b/mateweather/mateweather.h index f486017c..fa492849 100644 --- a/mateweather/mateweather.h +++ b/mateweather/mateweather.h @@ -18,7 +18,6 @@ #include <libmateweather/mateweather-prefs.h> - /* Radar map on by default. */ #define RADARMAP |