static void droppable_group_set_property (GObject *gobject, guint prop_id, const GValue *value, GParamSpec *pspec) { MnpClockArea *group = (MnpClockArea *) gobject; switch (prop_id) { case DROP_PROP_ENABLED: group->priv->is_enabled = g_value_get_boolean (value); if (group->priv->is_enabled) mx_droppable_enable (MX_DROPPABLE (gobject)); else mx_droppable_disable (MX_DROPPABLE (gobject)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; } }
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); }
int main (int argc, char *argv[]) { ClutterActor *stage; ClutterActor *draggable, *droppable; ClutterColor rect_color1 = { 146, 123, 81, 255 }; ClutterColor rect_color2 = { 128, 195, 28, 255 }; ClutterColor rect_color3 = { 255, 122, 2, 255 }; ClutterColor rect_color4 = { 141, 195, 233, 255 }; if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) return 1; stage = clutter_stage_get_default (); clutter_stage_set_title (CLUTTER_STAGE (stage), "Droppable Example"); clutter_actor_set_size (stage, 800, 600); droppable = g_object_new (DROPPABLE_TYPE_GROUP, NULL); clutter_container_add_actor (CLUTTER_CONTAINER (stage), droppable); clutter_actor_set_position (droppable, 500, 50); clutter_actor_set_reactive (droppable, TRUE); clutter_actor_set_name (droppable, "Drop Target 1"); mx_droppable_enable (MX_DROPPABLE (droppable)); droppable = g_object_new (DROPPABLE_TYPE_GROUP, NULL); clutter_container_add_actor (CLUTTER_CONTAINER (stage), droppable); clutter_actor_set_position (droppable, 500, 350); clutter_actor_set_reactive (droppable, TRUE); clutter_actor_set_name (droppable, "Drop Target 2"); mx_droppable_enable (MX_DROPPABLE (droppable)); draggable = g_object_new (DRAGGABLE_TYPE_RECTANGLE, "color", &rect_color1, NULL); clutter_container_add_actor (CLUTTER_CONTAINER (stage), draggable); clutter_actor_set_size (draggable, 50, 50); clutter_actor_set_position (draggable, 75, 250); clutter_actor_set_reactive (draggable, TRUE); mx_draggable_enable (MX_DRAGGABLE (draggable)); draggable = g_object_new (DRAGGABLE_TYPE_RECTANGLE, "color", &rect_color2, NULL); clutter_container_add_actor (CLUTTER_CONTAINER (stage), draggable); clutter_actor_set_size (draggable, 50, 50); clutter_actor_set_position (draggable, 125, 250); clutter_actor_set_reactive (draggable, TRUE); mx_draggable_enable (MX_DRAGGABLE (draggable)); draggable = g_object_new (DRAGGABLE_TYPE_RECTANGLE, "color", &rect_color3, NULL); clutter_container_add_actor (CLUTTER_CONTAINER (stage), draggable); clutter_actor_set_size (draggable, 50, 50); clutter_actor_set_position (draggable, 75, 300); clutter_actor_set_reactive (draggable, TRUE); mx_draggable_enable (MX_DRAGGABLE (draggable)); draggable = g_object_new (DRAGGABLE_TYPE_RECTANGLE, "color", &rect_color4, NULL); clutter_container_add_actor (CLUTTER_CONTAINER (stage), draggable); clutter_actor_set_size (draggable, 50, 50); clutter_actor_set_position (draggable, 125, 300); clutter_actor_set_reactive (draggable, TRUE); mx_draggable_enable (MX_DRAGGABLE (draggable)); clutter_actor_show_all (stage); clutter_main (); return EXIT_SUCCESS; }