GtkWidget * do_css_blendmodes (GtkWidget *do_widget) { static GtkWidget *window = NULL; if (!window) { GtkStyleProvider *provider; GtkBuilder *builder; builder = gtk_builder_new_from_resource ("/css_blendmodes/blendmodes.ui"); window = WID ("window"); gtk_window_set_transient_for (GTK_WINDOW (window), GTK_WINDOW (do_widget)); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); /* Setup the CSS provider for window */ provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ()); gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); setup_listbox (builder, provider); } if (!gtk_widget_get_visible (window)) gtk_widget_show_all (window); else gtk_widget_destroy (window); return window; }
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); }