static void cc_date_time_panel_init (CcDateTimePanel *self) { CcDateTimePanelPrivate *priv; gchar *objects[] = { "datetime-panel", "region-liststore", "city-liststore", "month-liststore", "city-modelfilter", "city-modelsort", NULL }; char *buttons[] = { "hour_up_button", "hour_down_button", "min_up_button", "min_down_button", "ampm_up_button", "ampm_down_button" }; GtkWidget *widget; GtkAdjustment *adjustment; GError *err = NULL; GtkTreeModelFilter *city_modelfilter; GtkTreeModelSort *city_modelsort; guint i, num_days; gboolean using_ntp; gboolean can_use_ntp; int ret; DateEndianess endianess; GError *error; priv = self->priv = DATE_TIME_PANEL_PRIVATE (self); priv->cancellable = g_cancellable_new (); error = NULL; priv->dtm = date_time_mechanism_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, "org.gnome.SettingsDaemon.DateTimeMechanism", "/", priv->cancellable, &error); if (priv->dtm == NULL) { g_warning ("could not get proxy for DateTimeMechanism: %s", error->message); g_error_free (error); } priv->builder = gtk_builder_new (); ret = gtk_builder_add_objects_from_file (priv->builder, DATADIR"/datetime.ui", objects, &err); if (ret == 0) { g_warning ("Could not load ui: %s", err ? err->message : "No reason"); if (err) g_error_free (err); return; } /* set up network time button */ error = NULL; using_ntp = can_use_ntp = FALSE; if (!date_time_mechanism_call_get_using_ntp_sync (priv->dtm, &can_use_ntp, &using_ntp, priv->cancellable, &error)) { g_warning ("Failed to get using ntp: %s", error->message); g_error_free (error); } gtk_switch_set_active (GTK_SWITCH (W("network_time_switch")), using_ntp); update_widget_state_for_ntp (self, using_ntp); g_signal_connect (W("network_time_switch"), "notify::active", G_CALLBACK (change_ntp), self); /* set up time editing widgets */ for (i = 0; i < G_N_ELEMENTS (buttons); i++) { g_signal_connect (W(buttons[i]), "clicked", G_CALLBACK (change_time), self); } /* set up date editing widgets */ priv->date = g_date_time_new_now_local (); endianess = date_endian_get_default (FALSE); reorder_date_widget (endianess, priv); /* Force the direction for the time, so that the time * is presented correctly for RTL languages */ gtk_widget_set_direction (W("table2"), GTK_TEXT_DIR_LTR); gtk_combo_box_set_active (GTK_COMBO_BOX (W ("month-combobox")), g_date_time_get_month (priv->date) - 1); g_signal_connect (G_OBJECT (W("month-combobox")), "changed", G_CALLBACK (month_year_changed), self); num_days = g_date_get_days_in_month (g_date_time_get_month (priv->date), g_date_time_get_year (priv->date)); adjustment = (GtkAdjustment*) gtk_adjustment_new (g_date_time_get_day_of_month (priv->date), 1, num_days + 1, 1, 10, 1); gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (W ("day-spinbutton")), adjustment); g_signal_connect (G_OBJECT (W("day-spinbutton")), "value-changed", G_CALLBACK (day_changed), self); adjustment = (GtkAdjustment*) gtk_adjustment_new (g_date_time_get_year (priv->date), G_MINDOUBLE, G_MAXDOUBLE, 1, 10, 1); gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (W ("year-spinbutton")), adjustment); g_signal_connect (G_OBJECT (W("year-spinbutton")), "value-changed", G_CALLBACK (month_year_changed), self); /* set up timezone map */ priv->map = widget = (GtkWidget *) cc_timezone_map_new (); gtk_widget_show (widget); gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (priv->builder, "aspectmap")), widget); gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (gtk_builder_get_object (priv->builder, "datetime-panel"))); /* setup the time itself */ priv->clock_tracker = g_object_new (GNOME_TYPE_WALL_CLOCK, NULL); g_signal_connect (priv->clock_tracker, "notify::clock", G_CALLBACK (on_clock_changed), self); priv->settings = g_settings_new (CLOCK_SCHEMA); clock_settings_changed_cb (priv->settings, CLOCK_FORMAT_KEY, self); g_signal_connect (priv->settings, "changed::" CLOCK_FORMAT_KEY, G_CALLBACK (clock_settings_changed_cb), self); g_signal_connect (W("24h_button"), "notify::active", G_CALLBACK (change_clock_settings), self); update_time (self); priv->locations = (GtkTreeModel*) gtk_builder_get_object (priv->builder, "region-liststore"); load_regions_model (GTK_LIST_STORE (priv->locations), GTK_LIST_STORE (gtk_builder_get_object (priv->builder, "city-liststore"))); city_modelfilter = GTK_TREE_MODEL_FILTER (gtk_builder_get_object (priv->builder, "city-modelfilter")); widget = (GtkWidget*) gtk_builder_get_object (priv->builder, "region_combobox"); city_modelsort = GTK_TREE_MODEL_SORT (gtk_builder_get_object (priv->builder, "city-modelsort")); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (city_modelsort), CITY_COL_CITY_TRANSLATED, GTK_SORT_ASCENDING); gtk_tree_model_filter_set_visible_func (city_modelfilter, (GtkTreeModelFilterVisibleFunc) city_model_filter_func, widget, NULL); /* After the initial setup, so we can be sure that * the model is filled up */ date_time_mechanism_call_get_timezone (priv->dtm, priv->cancellable, get_timezone_cb, self); /* add the lock button */ priv->permission = polkit_permission_new_sync ("org.gnome.settingsdaemon.datetimemechanism.configure", NULL, NULL, NULL); if (priv->permission == NULL) { g_warning ("Your system does not have the '%s' PolicyKit files installed. Please check your installation", "org.gnome.settingsdaemon.datetimemechanism.configure"); return; } g_signal_connect (priv->permission, "notify", G_CALLBACK (on_permission_changed), self); on_permission_changed (priv->permission, NULL, self); }
static void cc_date_time_panel_init (CcDateTimePanel *self) { CcDateTimePanelPrivate *priv; GtkWidget *widget; GError *error; GtkTreeModelSort *city_modelsort; int ret; const char *date_grid_name; char *tmp; priv = self->priv = DATE_TIME_PANEL_PRIVATE (self); g_resources_register (cc_datetime_get_resource ()); priv->cancellable = g_cancellable_new (); error = NULL; priv->dtm = timedate1_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, "org.freedesktop.timedate1", "/org/freedesktop/timedate1", priv->cancellable, &error); if (priv->dtm == NULL) { g_warning ("could not get proxy for DateTimeMechanism: %s", error->message); g_clear_error (&error); return; } priv->builder = gtk_builder_new (); ret = gtk_builder_add_from_resource (priv->builder, "/org/gnome/control-center/datetime/datetime.ui", &error); if (ret == 0) { g_warning ("Could not load ui: %s", error ? error->message : "No reason"); if (error) g_error_free (error); return; } switch (date_endian_get_default (FALSE)) { case DATE_ENDIANESS_BIG: date_grid_name = "big"; break; case DATE_ENDIANESS_LITTLE: date_grid_name = "little"; break; case DATE_ENDIANESS_MIDDLE: date_grid_name = "middle"; break; case DATE_ENDIANESS_YDM: date_grid_name = "ydm"; break; default: g_assert_not_reached (); } tmp = g_strdup_printf ("/org/gnome/control-center/datetime/%s.ui", date_grid_name); ret = gtk_builder_add_from_resource (priv->builder, tmp, NULL); g_free (tmp); gtk_box_pack_end (GTK_BOX (W ("time-box")), W ("date_grid"), FALSE, TRUE, 0); /* add the lock button */ priv->permission = polkit_permission_new_sync (DATETIME_PERMISSION, NULL, NULL, NULL); if (priv->permission != NULL) { g_signal_connect (priv->permission, "notify", G_CALLBACK (on_permission_changed), self); on_permission_changed (priv->permission, NULL, self); } else { g_warning ("Your system does not have the '%s' PolicyKit files installed. Please check your installation", DATETIME_PERMISSION); } priv->date = g_date_time_new_now_local (); /* Top level windows from GtkBuilder that need to be destroyed explicitly */ priv->toplevels = g_list_append (priv->toplevels, W ("datetime-dialog")); priv->toplevels = g_list_append (priv->toplevels, W ("timezone-dialog")); setup_timezone_dialog (self); setup_datetime_dialog (self); setup_listbox (self, W ("listbox1")); setup_listbox (self, W ("listbox2")); /* set up network time switch */ bind_switch_to_row (self, W ("network_time_switch"), W ("datetime-button")); g_object_bind_property (priv->dtm, "ntp", W ("network_time_switch"), "active", G_BINDING_SYNC_CREATE); g_signal_connect (W("network_time_switch"), "notify::active", G_CALLBACK (change_ntp), self); gtk_widget_set_visible (W ("auto-datetime-row"), is_ntp_available (self)); /* Timezone settings */ bind_switch_to_row (self, W ("auto_timezone_switch"), W ("timezone-button")); priv->datetime_settings = g_settings_new (DATETIME_SCHEMA); g_settings_bind (priv->datetime_settings, AUTO_TIMEZONE_KEY, W ("auto_timezone_switch"), "active", G_SETTINGS_BIND_DEFAULT); /* Clock settings */ priv->clock_settings = g_settings_new (CLOCK_SCHEMA); widget = W ("vbox_datetime"); gtk_container_add (GTK_CONTAINER (self), widget); /* setup the time itself */ priv->clock_tracker = g_object_new (GNOME_TYPE_WALL_CLOCK, NULL); g_signal_connect (priv->clock_tracker, "notify::clock", G_CALLBACK (on_clock_changed), self); clock_settings_changed_cb (priv->clock_settings, CLOCK_FORMAT_KEY, self); g_signal_connect (priv->clock_settings, "changed::" CLOCK_FORMAT_KEY, G_CALLBACK (clock_settings_changed_cb), self); g_signal_connect (W("format_combobox"), "notify::active-id", G_CALLBACK (change_clock_settings), self); update_time (self); load_regions_model (GTK_LIST_STORE (gtk_builder_get_object (priv->builder, "city-liststore"))); city_modelsort = GTK_TREE_MODEL_SORT (gtk_builder_get_object (priv->builder, "city-modelsort")); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (city_modelsort), CITY_COL_CITY_HUMAN_READABLE, GTK_SORT_ASCENDING); /* After the initial setup, so we can be sure that * the model is filled up */ get_initial_timezone (self); widget = (GtkWidget*) gtk_builder_get_object (self->priv->builder, "timezone-searchentry"); g_signal_connect (gtk_entry_get_completion (GTK_ENTRY (widget)), "match-selected", G_CALLBACK (city_changed_cb), self); g_signal_connect (self->priv->map, "location-changed", G_CALLBACK (location_changed_cb), self); /* Watch changes of timedated remote service properties */ g_signal_connect (priv->dtm, "g-properties-changed", G_CALLBACK (on_timedated_properties_changed), self); g_signal_connect_swapped (priv->dtm, "notify::can-ntp", G_CALLBACK (on_can_ntp_changed), self); g_signal_connect_swapped (priv->dtm, "notify::timezone", G_CALLBACK (on_timezone_changed), self); /* We ignore UTC <--> LocalRTC changes at the moment */ priv->filechooser_settings = g_settings_new (FILECHOOSER_SCHEMA); }