int location_geoclue_start(location_geoclue_state_t *state) { if (state->provider && state->provider_path) { state->position = geoclue_position_new(state->provider, state->provider_path); } else { GError *error = NULL; GeoclueMaster *master = geoclue_master_get_default(); GeoclueMasterClient *client = geoclue_master_create_client(master, NULL, &error); g_object_unref(master); if (client == NULL) { g_printerr(_("Unable to obtain master client: %s\n"), error->message); g_error_free(error); return -1; } if (!geoclue_master_client_set_requirements(client, GEOCLUE_ACCURACY_LEVEL_REGION, 0, FALSE, GEOCLUE_RESOURCE_NETWORK, &error)) { g_printerr(_("Can't set requirements for master: %s\n"), error->message); g_error_free(error); g_object_unref(client); return -1; } state->position = geoclue_master_client_create_position(client, NULL); g_object_unref(client); } gchar *name = NULL; if (geoclue_provider_get_provider_info(GEOCLUE_PROVIDER(state->position), &name, NULL, NULL)) { fprintf(stdout, _("Started Geoclue provider `%s'.\n"), name); g_free(name); } else { fputs(_("Could not find a usable Geoclue provider.\n"), stderr); fputs(_("Try setting name and path to specify which to use.\n"), stderr); return -1; } return 0; }
int main (int argc, char** argv) { gchar *service, *path; GeocluePosition *pos = NULL; GeocluePositionFields fields; int timestamp; double lat, lon; GeoclueAccuracy *accuracy = NULL; GMainLoop *mainloop; GError *error = NULL; g_type_init(); if (argc < 2 || argc % 2 != 0) { g_printerr ("Usage:\n position-example <provider_name> [option value]\n"); return 1; } g_print ("Using provider '%s'\n", argv[1]); service = g_strdup_printf ("org.freedesktop.Geoclue.Providers.%s", argv[1]); path = g_strdup_printf ("/org/freedesktop/Geoclue/Providers/%s", argv[1]); mainloop = g_main_loop_new (NULL, FALSE); /* Create new GeocluePosition */ pos = geoclue_position_new (service, path); if (pos == NULL) { g_printerr ("Error while creating GeocluePosition object.\n"); return 1; } g_free (service); g_free (path); if (argc > 2) { GHashTable *options; options = parse_options (argc, argv); if (!geoclue_provider_set_options (GEOCLUE_PROVIDER (pos), options, &error)) { g_printerr ("Error setting options: %s\n", error->message); g_error_free (error); error = NULL; } g_hash_table_destroy (options); } /* Query current position. We're not interested in altitude this time, so leave it NULL. Same can be done with all other arguments that aren't interesting to the client */ fields = geoclue_position_get_position (pos, ×tamp, &lat, &lon, NULL, &accuracy, &error); if (error) { g_printerr ("Error getting position: %s\n", error->message); g_error_free (error); g_object_unref (pos); return 1; } /* Print out coordinates if they are valid */ if (fields & GEOCLUE_POSITION_FIELDS_LATITUDE && fields & GEOCLUE_POSITION_FIELDS_LONGITUDE) { GeoclueAccuracyLevel level; double horiz_acc; geoclue_accuracy_get_details (accuracy, &level, &horiz_acc, NULL); g_print ("Current position:\n"); g_print ("\t%f, %f\n", lat, lon); g_print ("\tAccuracy level %d (%.0f meters)\n", level, horiz_acc); } else { g_print ("Latitude and longitude not available.\n"); } geoclue_accuracy_free (accuracy); g_signal_connect (G_OBJECT (pos), "position-changed", G_CALLBACK (position_changed_cb), NULL); g_main_loop_run (mainloop); return 0; }
static void mnp_world_clock_construct (MnpWorldClock *world_clock) { ClutterActor *entry, *box, *stage; MxBoxLayout *table = (MxBoxLayout *)world_clock; gfloat width, height; MnpWorldClockPrivate *priv = GET_PRIVATE (world_clock); stage = priv->stage; priv->location_tile = FALSE; mx_box_layout_set_orientation ((MxBoxLayout *)world_clock, MX_ORIENTATION_VERTICAL); mx_box_layout_set_spacing ((MxBoxLayout *)world_clock, 0); clutter_actor_set_name (CLUTTER_ACTOR(world_clock), "TimePane"); construct_heading_and_top_area (world_clock); priv->completion_timeout = 0; /* Search Entry */ box = mx_box_layout_new (); mx_box_layout_set_enable_animations ((MxBoxLayout *)box, TRUE); mx_box_layout_set_orientation ((MxBoxLayout *)box, MX_ORIENTATION_HORIZONTAL); mx_box_layout_set_spacing ((MxBoxLayout *)box, 4); priv->entry_box = box; mx_stylable_set_style_class (MX_STYLABLE(box), "ZoneSearchEntryBox"); entry = mx_entry_new (); mx_stylable_set_style_class (MX_STYLABLE (entry), "ZoneSearchEntry"); priv->search_location = (MxEntry *)entry; mx_entry_set_hint_text (MX_ENTRY (entry), _("Enter a country or city")); mx_entry_set_secondary_icon_from_file (MX_ENTRY (entry), THEMEDIR"/edit-clear.png"); g_signal_connect (entry, "secondary-icon-clicked", G_CALLBACK (clear_btn_clicked_cb), world_clock); g_signal_connect (G_OBJECT (entry), "notify::text", G_CALLBACK (text_changed_cb), world_clock); clutter_actor_get_size (entry, &width, &height); clutter_actor_set_size (entry, width+10, -1); mx_box_layout_add_actor ((MxBoxLayout *)box, entry, 0); clutter_container_child_set (CLUTTER_CONTAINER (box), entry, "expand", FALSE, "y-fill", FALSE, "x-fill", FALSE, "y-align", MX_ALIGN_MIDDLE, "x-align", MX_ALIGN_START, NULL); priv->add_location = mx_button_new (); mx_button_set_label ((MxButton *)priv->add_location, _("Add")); mx_stylable_set_style_class (MX_STYLABLE(priv->add_location), "ZoneSearchEntryAddButton"); /* mx_box_layout_add_actor ((MxBoxLayout *)box, priv->add_location, 1); */ /* g_signal_connect (priv->add_location, "clicked", G_CALLBACK (add_location_clicked_cb), world_clock); */ /*clutter_container_child_set (CLUTTER_CONTAINER (box), priv->add_location, "expand", FALSE, "y-fill", FALSE, "y-align", MX_ALIGN_MIDDLE, NULL);*/ mx_box_layout_add_actor (MX_BOX_LAYOUT(priv->widget_box), box, -1); clutter_container_child_set (CLUTTER_CONTAINER (priv->widget_box), box, "expand", FALSE, "y-fill", FALSE, "x-fill", FALSE, "x-align", MX_ALIGN_START, NULL); /* Prep GeoClue */ priv->geo_position = geoclue_position_new ("org.freedesktop.Geoclue.Providers.Hostip", "/org/freedesktop/Geoclue/Providers/Hostip"); priv->geo_geocode = geoclue_geocode_new ("org.freedesktop.Geoclue.Providers.Yahoo", "/org/freedesktop/Geoclue/Providers/Yahoo"); priv->geo_reverse_geocode = geoclue_reverse_geocode_new ("org.freedesktop.Geoclue.Providers.Nominatim", "/org/freedesktop/Geoclue/Providers/Nominatim"); geoclue_position_get_position_async (priv->geo_position, mnp_wc_get_position_cb, world_clock); /* Clock Area */ priv->area = mnp_clock_area_new (); g_signal_connect (priv->area, "time-changed", G_CALLBACK(time_changed), world_clock); clutter_actor_set_size ((ClutterActor *)priv->area, 300, -1); clutter_actor_set_reactive ((ClutterActor *)priv->area, TRUE); clutter_actor_set_name ((ClutterActor *)priv->area, "WorldClockArea"); clutter_container_add_actor ((ClutterContainer *)stage, (ClutterActor *)priv->area); clutter_actor_lower_bottom ((ClutterActor *)priv->area); mx_droppable_enable ((MxDroppable *)priv->area); g_object_ref ((GObject *)priv->area); clutter_container_remove_actor ((ClutterContainer *)stage, (ClutterActor *)priv->area); mx_box_layout_add_actor ((MxBoxLayout *) table, (ClutterActor *)priv->area, -1); clutter_container_child_set (CLUTTER_CONTAINER (table), (ClutterActor *)priv->area, "expand", TRUE, "y-fill", TRUE, "x-fill", TRUE, NULL); priv->zones = mnp_load_zones (); mnp_clock_area_refresh_time (priv->area, TRUE); mnp_clock_area_set_zone_remove_cb (priv->area, (ZoneRemovedFunc) zone_removed_cb, (gpointer)world_clock); mnp_clock_area_set_zone_reordered_cb (priv->area, (ClockZoneReorderedFunc) zone_reordered_cb, (gpointer)world_clock); if (priv->zones->len) { int i=0; for (i=0; i<priv->zones->len; i++) { MnpZoneLocation *loc = (MnpZoneLocation *)priv->zones->pdata[i]; loc->local = FALSE; MnpClockTile *tile = mnp_clock_tile_new (loc, mnp_clock_area_get_time(priv->area), FALSE); mnp_clock_area_add_tile (priv->area, tile); } if (priv->zones->len >= 4) clutter_actor_hide (priv->entry_box); } /* div = clutter_texture_new_from_file (SINGLE_DIV_LINE, NULL); mx_box_layout_add_actor (MX_BOX_LAYOUT(world_clock), div, -1); */ box = mx_box_layout_new (); clutter_actor_set_name (box, "DateTimeLauncherBox"); priv->launcher_box = box; mx_box_layout_set_orientation ((MxBoxLayout *)box, MX_ORIENTATION_VERTICAL); mx_box_layout_set_spacing ((MxBoxLayout *)box, 6); priv->launcher = mx_button_new (); mx_button_set_label ((MxButton *) priv->launcher, _("Set Time & Date")); mx_stylable_set_style_class (MX_STYLABLE(priv->launcher), "DateTimeLauncherButton"); mx_box_layout_add_actor ((MxBoxLayout *)box, priv->launcher, -1); clutter_container_child_set (CLUTTER_CONTAINER (box), (ClutterActor *)priv->launcher, "expand", FALSE, "y-fill", FALSE, "x-fill", FALSE, "x-align", MX_ALIGN_END, NULL); mx_box_layout_add_actor ((MxBoxLayout *)world_clock, box, -1); }